From efe51a7be0e4ff6b3b14e99696e7a4e25996717f Mon Sep 17 00:00:00 2001 From: Fabrice Fontaine Date: Thu, 7 Jan 2021 08:03:32 +0100 Subject: [PATCH] package/olsr: fix build of pud plugin Fix build of pud plugin which was added with commit 318d160fe5b080e421dc133dff82d5ea2cf7d893 Fixes: - http://autobuild.buildroot.org/results/5b598d728e6aae61b295681b0d7777e83074fecd Signed-off-by: Fabrice Fontaine Signed-off-by: Thomas Petazzoni --- ...ud-adapt-to-API-changes-in-gpsd-3-20.patch | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 package/olsr/0003-pud-adapt-to-API-changes-in-gpsd-3-20.patch diff --git a/package/olsr/0003-pud-adapt-to-API-changes-in-gpsd-3-20.patch b/package/olsr/0003-pud-adapt-to-API-changes-in-gpsd-3-20.patch new file mode 100644 index 0000000000..f97798d605 --- /dev/null +++ b/package/olsr/0003-pud-adapt-to-API-changes-in-gpsd-3-20.patch @@ -0,0 +1,105 @@ +From b2dfb6c27fcf4ddae87b0e99492f4bb8472fa39a Mon Sep 17 00:00:00 2001 +From: Eneas U de Queiroz +Date: Thu, 13 Feb 2020 17:26:41 -0300 +Subject: [PATCH] pud: adapt to API changes in gpsd 3.20 + +The timestamp fields were changed from double to struct timespec, and +the geoid separation field was moved to fix.geoid_sep. + +Signed-off-by: Eneas U de Queiroz + +[Retrieved from: +https://github.com/OLSR/olsrd/commit/b2dfb6c27fcf4ddae87b0e99492f4bb8472fa39a] +Signed-off-by: Fabrice Fontaine +--- + lib/pud/src/gpsdclient.c | 36 ++++++++++++++++++++++++++++++++---- + 1 file changed, 32 insertions(+), 4 deletions(-) + +diff --git a/lib/pud/src/gpsdclient.c b/lib/pud/src/gpsdclient.c +index 9e7fb708d..2a7a26eef 100644 +--- a/lib/pud/src/gpsdclient.c ++++ b/lib/pud/src/gpsdclient.c +@@ -79,6 +79,23 @@ static void gpsdError(const char *s) { + syslog(LOG_ERR, "gpsd error: %s", s); + } + ++#if GPSD_API_MAJOR_VERSION >= 9 ++static double time_as_double(struct timespec *ts) { ++ return (ts->tv_sec + ts->tv_nsec * 1e-9); ++} ++ ++static bool is_online(struct gps_data_t *gpsdata) { ++ return !!gpsdata->online.tv_sec; ++} ++#else ++ ++#define time_as_double(x) *(x) ++ ++static bool is_online(struct gps_data_t *gpsdata) { ++ return !!gpsdata->online; ++} ++#endif ++ + /* standard parsing of a GPS data source spec */ + void gpsdParseSourceSpec(char *arg, GpsDaemon *gpsDaemon) { + if (!arg // +@@ -298,8 +315,8 @@ void nmeaInfoFromGpsd(struct gps_data_t *gpsdata, NmeaInfo *info, struct GpsdCon + 8, // + dev->parity, // + dev->stopbits, // +- dev->cycle, // +- dev->mincycle); ++ time_as_double(&dev->cycle), // ++ time_as_double(&dev->mincycle)); + + connectionTracking->devSeen[i] = true; + connectionTracking->dev[i] = *dev; +@@ -367,11 +384,18 @@ void nmeaInfoFromGpsd(struct gps_data_t *gpsdata, NmeaInfo *info, struct GpsdCon + nmeaInfoSetPresent(&info->present, NMEALIB_PRESENT_SMASK); + + /* date & time */ ++#if GPSD_API_MAJOR_VERSION >= 9 ++ if (gpsdata->fix.time.tv_sec > 0) { ++ struct tm *time = gmtime(&gpsdata->fix.time.tv_sec); ++ unsigned int hsec = (unsigned int) (gpsdata->fix.time.tv_nsec / 10000000); ++#else + if (!isNaN(gpsdata->fix.time)) { + double seconds; + double fraction = modf(fabs(gpsdata->fix.time), &seconds); + long sec = lrint(seconds); + struct tm *time = gmtime(&sec); ++ unsigned int hsec = (unsigned int) lrint(fraction * 100); ++#endif + if (time) { + info->utc.year = (unsigned int) time->tm_year + 1900; + info->utc.mon = (unsigned int) time->tm_mon + 1; +@@ -379,7 +403,7 @@ void nmeaInfoFromGpsd(struct gps_data_t *gpsdata, NmeaInfo *info, struct GpsdCon + info->utc.hour = (unsigned int) time->tm_hour; + info->utc.min = (unsigned int) time->tm_min; + info->utc.sec = (unsigned int) time->tm_sec; +- info->utc.hsec = (unsigned int) lrint(fraction * 100); ++ info->utc.hsec = hsec; + + nmeaInfoSetPresent(&info->present, NMEALIB_PRESENT_UTCDATE | NMEALIB_PRESENT_UTCTIME); + } +@@ -387,7 +411,7 @@ void nmeaInfoFromGpsd(struct gps_data_t *gpsdata, NmeaInfo *info, struct GpsdCon + gpsdata->set &= ~TIME_SET; + + /* sig & fix */ +- if (!gpsdata->online) { ++ if (!is_online(gpsdata)) { + gpsdata->fix.mode = MODE_NO_FIX; + } + +@@ -454,7 +478,11 @@ void nmeaInfoFromGpsd(struct gps_data_t *gpsdata, NmeaInfo *info, struct GpsdCon + if ((gpsdata->fix.mode >= MODE_3D) // + && !isNaN(gpsdata->fix.altitude)) { + info->elevation = gpsdata->fix.altitude; ++#if GPSD_API_MAJOR_VERSION >= 9 ++ info->height = gpsdata->fix.geoid_sep; ++#else + info->height = gpsdata->separation; ++#endif + nmeaInfoSetPresent(&info->present, NMEALIB_PRESENT_ELV | NMEALIB_PRESENT_HEIGHT); + } + gpsdata->set &= ~ALTITUDE_SET; -- 2.30.2