To cope both with libgps18 and libgps19 Index: navit/configure.in =================================================================== --- navit.orig/configure.in 2010-01-17 03:33:23.351880510 +0100 +++ navit/configure.in 2010-01-17 03:33:26.152712378 +0100 @@ -790,7 +790,17 @@ AC_ARG_ENABLE(vehicle-gpsd, [ --disable-vehicle-gpsd disable vehicle type gpsd], vehicle_gpsd=$enableval;vehicle_gpsd_reason="configure parameter") if test "x${vehicle_gpsd}" = xyes then - AC_CHECK_HEADER(gps.h, AC_DEFINE([HAVE_LIBGPS],[],Define to 1 if you have the header file.) GPSD_LIBS="-lgps", vehicle_gpsd=no; vehicle_gpsd_reason="no gps.h" ) + PKG_CHECK_MODULES([GPSD], [libgps], have_libgps="yes", have_libgps="no") + if test "x$have_libgps" = "xyes"; then + AC_DEFINE([HAVE_LIBGPS],[],Define to 1 if you have libgps.) + PKG_CHECK_MODULES([LIBGPS19], [libgps >= 2.90], have_libgps19="yes", have_libgps19="no") + if test "x$have_libgps19" = "xyes"; then + AC_DEFINE([HAVE_LIBGPS19],[],Define to 1 if you have libgps19.) + fi + else + vehicle_gpsd=no; vehicle_gpsd_reason="no libgps" + fi +dnl AC_CHECK_HEADER(gps.h, AC_DEFINE([HAVE_LIBGPS],[],Define to 1 if you have the header file.) GPSD_LIBS="-lgps", vehicle_gpsd=no; vehicle_gpsd_reason="no gps.h" ) fi AC_SUBST(GPSD_CFLAGS) AC_SUBST(GPSD_LIBS) Index: navit/navit/attr_def.h =================================================================== --- navit.orig/navit/attr_def.h 2010-01-17 03:05:32.136219088 +0100 +++ navit/navit/attr_def.h 2010-01-17 03:33:26.152712378 +0100 @@ -231,7 +231,9 @@ ATTR(gc_type) ATTR(layout) ATTR(position_nmea) +#ifndef HAVE_LIBGPS19 ATTR(gpsd_query) +#endif ATTR(on_eof) ATTR(command) ATTR(src) Index: navit/navit/vehicle/gpsd/vehicle_gpsd.c =================================================================== --- navit.orig/navit/vehicle/gpsd/vehicle_gpsd.c 2010-01-17 03:05:32.342468912 +0100 +++ navit/navit/vehicle/gpsd/vehicle_gpsd.c 2010-01-17 03:33:26.152712378 +0100 @@ -36,7 +36,9 @@ static struct vehicle_priv { char *source; +#ifndef HAVE_LIBGPS19 char *gpsd_query; +#endif struct callback_list *cbl; struct callback *cb; struct event_watch *evwatch; @@ -69,8 +71,12 @@ static void vehicle_gpsd_io(struct vehicle_priv *priv); static void +#ifdef HAVE_LIBGPS19 +vehicle_gpsd_callback(struct gps_data_t *data, char *buf, size_t len) +#else vehicle_gpsd_callback(struct gps_data_t *data, char *buf, size_t len, int level) +#endif { char *pos,*nmea_data_buf; int i=0,sats_signal=0; @@ -108,16 +114,32 @@ data->set &= ~ALTITUDE_SET; } if (data->set & SATELLITE_SET) { +#ifdef HAVE_LIBGPS19 + if(data->satellites_visible > 0) { +#else if(data->satellites > 0) { +#endif sats_signal=0; +#ifdef HAVE_LIBGPS19 + for( i=0;isatellites_visible;i++) { +#else for( i=0;isatellites;i++) { +#endif if (data->ss[i] > 0) sats_signal++; } } +#ifdef HAVE_LIBGPS19 + if (priv->sats_used != data->satellites_used || priv->sats != data->satellites_visible || priv->sats_signal != sats_signal ) { +#else if (priv->sats_used != data->satellites_used || priv->sats != data->satellites || priv->sats_signal != sats_signal ) { +#endif priv->sats_used = data->satellites_used; +#ifdef HAVE_LIBGPS19 + priv->sats = data->satellites_visible; +#else priv->sats = data->satellites; +#endif priv->sats_signal = sats_signal; callback_list_call_attr_0(priv->cbl, attr_position_sats); } @@ -135,10 +157,17 @@ priv->fix_time = data->fix.time; data->set &= ~TIME_SET; } +#ifdef HAVE_LIBGPS19 + if (data->set & DOP_SET) { + dbg(1, "pdop : %g\n", data->dop.pdop); + priv->hdop = data->dop.pdop; + data->set &= ~DOP_SET; +#else if (data->set & PDOP_SET) { dbg(1, "pdop : %g\n", data->pdop); priv->hdop = data->hdop; data->set &= ~PDOP_SET; +#endif } if (data->set & LATLON_SET) { priv->geo.lat = data->fix.latitude; @@ -180,7 +209,11 @@ dbg(0,"gps_open failed for '%s'. Retrying in %d seconds. Have you started gpsd?\n", priv->source, priv->retry_interval); return TRUE; } +#ifdef HAVE_LIBGPS19 + gps_stream(priv->gps, WATCH_ENABLE, NULL); +#else gps_query(priv->gps, priv->gpsd_query); +#endif gps_set_raw_hook(priv->gps, vehicle_gpsd_callback); priv->cb = callback_new_1(callback_cast(vehicle_gpsd_io), priv); priv->evwatch = event_add_watch((void *)priv->gps->gps_fd, event_watch_cond_read, priv->cb); @@ -268,8 +301,10 @@ vehicle_gpsd_close(priv); if (priv->source) g_free(priv->source); +#ifndef HAVE_LIBGPS19 if (priv->gpsd_query) g_free(priv->gpsd_query); +#endif g_free(priv); } @@ -350,12 +385,17 @@ *cbl, struct attr **attrs) { struct vehicle_priv *ret; +#ifdef HAVE_LIBGPS19 + struct attr *source, *retry_int; +#else struct attr *source, *query, *retry_int; +#endif dbg(1, "enter\n"); source = attr_search(attrs, NULL, attr_source); ret = g_new0(struct vehicle_priv, 1); ret->source = g_strdup(source->u.str); +#ifndef HAVE_LIBGPS19 query = attr_search(attrs, NULL, attr_gpsd_query); if (query) { ret->gpsd_query = g_strconcat(query->u.str, "\n", NULL); @@ -363,6 +403,7 @@ ret->gpsd_query = g_strdup("w+x\n"); } dbg(1,"Format string for gpsd_query: %s\n",ret->gpsd_query); +#endif retry_int = attr_search(attrs, NULL, attr_retry_interval); if (retry_int) { ret->retry_interval = retry_int->u.num; Index: navit/navit/attr.h =================================================================== --- navit.orig/navit/attr.h 2010-01-17 03:05:32.136219088 +0100 +++ navit/navit/attr.h 2010-01-17 03:33:26.152712378 +0100 @@ -25,6 +25,7 @@ #endif #include "projection.h" +#include "config.h" enum item_type; Index: navit/navit/map/garmin/Makefile.am =================================================================== --- navit.orig/navit/map/garmin/Makefile.am 2010-01-17 03:05:32.168714241 +0100 +++ navit/navit/map/garmin/Makefile.am 2010-01-17 03:33:26.152712378 +0100 @@ -20,7 +20,7 @@ gentypes_SOURCES=gentypes.c gentypes.$(OBJEXT): gentypes.c - $(CC_FOR_BUILD) -I$(top_srcdir)/navit -c -o $@ $< + $(CC_FOR_BUILD) -I$(top_srcdir)/navit -I$(top_srcdir) -c -o $@ $< gentypes$(EXEEXT): $(gentypes_OBJECTS) $(gentypes_DEPENDENCIES) @rm -f gentypes$(EXEEXT)