diff --git a/config_webrx.py b/config_webrx.py index 47ebe0d..482c483 100644 --- a/config_webrx.py +++ b/config_webrx.py @@ -137,7 +137,8 @@ sdrs = { "rf_gain": 40, "samp_rate": 500000, "start_freq": 14070000, - "start_mod": "usb" + "start_mod": "usb", + "antenna": "Antenna A" }, "30m": { "name":"30m", @@ -153,7 +154,8 @@ sdrs = { "rf_gain": 40, "samp_rate": 500000, "start_freq": 7070000, - "start_mod": "usb" + "start_mod": "usb", + "antenna": "Antenna A" }, "80m": { "name":"80m", @@ -161,7 +163,8 @@ sdrs = { "rf_gain": 40, "samp_rate": 500000, "start_freq": 3570000, - "start_mod": "usb" + "start_mod": "usb", + "antenna": "Antenna A" }, "49m": { "name": "49m Broadcast", @@ -169,7 +172,8 @@ sdrs = { "rf_gain": 40, "samp_rate": 500000, "start_freq": 6070000, - "start_mod": "am" + "start_mod": "am", + "antenna": "Antenna A" } } }, diff --git a/owrx/config.py b/owrx/config.py index f3608ce..6db151e 100644 --- a/owrx/config.py +++ b/owrx/config.py @@ -56,7 +56,7 @@ class PropertyManager(object): return PropertyManager.sharedInstance def collect(self, *props): - return PropertyManager(dict((name, self.getProperty(name) if self.hasProperty(name) else Property()) for name in props)) + return PropertyManager({name: self.getProperty(name) if self.hasProperty(name) else Property() for name in props}) def __init__(self, properties = None): self.properties = {} diff --git a/owrx/source.py b/owrx/source.py index f101f5b..e994bc4 100644 --- a/owrx/source.py +++ b/owrx/source.py @@ -76,7 +76,7 @@ class SdrSource(object): self.props = props self.activateProfile() self.rtlProps = self.props.collect( - "type", "samp_rate", "nmux_memory", "center_freq", "ppm", "rf_gain", "lna_gain", "rf_amp" + "samp_rate", "nmux_memory", "center_freq", "ppm", "rf_gain", "lna_gain", "rf_amp", "antenna" ).defaults(PropertyManager.getSharedInstance()) def restart(name, value): @@ -92,9 +92,13 @@ class SdrSource(object): self.process = None self.modificationLock = threading.Lock() - # override these in subclasses as necessary - self.command = None - self.format_conversion = None + # override this in subclasses + def getCommand(self): + pass + + # override this in subclasses, if necessary + def getFormatConversion(self): + return None def activateProfile(self, id = None): profiles = self.props["profiles"] @@ -127,17 +131,13 @@ class SdrSource(object): props = self.rtlProps - start_sdr_command = self.command.format( - samp_rate = props["samp_rate"], - center_freq = props["center_freq"], - ppm = props["ppm"], - rf_gain = props["rf_gain"], - lna_gain = props["lna_gain"], - rf_amp = props["rf_amp"] + start_sdr_command = self.getCommand().format( + **props.collect("samp_rate", "center_freq", "ppm", "rf_gain", "lna_gain", "rf_amp", "antenna").__dict__() ) - if self.format_conversion is not None: - start_sdr_command += " | " + self.format_conversion + format_conversion = self.getFormatConversion() + if format_conversion is not None: + start_sdr_command += " | " + format_conversion nmux_bufcnt = nmux_bufsize = 0 while nmux_bufsize < props["samp_rate"]/4: nmux_bufsize += 4096 @@ -228,22 +228,26 @@ class SdrSource(object): class RtlSdrSource(SdrSource): - def __init__(self, props, port): - super().__init__(props, port) - self.command = "rtl_sdr -s {samp_rate} -f {center_freq} -p {ppm} -g {rf_gain} -" - self.format_conversion = "csdr convert_u8_f" + def getCommand(self): + return "rtl_sdr -s {samp_rate} -f {center_freq} -p {ppm} -g {rf_gain} -" + + def getFormatConversion(self): + return "csdr convert_u8_f" class HackrfSource(SdrSource): - def __init__(self, props, port): - super().__init__(props, port) - self.command = "hackrf_transfer -s {samp_rate} -f {center_freq} -g {rf_gain} -l{lna_gain} -a{rf_amp} -r-" - self.format_conversion = "csdr convert_s8_f" + def getCommand(self): + return "hackrf_transfer -s {samp_rate} -f {center_freq} -g {rf_gain} -l{lna_gain} -a{rf_amp} -r-" + + def getFormatConversion(self): + return "csdr convert_s8_f" class SdrplaySource(SdrSource): - def __init__(self, props, port): - super().__init__(props, port) - self.command = "rx_sdr -F CF32 -s {samp_rate} -f {center_freq} -p {ppm} -g {rf_gain} -" - self.format_conversion = None + def getCommand(self): + command = "rx_sdr -F CF32 -s {samp_rate} -f {center_freq} -p {ppm} -g {rf_gain}" + if self.rtlProps["antenna"] is not None: + command += " -a \"{antenna}\"" + command += " -" + return command def sleepOnRestart(self): time.sleep(1)