mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
adjusted events - still a WIP
This commit is contained in:
parent
79130edbe9
commit
ff777b212c
|
@ -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)
|
super().__init__(config, modem, dxcall)
|
||||||
|
self.state_manager = state_manager
|
||||||
self.data = data
|
self.data = data
|
||||||
self.data_crc = ''
|
self.data_crc = ''
|
||||||
|
|
||||||
|
@ -61,11 +62,18 @@ class ARQSessionISS(arq_session.ARQSession):
|
||||||
|
|
||||||
self.state = ISS_State.NEW
|
self.state = ISS_State.NEW
|
||||||
self.id = self.generate_id()
|
self.id = self.generate_id()
|
||||||
|
|
||||||
self.frame_factory = data_frame_factory.DataFrameFactory(self.config)
|
self.frame_factory = data_frame_factory.DataFrameFactory(self.config)
|
||||||
|
|
||||||
def generate_id(self):
|
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):
|
def transmit_wait_and_retry(self, frame_or_burst, timeout, retries, mode):
|
||||||
while retries > 0:
|
while retries > 0:
|
||||||
self.event_frame_received = threading.Event()
|
self.event_frame_received = threading.Event()
|
||||||
|
|
|
@ -19,7 +19,9 @@ class ARQRawCommand(TxCommand):
|
||||||
self.emit_event(event_queue)
|
self.emit_event(event_queue)
|
||||||
self.logger.info(self.log_message())
|
self.logger.info(self.log_message())
|
||||||
|
|
||||||
iss = ARQSessionISS(self.config, modem, self.dxcall, self.data)
|
iss = ARQSessionISS(self.config, modem, self.dxcall, self.data, self.state_manager)
|
||||||
self.state_manager.register_arq_iss_session(iss)
|
if iss.id:
|
||||||
iss.start()
|
self.state_manager.register_arq_iss_session(iss)
|
||||||
return iss
|
iss.start()
|
||||||
|
return iss
|
||||||
|
return False
|
|
@ -86,8 +86,9 @@ def validate(req, param, validator, isRequired = True):
|
||||||
def enqueue_tx_command(cmd_class, params = {}):
|
def enqueue_tx_command(cmd_class, params = {}):
|
||||||
command = cmd_class(app.config_manager.read(), app.state_manager, app.event_manager, params)
|
command = cmd_class(app.config_manager.read(), app.state_manager, app.event_manager, params)
|
||||||
app.logger.info(f"Command {command.get_name()} running...")
|
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
|
## REST API
|
||||||
@app.route('/', methods=['GET'])
|
@app.route('/', methods=['GET'])
|
||||||
def index():
|
def index():
|
||||||
|
@ -220,9 +221,10 @@ def post_modem_send_raw():
|
||||||
return api_response({"info": "endpoint for SENDING RAW DATA via POST"})
|
return api_response({"info": "endpoint for SENDING RAW DATA via POST"})
|
||||||
if not app.state_manager.is_modem_running:
|
if not app.state_manager.is_modem_running:
|
||||||
api_abort('Modem not running', 503)
|
api_abort('Modem not running', 503)
|
||||||
enqueue_tx_command(command_arq_raw.ARQRawCommand, request.json)
|
if enqueue_tx_command(command_arq_raw.ARQRawCommand, request.json):
|
||||||
return api_response(request.json)
|
return api_response(request.json)
|
||||||
|
else:
|
||||||
|
api_abort('Error executing command...', 500)
|
||||||
@app.route('/modem/stop_transmission', methods=['POST'])
|
@app.route('/modem/stop_transmission', methods=['POST'])
|
||||||
def post_modem_send_raw_stop():
|
def post_modem_send_raw_stop():
|
||||||
|
|
||||||
|
|
|
@ -109,13 +109,15 @@ class StateManager:
|
||||||
|
|
||||||
def register_arq_iss_session(self, session):
|
def register_arq_iss_session(self, session):
|
||||||
if session.id in self.arq_iss_sessions:
|
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
|
self.arq_iss_sessions[session.id] = session
|
||||||
|
return True
|
||||||
|
|
||||||
def register_arq_irs_session(self, session):
|
def register_arq_irs_session(self, session):
|
||||||
if session.id in self.arq_irs_sessions:
|
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
|
self.arq_irs_sessions[session.id] = session
|
||||||
|
return True
|
||||||
|
|
||||||
def get_arq_iss_session(self, id):
|
def get_arq_iss_session(self, id):
|
||||||
if id not in self.arq_iss_sessions:
|
if id not in self.arq_iss_sessions:
|
||||||
|
|
Loading…
Reference in a new issue