diff -up gpsdrive-2.11/src/gps_handler.c.gpsd296 gpsdrive-2.11/src/gps_handler.c --- gpsdrive-2.11/src/gps_handler.c.gpsd296 2010-06-24 15:53:32.000000000 -0400 +++ gpsdrive-2.11/src/gps_handler.c 2011-08-23 10:43:17.293314786 -0400 @@ -265,6 +265,33 @@ g_print ("--- connecting signal to gps\n static gint gps_timeout_source = 0; static struct gps_data_t *gpsdata; +#if defined( GPSD_API_MAJOR_VERSION ) && ( GPSD_API_MAJOR_VERSION >= 5 ) +static struct gps_data_t gpsdata_buf; +static gpointer gpsdata_hook = NULL; + +int gps_poll(/*@out@*/struct gps_data_t *gpsdata) +/* for backwards compatibility */ +{ + int status = gps_read(gpsdata); + + if (status > 0) + status = 0; + + if ((gpsdata_hook != NULL) && (gpsdata->set & PACKET_SET)) + { + ((void (*)())gpsdata_hook)(gpsdata, NULL, 0); + } + return status; +} + +static void gps_set_raw_hook(struct gps_data_t *g, gpointer cb) +{ + // gps_set_raw_hook() was removed from gpsd-2.96 Instead, clients will simply be + // able to look at the packet buffer directly. (Of course, this is only + // recommended when the PACKET_SET flag is up.) (Done in 2.96~dev.) + gpsdata_hook = cb; +} +#endif /* SYMBOLS USED IN LIBGPS: * @@ -394,7 +421,6 @@ gps_hook_cb (struct gps_data_t *data, gc #endif } - gboolean gps_query_data_cb (gpointer data) { @@ -410,7 +436,11 @@ gps_query_data_cb (gpointer data) */ gps_query (gpsdata, "oys\n"); #else +#if defined( GPSD_API_MAJOR_VERSION ) && ( GPSD_API_MAJOR_VERSION >= 5 ) + if (gps_waiting(gpsdata, 2000000)) +#else if (gps_waiting(gpsdata)) +#endif { gps_poll (gpsdata); } @@ -447,7 +477,16 @@ gpsd_connect (gboolean reconnect) } /* try to open connection */ +#if defined( GPSD_API_MAJOR_VERSION ) && ( GPSD_API_MAJOR_VERSION >= 5 ) + if (!gps_open (local_config.gpsd_server, local_config.gpsd_port, &gpsdata_buf)) + { + gpsdata = &gpsdata_buf; + } else { + gpsdata = NULL; + } +#else gpsdata = gps_open (local_config.gpsd_server, local_config.gpsd_port); +#endif if (!gpsdata) { g_print ("Can't connect to gps daemon on %s:%s, disabling GPS support!\n",