From ac8a01646b2c0a53f399593bce82c0b99b2527d1 Mon Sep 17 00:00:00 2001 From: Nick Foster Date: Sat, 21 Jul 2012 11:10:15 -0700 Subject: [PATCH] Add BDS0,9-3 (air course report) to parser/printer. --- python/modes_parse.py | 15 +++++++++++++++ python/modes_print.py | 14 +++++++++++--- python/modes_sbs1.py | 2 +- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/python/modes_parse.py b/python/modes_parse.py index 8e672b4..f41c83e 100644 --- a/python/modes_parse.py +++ b/python/modes_parse.py @@ -345,6 +345,21 @@ class modes_parse: return [velocity, heading, vert_spd] + def parseBDS09_3(self, data): + #3: {"sub", "icf", "ifr", "nuc", "mhs", "hdg", "ast", "spd", "vrsrc", + # "dvr", "vr", "dhd", "hd"} + mag_hdg = data["mhs"] * 360. / 1024 + vel_src = "TAS" if data["ast"] == 1 else "IAS" + vel = data["spd"] + if data["sub"] == 4: + vel *= 4 + vert_spd = float(data["vr"] - 1) * 64 + if data["dvr"] == 1: + vert_spd = 0 - vert_spd + geo_diff = float(data["hd"] - 1) * 25 + return [mag_hdg, vel_src, vel, vert_spd, geo_diff] + + def parseBDS62(self, data): eps_strings = ["NO EMERGENCY", "GENERAL EMERGENCY", "LIFEGUARD/MEDICAL", "FUEL EMERGENCY", "NO COMMUNICATIONS", "UNLAWFUL INTERFERENCE", "RESERVED", "RESERVED"] diff --git a/python/modes_print.py b/python/modes_print.py index f10c83b..e90d4f0 100644 --- a/python/modes_print.py +++ b/python/modes_print.py @@ -158,10 +158,18 @@ class modes_output_print(modes_parse.modes_parse): elif bdsreg == 0x09: subtype = data["bds09"].get_type() - if subtype == 0 or subtype == 1: - parser = self.parseBDS09_0 if subtype == 0 else self.parseBDS09_1 - [velocity, heading, vert_spd] = parser(data) + if subtype == 0: + [velocity, heading, vert_spd, turnrate] = self.parseBDS09_0(data) + retstr = "Type 17 BDS0,9-%i (track report) from %x with velocity %.0fkt heading %.0f VS %.0f turn rate %.0f" \ + % (subtype, icao24, velocity, heading, vert_spd, turnrate) + elif subtype == 1: + [velocity, heading, vert_spd] = self.parseBDS09_1(data) retstr = "Type 17 BDS0,9-%i (track report) from %x with velocity %.0fkt heading %.0f VS %.0f" % (subtype, icao24, velocity, heading, vert_spd) + elif subtype == 3: + [mag_hdg, vel_src, vel, vert_spd, geo_diff] = self.parseBDS09_3(data) + retstr = "Type 17 BDS0,9-%i (air course report) from %x with %s %.0fkt magnetic heading %.0f VS %.0f geo. diff. from baro. alt. %.0fft" \ + % (subtype, icao24, vel_src, vel, mag_hdg, vert_spd, geo_diff) + else: retstr = "Type 17 BDS0,9-%i from %x not implemented" % (subtype, icao24) diff --git a/python/modes_sbs1.py b/python/modes_sbs1.py index 452d008..20d6457 100644 --- a/python/modes_sbs1.py +++ b/python/modes_sbs1.py @@ -146,7 +146,7 @@ class modes_output_sbs1(modes_parse.modes_parse): 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] = self.parse5(shortdata) + [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) return retstr + self.decode_fs(fs) + "\n"