summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2013-05-02 13:17:42 -0400
committerEric S. Raymond <esr@thyrsus.com>2013-05-02 13:17:42 -0400
commitdfbea279a00c3565c32f7f908e176b9f5b2cfbef (patch)
treeb2aa0804cf6f7bf9d715b540e042323bd6930818
parent04293ddbc091058131e91a8b27ff6b34aa98ba0f (diff)
downloadgpsd-dfbea279a00c3565c32f7f908e176b9f5b2cfbef.tar.gz
RTCM3 R104 JSON unoacking.
-rw-r--r--gps.h2
-rw-r--r--gpsd_json.c2
-rw-r--r--rtcm3_json.c19
3 files changed, 21 insertions, 2 deletions
diff --git a/gps.h b/gps.h
index ddc7ef1f..44c5fc8c 100644
--- a/gps.h
+++ b/gps.h
@@ -424,7 +424,7 @@ struct rtcm3_t {
struct rtcm3_1014_t {
unsigned int network_id; /* Network ID */
unsigned int subnetwork_id; /* Subnetwork ID */
- unsigned char stationcount; /* # auxiliary stations transmitted */
+ unsigned int stationcount; /* # auxiliary stations transmitted */
unsigned int master_id; /* Master Reference Station ID */
unsigned int aux_id; /* Auxilary Reference Station ID */
double d_lat, d_lon, d_alt; /* Aux-master location delta */
diff --git a/gpsd_json.c b/gpsd_json.c
index 4afd53b0..4abebc66 100644
--- a/gpsd_json.c
+++ b/gpsd_json.c
@@ -1288,7 +1288,7 @@ void json_rtcm3_dump(const struct rtcm3_t *rtcm,
"\"master\":%u,\"aux\":%u,\"lat\":%f,\"lon\":%f,\"alt\":%f,",
rtcm->rtcmtypes.rtcm3_1014.network_id,
rtcm->rtcmtypes.rtcm3_1014.subnetwork_id,
- (uint) rtcm->rtcmtypes.rtcm3_1014.stationcount,
+ rtcm->rtcmtypes.rtcm3_1014.stationcount,
rtcm->rtcmtypes.rtcm3_1014.master_id,
rtcm->rtcmtypes.rtcm3_1014.aux_id,
rtcm->rtcmtypes.rtcm3_1014.d_lat,
diff --git a/rtcm3_json.c b/rtcm3_json.c
index 6b1e97b0..1fc2a637 100644
--- a/rtcm3_json.c
+++ b/rtcm3_json.c
@@ -177,6 +177,23 @@ int json_rtcm3_read(const char *buf,
#undef R1010
/*@+type@*/
+ /*@-type@*//* STRUCTARRAY confuses splint */
+#define R1014 &rtcm3->rtcmtypes.rtcm3_1014
+ const struct json_attr_t json_rtcm1014[] = {
+ RTCM3_HEADER
+ {"netid", t_uinteger, .addr.uinteger = R1014.network_id},
+ {"subnetid", t_uinteger, .addr.uinteger = R1014.subnetwork_id},
+ {"statcount", t_uinteger, .addr.uinteger = R1014.stationcount},
+ {"master", t_uinteger, .addr.uinteger = R1014.master_id},
+ {"aux", t_uinteger, .addr.uinteger = R1014.aux_id},
+ {"lat", t_real, .addr.real = R1014.d_lat},
+ {"lon", t_real, .addr.real = R1014.d_lon},
+ {"alt", t_real, .addr.real = R1014.d_alt},
+ {NULL},
+ };
+#undef R1014
+ /*@+type@*/
+
/*@-type@*//* complex union array initislizations confuses splint */
const struct json_attr_t json_rtcm3_fallback[] = {
RTCM3_HEADER
@@ -212,6 +229,8 @@ int json_rtcm3_read(const char *buf,
status = json_read_object(buf, json_rtcm1009, endptr);
} else if (strstr(buf, "\"type\":1010,") != NULL) {
status = json_read_object(buf, json_rtcm1010, endptr);
+ } else if (strstr(buf, "\"type\":1014,") != NULL) {
+ status = json_read_object(buf, json_rtcm1010, endptr);
} else {
int n;
status = json_read_object(buf, json_rtcm3_fallback, endptr);