use the property stack the way it's intended for better consistency
This commit is contained in:
parent
fe45d139ad
commit
55e1aa5857
@ -135,7 +135,7 @@ class OpenWebRxReceiverClient(OpenWebRxClient, SdrSourceEventClient):
|
|||||||
|
|
||||||
self.dsp = None
|
self.dsp = None
|
||||||
self.sdr = None
|
self.sdr = None
|
||||||
self.sdrConfigSubs = []
|
self.configSubs = []
|
||||||
self.connectionProperties = {}
|
self.connectionProperties = {}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -145,9 +145,8 @@ class OpenWebRxReceiverClient(OpenWebRxClient, SdrSourceEventClient):
|
|||||||
self.close()
|
self.close()
|
||||||
raise
|
raise
|
||||||
|
|
||||||
globalConfig = Config.get().filter(*OpenWebRxReceiverClient.global_config_keys)
|
self.setupGlobalConfig()
|
||||||
self.globalConfigSub = globalConfig.wire(self.write_config)
|
self.stack = self.setupStack()
|
||||||
self.write_config(globalConfig.__dict__())
|
|
||||||
|
|
||||||
self.setSdr()
|
self.setSdr()
|
||||||
|
|
||||||
@ -162,8 +161,47 @@ class OpenWebRxReceiverClient(OpenWebRxClient, SdrSourceEventClient):
|
|||||||
CpuUsageThread.getSharedInstance().add_client(self)
|
CpuUsageThread.getSharedInstance().add_client(self)
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
if hasattr(self, "globalConfigSub"):
|
if hasattr(self, "configSubs"):
|
||||||
self.globalConfigSub.cancel()
|
while self.configSubs:
|
||||||
|
self.configSubs.pop().cancel()
|
||||||
|
|
||||||
|
def setupStack(self):
|
||||||
|
stack = PropertyStack()
|
||||||
|
# stack layer 0 reserved for sdr properties
|
||||||
|
# stack.addLayer(0, self.sdr.getProps())
|
||||||
|
stack.addLayer(1, Config.get())
|
||||||
|
configProps = stack.filter(*OpenWebRxReceiverClient.sdr_config_keys)
|
||||||
|
|
||||||
|
def sendConfig(changes=None):
|
||||||
|
if changes is None:
|
||||||
|
config = configProps.__dict__()
|
||||||
|
else:
|
||||||
|
config = changes
|
||||||
|
if (changes is None or "start_freq" in changes or "center_freq" in changes) and "start_freq" in configProps and "center_freq" in configProps:
|
||||||
|
config["start_offset_freq"] = configProps["start_freq"] - configProps["center_freq"]
|
||||||
|
if (changes is None or "profile_id" in changes) and self.sdr is not None:
|
||||||
|
config["sdr_id"] = self.sdr.getId()
|
||||||
|
self.write_config(config)
|
||||||
|
|
||||||
|
def sendBookmarks(changes=None):
|
||||||
|
cf = configProps["center_freq"]
|
||||||
|
srh = configProps["samp_rate"] / 2
|
||||||
|
frequencyRange = (cf - srh, cf + srh)
|
||||||
|
self.write_dial_frequencies(Bandplan.getSharedInstance().collectDialFrequencies(frequencyRange))
|
||||||
|
bookmarks = [b.__dict__() for b in Bookmarks.getSharedInstance().getBookmarks(frequencyRange)]
|
||||||
|
self.write_bookmarks(bookmarks)
|
||||||
|
|
||||||
|
self.configSubs.append(configProps.wire(sendConfig))
|
||||||
|
self.configSubs.append(stack.filter("center_freq", "samp_rate").wire(sendBookmarks))
|
||||||
|
|
||||||
|
# send initial config
|
||||||
|
sendConfig()
|
||||||
|
return stack
|
||||||
|
|
||||||
|
def setupGlobalConfig(self):
|
||||||
|
globalConfig = Config.get().filter(*OpenWebRxReceiverClient.global_config_keys)
|
||||||
|
self.configSubs.append(globalConfig.wire(self.write_config))
|
||||||
|
self.write_config(globalConfig.__dict__())
|
||||||
|
|
||||||
def onStateChange(self, state):
|
def onStateChange(self, state):
|
||||||
if state == SdrSource.STATE_RUNNING:
|
if state == SdrSource.STATE_RUNNING:
|
||||||
@ -242,9 +280,6 @@ class OpenWebRxReceiverClient(OpenWebRxClient, SdrSourceEventClient):
|
|||||||
|
|
||||||
self.stopDsp()
|
self.stopDsp()
|
||||||
|
|
||||||
while self.sdrConfigSubs:
|
|
||||||
self.sdrConfigSubs.pop().cancel()
|
|
||||||
|
|
||||||
if self.sdr is not None:
|
if self.sdr is not None:
|
||||||
self.sdr.removeClient(self)
|
self.sdr.removeClient(self)
|
||||||
|
|
||||||
@ -259,37 +294,8 @@ class OpenWebRxReceiverClient(OpenWebRxClient, SdrSourceEventClient):
|
|||||||
|
|
||||||
def handleSdrAvailable(self):
|
def handleSdrAvailable(self):
|
||||||
self.getDsp().setProperties(self.connectionProperties)
|
self.getDsp().setProperties(self.connectionProperties)
|
||||||
|
self.stack.replaceLayer(0, self.sdr.getProps())
|
||||||
|
|
||||||
stack = PropertyStack()
|
|
||||||
stack.addLayer(0, self.sdr.getProps())
|
|
||||||
stack.addLayer(1, Config.get())
|
|
||||||
configProps = stack.filter(*OpenWebRxReceiverClient.sdr_config_keys)
|
|
||||||
|
|
||||||
def sendConfig(changes=None):
|
|
||||||
if changes is None:
|
|
||||||
config = configProps.__dict__()
|
|
||||||
else:
|
|
||||||
config = changes
|
|
||||||
if changes is None or "start_freq" in changes or "center_freq" in changes:
|
|
||||||
config["start_offset_freq"] = configProps["start_freq"] - configProps["center_freq"]
|
|
||||||
if changes is None or "profile_id" in changes:
|
|
||||||
config["sdr_id"] = self.sdr.getId()
|
|
||||||
self.write_config(config)
|
|
||||||
|
|
||||||
def sendBookmarks(changes=None):
|
|
||||||
cf = configProps["center_freq"]
|
|
||||||
srh = configProps["samp_rate"] / 2
|
|
||||||
frequencyRange = (cf - srh, cf + srh)
|
|
||||||
self.write_dial_frequencies(Bandplan.getSharedInstance().collectDialFrequencies(frequencyRange))
|
|
||||||
bookmarks = [b.__dict__() for b in Bookmarks.getSharedInstance().getBookmarks(frequencyRange)]
|
|
||||||
self.write_bookmarks(bookmarks)
|
|
||||||
|
|
||||||
self.sdrConfigSubs.append(configProps.wire(sendConfig))
|
|
||||||
self.sdrConfigSubs.append(stack.filter("center_freq", "samp_rate").wire(sendBookmarks))
|
|
||||||
|
|
||||||
# send initial config
|
|
||||||
sendConfig()
|
|
||||||
sendBookmarks()
|
|
||||||
self.__sendProfiles()
|
self.__sendProfiles()
|
||||||
|
|
||||||
self.sdr.addSpectrumClient(self)
|
self.sdr.addSpectrumClient(self)
|
||||||
@ -306,8 +312,6 @@ class OpenWebRxReceiverClient(OpenWebRxClient, SdrSourceEventClient):
|
|||||||
self.stopDsp()
|
self.stopDsp()
|
||||||
CpuUsageThread.getSharedInstance().remove_client(self)
|
CpuUsageThread.getSharedInstance().remove_client(self)
|
||||||
ClientRegistry.getSharedInstance().removeClient(self)
|
ClientRegistry.getSharedInstance().removeClient(self)
|
||||||
while self.sdrConfigSubs:
|
|
||||||
self.sdrConfigSubs.pop().cancel()
|
|
||||||
super().close()
|
super().close()
|
||||||
|
|
||||||
def stopDsp(self):
|
def stopDsp(self):
|
||||||
@ -325,11 +329,7 @@ class OpenWebRxReceiverClient(OpenWebRxClient, SdrSourceEventClient):
|
|||||||
keys = config["configurable_keys"]
|
keys = config["configurable_keys"]
|
||||||
if not keys:
|
if not keys:
|
||||||
return
|
return
|
||||||
# only the keys in the protected property manager can be overridden from the web
|
protected = self.stack.filter(*keys)
|
||||||
stack = PropertyStack()
|
|
||||||
stack.addLayer(0, self.sdr.getProps())
|
|
||||||
stack.addLayer(1, config)
|
|
||||||
protected = stack.filter(*keys)
|
|
||||||
for key, value in params.items():
|
for key, value in params.items():
|
||||||
try:
|
try:
|
||||||
protected[key] = value
|
protected[key] = value
|
||||||
|
Loading…
Reference in New Issue
Block a user