diff options
author | Eric S. Raymond <esr@thyrsus.com> | 2013-10-01 23:01:46 -0400 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2013-10-01 23:02:23 -0400 |
commit | 0b932951d450ac0bc775c4f3abb238b05bfeac76 (patch) | |
tree | 2e981a2ef319ca79bb82cde10f353dee851342fa | |
parent | faad7223d756dff2f149cec6f32911c0fac468f0 (diff) | |
download | gpsd-0b932951d450ac0bc775c4f3abb238b05bfeac76.tar.gz |
New-style dumping (numeric and text both) for two more fields.
All regression tests pass.
-rw-r--r-- | gpsd_json.c | 22 | ||||
-rw-r--r-- | jsongen.py.in | 2 | ||||
-rw-r--r-- | test/sample.aivdm.js.chk | 4 | ||||
-rw-r--r-- | test/sample.aivdm.ju.chk | 4 | ||||
-rw-r--r-- | www/AIVDM.txt | 4 |
5 files changed, 26 insertions, 10 deletions
diff --git a/gpsd_json.c b/gpsd_json.c index c002a57b..64b86581 100644 --- a/gpsd_json.c +++ b/gpsd_json.c @@ -1955,6 +1955,16 @@ void json_aivdm_dump(const struct ais_t *ais, } else if (ais->type6.dac == 1) switch (ais->type6.fid) { + const char *position_types[8] = { + "Not available", + "Port-side to", + "Starboard-side to", + "Mediterranean (end-on) mooring", + "Mooring buoy", + "Anchorage", + "Reserved for future use", + "Reserved for future use", + }; case 12: /* IMO236 -Dangerous cargo indication */ /* some fields have beem merged to an ISO8601 partial date */ (void)snprintf(buf + strlen(buf), buflen - strlen(buf), @@ -2021,7 +2031,8 @@ void json_aivdm_dump(const struct ais_t *ais, case 20: /* IMO289 - Berthing Data */ (void)snprintf(buf + strlen(buf), buflen - strlen(buf), "\"linkage\":%u,\"berth_length\":%u," - "\"position\":%u,\"arrival\":\"%u-%uT%u:%u\"," + "\"position\":%u,\"position_text\":\"%s\"," + "\"arrival\":\"%u-%uT%u:%u\"," "\"availability\":%u," "\"agent\":%u,\"fuel\":%u,\"chandler\":%u," "\"stevedore\":%u,\"electrical\":%u," @@ -2038,6 +2049,7 @@ void json_aivdm_dump(const struct ais_t *ais, ais->type6.dac1fid20.linkage, ais->type6.dac1fid20.berth_length, ais->type6.dac1fid20.position, + position_types[ais->type6.dac1fid20.position], ais->type6.dac1fid20.month, ais->type6.dac1fid20.day, ais->type6.dac1fid20.hour, @@ -2301,7 +2313,7 @@ void json_aivdm_dump(const struct ais_t *ais, "\"swellheight\":%.1f,\"swellperiod\":%u,\"swelldir\":%u," "\"seastate\":%u,\"watertemp\":%.1f," "\"preciptype\":%u,\"preciptype_text\":\"%s\"," - "\"salinity\":%.1f,\"ice\":\"%s\"", + "\"salinity\":%.1f,\"ice\":%u,\"ice_text\":\"%s\"", trends[ais->type8.dac1fid11.leveltrend], ais->type8.dac1fid11.cspeed / DAC1FID11_CSPEED_DIV, ais->type8.dac1fid11.cdir, @@ -2322,6 +2334,7 @@ void json_aivdm_dump(const struct ais_t *ais, ais->type8.dac1fid11.preciptype, preciptypes[ais->type8.dac1fid11.preciptype], ais->type8.dac1fid11.salinity / DAC1FID11_SALINITY_DIV, + ais->type8.dac1fid11.ice, ice[ais->type8.dac1fid11.ice]); } else (void)snprintf(buf + strlen(buf), buflen - strlen(buf), @@ -2333,7 +2346,7 @@ void json_aivdm_dump(const struct ais_t *ais, "\"swellheight\":%u,\"swellperiod\":%u,\"swelldir\":%u," "\"seastate\":%u,\"watertemp\":%u," "\"preciptype\":%u,\"preciptype_text\":\"%s\"," - "\"salinity\":%u,\"ice\":%u", + "\"salinity\":%u,\"ice\":%u,\"ice_text\":\"%s\"", ais->type8.dac1fid11.leveltrend, ais->type8.dac1fid11.cspeed, ais->type8.dac1fid11.cdir, @@ -2354,7 +2367,8 @@ void json_aivdm_dump(const struct ais_t *ais, ais->type8.dac1fid11.preciptype, preciptypes[ais->type8.dac1fid11.preciptype], ais->type8.dac1fid11.salinity, - ais->type8.dac1fid11.ice); + ais->type8.dac1fid11.ice, + ice[ais->type8.dac1fid11.ice]); (void)strlcat(buf, "}\r\n", buflen); imo = true; break; diff --git a/jsongen.py.in b/jsongen.py.in index 80ed8db8..2498959e 100644 --- a/jsongen.py.in +++ b/jsongen.py.in @@ -177,6 +177,7 @@ ais_specs = ( ('berth_length', 'uinteger', '0'), ('berth_depth', 'uinteger', '0'), ('position', 'uinteger', '0'), + ('position_text', 'ignore', None), ('arrival', 'string', None), ('availability', 'uinteger', '0'), ('agent', 'uinteger', '0'), @@ -384,6 +385,7 @@ ais_specs = ( ('preciptype_text', 'ignore', None), ('salinity', 'uinteger', 'DAC1FID11_SALINITY_NOT_AVAILABLE'), ('ice', 'uinteger', 'DAC1FID11_ICE_NOT_AVAILABLE'), + ('ice_text', 'ignore', None), ), "stringbuffered":("timestamp",), }, diff --git a/test/sample.aivdm.js.chk b/test/sample.aivdm.js.chk index 82f7449d..46820cd3 100644 --- a/test/sample.aivdm.js.chk +++ b/test/sample.aivdm.js.chk @@ -15,8 +15,8 @@ {"class":"AIS","device":"stdin","type":7,"repeat":2,"mmsi":537411077,"scaled":true,"mmsi1":43101326,"mmsi2":717096664,"mmsi3":76161024,"mmsi4":0}
{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":366999712,"scaled":true,"dac":366,"fid":56,"data":"256:3a53dbb7be4a773137f87d7b0445f040dea05d93f593783194ae9b9d9dbe05fb"}
{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":999999999,"scaled":true,"dac":366,"fid":56,"data":"256:eb0d4f917a035b2dfca3d4739381735c18ebbe754936f66850037dcacd9538b8"}
-{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":992509977,"scaled":true,"dac":1,"fid":11,"lat":53.295,"lon":-6.134,"timestamp":"18T17:15Z","wspeed":3,"wgust":6,"wdir":12,"wgustdir":15,"humidity":50,"airtemp":14.2,"dewpoint":12.3,"pressure":1024,"pressuretend":"decreasing","visibility":15.3,"waterlevel":-8.4,"leveltrend":"increasing","cspeed":10.3,"cdir":256,"cspeed2":10.4,"cdir2":257,"cdepth2":10,"cspeed3":12.6,"cdir3":203,"cdepth3":20,"waveheight":4.2,"waveperiod":35,"wavedir":25,"swellheight":2.3,"swellperiod":48,"swelldir":124,"seastate":3,"watertemp":12.3,"preciptype":6,"preciptype_text":"reserved","salinity":5.3,"ice":"no"}
-{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":992509977,"scaled":true,"dac":1,"fid":11,"lat":53.295,"lon":-6.134,"timestamp":"18T17:45Z","wspeed":127,"wgust":127,"wdir":511,"wgustdir":511,"humidity":127,"airtemp":144.7,"dewpoint":82.3,"pressure":1311,"pressuretend":"N/A","visibility":25.5,"waterlevel":41.1,"leveltrend":"N/A","cspeed":25.5,"cdir":511,"cspeed2":25.5,"cdir2":511,"cdepth2":31,"cspeed3":25.5,"cdir3":511,"cdepth3":31,"waveheight":25.5,"waveperiod":63,"wavedir":511,"swellheight":25.5,"swellperiod":63,"swelldir":511,"seastate":15,"watertemp":92.3,"preciptype":7,"preciptype_text":"N/A","salinity":51.1,"ice":"N/A"}
+{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":992509977,"scaled":true,"dac":1,"fid":11,"lat":53.295,"lon":-6.134,"timestamp":"18T17:15Z","wspeed":3,"wgust":6,"wdir":12,"wgustdir":15,"humidity":50,"airtemp":14.2,"dewpoint":12.3,"pressure":1024,"pressuretend":"decreasing","visibility":15.3,"waterlevel":-8.4,"leveltrend":"increasing","cspeed":10.3,"cdir":256,"cspeed2":10.4,"cdir2":257,"cdepth2":10,"cspeed3":12.6,"cdir3":203,"cdepth3":20,"waveheight":4.2,"waveperiod":35,"wavedir":25,"swellheight":2.3,"swellperiod":48,"swelldir":124,"seastate":3,"watertemp":12.3,"preciptype":6,"preciptype_text":"reserved","salinity":5.3,"ice":0,"ice_text":"no"}
+{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":992509977,"scaled":true,"dac":1,"fid":11,"lat":53.295,"lon":-6.134,"timestamp":"18T17:45Z","wspeed":127,"wgust":127,"wdir":511,"wgustdir":511,"humidity":127,"airtemp":144.7,"dewpoint":82.3,"pressure":1311,"pressuretend":"N/A","visibility":25.5,"waterlevel":41.1,"leveltrend":"N/A","cspeed":25.5,"cdir":511,"cspeed2":25.5,"cdir2":511,"cdepth2":31,"cspeed3":25.5,"cdir3":511,"cdepth3":31,"waveheight":25.5,"waveperiod":63,"wavedir":511,"swellheight":25.5,"swellperiod":63,"swelldir":511,"seastate":15,"watertemp":92.3,"preciptype":7,"preciptype_text":"N/A","salinity":51.1,"ice":3,"ice_text":"N/A"}
{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":992509977,"scaled":true,"dac":1,"fid":31,"lat":53.295,"lon":-6.134,"accuracy":false,"timestamp":"29T23:24Z","wspeed":127,"wgust":127,"wdir":360,"wgustdir":360,"humidity":101,"airtemp":-102.4,"dewpoint":50.1,"pressure":1310,"pressuretend":"N/A","visgreater":false,"visibility":12.7,"waterlevel":30.0,"leveltrend":"N/A","cspeed":25.5,"cdir":360,"cspeed2":25.5,"cdir2":360,"cdepth2":31,"cspeed3":25.5,"cdir3":360,"cdepth3":31,"waveheight":25.5,"waveperiod":63,"wavedir":360,"swellheight":25.5,"swellperiod":63,"swelldir":360,"seastate":13,"watertemp":50.1,"preciptype":"N/A","salinity":51.0,"ice":"N/A"}
{"class":"AIS","device":"stdin","type":9,"repeat":0,"mmsi":111265591,"scaled":true,"alt":15,"speed":0,"accuracy":false,"lon":11.8816,"lat":57.7785,"course":0.0,"second":28,"regional":0,"dte":0,"raim":false,"radio":24597}
{"class":"AIS","device":"stdin","type":10,"repeat":0,"mmsi":366814480,"scaled":true,"dest_mmsi":366832740}
diff --git a/test/sample.aivdm.ju.chk b/test/sample.aivdm.ju.chk index 48356589..dbc14214 100644 --- a/test/sample.aivdm.ju.chk +++ b/test/sample.aivdm.ju.chk @@ -15,8 +15,8 @@ {"class":"AIS","device":"stdin","type":7,"repeat":2,"mmsi":537411077,"scaled":false,"mmsi1":43101326,"mmsi2":717096664,"mmsi3":76161024,"mmsi4":0}
{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":366999712,"scaled":false,"dac":366,"fid":56,"data":"256:3a53dbb7be4a773137f87d7b0445f040dea05d93f593783194ae9b9d9dbe05fb"}
{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":999999999,"scaled":false,"dac":366,"fid":56,"data":"256:eb0d4f917a035b2dfca3d4739381735c18ebbe754936f66850037dcacd9538b8"}
-{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":992509977,"scaled":false,"dac":1,"fid":11,"lat":3197693,"lon":-368039,"timestamp":"18T17:15Z","wspeed":3,"wgust":6,"wdir":12,"wgustdir":15,"humidity":50,"airtemp":742,"dewpoint":323,"pressure":224,"pressuretend":2,"visibility":153,"waterlevel":16,"leveltrend":1,"cspeed":103,"cdir":256,"cspeed2":104,"cdir2":257,"cdepth2":10,"cspeed3":126,"cdir3":203,"cdepth3":20,"waveheight":42,"waveperiod":35,"wavedir":25,"swellheight":23,"swellperiod":48,"swelldir":124,"seastate":3,"watertemp":223,"preciptype":6,"preciptype_text":"reserved","salinity":53,"ice":0}
-{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":992509977,"scaled":false,"dac":1,"fid":11,"lat":3197689,"lon":-368037,"timestamp":"18T17:45Z","wspeed":127,"wgust":127,"wdir":511,"wgustdir":511,"humidity":127,"airtemp":2047,"dewpoint":1023,"pressure":511,"pressuretend":3,"visibility":255,"waterlevel":511,"leveltrend":3,"cspeed":255,"cdir":511,"cspeed2":255,"cdir2":511,"cdepth2":31,"cspeed3":255,"cdir3":511,"cdepth3":31,"waveheight":255,"waveperiod":63,"wavedir":511,"swellheight":255,"swellperiod":63,"swelldir":511,"seastate":15,"watertemp":1023,"preciptype":7,"preciptype_text":"N/A","salinity":511,"ice":3}
+{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":992509977,"scaled":false,"dac":1,"fid":11,"lat":3197693,"lon":-368039,"timestamp":"18T17:15Z","wspeed":3,"wgust":6,"wdir":12,"wgustdir":15,"humidity":50,"airtemp":742,"dewpoint":323,"pressure":224,"pressuretend":2,"visibility":153,"waterlevel":16,"leveltrend":1,"cspeed":103,"cdir":256,"cspeed2":104,"cdir2":257,"cdepth2":10,"cspeed3":126,"cdir3":203,"cdepth3":20,"waveheight":42,"waveperiod":35,"wavedir":25,"swellheight":23,"swellperiod":48,"swelldir":124,"seastate":3,"watertemp":223,"preciptype":6,"preciptype_text":"reserved","salinity":53,"ice":0,"ice_text":"no"}
+{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":992509977,"scaled":false,"dac":1,"fid":11,"lat":3197689,"lon":-368037,"timestamp":"18T17:45Z","wspeed":127,"wgust":127,"wdir":511,"wgustdir":511,"humidity":127,"airtemp":2047,"dewpoint":1023,"pressure":511,"pressuretend":3,"visibility":255,"waterlevel":511,"leveltrend":3,"cspeed":255,"cdir":511,"cspeed2":255,"cdir2":511,"cdepth2":31,"cspeed3":255,"cdir3":511,"cdepth3":31,"waveheight":255,"waveperiod":63,"wavedir":511,"swellheight":255,"swellperiod":63,"swelldir":511,"seastate":15,"watertemp":1023,"preciptype":7,"preciptype_text":"N/A","salinity":511,"ice":3,"ice_text":"N/A"}
{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":992509977,"scaled":false,"dac":1,"fid":31,"lat":3197696,"lon":-368044,"accuracy":false,"timestamp":"29T23:24Z","wspeed":127,"wgust":127,"wdir":360,"wgustdir":360,"humidity":101,"airtemp":-1024,"dewpoint":501,"pressure":511,"pressuretend":3,"visgreater":false,"visibility":127,"waterlevel":4001,"leveltrend":3,"cspeed":255,"cdir":360,"cspeed2":255,"cdir2":360,"cdepth2":31,"cspeed3":255,"cdir3":360,"cdepth3":31,"waveheight":255,"waveperiod":63,"wavedir":360,"swellheight":255,"swellperiod":63,"swelldir":360,"seastate":13,"watertemp":501,"preciptype":7,"salinity":510,"ice":3}
{"class":"AIS","device":"stdin","type":9,"repeat":0,"mmsi":111265591,"scaled":false,"alt":15,"speed":0,"accuracy":false,"lon":7128960,"lat":34667073,"course":0,"second":28,"regional":0,"dte":0,"raim":false,"radio":24597}
{"class":"AIS","device":"stdin","type":10,"repeat":0,"mmsi":366814480,"scaled":false,"dest_mmsi":366832740}
diff --git a/www/AIVDM.txt b/www/AIVDM.txt index e08c1a41..5297a44d 100644 --- a/www/AIVDM.txt +++ b/www/AIVDM.txt @@ -4843,13 +4843,13 @@ made integer or string display dependent on the "scaled" flag.) | 5 | draught | shiptype, epfd | 6(1/14)| lon, lat, cspeed | - | 6(1/18)| lon, lat | - -| 6(1/20)| berth_lon, berth_lat, berth_depth | position* +| 6(1/20)| berth_lon, berth_lat, berth_depth | position | 6(1/22)| lon, lat | - | 6(1/25)| cargocode | cargocode* | 6(1/28)| lon, lat | rtype | 6(1/32)| lon, lat, cspeed | - | 6(235/100) | - | racon, light -| 8(1/11)| lon, lat, airtemp, dewpoint, | preciptype +| 8(1/11)| lon, lat, airtemp, dewpoint, | preciptype, ice | | visibility, waterlevel, cspeed, | | | cspeed2, cspeed3, waveheight, | | | swellheight, watertemp salinity | |