Add type 5 squawk ID decoding to parser, fix some SBS-1 outputs.

This commit is contained in:
Stephan Ruloff
2013-01-08 17:25:28 -08:00
committed by Nick Foster
parent fcb06ef25a
commit f4fbd25bb0
2 changed files with 28 additions and 5 deletions

View File

@@ -231,6 +231,29 @@ class modes_reply(data_field):
def get_type(self):
return self.get_bits(1,5)
#unscramble mode A/C-style squawk codes for type 5 replies below
def decode_id(id):
C1 = 0x1000
A1 = 0x0800
C2 = 0x0400
A2 = 0x0200 #this represents the order in which the bits come
C4 = 0x0100
A4 = 0x0080
B1 = 0x0020
D1 = 0x0010
B2 = 0x0008
D2 = 0x0004
B4 = 0x0002
D4 = 0x0001
a = ((id & A1) >> 11) + ((id & A2) >> 8) + ((id & A4) >> 5)
b = ((id & B1) >> 5) + ((id & B2) >> 2) + ((id & B4) << 1)
c = ((id & C1) >> 12) + ((id & C2) >> 9) + ((id & C4) >> 6)
d = ((id & D1) >> 2) + ((id & D2) >> 1) + ((id & D4) << 2)
return (a * 1000) + (b * 100) + (c * 10) + d
class parse:
def __init__(self, mypos):
self.my_location = mypos
@@ -245,7 +268,8 @@ class parse:
return [data["fs"], data["dr"], data["um"], altitude]
def parse5(self, data):
return [data["fs"], data["dr"], data["um"], data["id"]]
squawk = decode_id(data["id"])
return [data["fs"], data["dr"], data["um"], squawk]
def parse11(self, data, ecc):
interrogator = ecc & 0x0F

View File

@@ -94,9 +94,9 @@ class output_sbs1(air_modes.parse):
elif fs == 3:
return "1,0,0,1"
elif fs == 4:
return "1,0,0,"
return "1,0,1,"
elif fs == 5:
return "0,0,0,"
return "0,0,1,"
else:
return ",,,"
@@ -143,11 +143,10 @@ class output_sbs1(air_modes.parse):
return retstr + self.decode_fs(fs) + "\r\n"
def pp5(self, shortdata, ecc):
# I'm not sure what to do with the identiifcation shortdata & 0x1FFF
[datestr, timestr] = self.current_time()
[fs, dr, um, ident] = self.parse5(shortdata)
aircraft_id = self.get_aircraft_id(ecc)
retstr = "MSG,6,0,%i,%06X,%i,%s,%s,%s,%s,,,,,,,,," % (aircraft_id, ecc, aircraft_id+100, datestr, timestr, datestr, timestr)
retstr = "MSG,6,0,%i,%06X,%i,%s,%s,%s,%s,,,,,,,,%04i," % (aircraft_id, ecc, aircraft_id+100, datestr, timestr, datestr, timestr, ident)
return retstr + self.decode_fs(fs) + "\r\n"
def pp11(self, shortdata, ecc):