diff options
author | Gary E. Miller <gem@rellim.com> | 2019-03-14 17:59:22 -0700 |
---|---|---|
committer | Gary E. Miller <gem@rellim.com> | 2019-03-14 17:59:22 -0700 |
commit | a7e975cd0273fd90e3c0536dc9da452b5ff8f01b (patch) | |
tree | c901bbeb7272796837d5b2e2a7c2283f03408a90 /driver_nmea0183.c | |
parent | 6e2d5c4df2cbc8f3b2b2dfa3229e24a2ef247d77 (diff) | |
download | gpsd-a7e975cd0273fd90e3c0536dc9da452b5ff8f01b.tar.gz |
driver_nmea0183: xxGLL,V now sets MODE_NO_FIX.
Better detection of NO FIX state.
Diffstat (limited to 'driver_nmea0183.c')
-rw-r--r-- | driver_nmea0183.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/driver_nmea0183.c b/driver_nmea0183.c index 7f9a9508..d91323d8 100644 --- a/driver_nmea0183.c +++ b/driver_nmea0183.c @@ -448,7 +448,7 @@ static gps_mask_t processGLL(int count, char *field[], * 1,2 Latitude, N (North) or S (South) * 3,4 Longitude, E (East) or W (West) * 5 UTC of position - * 6 A=Active, V=Void + * 6 A = Active, V = Invalid data * 7 Mode Indicator * See faa_mode() for possible mode values. * @@ -477,7 +477,13 @@ static gps_mask_t processGLL(int count, char *field[], } } } - if (strcmp(field[6], "A") == 0 && (count < 8 || *status != 'N')) { + if ('\0' == field[6][0] || + 'V' == field[6][0]) { + /* Invalid */ + session->gpsdata.status = STATUS_NO_FIX; + session->newdata.mode = MODE_NO_FIX; + mask |= STATUS_SET | MODE_SET; + } else if ('A' == field[6][0] && (count < 8 || *status != 'N')) { int newstatus; do_lat_lon(&field[1], &session->newdata); @@ -2652,6 +2658,7 @@ gps_mask_t nmea_parse(char *sentence, struct gps_device_t * session) /* usually because of xxRMC which does not report 2D/3D */ if (MODE_SET == (retval & MODE_SET) && MODE_3D == session->gpsdata.fix.mode && + MODE_NO_FIX != session->newdata.mode && (0 != isfinite(session->lastfix.altitude) || 0 != isfinite(session->oldfix.altitude))) { session->newdata.mode = session->gpsdata.fix.mode; |