Perseus SDR HF receiver first support

This commit is contained in:
Andrea Montefusco 2020-03-15 17:24:36 +01:00
parent c387fe0fe9
commit 97cb51d990
3 changed files with 104 additions and 1 deletions

View File

@ -99,7 +99,7 @@ Note: if you experience audio underruns while CPU usage is 100%, you can:
################################################################################################# #################################################################################################
# Currently supported types of sdr receivers: # Currently supported types of sdr receivers:
# "rtl_sdr", "sdrplay", "hackrf", "airspy", "airspyhf", "fifi_sdr" # "rtl_sdr", "sdrplay", "hackrf", "airspy", "airspyhf", "fifi_sdr", "perseussdr"
# #
# In order to use rtl_sdr, you will need to install librtlsdr-dev and the connector. # In order to use rtl_sdr, you will need to install librtlsdr-dev and the connector.
# In order to use sdrplay, airspy or airspyhf, you will need to install soapysdr, the corresponding driver, and the # In order to use sdrplay, airspy or airspyhf, you will need to install soapysdr, the corresponding driver, and the
@ -107,6 +107,10 @@ Note: if you experience audio underruns while CPU usage is 100%, you can:
# #
# https://github.com/jketterl/owrx_connector # https://github.com/jketterl/owrx_connector
# #
# In order to use Perseus HF you need to install the libperseus-sdr
#
# https://github.com/Microtelecom/libperseus-sdr
#
# NOTE: The connector sources have replaced the old piped nmux style of reading input. If you still have any sdrs # NOTE: The connector sources have replaced the old piped nmux style of reading input. If you still have any sdrs
# configured that have type endin in "_connector", simply remove that suffix. # configured that have type endin in "_connector", simply remove that suffix.
@ -137,6 +141,53 @@ sdrs = {
}, },
}, },
}, },
"perseussdr": {
"name": "Microtelecom Perseus HF receiver",
"type": "perseussdr",
"ppm": 0,
"profiles": {
"40m": {
"name": "40m",
"center_freq": 7150000,
"rf_gain": 0,
"samp_rate": 500000,
"start_freq": 7050000,
"start_mod": "lsb",
},
"20m": {
"name": "20m",
"center_freq": 14150000,
"rf_gain": 0,
"samp_rate": 500000,
"start_freq": 14070000,
"start_mod": "usb",
},
"30m": {
"name": "30m",
"center_freq": 10125000,
"rf_gain": 0,
"samp_rate": 192000,
"start_freq": 10142000,
"start_mod": "usb",
},
"80m": {
"name": "80m",
"center_freq": 3650000,
"rf_gain": 0,
"samp_rate": 500000,
"start_freq": 3570000,
"start_mod": "usb",
},
"49m": {
"name": "49m Broadcast",
"center_freq": 6000000,
"rf_gain": 0,
"samp_rate": 500000,
"start_freq": 6070000,
"start_mod": "am",
},
},
},
"airspy": { "airspy": {
"name": "Airspy HF+", "name": "Airspy HF+",
"type": "airspyhf", "type": "airspyhf",

View File

@ -25,6 +25,7 @@ class FeatureDetector(object):
"rtl_sdr_soapy": ["soapy_connector", "soapy_rtl_sdr"], "rtl_sdr_soapy": ["soapy_connector", "soapy_rtl_sdr"],
"sdrplay": ["soapy_connector", "soapy_sdrplay"], "sdrplay": ["soapy_connector", "soapy_sdrplay"],
"hackrf": ["hackrf_transfer"], "hackrf": ["hackrf_transfer"],
"perseussdr": ["perseustest"],
"airspy": ["soapy_connector", "soapy_airspy"], "airspy": ["soapy_connector", "soapy_airspy"],
"airspyhf": ["soapy_connector", "soapy_airspyhf"], "airspyhf": ["soapy_connector", "soapy_airspyhf"],
"lime_sdr": ["soapy_connector", "soapy_lime_sdr"], "lime_sdr": ["soapy_connector", "soapy_lime_sdr"],
@ -150,6 +151,26 @@ class FeatureDetector(object):
# TODO also check if it has the stdout feature # TODO also check if it has the stdout feature
return self.command_is_runnable("hackrf_transfer --help") return self.command_is_runnable("hackrf_transfer --help")
def has_perseustest(self):
"""
To use a Microtelecom Perseus HF receiver, compile and
install the libperseus-sdr:
```
sudo apt install libusb-1.0-0-dev
cd /tmp
wget https://github.com/Microtelecom/libperseus-sdr/releases/download/v0.7.5/libperseus_sdr-0.7.5.tar.gz
tar -zxvf libperseus_sdr-0.7.5.tar.gz
cd libperseus_sdr-0.7.5/
./configure
make
sudo make install
sudo ldconfig
perseustest
```
"""
return self.command_is_runnable("perseustest -d -1 -a -t 1")
def has_digiham(self): def has_digiham(self):
""" """
To use digital voice modes, the digiham package is required. You can find the package and installation To use digital voice modes, the digiham package is required. You can find the package and installation

31
owrx/source/perseussdr.py Normal file
View File

@ -0,0 +1,31 @@
from .direct import DirectSource
from owrx.command import Flag, Option
#
# perseustest -s 768000 -u 0 -f 14150000 -r-|csdr convert_s8_f|nmux --bufsize 192512 --bufcnt 260 --port 35989 --address 127.0.0.1
# perseustest -a -t0 -o -
# perseustest -d 9 -a -t 100000 -o - -s 768000 -u 0 -f 14150000 -r-
class PerseussdrSource(DirectSource):
def getCommandMapper(self):
return super().getCommandMapper().setBase("perseustest -p -d -1 -a -t 100000 -o - ").setMappings(
{
"samp_rate": Option("-s"),
"tuner_freq": Option("-f"),
"rf_gain": Option("-u"),
"lna_gain": Option("-g"),
"rf_amp": Option("-x"),
}
).setStatic("-r-")
def getEventNames(self):
return super().getEventNames() + [
"lna_gain",
"rf_amp",
]
def getFormatConversion(self):
# return ["csdr convert_s24_f --bigendian"]
# return ["csdr convert_s24_f", "csdr gain_ff 20"]
return ["csdr gain_ff 20"]