diff --git a/modem/arq_session.py b/modem/arq_session.py index 7653140c..298b8ada 100644 --- a/modem/arq_session.py +++ b/modem/arq_session.py @@ -1,18 +1,14 @@ import queue, threading -from codec2 import FREEDV_MODE +import codec2 import data_frame_factory import structlog class ARQSession(): MODE_BY_SPEED = [ - FREEDV_MODE.datac4.value, - FREEDV_MODE.datac3.value, - FREEDV_MODE.datac1.value, - ] - - SIZE_BY_SPEED = [ - + codec2.FREEDV_MODE.datac4.value, + codec2.FREEDV_MODE.datac3.value, + codec2.FREEDV_MODE.datac1.value, ] def __init__(self, config: dict, tx_frame_queue: queue.Queue, dxcall: str): @@ -44,3 +40,7 @@ class ARQSession(): def setState(self, state): self.state = state self.logger.info(f"state changed to {state}") + + def get_payload_size(self, speed_level): + mode = self.MODE_BY_SPEED[speed_level] + return codec2.get_bytes_per_frame(mode) diff --git a/modem/arq_session_iss.py b/modem/arq_session_iss.py index 20e30b8a..4a801e64 100644 --- a/modem/arq_session_iss.py +++ b/modem/arq_session_iss.py @@ -76,7 +76,7 @@ class ARQSessionISS(arq_session.ARQSession): def send_data(self): offset = 0 while offset < len(self.data): - max_size = self.get_max_size_for_speed_level(self.speed_level) + max_size = self.get_payload_size(self.speed_level) end_offset = min(len(self.data), max_size) frame_payload = self.data[offset:end_offset] data_frame = self.frame_factory.build_arq_session_send(self.speed_level, diff --git a/tests/test_arq_session.py b/tests/test_arq_session.py index 4f9fc0e0..e3de109c 100644 --- a/tests/test_arq_session.py +++ b/tests/test_arq_session.py @@ -51,9 +51,9 @@ class TestARQSession(unittest.TestCase): transmission_item = modem_transmit_queue.get() frame_bytes = bytes(transmission_item['frame']) if random.randint(0, 100) < self.loss_probability: - self.logger.info("[TestChannel] Frame lost...") + self.logger.info(f"[{threading.current_thread().name}] Frame lost...") continue - self.logger.info("[TestChannel] Redirecting frame") + self.logger.info(f"[{threading.current_thread().name}] Redirecting frame") frame_dispatcher.new_process_data(frame_bytes, None, len(frame_bytes), 0, 0) def establishChannels(self):