refactor sources to be more flexible

This commit is contained in:
Jakob Ketterl
2019-12-28 00:26:45 +01:00
parent ca4d9771cc
commit 8371d3b67a
12 changed files with 283 additions and 233 deletions

View File

@ -1,6 +1,7 @@
from . import SdrSource
from owrx.socket import getAvailablePort
import socket
from owrx.command import CommandMapper, Flag, Option
import logging
@ -12,16 +13,22 @@ class ConnectorSource(SdrSource):
super().__init__(id, props, port)
self.controlSocket = None
self.controlPort = getAvailablePort()
self.getCommandMapper().setMappings({
"samp_rate": Option("-s"),
"tuner_freq": Option("-f"),
"port": Option("-p"),
"controlPort": Option("-c"),
"device": Option("-d"),
"iqswap": Flag("-i"),
"rtltcp_compat": Flag("-r"),
"ppm": Option("-p"),
"rf_gain": Option("-g")
})
def getEventNames(self):
return [
"samp_rate",
"center_freq",
"ppm",
"rf_gain",
return super().getEventNames() + [
"device",
"iqswap",
"lfo_offset",
"rtltcp_compat",
]
@ -29,21 +36,18 @@ class ConnectorSource(SdrSource):
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 wireEvents(self):
def reconfigure(prop, value):
if self.monitor is None:
return
if (
(prop == "center_freq" or prop == "lfo_offset")
and "lfo_offset" in self.rtlProps
and self.rtlProps["lfo_offset"] is not None
):
freq = self.rtlProps["center_freq"] + self.rtlProps["lfo_offset"]
self.sendControlMessage("center_freq", freq)
else:
self.sendControlMessage(prop, value)
self.rtlProps.wire(reconfigure)
def onPropertyChange(self, prop, value):
if self.monitor is None:
return
if (
(prop == "center_freq" or prop == "lfo_offset")
and "lfo_offset" in self.rtlProps
and self.rtlProps["lfo_offset"] is not None
):
freq = self.rtlProps["center_freq"] + self.rtlProps["lfo_offset"]
self.sendControlMessage("center_freq", freq)
else:
self.sendControlMessage(prop, value)
def postStart(self):
logger.debug("opening control socket...")
@ -56,8 +60,11 @@ class ConnectorSource(SdrSource):
self.controlSocket.close()
self.controlSocket = None
def getFormatConversion(self):
return None
def getControlPort(self):
return self.controlPort
def useNmux(self):
return False
def getCommandValues(self):
values = super().getCommandValues()
values["port"] = self.getPort()
values["controlPort"] = self.getControlPort()
return values