mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
Progress on ARQ TDD
This commit is contained in:
parent
bf89828c75
commit
462e4162c4
5 changed files with 17 additions and 4 deletions
|
@ -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}")
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue