diff --git a/owrx/dsp.py b/owrx/dsp.py index 17068d21..c41cbd14 100644 --- a/owrx/dsp.py +++ b/owrx/dsp.py @@ -471,6 +471,7 @@ class DspManager(SdrSourceEventClient, ClientDemodulatorSecondaryDspEventClient) "wfm_deemphasis_tau", "wfm_rds_rbds", "digital_voice_codecserver", + "rig_enabled", ), ) diff --git a/owrx/rigcontrol.py b/owrx/rigcontrol.py index 7d30c6b0..44513e00 100644 --- a/owrx/rigcontrol.py +++ b/owrx/rigcontrol.py @@ -310,6 +310,8 @@ class RigControl(): } def __init__(self, props: PropertyStack): + pm = Config.get() + self.enabled = pm["rig_enabled"] self.rigctl = None self.thread = None self.mod = None @@ -318,10 +320,13 @@ class RigControl(): self.subscriptions = [ props.wireProperty("offset_freq", self.setFrequencyOffset), props.wireProperty("center_freq", self.setCenterFrequency), + props.wireProperty("rig_enabled", self.setRigEnabled), props.wireProperty("mod", self.setDemodulator), ] super().__init__() - self.rigStart() + # Start RigControl if enabled + if self.enabled: + self.enabled = self.rigStart() def stop(self): for sub in self.subscriptions: @@ -331,17 +336,26 @@ class RigControl(): def setFrequencyOffset(self, offset: int) -> None: if self.fCenter is not None and offset != self.fOffset: - if self.rigFrequency(self.fCenter + offset): - self.fOffset = offset + self.rigFrequency(self.fCenter + offset) + self.fOffset = offset def setCenterFrequency(self, center: int) -> None: self.fCenter = center self.fOffset = None def setDemodulator(self, mod: str) -> None: - if mod != self.mod and self.rigModulation(mod): + if mod != self.mod: + self.rigModulation(mod) self.mod = mod + def setRigEnabled(self, enabled: bool) -> None: + if enabled != self.enabled: + self.enabled = enabled + if enabled: + self.enabled = self.rigStart() + else: + self.rigStop() + # Press or release rig's PTT (i.e. transmit) def rigTX(self, active: bool) -> bool: return self.rigCommand("T {0}".format(1 if active else 0)) @@ -366,10 +380,10 @@ class RigControl(): if not FeatureDetector().is_available("rigcontrol"): return False # Must have rig control enabled - pm = Config.get() - if not pm["rig_enabled"]: + if not self.enabled: return False # Compose Rigctl command + pm = Config.get() address = pm["rig_address"] cmd = [ "rigctl", "-m", str(pm["rig_model"]), "-r", pm["rig_device"] diff --git a/owrx/source/__init__.py b/owrx/source/__init__.py index f6303f00..2c639062 100644 --- a/owrx/source/__init__.py +++ b/owrx/source/__init__.py @@ -745,6 +745,10 @@ class SdrDeviceDescription(object): options=[Option(str(i), "{} Hz".format(i)) for i in [1, 10, 20, 50, 100, 500, 1000, 2500, 3000, 5000, 6000, 6250, 8330, 9000, 10000, 12000, 12500, 25000, 50000]], converter=IntConverter(), ), + CheckboxInput( + "rig_enabled", + "Enable sending changes to a standalone transceiver", + ), NumberInput( "eibi_bookmarks_range", "Shortwave bookmarks range", @@ -798,7 +802,8 @@ class SdrDeviceDescription(object): "waterfall_levels", "waterfall_auto_level_default_mode", "eibi_bookmarks_range", - "repeater_range" + "repeater_range", + "rig_enabled", ] def getDeviceSection(self):