mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
some mire linting..
This commit is contained in:
parent
09786e8b28
commit
36a50fa02b
9 changed files with 19 additions and 187 deletions
18
.github/workflows/build_multiplatform.yml
vendored
18
.github/workflows/build_multiplatform.yml
vendored
|
@ -8,7 +8,7 @@ jobs:
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-20.04, ubuntu-22.04, macos-latest, macos-latest-large, macos-12]
|
os: [ubuntu-20.04, ubuntu-22.04, macos-latest, macos-12]
|
||||||
platform: [{name: "native"}, {name: "Windows", file: "dll"}]
|
platform: [{name: "native"}, {name: "Windows", file: "dll"}]
|
||||||
architecture: [i686-w64-mingw32, x86_64-w64-mingw32]
|
architecture: [i686-w64-mingw32, x86_64-w64-mingw32]
|
||||||
include:
|
include:
|
||||||
|
@ -34,13 +34,6 @@ jobs:
|
||||||
generator: Unix Makefiles
|
generator: Unix Makefiles
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
- os: macos-latest-large
|
|
||||||
libcodec2_name: libcodec2.1.2.dylib
|
|
||||||
libcodec2_os_name: libcodec2_macos-latest-m1
|
|
||||||
libcodec2_filetype: dylib
|
|
||||||
generator: Unix Makefiles
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- os: macos-12
|
- os: macos-12
|
||||||
libcodec2_name: libcodec2.1.2.dylib
|
libcodec2_name: libcodec2.1.2.dylib
|
||||||
libcodec2_os_name: libcodec2_macos-12
|
libcodec2_os_name: libcodec2_macos-12
|
||||||
|
@ -201,7 +194,7 @@ jobs:
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-20.04, macos-latest, macos-latest-large, windows-latest]
|
os: [ubuntu-20.04, macos-latest, windows-latest]
|
||||||
include:
|
include:
|
||||||
- os: ubuntu-20.04
|
- os: ubuntu-20.04
|
||||||
zip_name: ubuntu_modem
|
zip_name: ubuntu_modem
|
||||||
|
@ -217,13 +210,6 @@ jobs:
|
||||||
modem_binary_name: freedata-modem
|
modem_binary_name: freedata-modem
|
||||||
electron_parameters: "-p always"
|
electron_parameters: "-p always"
|
||||||
|
|
||||||
- os: macos-latest-large
|
|
||||||
zip_name: macos_modem_m1
|
|
||||||
generator: Unix Makefiles
|
|
||||||
daemon_binary_name: freedata-daemon
|
|
||||||
modem_binary_name: freedata-modem
|
|
||||||
electron_parameters: "-p always"
|
|
||||||
|
|
||||||
- os: windows-latest
|
- os: windows-latest
|
||||||
zip_name: windows_modem
|
zip_name: windows_modem
|
||||||
generator: Visual Studio 16 2019
|
generator: Visual Studio 16 2019
|
||||||
|
|
|
@ -266,7 +266,7 @@ function close_sub_processes() {
|
||||||
daemonProcess.kill();
|
daemonProcess.kill();
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
mainLog.error(e);
|
console.log(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("closing modem and daemon");
|
console.log("closing modem and daemon");
|
||||||
|
|
|
@ -1,149 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
# Copyright (c) 2019 Jeppe Ledet-Pedersen
|
|
||||||
# This software is released under the MIT license.
|
|
||||||
# See the LICENSE file for further details.
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import json
|
|
||||||
import argparse
|
|
||||||
|
|
||||||
from gnuradio import gr
|
|
||||||
from gnuradio import uhd
|
|
||||||
from gnuradio.fft import logpwrfft
|
|
||||||
|
|
||||||
import numpy as np
|
|
||||||
|
|
||||||
from gevent.pywsgi import WSGIServer
|
|
||||||
from geventwebsocket import WebSocketError
|
|
||||||
from geventwebsocket.handler import WebSocketHandler
|
|
||||||
|
|
||||||
from bottle import request, Bottle, abort, static_file
|
|
||||||
|
|
||||||
|
|
||||||
app = Bottle()
|
|
||||||
connections = set()
|
|
||||||
opts = {}
|
|
||||||
|
|
||||||
|
|
||||||
@app.route('/websocket')
|
|
||||||
def handle_websocket():
|
|
||||||
wsock = request.environ.get('wsgi.websocket')
|
|
||||||
if not wsock:
|
|
||||||
abort(400, 'Expected WebSocket request.')
|
|
||||||
|
|
||||||
connections.add(wsock)
|
|
||||||
|
|
||||||
# Send center frequency and span
|
|
||||||
wsock.send(json.dumps(opts))
|
|
||||||
|
|
||||||
while True:
|
|
||||||
try:
|
|
||||||
wsock.receive()
|
|
||||||
except WebSocketError:
|
|
||||||
break
|
|
||||||
|
|
||||||
connections.remove(wsock)
|
|
||||||
|
|
||||||
|
|
||||||
@app.route('/')
|
|
||||||
def index():
|
|
||||||
return static_file('index.html', root='.')
|
|
||||||
|
|
||||||
|
|
||||||
@app.route('/<filename>')
|
|
||||||
def static(filename):
|
|
||||||
return static_file(filename, root='.')
|
|
||||||
|
|
||||||
|
|
||||||
class fft_broadcast_sink(gr.sync_block):
|
|
||||||
def __init__(self, fft_size):
|
|
||||||
gr.sync_block.__init__(self,
|
|
||||||
name="plotter",
|
|
||||||
in_sig=[(np.float32, fft_size)],
|
|
||||||
out_sig=[])
|
|
||||||
|
|
||||||
def work(self, input_items, output_items):
|
|
||||||
ninput_items = len(input_items[0])
|
|
||||||
|
|
||||||
for bins in input_items[0]:
|
|
||||||
p = np.around(bins).astype(int)
|
|
||||||
p = np.fft.fftshift(p)
|
|
||||||
for c in connections.copy():
|
|
||||||
try:
|
|
||||||
c.send(json.dumps({'s': p.tolist()}, separators=(',', ':')))
|
|
||||||
except Exception:
|
|
||||||
connections.remove(c)
|
|
||||||
|
|
||||||
self.consume(0, ninput_items)
|
|
||||||
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
class fft_receiver(gr.top_block):
|
|
||||||
def __init__(self, samp_rate, freq, gain, fft_size, framerate):
|
|
||||||
gr.top_block.__init__(self, "Top Block")
|
|
||||||
|
|
||||||
self.usrp = uhd.usrp_source(
|
|
||||||
",".join(("", "")),
|
|
||||||
uhd.stream_args(
|
|
||||||
cpu_format="fc32",
|
|
||||||
channels=range(1),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
self.usrp.set_samp_rate(samp_rate)
|
|
||||||
self.usrp.set_center_freq(freq, 0)
|
|
||||||
self.usrp.set_gain(gain, 0)
|
|
||||||
|
|
||||||
self.fft = logpwrfft.logpwrfft_c(
|
|
||||||
sample_rate=samp_rate,
|
|
||||||
fft_size=fft_size,
|
|
||||||
ref_scale=1,
|
|
||||||
frame_rate=framerate,
|
|
||||||
avg_alpha=1,
|
|
||||||
average=False,
|
|
||||||
)
|
|
||||||
self.fft_broadcast = fft_broadcast_sink(fft_size)
|
|
||||||
|
|
||||||
self.connect((self.fft, 0), (self.fft_broadcast, 0))
|
|
||||||
self.connect((self.usrp, 0), (self.fft, 0))
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
parser = argparse.ArgumentParser()
|
|
||||||
parser.add_argument('-s', '--sample-rate', type=float, default=40e6)
|
|
||||||
parser.add_argument('-f', '--frequency', type=float, default=940e6)
|
|
||||||
parser.add_argument('-g', '--gain', type=float, default=40)
|
|
||||||
parser.add_argument('-n', '--fft-size', type=int, default=4096)
|
|
||||||
parser.add_argument('-r', '--frame-rate', type=int, default=25)
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
if gr.enable_realtime_scheduling() != gr.RT_OK or 0:
|
|
||||||
print("Error: failed to enable real-time scheduling.")
|
|
||||||
|
|
||||||
tb = fft_receiver(
|
|
||||||
samp_rate=args.sample_rate,
|
|
||||||
freq=args.frequency,
|
|
||||||
gain=args.gain,
|
|
||||||
fft_size=args.fft_size,
|
|
||||||
framerate=args.frame_rate
|
|
||||||
)
|
|
||||||
tb.start()
|
|
||||||
|
|
||||||
opts['center'] = args.frequency
|
|
||||||
opts['span'] = args.sample_rate
|
|
||||||
|
|
||||||
server = WSGIServer(("0.0.0.0", 8000), app,
|
|
||||||
handler_class=WebSocketHandler)
|
|
||||||
try:
|
|
||||||
server.serve_forever()
|
|
||||||
except Exception:
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
tb.stop()
|
|
||||||
tb.wait()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
|
@ -16,29 +16,25 @@ const settings = useSettingsStore(pinia);
|
||||||
// ---------------------------------
|
// ---------------------------------
|
||||||
|
|
||||||
console.log(process.env);
|
console.log(process.env);
|
||||||
|
var appDataFolder = "undefined";
|
||||||
if (typeof process.env["APPDATA"] !== "undefined") {
|
if (typeof process.env["APPDATA"] !== "undefined") {
|
||||||
var appDataFolder = process.env["APPDATA"];
|
appDataFolder = process.env["APPDATA"];
|
||||||
console.log(appDataFolder);
|
console.log(appDataFolder);
|
||||||
} else {
|
} else {
|
||||||
switch (process.platform) {
|
switch (process.platform) {
|
||||||
case "darwin":
|
case "darwin":
|
||||||
var appDataFolder = process.env["HOME"] + "/Library/Application Support";
|
appDataFolder = process.env["HOME"] + "/Library/Application Support";
|
||||||
console.log(appDataFolder);
|
console.log(appDataFolder);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "linux":
|
case "linux":
|
||||||
var appDataFolder = process.env["HOME"] + "/.config";
|
appDataFolder = process.env["HOME"] + "/.config";
|
||||||
console.log(appDataFolder);
|
console.log(appDataFolder);
|
||||||
|
|
||||||
break;
|
|
||||||
case "linux":
|
|
||||||
var appDataFolder = "undefined";
|
|
||||||
break;
|
|
||||||
case "win32":
|
case "win32":
|
||||||
var appDataFolder = "undefined";
|
appDataFolder = "undefined";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
var appDataFolder = "undefined";
|
appDataFolder = "undefined";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -425,7 +425,6 @@ client.on("data", function (socketdata) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "waiting":
|
case "waiting":
|
||||||
// ARQ waiting
|
// ARQ waiting
|
||||||
|
@ -536,7 +535,7 @@ export function sendPing(dxcallsign) {
|
||||||
// Send Mesh Ping
|
// Send Mesh Ping
|
||||||
//exports.sendMeshPing = function (dxcallsign) {
|
//exports.sendMeshPing = function (dxcallsign) {
|
||||||
function sendMeshPing(dxcallsign) {
|
function sendMeshPing(dxcallsign) {
|
||||||
command =
|
var command =
|
||||||
'{"type" : "mesh", "command" : "ping", "dxcallsign" : "' +
|
'{"type" : "mesh", "command" : "ping", "dxcallsign" : "' +
|
||||||
dxcallsign +
|
dxcallsign +
|
||||||
'"}';
|
'"}';
|
||||||
|
@ -792,7 +791,7 @@ export function stopBeacon() {
|
||||||
|
|
||||||
// OPEN ARQ SESSION
|
// OPEN ARQ SESSION
|
||||||
export function connectARQ(dxcallsign) {
|
export function connectARQ(dxcallsign) {
|
||||||
command =
|
var command =
|
||||||
'{"type" : "arq", "command" : "connect", "dxcallsign": "' +
|
'{"type" : "arq", "command" : "connect", "dxcallsign": "' +
|
||||||
dxcallsign +
|
dxcallsign +
|
||||||
'", "attempts": "10"}';
|
'", "attempts": "10"}';
|
||||||
|
@ -853,7 +852,7 @@ export function sendBroadcastChannel(obj) {
|
||||||
);
|
);
|
||||||
console.log(data.length);
|
console.log(data.length);
|
||||||
let payload = data;
|
let payload = data;
|
||||||
command =
|
var command =
|
||||||
'{"type" : "fec", "command" : "transmit", "mode": "datac4", "wakeup": "True", "payload" : "' +
|
'{"type" : "fec", "command" : "transmit", "mode": "datac4", "wakeup": "True", "payload" : "' +
|
||||||
payload +
|
payload +
|
||||||
'"}';
|
'"}';
|
||||||
|
|
|
@ -28,7 +28,7 @@ from static import FRAME_TYPE
|
||||||
import structlog
|
import structlog
|
||||||
import ujson as json
|
import ujson as json
|
||||||
import tci
|
import tci
|
||||||
# FIXME: used for def transmit_morse
|
# FIXME used for def transmit_morse
|
||||||
# import cw
|
# import cw
|
||||||
from queues import DATA_QUEUE_RECEIVED, MODEM_RECEIVED_QUEUE, MODEM_TRANSMIT_QUEUE, RIGCTLD_COMMAND_QUEUE, \
|
from queues import DATA_QUEUE_RECEIVED, MODEM_RECEIVED_QUEUE, MODEM_TRANSMIT_QUEUE, RIGCTLD_COMMAND_QUEUE, \
|
||||||
AUDIO_RECEIVED_QUEUE, AUDIO_TRANSMIT_QUEUE, MESH_RECEIVED_QUEUE
|
AUDIO_RECEIVED_QUEUE, AUDIO_TRANSMIT_QUEUE, MESH_RECEIVED_QUEUE
|
||||||
|
@ -1313,7 +1313,7 @@ class RF:
|
||||||
raise ZeroDivisionError
|
raise ZeroDivisionError
|
||||||
AudioParam.audio_dbfs = 20 * np.log10(rms / 32768)
|
AudioParam.audio_dbfs = 20 * np.log10(rms / 32768)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
# FIXME: Disabled for cli cleanup
|
# FIXME Disabled for cli cleanup
|
||||||
#self.log.warning(
|
#self.log.warning(
|
||||||
# "[MDM] fft calculation error - please check your audio setup",
|
# "[MDM] fft calculation error - please check your audio setup",
|
||||||
# e=e,
|
# e=e,
|
||||||
|
|
|
@ -1275,8 +1275,8 @@ def send_daemon_state():
|
||||||
# print(f"modem closed with code: {retcode_modem}")
|
# print(f"modem closed with code: {retcode_modem}")
|
||||||
Daemon.modemstarted = False
|
Daemon.modemstarted = False
|
||||||
|
|
||||||
except Exception:
|
except Exception as err:
|
||||||
pass
|
log.warning("[DMN] error", e=err)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
python_version = f"{str(sys.version_info[0])}.{str(sys.version_info[1])}"
|
python_version = f"{str(sys.version_info[0])}.{str(sys.version_info[1])}"
|
||||||
|
|
|
@ -265,7 +265,7 @@ def t_datac13_2(
|
||||||
log.info("t_datac13_2:", RXCHANNEL=modem.RXCHANNEL)
|
log.info("t_datac13_2:", RXCHANNEL=modem.RXCHANNEL)
|
||||||
log.info("t_datac13_2:", TXCHANNEL=modem.TXCHANNEL)
|
log.info("t_datac13_2:", TXCHANNEL=modem.TXCHANNEL)
|
||||||
|
|
||||||
# TODO: Why do we need this when calling CQ?
|
# TODO Why do we need this when calling CQ?
|
||||||
#if "cq" in data:
|
#if "cq" in data:
|
||||||
# t_data = {"type": "arq", "command": "stop_transmission"}
|
# t_data = {"type": "arq", "command": "stop_transmission"}
|
||||||
# sock.ThreadedTCPRequestHandler.process_modem_commands(None,json.dumps(t_data, indent=None))
|
# sock.ThreadedTCPRequestHandler.process_modem_commands(None,json.dumps(t_data, indent=None))
|
||||||
|
@ -304,6 +304,6 @@ def t_datac13_2(
|
||||||
assert item in str(
|
assert item in str(
|
||||||
sock.SOCKET_QUEUE.queue
|
sock.SOCKET_QUEUE.queue
|
||||||
), f"{item} not found in {str(sock.SOCKET_QUEUE.queue)}"
|
), f"{item} not found in {str(sock.SOCKET_QUEUE.queue)}"
|
||||||
# TODO: Not sure why we need this for every test run
|
# TODO Not sure why we need this for every test run
|
||||||
# assert '"arq":"session","status":"close"' in str(sock.SOCKET_QUEUE.queue)
|
# assert '"arq":"session","status":"close"' in str(sock.SOCKET_QUEUE.queue)
|
||||||
log.warning("station2: Exiting!")
|
log.warning("station2: Exiting!")
|
||||||
|
|
|
@ -306,6 +306,6 @@ def t_datac13_2(
|
||||||
assert item not in str(
|
assert item not in str(
|
||||||
sock.SOCKET_QUEUE.queue
|
sock.SOCKET_QUEUE.queue
|
||||||
), f"{item} found in {str(sock.SOCKET_QUEUE.queue)}"
|
), f"{item} found in {str(sock.SOCKET_QUEUE.queue)}"
|
||||||
# TODO: Not sure why we need this for every test run
|
# TODO Not sure why we need this for every test run
|
||||||
# assert '"arq":"session","status":"close"' in str(sock.SOCKET_QUEUE.queue)
|
# assert '"arq":"session","status":"close"' in str(sock.SOCKET_QUEUE.queue)
|
||||||
log.warning("station2: Exiting!")
|
log.warning("station2: Exiting!")
|
||||||
|
|
Loading…
Reference in a new issue