summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--driver_nmea0183.c14
-rw-r--r--test/daemon/april6_2019.log.chk2
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}