diff options
author | Gary E. Miller <gem@rellim.com> | 2019-03-15 18:22:15 -0700 |
---|---|---|
committer | Gary E. Miller <gem@rellim.com> | 2019-03-15 18:22:15 -0700 |
commit | 5789251f2a814f490cc3b928d8eb4b126e61adc5 (patch) | |
tree | a6bf53d9cf014bc5e3d8b479d23a89bd57cc9171 /driver_nmea0183.c | |
parent | 9ba38bb39d6b7e32e039161485b8d19f99c982e2 (diff) | |
download | gpsd-5789251f2a814f490cc3b928d8eb4b126e61adc5.tar.gz |
driver_nmea0183: Better subseconds in merge_hhmmss().
Might need to change subseconds to integer nanoseconds.
Diffstat (limited to 'driver_nmea0183.c')
-rw-r--r-- | driver_nmea0183.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/driver_nmea0183.c b/driver_nmea0183.c index b835090e..ba367cb0 100644 --- a/driver_nmea0183.c +++ b/driver_nmea0183.c @@ -202,7 +202,7 @@ static int merge_ddmmyy(char *ddmmyy, struct gps_device_t *session) static int merge_hhmmss(char *hhmmss, struct gps_device_t *session) { int old_hour = session->nmea.date.tm_hour; - int i; + int i, sublen; if (NULL == hhmmss) { return 1; @@ -222,8 +222,16 @@ static int merge_hhmmss(char *hhmmss, struct gps_device_t *session) session->nmea.date.tm_mday++; session->nmea.date.tm_min = DD(hhmmss + 2); session->nmea.date.tm_sec = DD(hhmmss + 4); - session->nmea.subseconds = - safe_atof(hhmmss + 4) - session->nmea.date.tm_sec; + + if ('.' == hhmmss[6] && + 0 != isdigit(hhmmss[7])) { + i = atoi(hhmmss + 7); + sublen = strlen(hhmmss + 7); + session->nmea.subseconds = i / pow(10.0, sublen); + } else { + session->nmea.subseconds = 0.0; + } + return 0; } |