summaryrefslogtreecommitdiff
path: root/driver_nmea0183.c
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2018-06-14 15:19:03 -0700
committerGary E. Miller <gem@rellim.com>2018-06-14 15:19:03 -0700
commit0008d69c650f2f6d30799555d1101fba9477564c (patch)
treed2bbbc3d4438504374a4193e05ebe731ae003938 /driver_nmea0183.c
parentcee37eece7e5e3531cc3ce6dbbf3db5147251d91 (diff)
downloadgpsd-0008d69c650f2f6d30799555d1101fba9477564c.tar.gz
driver_nmea083.c Add test for field 9 in GPVTG.
Turns out to be a NOP. Every GPVTG with field 9 == N, also had blank track field. But starting point for further work.
Diffstat (limited to 'driver_nmea0183.c')
-rw-r--r--driver_nmea0183.c38
1 files changed, 36 insertions, 2 deletions
diff --git a/driver_nmea0183.c b/driver_nmea0183.c
index a432b1c9..3ff1b4e4 100644
--- a/driver_nmea0183.c
+++ b/driver_nmea0183.c
@@ -153,25 +153,59 @@ static void register_fractional_time(const char *tag, const char *fld,
* NMEA sentence handling begins here
*
**************************************************************************/
-static gps_mask_t processVTG(int count UNUSED,
+static gps_mask_t processVTG(int count,
char *field[],
struct gps_device_t *session)
// $GPVTG,054.7,T,034.4,M,005.5,N,010.2,K
+// $GPVTG,054.7,T,034.4,M,005.5,N,010.2,K,A
//
// 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
+// 9 A Mode Indicator (optional)
+// A=autonomous, D=differential, E=Estimated,
+// N=not valid, S=Simulator, M=Manual input mode
//
// see also:
// http://www.catb.org/gpsd/NMEA.html#_vtg_track_made_good_and_ground_speed
{
+ gps_mask_t mask = 0;
+
if( (field[1][0] == '\0') || (field[5][0] == '\0')){
return 0;
}
- gps_mask_t mask = 0;
+ /* ignore empty/missing field, fix mode of last resort */
+ if ((count > 9) && ('\0' != field[9][0]) &&
+ (MODE_NOT_SEEN == session->newdata.mode)) {
+
+ switch (field[9][0]) {
+ case 'A':
+ /* Autonomous, 2D or 3D fix */
+ /* FALL THROUGH */
+ case 'D':
+ /* Differential, 2D or 3D fix */
+ session->newdata.mode = MODE_2D;
+ // MODE_SET here causes issues
+ // mask |= MODE_SET;
+ break;
+ case 'E':
+ /* Estimated, DR only */
+ /* FALL THROUGH */
+ case 'N':
+ /* Not Valid */
+ session->newdata.mode = MODE_NO_FIX;
+ // MODE_SET here causes issues
+ // mask |= MODE_SET;
+ // nothing to use here, leave
+ return 0;
+ default:
+ /* Huh? */
+ break;
+ }
+ }
// set true track
session->newdata.track = safe_atof(field[1]);