Better SELCALL parsing.

This commit is contained in:
Marat Fayzullin 2023-05-24 19:49:16 -04:00
parent c79abd96ba
commit 506a13be3f
2 changed files with 12 additions and 8 deletions

View File

@ -46,7 +46,8 @@ class EasDemodulator(MultimonDemodulator):
class SelCallDemodulator(MultimonDemodulator):
def __init__(self, service: bool = False):
super().__init__([
"ZVEI1", "ZVEI2", "ZVEI3", "DZVEI", "PZVEI",
# These aappear to be rarely used and very similar, so they trigger at once
# "ZVEI1", "ZVEI2", "ZVEI3", "DZVEI", "PZVEI",
"DTMF", "EEA", "EIA", "CCIR"
], service=service)

View File

@ -20,7 +20,7 @@ class MultimonParser(ThreadModule):
# FLEX message status
self.reFlex3 = re.compile(r"\d+/\d+/(\S)/\S")
# <mode>: C
self.reSelCall = re.compile(r"(ZVEI1|ZVEI2|ZVEI3|DZVEI|PZVEI|DTMF|EEA|EIA|CCIR):\s+(\S)")
self.reSelCall = re.compile(r"(ZVEI1|ZVEI2|ZVEI3|DZVEI|PZVEI|DTMF|EEA|EIA|CCIR):\s+([0-9A-F]+)")
self.service = service
self.frequency = 0
@ -129,7 +129,7 @@ class MultimonParser(ThreadModule):
# Parse FLEX and SELCALL messages
rf = self.reFlex1.match(msg)
rf = self.reFlex2.match(msg) if not rf else rf
rs = self.reSelCall.match(msg) if not rf else None
rs = self.reSelCall.findall(msg) if not rf else []
#
# FLEX
@ -180,13 +180,16 @@ class MultimonParser(ThreadModule):
#
# SELCALL
#
elif rs is not None:
elif len(rs)>0:
# Just output characters as they are, add SELCALL
# standard name when changing standard
out = rs.group(2)
if rs.group(1) != self.selMode:
self.selMode = rs.group(1)
out = " [%s] %s" % (self.selMode, out)
out = ""
for x in rs:
if x[0] == self.selMode:
out += x[1]
else:
self.selMode = x[0]
out += " [%s] %s" % (x[0], x[1])
#
# Everything else