WIP adding arq data frame

This commit is contained in:
DJ2LS 2023-12-09 13:28:32 +01:00
parent d8df718645
commit f28e47f441
5 changed files with 20 additions and 9 deletions

View file

@ -13,7 +13,7 @@ class ARQSessionIRS(arq_session.ARQSession):
RETRIES_CONNECT = 3
RETRIES_TRANSFER = 3
TIMEOUT_DATA = 2
TIMEOUT_DATA = 6
def __init__(self, config: dict, tx_frame_queue: queue.Queue, dxcall: str, session_id: int):
super().__init__(config, tx_frame_queue, dxcall)
@ -35,7 +35,7 @@ class ARQSessionIRS(arq_session.ARQSession):
pass
def set_state(self, state):
self.log(f"ARQ Session {self.id} state {self.state}")
self.log(f"ARQ Session IRS {self.id} state {self.state}")
self.state = state
def set_modem_decode_modes(self, modes):
@ -50,13 +50,15 @@ class ARQSessionIRS(arq_session.ARQSession):
self.transmit_frame(ack_frame)
self.set_modem_decode_modes(None)
self.state = self.STATE_WAITING_DATA
while self.state == self.STATE_WAITING_DATA:
if not self.event_data_received.wait(self.TIMEOUT_DATA):
self.log("Timeout waiting for data")
self.state = self.STATE_FAILED
return
else:
print("data received")
print(self.frame)
self.log("Finished ARQ IRS session")
@ -66,8 +68,9 @@ class ARQSessionIRS(arq_session.ARQSession):
def on_data_received(self, data_frame):
if self.state != self.STATE_WAITING_DATA:
raise RuntimeError(f"ARQ Session: Received data while in state {self.state}")
raise RuntimeError(f"ARQ Session: Received data while in state {self.state}, expected {self.STATE_WAITING_DATA}")
self.received_data = data_frame["data"]
self.event_data_received.set()
@ -87,3 +90,4 @@ class ARQSessionIRS(arq_session.ARQSession):
self.event_connection_ack_received.clear()
self.event_transfer_feedback.set()
self.event_transfer_feedback.clear()
self.received_data = b''

View file

@ -35,7 +35,7 @@ class ARQSessionISS(arq_session.ARQSession):
return random.randint(1,255)
def set_state(self, state):
self.logger.info(f"ARQ Session {self.id} state {self.state}")
self.logger.info(f"ARQ Session ISS {self.id} state {self.state}")
self.state = state
def runner(self):
@ -72,6 +72,7 @@ class ARQSessionISS(arq_session.ARQSession):
self.build_arq_data_framespeed_level = ack['speed_level']
self.event_connection_ack_received.set()
# Sends the full payload in multiple frames
def send_data(self):
# Todo make this n frames per burst stuff part of the protocol again

View file

@ -127,8 +127,8 @@ class DataFrameFactory:
# arq data frame
# register n frames
for n_frame in range(0,50):
self.template_list[FR_TYPE.BURST_01.value + n_frame] = {
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,

View file

@ -23,3 +23,10 @@ class ARQFrameHandler(frame_handler.FrameHandler):
if frame['frame_type_int'] in [FR.ARQ_SESSION_OPEN_ACK_N.value, FR.ARQ_SESSION_OPEN_ACK_W.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
if 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]:
print("received data frame....")
irs_session:ARQSessionIRS = self.states.get_arq_irs_session(frame['session_id'])
irs_session.on_data_received(frame)

View file

@ -11,8 +11,7 @@ class FRAME_TYPE(Enum):
BURST_02 = 2
BURST_03 = 3
BURST_04 = 4
# ...
BURST_50 = 50
BURST_05 = 5
BURST_ACK = 60
FR_ACK = 61
FR_REPEAT = 62