Merge branch 'server_rework' of github.com:jketterl/openwebrx into server_rework
This commit is contained in:
		| @@ -130,34 +130,46 @@ sdrs = { | ||||
|             "20m": { | ||||
|                 "name":"20m", | ||||
|                 "center_freq": 14150000, | ||||
|                 "rf_gain": 40, | ||||
|                 "rf_gain": 4, | ||||
|                 "samp_rate": 500000, | ||||
|                 "start_freq": 14070000, | ||||
|                 "start_mod": "usb", | ||||
|                 "antenna": "Antenna A" | ||||
|             }, | ||||
|             "30m": { | ||||
|                 "name":"30m", | ||||
|                 "center_freq": 10125000, | ||||
|                 "rf_gain": 4, | ||||
|                 "samp_rate": 250000, | ||||
|                 "start_freq": 10142000, | ||||
|                 "start_mod": "usb" | ||||
|             }, | ||||
|             "40m": { | ||||
|                 "name":"40m", | ||||
|                 "center_freq": 7100000, | ||||
|                 "rf_gain": 40, | ||||
|                 "rf_gain": 4, | ||||
|                 "samp_rate": 500000, | ||||
|                 "start_freq": 7070000, | ||||
|                 "start_mod": "usb" | ||||
|                 "start_mod": "usb", | ||||
|                 "antenna": "Antenna A" | ||||
|             }, | ||||
|             "80m": { | ||||
|                 "name":"80m", | ||||
|                 "center_freq": 3650000, | ||||
|                 "rf_gain": 40, | ||||
|                 "rf_gain": 4, | ||||
|                 "samp_rate": 500000, | ||||
|                 "start_freq": 3570000, | ||||
|                 "start_mod": "usb" | ||||
|                 "start_mod": "usb", | ||||
|                 "antenna": "Antenna A" | ||||
|             }, | ||||
|             "49m": { | ||||
|                 "name": "49m Broadcast", | ||||
|                 "center_freq": 6000000, | ||||
|                 "rf_gain": 40, | ||||
|                 "rf_gain": 4, | ||||
|                 "samp_rate": 500000, | ||||
|                 "start_freq": 6070000, | ||||
|                 "start_mod": "am" | ||||
|                 "start_mod": "am", | ||||
|                 "antenna": "Antenna A" | ||||
|             } | ||||
|         } | ||||
|     }, | ||||
|   | ||||
| @@ -32,7 +32,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 = {} | ||||
|   | ||||
| @@ -81,7 +81,7 @@ class OpenWebRxClient(object): | ||||
|  | ||||
|     def setParams(self, params): | ||||
|         # only the keys in the protected property manager can be overridden from the web | ||||
|         protected = self.sdr.getProps().collect("samp_rate", "center_freq", "rf_gain", "type") \ | ||||
|         protected = self.sdr.getProps().collect("samp_rate", "center_freq", "rf_gain", "type", "if_gain") \ | ||||
|             .defaults(PropertyManager.getSharedInstance()) | ||||
|         for key, value in params.items(): | ||||
|             protected[key] = value | ||||
|   | ||||
| @@ -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", "if_gain" | ||||
|         ).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,18 +131,13 @@ class SdrSource(object): | ||||
|  | ||||
|         props = self.rtlProps | ||||
|  | ||||
|         start_sdr_command = self.command.format( | ||||
|             samp_rate = props["samp_rate"], | ||||
|             center_freq = props["center_freq"], | ||||
|             center_freq_mhz = props["center_freq"]/1e6, | ||||
|             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", "if_gain").__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 | ||||
| @@ -230,31 +229,43 @@ 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}" | ||||
|         gainMap = { "rf_gain" : "RFGR", "if_gain" : "IFGR"} | ||||
|         gains = [ "{0}={{{1}}}".format(gainMap[name], name) for (name, value) in self.rtlProps.collect("rf_gain", "if_gain").__dict__().items() if value is not None ] | ||||
|         if gains: | ||||
|             command += " -g {gains}".format(gains = ",".join(gains)) | ||||
|         if self.rtlProps["antenna"] is not None: | ||||
|             command += " -a \"{antenna}\"" | ||||
|         command += " -" | ||||
|         return command | ||||
|  | ||||
|     def sleepOnRestart(self): | ||||
|         time.sleep(1) | ||||
|  | ||||
| class AirspySource(SdrSource): | ||||
|     def __init__(self, props, port): | ||||
|         super().__init__(props, port) | ||||
|         self.command = "airspy_rx -f{center_freq_mhz} -r /dev/stdout -a{samp_rate} -g {rf_gain}" | ||||
|         self.format_conversion = "csdr convert_s16_f" | ||||
|     def getCommand(self): | ||||
|         frequency = self.props['center_freq'] / 1e6 | ||||
|         command = "airspy_rx" | ||||
|         command += " -f{0}".format(frequency) | ||||
|         command += " -r /dev/stdout -a{samp_rate} -g {rf_gain}" | ||||
|         return command | ||||
|     def getFormatConversion(self): | ||||
|         return "csdr convert_s16_f" | ||||
|  | ||||
| class SpectrumThread(threading.Thread): | ||||
|     def __init__(self, sdrSource): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jakob Ketterl
					Jakob Ketterl