summaryrefslogtreecommitdiff
path: root/driver_nmea0183.c
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2019-03-15 16:13:44 -0700
committerGary E. Miller <gem@rellim.com>2019-03-15 16:13:44 -0700
commit823eee86a19e412920fe25a3d7f4f981bcb298c0 (patch)
treefd0593c3c66828bef4b0b7b82b2c2f825d2630a4 /driver_nmea0183.c
parent6821dfd58695973055ad8f6e6e609b076ba2b8d6 (diff)
downloadgpsd-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.c14
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)