Skip to content

Commit 1442703

Browse files
authored
chore: use sensible default values for NavigationStatus & co. (#165)
1 parent 4211b5f commit 1442703

File tree

3 files changed

+37
-18
lines changed

3 files changed

+37
-18
lines changed

pyais/messages.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -919,7 +919,7 @@ class MessageType1(Payload, CommunicationStateMixin):
919919
msg_type = bit_field(6, int, default=1, signed=False)
920920
repeat = bit_field(2, int, default=0, signed=False)
921921
mmsi = bit_field(30, int, from_converter=from_mmsi)
922-
status = bit_field(4, int, default=0, converter=NavigationStatus.from_value, signed=False)
922+
status = bit_field(4, int, default=NavigationStatus.Undefined, converter=NavigationStatus.from_value, signed=False)
923923
turn = bit_field(8, float, default=TurnRate.NO_TI_DEFAULT, signed=True, to_converter=to_turn, from_converter=from_turn)
924924
speed = bit_field(10, float, from_converter=from_speed, to_converter=to_speed, default=0, signed=False)
925925
accuracy = bit_field(1, bool, default=0, signed=False)
@@ -928,7 +928,7 @@ class MessageType1(Payload, CommunicationStateMixin):
928928
course = bit_field(12, float, from_converter=from_10th, to_converter=to_10th, default=0, signed=False)
929929
heading = bit_field(9, int, default=0, signed=False)
930930
second = bit_field(6, int, default=0, signed=False)
931-
maneuver = bit_field(2, int, default=0, from_converter=ManeuverIndicator.from_value,
931+
maneuver = bit_field(2, int, default=ManeuverIndicator.UNDEFINED, from_converter=ManeuverIndicator.from_value,
932932
to_converter=ManeuverIndicator.from_value, signed=False)
933933
spare_1 = bit_field(3, bytes, default=b'')
934934
raim = bit_field(1, bool, default=0)
@@ -969,7 +969,7 @@ class MessageType4(Payload, CommunicationStateMixin):
969969
accuracy = bit_field(1, bool, default=0, signed=False)
970970
lon = bit_field(28, float, from_converter=from_lat_lon, to_converter=to_lat_lon, signed=True, default=0)
971971
lat = bit_field(27, float, from_converter=from_lat_lon, to_converter=to_lat_lon, signed=True, default=0)
972-
epfd = bit_field(4, int, default=0, from_converter=EpfdType.from_value, to_converter=EpfdType.from_value,
972+
epfd = bit_field(4, int, default=EpfdType.Undefined, from_converter=EpfdType.from_value, to_converter=EpfdType.from_value,
973973
signed=False)
974974
spare_1 = bit_field(10, bytes, default=b'')
975975
raim = bit_field(1, bool, default=0)
@@ -994,7 +994,7 @@ class MessageType5(Payload):
994994
to_stern = bit_field(9, int, default=0, signed=False)
995995
to_port = bit_field(6, int, default=0, signed=False)
996996
to_starboard = bit_field(6, int, default=0, signed=False)
997-
epfd = bit_field(4, int, default=0, from_converter=EpfdType.from_value, to_converter=EpfdType.from_value)
997+
epfd = bit_field(4, int, default=EpfdType.Undefined, from_converter=EpfdType.from_value, to_converter=EpfdType.from_value)
998998
month = bit_field(4, int, default=0, signed=False)
999999
day = bit_field(5, int, default=0, signed=False)
10001000
hour = bit_field(5, int, default=0, signed=False)
@@ -1258,7 +1258,7 @@ class MessageType19(Payload):
12581258
to_stern = bit_field(9, int, default=0, signed=False)
12591259
to_port = bit_field(6, int, default=0, signed=False)
12601260
to_starboard = bit_field(6, int, default=0, signed=False)
1261-
epfd = bit_field(4, int, default=0, from_converter=EpfdType.from_value, to_converter=EpfdType.from_value)
1261+
epfd = bit_field(4, int, default=EpfdType.Undefined, from_converter=EpfdType.from_value, to_converter=EpfdType.from_value)
12621262
raim = bit_field(1, bool, default=0)
12631263
dte = bit_field(1, bool, default=0)
12641264
assigned = bit_field(1, bool, default=0, signed=False)
@@ -1319,7 +1319,7 @@ class MessageType21(Payload):
13191319
to_port = bit_field(6, int, default=0, signed=False)
13201320
to_starboard = bit_field(6, int, default=0, signed=False)
13211321

1322-
epfd = bit_field(4, int, default=0, from_converter=EpfdType.from_value, to_converter=EpfdType.from_value)
1322+
epfd = bit_field(4, int, default=EpfdType.Undefined, from_converter=EpfdType.from_value, to_converter=EpfdType.from_value)
13231323
second = bit_field(6, int, default=0, signed=False)
13241324
off_position = bit_field(1, bool, default=0)
13251325
reserved_1 = bit_field(8, int, default=0, signed=False)
@@ -1731,7 +1731,7 @@ class MessageType27(Payload):
17311731

17321732
accuracy = bit_field(1, bool, default=0, signed=False)
17331733
raim = bit_field(1, bool, default=0, signed=False)
1734-
status = bit_field(4, int, default=0, from_converter=NavigationStatus, to_converter=NavigationStatus, signed=False)
1734+
status = bit_field(4, int, default=NavigationStatus.Undefined, from_converter=NavigationStatus, to_converter=NavigationStatus, signed=False)
17351735
lon = bit_field(18, float, from_converter=from_lat_lon_600, to_converter=to_lat_lon_600, default=0, signed=True)
17361736
lat = bit_field(17, float, from_converter=from_lat_lon_600, to_converter=to_lat_lon_600, default=0, signed=True)
17371737
speed = bit_field(6, float, default=0, signed=False)

tests/test_decode.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -1350,22 +1350,22 @@ def test_msg_type_6_json_reverse(self):
13501350

13511351
def test_rot_encode_yields_expected_values(self):
13521352
encoded = encode_dict({"msg_type": 1, "mmsi": 123, "turn": 25.0})[0]
1353-
assert encoded == "!AIVDO,1,1,,A,10000Nh600000000000000000000,0*05"
1353+
assert encoded == "!AIVDO,1,1,,A,10000Nw60000000000000001P000,0*7B"
13541354

13551355
encoded = encode_dict({"msg_type": 1, "mmsi": 123, "turn": -16.0})[0]
1356-
assert encoded == "!AIVDO,1,1,,A,10000Nhs@0000000000000000000,0*30"
1356+
assert encoded == "!AIVDO,1,1,,A,10000Nws@000000000000001P000,0*4E"
13571357

13581358
encoded = encode_dict({"msg_type": 1, "mmsi": 123, "turn": 4.0})[0]
1359-
assert encoded == "!AIVDO,1,1,,A,10000Nh2@0000000000000000000,0*71"
1359+
assert encoded == "!AIVDO,1,1,,A,10000Nw2@000000000000001P000,0*0F"
13601360

13611361
encoded = encode_dict({"msg_type": 1, "mmsi": 123, "turn": -4.0})[0]
1362-
assert encoded == "!AIVDO,1,1,,A,10000Nhuh0000000000000000000,0*1E"
1362+
assert encoded == "!AIVDO,1,1,,A,10000Nwuh000000000000001P000,0*60"
13631363

13641364
encoded = encode_dict({"msg_type": 1, "mmsi": 123, "turn": -121.0})[0]
1365-
assert encoded == "!AIVDO,1,1,,A,10000Nhk00000000000000000000,0*58"
1365+
assert encoded == "!AIVDO,1,1,,A,10000Nwk0000000000000001P000,0*26"
13661366

13671367
encoded = encode_dict({"msg_type": 1, "mmsi": 123, "turn": 64.0})[0]
1368-
assert encoded == "!AIVDO,1,1,,A,10000Nh9P0000000000000000000,0*6A"
1368+
assert encoded == "!AIVDO,1,1,,A,10000Nw9P000000000000001P000,0*14"
13691369

13701370
def test_rot_encode_decode(self):
13711371
encoded = encode_dict({"msg_type": 1, "mmsi": 123, "turn": 2.0})[0]

tests/test_encode.py

+24-5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import bitarray
44

55
from pyais import encode_dict, encode_msg
6+
from pyais.constants import NavigationStatus
67
from pyais.decode import decode
78
from pyais.encode import data_to_payload, get_ais_type
89
from pyais.exceptions import UnknownPartNoException
@@ -1020,7 +1021,25 @@ def test_encode_msg_type2():
10201021
'type': 2
10211022
}
10221023
encoded = encode_dict(data)[0]
1023-
assert encoded == "!AIVDO,1,1,,A,1S9edj0003PecbBN`ja@0?w42000,0*4A"
1024+
assert encoded == "!AIVDO,1,1,,A,1S9edj?003PecbBN`ja@0?w5R000,0*24"
1025+
1026+
data = {
1027+
'accuracy': 1,
1028+
'course': 0.0,
1029+
'heading': 511,
1030+
'lat': 53.542675,
1031+
'lon': 9.97942833333333,
1032+
'mmsi': 211512520,
1033+
'raim': 1,
1034+
'repeat': 2,
1035+
'second': 34,
1036+
'speed': 0.3,
1037+
'turn': 0,
1038+
'type': 2,
1039+
'status': NavigationStatus.UnderWayUsingEngine,
1040+
}
1041+
encoded = encode_dict(data)[0]
1042+
assert encoded == "!AIVDO,1,1,,A,1S9edj0003PecbBN`ja@0?w5R000,0*2B"
10241043

10251044

10261045
def test_encode_msg_type_3():
@@ -1042,7 +1061,7 @@ def test_encode_msg_type_3():
10421061
}
10431062

10441063
encoded = encode_dict(data)[0]
1045-
assert encoded == "!AIVDO,1,1,,A,15NSH95001G?wopE`beasVk@0E5:,0*6F"
1064+
assert encoded == "!AIVDO,1,1,,A,15NSH95001G?wopE`beasVkAPE5:,0*0E"
10461065

10471066

10481067
def test_encode_type_1_default():
@@ -1051,7 +1070,7 @@ def test_encode_type_1_default():
10511070
"""
10521071
data = {'mmsi': 123456789, 'type': 1}
10531072
encoded = encode_dict(data)[0]
1054-
assert encoded == "!AIVDO,1,1,,A,11mg=5@P00000000000000000000,0*36"
1073+
assert encoded == "!AIVDO,1,1,,A,11mg=5OP0000000000000001P000,0*58"
10551074

10561075

10571076
def test_encode_type_1():
@@ -1088,7 +1107,7 @@ def test_mmsi_too_long():
10881107
encoded = encode_msg(msg)
10891108
decoded = decode(encoded[0])
10901109

1091-
assert encoded[0] == "!AIVDO,1,1,,A,1?wwwwhP00000000000000000000,0*12"
1110+
assert encoded[0] == "!AIVDO,1,1,,A,1?wwwwwP0000000000000001P000,0*6C"
10921111
assert decoded.mmsi == 1073741823
10931112

10941113

@@ -1097,7 +1116,7 @@ def test_lon_too_large():
10971116
encoded = encode_msg(msg)
10981117
decoded = decode(encoded[0])
10991118

1100-
assert encoded[0] == "!AIVDO,1,1,,A,10000NhP00Owwwv0000000000000,0*1D"
1119+
assert encoded[0] == "!AIVDO,1,1,,A,10000NwP00Owwwv000000001P000,0*63"
11011120
assert decoded.lon == -2e-06
11021121

11031122

0 commit comments

Comments
 (0)