abstract chain features; use local imports to avoid hard dependencies

This commit is contained in:
Jakob Ketterl
2021-09-20 16:14:23 +02:00
parent b2e15c559e
commit 81ed1a9ebb
5 changed files with 40 additions and 18 deletions

View File

@ -1,5 +1,6 @@
from csdr.chain import Chain
from abc import ABC, abstractmethod
from pycsdr.modules import Writer
class BaseDemodulatorChain(Chain):
@ -36,3 +37,15 @@ class DialFrequencyReceiver(ABC):
# marker interface
class HdAudio:
pass
class MetaProvider(ABC):
@abstractmethod
def setMetaWriter(self, writer: Writer) -> None:
pass
class SlotFilterChain(ABC):
@abstractmethod
def setSlotFilter(self, filter: int) -> None:
pass

View File

@ -1,4 +1,4 @@
from csdr.chain.demodulator import BaseDemodulatorChain, FixedAudioRateChain, FixedIfSampleRateChain, DialFrequencyReceiver
from csdr.chain.demodulator import BaseDemodulatorChain, FixedAudioRateChain, FixedIfSampleRateChain, DialFrequencyReceiver, MetaProvider, SlotFilterChain
from pycsdr.modules import FmDemod, Agc, Writer, Buffer
from pycsdr.types import Format
from digiham.modules import DstarDecoder, DcBlock, FskDemodulator, GfskDemodulator, DigitalVoiceFilter, MbeSynthesizer, NarrowRrcFilter, NxdnDecoder, DmrDecoder, WideRrcFilter, YsfDecoder
@ -6,7 +6,7 @@ from digiham.ambe import Modes
from owrx.meta import MetaParser
class DigihamChain(BaseDemodulatorChain, FixedIfSampleRateChain, FixedAudioRateChain, DialFrequencyReceiver):
class DigihamChain(BaseDemodulatorChain, FixedIfSampleRateChain, FixedAudioRateChain, DialFrequencyReceiver, MetaProvider):
def __init__(self, fskDemodulator, decoder, mbeMode, filter=None, codecserver: str = ""):
self.decoder = decoder
if codecserver is None:
@ -34,7 +34,7 @@ class DigihamChain(BaseDemodulatorChain, FixedIfSampleRateChain, FixedAudioRateC
def getFixedAudioRate(self):
return 8000
def setMetaWriter(self, writer: Writer):
def setMetaWriter(self, writer: Writer) -> None:
if self.metaParser is None:
self.metaParser = MetaParser()
buffer = Buffer(Format.CHAR)
@ -80,7 +80,7 @@ class Nxdn(DigihamChain):
)
class Dmr(DigihamChain):
class Dmr(DigihamChain, SlotFilterChain):
def __init__(self, codecserver: str = ""):
super().__init__(
fskDemodulator=GfskDemodulator(samplesPerSymbol=10),