added parsing of b91 telemetry for MicE
- status field of MicE is now parsed for telemetry - fixed bug in telemery parsing code - moved the code to a seprate routine
This commit is contained in:
parent
33eb7a457e
commit
3696ed93a2
68
aprs.py
68
aprs.py
|
|
@ -604,6 +604,12 @@ def parse(raw_sentence):
|
|||
|
||||
body = body + extra
|
||||
|
||||
# attempt to parsed comment telemetry
|
||||
body, telemetry = _parse_comment_telemetry(body)
|
||||
parsed.update(telemetry)
|
||||
|
||||
#TODO !DAO! parsing
|
||||
|
||||
# rest is a comment
|
||||
parsed.update({'comment': body})
|
||||
|
||||
|
|
@ -876,7 +882,10 @@ def parse(raw_sentence):
|
|||
if match:
|
||||
cse, spd = match[0]
|
||||
extra = extra[7:]
|
||||
parsed.update({'course': int(cse), 'speed': int(spd)*1.852}) # knots to kms
|
||||
parsed.update({
|
||||
'course': int(cse),
|
||||
'speed': int(spd)*1.852 # knots to kms
|
||||
})
|
||||
|
||||
# try BRG/NRQ/
|
||||
match = re.findall(r"^([0-9]{3})/([0-9]{3})", extra)
|
||||
|
|
@ -896,26 +905,8 @@ def parse(raw_sentence):
|
|||
|
||||
parsed.update({'altitude': int(altitude)*0.3048})
|
||||
|
||||
# try parse comment telemetry
|
||||
match = re.findall(r"^(.*?)\|([!-{]{2,14})\|(.*)$", extra)
|
||||
if match and len(match[0][2]) % 2 == 0:
|
||||
extra, telemetry, post = match[0]
|
||||
extra += post
|
||||
|
||||
temp = []
|
||||
for i in range(7):
|
||||
temp.append('')
|
||||
|
||||
try:
|
||||
temp[i] = base91(telemetry[i*2:i*2+2])
|
||||
temp[i] = int(temp[i]) if temp[i].is_integer() else temp[i]
|
||||
except:
|
||||
continue
|
||||
|
||||
parsed.update({'telemetry': {'seq': temp[0], 'vals': temp[1:6]}})
|
||||
|
||||
if temp[6] != '':
|
||||
parsed['telemetry'].update({'bits': "{0:08b}".format(int(temp[6]))})
|
||||
extra, telemetry = _parse_comment_telemetry(extra)
|
||||
parsed.update(telemetry)
|
||||
|
||||
if len(extra) > 0 and extra[0] == "/":
|
||||
extra = extra[1:]
|
||||
|
|
@ -928,6 +919,41 @@ def parse(raw_sentence):
|
|||
return parsed
|
||||
|
||||
|
||||
def _parse_comment_telemetry(text):
|
||||
"""
|
||||
Looks for base91 telemetry found in comment field
|
||||
Returns [remaining_text, telemetry]
|
||||
"""
|
||||
match = re.findall(r"^(.*?)\|([!-{]{2,14})\|(.*)$", text)
|
||||
if match and len(match[0][1]) % 2 == 0:
|
||||
text, telemetry, post = match[0]
|
||||
text += post
|
||||
|
||||
temp = [''] * 7
|
||||
for i in range(7):
|
||||
try:
|
||||
temp[i] = base91(telemetry[i*2:i*2+2])
|
||||
temp[i] = int(temp[i]) if temp[i].is_integer() else temp[i]
|
||||
except:
|
||||
continue
|
||||
|
||||
parsed = {
|
||||
'telemetry': {
|
||||
'seq': temp[0],
|
||||
'vals': temp[1:6]
|
||||
}
|
||||
}
|
||||
|
||||
if temp[6] != '':
|
||||
parsed['telemetry'].update({
|
||||
'bits': "{0:08b}".format(int(temp[6]))
|
||||
})
|
||||
|
||||
return [text, parsed]
|
||||
else:
|
||||
return [text, {}]
|
||||
|
||||
|
||||
# Exceptions
|
||||
class GenericError(Exception):
|
||||
"""
|
||||
|
|
|
|||
Loading…
Reference in New Issue