mirror of
https://github.com/ha7ilm/openwebrx.git
synced 2026-01-27 10:34:17 +01:00
add dump1090 demodulator (raw message only for now)
This commit is contained in:
parent
ce1ad5ce02
commit
387d94b4ce
|
|
@ -0,0 +1,18 @@
|
|||
from pycsdr.modules import Convert
|
||||
from pycsdr.types import Format
|
||||
from csdr.chain.demodulator import ServiceDemodulator
|
||||
from owrx.adsb.dump1090 import Dump1090Module
|
||||
|
||||
|
||||
class Dump1090(ServiceDemodulator):
|
||||
def __init__(self):
|
||||
workers = [
|
||||
Convert(Format.COMPLEX_FLOAT, Format.COMPLEX_SHORT),
|
||||
Dump1090Module()
|
||||
]
|
||||
|
||||
super().__init__(workers)
|
||||
pass
|
||||
|
||||
def getFixedAudioRate(self) -> int:
|
||||
return 2400000
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
from pycsdr.modules import ExecModule, Writer, TcpSource
|
||||
from pycsdr.types import Format
|
||||
from csdr.module import LogWriter
|
||||
from owrx.socket import getAvailablePort
|
||||
import time
|
||||
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Dump1090Module(ExecModule):
|
||||
def __init__(self):
|
||||
self.tcpSource = None
|
||||
self.writer = None
|
||||
self.port = getAvailablePort()
|
||||
|
||||
super().__init__(
|
||||
Format.COMPLEX_SHORT,
|
||||
Format.CHAR,
|
||||
["dump1090", "--ifile", "-", "--iformat", "SC16", "--quiet", "--net-ro-port", str(self.port)]
|
||||
)
|
||||
super().setWriter(LogWriter(__name__))
|
||||
|
||||
self.start()
|
||||
|
||||
def start(self):
|
||||
delay = 0.5
|
||||
retries = 0
|
||||
while True:
|
||||
try:
|
||||
self.tcpSource = TcpSource(self.port, Format.CHAR)
|
||||
if self.writer:
|
||||
self.tcpSource.setWriter(self.writer)
|
||||
break
|
||||
except ConnectionError:
|
||||
if retries > 20:
|
||||
logger.error("maximum number of connection attempts reached. did dump1090 start up correctly?")
|
||||
raise
|
||||
retries += 1
|
||||
time.sleep(delay)
|
||||
|
||||
def setWriter(self, writer: Writer) -> None:
|
||||
self.writer = writer
|
||||
if self.tcpSource is not None:
|
||||
self.tcpSource.setWriter(writer)
|
||||
|
|
@ -612,6 +612,9 @@ class DspManager(SdrSourceEventClient, ClientDemodulatorSecondaryDspEventClient)
|
|||
elif mod == "rtty85":
|
||||
from csdr.chain.digimodes import RttyDemodulator
|
||||
return RttyDemodulator(50, 85, invert=True)
|
||||
elif mod == "adsb":
|
||||
from csdr.chain.dump1090 import Dump1090
|
||||
return Dump1090()
|
||||
|
||||
def setSecondaryDemodulator(self, mod):
|
||||
demodulator = self._getSecondaryDemodulator(mod)
|
||||
|
|
|
|||
|
|
@ -84,6 +84,7 @@ class FeatureDetector(object):
|
|||
"pocsag": ["digiham"],
|
||||
"js8call": ["js8", "js8py"],
|
||||
"drm": ["dream"],
|
||||
"dump1090": ["dump1090"],
|
||||
}
|
||||
|
||||
def feature_availability(self):
|
||||
|
|
@ -564,3 +565,6 @@ class FeatureDetector(object):
|
|||
except RuntimeError as e:
|
||||
logger.exception("Codecserver error while checking for AMBE support:")
|
||||
return False
|
||||
|
||||
def has_dump1090(self):
|
||||
return self.command_is_runnable("dump1090")
|
||||
|
|
|
|||
|
|
@ -149,6 +149,14 @@ class Modes(object):
|
|||
requirements=["pocsag"],
|
||||
squelch=False,
|
||||
),
|
||||
DigitalMode(
|
||||
"adsb",
|
||||
"ADS-B",
|
||||
underlying=["none"],
|
||||
bandpass=Bandpass(-1e6, 1e6),
|
||||
requirements=["dump1090"],
|
||||
squelch=False,
|
||||
),
|
||||
]
|
||||
|
||||
@staticmethod
|
||||
|
|
|
|||
Loading…
Reference in a new issue