Progress on ARQ TDD

This commit is contained in:
Pedro 2023-12-05 19:12:21 +01:00
parent bf89828c75
commit 462e4162c4
5 changed files with 17 additions and 4 deletions

View file

@ -1,6 +1,7 @@
import queue, threading
from codec2 import FREEDV_MODE
import data_frame_factory
import structlog
class ARQSession():
@ -11,6 +12,7 @@ class ARQSession():
]
def __init__(self, config: dict, tx_frame_queue: queue.Queue, dxcall: str):
self.logger = structlog.get_logger(type(self).__name__)
self.config = config
self.dxcall = dxcall
@ -34,3 +36,6 @@ class ARQSession():
}
self.tx_frame_queue.put(modem_queue_item)
def setState(self, state):
self.state = state
self.logger.info(f"state changed to {state}")

View file

@ -77,10 +77,10 @@ class ARQSessionISS(arq_session.ARQSession):
# Sends the full payload in multiple frames
def send_data(self):
offset = 0
while offset < len(self.payload):
while offset < len(self.data):
max_size = self.get_max_size_for_speed_level(self.speed_level)
end_offset = min(len(self.payload), max_size)
frame_payload = self.payload[offset:end_offset]
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,
self.dxcall,
frame_payload)

View file

@ -201,7 +201,7 @@ class DataFrameFactory:
elif key == "gridsquare":
extracted_data[key] = helpers.decode_grid(data)
elif key == "session_id":
elif key in ["session_id", "speed_level"]:
extracted_data[key] = int.from_bytes(data, 'big')
else:

View file

@ -4,6 +4,7 @@ from event_manager import EventManager
from state_manager import StateManager
from modem_frametypes import FRAME_TYPE as FR
from arq_session_irs import ARQSessionIRS
from arq_session_iss import ARQSessionISS
class ARQFrameHandler(frame_handler.FrameHandler):
@ -17,3 +18,8 @@ class ARQFrameHandler(frame_handler.FrameHandler):
frame['origin'], frame['session_id'])
self.states.register_arq_irs_session(session)
session.run()
# ARQ session open ack received
if frame['frame_type_int'] in [FR.ARQ_DC_OPEN_ACK_N.value, FR.ARQ_DC_OPEN_ACK_W.value]:
iss_session:ARQSessionISS = self.states.get_arq_iss_session(frame['session_id'])
iss_session.on_connection_ack_received(frame)

View file

@ -127,10 +127,12 @@ class StateManager:
def get_arq_iss_session(self, id):
if id not in self.arq_iss_sessions:
raise RuntimeError(f"ARQ ISS Session '{id}' not found!")
return self.arq_iss_sessions[id]
def get_arq_irs_session(self, id):
if id not in self.arq_irs_sessions:
raise RuntimeError(f"ARQ IRS Session '{id}' not found!")
return self.arq_irs_sessions[id]
def remove_arq_iss_session(self, id):
if id not in self.arq_iss_sessions: