fifisdr fixes

This commit is contained in:
Jakob Ketterl 2022-09-19 18:46:11 +02:00
parent 5cd0847362
commit c150eca75c
5 changed files with 35 additions and 5 deletions

View File

@ -1,4 +1,6 @@
**unreleased**
- 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

3
debian/changelog vendored
View File

@ -1,5 +1,8 @@
openwebrx (1.3.0) UNRELEASED; urgency=low
* FifiSDR support fixed (pipeline formats now line up correctly)
* Added "Device" input for FifiSDR devices for sound card selection
-- Jakob Ketterl <jakob.ketterl@gmx.de> Thu, 16 Jun 2022 21:47:00 +0000
openwebrx (1.2.0) bullseye jammy; urgency=low

View File

@ -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):

View File

@ -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

View File

@ -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"]