From c85400063c517b621c467d217e81e35285c3d5ee Mon Sep 17 00:00:00 2001 From: Jim Ancona Date: Mon, 2 Nov 2020 07:11:54 -0500 Subject: [PATCH] Initial HPSDR radio support --- owrx/feature.py | 8 ++++++++ owrx/source/hpsdr.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 owrx/source/hpsdr.py diff --git a/owrx/feature.py b/owrx/feature.py index c3d7259..c81d8c7 100644 --- a/owrx/feature.py +++ b/owrx/feature.py @@ -68,6 +68,7 @@ class FeatureDetector(object): "red_pitaya": ["soapy_connector", "soapy_red_pitaya"], "radioberry": ["soapy_connector", "soapy_radioberry"], "fcdpp": ["soapy_connector", "soapy_fcdpp"], + "hpsdr": ["hpsdr_connector"], # optional features and their requirements "digital_voice_digiham": ["digiham", "sox"], "digital_voice_dsd": ["dsd", "sox", "digiham"], @@ -492,3 +493,10 @@ class FeatureDetector(object): [OpenWebRX wiki](https://github.com/jketterl/openwebrx/wiki/DRM-demodulator-notes). """ return self.command_is_runnable("dream --help", 0) + + def has_hpsdr_connector(self): + """ + In order to use the HPSDR connector, you will need to install [hpsdrconnector] + (https://github.com/jancona/hpsdrconnector). + """ + return self.command_is_runnable("hpsdrconnector -h") diff --git a/owrx/source/hpsdr.py b/owrx/source/hpsdr.py new file mode 100644 index 0000000..f97cc6b --- /dev/null +++ b/owrx/source/hpsdr.py @@ -0,0 +1,31 @@ +from .direct import DirectSource +from owrx.command import Flag, Option + +# In order to use an HPSDR radio, you must install hpsdrconnector from https://github.com/jancona/hpsdrconnector +# These are the command line options available: +# --frequency uint +# Tune to specified frequency in Hz (default 7100000) +# --gain uint +# LNA gain between 0 (-12dB) and 60 (48dB) (default 20) +# --radio string +# IP address of radio (default use first radio discovered) +# --samplerate uint +# Use the specified samplerate: one of 48000, 96000, 192000, 384000 (default 96000) +# +# If you omit `remote` from config_webrx.py, hpsdrconnector will use the HPSDR discovery protocol +# to find radios on your local network and will connect to the first radio it discovered. + +class HpsdrSource(DirectSource): + def getCommandMapper(self): + return super().getCommandMapper().setBase("hpsdrconnector").setMappings( + { + "tuner_freq": Option("--frequency"), + "samp_rate": Option("--samplerate"), + "remote": Option("--radio"), + "rf_gain": Option("--gain"), + } + ) + + def getFormatConversion(self): + return ["csdr convert_s24_f"] +