summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2013-10-01 23:01:46 -0400
committerEric S. Raymond <esr@thyrsus.com>2013-10-01 23:02:23 -0400
commit0b932951d450ac0bc775c4f3abb238b05bfeac76 (patch)
tree2e981a2ef319ca79bb82cde10f353dee851342fa
parentfaad7223d756dff2f149cec6f32911c0fac468f0 (diff)
downloadgpsd-0b932951d450ac0bc775c4f3abb238b05bfeac76.tar.gz
New-style dumping (numeric and text both) for two more fields.
All regression tests pass.
-rw-r--r--gpsd_json.c22
-rw-r--r--jsongen.py.in2
-rw-r--r--test/sample.aivdm.js.chk4
-rw-r--r--test/sample.aivdm.ju.chk4
-rw-r--r--www/AIVDM.txt4
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 |