diff options
author | Daniel_M_Williams <dwilliams@sea-machines.com> | 2018-05-30 13:50:58 -0400 |
---|---|---|
committer | Gary E. Miller <gem@rellim.com> | 2018-06-12 18:56:15 -0700 |
commit | 5428507f30009df571d19dd01ad1e25cff1df7dc (patch) | |
tree | b16efa89c34b7392d40c726fbc2b44dbe6b8d40b | |
parent | 0149f55bc22cdcbe6f662fab2563479170adc653 (diff) | |
download | gpsd-5428507f30009df571d19dd01ad1e25cff1df7dc.tar.gz |
$GPVTG Added parsing, storage, output of magnetic course
Signed-off-by: Gary E. Miller <gem@rellim.com>
-rw-r--r-- | gps.h | 5 | ||||
-rw-r--r-- | gpsd_json.c | 3 | ||||
-rw-r--r-- | gpsutils.c | 5 | ||||
-rw-r--r-- | libgps_core.c | 3 | ||||
-rw-r--r-- | libgps_json.c | 4 |
5 files changed, 18 insertions, 2 deletions
@@ -98,6 +98,8 @@ struct gps_fix_t { double climb; /* Vertical speed, meters/sec */ double epc; /* Vertical speed uncertainty */ + double magnetic_track; /* Course (relative to Magnetic North) */ + /* ECEF data, all data in meters, and meters/second, or NaN */ struct { double x, y, z; /* ECEF x, y, z */ @@ -2008,7 +2010,8 @@ struct gps_data_t { #define OSCILLATOR_SET (1llu<<35) #define ECEF_SET (1llu<<36) #define VECEF_SET (1llu<<37) -#define SET_HIGH_BIT 38 +#define MAGNETIC_TRACK_SET (1llu<<38) +#define SET_HIGH_BIT 39 timestamp_t online; /* NZ if GPS is on line, 0 if not. * * Note: gpsd clears this time when sentences diff --git a/gpsd_json.c b/gpsd_json.c index 9c04e9c8..7d45295e 100644 --- a/gpsd_json.c +++ b/gpsd_json.c @@ -183,6 +183,9 @@ void json_tpv_dump(const struct gps_device_t *session, str_appendf(reply, replylen, "\"epv\":%.3f,", gpsdata->fix.epv); if (isnan(gpsdata->fix.track) == 0) str_appendf(reply, replylen, "\"track\":%.4f,", gpsdata->fix.track); + if (isnan(gpsdata->fix.magnetic_track) == 0) + str_appendf(reply, replylen, "\"magtrack\":%.4f,", + gpsdata->fix.magnetic_track); if (isnan(gpsdata->fix.speed) == 0) str_appendf(reply, replylen, "\"speed\":%.3f,", gpsdata->fix.speed); if ((gpsdata->fix.mode >= MODE_3D) && isnan(gpsdata->fix.climb) == 0) @@ -242,6 +242,7 @@ void gps_clear_fix(struct gps_fix_t *fixp) fixp->mode = MODE_NOT_SEEN; fixp->latitude = fixp->longitude = NAN; fixp->track = NAN; + fixp->magnetic_track = NAN; fixp->speed = NAN; fixp->climb = NAN; fixp->altitude = NAN; @@ -287,7 +288,9 @@ void gps_merge_fix(struct gps_fix_t *to, if ((transfer & ALTITUDE_SET) != 0) to->altitude = from->altitude; if ((transfer & TRACK_SET) != 0) - to->track = from->track; + to->track = from->track; + if ((transfer & MAGNETIC_TRACK_SET) != 0) + to->magnetic_track = from->magnetic_track; if ((transfer & SPEED_SET) != 0) to->speed = from->speed; if ((transfer & CLIMB_SET) != 0) diff --git a/libgps_core.c b/libgps_core.c index 40b7425a..29ac6da1 100644 --- a/libgps_core.c +++ b/libgps_core.c @@ -313,6 +313,9 @@ void libgps_dump_state(struct gps_data_t *collect) (void)fprintf(debugfp, "SPEED: %lf\n", collect->fix.speed); if (collect->set & TRACK_SET) (void)fprintf(debugfp, "TRACK: track: %lf\n", collect->fix.track); + if (collect->set & MAGNETIC_TRACK_SET) + (void)fprintf(debugfp, "MAGNETIC_TRACK: magtrack: %lf\n", + collect->fix.magnetic_track); if (collect->set & CLIMB_SET) (void)fprintf(debugfp, "CLIMB: climb: %lf\n", collect->fix.climb); if (collect->set & STATUS_SET) { diff --git a/libgps_json.c b/libgps_json.c index 795e5d76..8afd789d 100644 --- a/libgps_json.c +++ b/libgps_json.c @@ -52,6 +52,8 @@ static int json_tpv_read(const char *buf, struct gps_data_t *gpsdata, .dflt.real = NAN}, {"track", t_real, .addr.real = &gpsdata->fix.track, .dflt.real = NAN}, + {"magtrack", t_real, .addr.real = &gpsdata->fix.magnetic_track, + .dflt.real = NAN}, {"speed", t_real, .addr.real = &gpsdata->fix.speed, .dflt.real = NAN}, {"climb", t_real, .addr.real = &gpsdata->fix.climb, @@ -473,6 +475,8 @@ int libgps_json_unpack(const char *buf, gpsdata->set |= VERR_SET; if (isnan(gpsdata->fix.track) == 0) gpsdata->set |= TRACK_SET; + if (isnan(gpsdata->fix.magnetic_track) == 0) + gpsdata->set |= MAGNETIC_TRACK_SET; if (isnan(gpsdata->fix.speed) == 0) gpsdata->set |= SPEED_SET; if (isnan(gpsdata->fix.climb) == 0) |