From 63d8d2fc4e325badf4bcd5fce036ca7384664a5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Gru=CC=88ndger?= Date: Thu, 28 Sep 2017 19:10:27 +0200 Subject: [PATCH] Implemented Naviter parser --- ogn/parser/parse.py | 14 +++++++++++++- ogn/parser/pattern.py | 6 ++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/ogn/parser/parse.py b/ogn/parser/parse.py index e76758b..8ad23ca 100644 --- a/ogn/parser/parse.py +++ b/ogn/parser/parse.py @@ -3,6 +3,7 @@ from datetime import datetime from ogn.parser.utils import createTimestamp, parseAngle, kts2kmh, feet2m, fpm2ms from ogn.parser.pattern import PATTERN_APRS_POSITION, PATTERN_APRS_STATUS, PATTERN_RECEIVER_BEACON, PATTERN_AIRCRAFT_BEACON +from ogn.parser.pattern import PATTERN_NAVITER_BEACON from ogn.parser.exceptions import AprsParseError, OgnParseError @@ -95,7 +96,18 @@ def parse_lt24_beacon(aprs_comment): def parse_naviter_beacon(aprs_comment): - raise NotImplementedError("Naviter parser not implemented") + ac_match = re.search(PATTERN_NAVITER_BEACON, aprs_comment) + if ac_match: + return {'stealth': (int(ac_match.group('details'), 16) & 0b1000000000000000) >> 15 == 1, + 'do_not_track': (int(ac_match.group('details'), 16) & 0b0100000000000000) >> 14 == 1, + 'aircraft_type': (int(ac_match.group('details'), 16) & 0b0011110000000000) >> 10, + 'address_type': (int(ac_match.group('details'), 16) & 0b0000001111110000) >> 4, + 'reserved': (int(ac_match.group('details'), 16) & 0b0000000000001111), + 'address': ac_match.group('id'), + 'climb_rate': int(ac_match.group('climb_rate')) * fpm2ms if ac_match.group('climb_rate') else None, + 'turn_rate': float(ac_match.group('turn_rate')) if ac_match.group('turn_rate') else None} + else: + raise OgnParseError(aprs_comment) def parse_skylines_beacon(aprs_comment): diff --git a/ogn/parser/pattern.py b/ogn/parser/pattern.py index 4093e1f..8a0dce2 100644 --- a/ogn/parser/pattern.py +++ b/ogn/parser/pattern.py @@ -4,6 +4,12 @@ import re PATTERN_APRS_POSITION = re.compile(r"^(?P.+?)>(?P[A-Z0-9]+),((?P[A-Za-z0-9]+)\*)?.*,(?P.+?):/(?P