diff options
author | Eric S. Raymond <esr@thyrsus.com> | 2012-04-14 11:29:04 -0400 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2012-04-14 11:29:04 -0400 |
commit | 3780d4aa916d911cf28a087cb7ad0c9d245c03e2 (patch) | |
tree | a16204630ae991719096592046a0c12ee44568e1 /subframe.c | |
parent | f69385d2ee1c448843350490b509312109b4e9da (diff) | |
download | gpsd-3780d4aa916d911cf28a087cb7ad0c9d245c03e2.tar.gz |
Leap-second warning status from GPS subframe info it's passed to ntpd.
Patch concept from Michael Tatarinov. Modified to use a session context
member rather than a global.
Diffstat (limited to 'subframe.c')
-rw-r--r-- | subframe.c | 23 |
1 files changed, 15 insertions, 8 deletions
@@ -706,10 +706,7 @@ gps_mask_t gpsd_interpret_subframe(struct gps_device_t *session, subp->sub4_18.DN = (words[8] & 0x0000FF); /* leap second future */ subp->sub4_18.lsf = (int8_t)((words[9] >> 16) & 0x0000FF); - gpsd_report(LOG_INF, - "50B: SF:4-18 leap-seconds:%d lsf:%d WNlsf:%u " - "DN:%d\n", - subp->sub4_18.leap, subp->sub4_18.lsf, subp->sub4_18.WNlsf, subp->sub4_18.DN); + gpsd_report(LOG_PROG, "50B: SF:4-18 a0:%.5g a1:%.5g a2:%.5g a3:%.5g " "b0:%.5g b1:%.5g b2:%.5g b3:%.5g " @@ -723,10 +720,20 @@ gps_mask_t gpsd_interpret_subframe(struct gps_device_t *session, subp->sub4_18.d_tot, subp->sub4_18.WNt, subp->sub4_18.leap, subp->sub4_18.WNlsf, subp->sub4_18.DN, subp->sub4_18.lsf); - if (subp->sub4_18.leap != subp->sub4_18.lsf) { - gpsd_report(LOG_PROG, - "50B: SF:4-18 leap-second change coming\n"); - } + +#ifdef NTPSHM_ENABLE + if ((subp->sub4_18.WNt == subp->sub4_18.WNlsf) && + (subp->sub4_18.DN == 1 )) { + if ( subp->sub4_18.leap < subp->sub4_18.lsf ) + session->context->leap_notify = LEAP_ADDSECOND; + else if ( subp->sub4_18.leap > subp->sub4_18.lsf ) + session->context->leap_notify = LEAP_DELSECOND; + else + session->context->leap_notify = LEAP_NOWARNING; + } else + session->context->leap_notify = LEAP_NOWARNING; +#endif /* NTPSHM_ENABLE */ + session->context->leap_seconds = (int)subp->sub4_18.leap; session->context->valid |= LEAP_SECOND_VALID; break; |