diff options
author | Gary E. Miller <gem@rellim.com> | 2019-03-15 16:13:44 -0700 |
---|---|---|
committer | Gary E. Miller <gem@rellim.com> | 2019-03-15 16:13:44 -0700 |
commit | 823eee86a19e412920fe25a3d7f4f981bcb298c0 (patch) | |
tree | fd0593c3c66828bef4b0b7b82b2c2f825d2630a4 /driver_nmea0183.c | |
parent | 6821dfd58695973055ad8f6e6e609b076ba2b8d6 (diff) | |
download | gpsd-823eee86a19e412920fe25a3d7f4f981bcb298c0.tar.gz |
driver_nmea0183: Handle 2099 on 32-bits as 1999.
The 32-bit hosts will fail on 2038...
Diffstat (limited to 'driver_nmea0183.c')
-rw-r--r-- | driver_nmea0183.c | 14 |
1 files changed, 13 insertions, 1 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) |