diff options
author | Eric S. Raymond <esr@thyrsus.com> | 2010-04-11 10:07:28 -0400 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2010-04-11 10:07:28 -0400 |
commit | eecdccfee641d13424deebc6524c9e0ae5c1030d (patch) | |
tree | da237596321f4fce668206b51752b78346cb691e /libgps_json.c | |
parent | 91f20d61ea14d22f5c36c612a86174c8b9fcf6cd (diff) | |
download | gpsd-eecdccfee641d13424deebc6524c9e0ae5c1030d.tar.gz |
Cluent-side support for reading ATT responses.
Diffstat (limited to 'libgps_json.c')
-rw-r--r-- | libgps_json.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/libgps_json.c b/libgps_json.c index 803ba33a..7227fc91 100644 --- a/libgps_json.c +++ b/libgps_json.c @@ -178,6 +178,62 @@ static int json_sky_read(const char *buf, return 0; } +static int json_att_read(const char *buf, + struct gps_data_t *gpsdata, + /*@null@*/const char **endptr) +{ + /*@ -fullinitblock @*/ + const struct json_attr_t json_attrs_1[] = { + {"class", t_check, .dflt.check = "ATT"}, + {"device", t_string, .addr.string = gpsdata->dev.path, + .len = sizeof(gpsdata->dev.path)}, + {"tag", t_string, .addr.string = gpsdata->tag, + .len = sizeof(gpsdata->tag)}, + {"heading", t_real, .addr.real = &gpsdata->attitude.heading, + .dflt.real = NAN}, + {"mag_st", t_character, .addr.character = &gpsdata->attitude.mag_st}, + {"pitch", t_real, .addr.real = &gpsdata->attitude.pitch, + .dflt.real = NAN}, + {"pitch_st", t_character, .addr.character = &gpsdata->attitude.pitch_st}, + {"roll", t_real, .addr.real = &gpsdata->attitude.roll, + .dflt.real = NAN}, + {"roll_st", t_character, .addr.character = &gpsdata->attitude.roll_st}, + {"yaw", t_real, .addr.real = &gpsdata->attitude.yaw, + .dflt.real = NAN}, + {"yaw_st", t_character, .addr.character = &gpsdata->attitude.yaw_st}, + + {"mag_len", t_real, .addr.real = &gpsdata->attitude.magnetic_length, + .dflt.real = NAN}, + {"mag_x", t_real, .addr.real = &gpsdata->attitude.magnetic_field_x, + .dflt.real = NAN}, + {"mag_y", t_real, .addr.real = &gpsdata->attitude.magnetic_field_y, + .dflt.real = NAN}, + {"mag_z", t_real, .addr.real = &gpsdata->attitude.magnetic_field_z, + .dflt.real = NAN}, + {"acc_len", t_real, .addr.real = &gpsdata->attitude.acceleration_length, + .dflt.real = NAN}, + {"acc_x", t_real, .addr.real = &gpsdata->attitude.acceleration_x, + .dflt.real = NAN}, + {"acc_y", t_real, .addr.real = &gpsdata->attitude.acceleration_y, + .dflt.real = NAN}, + {"acc_z", t_real, .addr.real = &gpsdata->attitude.acceleration_z, + .dflt.real = NAN}, + {"gyro_x", t_real, .addr.real = &gpsdata->attitude.gyro_x, + .dflt.real = NAN}, + {"gyro_y", t_real, .addr.real = &gpsdata->attitude.gyro_y, + .dflt.real = NAN}, + + {"temperature", t_real, .addr.real = &gpsdata->attitude.temperature, + .dflt.real = NAN}, + {"depth", t_real, .addr.real = &gpsdata->attitude.depth, + .dflt.real = NAN}, + {NULL}, + }; + /*@ +fullinitblock @*/ + + return json_read_object(buf, json_attrs_1, endptr); +} + static int json_devicelist_read(const char *buf, struct gps_data_t *gpsdata, /*@null@*/const char **endptr) @@ -298,6 +354,8 @@ int libgps_json_unpack(const char *buf, return json_tpv_read(buf, gpsdata, end); } else if (STARTSWITH(classtag, "\"class\":\"SKY\"")) { return json_sky_read(buf, gpsdata, end); + } else if (STARTSWITH(classtag, "\"class\":\"ATT\"")) { + return json_att_read(buf, gpsdata, end); } else if (STARTSWITH(classtag, "\"class\":\"DEVICES\"")) { return json_devicelist_read(buf, gpsdata, end); } else if (STARTSWITH(classtag, "\"class\":\"DEVICE\"")) { |