From 8967d2ac913e397c8e2dbd088749b446c0456e27 Mon Sep 17 00:00:00 2001 From: DJ2LS Date: Thu, 4 Jan 2024 10:01:29 +0100 Subject: [PATCH 01/27] ARQ WIP - session closing --- modem/arq_session_irs.py | 14 +++++++++----- modem/arq_session_iss.py | 11 ++++++++++- modem/data_frame_factory.py | 30 +++++++++--------------------- modem/modem.py | 8 +------- modem/server.py | 1 + 5 files changed, 30 insertions(+), 34 deletions(-) diff --git a/modem/arq_session_irs.py b/modem/arq_session_irs.py index eccd52d1..cb0c9e3d 100644 --- a/modem/arq_session_irs.py +++ b/modem/arq_session_irs.py @@ -51,7 +51,10 @@ class ARQSessionIRS(arq_session.ARQSession): FRAME_TYPE.ARQ_STOP.value: 'send_stop_ack' }, IRS_State.ABORTED: { - FRAME_TYPE.ARQ_STOP.value: 'send_stop_ack' + FRAME_TYPE.ARQ_STOP.value: 'send_stop_ack', + FRAME_TYPE.ARQ_SESSION_OPEN.value: 'send_open_ack', + FRAME_TYPE.ARQ_SESSION_INFO.value: 'send_info_ack', + FRAME_TYPE.ARQ_BURST_FRAME.value: 'receive_data', }, } @@ -104,9 +107,10 @@ class ARQSessionIRS(arq_session.ARQSession): self.id, self.dxcall, self.version, - self.snr[0]) + self.snr[0], flag_abort=self.abort) self.launch_transmit_and_wait(ack_frame, self.TIMEOUT_CONNECT, mode=FREEDV_MODE.signalling) - self.set_state(IRS_State.OPEN_ACK_SENT) + if not self.abort: + self.set_state(IRS_State.OPEN_ACK_SENT) def send_info_ack(self, info_frame): # Get session info from ISS @@ -119,13 +123,13 @@ class ARQSessionIRS(arq_session.ARQSession): self.event_manager.send_arq_session_new(False, self.id, self.dxcall, self.total_length, self.state.name) self.calibrate_speed_settings() - self.set_decode_mode() info_ack = self.frame_factory.build_arq_session_info_ack( self.id, self.total_crc, self.snr[0], self.speed_level, self.frames_per_burst, flag_abort=self.abort) self.launch_transmit_and_wait(info_ack, self.TIMEOUT_CONNECT, mode=FREEDV_MODE.signalling) - self.set_state(IRS_State.INFO_ACK_SENT) + if not self.abort: + self.set_state(IRS_State.INFO_ACK_SENT) def process_incoming_data(self, frame): diff --git a/modem/arq_session_iss.py b/modem/arq_session_iss.py index baa1d19f..b534eef0 100644 --- a/modem/arq_session_iss.py +++ b/modem/arq_session_iss.py @@ -98,7 +98,12 @@ class ARQSessionISS(arq_session.ARQSession): self.frames_per_burst = frame['frames_per_burst'] self.log(f"Frames per burst set to {self.frames_per_burst}") - def send_info(self, frame): + def send_info(self, irs_frame): + # check if we received an abort flag + if irs_frame["flag"]["ABORT"]: + self.transmission_aborted(irs_frame) + return + info_frame = self.frame_factory.build_arq_session_info(self.id, len(self.data), helpers.get_crc_32(self.data), self.snr[0]) @@ -116,6 +121,7 @@ class ARQSessionISS(arq_session.ARQSession): self.event_manager.send_arq_session_progress( True, self.id, self.dxcall, self.confirmed_bytes, len(self.data), self.state.name) + # check if we received an abort flag if irs_frame["flag"]["ABORT"]: self.transmission_aborted(irs_frame) return @@ -173,5 +179,8 @@ class ARQSessionISS(arq_session.ARQSession): def transmission_aborted(self, irs_frame): self.log("session aborted") self.set_state(ISS_State.ABORTED) + # break actual retries + self.event_frame_received.set() + self.event_manager.send_arq_session_finished( True, self.id, self.dxcall, len(self.data), False, self.state.name) \ No newline at end of file diff --git a/modem/data_frame_factory.py b/modem/data_frame_factory.py index 0bed7e30..29c2f460 100644 --- a/modem/data_frame_factory.py +++ b/modem/data_frame_factory.py @@ -108,6 +108,7 @@ class DataFrameFactory: "destination_crc": 3, "version": 1, "snr": 1, + "flag": 1, } self.template_list[FR_TYPE.ARQ_SESSION_INFO.value] = { @@ -227,7 +228,9 @@ class DataFrameFactory: data = int.from_bytes(data, "big") extracted_data[key] = {} - if frametype in [FR_TYPE.ARQ_BURST_ACK.value, FR_TYPE.ARQ_SESSION_INFO_ACK.value]: + + # check for frametype for selecting the correspinding flag dictionary + if frametype in [FR_TYPE.ARQ_SESSION_OPEN_ACK.value, FR_TYPE.ARQ_SESSION_INFO_ACK.value, FR_TYPE.ARQ_BURST_ACK.value]: flag_dict = self.ARQ_FLAGS for flag in flag_dict: # Update extracted_data with the status of each flag @@ -332,7 +335,10 @@ class DataFrameFactory: } return self.construct(FR_TYPE.ARQ_SESSION_OPEN, payload) - def build_arq_session_open_ack(self, session_id, destination, version, snr): + def build_arq_session_open_ack(self, session_id, destination, version, snr, flag_abort=False): + flag = 0b00000000 + if flag_abort: + flag = helpers.set_flag(flag, 'ABORT', True, self.ARQ_FLAGS) payload = { "session_id": session_id.to_bytes(1, 'big'), @@ -340,6 +346,7 @@ class DataFrameFactory: "destination_crc": helpers.get_crc_24(destination), "version": bytes([version]), "snr": helpers.snr_to_bytes(1), + "flag": flag.to_bytes(1, 'big'), } return self.construct(FR_TYPE.ARQ_SESSION_OPEN_ACK, payload) @@ -420,22 +427,3 @@ class DataFrameFactory: "flag": flag.to_bytes(1, 'big'), } return self.construct(FR_TYPE.ARQ_BURST_ACK, payload) - - def build_arq_burst_nack(self, session_id: bytes, offset, speed_level: int, - frames_per_burst: int, snr: int): - payload = { - "session_id": session_id.to_bytes(1, 'big'), - "offset": offset.to_bytes(4, 'big'), - "speed_level": speed_level.to_bytes(1, 'big'), - "frames_per_burst": frames_per_burst.to_bytes(1, 'big'), - "snr": helpers.snr_to_bytes(snr), - } - return self.construct(FR_TYPE.ARQ_BURST_NACK, payload) - - def build_arq_data_ack_nack(self, session_id: bytes, state: int, snr: int): - payload = { - "session_id": session_id.to_bytes(1, 'big'), - "state": state.to_bytes(1, 'big'), - "snr": helpers.snr_to_bytes(snr), - } - return self.construct(FR_TYPE. ARQ_DATA_ACK_NACK, payload) diff --git a/modem/modem.py b/modem/modem.py index 60efc3cc..beb118b4 100644 --- a/modem/modem.py +++ b/modem/modem.py @@ -256,16 +256,10 @@ class RF: # Wait for some other thread that might be transmitting self.states.waitForTransmission() self.states.setTransmitting(True) - #self.states.waitForChannelBusy() + #self.states.channel_busy_event.wait() start_of_transmission = time.time() - # TODO Moved ptt toggle some steps before audio is ready for testing - # Toggle ptt early to save some time and send ptt state via socket - # self.radio.set_ptt(True) - # jsondata = {"ptt": "True"} - # data_out = json.dumps(jsondata) - # sock.SOCKET_QUEUE.put(data_out) # Open codec2 instance self.MODE = mode diff --git a/modem/server.py b/modem/server.py index 5579ab39..50f8b9f4 100644 --- a/modem/server.py +++ b/modem/server.py @@ -139,6 +139,7 @@ def post_cqcqcq(): def post_beacon(): if request.method not in ['POST']: return api_response({"info": "endpoint for controlling BEACON STATE via POST"}) + if not isinstance(request.json['enabled'], bool): api_abort(f"Incorrect value for 'enabled'. Shoud be bool.") if not app.state_manager.is_modem_running: From 85b81bb0dd3505e1eeede83af960f22384f2b969 Mon Sep 17 00:00:00 2001 From: DJ2LS Date: Thu, 4 Jan 2024 15:46:58 +0100 Subject: [PATCH 02/27] using event manager instead event queue for most parts --- gui/src/js/eventHandler.js | 150 +++++++++++++++++++++++++++---------- modem/beacon.py | 8 +- modem/command.py | 4 +- modem/event_manager.py | 22 +++++- modem/frame_dispatcher.py | 9 +-- modem/modem.py | 7 +- modem/server.py | 2 + modem/service_manager.py | 17 +++-- modem/state_manager.py | 2 +- modem/websocket_manager.py | 3 +- tests/test_arq_session.py | 6 +- 11 files changed, 160 insertions(+), 70 deletions(-) diff --git a/gui/src/js/eventHandler.js b/gui/src/js/eventHandler.js index e8e77078..fb2db311 100644 --- a/gui/src/js/eventHandler.js +++ b/gui/src/js/eventHandler.js @@ -28,8 +28,8 @@ export function stateDispatcher(data) { stateStore.modem_connection = "connected"; if ( - data["freedata-message"] == "state-change" || - data["freedata-message"] == "state" + data["type"] == "state-change" || + data["type"] == "state" ) { stateStore.channel_busy = data["channel_busy"]; stateStore.is_codec2_traffic = data["is_codec2_traffic"]; @@ -138,41 +138,7 @@ export function stateDispatcher(data) { */ } } -function build_HSL() { - //Use data from activities to build HSL list - for (let i = 0; i < stateStore.activities.length; i++) { - if ( - stateStore.activities[i][1].direction != "received" || - stateStore.activities[i][1].origin == undefined - ) { - //Ignore stations without origin and not received type - //console.warn("HSL: Ignoring " + stateStore.activities[i][0]); - continue; - } - let found = false; - for (let ii = 0; ii < stateStore.heard_stations.length; ii++) { - if ( - stateStore.heard_stations[ii].origin == - stateStore.activities[i][1].origin - ) { - //Station already in HSL, check if newer than one in HSL - found = true; - if ( - stateStore.heard_stations[ii].timestamp < - stateStore.activities[i][1].timestamp - ) { - //Update existing entry in HSL - stateStore.heard_stations[ii] = stateStore.activities[i][1]; - } - } - } - if (found == false) { - //Station not in HSL, let us add it - stateStore.heard_stations.push(stateStore.activities[i][1]); - } - } - stateStore.heard_stations.sort((a, b) => b.timestamp - a.timestamp); // b - a for reverse sort -} + export function eventDispatcher(data) { data = JSON.parse(data); @@ -185,11 +151,11 @@ export function eventDispatcher(data) { console.info(data); if (data["scatter"] !== undefined) { - //console.warn("Got scatter data!!!!"); stateStore.scatter = JSON.parse(data["scatter"]); return; } + switch (data["ptt"]) { case true: case false: @@ -199,6 +165,13 @@ export function eventDispatcher(data) { return; } + switch (data["type"]) { + case "hello-client": + console.log("hello client received") + return + } + + switch (data["freedata"]) { case "modem-message": switch (data["received"]) { @@ -277,6 +250,70 @@ export function eventDispatcher(data) { } } + if (data['arq-transfer-outbound']) { + switch (data["arq-transfer-outbound"].state) { + + case "OPEN_SENT": + console.log("state OPEN_ACK_SENT needs to be implemented") + return + + case "INFO_SENT": + console.log("state INFO_ACK_SENT needs to be implemented") + return + + case "BURST_SENT": + console.log("state BURST_REPLY_SENT needs to be implemented") + return + + case "ABORTING": + console.log("state ABORTING needs to be implemented") + return + + case "ABORTED": + console.log("state ABORTED needs to be implemented") + return + + case "FAILED": + let message = "Transmission failed"; + displayToast("danger", "bi-x-octagon", message, 5000); + return + } + } + + if (data['arq-transfer-inbound']) { + switch (data["arq-transfer-inbound"].state) { + + case "NEW": + console.log("state NEW needs to be implemented") + return + + case "OPEN_ACK_SENT": + console.log("state OPEN_ACK_SENT needs to be implemented") + return + + case "INFO_ACK_SENT": + console.log("state INFO_ACK_SENT needs to be implemented") + return + + case "BURST_REPLY_SENT": + console.log("state BURST_REPLY_SENT needs to be implemented") + return + + case "ENDED": + console.log("state ENDED needs to be implemented") + return + + case "ABORTED": + console.log("state ABORTED needs to be implemented") + return + + case "FAILED": + let message = "Transmission failed"; + displayToast("danger", "bi-x-octagon", message, 5000); + return + } + } + /* var message = ""; @@ -493,3 +530,40 @@ export function eventDispatcher(data) { } */ } + + +function build_HSL() { + //Use data from activities to build HSL list + for (let i = 0; i < stateStore.activities.length; i++) { + if ( + stateStore.activities[i][1].direction != "received" || + stateStore.activities[i][1].origin == undefined + ) { + //Ignore stations without origin and not received type + //console.warn("HSL: Ignoring " + stateStore.activities[i][0]); + continue; + } + let found = false; + for (let ii = 0; ii < stateStore.heard_stations.length; ii++) { + if ( + stateStore.heard_stations[ii].origin == + stateStore.activities[i][1].origin + ) { + //Station already in HSL, check if newer than one in HSL + found = true; + if ( + stateStore.heard_stations[ii].timestamp < + stateStore.activities[i][1].timestamp + ) { + //Update existing entry in HSL + stateStore.heard_stations[ii] = stateStore.activities[i][1]; + } + } + } + if (found == false) { + //Station not in HSL, let us add it + stateStore.heard_stations.push(stateStore.activities[i][1]); + } + } + stateStore.heard_stations.sort((a, b) => b.timestamp - a.timestamp); // b - a for reverse sort +} \ No newline at end of file diff --git a/modem/beacon.py b/modem/beacon.py index 7f4fd7c4..dbfc8acf 100644 --- a/modem/beacon.py +++ b/modem/beacon.py @@ -6,11 +6,11 @@ class Beacon: BEACON_LOOP_INTERVAL = 1 - def __init__(self, config, states, event_queue, logger, modem): + def __init__(self, config, states, event_manager, logger, modem): self.modem_config = config self.states = states - self.event_queue = event_queue + self.event_manager = event_manager self.log = logger self.modem = modem @@ -39,8 +39,8 @@ class Beacon: True): #not self.states.channel_busy): - cmd = command_beacon.BeaconCommand(self.modem_config, self.states, self.event_queue) - cmd.run(self.event_queue, self.modem) + cmd = command_beacon.BeaconCommand(self.modem_config, self.states, self.event_manager) + cmd.run(self.event_manager, self.modem) self.event.wait(self.modem_config['MODEM']['beacon_interval']) self.event.wait(self.BEACON_LOOP_INTERVAL) diff --git a/modem/command.py b/modem/command.py index 4f91a373..9bcb76f4 100644 --- a/modem/command.py +++ b/modem/command.py @@ -6,11 +6,11 @@ from state_manager import StateManager class TxCommand(): - def __init__(self, config: dict, state_manager: StateManager, modem_events: queue.Queue, apiParams:dict = {}): + def __init__(self, config: dict, state_manager: StateManager, event_manager, apiParams:dict = {}): self.config = config self.logger = structlog.get_logger("Command") self.state_manager = state_manager - self.modem_events = modem_events + self.event_manager = event_manager self.set_params_from_api(apiParams) self.frame_factory = DataFrameFactory(config) diff --git a/modem/event_manager.py b/modem/event_manager.py index 851447e1..20719890 100644 --- a/modem/event_manager.py +++ b/modem/event_manager.py @@ -54,7 +54,7 @@ class EventManager: } self.broadcast(event) - def send_arq_session_finished(self, outbound: bool, session_id, dxcall, total_bytes, success: bool, state, data=False): + def send_arq_session_finished(self, outbound: bool, session_id, dxcall, total_bytes, success: bool, state: bool, data=False): if data: data = base64.b64encode(data).decode("UTF-8") direction = 'outbound' if outbound else 'inbound' @@ -63,9 +63,25 @@ class EventManager: 'session_id': session_id, 'dxcall': dxcall, 'total_bytes': total_bytes, - 'success': success, + 'success': bool(success), 'state': state, - 'data': data + 'data': bool(data) } } self.broadcast(event) + + def modem_started(self): + event = {"modem": "started"} + self.broadcast(event) + + def modem_restarted(self): + event = {"modem": "restarted"} + self.broadcast(event) + + def modem_stopped(self): + event = {"modem": "stopped"} + self.broadcast(event) + + def modem_failed(self): + event = {"modem": "failed"} + self.broadcast(event) \ No newline at end of file diff --git a/modem/frame_dispatcher.py b/modem/frame_dispatcher.py index 60b23e37..dc8d4c09 100644 --- a/modem/frame_dispatcher.py +++ b/modem/frame_dispatcher.py @@ -38,26 +38,25 @@ class DISPATCHER(): FR_TYPE.FEC_WAKEUP.value: {"class": FrameHandler, "name": "FEC WAKEUP"}, } - def __init__(self, config, event_queue, states, modem): + def __init__(self, config, event_manager, states, modem): self.log = structlog.get_logger("frame_dispatcher") self.log.info("loading frame dispatcher.....\n") self.config = config - self.event_queue = event_queue self.states = states + self.event_manager = event_manager - self._initialize_handlers(config, event_queue, states) + self._initialize_handlers(config, states) self.modem = modem self.data_queue_received = modem.data_queue_received self.arq_sessions = [] - def _initialize_handlers(self, config, event_queue, states): + def _initialize_handlers(self, config, states): """Initializes various data handlers.""" self.frame_factory = DataFrameFactory(config) - self.event_manager = event_manager.EventManager([event_queue]) def start(self): """Starts worker threads for transmit and receive operations.""" diff --git a/modem/modem.py b/modem/modem.py index beb118b4..e85396d1 100644 --- a/modem/modem.py +++ b/modem/modem.py @@ -22,7 +22,6 @@ import tci import cw from queues import RIGCTLD_COMMAND_QUEUE import audio -import event_manager import demodulator TESTMODE = False @@ -32,12 +31,11 @@ class RF: log = structlog.get_logger("RF") - def __init__(self, config, event_queue, fft_queue, service_queue, states) -> None: + def __init__(self, config, event_manager, fft_queue, service_queue, states) -> None: self.config = config - print(config) self.service_queue = service_queue self.states = states - + self.event_manager = event_manager self.sampler_avg = 0 self.buffer_avg = 0 @@ -78,7 +76,6 @@ class RF: self.modem_received_queue = queue.Queue() self.audio_received_queue = queue.Queue() self.data_queue_received = queue.Queue() - self.event_manager = event_manager.EventManager([event_queue]) self.fft_queue = fft_queue self.demodulator = demodulator.Demodulator(self.config, diff --git a/modem/server.py b/modem/server.py index 50f8b9f4..ff38a570 100644 --- a/modem/server.py +++ b/modem/server.py @@ -17,6 +17,7 @@ import command_ping import command_feq import command_test import command_arq_raw +import event_manager app = Flask(__name__) CORS(app) @@ -49,6 +50,7 @@ app.state_queue = queue.Queue() # queue which holds latest states app.modem_events = queue.Queue() # queue which holds latest events app.modem_fft = queue.Queue() # queue which holds latest fft data app.modem_service = queue.Queue() # start / stop modem service +app.event_manager = event_manager.EventManager([queue.Queue()]) # init state manager app.state_manager = state_manager.StateManager(app.state_queue) diff --git a/modem/service_manager.py b/modem/service_manager.py index 4226328d..b51f1003 100644 --- a/modem/service_manager.py +++ b/modem/service_manager.py @@ -14,13 +14,14 @@ class SM: self.modem = False self.beacon = False - self.data_handler = False self.app = app self.config = self.app.config_manager.read() self.modem_events = app.modem_events self.modem_fft = app.modem_fft self.modem_service = app.modem_service self.states = app.state_manager + self.event_manager = app.event_manager + runner_thread = threading.Thread( target=self.runner, name="runner thread", daemon=True @@ -49,7 +50,7 @@ class SM: # we need to wait a bit for avoiding a portaudio crash threading.Event().wait(0.5) if self.start_modem(): - self.modem_events.put(json.dumps({"freedata": "modem-event", "event": "restart"})) + self.event_manager.modem_restarted() elif cmd in ['start_beacon']: self.start_beacon() @@ -76,18 +77,19 @@ class SM: if False in audio_test or None in audio_test or self.states.is_modem_running: self.log.warning("starting modem failed", input_test=audio_test[0], output_test=audio_test[1]) self.states.set("is_modem_running", False) - self.modem_events.put({"freedata": "modem-event", "event": "failed"}) + self.event_manager.modem_failed() return False self.log.info("starting modem....") - self.modem = modem.RF(self.config, self.modem_events, self.modem_fft, self.modem_service, self.states) + self.modem = modem.RF(self.config, self.event_manager, self.modem_fft, self.modem_service, self.states) self.frame_dispatcher = frame_dispatcher.DISPATCHER(self.config, - self.modem_events, + self.event_manager, self.states, self.modem) self.frame_dispatcher.start() + self.event_manager.modem_started() self.states.set("is_modem_running", True) self.modem.start_modem() @@ -96,10 +98,9 @@ class SM: def stop_modem(self): self.log.info("stopping modem....") del self.modem - #del self.data_handler self.modem = False - #self.data_handler = False self.states.set("is_modem_running", False) + self.event_manager.modem_stopped() def test_audio(self): audio_test = audio.test_audio_devices(self.config['AUDIO']['input_device'], @@ -110,7 +111,7 @@ class SM: def start_beacon(self): - self.beacon = beacon.Beacon(self.config, self.states, self.modem_events, self.log, self.modem) + self.beacon = beacon.Beacon(self.config, self.states, self.event_manager, self.log, self.modem) self.beacon.start() def stop_beacon(self): diff --git a/modem/state_manager.py b/modem/state_manager.py index b4a130f1..d2975a3d 100644 --- a/modem/state_manager.py +++ b/modem/state_manager.py @@ -79,7 +79,7 @@ class StateManager: msgtype = "state" return { - "freedata-message": msgtype, + "type": msgtype, "is_modem_running": self.is_modem_running, "is_beacon_running": self.is_beacon_running, "radio_status": self.radio_status, diff --git a/modem/websocket_manager.py b/modem/websocket_manager.py index a993e649..bd592079 100644 --- a/modem/websocket_manager.py +++ b/modem/websocket_manager.py @@ -8,7 +8,7 @@ fft_client_list = set() states_client_list = set() def handle_connection(sock, client_list, event_queue): - event_queue.put({"freedata-message": "hello-client"}) + event_queue.put({"type": "hello-client"}) client_list.add(sock) while True: @@ -32,7 +32,6 @@ def transmit_sock_data_worker(client_list, event_queue): json_event = event else: json_event = json.dumps(event) - clients = client_list.copy() for client in clients: try: diff --git a/tests/test_arq_session.py b/tests/test_arq_session.py index 716ea530..9f9666f8 100644 --- a/tests/test_arq_session.py +++ b/tests/test_arq_session.py @@ -58,19 +58,21 @@ class TestARQSession(unittest.TestCase): # ISS cls.iss_state_manager = StateManager(queue.Queue()) + cls.iss_event_manager = EventManager([queue.Queue()]) cls.iss_event_queue = queue.Queue() cls.iss_modem = TestModem(cls.iss_event_queue) cls.iss_frame_dispatcher = DISPATCHER(cls.config, - cls.iss_event_queue, + cls.iss_event_manager, cls.iss_state_manager, cls.iss_modem) # IRS cls.irs_state_manager = StateManager(queue.Queue()) + cls.irs_event_manager = EventManager([queue.Queue()]) cls.irs_event_queue = queue.Queue() cls.irs_modem = TestModem(cls.irs_event_queue) cls.irs_frame_dispatcher = DISPATCHER(cls.config, - cls.irs_event_queue, + cls.irs_event_manager, cls.irs_state_manager, cls.irs_modem) From 9dacf6460117366ea36ac7252f843f39c9e6036e Mon Sep 17 00:00:00 2001 From: codefactor-io Date: Thu, 4 Jan 2024 14:47:19 +0000 Subject: [PATCH 03/27] [CodeFactor] Apply fixes to commit 85b81bb --- gui/src/js/eventHandler.js | 111 +++++++++++++++++-------------------- 1 file changed, 51 insertions(+), 60 deletions(-) diff --git a/gui/src/js/eventHandler.js b/gui/src/js/eventHandler.js index fb2db311..7cedd4e9 100644 --- a/gui/src/js/eventHandler.js +++ b/gui/src/js/eventHandler.js @@ -27,10 +27,7 @@ export function stateDispatcher(data) { stateStore.modem_connection = "connected"; - if ( - data["type"] == "state-change" || - data["type"] == "state" - ) { + if (data["type"] == "state-change" || data["type"] == "state") { stateStore.channel_busy = data["channel_busy"]; stateStore.is_codec2_traffic = data["is_codec2_traffic"]; stateStore.is_modem_running = data["is_modem_running"]; @@ -139,7 +136,6 @@ export function stateDispatcher(data) { } } - export function eventDispatcher(data) { data = JSON.parse(data); @@ -155,7 +151,6 @@ export function eventDispatcher(data) { return; } - switch (data["ptt"]) { case true: case false: @@ -167,11 +162,10 @@ export function eventDispatcher(data) { switch (data["type"]) { case "hello-client": - console.log("hello client received") - return + console.log("hello client received"); + return; } - switch (data["freedata"]) { case "modem-message": switch (data["received"]) { @@ -250,69 +244,67 @@ export function eventDispatcher(data) { } } - if (data['arq-transfer-outbound']) { - switch (data["arq-transfer-outbound"].state) { + if (data["arq-transfer-outbound"]) { + switch (data["arq-transfer-outbound"].state) { + case "OPEN_SENT": + console.log("state OPEN_ACK_SENT needs to be implemented"); + return; - case "OPEN_SENT": - console.log("state OPEN_ACK_SENT needs to be implemented") - return + case "INFO_SENT": + console.log("state INFO_ACK_SENT needs to be implemented"); + return; - case "INFO_SENT": - console.log("state INFO_ACK_SENT needs to be implemented") - return + case "BURST_SENT": + console.log("state BURST_REPLY_SENT needs to be implemented"); + return; - case "BURST_SENT": - console.log("state BURST_REPLY_SENT needs to be implemented") - return + case "ABORTING": + console.log("state ABORTING needs to be implemented"); + return; - case "ABORTING": - console.log("state ABORTING needs to be implemented") - return + case "ABORTED": + console.log("state ABORTED needs to be implemented"); + return; - case "ABORTED": - console.log("state ABORTED needs to be implemented") - return - - case "FAILED": - let message = "Transmission failed"; - displayToast("danger", "bi-x-octagon", message, 5000); - return - } + case "FAILED": + let message = "Transmission failed"; + displayToast("danger", "bi-x-octagon", message, 5000); + return; } + } - if (data['arq-transfer-inbound']) { - switch (data["arq-transfer-inbound"].state) { + if (data["arq-transfer-inbound"]) { + switch (data["arq-transfer-inbound"].state) { + case "NEW": + console.log("state NEW needs to be implemented"); + return; - case "NEW": - console.log("state NEW needs to be implemented") - return + case "OPEN_ACK_SENT": + console.log("state OPEN_ACK_SENT needs to be implemented"); + return; - case "OPEN_ACK_SENT": - console.log("state OPEN_ACK_SENT needs to be implemented") - return + case "INFO_ACK_SENT": + console.log("state INFO_ACK_SENT needs to be implemented"); + return; - case "INFO_ACK_SENT": - console.log("state INFO_ACK_SENT needs to be implemented") - return + case "BURST_REPLY_SENT": + console.log("state BURST_REPLY_SENT needs to be implemented"); + return; - case "BURST_REPLY_SENT": - console.log("state BURST_REPLY_SENT needs to be implemented") - return + case "ENDED": + console.log("state ENDED needs to be implemented"); + return; - case "ENDED": - console.log("state ENDED needs to be implemented") - return + case "ABORTED": + console.log("state ABORTED needs to be implemented"); + return; - case "ABORTED": - console.log("state ABORTED needs to be implemented") - return - - case "FAILED": - let message = "Transmission failed"; - displayToast("danger", "bi-x-octagon", message, 5000); - return - } + case "FAILED": + let message = "Transmission failed"; + displayToast("danger", "bi-x-octagon", message, 5000); + return; } + } /* @@ -531,7 +523,6 @@ export function eventDispatcher(data) { */ } - function build_HSL() { //Use data from activities to build HSL list for (let i = 0; i < stateStore.activities.length; i++) { @@ -566,4 +557,4 @@ function build_HSL() { } } stateStore.heard_stations.sort((a, b) => b.timestamp - a.timestamp); // b - a for reverse sort -} \ No newline at end of file +} From 6495336400f1d5db56295ca2b5cbc92230eb0986 Mon Sep 17 00:00:00 2001 From: DJ2LS Date: Thu, 4 Jan 2024 20:55:33 +0100 Subject: [PATCH 04/27] adjusted events - gui events are broken --- gui/src/components/grid/grid_active_audio.vue | 11 +- .../components/main_active_audio_level.vue | 18 +- gui/src/js/{sock.js => deprecated_sock.js} | 0 gui/src/js/eventHandler.js | 512 +++--------------- gui/src/js/event_sock.js | 1 + modem/arq_session_irs.py | 3 +- modem/arq_session_iss.py | 2 + modem/event_manager.py | 9 +- 8 files changed, 79 insertions(+), 477 deletions(-) rename gui/src/js/{sock.js => deprecated_sock.js} (100%) diff --git a/gui/src/components/grid/grid_active_audio.vue b/gui/src/components/grid/grid_active_audio.vue index 54878796..e78773c7 100644 --- a/gui/src/components/grid/grid_active_audio.vue +++ b/gui/src/components/grid/grid_active_audio.vue @@ -6,11 +6,6 @@ setActivePinia(pinia); import { useStateStore } from "../../store/stateStore.js"; const state = useStateStore(pinia); -import { record_audio } from "../../js/sock"; - -function startStopRecordAudio() { - record_audio(); -}