summaryrefslogtreecommitdiff
path: root/driver_nmea0183.c
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2019-02-06 17:54:02 -0800
committerGary E. Miller <gem@rellim.com>2019-02-06 17:54:02 -0800
commit1736a5b861203e85f4006104417d95017be4a4d9 (patch)
tree493f1134d56efea24efc035e995bb6dcd9475161 /driver_nmea0183.c
parent4a2dbb50f323599949fa1f271fd09a6242deeeea (diff)
downloadgpsd-1736a5b861203e85f4006104417d95017be4a4d9.tar.gz
driver_nmea0183: Fix status for GLL and GGA.
GLL use new values. GGA was just wrong.
Diffstat (limited to 'driver_nmea0183.c')
-rw-r--r--driver_nmea0183.c48
1 files changed, 44 insertions, 4 deletions
diff --git a/driver_nmea0183.c b/driver_nmea0183.c
index 9330ba40..c3558c6c 100644
--- a/driver_nmea0183.c
+++ b/driver_nmea0183.c
@@ -370,10 +370,17 @@ static gps_mask_t processGLL(int count, char *field[],
if (count >= 8 ) {
switch ( *status ) {
case 'D': /* differential */
- case 'F': /* float RTK */
- case 'R': /* integer RTK */
newstatus = STATUS_DGPS_FIX; /* differential */
break;
+ case 'E': /* dead reckoning */
+ newstatus = STATUS_DR;
+ break;
+ case 'F': /* float RTK */
+ newstatus = STATUS_RTK_FLT;
+ break;
+ case 'R': /* fixed RTK */
+ newstatus = STATUS_RTK_FIX;
+ break;
case 'S': /* simulator */
newstatus = STATUS_NO_FIX;
break;
@@ -433,11 +440,44 @@ static gps_mask_t processGGA(int c UNUSED, char *field[],
* GLGPSA with identical data.
*/
gps_mask_t mask;
+ int newstatus;
char last_last_gga_talker = session->nmea.last_gga_talker;
session->nmea.last_gga_talker = field[0][1];
- session->gpsdata.status = atoi(field[6]);
- mask = STATUS_SET;
+ switch (atoi(field[6])) {
+ case 0: /* no fix */
+ newstatus = STATUS_NO_FIX;
+ break;
+ case 1:
+ /* could be 2D, 3D, GNSSDR */
+ newstatus = STATUS_FIX;
+ break;
+ case 2: /* differential */
+ newstatus = STATUS_DGPS_FIX;
+ break;
+ /* no 3 */
+ case 4: /* fixed RTK */
+ newstatus = STATUS_RTK_FIX;
+ break;
+ case 5: /* float RTK */
+ newstatus = STATUS_RTK_FLT;
+ break;
+ case 6:
+ /* dead reckoning, could be valid or invalid */
+ newstatus = STATUS_DR;
+ break;
+ case 8:
+ /* WTF? Garmin GPSMAP and Gecko sends an 8, but undocumented */
+ newstatus = STATUS_FIX;
+ break;
+ default:
+ newstatus = -1;
+ break;
+ }
+ if (0 <= newstatus) {
+ session->gpsdata.status = newstatus;
+ mask = STATUS_SET;
+ }
/*
* There are some receivers (the Trimble Placer 450 is an example) that
* don't ship a GSA with mode 1 when they lose satellite lock. Instead