openwebrx/owrx/adsb/dump1090.py
2023-09-15 20:44:17 +02:00

32 lines
1 KiB
Python

from pycsdr.modules import ExecModule
from pycsdr.types import Format
from csdr.module import LineBasedModule
import logging
logger = logging.getLogger(__name__)
class Dump1090Module(ExecModule):
def __init__(self):
super().__init__(
Format.COMPLEX_SHORT,
Format.CHAR,
["dump1090", "--ifile", "-", "--iformat", "SC16", "--raw"],
# send some data on decoder shutdown since the dump1090 internal reader locks up otherwise
# dump1090 reads chunks of 100ms, which equals to 240k samples at 2.4MS/s
# some extra should not hurt
flushSize=300000
)
class RawDeframer(LineBasedModule):
def process(self, line: bytes):
if line.startswith(b'*') and line.endswith(b';') and len(line) in [16, 30]:
return bytes.fromhex(line[1:-1].decode())
elif line == b"*0000;":
# heartbeat message. not a valid message, but known. do not log.
return
else:
logger.warning("invalid raw message: %s", line)