static void gps_empty_upload_cb( gpointer layer_and_vlp[2] );
static void gps_empty_download_cb( gpointer layer_and_vlp[2] );
static void gps_empty_all_cb( gpointer layer_and_vlp[2] );
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
static void gps_empty_realtime_cb( gpointer layer_and_vlp[2] );
static void gps_start_stop_tracking_cb( gpointer layer_and_vlp[2] );
static void realtime_tracking_draw(VikGpsLayer *vgl, VikViewport *vp);
GtkWidget *progress_label;
GtkWidget *trk_label;
VikViewport *vvp;
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
gboolean realtime_tracking;
#endif
} GpsSession;
static gchar *params_groups[] = {
"Data Mode",
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
"Realtime Tracking Mode",
#endif
};
enum {GROUP_DATA_MODE, GROUP_REALTIME_MODE};
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
static gchar *params_vehicle_position[] = {
"Keep vehicle at center",
"Keep vehicle on screen",
{ "gps_protocol", VIK_LAYER_PARAM_UINT, GROUP_DATA_MODE, N_("GPS Protocol:"), VIK_LAYER_WIDGET_COMBOBOX, params_protocols, NULL},
{ "gps_port", VIK_LAYER_PARAM_STRING, GROUP_DATA_MODE, N_("Serial Port:"), VIK_LAYER_WIDGET_COMBOBOX, params_ports, NULL},
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
{ "record_tracking", VIK_LAYER_PARAM_BOOLEAN, GROUP_REALTIME_MODE, N_("Recording tracks"), VIK_LAYER_WIDGET_CHECKBUTTON},
{ "center_start_tracking", VIK_LAYER_PARAM_BOOLEAN, GROUP_REALTIME_MODE, N_("Jump to current position on start"), VIK_LAYER_WIDGET_CHECKBUTTON},
{ "moving_map_method", VIK_LAYER_PARAM_UINT, GROUP_REALTIME_MODE, N_("Moving Map Method:"), VIK_LAYER_WIDGET_RADIOGROUP_STATIC, params_vehicle_position, NULL},
};
enum {
PARAM_PROTOCOL=0, PARAM_PORT,
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
PARAM_REALTIME_REC, PARAM_REALTIME_CENTER_START, PARAM_VEHICLE_POSITION, PARAM_GPSD_HOST, PARAM_GPSD_PORT, PARAM_GPSD_RETRY_INTERVAL,
#endif /* VIK_CONFIG_REALTIME_GPS_TRACKING */
NUM_PARAMS};
};
enum {TRW_DOWNLOAD=0, TRW_UPLOAD,
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
TRW_REALTIME,
#endif
NUM_TRW};
static gchar * trw_names[] = {
N_("GPS Download"), N_("GPS Upload"),
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
N_("GPS Realtime Tracking"),
#endif
};
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
typedef struct {
struct gps_data_t gpsd;
VikGpsLayer *vgl;
VikTrwLayer * trw_children[NUM_TRW];
GList * children; /* used only for writing file */
int cur_read_child; /* used only for reading file */
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
VglGpsd *vgpsd;
gboolean realtime_tracking; /* set/reset only by the callback */
gboolean first_realtime_trackpoint;
else
g_warning(_("Unknown serial port device"));
break;
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
case PARAM_GPSD_HOST:
if (vgl->gpsd_host)
g_free(vgl->gpsd_host);
rv.s = vgl->serial_port;
g_debug("%s: %s", __FUNCTION__, rv.s);
break;
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
case PARAM_GPSD_HOST:
rv.s = vgl->gpsd_host ? vgl->gpsd_host : "";
break;
vgl->children = NULL;
vgl->cur_read_child = 0;
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
vgl->realtime_tracking = FALSE;
vgl->first_realtime_trackpoint = FALSE;
vgl->vgpsd = NULL;
if (!vik_viewport_get_half_drawn( VIK_VIEWPORT(data)))
vik_layer_draw ( vl, data );
}
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
if (vgl->realtime_tracking) {
if (VIK_LAYER(vgl) == trigger) {
if ( vik_viewport_get_half_drawn ( VIK_VIEWPORT(data) ) ) {
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
gtk_widget_show ( item );
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
item = gtk_menu_item_new_with_mnemonic ( vgl->realtime_tracking ?
"_Stop Realtime Tracking" :
"_Start Realtime Tracking" );
disconnect_layer_signal(VIK_LAYER(vgl->trw_children[i]), vgl);
g_object_unref(vgl->trw_children[i]);
}
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
if (vgl->realtime_track_gc != NULL)
g_object_unref(vgl->realtime_track_gc);
if (vgl->realtime_track_bg_gc != NULL)
gtk_dialog_set_response_sensitive ( GTK_DIALOG(sess->dialog), GTK_RESPONSE_REJECT, FALSE );
/* Do not change the view if we are following the current GPS position */
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
if (!sess->realtime_tracking)
#endif
{
(dir == GPS_DOWN) ? 'i' : 'o', protocols_args[proto]);
sess->window_title = (dir == GPS_DOWN) ? _("GPS Download") : _("GPS Upload");
sess->vvp = vvp;
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
sess->realtime_tracking = tracking;
#endif
sess->dialog = gtk_dialog_new_with_buttons ( "", VIK_GTK_WINDOW_FROM_LAYER(vtl), 0, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL );
VikTrwLayer *vtl = vgl->trw_children[TRW_DOWNLOAD];
VikWindow *vw = VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vgl));
VikViewport *vvp = vik_window_viewport(vw);
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
gps_comm(vtl, GPS_DOWN, vgl->protocol_id, vgl->serial_port, vgl->realtime_tracking, vvp);
#else
gps_comm(vtl, GPS_DOWN, vgl->protocol_id, vgl->serial_port, FALSE, vvp);
vik_trw_layer_delete_all_tracks ( vgl-> trw_children[TRW_DOWNLOAD]);
}
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
static void gps_empty_realtime_cb( gpointer layer_and_vlp[2] )
{
VikGpsLayer *vgl = (VikGpsLayer *)layer_and_vlp[0];
vik_trw_layer_delete_all_tracks ( vgl-> trw_children[TRW_UPLOAD]);
vik_trw_layer_delete_all_waypoints ( vgl-> trw_children[TRW_DOWNLOAD]);
vik_trw_layer_delete_all_tracks ( vgl-> trw_children[TRW_DOWNLOAD]);
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
vik_trw_layer_delete_all_waypoints ( vgl-> trw_children[TRW_REALTIME]);
vik_trw_layer_delete_all_tracks ( vgl-> trw_children[TRW_REALTIME]);
#endif
}
-#ifdef VIK_CONFIG_REALTIME_GPS_TRACKING
+#if defined (VIK_CONFIG_REALTIME_GPS_TRACKING) && defined (GPSD_API_MAJOR_VERSION)
static void rt_gpsd_disconnect(VikGpsLayer *vgl);
static gboolean rt_gpsd_connect(VikGpsLayer *vgl, gboolean ask_if_failed);
static gboolean rt_gpsd_try_connect(gpointer *data)
{
VikGpsLayer *vgl = (VikGpsLayer *)data;
-#ifndef HAVE_GPS_OPEN_R
+#if GPSD_API_MAJOR_VERSION == 3
struct gps_data_t *gpsd = gps_open(vgl->gpsd_host, vgl->gpsd_port);
if (gpsd == NULL) {
-#else
+#elif GPSD_API_MAJOR_VERSION == 4
vgl->vgpsd = g_malloc(sizeof(VglGpsd));
if (gps_open_r(vgl->gpsd_host, vgl->gpsd_port, /*(struct gps_data_t *)*/vgl->vgpsd) != 0) {
+#else
+ // Delibrately break compilation...
#endif
g_warning("Failed to connect to gpsd at %s (port %s). Will retry in %d seconds",
vgl->gpsd_host, vgl->gpsd_port, vgl->gpsd_retry_interval);
return TRUE; /* keep timer running */
}
-#ifndef HAVE_GPS_OPEN_R
+#if GPSD_API_MAJOR_VERSION == 3
vgl->vgpsd = realloc(gpsd, sizeof(VglGpsd));
#endif
vgl->vgpsd->vgl = vgl;
vgl->realtime_io_channel = g_io_channel_unix_new(vgl->vgpsd->gpsd.gps_fd);
vgl->realtime_io_watch_id = g_io_add_watch( vgl->realtime_io_channel,
G_IO_IN | G_IO_ERR | G_IO_HUP, gpsd_data_available, vgl);
-#if HAVE_GPS_STREAM
- gps_stream(&vgl->vgpsd->gpsd, WATCH_ENABLE, NULL);
-#else
+
+#if GPSD_API_MAJOR_VERSION == 3
gps_query(&vgl->vgpsd->gpsd, "w+x");
#endif
+#if GPSD_API_MAJOR_VERSION == 4
+ gps_stream(&vgl->vgpsd->gpsd, WATCH_ENABLE, NULL);
+#endif
+
return FALSE; /* no longer called by timeout */
}
}
if (vgl->vgpsd) {
gps_close(&vgl->vgpsd->gpsd);
-#ifdef HAVE_GPS_OPEN_R
- g_free(vgl->vgpsd);
-#else
+#if GPSD_API_MAJOR_VERSION == 3
free(vgl->vgpsd);
+#elif GPSD_API_MAJOR_VERSION == 4
+ g_free(vgl->vgpsd);
#endif
vgl->vgpsd = NULL;
}