From d35860cc5472e21ba986f4c3e1fc0a2f61901722 Mon Sep 17 00:00:00 2001 From: Pedro Date: Tue, 12 Dec 2023 20:46:22 +0100 Subject: [PATCH] ARQ WIP --- modem/arq_session_irs.py | 4 +--- modem/data_frame_factory.py | 15 +++++++-------- modem/frame_dispatcher.py | 4 +++- modem/frame_handler_arq_session.py | 11 +++++------ modem/modem_frametypes.py | 10 +++------- modem/state_manager.py | 2 +- 6 files changed, 20 insertions(+), 26 deletions(-) diff --git a/modem/arq_session_irs.py b/modem/arq_session_irs.py index 50b127b0..0f619a68 100644 --- a/modem/arq_session_irs.py +++ b/modem/arq_session_irs.py @@ -15,11 +15,10 @@ class ARQSessionIRS(arq_session.ARQSession): TIMEOUT_DATA = 6 - def __init__(self, config: dict, tx_frame_queue: queue.Queue, dxcall: str, session_id: int, is_wide_band: bool): + def __init__(self, config: dict, tx_frame_queue: queue.Queue, dxcall: str, session_id: int): super().__init__(config, tx_frame_queue, dxcall) self.id = session_id - self.is_wide_band = is_wide_band self.speed = 0 self.version = 1 self.snr = 0 @@ -74,7 +73,6 @@ class ARQSessionIRS(arq_session.ARQSession): def send_session_ack(self): ack_frame = self.frame_factory.build_arq_session_connect_ack( - self.is_wide_band, self.id, self.speed, self.version) diff --git a/modem/data_frame_factory.py b/modem/data_frame_factory.py index b6a9041d..70262e5e 100644 --- a/modem/data_frame_factory.py +++ b/modem/data_frame_factory.py @@ -123,13 +123,12 @@ class DataFrameFactory: # arq data frame # register n frames - for n_frame in range(1,5): - self.template_list[FR_TYPE.BURST_01.value + (n_frame-1)] = { - "frame_length": "dynamic", - "n_frames_per_burst": 1, - "session_id": 1, - "data": "dynamic", - } + self.template_list[FR_TYPE.BURST_FRAME.value] = { + "frame_length": "dynamic", + "n_frames_per_burst": 1, + "session_id": 1, + "data": "dynamic", + } # arq burst ack self.template_list[FR_TYPE.BURST_ACK.value] = { @@ -356,7 +355,7 @@ class DataFrameFactory: "data": frame_payload } - return self.construct(FR_TYPE.BURST_01.value + (n_frame-1), payload, frame_length=max_size) + return self.construct(FR_TYPE.BURST_FRAME.value, payload, frame_length=max_size) def build_arq_burst_ack(self, session_id: bytes, snr: int, speed_level: int, len_arq_rx_frame_buffer: int): diff --git a/modem/frame_dispatcher.py b/modem/frame_dispatcher.py index 5b342f95..83bdaedf 100644 --- a/modem/frame_dispatcher.py +++ b/modem/frame_dispatcher.py @@ -28,12 +28,14 @@ class DISPATCHER(): FRAME_HANDLER = { FR_TYPE.ARQ_SESSION_OPEN_ACK.value: {"class": ARQFrameHandler, "name": "ARQ OPEN ACK"}, FR_TYPE.ARQ_SESSION_OPEN.value: {"class": ARQFrameHandler, "name": "ARQ Data Channel Open"}, + FR_TYPE.ARQ_SESSION_INFO_ACK.value: {"class": ARQFrameHandler, "name": "ARQ INFO ACK"}, + FR_TYPE.ARQ_SESSION_INFO.value: {"class": ARQFrameHandler, "name": "ARQ Data Channel Info"}, FR_TYPE.ARQ_CONNECTION_CLOSE.value: {"class": ARQFrameHandler, "name": "ARQ CLOSE SESSION"}, FR_TYPE.ARQ_CONNECTION_HB.value: {"class": ARQFrameHandler, "name": "ARQ HEARTBEAT"}, FR_TYPE.ARQ_CONNECTION_OPEN.value: {"class": ARQFrameHandler, "name": "ARQ OPEN SESSION"}, FR_TYPE.ARQ_STOP.value: {"class": ARQFrameHandler, "name": "ARQ STOP TX"}, FR_TYPE.BEACON.value: {"class": FrameHandler, "name": "BEACON"}, - FR_TYPE.BURST_01.value:{"class": ARQFrameHandler, "name": "BURST_01"}, + FR_TYPE.BURST_FRAME.value:{"class": ARQFrameHandler, "name": "BURST_01"}, FR_TYPE.BURST_ACK.value: {"class": FrameHandler, "name": "BURST ACK"}, FR_TYPE.BURST_NACK.value: {"class": FrameHandler, "name": "BURST NACK"}, FR_TYPE.CQ.value: {"class": CQFrameHandler, "name": "CQ"}, diff --git a/modem/frame_handler_arq_session.py b/modem/frame_handler_arq_session.py index f11805ad..8f54128b 100644 --- a/modem/frame_handler_arq_session.py +++ b/modem/frame_handler_arq_session.py @@ -15,22 +15,21 @@ class ARQFrameHandler(frame_handler.FrameHandler): frequency_offset = self.details["frequency_offset"] # ARQ session open received - if frame['frame_type_int'] in [FR.ARQ_SESSION_OPEN_N.value, FR.ARQ_SESSION_OPEN_W.value]: + if frame['frame_type_int'] == FR.ARQ_SESSION_OPEN.value: session = ARQSessionIRS(self.config, self.tx_frame_queue, frame['origin'], - frame['session_id'], - frame['frame_type_int'] == FR.ARQ_SESSION_OPEN_W.value) - self.states.register_arq_irs_session(session, frame['frame_type_int'] == FR.ARQ_SESSION_OPEN_W.value) + frame['session_id']) + self.states.register_arq_irs_session(session) session.run() # ARQ session open ack received - elif frame['frame_type_int'] in [FR.ARQ_SESSION_OPEN_ACK_N.value, FR.ARQ_SESSION_OPEN_ACK_W.value]: + elif frame['frame_type_int'] == FR.ARQ_SESSION_OPEN_ACK.value: iss_session:ARQSessionISS = self.states.get_arq_iss_session(frame['session_id']) iss_session.on_connection_ack_received(frame) # ARQ session data frame received - elif frame['frame_type_int'] in [FR.BURST_01.value, FR.BURST_02.value, FR.BURST_03.value, FR.BURST_04.value, FR.BURST_05.value]: + elif frame['frame_type_int'] == FR.BURST_FRAME.value: print("received data frame....") print(frame) diff --git a/modem/modem_frametypes.py b/modem/modem_frametypes.py index d01f1db0..a695a2fb 100644 --- a/modem/modem_frametypes.py +++ b/modem/modem_frametypes.py @@ -7,16 +7,12 @@ from enum import Enum class FRAME_TYPE(Enum): """Lookup for frame types""" - BURST_01 = 1 - BURST_02 = 2 - BURST_03 = 3 - BURST_04 = 4 - BURST_05 = 5 - BURST_ACK = 60 + BURST_FRAME = 10 + BURST_ACK = 11 + BURST_NACK = 12 FR_ACK = 61 FR_REPEAT = 62 FR_NACK = 63 - BURST_NACK = 64 MESH_BROADCAST = 100 MESH_SIGNALLING_PING = 101 MESH_SIGNALLING_PING_ACK = 102 diff --git a/modem/state_manager.py b/modem/state_manager.py index 588a0e6d..f59cab10 100644 --- a/modem/state_manager.py +++ b/modem/state_manager.py @@ -119,7 +119,7 @@ class StateManager: raise RuntimeError(f"ARQ ISS Session '{session.id}' already exists!") self.arq_iss_sessions[session.id] = session - def register_arq_irs_session(self, session, is_wide_band): + def register_arq_irs_session(self, session): if session.id in self.arq_irs_sessions: raise RuntimeError(f"ARQ IRS Session '{session.id}' already exists!") self.arq_irs_sessions[session.id] = session