diff options
author | Gary E. Miller <gem@rellim.com> | 2019-02-06 17:54:02 -0800 |
---|---|---|
committer | Gary E. Miller <gem@rellim.com> | 2019-02-06 17:54:02 -0800 |
commit | 1736a5b861203e85f4006104417d95017be4a4d9 (patch) | |
tree | 493f1134d56efea24efc035e995bb6dcd9475161 /driver_nmea0183.c | |
parent | 4a2dbb50f323599949fa1f271fd09a6242deeeea (diff) | |
download | gpsd-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.c | 48 |
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 |