adjusted events - still a WIP

This commit is contained in:
DJ2LS 2024-01-04 21:44:59 +01:00
parent 79130edbe9
commit ff777b212c
4 changed files with 28 additions and 14 deletions

View file

@ -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()

View file

@ -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

View file

@ -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():

View file

@ -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: