diff options
author | Eric S. Raymond <esr@thyrsus.com> | 2011-06-10 11:47:01 -0400 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2011-06-10 11:47:01 -0400 |
commit | 05ee979719ca48c66c6a913c97f92c3cc8590212 (patch) | |
tree | 7ede23f8f7d649a9507da8f223fe8d8e2ba7ec1a | |
parent | 507bd95e10342dabb4c793ac2399685d4a4ef062 (diff) | |
download | gpsd-05ee979719ca48c66c6a913c97f92c3cc8590212.tar.gz |
Implement NMEA HDT sentence. All regression tests pass,
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | driver_nmea.c | 43 |
2 files changed, 44 insertions, 1 deletions
@@ -11,7 +11,7 @@ GST noise statistics if they are available. Codebase now has an scons build recipe. Direct support for activation of gpsd from Mac OS/X systemd. gpsdecode can now filter reports by RTCM2, RTCM3, - or AIS message type. + or AIS message type. NMEA HEHDT is implemented. * Mon Mar 21 2011 Eric S. Raymond <esr@snark.thyrsus.com> - 2.96 Bumped maximum channel count to 32 to accommodate GPS+GLONASS devices. diff --git a/driver_nmea.c b/driver_nmea.c index adc139ea..a574b7cd 100644 --- a/driver_nmea.c +++ b/driver_nmea.c @@ -771,6 +771,48 @@ static gps_mask_t processGPZDA(int c UNUSED, char *field[], return mask; } +static gps_mask_t processHDT(int c UNUSED, char *field[], + struct gps_device_t *session) +{ + /* + + $HEHDT,341.8,T*21 + + HDT,x.x*hh<cr><lf> + Fields in order: + 1. True heading + *hh mandatory nmea_checksum + */ + gps_mask_t mask; + mask = ONLINE_SET; + + session->gpsdata.attitude.heading = atof(field[1]); + session->gpsdata.attitude.mag_st = '\0'; + session->gpsdata.attitude.pitch = NAN; + session->gpsdata.attitude.pitch_st = '\0'; + session->gpsdata.attitude.roll = NAN; + session->gpsdata.attitude.roll_st = '\0'; + session->gpsdata.attitude.yaw = NAN; + session->gpsdata.attitude.yaw_st = '\0'; + session->gpsdata.attitude.dip = NAN; + session->gpsdata.attitude.mag_len = NAN; + session->gpsdata.attitude.mag_x = NAN; + session->gpsdata.attitude.mag_y = NAN; + session->gpsdata.attitude.mag_z = NAN; + session->gpsdata.attitude.acc_len = NAN; + session->gpsdata.attitude.acc_x = NAN; + session->gpsdata.attitude.acc_y = NAN; + session->gpsdata.attitude.acc_z = NAN; + session->gpsdata.attitude.gyro_x = NAN; + session->gpsdata.attitude.gyro_y = NAN; + mask |= (ATTITUDE_SET); + + gpsd_report(LOG_RAW, "time %.3f, heading %lf.\n", + session->newdata.time, + session->gpsdata.attitude.heading); + return mask; +} + #ifdef TNT_ENABLE static gps_mask_t processTNTHTM(int c UNUSED, char *field[], struct gps_device_t *session) @@ -1017,6 +1059,7 @@ gps_mask_t nmea_parse(char *sentence, struct gps_device_t * session) { "ZDA", 4, processGPZDA}, { "GBS", 7, processGPGBS}, + {"HDT", 1, processHDT}, #ifdef TNT_ENABLE { "PTNTHTM", 9, processTNTHTM}, |