diff options
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; } |