64 lines
2.0 KiB
Python
64 lines
2.0 KiB
Python
from csdr.chain.demodulator import SecondaryDemodulator, FixedAudioRateChain, DialFrequencyReceiver
|
|
from owrx.audio.chopper import AudioChopper
|
|
from owrx.aprs.kiss import KissDeframer
|
|
from owrx.aprs import Ax25Parser, AprsParser
|
|
from pycsdr.modules import Convert, FmDemod
|
|
from pycsdr.types import Format
|
|
from owrx.aprs.module import DirewolfModule
|
|
from digiham.modules import FskDemodulator, PocsagDecoder
|
|
from owrx.pocsag import PocsagParser
|
|
|
|
|
|
class AudioChopperDemodulator(SecondaryDemodulator, FixedAudioRateChain, DialFrequencyReceiver):
|
|
# TODO parser typing
|
|
def __init__(self, mode: str, parser):
|
|
self.chopper = AudioChopper(mode, parser)
|
|
workers = [Convert(Format.FLOAT, Format.SHORT), self.chopper]
|
|
super().__init__(workers)
|
|
|
|
def getFixedAudioRate(self):
|
|
return 12000
|
|
|
|
def setDialFrequency(self, frequency: int) -> None:
|
|
self.chopper.setDialFrequency(frequency)
|
|
|
|
|
|
class PacketDemodulator(SecondaryDemodulator, FixedAudioRateChain, DialFrequencyReceiver):
|
|
def __init__(self, service: bool = False):
|
|
self.parser = AprsParser()
|
|
workers = [
|
|
FmDemod(),
|
|
Convert(Format.FLOAT, Format.SHORT),
|
|
DirewolfModule(service=service),
|
|
KissDeframer(),
|
|
Ax25Parser(),
|
|
self.parser,
|
|
]
|
|
super().__init__(workers)
|
|
|
|
def supportsSquelch(self) -> bool:
|
|
return False
|
|
|
|
def getFixedAudioRate(self) -> int:
|
|
return 48000
|
|
|
|
def setDialFrequency(self, frequency: int) -> None:
|
|
self.parser.setDialFrequency(frequency)
|
|
|
|
|
|
class PocsagDemodulator(SecondaryDemodulator, FixedAudioRateChain):
|
|
def __init__(self):
|
|
workers = [
|
|
FmDemod(),
|
|
FskDemodulator(samplesPerSymbol=40, invert=True),
|
|
PocsagDecoder(),
|
|
PocsagParser(),
|
|
]
|
|
super().__init__(workers)
|
|
|
|
def supportsSquelch(self) -> bool:
|
|
return False
|
|
|
|
def getFixedAudioRate(self) -> int:
|
|
return 48000
|