gpsd-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gpsd-dev] [PATCH 3/6] Add new fields to the attitude data structure


From: chris
Subject: [gpsd-dev] [PATCH 3/6] Add new fields to the attitude data structure
Date: Sat, 21 Apr 2012 10:34:19 +0100

From: Christian Gagneraud <address@hidden>

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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]