def __init__(self, msgbinary): super().__init__(msgbinary) self.aidtype = self.navaidtypes[self.decode_sixbit_integer( msgbinary[38:43])] name = binary.decode_sixbit_ascii(msgbinary[43:163]).rstrip() self.posfixaccuracy = self.accuracy[self.decode_sixbit_integer( msgbinary[163:164])] self.longitude = binary.decode_twos_complement( msgbinary[164:192]) / 600000.0 self.latitude = binary.decode_twos_complement( msgbinary[192:219]) / 600000.0 tobow = self.decode_sixbit_integer(msgbinary[219:228]) tostern = self.decode_sixbit_integer(msgbinary[228:237]) toport = self.decode_sixbit_integer(msgbinary[237:243]) tostarboard = self.decode_sixbit_integer(msgbinary[243:249]) self.length = tobow + tostern self.width = toport + tostarboard self.epfdfixtype = self.epfdfixtypes[self.decode_sixbit_integer( msgbinary[249:253])] self.timestampsecond = self.decode_sixbit_integer(msgbinary[253:259]) self.offposition = self.binaryflag[self.decode_sixbit_integer( msgbinary[259:260])] self.raim = self.binaryflag[self.decode_sixbit_integer( msgbinary[268:269])] self.virtualaid = self.binaryflag[self.decode_sixbit_integer( msgbinary[269:270])] self.assignedmode = self.binaryflag[self.decode_sixbit_integer( msgbinary[270:271])] nameextension = binary.decode_sixbit_ascii(msgbinary[272:361]).rstrip() self.name = name + nameextension
def __init__(self, msgbinary): super().__init__(msgbinary) self.aisversion = self.decode_sixbit_integer(msgbinary[38:40]) self.imo = self.decode_sixbit_integer(msgbinary[40:70]) self.callsign = binary.decode_sixbit_ascii(msgbinary[70:112]).rstrip() self.name = binary.decode_sixbit_ascii(msgbinary[112:232]).rstrip() try: self.shiptype = self.shiptypes[self.decode_sixbit_integer( msgbinary[232:240])] except KeyError: self.shiptype = 'Unknown' tobow = self.decode_sixbit_integer(msgbinary[240:249]) tostern = self.decode_sixbit_integer(msgbinary[249:258]) toport = self.decode_sixbit_integer(msgbinary[258:264]) tostarboard = self.decode_sixbit_integer(msgbinary[264:270]) self.length = tobow + tostern self.width = toport + tostarboard self.epfdfixtype = self.epfdfixtypes[self.decode_sixbit_integer( msgbinary[270:274])] etamonth = calendar.month_name[ self.decode_sixbit_integer(msgbinary[274:278])] etaday = self.decode_sixbit_integer(msgbinary[278:283]) etahour = self.decode_sixbit_integer(msgbinary[283:288]) etamin = self.decode_sixbit_integer(msgbinary[288:294]) self.eta = '{:02d}:{:02d} {} {}'.format( etahour, etamin, etaday, etamonth) self.draught = self.decode_sixbit_integer(msgbinary[294:302]) / 10 self.destination = binary.decode_sixbit_ascii( msgbinary[302:422]).rstrip() self.dte = self.dtevalues[self.decode_sixbit_integer( msgbinary[422:423])]
def __init__(self, msgbinary): super().__init__(msgbinary) self.sequenceno = self.decode_sixbit_integer(msgbinary[38:40]) self.destinationmmsi = self.decode_sixbit_integer(msgbinary[40:70]) self.retransmitflag = self.binaryflag[self.decode_sixbit_integer( msgbinary[70:71])] self.msgtext = binary.decode_sixbit_ascii(msgbinary[72:936]).rstrip()
def inland_static_and_voyage_data(self): """ sub message type that provides information on Inland Vessels """ self.msgsubtype = 'Inland Static & Voyage Data' self.msgdetails['European Vessel ID'] = binary.decode_sixbit_ascii( self.msgbinary[56:104]) self.msgdetails['Length'] = self.decode_sixbit_integer( self.msgbinary[104:117]) / 10 self.msgdetails['Beam'] = self.decode_sixbit_integer( self.msgbinary[117:127]) / 10 self.msgdetails['Ship Type'] = self.decode_sixbit_integer( self.msgbinary[127:141]) self.msgdetails['Hazard'] = self.hazards[self.decode_sixbit_integer( self.msgbinary[141:144])] self.msgdetails['Draught'] = self.decode_sixbit_integer( self.msgbinary[144:155]) / 100 self.msgdetails['Load Status'] = self.loadstatuses[ self.decode_sixbit_integer(self.msgbinary[155:157])] self.msgdetails['Speed Measurement Quality'] = self.quality[ self.decode_sixbit_integer(self.msgbinary[157:158])] self.msgdetails['Course Measurement Quality'] = self.quality[ self.decode_sixbit_integer(self.msgbinary[158:159])] self.msgdetails['Heading Measurement Quality'] = self.quality[ self.decode_sixbit_integer(self.msgbinary[159:160])]
def __init__(self, msgbinary): super().__init__(msgbinary) self.speed = self.decode_sixbit_integer(msgbinary[46:56]) / 10 self.posfixaccuracy = self.accuracy[self.decode_sixbit_integer( msgbinary[46:47])] self.longitude = binary.decode_twos_complement( msgbinary[57:85]) / 600000.0 self.latitude = binary.decode_twos_complement( msgbinary[85:112]) / 600000.0 self.courseoverground = self.decode_sixbit_integer( msgbinary[112:124]) / 10 self.trueheading = self.decode_sixbit_integer(msgbinary[124:133]) self.timestampsecond = self.decode_sixbit_integer(msgbinary[133:139]) self.name = binary.decode_sixbit_ascii(msgbinary[143:263]).rstrip() try: self.shiptype = self.shiptypes[self.decode_sixbit_integer( msgbinary[263:271])] except KeyError: self.shiptype = 'Unknown' tobow = self.decode_sixbit_integer(msgbinary[271:280]) tostern = self.decode_sixbit_integer(msgbinary[280:289]) toport = self.decode_sixbit_integer(msgbinary[289:295]) tostarboard = self.decode_sixbit_integer(msgbinary[295:301]) self.length = tobow + tostern self.width = toport + tostarboard self.epfdfixtype = self.epfdfixtypes[self.decode_sixbit_integer( msgbinary[301:305])] self.raim = self.binaryflag[self.decode_sixbit_integer( msgbinary[305:306])] self.dte = self.dtevalues[self.decode_sixbit_integer( msgbinary[306:307])]
def __init__(self, msgbinary): super().__init__(msgbinary) self.partno = self.decode_sixbit_integer(msgbinary[38:40]) if self.partno == 0: self.name = binary.decode_sixbit_ascii(msgbinary[40:160]).rstrip() elif self.partno == 1: self.shiptype = self.shiptypes[self.decode_sixbit_integer( msgbinary[40:48])] self.vendorid = binary.decode_sixbit_ascii(msgbinary[48:66]) self.unitmodelcode = self.decode_sixbit_integer(msgbinary[66:70]) self.serialno = self.decode_sixbit_integer(msgbinary[70:90]) self.callsign = binary.decode_sixbit_ascii( msgbinary[90:132]).rstrip() tobow = self.decode_sixbit_integer(msgbinary[240:249]) tostern = self.decode_sixbit_integer(msgbinary[249:258]) toport = self.decode_sixbit_integer(msgbinary[258:264]) tostarboard = self.decode_sixbit_integer(msgbinary[264:270]) self.length = tobow + tostern self.width = toport + tostarboard
def test_ASCII_decode(self): """ Tests converting a binary string into readable text. """ testbinarystr = ('010100001000000101100000010001010101001001000011' '001011100000000010010010001111010111001110' '100000000110001111011000100000001010010101' '001101010000010011100000001111010110000101' '010010100000010100001000000101100000001100' '000001011010011001100000000100001111000111' '100000110000110001110010110011110100110101' '110110110111111000111001') expectedstr = 'THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 0123456789' resultstr = binary.decode_sixbit_ascii(testbinarystr[0:324]) self.assertEqual(expectedstr, resultstr)
def marine_traffic_signals(self): """ traffic information for entrance to a harbour which traffic flow is controlled """ self.msgsubtype = "Marine Traffic Signals" self.msgdetails['Message Linkage ID'] = self.decode_sixbit_integer( self.msgbinary[56:66]) self.msgdetails['Signal Station Name'] = binary.decode_sixbit_ascii( self.msgbinary[66:186]).rstrip() self.msgdetails['Signal Status'] = \ self.signalstatus[self.decode_sixbit_integer( self.msgbinary[235:237])] self.msgdetails['Signal In Service'] = \ self.marinetrafficsignals[self.decode_sixbit_integer( self.msgbinary[237:242])] hour = self.decode_sixbit_integer(self.msgbinary[242:247]) minute = self.decode_sixbit_integer(self.msgbinary[247:253]) self.msgdetails['Time UTC'] = '{:02d}:{:02d}'.format(hour, minute) self.msgdetails['Expected Next Signal'] = \ self.marinetrafficsignals[self.decode_sixbit_integer( self.msgbinary[253:258])]
def test_empty_string_decode_sixbit_ascii(self): """ an empty string should raise a NoBinaryData exception """ with self.assertRaises(binary.NoBinaryData): binary.decode_sixbit_ascii('')