mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
WIP ARQ - introduced additional info state
This commit is contained in:
parent
9bbdaa055a
commit
463c8c3829
2 changed files with 20 additions and 9 deletions
|
@ -6,8 +6,9 @@ import arq_session
|
||||||
class ARQSessionIRS(arq_session.ARQSession):
|
class ARQSessionIRS(arq_session.ARQSession):
|
||||||
|
|
||||||
STATE_CONN_REQ_RECEIVED = 0
|
STATE_CONN_REQ_RECEIVED = 0
|
||||||
STATE_WAITING_DATA = 1
|
STATE_WAITING_INFO = 1
|
||||||
STATE_FAILED = 2
|
STATE_WAITING_DATA = 2
|
||||||
|
STATE_FAILED = 3
|
||||||
STATE_ENDED = 10
|
STATE_ENDED = 10
|
||||||
|
|
||||||
RETRIES_CONNECT = 3
|
RETRIES_CONNECT = 3
|
||||||
|
@ -51,10 +52,15 @@ class ARQSessionIRS(arq_session.ARQSession):
|
||||||
def _all_data_received(self):
|
def _all_data_received(self):
|
||||||
return self.received_bytes == len(self.received_data)
|
return self.received_bytes == len(self.received_data)
|
||||||
|
|
||||||
def handshake(self):
|
def handshake_session(self):
|
||||||
self.send_open_ack()
|
if self.state in [self.STATE_CONN_REQ_RECEIVED, self.STATE_WAITING_INFO]:
|
||||||
|
self.send_open_ack()
|
||||||
|
self.set_state(self.STATE_WAITING_INFO)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
if not self.event_info_received.wait(self.TIMEOUT_CONNECT):
|
def handshake_info(self):
|
||||||
|
if self.state == self.STATE_WAITING_INFO and not self.event_info_received.wait(self.TIMEOUT_CONNECT):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
self.send_info_ack()
|
self.send_info_ack()
|
||||||
|
@ -86,14 +92,19 @@ class ARQSessionIRS(arq_session.ARQSession):
|
||||||
|
|
||||||
|
|
||||||
def runner(self):
|
def runner(self):
|
||||||
if not self.handshake():
|
|
||||||
|
if not self.handshake_session():
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
if not self.handshake_info():
|
||||||
|
return False
|
||||||
|
|
||||||
if not self.receive_data():
|
if not self.receive_data():
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self.set_state(self.STATE_WAITING_DATA)
|
self.set_state(self.STATE_CONN_REQ_RECEIVED)
|
||||||
self.thread = threading.Thread(target=self.runner,
|
self.thread = threading.Thread(target=self.runner,
|
||||||
name=f"ARQ IRS Session {self.id}", daemon=False)
|
name=f"ARQ IRS Session {self.id}", daemon=False)
|
||||||
self.thread.start()
|
self.thread.start()
|
||||||
|
@ -124,7 +135,7 @@ class ARQSessionIRS(arq_session.ARQSession):
|
||||||
self.frames_per_burst = self.frames_per_burst
|
self.frames_per_burst = self.frames_per_burst
|
||||||
|
|
||||||
def on_info_received(self, frame):
|
def on_info_received(self, frame):
|
||||||
if self.state != self.STATE_CONN_REQ_RECEIVED:
|
if self.state != self.STATE_WAITING_INFO:
|
||||||
self.logger.warning("Discarding received INFO.")
|
self.logger.warning("Discarding received INFO.")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ class ARQFrameHandler(frame_handler.FrameHandler):
|
||||||
# Lost OPEN_ACK case .. ISS will retry opening a session
|
# Lost OPEN_ACK case .. ISS will retry opening a session
|
||||||
if frame['session_id'] in self.states.arq_irs_sessions:
|
if frame['session_id'] in self.states.arq_irs_sessions:
|
||||||
session = self.states.arq_irs_sessions[frame['session_id']]
|
session = self.states.arq_irs_sessions[frame['session_id']]
|
||||||
if session.state == ARQSessionIRS.STATE_CONN_REQ_RECEIVED:
|
if session.state in [ARQSessionIRS.STATE_CONN_REQ_RECEIVED, ARQSessionIRS.STATE_WAITING_INFO]:
|
||||||
session.set_details(snr, frequency_offset)
|
session.set_details(snr, frequency_offset)
|
||||||
else:
|
else:
|
||||||
self.logger.warning(f"IRS Session conflict for session {session.id}")
|
self.logger.warning(f"IRS Session conflict for session {session.id}")
|
||||||
|
|
Loading…
Reference in a new issue