diff --git a/apps/uhd_modes.py b/apps/uhd_modes.py index c883614..6f271c7 100755 --- a/apps/uhd_modes.py +++ b/apps/uhd_modes.py @@ -223,7 +223,10 @@ if __name__ == '__main__': msg = queue.delete_head() #blocking read for out in outputs: - out(msg.to_string()) + try: + out(msg.to_string()) + except ADSBError: + pass elif runner.done: raise KeyboardInterrupt diff --git a/python/modes_parse.py b/python/modes_parse.py index ba60f39..f628af2 100644 --- a/python/modes_parse.py +++ b/python/modes_parse.py @@ -51,12 +51,16 @@ class data_field: #done once on init so you don't have to iterate down every time you grab a field def parse(self): fields = {} - for field in self.types[self.get_type()]: - bits = self.types[self.get_type()][field] - if len(bits) == 3: - obj = bits[2](self.get_bits(bits[0], bits[1])) - fields.update(obj.parse()) - fields.update({field: self.get_bits(bits[0], bits[1])}) + mytype = self.get_type() + if mytype in self.types: + for field in self.types[mytype]: + bits = self.types[self.get_type()][field] + if len(bits) == 3: + obj = bits[2](self.get_bits(bits[0], bits[1])) + fields.update(obj.parse()) + fields.update({field: self.get_bits(bits[0], bits[1])}) + else: + raise NoHandlerError(mytype) return fields def get_type(self): diff --git a/python/modes_print.py b/python/modes_print.py index a194c51..4af3b9b 100644 --- a/python/modes_print.py +++ b/python/modes_print.py @@ -32,7 +32,6 @@ class modes_output_print(modes_parse.modes_parse): def parse(self, message): [data, ecc, reference, timestamp] = message.split() - data = modes_parse.modes_reply(long(data, 16)) ecc = long(ecc, 16) reference = float(reference) timestamp = float(timestamp) @@ -45,6 +44,7 @@ class modes_output_print(modes_parse.modes_parse): output = "(%.0f %.10f) " % (refdb, timestamp); try: + data = modes_parse.modes_reply(long(data, 16)) msgtype = data["df"] if msgtype == 0: output += self.print0(data, ecc)