From ff777b212c8516b5cdc4232168da31e0b870bdf4 Mon Sep 17 00:00:00 2001 From: DJ2LS Date: Thu, 4 Jan 2024 21:44:59 +0100 Subject: [PATCH] adjusted events - still a WIP --- modem/arq_session_iss.py | 14 +++++++++++--- modem/command_arq_raw.py | 10 ++++++---- modem/server.py | 12 +++++++----- modem/state_manager.py | 6 ++++-- 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/modem/arq_session_iss.py b/modem/arq_session_iss.py index 8cae85fa..f48c4608 100644 --- a/modem/arq_session_iss.py +++ b/modem/arq_session_iss.py @@ -52,8 +52,9 @@ class ARQSessionISS(arq_session.ARQSession): } } - def __init__(self, config: dict, modem, dxcall: str, data: bytearray): + def __init__(self, config: dict, modem, dxcall: str, data: bytearray, state_manager): super().__init__(config, modem, dxcall) + self.state_manager = state_manager self.data = data self.data_crc = '' @@ -61,11 +62,18 @@ class ARQSessionISS(arq_session.ARQSession): self.state = ISS_State.NEW self.id = self.generate_id() + self.frame_factory = data_frame_factory.DataFrameFactory(self.config) def generate_id(self): - return random.randint(1,255) - + while True: + random_int = random.randint(1,255) + if random_int not in self.state_manager.arq_iss_sessions: + return random_int + if len(self.state_manager.arq_iss_sessions) >= 255: + return False + + def transmit_wait_and_retry(self, frame_or_burst, timeout, retries, mode): while retries > 0: self.event_frame_received = threading.Event() diff --git a/modem/command_arq_raw.py b/modem/command_arq_raw.py index bde0bda6..7544db71 100644 --- a/modem/command_arq_raw.py +++ b/modem/command_arq_raw.py @@ -19,7 +19,9 @@ class ARQRawCommand(TxCommand): self.emit_event(event_queue) self.logger.info(self.log_message()) - iss = ARQSessionISS(self.config, modem, self.dxcall, self.data) - self.state_manager.register_arq_iss_session(iss) - iss.start() - return iss + iss = ARQSessionISS(self.config, modem, self.dxcall, self.data, self.state_manager) + if iss.id: + self.state_manager.register_arq_iss_session(iss) + iss.start() + return iss + return False \ No newline at end of file diff --git a/modem/server.py b/modem/server.py index c370adea..4c532c86 100644 --- a/modem/server.py +++ b/modem/server.py @@ -86,8 +86,9 @@ def validate(req, param, validator, isRequired = True): def enqueue_tx_command(cmd_class, params = {}): command = cmd_class(app.config_manager.read(), app.state_manager, app.event_manager, params) app.logger.info(f"Command {command.get_name()} running...") - command.run(app.modem_events, app.service_manager.modem) # TODO remove the app.modem_event custom queue - + if command.run(app.modem_events, app.service_manager.modem): # TODO remove the app.modem_event custom queue + return True + return False ## REST API @app.route('/', methods=['GET']) def index(): @@ -220,9 +221,10 @@ 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) - enqueue_tx_command(command_arq_raw.ARQRawCommand, request.json) - return api_response(request.json) - + if enqueue_tx_command(command_arq_raw.ARQRawCommand, request.json): + return api_response(request.json) + else: + api_abort('Error executing command...', 500) @app.route('/modem/stop_transmission', methods=['POST']) def post_modem_send_raw_stop(): diff --git a/modem/state_manager.py b/modem/state_manager.py index d2975a3d..c0735940 100644 --- a/modem/state_manager.py +++ b/modem/state_manager.py @@ -109,13 +109,15 @@ class StateManager: def register_arq_iss_session(self, session): if session.id in self.arq_iss_sessions: - raise RuntimeError(f"ARQ ISS Session '{session.id}' already exists!") + return False self.arq_iss_sessions[session.id] = session + return True def register_arq_irs_session(self, session): if session.id in self.arq_irs_sessions: - raise RuntimeError(f"ARQ IRS Session '{session.id}' already exists!") + return False self.arq_irs_sessions[session.id] = session + return True def get_arq_iss_session(self, id): if id not in self.arq_iss_sessions: