-
-
Notifications
You must be signed in to change notification settings - Fork 128
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #842 from darksidelemm/testing
Web control updates, preliminary KA9Q server support (no spectrum)
- Loading branch information
Showing
12 changed files
with
308 additions
and
31 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,129 @@ | ||
#!/usr/bin/env python | ||
# | ||
# radiosonde_auto_rx - SDR Abstraction - KA9Q-Radio | ||
# | ||
# Copyright (C) 2022 Mark Jessop <vk5qi@rfhead.net> | ||
# Released under GNU GPL v3 or later | ||
# | ||
|
||
import logging | ||
import os.path | ||
import platform | ||
import subprocess | ||
from .utils import timeout_cmd | ||
|
||
|
||
def ka9q_setup_channel( | ||
sdr_hostname, | ||
frequency, | ||
sample_rate | ||
): | ||
# tune --samprate 48000 --frequency 404m09 --mode iq --ssrc 404090000 --radio sonde.local | ||
_cmd = ( | ||
f"{timeout_cmd()} 5 " # Add a timeout, because connections to non-existing servers block for ages | ||
f"tune " | ||
f"--samprate {int(sample_rate)} " | ||
f"--mode iq " | ||
f"--frequency {int(frequency)} " | ||
f"--ssrc {int(frequency)} " | ||
f"--radio {sdr_hostname}" | ||
) | ||
|
||
logging.debug(f"KA9Q - Starting channel at {frequency} Hz, with command: {_cmd}") | ||
|
||
try: | ||
_output = subprocess.check_output( | ||
_cmd, shell=True, stderr=subprocess.STDOUT | ||
) | ||
except subprocess.CalledProcessError as e: | ||
# Something went wrong... | ||
|
||
if e.returncode == 124: | ||
logging.critical( | ||
f"KA9Q ({sdr_hostname}) - tune call failed while opening channel with a timeout. Is the server running?" | ||
) | ||
elif e.returncode == 127: | ||
logging.critical( | ||
f"KA9Q ({sdr_hostname}) - Could not find KA9Q-Radio 'tune' binary! This may need to be compiled and installed." | ||
) | ||
else: | ||
logging.critical( | ||
f"KA9Q ({sdr_hostname}) - tune call failed while opening channel with return code {e.returncode}." | ||
) | ||
# Look at the error output in a bit more details. | ||
#_output = e.output.decode("ascii") | ||
|
||
# TODO - see if we can look in the output for any error messages. | ||
return False | ||
|
||
return True | ||
|
||
|
||
def ka9q_close_channel( | ||
sdr_hostname, | ||
frequency | ||
): | ||
|
||
_cmd = ( | ||
f"{timeout_cmd()} 5 " # Add a timeout, because connections to non-existing servers block for ages | ||
f"tune " | ||
f"--samprate 48000 " | ||
f"--mode iq " | ||
f"--frequency 0 " | ||
f"--ssrc {int(frequency)} " | ||
f"--radio {sdr_hostname}" | ||
) | ||
|
||
logging.debug(f"KA9Q - Closing channel at {frequency} Hz, with command: {_cmd}") | ||
|
||
try: | ||
_output = subprocess.check_output( | ||
_cmd, shell=True, stderr=subprocess.STDOUT | ||
) | ||
except subprocess.CalledProcessError as e: | ||
# Something went wrong... | ||
|
||
if e.returncode == 124: | ||
logging.critical( | ||
f"KA9Q ({sdr_hostname}) - tune call failed while closing channel with a timeout. Is the server running?" | ||
) | ||
elif e.returncode == 127: | ||
logging.critical( | ||
f"KA9Q ({sdr_hostname}) - Could not find KA9Q-Radio 'tune' binary! This may need to be compiled and installed." | ||
) | ||
else: | ||
logging.critical( | ||
f"KA9Q ({sdr_hostname}) - tune call failed while closing chanel with return code {e.returncode}." | ||
) | ||
# Look at the error output in a bit more details. | ||
#_output = e.output.decode("ascii") | ||
|
||
# TODO - see if we can look in the output for any error messages. | ||
return False | ||
|
||
return True | ||
|
||
|
||
def ka9q_get_iq_cmd( | ||
sdr_hostname, | ||
frequency, | ||
sample_rate | ||
): | ||
|
||
# We need to setup a channel before we can use it! | ||
_setup_success = ka9q_setup_channel(sdr_hostname, frequency, sample_rate) | ||
|
||
if not _setup_success: | ||
logging.critical(f"KA9Q ({sdr_hostname}) - Could not setup rx channel! Decoder will likely timeout.") | ||
|
||
# Get the 'PCM' version of the server name, where as assume -pcm is added to the first part of the hostname. | ||
_pcm_host = sdr_hostname.split('.')[0] + "-pcm." + ".".join(sdr_hostname.split(".")[1:]) | ||
|
||
# pcmcat -2 -s 404090000 sonde-pcm.local | ||
_cmd = ( | ||
f"pcmcat -2 " | ||
f"-s {int(frequency)} " | ||
f"{_pcm_host} |" | ||
) | ||
|
||
return _cmd |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.