summaryrefslogtreecommitdiff
path: root/driver_nmea0183.c
diff options
context:
space:
mode:
authordwilliams <equipoise@gmail.com>2017-06-06 14:22:49 -0400
committerGary E. Miller <gem@rellim.com>2018-06-13 14:45:48 -0700
commitcbd06de0d566ef5ef9c015b9461039cda921e021 (patch)
tree050719e52ce8b03f42b9e7419626a4b16055502c /driver_nmea0183.c
parentb1044285168a78c3ee76b3437c7de6a324525df7 (diff)
downloadgpsd-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.c38
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;