diff --git a/.github/workflows/build_multiplatform.yml b/.github/workflows/build_multiplatform.yml index a4505064..f6095a1f 100644 --- a/.github/workflows/build_multiplatform.yml +++ b/.github/workflows/build_multiplatform.yml @@ -8,7 +8,7 @@ jobs: strategy: fail-fast: false 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"}] architecture: [i686-w64-mingw32, x86_64-w64-mingw32] include: @@ -34,13 +34,6 @@ jobs: generator: Unix Makefiles 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 libcodec2_name: libcodec2.1.2.dylib libcodec2_os_name: libcodec2_macos-12 @@ -201,7 +194,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-20.04, macos-latest, macos-latest-large, windows-latest] + os: [ubuntu-20.04, macos-latest, windows-latest] include: - os: ubuntu-20.04 zip_name: ubuntu_modem @@ -217,13 +210,6 @@ jobs: modem_binary_name: freedata-modem 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 zip_name: windows_modem generator: Visual Studio 16 2019 diff --git a/gui/electron/main/index.ts b/gui/electron/main/index.ts index 4e7d4494..6a0c41f3 100644 --- a/gui/electron/main/index.ts +++ b/gui/electron/main/index.ts @@ -266,7 +266,7 @@ function close_sub_processes() { daemonProcess.kill(); } } catch (e) { - mainLog.error(e); + console.log(e); } console.log("closing modem and daemon"); diff --git a/gui/src/assets/waterfall/server.py b/gui/src/assets/waterfall/server.py deleted file mode 100644 index a6402bc2..00000000 --- a/gui/src/assets/waterfall/server.py +++ /dev/null @@ -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('/') -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() diff --git a/gui/src/js/settingsHandler.ts b/gui/src/js/settingsHandler.ts index dc52011c..5238cc88 100644 --- a/gui/src/js/settingsHandler.ts +++ b/gui/src/js/settingsHandler.ts @@ -16,29 +16,25 @@ const settings = useSettingsStore(pinia); // --------------------------------- console.log(process.env); +var appDataFolder = "undefined"; if (typeof process.env["APPDATA"] !== "undefined") { - var appDataFolder = process.env["APPDATA"]; + appDataFolder = process.env["APPDATA"]; console.log(appDataFolder); } else { switch (process.platform) { case "darwin": - var appDataFolder = process.env["HOME"] + "/Library/Application Support"; + appDataFolder = process.env["HOME"] + "/Library/Application Support"; console.log(appDataFolder); break; case "linux": - var appDataFolder = process.env["HOME"] + "/.config"; + appDataFolder = process.env["HOME"] + "/.config"; console.log(appDataFolder); - - break; - case "linux": - var appDataFolder = "undefined"; - break; case "win32": - var appDataFolder = "undefined"; + appDataFolder = "undefined"; break; default: - var appDataFolder = "undefined"; + appDataFolder = "undefined"; break; } } diff --git a/gui/src/js/sock.js b/gui/src/js/sock.js index 643e0991..0b3081fb 100644 --- a/gui/src/js/sock.js +++ b/gui/src/js/sock.js @@ -425,7 +425,6 @@ client.on("data", function (socketdata) { break; } - break; case "waiting": // ARQ waiting @@ -536,7 +535,7 @@ export function sendPing(dxcallsign) { // Send Mesh Ping //exports.sendMeshPing = function (dxcallsign) { function sendMeshPing(dxcallsign) { - command = + var command = '{"type" : "mesh", "command" : "ping", "dxcallsign" : "' + dxcallsign + '"}'; @@ -792,7 +791,7 @@ export function stopBeacon() { // OPEN ARQ SESSION export function connectARQ(dxcallsign) { - command = + var command = '{"type" : "arq", "command" : "connect", "dxcallsign": "' + dxcallsign + '", "attempts": "10"}'; @@ -853,7 +852,7 @@ export function sendBroadcastChannel(obj) { ); console.log(data.length); let payload = data; - command = + var command = '{"type" : "fec", "command" : "transmit", "mode": "datac4", "wakeup": "True", "payload" : "' + payload + '"}'; diff --git a/modem/modem.py b/modem/modem.py index cf77a653..6df36fc5 100644 --- a/modem/modem.py +++ b/modem/modem.py @@ -28,7 +28,7 @@ from static import FRAME_TYPE import structlog import ujson as json import tci -# FIXME: used for def transmit_morse +# FIXME used for def transmit_morse # import cw from queues import DATA_QUEUE_RECEIVED, MODEM_RECEIVED_QUEUE, MODEM_TRANSMIT_QUEUE, RIGCTLD_COMMAND_QUEUE, \ AUDIO_RECEIVED_QUEUE, AUDIO_TRANSMIT_QUEUE, MESH_RECEIVED_QUEUE @@ -1313,7 +1313,7 @@ class RF: raise ZeroDivisionError AudioParam.audio_dbfs = 20 * np.log10(rms / 32768) except Exception as e: - # FIXME: Disabled for cli cleanup + # FIXME Disabled for cli cleanup #self.log.warning( # "[MDM] fft calculation error - please check your audio setup", # e=e, diff --git a/modem/sock.py b/modem/sock.py index 121c35a1..dc1e33c4 100644 --- a/modem/sock.py +++ b/modem/sock.py @@ -1275,8 +1275,8 @@ def send_daemon_state(): # print(f"modem closed with code: {retcode_modem}") Daemon.modemstarted = False - except Exception: - pass + except Exception as err: + log.warning("[DMN] error", e=err) try: python_version = f"{str(sys.version_info[0])}.{str(sys.version_info[1])}" diff --git a/test/util_datac13.py b/test/util_datac13.py index f9d2bf48..1736ad24 100644 --- a/test/util_datac13.py +++ b/test/util_datac13.py @@ -265,7 +265,7 @@ def t_datac13_2( log.info("t_datac13_2:", RXCHANNEL=modem.RXCHANNEL) 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: # t_data = {"type": "arq", "command": "stop_transmission"} # sock.ThreadedTCPRequestHandler.process_modem_commands(None,json.dumps(t_data, indent=None)) @@ -304,6 +304,6 @@ def t_datac13_2( assert item 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) log.warning("station2: Exiting!") diff --git a/test/util_datac13_negative.py b/test/util_datac13_negative.py index adf4ea32..5d962e39 100644 --- a/test/util_datac13_negative.py +++ b/test/util_datac13_negative.py @@ -306,6 +306,6 @@ def t_datac13_2( assert item not 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) log.warning("station2: Exiting!")