2023-11-26 14:23:20 +00:00
|
|
|
import threading
|
|
|
|
import data_frame_factory
|
|
|
|
import time
|
2023-11-26 14:45:41 +00:00
|
|
|
import command_beacon
|
2023-11-26 14:23:20 +00:00
|
|
|
|
|
|
|
modem_config = None
|
2023-11-26 14:45:41 +00:00
|
|
|
states = None
|
2023-11-26 14:23:20 +00:00
|
|
|
beacon_interval = 0
|
|
|
|
beacon_interval_timer = 0
|
|
|
|
beacon_paused = False
|
|
|
|
beacon_thread = None
|
|
|
|
frame_factory = None
|
|
|
|
event_manager = None
|
|
|
|
log = None
|
|
|
|
|
2023-11-26 14:45:41 +00:00
|
|
|
def init(config, modem_states, ev_manager, logger):
|
2023-11-26 14:23:20 +00:00
|
|
|
modem_config = config
|
2023-11-26 14:45:41 +00:00
|
|
|
states = modem_states
|
2023-11-26 14:23:20 +00:00
|
|
|
frame_factory = data_frame_factory.DataFrameFactory(modem_config)
|
|
|
|
event_manager = ev_manager
|
|
|
|
log = logger
|
|
|
|
|
|
|
|
def start():
|
|
|
|
beacon_thread = threading.Thread(
|
|
|
|
target=start, name="beacon", daemon=True
|
|
|
|
)
|
|
|
|
|
|
|
|
beacon_thread.start()
|
|
|
|
|
|
|
|
def run_beacon() -> None:
|
|
|
|
"""
|
|
|
|
Controlling function for running a beacon
|
|
|
|
Args:
|
|
|
|
|
|
|
|
self: arq class
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
"""
|
|
|
|
try:
|
|
|
|
while True:
|
|
|
|
threading.Event().wait(0.5)
|
|
|
|
while states.is_beacon_running:
|
|
|
|
if (
|
|
|
|
not states.is_arq_session
|
2023-11-26 14:45:41 +00:00
|
|
|
#and not arq_file_transfer
|
2023-11-26 14:23:20 +00:00
|
|
|
and not beacon_paused
|
2023-11-26 14:45:41 +00:00
|
|
|
#and not states.channel_busy
|
2023-11-26 14:23:20 +00:00
|
|
|
and not states.is_modem_busy
|
|
|
|
and not states.is_arq_state
|
|
|
|
):
|
2023-11-26 14:45:41 +00:00
|
|
|
|
|
|
|
cmd = command_beacon.BeaconCommand(modem_config, log)
|
|
|
|
cmd.run()
|
2023-11-26 14:23:20 +00:00
|
|
|
|
2023-11-26 14:45:41 +00:00
|
|
|
beacon_interval_timer = time.time() + beacon_interval
|
2023-11-26 14:23:20 +00:00
|
|
|
while (
|
2023-11-26 14:45:41 +00:00
|
|
|
time.time() < beacon_interval_timer
|
|
|
|
and states.is_beacon_running
|
|
|
|
and not beacon_paused
|
2023-11-26 14:23:20 +00:00
|
|
|
):
|
|
|
|
threading.Event().wait(0.01)
|
|
|
|
|
|
|
|
except Exception as err:
|
2023-11-26 14:45:41 +00:00
|
|
|
log.debug("[Modem] run_beacon: ", exception=err)
|