From 7f86ab2ece3d9300331d047a3fd38bd8b93addc5 Mon Sep 17 00:00:00 2001 From: DJ2LS Date: Sun, 18 Feb 2024 15:06:13 +0100 Subject: [PATCH 1/5] arq adjustments and attempt fixing tests --- modem/arq_session_irs.py | 21 ++++++++++++--------- modem/config.ini.example | 4 ++-- modem/server.py | 9 +++++---- tests/test_arq_session.py | 12 ++++++------ 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/modem/arq_session_irs.py b/modem/arq_session_irs.py index 8e0b461f..1c853568 100644 --- a/modem/arq_session_irs.py +++ b/modem/arq_session_irs.py @@ -96,9 +96,7 @@ class ARQSessionIRS(arq_session.ARQSession): self.log(f"Waiting {timeout} seconds...") if not self.event_frame_received.wait(timeout): self.log("Timeout waiting for ISS. Session failed.") - self.session_ended = time.time() - self.set_state(IRS_State.FAILED) - self.event_manager.send_arq_session_finished(False, self.id, self.dxcall, False, self.state.name, statistics=self.calculate_session_statistics()) + self.transmission_failed() def launch_transmit_and_wait(self, frame, timeout, mode): thread_wait = threading.Thread(target = self.transmit_and_wait, @@ -208,11 +206,7 @@ class ARQSessionIRS(arq_session.ARQSession): flag_checksum=False) self.transmit_frame(ack, mode=FREEDV_MODE.signalling) self.log("CRC fail at the end of transmission!") - self.session_ended = time.time() - self.set_state(IRS_State.FAILED) - self.event_manager.send_arq_session_finished( - False, self.id, self.dxcall, False, self.state.name, statistics=self.calculate_session_statistics()) - return False, False + self.transmission_failed() def calibrate_speed_settings(self): self.speed_level = 0 # for now stay at lowest speed level @@ -236,4 +230,13 @@ class ARQSessionIRS(arq_session.ARQSession): self.set_state(IRS_State.ABORTED) self.event_manager.send_arq_session_finished( False, self.id, self.dxcall, False, self.state.name, statistics=self.calculate_session_statistics()) - return None, None \ No newline at end of file + return None, None + + def transmission_failed(self, irs_frame=None): + # final function for failed transmissions + self.session_ended = time.time() + self.set_state(IRS_State.FAILED) + self.log(f"Transmission failed!") + self.event_manager.send_arq_session_finished(True, self.id, self.dxcall,False, self.state.name, statistics=self.calculate_session_statistics()) + self.states.setARQ(False) + return None, None diff --git a/modem/config.ini.example b/modem/config.ini.example index c0496ed3..59cc6ea2 100644 --- a/modem/config.ini.example +++ b/modem/config.ini.example @@ -2,9 +2,9 @@ modemport = 3050 [STATION] -mycall = XX1XXX +mycall = AA1AAA mygrid = AA12aa -myssid = 6 +myssid = 1 ssid_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] enable_explorer = True enable_stats = True diff --git a/modem/server.py b/modem/server.py index 3fb046f4..823c8ffb 100644 --- a/modem/server.py +++ b/modem/server.py @@ -222,10 +222,11 @@ def post_modem_send_raw_stop(): if not app.state_manager.is_modem_running: api_abort('Modem not running', 503) - for id in app.state_manager.arq_irs_sessions: - app.state_manager.arq_irs_sessions[id].abort_transmission() - for id in app.state_manager.arq_iss_sessions: - app.state_manager.arq_iss_sessions[id].abort_transmission() + if app.state_manager.getARQ(): + for id in app.state_manager.arq_irs_sessions: + app.state_manager.arq_irs_sessions[id].abort_transmission() + for id in app.state_manager.arq_iss_sessions: + app.state_manager.arq_iss_sessions[id].abort_transmission() return api_response(request.json) diff --git a/tests/test_arq_session.py b/tests/test_arq_session.py index 96d7e337..961c2262 100644 --- a/tests/test_arq_session.py +++ b/tests/test_arq_session.py @@ -130,11 +130,11 @@ class TestARQSession(unittest.TestCase): def testARQSessionSmallPayload(self): # set Packet Error Rate (PER) / frame loss probability - self.loss_probability = 0 + self.loss_probability = 30 self.establishChannels() params = { - 'dxcall': "XX1XXX-1", + 'dxcall': "AA1AAA-1", 'data': base64.b64encode(bytes("Hello world!", encoding="utf-8")), 'type': "raw_lzma" } @@ -149,7 +149,7 @@ class TestARQSession(unittest.TestCase): self.establishChannels() params = { - 'dxcall': "XX1XXX-1", + 'dxcall': "AA1AAA-1", 'data': base64.b64encode(np.random.bytes(1000)), 'type': "raw_lzma" } @@ -165,7 +165,7 @@ class TestARQSession(unittest.TestCase): self.establishChannels() params = { - 'dxcall': "XX1XXX-1", + 'dxcall': "AA1AAA-1", 'data': base64.b64encode(np.random.bytes(100)), } cmd = ARQRawCommand(self.config, self.iss_state_manager, self.iss_event_queue, params) @@ -184,7 +184,7 @@ class TestARQSession(unittest.TestCase): self.establishChannels() params = { - 'dxcall': "XX1XXX-1", + 'dxcall': "AA1AAA-1", 'data': base64.b64encode(np.random.bytes(100)), } cmd = ARQRawCommand(self.config, self.iss_state_manager, self.iss_event_queue, params) @@ -200,7 +200,7 @@ class TestARQSession(unittest.TestCase): def testSessionCleanupISS(self): params = { - 'dxcall': "XX1XXX-1", + 'dxcall': "AA1AAA-1", 'data': base64.b64encode(np.random.bytes(100)), } cmd = ARQRawCommand(self.config, self.iss_state_manager, self.iss_event_queue, params) From e90d1f771625a061711f0ba573c89b3d8288f606 Mon Sep 17 00:00:00 2001 From: DJ2LS Date: Sun, 18 Feb 2024 20:31:01 +0100 Subject: [PATCH 2/5] adjusted config --- modem/config.ini.example | 2 +- modem/config.py | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/modem/config.ini.example b/modem/config.ini.example index 59cc6ea2..4729ff19 100644 --- a/modem/config.ini.example +++ b/modem/config.ini.example @@ -1,5 +1,5 @@ [NETWORK] -modemport = 3050 +modemport = 5000 [STATION] mycall = AA1AAA diff --git a/modem/config.py b/modem/config.py index b9e20636..f3070d12 100644 --- a/modem/config.py +++ b/modem/config.py @@ -147,9 +147,7 @@ class CONFIG: self.parser.set(section, setting, str(default_value)) self.log.info(f"[CFG] Adding missing setting: {section}.{setting}") - self.write_to_file() - - + return self.write_to_file() # Handle special setting data type conversion # is_writing means data from a dict being writen to the config file @@ -177,7 +175,6 @@ class CONFIG: def write(self, data): # Validate config data before writing self.validate_data(data) - for section in data: # init section if it doesn't exist yet if not section.upper() in self.parser.keys(): @@ -186,9 +183,11 @@ class CONFIG: for setting in data[section]: new_value = self.handle_setting( section, setting, data[section][setting], True) - self.parser[section][setting] = str(new_value) - - self.write_to_file() + try: + self.parser[section][setting] = str(new_value) + except Exception as e: + self.log.error("[CFG] error setting config key", e=e) + return self.write_to_file() def write_to_file(self): # Write config data to file From 70228054fd0cd69a91410efc2490bee02db24893 Mon Sep 17 00:00:00 2001 From: Mashintime Date: Sun, 18 Feb 2024 15:33:29 -0500 Subject: [PATCH 3/5] Remove unused setting --- gui/src/store/settingsStore.js | 1 - 1 file changed, 1 deletion(-) diff --git a/gui/src/store/settingsStore.js b/gui/src/store/settingsStore.js index 8baa9b2d..48200fbe 100644 --- a/gui/src/store/settingsStore.js +++ b/gui/src/store/settingsStore.js @@ -54,7 +54,6 @@ const defaultConfig = { enable_protocol: false, }, MODEM: { - enable_fft: false, enable_fsk: false, enable_low_bandwidth_mode: false, respond_to_cq: false, From 47242fb33eb0513931174a779ba406e54fadea0f Mon Sep 17 00:00:00 2001 From: Mashintime Date: Sun, 18 Feb 2024 15:33:42 -0500 Subject: [PATCH 4/5] Remove duplicate setting --- modem/config.py | 1 - 1 file changed, 1 deletion(-) diff --git a/modem/config.py b/modem/config.py index f3070d12..cd6dcb18 100644 --- a/modem/config.py +++ b/modem/config.py @@ -31,7 +31,6 @@ class CONFIG: 'control': str, 'serial_port': str, 'model_id': int, - 'serial_port': str, 'serial_speed': int, 'data_bits': int, 'stop_bits': int, From 796d1c0566ab37100ebb303029cfee418811bf45 Mon Sep 17 00:00:00 2001 From: Mashintime Date: Sun, 18 Feb 2024 15:34:10 -0500 Subject: [PATCH 5/5] Only restart modem if config is valid --- modem/server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modem/server.py b/modem/server.py index 8a248150..50fe5f49 100644 --- a/modem/server.py +++ b/modem/server.py @@ -94,10 +94,10 @@ def index(): def config(): if request.method in ['POST']: set_config = app.config_manager.write(request.json) - app.modem_service.put("restart") if not set_config: response = api_response(None, 'error writing config') else: + app.modem_service.put("restart") response = api_response(set_config) return response elif request.method == 'GET':