FreeDATA/modem/beacon.py

66 lines
1.7 KiB
Python
Raw Normal View History

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)