summaryrefslogtreecommitdiff
path: root/driver_nmea0183.c
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2018-09-11 16:46:20 -0700
committerGary E. Miller <gem@rellim.com>2018-09-11 16:46:20 -0700
commit0e42eb0c4a64a1815011fed0c47da1f48067fd78 (patch)
tree14f8ea11b812f7872d7305546f192a2e933af531 /driver_nmea0183.c
parent2f91452a5e58d0beb0a157c47e06970678fcefd2 (diff)
downloadgpsd-0e42eb0c4a64a1815011fed0c47da1f48067fd78.tar.gz
Add regression for hemisphere GPS. Fix detection of empty GPHDT.
A GPHDT with no heading was output as a heading of 0.00.
Diffstat (limited to 'driver_nmea0183.c')
-rw-r--r--driver_nmea0183.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/driver_nmea0183.c b/driver_nmea0183.c
index b47e8c16..5604e045 100644
--- a/driver_nmea0183.c
+++ b/driver_nmea0183.c
@@ -1109,9 +1109,22 @@ static gps_mask_t processHDT(int c UNUSED, char *field[],
* It is followed by a mandatory nmea_checksum.
*/
gps_mask_t mask;
+ double heading;
+
mask = ONLINE_SET;
- session->gpsdata.attitude.heading = safe_atof(field[1]);
+ if ( 0 == strlen(field[1])) {
+ /* no data */
+ return mask;
+ }
+ heading = safe_atof(field[1]);
+ if ((0.0 > heading) || (360.0 < heading)) {
+ /* bad data */
+ return mask;
+ }
+ /* good data */
+ session->gpsdata.attitude.heading = heading;
+
session->gpsdata.attitude.mag_st = '\0';
session->gpsdata.attitude.pitch = NAN;
session->gpsdata.attitude.pitch_st = '\0';
@@ -1135,9 +1148,9 @@ static gps_mask_t processHDT(int c UNUSED, char *field[],
mask |= (ATTITUDE_SET);
gpsd_log(&session->context->errout, LOG_RAW,
- "time %.3f, heading %lf.\n",
- session->newdata.time,
- session->gpsdata.attitude.heading);
+ "time %.3f, heading %lf.\n",
+ session->newdata.time,
+ session->gpsdata.attitude.heading);
return mask;
}