ARQ WIP - only run one ARQ session at a time

This commit is contained in:
DJ2LS 2024-01-15 11:16:33 +01:00
parent 467f015cf1
commit 518a739f21
3 changed files with 13 additions and 2 deletions

View file

@ -26,6 +26,9 @@ class ARQFrameHandler(frame_handler.FrameHandler):
# Normal case when receiving a SESSION_OPEN for the first time
else:
if self.states.check_if_running_arq_session():
self.logger.warning("DISCARDING SESSION OPEN because of ongoing ARQ session ", frame=frame)
return
session = ARQSessionIRS(self.config,
self.modem,
frame['origin'],

View file

@ -202,6 +202,8 @@ def post_modem_send_raw():
return api_response({"info": "endpoint for SENDING RAW DATA via POST"})
if not app.state_manager.is_modem_running:
api_abort('Modem not running', 503)
if app.state_manager.check_if_running_arq_session():
api_abort('Modem busy', 503)
if enqueue_tx_command(command_arq_raw.ARQRawCommand, request.json):
return api_response(request.json)
else:

View file

@ -21,8 +21,6 @@ class StateManager:
self.is_modem_running = False
self.is_modem_busy = False
self.is_beacon_running = False
self.is_arq_state = False
self.is_arq_session = False
# If true, any wait() call is blocking
self.transmitting_event = threading.Event()
@ -120,6 +118,14 @@ class StateManager:
self.arq_irs_sessions[session.id] = session
return True
def check_if_running_arq_session(self, irs=False):
sessions = self.arq_irs_sessions if irs else self.arq_iss_sessions
for session in sessions:
if sessions[session].state.name not in ['ENDED', 'ABORTED', 'FAILED']:
print(f"[State Manager] running session...[{session}]")
return True
return False
def get_arq_iss_session(self, id):
if id not in self.arq_iss_sessions:
#raise RuntimeError(f"ARQ ISS Session '{id}' not found!")