diff --git a/owrx/feature.py b/owrx/feature.py index e458a9622..5ad05704c 100644 --- a/owrx/feature.py +++ b/owrx/feature.py @@ -71,6 +71,7 @@ class FeatureDetector(object): "fcdpp": ["soapy_connector", "soapy_fcdpp"], "bladerf": ["soapy_connector", "soapy_bladerf"], "sddc": ["sddc_connector"], + "sddc_soapy": ["soapy_connector", "soapy_sddc"], "hpsdr": ["hpsdr_connector"], "runds": ["runds_connector"], # optional features and their requirements @@ -569,6 +570,18 @@ def has_sddc_connector(self): """ return self._check_connector("sddc_connector", LooseVersion("0.1")) + def has_soapy_sddc(self): + """ + The [SoapySDR module for SDDC](https://github.com/ik1xpv/ExtIO_sddc) + devices can be used as an alternative to the `sddc_connector`, enabling + connectivity with SDR devices such as the RX666, RX888, HF103, etc. + Unlike the `sddc_connector`, the SoapySDR module relies solely on the CPU + and does not require an NVIDIA GPU. + You will need to compile SoapySDDC from source. Detailed installation + instructions are available on the [OpenWebRX Wiki](https://github.com/jketterl/openwebrx/wiki/SDDC-device-notes). + """ + return self._has_soapy_driver("SDDC") + def has_hpsdr_connector(self): """ The [HPSDR Connector](https://github.com/jancona/hpsdrconnector) is required to interface OpenWebRX with diff --git a/owrx/source/sddc_soapy.py b/owrx/source/sddc_soapy.py new file mode 100644 index 000000000..00402aa40 --- /dev/null +++ b/owrx/source/sddc_soapy.py @@ -0,0 +1,54 @@ +from owrx.source.soapy import SoapyConnectorSource, SoapyConnectorDeviceDescription +from owrx.form.input import Input, CheckboxInput +from owrx.form.input.validator import Range +from typing import List + +class SddcSoapySource(SoapyConnectorSource): + def getSoapySettingsMappings(self): + mappings = super().getSoapySettingsMappings() + mappings.update( + { + "bias_tee_hf": "UpdBiasT_HF", + "bias_tee_vhf": "UpdBiasT_VHF" + } + ) + return mappings + + def getDriver(self): + return "SDDC" + +class SddcSoapyDeviceDescription(SoapyConnectorDeviceDescription): + def getName(self): + return "BBRF103 / RX666 / RX888 (SDDC) device (via SoapySDR)" + + def getInputs(self) -> List[Input]: + return super().getInputs() + [ + CheckboxInput( + "bias_tee_hf", + "Enable BIAS-T for HF antenna port" + ), + CheckboxInput( + "bias_tee_vhf", + "Enable BIAS-T for VHF antenna port" + ), + ] + + def getDeviceOptionalKeys(self): + return super().getDeviceOptionalKeys() + [ + "bias_tee_hf", "bias_tee_vhf" + ] + + def getGainStages(self): + return ["RF", "IF"] + + def hasAgc(self): + return False + + def getSampleRateRanges(self) -> List[Range]: + return [ + Range(2000000), + Range(4000000), + Range(8000000), + Range(16000000), + Range(32000000), + ]