From 18e8ca5e43b5009dd65a8eda99349b2e36505ef1 Mon Sep 17 00:00:00 2001 From: Jakob Ketterl Date: Sat, 20 Feb 2021 18:48:12 +0100 Subject: [PATCH] add bias_tee and direct_sampling options --- owrx/form/device.py | 39 +++++++++++++++++++++++++++++++++++- owrx/source/airspy.py | 6 +++++- owrx/source/hackrf.py | 8 ++++++-- owrx/source/rtl_sdr.py | 3 +++ owrx/source/rtl_sdr_soapy.py | 6 +++++- owrx/source/sdrplay.py | 6 ++++++ 6 files changed, 63 insertions(+), 5 deletions(-) diff --git a/owrx/form/device.py b/owrx/form/device.py index d9e0b25..0145eb0 100644 --- a/owrx/form/device.py +++ b/owrx/form/device.py @@ -1,4 +1,5 @@ -from owrx.form import Input +from owrx.form import Input, CheckboxInput, DropdownInput, DropdownEnum +from owrx.form.converter import OptionalConverter, EnumConverter from owrx.soapy import SoapySettings @@ -118,3 +119,39 @@ class GainInput(Input): return {self.id: SoapySettings.encode(settings_dict)} return {self.id: None} + + +class BiasTeeInput(CheckboxInput): + def __init__(self): + super().__init__( + "bias_tee", "", "Enable Bias-Tee power supply", converter=OptionalConverter(defaultFormValue=False) + ) + + +class DirectSamplingOptions(DropdownEnum): + DIRECT_SAMPLING_OFF = (0, "Off") + DIRECT_SAMPLING_I = (1, "Direct Sampling (I branch)") + DIRECT_SAMPLING_Q = (2, "Direct Sampling (Q branch)") + + def __new__(cls, *args, **kwargs): + value, description = args + obj = object.__new__(cls) + obj._value_ = value + obj.description = description + return obj + + def __str__(self): + return self.description + + +class DirectSamplingInput(DropdownInput): + def __init__(self): + super().__init__( + "direct_sampling", + "Direct Sampling", + DirectSamplingOptions, + converter=OptionalConverter( + EnumConverter(DirectSamplingOptions), + defaultFormValue=DirectSamplingOptions.DIRECT_SAMPLING_OFF.name, + ), + ) diff --git a/owrx/source/airspy.py b/owrx/source/airspy.py index d909d96..34f6b3c 100644 --- a/owrx/source/airspy.py +++ b/owrx/source/airspy.py @@ -1,4 +1,7 @@ from owrx.source.soapy import SoapyConnectorSource, SoapyConnectorDeviceDescription +from owrx.form import Input +from owrx.form.device import BiasTeeInput +from typing import List class AirspySource(SoapyConnectorSource): @@ -17,4 +20,5 @@ class AirspySource(SoapyConnectorSource): class AirspyDeviceDescription(SoapyConnectorDeviceDescription): - pass + def getInputs(self) -> List[Input]: + return self.mergeInputs(super().getInputs(), [BiasTeeInput()]) diff --git a/owrx/source/hackrf.py b/owrx/source/hackrf.py index 85bf368..a4a17cc 100644 --- a/owrx/source/hackrf.py +++ b/owrx/source/hackrf.py @@ -1,4 +1,7 @@ -from .soapy import SoapyConnectorSource, SoapyConnectorDeviceDescription +from owrx.source.soapy import SoapyConnectorSource, SoapyConnectorDeviceDescription +from owrx.form import Input +from owrx.form.device import BiasTeeInput +from typing import List class HackrfSource(SoapyConnectorSource): @@ -12,4 +15,5 @@ class HackrfSource(SoapyConnectorSource): class HackrfDeviceDescription(SoapyConnectorDeviceDescription): - pass + def getInputs(self) -> List[Input]: + return self.mergeInputs(super().getInputs(), [BiasTeeInput]) diff --git a/owrx/source/rtl_sdr.py b/owrx/source/rtl_sdr.py index 704c439..91b97b5 100644 --- a/owrx/source/rtl_sdr.py +++ b/owrx/source/rtl_sdr.py @@ -3,6 +3,7 @@ from owrx.command import Flag, Option from typing import List from owrx.form import Input, TextInput from owrx.form.converter import OptionalConverter +from owrx.form.device import BiasTeeInput, DirectSamplingInput class RtlSdrSource(ConnectorSource): @@ -26,5 +27,7 @@ class RtlSdrDeviceDescription(ConnectorDeviceDescription): infotext="Device serial number or index", converter=OptionalConverter(), ), + BiasTeeInput(), + DirectSamplingInput() ], ) diff --git a/owrx/source/rtl_sdr_soapy.py b/owrx/source/rtl_sdr_soapy.py index c6d3565..fec40bd 100644 --- a/owrx/source/rtl_sdr_soapy.py +++ b/owrx/source/rtl_sdr_soapy.py @@ -1,4 +1,7 @@ from owrx.source.soapy import SoapyConnectorSource, SoapyConnectorDeviceDescription +from owrx.form import Input +from owrx.form.device import BiasTeeInput, DirectSamplingInput +from typing import List class RtlSdrSoapySource(SoapyConnectorSource): @@ -12,4 +15,5 @@ class RtlSdrSoapySource(SoapyConnectorSource): class RtlSdrSoapyDeviceDescription(SoapyConnectorDeviceDescription): - pass + def getInputs(self) -> List[Input]: + return self.mergeInputs(super().getInputs(), [BiasTeeInput(), DirectSamplingInput()]) diff --git a/owrx/source/sdrplay.py b/owrx/source/sdrplay.py index 0012140..a3ae14c 100644 --- a/owrx/source/sdrplay.py +++ b/owrx/source/sdrplay.py @@ -1,4 +1,7 @@ from owrx.source.soapy import SoapyConnectorSource, SoapyConnectorDeviceDescription +from owrx.form import Input +from owrx.form.device import BiasTeeInput +from typing import List class SdrplaySource(SoapyConnectorSource): @@ -22,3 +25,6 @@ class SdrplaySource(SoapyConnectorSource): class SdrplayDeviceDescription(SoapyConnectorDeviceDescription): def getGainStages(self): return ["RFGR", "IFGR"] + + def getInputs(self) -> List[Input]: + return self.mergeInputs(super().getInputs(), [BiasTeeInput()])