Added profile-specific transceiver rig control setting.

This commit is contained in:
Marat Fayzullin 2025-01-01 21:30:55 -05:00
parent c6ab38641c
commit 284a283d34
3 changed files with 27 additions and 7 deletions

View File

@ -471,6 +471,7 @@ class DspManager(SdrSourceEventClient, ClientDemodulatorSecondaryDspEventClient)
"wfm_deemphasis_tau", "wfm_deemphasis_tau",
"wfm_rds_rbds", "wfm_rds_rbds",
"digital_voice_codecserver", "digital_voice_codecserver",
"rig_enabled",
), ),
) )

View File

@ -310,6 +310,8 @@ class RigControl():
} }
def __init__(self, props: PropertyStack): def __init__(self, props: PropertyStack):
pm = Config.get()
self.enabled = pm["rig_enabled"]
self.rigctl = None self.rigctl = None
self.thread = None self.thread = None
self.mod = None self.mod = None
@ -318,10 +320,13 @@ class RigControl():
self.subscriptions = [ self.subscriptions = [
props.wireProperty("offset_freq", self.setFrequencyOffset), props.wireProperty("offset_freq", self.setFrequencyOffset),
props.wireProperty("center_freq", self.setCenterFrequency), props.wireProperty("center_freq", self.setCenterFrequency),
props.wireProperty("rig_enabled", self.setRigEnabled),
props.wireProperty("mod", self.setDemodulator), props.wireProperty("mod", self.setDemodulator),
] ]
super().__init__() super().__init__()
self.rigStart() # Start RigControl if enabled
if self.enabled:
self.enabled = self.rigStart()
def stop(self): def stop(self):
for sub in self.subscriptions: for sub in self.subscriptions:
@ -331,17 +336,26 @@ class RigControl():
def setFrequencyOffset(self, offset: int) -> None: def setFrequencyOffset(self, offset: int) -> None:
if self.fCenter is not None and offset != self.fOffset: if self.fCenter is not None and offset != self.fOffset:
if self.rigFrequency(self.fCenter + offset): self.rigFrequency(self.fCenter + offset)
self.fOffset = offset self.fOffset = offset
def setCenterFrequency(self, center: int) -> None: def setCenterFrequency(self, center: int) -> None:
self.fCenter = center self.fCenter = center
self.fOffset = None self.fOffset = None
def setDemodulator(self, mod: str) -> 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 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) # Press or release rig's PTT (i.e. transmit)
def rigTX(self, active: bool) -> bool: def rigTX(self, active: bool) -> bool:
return self.rigCommand("T {0}".format(1 if active else 0)) return self.rigCommand("T {0}".format(1 if active else 0))
@ -366,10 +380,10 @@ class RigControl():
if not FeatureDetector().is_available("rigcontrol"): if not FeatureDetector().is_available("rigcontrol"):
return False return False
# Must have rig control enabled # Must have rig control enabled
pm = Config.get() if not self.enabled:
if not pm["rig_enabled"]:
return False return False
# Compose Rigctl command # Compose Rigctl command
pm = Config.get()
address = pm["rig_address"] address = pm["rig_address"]
cmd = [ cmd = [
"rigctl", "-m", str(pm["rig_model"]), "-r", pm["rig_device"] "rigctl", "-m", str(pm["rig_model"]), "-r", pm["rig_device"]

View File

@ -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]], 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(), converter=IntConverter(),
), ),
CheckboxInput(
"rig_enabled",
"Enable sending changes to a standalone transceiver",
),
NumberInput( NumberInput(
"eibi_bookmarks_range", "eibi_bookmarks_range",
"Shortwave bookmarks range", "Shortwave bookmarks range",
@ -798,7 +802,8 @@ class SdrDeviceDescription(object):
"waterfall_levels", "waterfall_levels",
"waterfall_auto_level_default_mode", "waterfall_auto_level_default_mode",
"eibi_bookmarks_range", "eibi_bookmarks_range",
"repeater_range" "repeater_range",
"rig_enabled",
] ]
def getDeviceSection(self): def getDeviceSection(self):