diff options
author | Gary E. Miller <gem@rellim.com> | 2019-04-12 12:51:38 -0700 |
---|---|---|
committer | Gary E. Miller <gem@rellim.com> | 2019-04-12 12:51:38 -0700 |
commit | 0c80fc906d856a7e1511a67ff77978d907b36246 (patch) | |
tree | f119fceb226e1f383bbd9b3a6d1f02e47422d4f9 /driver_nmea0183.c | |
parent | eb791a3066846ea48febef737c7cd122525c4287 (diff) | |
download | gpsd-0c80fc906d856a7e1511a67ff77978d907b36246.tar.gz |
driver_nmea0183: Prep work to support gnssid in xxGSV.
This is needed to fix NMEA 4.10 decodes.
Diffstat (limited to 'driver_nmea0183.c')
-rw-r--r-- | driver_nmea0183.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/driver_nmea0183.c b/driver_nmea0183.c index 865f28ab..c348eac6 100644 --- a/driver_nmea0183.c +++ b/driver_nmea0183.c @@ -1275,6 +1275,8 @@ static gps_mask_t processGSV(int count, char *field[], */ int n, fldnum; + int gnssid = 0; + if (count <= 3) { gpsd_log(&session->context->errout, LOG_WARN, "malformed GPGSV - fieldcount %d <= 3\n", @@ -1287,10 +1289,22 @@ static gps_mask_t processGSV(int count, char *field[], * This check used to be !=0, but we have loosen it a little to let by * NMEA 4.1 GSVs with an extra signal-ID field at the end. */ - if (count % 4 > 1) { + switch (count % 4) { + case 0: + /* normal, pre-NMEA 4.10 */ + break; + case 1: + /* NMEA 4.10, get the signal ID */ + gnssid = field[count - 1][0]; + if (0 == gnssid) gnssid = '0'; + gpsd_log(&session->context->errout, LOG_DATA, + "GPGSV fieldcount %d %% 4 == 1, gnssid %c (%#x)\n", count, + gnssid, gnssid); + break; + default: + /* bad count */ gpsd_log(&session->context->errout, LOG_WARN, - "malformed GPGSV - fieldcount %d %% 4 != 0\n", - count); + "malformed GPGSV - fieldcount %d %% 4 != 0\n", count); gpsd_zero_satellites(&session->gpsdata); session->gpsdata.satellites_visible = 0; return ONLINE_SET; @@ -1309,6 +1323,7 @@ static gps_mask_t processGSV(int count, char *field[], */ if (session->nmea.last_gsv_talker == '\0' || GSV_TALKER == session->nmea.last_gsv_talker) { + /* FIXME: this is zeroing too often */ gpsd_zero_satellites(&session->gpsdata); } session->nmea.last_gsv_talker = GSV_TALKER; |