diff options
-rw-r--r-- | driver_nmea0183.c | 14 | ||||
-rw-r--r-- | test/daemon/april6_2019.log.chk | 2 |
2 files changed, 14 insertions, 2 deletions
diff --git a/driver_nmea0183.c b/driver_nmea0183.c index 62c12288..f115e6e7 100644 --- a/driver_nmea0183.c +++ b/driver_nmea0183.c @@ -166,6 +166,16 @@ static int merge_ddmmyy(char *ddmmyy, struct gps_device_t *session) gpsd_century_update(session, session->context->century + 100); year = (session->context->century + yy); + /* 32 bit systems will break in 2038. + * Telix fails on GPS rollover to 2099, which 32 bit system + * can not handle. So wrap at 2080. That way 64 bit systems + * work until 2080, and 2099 gets reported as 1999. + * since GPS epoch started in 1981, allows for old NMEA to work. + */ + if (2080 < year) { + year -= 100; + } + if ( (1 > mon ) || (12 < mon ) ) { gpsd_log(&session->context->errout, LOG_WARN, "merge_ddmmyy(%s), malformed month\n", ddmmyy); @@ -225,7 +235,7 @@ static void register_fractional_time(const char *tag, const char *fld, session->nmea.this_frac_time = safe_atof(fld); session->nmea.latch_frac_time = true; gpsd_log(&session->context->errout, LOG_DATA, - "%s: registers fractional time %.2f\n", + "%s: registers fractional time %.3f\n", tag, session->nmea.this_frac_time); } } @@ -236,6 +246,8 @@ static void register_fractional_time(const char *tag, const char *fld, * timestamp granularity of GPS is 1/100th of a second. Use this to avoid * naive float comparisons. * + * FIXME: many GPS now report time to .sss. 1/1000th + * **************************************************************************/ #define GPS_TIME_EQUAL(a, b) (fabs((a) - (b)) < 0.01) diff --git a/test/daemon/april6_2019.log.chk b/test/daemon/april6_2019.log.chk index a13b43ca..ef6a0a25 100644 --- a/test/daemon/april6_2019.log.chk +++ b/test/daemon/april6_2019.log.chk @@ -3,4 +3,4 @@ $GPRMC,,V,,,,,,,,,,N*53 $GPRMC,000231.099,A,4829.0005,N,00022.0015,E,0.15,212.28,2208-1,,,A*73 {"class":"TPV","mode":2,"lat":48.483341667,"lon":0.366691667,"track":212.2800,"speed":0.077}
$GPRMC,000231.42,A,4829.0005,N,00022.0016,E,0.16,212.28,220899,,,A*59 -{"class":"TPV","mode":2,"time":"2099-08-22T00:02:31.420Z","ept":0.005,"lat":48.483341667,"lon":0.366693333,"track":212.2800,"speed":0.082}
+{"class":"TPV","mode":2,"time":"1999-08-22T00:02:31.420Z","ept":0.005,"lat":48.483341667,"lon":0.366693333,"track":212.2800,"speed":0.082}
|