[prev in list] [next in list] [prev in thread] [next in thread]
List: gpsd-dev
Subject: [gpsd-dev] [PATCH 3/6] Add new fields to the attitude data structure
From: chris () techworks ! ie
Date: 2012-04-21 9:34:19
Message-ID: 1335000862-15312-4-git-send-email-chris () techworks ! ie
[Download RAW message or body]
From: Christian Gagneraud <chgans@gna.org>
rot: Rate of Turn
mag_var: Magnetic variation
mag_dev: Magnetic deviation
---
driver_nmea0183.c | 9 +++++++++
gps.h | 3 +++
gpsd_json.c | 15 +++++++++++++++
libgps_json.c | 6 ++++++
4 files changed, 33 insertions(+), 0 deletions(-)
diff --git a/driver_nmea0183.c b/driver_nmea0183.c
index c269180..a9631cb 100644
--- a/driver_nmea0183.c
+++ b/driver_nmea0183.c
@@ -786,6 +786,9 @@ static gps_mask_t processHDT(int c UNUSED, char *field[],
mask = ONLINE_SET;
session->gpsdata.attitude.heading = safe_atof(field[1]);
+ session->gpsdata.attitude.mag_dev = NAN;
+ session->gpsdata.attitude.mag_var = NAN;
+ session->gpsdata.attitude.rot = NAN;
session->gpsdata.attitude.mag_st = '\0';
session->gpsdata.attitude.pitch = NAN;
session->gpsdata.attitude.pitch_st = '\0';
@@ -897,6 +900,9 @@ static gps_mask_t processTNTHTM(int c UNUSED, char *field[],
mask = ONLINE_SET;
session->gpsdata.attitude.heading = safe_atof(field[1]);
+ session->gpsdata.attitude.mag_dev = NAN;
+ session->gpsdata.attitude.mag_var = NAN;
+ session->gpsdata.attitude.rot = NAN;
session->gpsdata.attitude.mag_st = *field[2];
session->gpsdata.attitude.pitch = safe_atof(field[3]);
session->gpsdata.attitude.pitch_st = *field[4];
@@ -955,6 +961,9 @@ static gps_mask_t processOHPR(int c UNUSED, char *field[],
mask = ONLINE_SET;
session->gpsdata.attitude.heading = safe_atof(field[1]);
+ session->gpsdata.attitude.mag_dev = NAN;
+ session->gpsdata.attitude.mag_var = NAN;
+ session->gpsdata.attitude.rot = NAN;
session->gpsdata.attitude.mag_st = '\0';
session->gpsdata.attitude.pitch = safe_atof(field[2]);
session->gpsdata.attitude.pitch_st = '\0';
diff --git a/gps.h b/gps.h
index 6baf232..d4813f5 100644
--- a/gps.h
+++ b/gps.h
@@ -1500,6 +1500,9 @@ struct ais_t
struct attitude_t {
double heading;
+ double mag_dev; /* Magnetic deviation in degree, positive for EAST, negative for \
WEST */ + double mag_var; /* Magnetic variation in degree, positive for EAST, \
negative for WEST */ + double rot; /* Rate of turn in degrees per minute, \
positive for starboard (right), negative for port (left) */ double pitch;
double roll;
double yaw;
diff --git a/gpsd_json.c b/gpsd_json.c
index 0c5e39c..f1ecdff 100644
--- a/gpsd_json.c
+++ b/gpsd_json.c
@@ -2834,6 +2834,21 @@ void json_att_dump(const struct gps_data_t *gpsdata,
"\"mag_st\":\"%c\",", gpsdata->attitude.mag_st);
}
+ if (isnan(gpsdata->attitude.mag_var) == 0) {
+ (void)snprintf(reply + strlen(reply),
+ replylen - strlen(reply),
+ "\"mag_var\":%.2f,", gpsdata->attitude.mag_var);
+ }
+ if (isnan(gpsdata->attitude.mag_dev) == 0) {
+ (void)snprintf(reply + strlen(reply),
+ replylen - strlen(reply),
+ "\"mag_dev\":%.2f,", gpsdata->attitude.mag_dev);
+ }
+ if (isnan(gpsdata->attitude.rot) == 0) {
+ (void)snprintf(reply + strlen(reply),
+ replylen - strlen(reply),
+ "\"rot\":%.2f,", gpsdata->attitude.rot);
+ }
if (isnan(gpsdata->attitude.pitch) == 0) {
(void)snprintf(reply + strlen(reply),
replylen - strlen(reply),
diff --git a/libgps_json.c b/libgps_json.c
index b53d6da..1ea7698 100644
--- a/libgps_json.c
+++ b/libgps_json.c
@@ -206,6 +206,12 @@ static int json_att_read(const char *buf, struct gps_data_t \
*gpsdata,
.len = sizeof(gpsdata->tag)},
{"heading", t_real, .addr.real = &gpsdata->attitude.heading,
.dflt.real = NAN},
+ {"mag_dev", t_real, .addr.real = &gpsdata->attitude.mag_dev,
+ .dflt.real = NAN},
+ {"mag_var", t_real, .addr.real = &gpsdata->attitude.mag_var,
+ .dflt.real = NAN},
+ {"rot", t_real, .addr.real = &gpsdata->attitude.rot,
+ .dflt.real = NAN},
{"mag_st", t_character, .addr.character = &gpsdata->attitude.mag_st},
{"pitch", t_real, .addr.real = &gpsdata->attitude.pitch,
.dflt.real = NAN},
--
1.7.0.4
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic