summaryrefslogtreecommitdiff
path: root/driver_nmea0183.c
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2019-03-15 18:22:15 -0700
committerGary E. Miller <gem@rellim.com>2019-03-15 18:22:15 -0700
commit5789251f2a814f490cc3b928d8eb4b126e61adc5 (patch)
treea6bf53d9cf014bc5e3d8b479d23a89bd57cc9171 /driver_nmea0183.c
parent9ba38bb39d6b7e32e039161485b8d19f99c982e2 (diff)
downloadgpsd-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.c14
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;
}