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