diff options
author | Gary E. Miller <gem@rellim.com> | 2019-03-13 17:35:49 -0700 |
---|---|---|
committer | Gary E. Miller <gem@rellim.com> | 2019-03-13 17:35:49 -0700 |
commit | 8a1cd3a45e9fb8fdc1916868cc1c74225377a48b (patch) | |
tree | b27396bf238067176983124a6b02148df908a9ea /pseudonmea.c | |
parent | e019ab7646787b3e5542c6027b1003088350186c (diff) | |
download | gpsd-8a1cd3a45e9fb8fdc1916868cc1c74225377a48b.tar.gz |
psuedonmea: Make $GPGBS match NMEA 3.0 spec
Diffstat (limited to 'pseudonmea.c')
-rw-r--r-- | pseudonmea.c | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/pseudonmea.c b/pseudonmea.c index e86b686f..cb7c9ab3 100644 --- a/pseudonmea.c +++ b/pseudonmea.c @@ -206,29 +206,34 @@ static void gpsd_binary_quality_dump(struct gps_device_t *session, } nmea_add_checksum(bufp2); } - if (isfinite(session->gpsdata.fix.epx) != 0 - && isfinite(session->gpsdata.fix.epy) != 0 - && isfinite(session->gpsdata.fix.epv) != 0 - && isfinite(session->gpsdata.epe) != 0) { + + /* create $GPGBS + * Not really kosher, not have enough info to compute the RAIM + * + * If anyone uses this it might be nice to report partial data + * instead of all or nothing. */ + if (0 != isfinite(session->gpsdata.fix.epx) && + 0 != isfinite(session->gpsdata.fix.epy) && + 0 != isfinite(session->gpsdata.fix.epv) && + 0 != isfinite(session->gpsdata.epe) && + 0 != isfinite(session->gpsdata.fix.time)) { struct tm tm; - time_t intfixtime; + double integral; + time_t integral_time; + double fractional = modf(session->gpsdata.fix.time, &integral); + integral_time = (time_t) integral; + + (void)gmtime_r(&integral_time, &tm); - tm.tm_hour = tm.tm_min = tm.tm_sec = 0; - if (0 != isfinite(session->gpsdata.fix.time)) { - intfixtime = (time_t) session->gpsdata.fix.time; - (void)gmtime_r(&intfixtime, &tm); - } bufp2 = bufp + strlen(bufp); -#define ZEROIZE(x) (isfinite(x)==0 ? 0.0 : x) str_appendf(bufp, len, - "$GPGBS,%02d%02d%02d,%.2f,M,%.2f,M,%.2f,M", - tm.tm_hour, tm.tm_min, tm.tm_sec, - ZEROIZE(session->gpsdata.fix.epx), - ZEROIZE(session->gpsdata.fix.epy), - ZEROIZE(session->gpsdata.fix.epv)); + "$GPGBS,%02d%02d%05.2f,%.3f,%.3f,%.3f,,,,", + tm.tm_hour, tm.tm_min, tm.tm_sec + fractional, + session->gpsdata.fix.epx, + session->gpsdata.fix.epy, + session->gpsdata.fix.epv); nmea_add_checksum(bufp2); } -#undef ZEROIZE } static void gpsd_binary_time_dump(struct gps_device_t *session, |