diff --git a/owrx/dsp.py b/owrx/dsp.py index 72e6667..08179cf 100644 --- a/owrx/dsp.py +++ b/owrx/dsp.py @@ -71,7 +71,7 @@ class DspManager(csdr.output, SdrSourceEventClient): bpf[1] = cut self.dsp.set_bpf(*bpf) - def set_dial_freq(key, value): + def set_dial_freq(changes): if self.props["center_freq"] is None or self.props["offset_freq"] is None: return freq = self.props["center_freq"] + self.props["offset_freq"] diff --git a/owrx/fft.py b/owrx/fft.py index 717c086..c434f7a 100644 --- a/owrx/fft.py +++ b/owrx/fft.py @@ -33,7 +33,7 @@ class SpectrumThread(csdr.output, SdrSourceEventClient): dsp.nc_port = self.sdrSource.getPort() dsp.set_demodulator("fft") - def set_fft_averages(key, value): + def set_fft_averages(changes=None): samp_rate = props["samp_rate"] fft_size = props["fft_size"] fft_fps = props["fft_fps"] @@ -54,7 +54,7 @@ class SpectrumThread(csdr.output, SdrSourceEventClient): props.filter("samp_rate", "fft_size", "fft_fps", "fft_voverlap_factor").wire(set_fft_averages), ] - set_fft_averages(None, None) + set_fft_averages() dsp.csdr_dynamic_bufsize = props["csdr_dynamic_bufsize"] dsp.csdr_print_bufsizes = props["csdr_print_bufsizes"] diff --git a/owrx/service/__init__.py b/owrx/service/__init__.py index 5984050..2b52fea 100644 --- a/owrx/service/__init__.py +++ b/owrx/service/__init__.py @@ -111,7 +111,7 @@ class ServiceHandler(SdrSourceEventClient): for service in services: service.stop() - def onFrequencyChange(self, key, value): + def onFrequencyChange(self, changes): self.stopServices() if not self.source.isAvailable(): return diff --git a/owrx/service/schedule.py b/owrx/service/schedule.py index 8cf4261..141962d 100644 --- a/owrx/service/schedule.py +++ b/owrx/service/schedule.py @@ -246,7 +246,7 @@ class ServiceScheduler(SdrSourceEventClient): if state == SdrSource.BUSYSTATE_IDLE: self.scheduleSelection() - def onFrequencyChange(self, name, value): + def onFrequencyChange(self, changes): self.scheduleSelection() def selectProfile(self): diff --git a/owrx/source/__init__.py b/owrx/source/__init__.py index cf5e198..eab95ad 100644 --- a/owrx/source/__init__.py +++ b/owrx/source/__init__.py @@ -92,7 +92,7 @@ class SdrSource(ABC): return self.commandMapper @abstractmethod - def onPropertyChange(self, name, value): + def onPropertyChange(self, changes): pass def wireEvents(self): diff --git a/owrx/source/connector.py b/owrx/source/connector.py index 47eec5d..40095b0 100644 --- a/owrx/source/connector.py +++ b/owrx/source/connector.py @@ -29,22 +29,22 @@ class ConnectorSource(SdrSource): } ) - def sendControlMessage(self, prop, value): - logger.debug("sending property change over control socket: {0} changed to {1}".format(prop, value)) - self.controlSocket.sendall("{prop}:{value}\n".format(prop=prop, value=value).encode()) + def sendControlMessage(self, changes): + for prop, value in changes.items(): + logger.debug("sending property change over control socket: {0} changed to {1}".format(prop, value)) + self.controlSocket.sendall("{prop}:{value}\n".format(prop=prop, value=value).encode()) - def onPropertyChange(self, prop, value): + def onPropertyChange(self, changes): if self.monitor is None: return if ( - (prop == "center_freq" or prop == "lfo_offset") + ("center_freq" in changes or "lfo_offset" in changes) and "lfo_offset" in self.sdrProps and self.sdrProps["lfo_offset"] is not None ): - freq = self.sdrProps["center_freq"] + self.sdrProps["lfo_offset"] - self.sendControlMessage("center_freq", freq) - else: - self.sendControlMessage(prop, value) + changes["center_freq"] = self.sdrProps["center_freq"] + self.sdrProps["lfo_offset"] + changes.pop("lfo_offset", None) + self.sendControlMessage(changes) def postStart(self): logger.debug("opening control socket...") diff --git a/owrx/source/direct.py b/owrx/source/direct.py index 904d2ea..cd36b55 100644 --- a/owrx/source/direct.py +++ b/owrx/source/direct.py @@ -7,12 +7,8 @@ logger = logging.getLogger(__name__) class DirectSource(SdrSource, metaclass=ABCMeta): - def onPropertyChange(self, name, value): - logger.debug( - "restarting sdr source due to property change: {0} changed to {1}".format( - name, value - ) - ) + def onPropertyChange(self, changes): + logger.debug("restarting sdr source due to property changes: {0}".format(changes)) self.stop() self.sleepOnRestart() self.start() diff --git a/owrx/source/fifi_sdr.py b/owrx/source/fifi_sdr.py index 69babf4..badf3ac 100644 --- a/owrx/source/fifi_sdr.py +++ b/owrx/source/fifi_sdr.py @@ -30,7 +30,6 @@ class FifiSdrSource(DirectSource): values = self.getCommandValues() self.sendRockProgFrequency(values["tuner_freq"]) - def onPropertyChange(self, name, value): - if name != "center_freq": - return - self.sendRockProgFrequency(value) + def onPropertyChange(self, changes): + if "center_freq" in changes: + self.sendRockProgFrequency(changes["center_freq"]) diff --git a/owrx/source/resampler.py b/owrx/source/resampler.py index 1f6a4e1..a367894 100644 --- a/owrx/source/resampler.py +++ b/owrx/source/resampler.py @@ -6,8 +6,8 @@ logger = logging.getLogger(__name__) class Resampler(DirectSource): - def onPropertyChange(self, name, value): - logger.warning("Resampler is unable to handle property change ({0} changed to {1})".format(name, value)) + def onPropertyChange(self, changes): + logger.warning("Resampler is unable to handle property changes: {0}".format(changes)) def __init__(self, props, sdr): sdrProps = sdr.getProps() diff --git a/owrx/source/soapy.py b/owrx/source/soapy.py index e713ba0..0c03a67 100644 --- a/owrx/source/soapy.py +++ b/owrx/source/soapy.py @@ -80,9 +80,12 @@ class SoapyConnectorSource(ConnectorSource, metaclass=ABCMeta): values["soapy_settings"] = settings return values - def onPropertyChange(self, prop, value): + def onPropertyChange(self, changes): mappings = self.getSoapySettingsMappings() - if prop in mappings.keys(): - value = "{0}={1}".format(mappings[prop], self.convertSoapySettingsValue(value)) - prop = "settings" - super().onPropertyChange(prop, value) + settings = {} + for prop, value in changes.items(): + if prop in mappings.keys(): + settings[mappings[prop]] = self.convertSoapySettingsValue(value) + if settings: + changes["settings"] = ",".join("{0}={1}".format(k, v) for k, v in settings.items()) + super().onPropertyChange(changes)