added file player source

See “file_player” in config. Requires updated csdr with —bigendian
option to convert_s16_f and iq_swap_ff. Also requires xzcat to be
installed.

Sample files in new samples/ subdirectory. If larger sample file is too
big for distro remove it and reconfigure to use smaller one (which will
wrap around more quickly).
This commit is contained in:
jks-prv 2020-06-11 14:06:41 +12:00
parent eb45ae5015
commit 5cf8614b57
6 changed files with 36 additions and 0 deletions

View File

@ -151,6 +151,23 @@ sdrs = {
}, },
}, },
}, },
"file_player": {
"name": "file_player",
"type": "file_player",
"profiles": {
"40m": {
"name": "40m CQWW-CW 2005 loop",
"center_freq": 7040000,
"rf_gain": "auto",
"samp_rate": 96000,
"start_freq": 7040000,
"start_mod": "lsb",
"file": "samples/CQWW_CW_2005.full.fs96k.cf7040.iq.s16.dat.xz",
"bytes_per_sample": 4,
"format_conversion": "csdr convert_s16_f --bigendian | csdr iq_swap_ff",
},
},
},
"airspy": { "airspy": {
"name": "Airspy HF+", "name": "Airspy HF+",
"type": "airspyhf", "type": "airspyhf",

View File

@ -12,6 +12,7 @@ class CommandMapper(object):
args = [a for a in args if a != ""] args = [a for a in args if a != ""]
options = " ".join(args) options = " ".join(args)
command = "{0} {1}".format(self.base, options) command = "{0} {1}".format(self.base, options)
command = command.format(p=values)
if self.static is not None: if self.static is not None:
command += " " + self.static command += " " + self.static
return command return command

View File

@ -30,6 +30,7 @@ class FeatureDetector(object):
"airspyhf": ["soapy_connector", "soapy_airspyhf"], "airspyhf": ["soapy_connector", "soapy_airspyhf"],
"lime_sdr": ["soapy_connector", "soapy_lime_sdr"], "lime_sdr": ["soapy_connector", "soapy_lime_sdr"],
"fifi_sdr": ["alsa", "rockprog"], "fifi_sdr": ["alsa", "rockprog"],
"file_player": ["xzcat"],
"pluto_sdr": ["soapy_connector", "soapy_pluto_sdr"], "pluto_sdr": ["soapy_connector", "soapy_pluto_sdr"],
"soapy_remote": ["soapy_connector", "soapy_remote"], "soapy_remote": ["soapy_connector", "soapy_remote"],
"uhd": ["soapy_connector", "soapy_uhd"], "uhd": ["soapy_connector", "soapy_uhd"],
@ -392,3 +393,11 @@ class FeatureDetector(object):
You can find instructions and downloads [here](https://o28.sischa.net/fifisdr/trac/wiki/De%3Arockprog). You can find instructions and downloads [here](https://o28.sischa.net/fifisdr/trac/wiki/De%3Arockprog).
""" """
return self.command_is_runnable("rockprog") return self.command_is_runnable("rockprog")
def has_xzcat(self):
"""
The "xzcat" executable is required to use the file player. It needs to be installed separately.
Install it from a system package manager, e.g. "sudo apt-get install xz-utils".
"""
return self.command_is_runnable("xzcat")

View File

@ -0,0 +1,9 @@
from .direct import DirectSource
class FilePlayerSource(DirectSource):
def getCommandMapper(self):
cmd = "(while true; do xzcat {p[file]}; done) | csdr flowcontrol $(csdr ={p[samp_rate]}*{p[bytes_per_sample]}*1.05) 20 | {p[format_conversion]}"
return super().getCommandMapper().setBase(cmd)
def getEventNames(self):
return super().getEventNames() + ["file", "bytes_per_sample", "format_conversion"]

Binary file not shown.

Binary file not shown.