mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
ARQ WIP - added more events
This commit is contained in:
parent
d91b7763e8
commit
ca7e7f6558
3 changed files with 24 additions and 15 deletions
|
@ -17,7 +17,7 @@ class IRS_State(Enum):
|
||||||
class ARQSessionIRS(arq_session.ARQSession):
|
class ARQSessionIRS(arq_session.ARQSession):
|
||||||
|
|
||||||
TIMEOUT_CONNECT = 10
|
TIMEOUT_CONNECT = 10
|
||||||
TIMEOUT_DATA = 12
|
TIMEOUT_DATA = 60
|
||||||
|
|
||||||
STATE_TRANSITION = {
|
STATE_TRANSITION = {
|
||||||
IRS_State.NEW: {
|
IRS_State.NEW: {
|
||||||
|
@ -87,7 +87,7 @@ class ARQSessionIRS(arq_session.ARQSession):
|
||||||
if not self.event_frame_received.wait(timeout):
|
if not self.event_frame_received.wait(timeout):
|
||||||
self.log("Timeout waiting for ISS. Session failed.")
|
self.log("Timeout waiting for ISS. Session failed.")
|
||||||
self.set_state(IRS_State.FAILED)
|
self.set_state(IRS_State.FAILED)
|
||||||
self.event_manager.send_arq_session_finished(False, self.id, self.dxcall, self.total_length, False)
|
self.event_manager.send_arq_session_finished(False, self.id, self.dxcall, self.total_length, False, self.state.name)
|
||||||
|
|
||||||
def launch_transmit_and_wait(self, frame, timeout, mode):
|
def launch_transmit_and_wait(self, frame, timeout, mode):
|
||||||
thread_wait = threading.Thread(target = self.transmit_and_wait,
|
thread_wait = threading.Thread(target = self.transmit_and_wait,
|
||||||
|
@ -111,7 +111,7 @@ class ARQSessionIRS(arq_session.ARQSession):
|
||||||
self.dx_snr.append(info_frame['snr'])
|
self.dx_snr.append(info_frame['snr'])
|
||||||
|
|
||||||
self.log(f"New transfer of {self.total_length} bytes")
|
self.log(f"New transfer of {self.total_length} bytes")
|
||||||
self.event_manager.send_arq_session_new(False, self.id, self.dxcall, self.total_length)
|
self.event_manager.send_arq_session_new(False, self.id, self.dxcall, self.total_length, self.state)
|
||||||
|
|
||||||
self.calibrate_speed_settings()
|
self.calibrate_speed_settings()
|
||||||
self.set_decode_mode()
|
self.set_decode_mode()
|
||||||
|
@ -142,7 +142,7 @@ class ARQSessionIRS(arq_session.ARQSession):
|
||||||
self.received_bytes += len(data_part)
|
self.received_bytes += len(data_part)
|
||||||
self.log(f"Received {self.received_bytes}/{self.total_length} bytes")
|
self.log(f"Received {self.received_bytes}/{self.total_length} bytes")
|
||||||
self.event_manager.send_arq_session_progress(
|
self.event_manager.send_arq_session_progress(
|
||||||
False, self.id, self.dxcall, self.received_bytes, self.total_length)
|
False, self.id, self.dxcall, self.received_bytes, self.total_length, self.state.name)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ class ARQSessionIRS(arq_session.ARQSession):
|
||||||
self.log("ACK sent")
|
self.log("ACK sent")
|
||||||
self.set_state(IRS_State.ENDED)
|
self.set_state(IRS_State.ENDED)
|
||||||
self.event_manager.send_arq_session_finished(
|
self.event_manager.send_arq_session_finished(
|
||||||
False, self.id, self.dxcall, self.total_length, True)
|
False, self.id, self.dxcall, self.total_length, True, self.state.name)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
||||||
|
@ -189,7 +189,7 @@ class ARQSessionIRS(arq_session.ARQSession):
|
||||||
self.log("CRC fail at the end of transmission!")
|
self.log("CRC fail at the end of transmission!")
|
||||||
self.set_state(IRS_State.FAILED)
|
self.set_state(IRS_State.FAILED)
|
||||||
self.event_manager.send_arq_session_finished(
|
self.event_manager.send_arq_session_finished(
|
||||||
False, self.id, self.dxcall, self.total_length, False)
|
False, self.id, self.dxcall, self.total_length, False, self.state.name)
|
||||||
|
|
||||||
|
|
||||||
def calibrate_speed_settings(self):
|
def calibrate_speed_settings(self):
|
||||||
|
@ -211,4 +211,6 @@ class ARQSessionIRS(arq_session.ARQSession):
|
||||||
def send_stop_ack(self, stop_frame):
|
def send_stop_ack(self, stop_frame):
|
||||||
stop_ack = self.frame_factory.build_arq_stop_ack(self.id)
|
stop_ack = self.frame_factory.build_arq_stop_ack(self.id)
|
||||||
self.launch_transmit_and_wait(stop_ack, self.TIMEOUT_CONNECT, mode=FREEDV_MODE.signalling)
|
self.launch_transmit_and_wait(stop_ack, self.TIMEOUT_CONNECT, mode=FREEDV_MODE.signalling)
|
||||||
self.set_state(IRS_State.FAILED)
|
self.set_state(IRS_State.ABORTED)
|
||||||
|
self.event_manager.send_arq_session_finished(
|
||||||
|
False, self.id, self.dxcall, self.total_length, False, self.status)
|
|
@ -129,7 +129,7 @@ class ARQSessionISS(arq_session.ARQSession):
|
||||||
self.confirmed_bytes = irs_frame['offset']
|
self.confirmed_bytes = irs_frame['offset']
|
||||||
self.log(f"IRS confirmed {self.confirmed_bytes}/{len(self.data)} bytes")
|
self.log(f"IRS confirmed {self.confirmed_bytes}/{len(self.data)} bytes")
|
||||||
self.event_manager.send_arq_session_progress(
|
self.event_manager.send_arq_session_progress(
|
||||||
True, self.id, self.dxcall, self.confirmed_bytes, len(self.data))
|
True, self.id, self.dxcall, self.confirmed_bytes, len(self.data), self.state.name)
|
||||||
|
|
||||||
if irs_frame["flag"]["FINAL"]:
|
if irs_frame["flag"]["FINAL"]:
|
||||||
if self.confirmed_bytes == len(self.data) and irs_frame["flag"]["CHECKSUM"]:
|
if self.confirmed_bytes == len(self.data) and irs_frame["flag"]["CHECKSUM"]:
|
||||||
|
@ -154,15 +154,17 @@ class ARQSessionISS(arq_session.ARQSession):
|
||||||
def transmission_ended(self, irs_frame):
|
def transmission_ended(self, irs_frame):
|
||||||
self.set_state(ISS_State.ENDED)
|
self.set_state(ISS_State.ENDED)
|
||||||
self.log(f"All data transfered! flag_final={irs_frame['flag']['FINAL']}, flag_checksum={irs_frame['flag']['CHECKSUM']}")
|
self.log(f"All data transfered! flag_final={irs_frame['flag']['FINAL']}, flag_checksum={irs_frame['flag']['CHECKSUM']}")
|
||||||
self.event_manager.send_arq_session_finished(True, self.id, self.dxcall, len(self.data),True)
|
self.event_manager.send_arq_session_finished(True, self.id, self.dxcall, len(self.data),True, self.state.name)
|
||||||
|
|
||||||
def transmission_failed(self, irs_frame=None):
|
def transmission_failed(self, irs_frame=None):
|
||||||
self.set_state(ISS_State.FAILED)
|
self.set_state(ISS_State.FAILED)
|
||||||
self.log(f"Transmission failed!")
|
self.log(f"Transmission failed!")
|
||||||
self.event_manager.send_arq_session_finished(True, self.id, self.dxcall, len(self.data),False)
|
self.event_manager.send_arq_session_finished(True, self.id, self.dxcall, len(self.data),False, self.state.name)
|
||||||
|
|
||||||
def abort_transmission(self, irs_frame=None):
|
def abort_transmission(self, irs_frame=None):
|
||||||
self.log(f"Stopping transmission...")
|
self.log(f"aborting transmission...")
|
||||||
|
self.event_manager.send_arq_session_finished(
|
||||||
|
True, self.id, self.dxcall, self.total_length, False, self.state.name)
|
||||||
self.set_state(ISS_State.ABORTING)
|
self.set_state(ISS_State.ABORTING)
|
||||||
# interrupt possible pending retries
|
# interrupt possible pending retries
|
||||||
self.retry = False
|
self.retry = False
|
||||||
|
@ -175,4 +177,6 @@ class ARQSessionISS(arq_session.ARQSession):
|
||||||
|
|
||||||
def aborted(self, irs_frame):
|
def aborted(self, irs_frame):
|
||||||
self.log("session aborted")
|
self.log("session aborted")
|
||||||
self.set_state(ISS_State.ABORTED)
|
self.set_state(ISS_State.ABORTED)
|
||||||
|
self.event_manager.send_arq_session_finished(
|
||||||
|
True, self.id, self.dxcall, self.total_length, False, self.state.name)
|
|
@ -28,18 +28,19 @@ class EventManager:
|
||||||
def send_custom_event(self, **event_data):
|
def send_custom_event(self, **event_data):
|
||||||
self.broadcast(event_data)
|
self.broadcast(event_data)
|
||||||
|
|
||||||
def send_arq_session_new(self, outbound: bool, session_id, dxcall, total_bytes):
|
def send_arq_session_new(self, outbound: bool, session_id, dxcall, total_bytes, state):
|
||||||
direction = 'outbound' if outbound else 'inbound'
|
direction = 'outbound' if outbound else 'inbound'
|
||||||
event = {
|
event = {
|
||||||
f"arq-transfer-{direction}": {
|
f"arq-transfer-{direction}": {
|
||||||
'session_id': session_id,
|
'session_id': session_id,
|
||||||
'dxcall': dxcall,
|
'dxcall': dxcall,
|
||||||
'total_bytes': total_bytes,
|
'total_bytes': total_bytes,
|
||||||
|
'state': state,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.broadcast(event)
|
self.broadcast(event)
|
||||||
|
|
||||||
def send_arq_session_progress(self, outbound: bool, session_id, dxcall, received_bytes, total_bytes):
|
def send_arq_session_progress(self, outbound: bool, session_id, dxcall, received_bytes, total_bytes, state):
|
||||||
direction = 'outbound' if outbound else 'inbound'
|
direction = 'outbound' if outbound else 'inbound'
|
||||||
event = {
|
event = {
|
||||||
f"arq-transfer-{direction}": {
|
f"arq-transfer-{direction}": {
|
||||||
|
@ -47,11 +48,12 @@ class EventManager:
|
||||||
'dxcall': dxcall,
|
'dxcall': dxcall,
|
||||||
'received_bytes': received_bytes,
|
'received_bytes': received_bytes,
|
||||||
'total_bytes': total_bytes,
|
'total_bytes': total_bytes,
|
||||||
|
'state': state,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.broadcast(event)
|
self.broadcast(event)
|
||||||
|
|
||||||
def send_arq_session_finished(self, outbound: bool, session_id, dxcall, total_bytes, success: bool):
|
def send_arq_session_finished(self, outbound: bool, session_id, dxcall, total_bytes, success: bool, state):
|
||||||
direction = 'outbound' if outbound else 'inbound'
|
direction = 'outbound' if outbound else 'inbound'
|
||||||
event = {
|
event = {
|
||||||
f"arq-transfer-{direction}": {
|
f"arq-transfer-{direction}": {
|
||||||
|
@ -59,6 +61,7 @@ class EventManager:
|
||||||
'dxcall': dxcall,
|
'dxcall': dxcall,
|
||||||
'total_bytes': total_bytes,
|
'total_bytes': total_bytes,
|
||||||
'success': success,
|
'success': success,
|
||||||
|
'state': state,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.broadcast(event)
|
self.broadcast(event)
|
||||||
|
|
Loading…
Reference in a new issue