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)