diff options
author | Eric S. Raymond <esr@thyrsus.com> | 2013-05-02 12:52:43 -0400 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2013-05-02 12:52:43 -0400 |
commit | c761278cdcb5002f03b1b22bfb735a9b4b3de3e2 (patch) | |
tree | b0991baa737f50c38b225a6a3235564fd2bce58d /rtcm3_json.c | |
parent | 374ed0f355d5b897dc22a85e444497f9a56a6de2 (diff) | |
download | gpsd-c761278cdcb5002f03b1b22bfb735a9b4b3de3e2.tar.gz |
Macro trickery that I might regret, but it makes the code more expressive.
Diffstat (limited to 'rtcm3_json.c')
-rw-r--r-- | rtcm3_json.c | 61 |
1 files changed, 29 insertions, 32 deletions
diff --git a/rtcm3_json.c b/rtcm3_json.c index 81cd256a..b535982c 100644 --- a/rtcm3_json.c +++ b/rtcm3_json.c @@ -27,7 +27,6 @@ int json_rtcm3_read(const char *buf, char *path, size_t pathlen, struct rtcm3_t *rtcm3, /*@null@*/ const char **endptr) { - static char *stringptrs[NITEMS(rtcm3->rtcmtypes.data)]; static char stringstore[sizeof(rtcm3->rtcmtypes.data) * 2]; static int stringcount; @@ -36,58 +35,56 @@ int json_rtcm3_read(const char *buf, #define RTCM3_HEADER \ {"class", t_check, .dflt.check = "RTCM3"}, \ {"type", t_uinteger, .addr.uinteger = &rtcm3->type}, \ - {"device", t_string, .addr.string = path, \ - .len = pathlen}, \ + {"device", t_string, .addr.string = path, .len = pathlen}, \ {"length", t_uinteger, .addr.uinteger = &rtcm3->length}, int status = 0, satcount = 0; +#define RTCM3FIELD(type, fld) STRUCTOBJECT(struct rtcm3_ ## type ## _t, fld) /*@ -fullinitblock @*/ const struct json_attr_t rtcm1001_satellite[] = { - {"ident", t_uinteger, STRUCTOBJECT(struct rtcm3_1001_t, ident)}, - {"ind", t_uinteger, STRUCTOBJECT(struct rtcm3_1001_t, L1.indicator)}, - {"prange", t_real, STRUCTOBJECT(struct rtcm3_1001_t, L1.pseudorange)}, - {"delta", t_real, STRUCTOBJECT(struct rtcm3_1001_t, L1.rangediff)}, - - {"lockt", t_uinteger, STRUCTOBJECT(struct rtcm3_1001_t, L1.locktime)}, + {"ident", t_uinteger, RTCM3FIELD(1001, ident)}, + {"ind", t_uinteger, RTCM3FIELD(1001, L1.indicator)}, + {"prange", t_real, RTCM3FIELD(1001, L1.pseudorange)}, + {"delta", t_real, RTCM3FIELD(1001, L1.rangediff)}, + {"lockt", t_uinteger, RTCM3FIELD(1001, 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)}, + {"ident", t_uinteger, RTCM3FIELD(1002, ident)}, + {"ind", t_uinteger, RTCM3FIELD(1002, L1.indicator)}, + {"prange", t_real, RTCM3FIELD(1002, L1.pseudorange)}, + {"delta", t_real, RTCM3FIELD(1002, L1.rangediff)}, + {"lockt", t_uinteger, RTCM3FIELD(1002, L1.locktime)}, + {"amb", t_uinteger, RTCM3FIELD(1002, L1.ambiguity)}, + {"CNR", t_real, RTCM3FIELD(1002, L1.CNR)}, {NULL}, }; const struct json_attr_t rtcm1009_satellite[] = { - {"ident", t_uinteger, STRUCTOBJECT(struct rtcm3_1009_t, ident)}, - {"ind", t_uinteger, STRUCTOBJECT(struct rtcm3_1009_t, L1.indicator)}, - {"channel", t_uinteger, STRUCTOBJECT(struct rtcm3_1009_t, L1.channel)}, - {"prange", t_real, STRUCTOBJECT(struct rtcm3_1009_t, L1.pseudorange)}, - {"delta", t_real, STRUCTOBJECT(struct rtcm3_1009_t, L1.rangediff)}, + {"ident", t_uinteger, RTCM3FIELD(1009, ident)}, + {"ind", t_uinteger, RTCM3FIELD(1009, L1.indicator)}, + {"channel", t_uinteger, RTCM3FIELD(1009, L1.channel)}, + {"prange", t_real, RTCM3FIELD(1009, L1.pseudorange)}, + {"delta", t_real, RTCM3FIELD(1009, L1.rangediff)}, - {"lockt", t_uinteger, STRUCTOBJECT(struct rtcm3_1009_t, L1.locktime)}, + {"lockt", t_uinteger, RTCM3FIELD(1009, L1.locktime)}, {NULL}, }; const struct json_attr_t rtcm1010_satellite[] = { - {"ident", t_uinteger, STRUCTOBJECT(struct rtcm3_1010_t, ident)}, - {"ind", t_uinteger, STRUCTOBJECT(struct rtcm3_1010_t, L1.indicator)}, - {"channel", t_uinteger, STRUCTOBJECT(struct rtcm3_1010_t, L1.channel)}, - {"prange", t_real, STRUCTOBJECT(struct rtcm3_1010_t, L1.pseudorange)}, - {"delta", t_real, STRUCTOBJECT(struct rtcm3_1010_t, L1.rangediff)}, - - {"lockt", t_uinteger, STRUCTOBJECT(struct rtcm3_1010_t, L1.locktime)}, - {"amb", t_uinteger, STRUCTOBJECT(struct rtcm3_1010_t, L1.ambiguity)}, - {"CNR", t_real, STRUCTOBJECT(struct rtcm3_1010_t, L1.CNR)}, + {"ident", t_uinteger, RTCM3FIELD(1010, ident)}, + {"ind", t_uinteger, RTCM3FIELD(1010, L1.indicator)}, + {"channel", t_uinteger, RTCM3FIELD(1010, L1.channel)}, + {"prange", t_real, RTCM3FIELD(1010, L1.pseudorange)}, + {"delta", t_real, RTCM3FIELD(1010, L1.rangediff)}, + {"lockt", t_uinteger, RTCM3FIELD(1010, L1.locktime)}, + {"amb", t_uinteger, RTCM3FIELD(1010, L1.ambiguity)}, + {"CNR", t_real, RTCM3FIELD(1010, L1.CNR)}, {NULL}, }; +#undef RTCM3FIELD /*@-type@*//* STRUCTARRAY confuses splint */ #define R1001 &rtcm3->rtcmtypes.rtcm3_1001.header |