summaryrefslogtreecommitdiff
path: root/rtcm3_json.c
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2013-05-01 14:42:44 -0400
committerEric S. Raymond <esr@thyrsus.com>2013-05-01 14:42:44 -0400
commit488ddabb2080e73d5c900fed6064332ee14c637b (patch)
treec1cec8c5af586e7ede108f8f1b76579119b385b8 /rtcm3_json.c
parent4bc6b2bab8adbd90380e7d332009f5fb7e524b0f (diff)
downloadgpsd-488ddabb2080e73d5c900fed6064332ee14c637b.tar.gz
Unpack RTCM3 1002 JSON (untested)
Diffstat (limited to 'rtcm3_json.c')
-rw-r--r--rtcm3_json.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/rtcm3_json.c b/rtcm3_json.c
index 982b57f5..c90a62e1 100644
--- a/rtcm3_json.c
+++ b/rtcm3_json.c
@@ -52,6 +52,19 @@ int json_rtcm3_read(const char *buf,
{"lockt", t_uinteger, STRUCTOBJECT(struct rtcm3_1001_t, L1.locktime)},
{NULL},
};
+
+ const struct json_attr_t rtcm1002_satellite[] = {
+ {"ident", t_uinteger, STRUCTOBJECT(struct rtcm3_1002_t, ident)},
+ {"ind", t_uinteger, STRUCTOBJECT(struct rtcm3_1002_t, L1.indicator)},
+ {"prange", t_real, STRUCTOBJECT(struct rtcm3_1002_t, L1.pseudorange)},
+ {"delta", t_real, STRUCTOBJECT(struct rtcm3_1002_t, L1.rangediff)},
+
+ {"lockt", t_uinteger, STRUCTOBJECT(struct rtcm3_1002_t, L1.locktime)},
+ {"amb", t_uinteger, STRUCTOBJECT(struct rtcm3_1002_t, L1.ambiguity)},
+ {"CNR", t_real, STRUCTOBJECT(struct rtcm3_1002_t, L1.CNR)},
+ {NULL},
+ };
+
/*@-type@*//* STRUCTARRAY confuses splint */
#define R1001 &rtcm3->rtcmtypes.rtcm3_1001.header
const struct json_attr_t json_rtcm1001[] = {
@@ -68,6 +81,22 @@ int json_rtcm3_read(const char *buf,
#undef R1001
/*@+type@*/
+ /*@-type@*//* STRUCTARRAY confuses splint */
+#define R1002 &rtcm3->rtcmtypes.rtcm3_1002.header
+ const struct json_attr_t json_rtcm1002[] = {
+ RTCM3_HEADER
+ {"station_id", t_uinteger, .addr.uinteger = R1002.station_id},
+ {"tow", t_uinteger, .addr.uinteger = (unsigned int *)R1002.tow},
+ {"sync", t_boolean, .addr.boolean = R1002.sync},
+ {"smoothing", t_boolean, .addr.boolean = R1002.smoothing},
+ {"interval", t_uinteger, .addr.uinteger = R1002.interval},
+ {"satellites", t_array, STRUCTARRAY(rtcm3->rtcmtypes.rtcm3_1002.rtk_data,
+ rtcm1002_satellite, &satcount)},
+ {NULL},
+ };
+#undef R1002
+ /*@+type@*/
+
/*@-type@*//* complex union array initislizations confuses splint */
const struct json_attr_t json_rtcm3_fallback[] = {
RTCM3_HEADER
@@ -90,7 +119,11 @@ int json_rtcm3_read(const char *buf,
if (strstr(buf, "\"type\":1001,") != NULL) {
status = json_read_object(buf, json_rtcm1001, endptr);
if (status == 0)
- rtcm3->rtcmtypes.rtcm3_1003.header.satcount = (unsigned short)satcount;
+ rtcm3->rtcmtypes.rtcm3_1001.header.satcount = (unsigned short)satcount;
+ } else if (strstr(buf, "\"type\":1002,") != NULL) {
+ status = json_read_object(buf, json_rtcm1002, endptr);
+ if (status == 0)
+ rtcm3->rtcmtypes.rtcm3_1002.header.satcount = (unsigned short)satcount;
} else {
int n;
status = json_read_object(buf, json_rtcm3_fallback, endptr);