summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--driver_ais.c7
-rw-r--r--test/daemon/ais-nmea-sample.log.chk6
-rw-r--r--test/sample.aivdm8
-rw-r--r--test/sample.aivdm.chk2
-rw-r--r--test/sample.aivdm.js.chk2
-rw-r--r--test/sample.aivdm.ju.chk2
6 files changed, 25 insertions, 2 deletions
diff --git a/driver_ais.c b/driver_ais.c
index 0dcaebea..4977bcce 100644
--- a/driver_ais.c
+++ b/driver_ais.c
@@ -118,7 +118,7 @@ bool ais_binary_decode(const struct gpsd_errout_t *errout,
case 1: /* Position Report */
case 2:
case 3:
- PERMISSIVE_LENGTH_CHECK(168)
+ PERMISSIVE_LENGTH_CHECK(163)
ais->type1.status = UBITS(38, 4);
ais->type1.turn = SBITS(42, 8);
ais->type1.speed = UBITS(50, 10);
@@ -131,7 +131,10 @@ bool ais_binary_decode(const struct gpsd_errout_t *errout,
ais->type1.maneuver = UBITS(143, 2);
//ais->type1.spare = UBITS(145, 3);
ais->type1.raim = UBITS(148, 1)!=0;
- ais->type1.radio = UBITS(149, 19);
+ if(bitlen >= 168)
+ ais->type1.radio = UBITS(149, 19);
+ if(bitlen < 168)
+ ais->type1.radio = UBITS(149, bitlen - 149);
break;
case 4: /* Base Station Report */
case 11: /* UTC/Date Response */
diff --git a/test/daemon/ais-nmea-sample.log.chk b/test/daemon/ais-nmea-sample.log.chk
index 1591d573..4f4faca8 100644
--- a/test/daemon/ais-nmea-sample.log.chk
+++ b/test/daemon/ais-nmea-sample.log.chk
@@ -24078,6 +24078,7 @@
!AIVDM,1,1,,A,13aIkM@P00PJ@qPNL=e@0?wJ28JO,0*66
{"class":"AIS","type":1,"repeat":0,"mmsi":244740981,"scaled":false,"status":0,"status_text":"Under way using engine","turn":-128,"speed":0,"accuracy":true,"lon":3442480,"lat":31919541,"course":0,"heading":511,"second":45,"maneuver":0,"raim":true,"radio":34463}
!AIVDM,1,1,,A,13aIkM@P00PJ@qPNL=e@0?wJ28JO,5*63
+{"class":"AIS","type":1,"repeat":0,"mmsi":244740981,"scaled":false,"status":0,"status_text":"Under way using engine","turn":-128,"speed":0,"accuracy":true,"lon":3442480,"lat":31919541,"course":0,"heading":511,"second":45,"maneuver":0,"raim":true,"radio":1076}
!AIVDM,1,1,,B,13a8J@00230GutVN`@v2s2CH05Ip,0*09
{"class":"AIS","type":1,"repeat":0,"mmsi":244456000,"scaled":false,"status":0,"status_text":"Under way using engine","turn":0,"speed":131,"accuracy":false,"lon":3141523,"lat":32116984,"course":748,"heading":73,"second":44,"maneuver":0,"raim":false,"radio":22136}
!AIVDM,1,1,,B,169D2N0P008fnA<A:JFM`gwH05Ip,0*30
@@ -84835,6 +84836,7 @@
!AIVDM,1,1,,A,176wWo002J0MpFPNlFqr6p620D7u,0*29
{"class":"AIS","type":1,"repeat":0,"mmsi":477095900,"scaled":false,"status":0,"status_text":"Under way using engine","turn":0,"speed":154,"accuracy":false,"lon":3916496,"lat":32315111,"course":2587,"heading":259,"second":1,"maneuver":0,"raim":false,"radio":82429}
!AIVDM,1,1,,A,176wWo002J0MpFPNlFqr6p620D7u,5*2C
+{"class":"AIS","type":1,"repeat":0,"mmsi":477095900,"scaled":false,"status":0,"status_text":"Under way using engine","turn":0,"speed":154,"accuracy":false,"lon":3916496,"lat":32315111,"course":2587,"heading":259,"second":1,"maneuver":0,"raim":false,"radio":2575}
!AIVDM,1,1,,B,23`spfwP000CTujMGwHpp?v225J0,0*0D
{"class":"AIS","type":2,"repeat":0,"mmsi":244250811,"scaled":false,"status":15,"status_text":"Not defined","turn":-128,"speed":0,"accuracy":false,"lon":2566073,"lat":30801763,"course":2272,"heading":511,"second":1,"maneuver":0,"raim":true,"radio":22144}
!AIVDM,1,1,,A,13HUFT?P@O02rAvLwj13=jF00<2D,0*04
@@ -95200,6 +95202,7 @@
!AIVDM,1,1,,B,13bV6F7P1>0IDt`NUQk;f?vJ05J0,0*22
{"class":"AIS","type":1,"repeat":0,"mmsi":245991000,"scaled":false,"status":7,"status_text":"Engaged in fishing","turn":-128,"speed":78,"accuracy":false,"lon":3319700,"lat":32072140,"course":3000,"heading":511,"second":13,"maneuver":0,"raim":false,"radio":22144}
!AIVDM,1,1,,A,13bV6F7P1>0IDt`NUQk;f?vJ05J0,5*24
+{"class":"AIS","type":1,"repeat":0,"mmsi":245991000,"scaled":false,"status":7,"status_text":"Engaged in fishing","turn":-128,"speed":78,"accuracy":false,"lon":3319700,"lat":32072140,"course":3000,"heading":511,"second":13,"maneuver":0,"raim":false,"radio":692}
!AIVDM,1,1,,A,13o5j2000e8Vf9hDaU62sR@H087i,0*21
{"class":"AIS","type":1,"repeat":0,"mmsi":259093000,"scaled":false,"status":0,"status_text":"Under way using engine","turn":0,"speed":45,"accuracy":false,"lon":72184120,"lat":21652760,"course":750,"heading":72,"second":12,"maneuver":0,"raim":false,"radio":33265}
!AIVDM,2,1,4,A,53UM?N02=3`M=`QF220Di0T@61>2222222222216D8KE;4p`0?C0H0klUCPH4l0B,0*6A
@@ -101488,6 +101491,7 @@
!AIVDM,1,1,,A,13c:Bh000oPLEHTNUniafWlT0@;l,0*1E
{"class":"AIS","type":1,"repeat":0,"mmsi":246584000,"scaled":false,"status":0,"status_text":"Under way using engine","turn":0,"speed":55,"accuracy":true,"lon":3713810,"lat":32077510,"course":2490,"heading":250,"second":18,"maneuver":0,"raim":false,"radio":66292}
!AIVDM,1,1,,A,13c:Bh000oPLEHTNUniafWlT0@;l,5*1B
+{"class":"AIS","type":1,"repeat":0,"mmsi":246584000,"scaled":false,"status":0,"status_text":"Under way using engine","turn":0,"speed":55,"accuracy":true,"lon":3713810,"lat":32077510,"course":2490,"heading":250,"second":18,"maneuver":0,"raim":false,"radio":2071}
!AIVDM,1,1,,A,13LAmf001SPK6VBQtnM9KWTb00Sm,0*52
{"class":"AIS","type":1,"repeat":0,"mmsi":230979000,"scaled":false,"status":0,"status_text":"Under way using engine","turn":0,"speed":99,"accuracy":true,"lon":3552457,"lat":35599988,"course":2414,"heading":242,"second":21,"maneuver":0,"raim":false,"radio":2293}
!AIVDM,1,1,,B,13=I`D5P008VjS>DanJ=5OvV0`;p,0*06
@@ -116370,6 +116374,7 @@
!AIVDM,1,1,,B,15Oq?H0P01ISTLDA7AL7kOw60<71,0*6C
{"class":"AIS","type":1,"repeat":0,"mmsi":368988000,"scaled":false,"status":0,"status_text":"Under way using engine","turn":-128,"speed":1,"accuracy":false,"lon":-54058102,"lat":17944944,"course":1997,"heading":511,"second":35,"maneuver":0,"raim":false,"radio":49601}
!AIVDM,1,1,,A,13aI9awP00PLJ0@NSp8J0Ow<28Es,5*47
+{"class":"AIS","type":1,"repeat":0,"mmsi":244730279,"scaled":false,"status":15,"status_text":"Not defined","turn":-128,"speed":0,"accuracy":true,"lon":3723272,"lat":32045089,"course":2561,"heading":511,"second":38,"maneuver":0,"raim":true,"radio":1067}
!AIVDM,1,1,,B,3025OKhP00PJcu2NL7QP0?w:2Bo3,0*79
{"class":"AIS","type":3,"repeat":0,"mmsi":2187119,"scaled":false,"status":0,"status_text":"Under way using engine","turn":-128,"speed":0,"accuracy":true,"lon":3497889,"lat":31917958,"course":0,"heading":511,"second":37,"maneuver":0,"raim":true,"radio":77251}
!AIVDM,2,1,8,A,53aI:MT000010W;SK804lDh4pB2222222000001?0a883tU<?00OPP00,0*1C
@@ -154731,6 +154736,7 @@
!AIVDM,1,1,,A,13aDCD@P0jPCTD6Mdb=DhgvR2L7w,0*5E
{"class":"AIS","type":1,"repeat":0,"mmsi":244650833,"scaled":false,"status":0,"status_text":"Under way using engine","turn":-128,"speed":50,"accuracy":true,"lon":2564739,"lat":31140405,"course":1218,"heading":511,"second":17,"maneuver":0,"raim":true,"radio":115199}
!AIVDM,1,1,,A,101A9kPP03PLIN0NV45aH?vP25J4,5*78
+{"class":"AIS","type":1,"repeat":0,"mmsi":1329614,"scaled":false,"status":0,"status_text":"Under way using engine","turn":-128,"speed":3,"accuracy":true,"lon":3722176,"lat":32080918,"course":2400,"heading":511,"second":16,"maneuver":0,"raim":true,"radio":692}
!AIVDM,1,1,,B,14a2oD3001PC1G6MwMWHInT80PRo,0*77
{"class":"AIS","type":1,"repeat":0,"mmsi":311474000,"scaled":false,"status":3,"status_text":"Restricted manoeuverability","turn":0,"speed":1,"accuracy":true,"lon":2493155,"lat":31448477,"course":2151,"heading":210,"second":4,"maneuver":0,"raim":false,"radio":133303}
!AIVDM,1,1,,A,16K8Au@001awU:nD9lAIwnrR2L4;,0*51
diff --git a/test/sample.aivdm b/test/sample.aivdm
index a155798a..c54f9daa 100644
--- a/test/sample.aivdm
+++ b/test/sample.aivdm
@@ -1092,3 +1092,11 @@ AIVDM,2,2,1,B,00000000000,2*26
# type=20
#
!AIVDM,1,1,,A,D028rqP<QNfp000000000000000,2*0C
+#
+# type=1 length=163
+#
+!AIVDM,1,1,,A,13aIkM@P00PJ@qPNL=e@0?wJ28JO,5*63
+#
+# type=1 length=168
+#
+!AIVDM,1,1,,A,13aIkM@P00PJ@qPNL=e@0?wJ28JO,0*66
diff --git a/test/sample.aivdm.chk b/test/sample.aivdm.chk
index 01aba15a..50ea6a5a 100644
--- a/test/sample.aivdm.chk
+++ b/test/sample.aivdm.chk
@@ -93,3 +93,5 @@
20|0|002442003|1385|2|7|1125|0|0|0|0|0|0|0|0|0|0|0|0
20|0|002320025|1162|1|7|250|225|1|7|0|1475|5|7|750|19|9|0|1296
20|0|002243302|200|5|7|750|0|0|0|0|0|0|0|0|0|0|0|0
+1|0|244740981|0|-128|0|1|3442480|31919541|0|511|45|0x0|1|0x434
+1|0|244740981|0|-128|0|1|3442480|31919541|0|511|45|0x0|1|0x869f
diff --git a/test/sample.aivdm.js.chk b/test/sample.aivdm.js.chk
index b672bcda..0efb2c2a 100644
--- a/test/sample.aivdm.js.chk
+++ b/test/sample.aivdm.js.chk
@@ -93,3 +93,5 @@
{"class":"AIS","device":"stdin","type":20,"repeat":0,"mmsi":2442003,"scaled":true,"offset1":1385,"number1":2,"timeout1":7,"increment1":1125,"offset2":0,"number2":0,"timeout2":0,"increment2":0,"offset3":0,"number3":0,"timeout3":0,"increment3":0,"offset4":0,"number4":0,"timeout4":0,"increment4":0}
{"class":"AIS","device":"stdin","type":20,"repeat":0,"mmsi":2320025,"scaled":true,"offset1":1162,"number1":1,"timeout1":7,"increment1":250,"offset2":225,"number2":1,"timeout2":7,"increment2":0,"offset3":1475,"number3":5,"timeout3":7,"increment3":750,"offset4":19,"number4":9,"timeout4":0,"increment4":1296}
{"class":"AIS","device":"stdin","type":20,"repeat":0,"mmsi":2243302,"scaled":true,"offset1":200,"number1":5,"timeout1":7,"increment1":750,"offset2":0,"number2":0,"timeout2":0,"increment2":0,"offset3":0,"number3":0,"timeout3":0,"increment3":0,"offset4":0,"number4":0,"timeout4":0,"increment4":0}
+{"class":"AIS","device":"stdin","type":1,"repeat":0,"mmsi":244740981,"scaled":true,"status":0,"status_text":"Under way using engine","turn":"nan","speed":0.0,"accuracy":true,"lon":5.7375,"lat":53.1992,"course":0.0,"heading":511,"second":45,"maneuver":0,"raim":true,"radio":1076}
+{"class":"AIS","device":"stdin","type":1,"repeat":0,"mmsi":244740981,"scaled":true,"status":0,"status_text":"Under way using engine","turn":"nan","speed":0.0,"accuracy":true,"lon":5.7375,"lat":53.1992,"course":0.0,"heading":511,"second":45,"maneuver":0,"raim":true,"radio":34463}
diff --git a/test/sample.aivdm.ju.chk b/test/sample.aivdm.ju.chk
index f650c9b7..e72864cf 100644
--- a/test/sample.aivdm.ju.chk
+++ b/test/sample.aivdm.ju.chk
@@ -93,3 +93,5 @@
{"class":"AIS","device":"stdin","type":20,"repeat":0,"mmsi":2442003,"scaled":false,"offset1":1385,"number1":2,"timeout1":7,"increment1":1125,"offset2":0,"number2":0,"timeout2":0,"increment2":0,"offset3":0,"number3":0,"timeout3":0,"increment3":0,"offset4":0,"number4":0,"timeout4":0,"increment4":0}
{"class":"AIS","device":"stdin","type":20,"repeat":0,"mmsi":2320025,"scaled":false,"offset1":1162,"number1":1,"timeout1":7,"increment1":250,"offset2":225,"number2":1,"timeout2":7,"increment2":0,"offset3":1475,"number3":5,"timeout3":7,"increment3":750,"offset4":19,"number4":9,"timeout4":0,"increment4":1296}
{"class":"AIS","device":"stdin","type":20,"repeat":0,"mmsi":2243302,"scaled":false,"offset1":200,"number1":5,"timeout1":7,"increment1":750,"offset2":0,"number2":0,"timeout2":0,"increment2":0,"offset3":0,"number3":0,"timeout3":0,"increment3":0,"offset4":0,"number4":0,"timeout4":0,"increment4":0}
+{"class":"AIS","device":"stdin","type":1,"repeat":0,"mmsi":244740981,"scaled":false,"status":0,"status_text":"Under way using engine","turn":-128,"speed":0,"accuracy":true,"lon":3442480,"lat":31919541,"course":0,"heading":511,"second":45,"maneuver":0,"raim":true,"radio":1076}
+{"class":"AIS","device":"stdin","type":1,"repeat":0,"mmsi":244740981,"scaled":false,"status":0,"status_text":"Under way using engine","turn":-128,"speed":0,"accuracy":true,"lon":3442480,"lat":31919541,"course":0,"heading":511,"second":45,"maneuver":0,"raim":true,"radio":34463}