diff options
author | Gary E. Miller <gem@rellim.com> | 2018-09-11 16:46:20 -0700 |
---|---|---|
committer | Gary E. Miller <gem@rellim.com> | 2018-09-11 16:46:20 -0700 |
commit | 0e42eb0c4a64a1815011fed0c47da1f48067fd78 (patch) | |
tree | 14f8ea11b812f7872d7305546f192a2e933af531 /driver_nmea0183.c | |
parent | 2f91452a5e58d0beb0a157c47e06970678fcefd2 (diff) | |
download | gpsd-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.c | 21 |
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; } |