From 0c80fc906d856a7e1511a67ff77978d907b36246 Mon Sep 17 00:00:00 2001 From: "Gary E. Miller" Date: Fri, 12 Apr 2019 12:51:38 -0700 Subject: driver_nmea0183: Prep work to support gnssid in xxGSV. This is needed to fix NMEA 4.10 decodes. --- driver_nmea0183.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'driver_nmea0183.c') 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; -- cgit v1.2.1