diff --git a/config_webrx.py b/config_webrx.py index 3bd92c6..a3ea8c0 100644 --- a/config_webrx.py +++ b/config_webrx.py @@ -93,7 +93,7 @@ Note: if you experience audio underruns while CPU usage is 100%, you can: # Check here: https://github.com/simonyiszk/openwebrx/wiki#guides-for-receiver-hardware-support # ################################################################################################# -# Currently supported types of sdr receivers: "rtl_sdr", "sdrplay", "hackrf" +# Currently supported types of sdr receivers: "rtl_sdr", "sdrplay", "hackrf", "airspy" sdrs = { "rtlsdr": { diff --git a/owrx/feature.py b/owrx/feature.py index 83f9232..bdfcee2 100644 --- a/owrx/feature.py +++ b/owrx/feature.py @@ -12,7 +12,8 @@ class FeatureDetector(object): "core": [ "csdr", "nmux" ], "rtl_sdr": [ "rtl_sdr" ], "sdrplay": [ "rx_tools" ], - "hackrf": [ "hackrf_transfer" ] + "hackrf": [ "hackrf_transfer" ], + "airspy": [ "airspy_rx" ] } def is_available(self, feature): @@ -63,3 +64,6 @@ class FeatureDetector(object): # TODO i don't have a hackrf, so somebody doublecheck this. # TODO also check if it has the stdout feature return os.system("hackrf_transfer --help 2> /dev/null") != 32512 + + def has_airspy_rx(self): + return os.system("airspy_rx --help 2> /dev/null") != 32512 diff --git a/owrx/source.py b/owrx/source.py index 3efc7d4..d331c71 100644 --- a/owrx/source.py +++ b/owrx/source.py @@ -130,6 +130,7 @@ class SdrSource(object): 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"], @@ -249,6 +250,12 @@ class SdrplaySource(SdrSource): 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" + class SpectrumThread(threading.Thread): def __init__(self, sdrSource): self.doRun = True