summaryrefslogtreecommitdiff
path: root/driver_nmea0183.c
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2019-03-14 17:59:22 -0700
committerGary E. Miller <gem@rellim.com>2019-03-14 17:59:22 -0700
commita7e975cd0273fd90e3c0536dc9da452b5ff8f01b (patch)
treec901bbeb7272796837d5b2e2a7c2283f03408a90 /driver_nmea0183.c
parent6e2d5c4df2cbc8f3b2b2dfa3229e24a2ef247d77 (diff)
downloadgpsd-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.c11
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;