diff options
author | dwilliams <equipoise@gmail.com> | 2017-06-06 14:22:49 -0400 |
---|---|---|
committer | Gary E. Miller <gem@rellim.com> | 2018-06-13 14:45:48 -0700 |
commit | cbd06de0d566ef5ef9c015b9461039cda921e021 (patch) | |
tree | 050719e52ce8b03f42b9e7419626a4b16055502c /driver_nmea0183.c | |
parent | b1044285168a78c3ee76b3437c7de6a324525df7 (diff) | |
download | gpsd-cbd06de0d566ef5ef9c015b9461039cda921e021.tar.gz |
Implement processing of NMEA0183 - $GPVTG messages
Co-authored-by: hkpatel <hpatel@sea-machines.com>
Co-authored-by: dwilliams <equipoise@gmail.com>
Signed-off-by: Gary E. Miller <gem@rellim.com>
Diffstat (limited to 'driver_nmea0183.c')
-rw-r--r-- | driver_nmea0183.c | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/driver_nmea0183.c b/driver_nmea0183.c index eb3d881c..a432b1c9 100644 --- a/driver_nmea0183.c +++ b/driver_nmea0183.c @@ -153,6 +153,42 @@ static void register_fractional_time(const char *tag, const char *fld, * NMEA sentence handling begins here * **************************************************************************/ +static gps_mask_t processVTG(int count UNUSED, + char *field[], + struct gps_device_t *session) +// $GPVTG,054.7,T,034.4,M,005.5,N,010.2,K +// +// where: +// 1,2 054.7,T True track made good (degrees) +// 3,4 034.4,M Magnetic track made good +// 5,6 005.5,N Ground speed, knots +// 7,8 010.2,K Ground speed, Kilometers per hour +// +// see also: +// http://www.catb.org/gpsd/NMEA.html#_vtg_track_made_good_and_ground_speed +{ + if( (field[1][0] == '\0') || (field[5][0] == '\0')){ + return 0; + } + + gps_mask_t mask = 0; + + // set true track + session->newdata.track = safe_atof(field[1]); + mask |= TRACK_SET; + + // set magnetic variation + if (field[3][0] != '\0'){ // ignore empty fields + session->newdata.magnetic_track = safe_atof(field[3]); + mask |= MAGNETIC_TRACK_SET; + } + + session->newdata.speed = safe_atof(field[5]) * KNOTS_TO_MPS; + mask |= SPEED_SET; + + gpsd_log(&session->context->errout, LOG_DATA, "VTG: course(T)=%.2f, course(M)=%.2f, speed=%.2f", session->newdata.track, session->newdata.magnetic_track, session->newdata.speed); + return mask; +} static gps_mask_t processRMC(int count, char *field[], struct gps_device_t *session) @@ -1794,7 +1830,7 @@ gps_mask_t nmea_parse(char *sentence, struct gps_device_t * session) {"RMC", 8, false, processRMC}, {"TXT", 5, false, processTXT}, {"ZDA", 4, false, processZDA}, - {"VTG", 0, false, NULL}, /* ignore Velocity Track made Good */ + {"VTG", 5, false, processVTG}, }; int count; |