diff --git a/CHANGELOG.md b/CHANGELOG.md index 962d2cd..19dd2d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +**1.2.1** +- FifiSDR support fixed (pipeline formats now line up correctly) +- Added "Device" input for FifiSDR devices for sound card selection + **1.2.0** - Major rewrite of all demodulation components to make use of the new csdr/pycsdr and digiham/pydigiham demodulator modules diff --git a/debian/changelog b/debian/changelog index 0425bbe..f5db2fe 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +openwebrx (1.2.1) bullseye jammy; urgency=low + + * FifiSDR support fixed (pipeline formats now line up correctly) + * Added "Device" input for FifiSDR devices for sound card selection + + -- Jakob Ketterl Thu, 16 Jun 2022 21:47:00 +0000 + openwebrx (1.2.0) bullseye jammy; urgency=low * Major rewrite of all demodulation components to make use of the new diff --git a/owrx/source/__init__.py b/owrx/source/__init__.py index ae790be..618d773 100644 --- a/owrx/source/__init__.py +++ b/owrx/source/__init__.py @@ -249,10 +249,13 @@ class SdrSource(ABC): def getPort(self): return self.port + def _getTcpSourceFormat(self): + return Format.COMPLEX_FLOAT + def _getTcpSource(self): with self.modificationLock: if self.tcpSource is None: - self.tcpSource = TcpSource(self.port, Format.COMPLEX_FLOAT) + self.tcpSource = TcpSource(self.port, self._getTcpSourceFormat()) return self.tcpSource def getBuffer(self): diff --git a/owrx/source/direct.py b/owrx/source/direct.py index e4a5eaf..e8c2025 100644 --- a/owrx/source/direct.py +++ b/owrx/source/direct.py @@ -11,6 +11,10 @@ logger = logging.getLogger(__name__) class DirectSource(SdrSource, metaclass=ABCMeta): + def __init__(self, id, props): + self._conversion = None + super().__init__(id, props) + def onPropertyChange(self, changes): logger.debug("restarting sdr source due to property changes: {0}".format(changes)) self.stop() @@ -48,6 +52,10 @@ class DirectSource(SdrSource, metaclass=ABCMeta): def getFormatConversion(self) -> Optional[Chain]: return None + def _getTcpSourceFormat(self): + conversion = self.getFormatConversion() + return Format.COMPLEX_FLOAT if conversion is None else conversion.getInputFormat() + # override this in subclasses, if necessary def sleepOnRestart(self): pass @@ -57,12 +65,12 @@ class DirectSource(SdrSource, metaclass=ABCMeta): source = self._getTcpSource() buffer = Buffer(source.getOutputFormat()) source.setWriter(buffer) - conversion = self.getFormatConversion() - if conversion is not None: - conversion.setReader(buffer.getReader()) + self._conversion = self.getFormatConversion() + if self._conversion is not None: + self._conversion.setReader(buffer.getReader()) # this one must be COMPLEX_FLOAT buffer = Buffer(Format.COMPLEX_FLOAT) - conversion.setWriter(buffer) + self._conversion.setWriter(buffer) self.buffer = buffer return self.buffer diff --git a/owrx/source/fifi_sdr.py b/owrx/source/fifi_sdr.py index 660c65f..e3999b3 100644 --- a/owrx/source/fifi_sdr.py +++ b/owrx/source/fifi_sdr.py @@ -4,6 +4,8 @@ from subprocess import Popen from csdr.chain import Chain from pycsdr.modules import Convert, Gain from pycsdr.types import Format +from typing import List +from owrx.form.input import Input, TextInput import logging @@ -49,3 +51,15 @@ class FifiSdrDeviceDescription(DirectSourceDeviceDescription): def supportsPpm(self): # not currently mapped, and it's unclear how this should be sent to the device return False + + def getInputs(self) -> List[Input]: + return super().getInputs() + [ + TextInput( + "device", + "Device identifier", + infotext="Alsa audio device identifier", + ), + ] + + def getDeviceOptionalKeys(self): + return super().getDeviceOptionalKeys() + ["device"]