[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