diff options
author | HTJ <address@hidden> | 2016-03-20 21:56:47 +0100 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2016-03-22 18:59:00 -0400 |
commit | d46da8954e81fe8eea6e7411fecfc62f44596033 (patch) | |
tree | 03d6b35bbe15c4d53805ca4aa41d2e63f4642aec | |
parent | 4f4e24d8330cd3b6eeed79dc1bcb6dd387d3581a (diff) | |
download | gpsd-d46da8954e81fe8eea6e7411fecfc62f44596033.tar.gz |
Introduce the flag GOODTIME_IS...
...to mark that the device has a good time even if it does not report
a position fix. Used by the OnCore driver, e.g. when in position hold
mode.
scons check passes
-rw-r--r-- | driver_oncore.c | 4 | ||||
-rw-r--r-- | gpsd.c | 3 | ||||
-rw-r--r-- | gpsd.h-tail | 1 | ||||
-rw-r--r-- | timehint.c | 3 |
4 files changed, 7 insertions, 4 deletions
diff --git a/driver_oncore.c b/driver_oncore.c index f4338b77..43f65f0a 100644 --- a/driver_oncore.c +++ b/driver_oncore.c @@ -176,9 +176,9 @@ oncore_msg_navsol(struct gps_device_t *session, unsigned char *buf, } /* bit 2 of the status word: using for time solution */ if (status & 0x02) - mask |= PPSTIME_IS; + mask |= PPSTIME_IS | GOODTIME_IS; /* - * The PPSTIME_IS mask bit exists distinctly from TIME_SET exactly + * The GOODTIME_IS mask bit exists distinctly from TIME_SET exactly * so an OnCore running in time-service mode (and other GPS clocks) * can signal that it's returning time even though no position fixes * have been available. @@ -1517,7 +1517,8 @@ static void all_reports(struct gps_device_t *device, gps_mask_t changed) */ if ((changed & TIME_SET) == 0) { //gpsd_log(&context.errout, LOG_PROG, "NTP: No time this packet\n"); - } else if ( 0 >= device->fixcnt ) { + } else if ( 0 >= device->fixcnt && + (changed & GOODTIME_IS) == 0) { /* many GPS spew random times until a valid GPS fix */ //gpsd_log(&context.errout, LOG_PROG, "NTP: no fix\n"); } else if (isnan(device->newdata.time)) { diff --git a/gpsd.h-tail b/gpsd.h-tail index a8b9a03b..490a5930 100644 --- a/gpsd.h-tail +++ b/gpsd.h-tail @@ -307,6 +307,7 @@ typedef enum { #define PERR_IS INTERNAL_SET(8) /* PDOP set */ #define PASSTHROUGH_IS INTERNAL_SET(9) /* passthrough mode */ #define EOF_IS INTERNAL_SET(10) /* synthetic EOF */ +#define GOODTIME_IS INTERNAL_SET(11) /* time good even if no pos fix */ #define DATA_IS ~(ONLINE_SET|PACKET_SET|CLEAR_IS|REPORT_IS) typedef unsigned int driver_mask_t; @@ -372,7 +372,8 @@ static char *report_hook(volatile struct pps_thread_t *pps_thread, * for all cases as we have no other general way to know * if PPS is good. */ - if (session->fixcnt <= PPS_MIN_FIXES) + if (session->fixcnt <= PPS_MIN_FIXES && + (session->gpsdata.set & GOODTIME_IS) == 0) return "no fix"; } |