make beacon a service

This commit is contained in:
DJ2LS 2023-12-21 17:47:48 +01:00
parent bfc0c88154
commit e91cf49f21
5 changed files with 37 additions and 16 deletions

View file

@ -6,13 +6,13 @@ class Beacon:
BEACON_LOOP_INTERVAL = 1 BEACON_LOOP_INTERVAL = 1
def __init__(self, config, states, event_queue, logger, modem_tx_queue): def __init__(self, config, states, event_queue, logger, modem):
self.modem_config = config self.modem_config = config
self.states = states self.states = states
self.event_queue = event_queue self.event_queue = event_queue
self.log = logger self.log = logger
self.tx_frame_queue = modem_tx_queue self.modem = modem
self.loop_running = True self.loop_running = True
self.paused = False self.paused = False
@ -39,8 +39,8 @@ class Beacon:
True): True):
#not self.states.channel_busy): #not self.states.channel_busy):
cmd = command_beacon.BeaconCommand(self.modem_config, self.log) cmd = command_beacon.BeaconCommand(self.modem_config, self.states, self.event_queue)
cmd.run(self.event_queue, self.tx_frame_queue) cmd.run(self.event_queue, self.modem)
self.event.wait(self.modem_config['MODEM']['beacon_interval']) self.event.wait(self.modem_config['MODEM']['beacon_interval'])
self.event.wait(self.BEACON_LOOP_INTERVAL) self.event.wait(self.BEACON_LOOP_INTERVAL)

View file

@ -5,8 +5,9 @@ class BeaconCommand(TxCommand):
def build_frame(self): def build_frame(self):
return self.frame_factory.build_beacon() return self.frame_factory.build_beacon()
def transmit(self, modem):
super().transmit(modem) #def transmit(self, modem):
if self.config['MODEM']['enable_morse_identifier']: # super().transmit(modem)
mycall = f"{self.config['STATION']['mycall']}-{self.config['STATION']['myssid']}" # if self.config['MODEM']['enable_morse_identifier']:
modem.transmit_morse("morse", 1, 0, mycall) # mycall = f"{self.config['STATION']['mycall']}-{self.config['STATION']['myssid']}"
# modem.transmit_morse("morse", 1, 0, mycall)

View file

@ -23,7 +23,6 @@ import cw
from queues import RIGCTLD_COMMAND_QUEUE from queues import RIGCTLD_COMMAND_QUEUE
import audio import audio
import event_manager import event_manager
import beacon
import demodulator import demodulator
TESTMODE = False TESTMODE = False
@ -101,8 +100,7 @@ class RF:
self.fft_queue self.fft_queue
) )
self.beacon = beacon.Beacon(self.config, self.states, event_queue,
self.log, self.modem_transmit_queue)
def tci_tx_callback(self, audio_48k) -> None: def tci_tx_callback(self, audio_48k) -> None:
self.radio.set_ptt(True) self.radio.set_ptt(True)
@ -134,8 +132,6 @@ class RF:
if not TESTMODE: if not TESTMODE:
atexit.register(self.sd_input_stream.stop) atexit.register(self.sd_input_stream.stop)
# init beacon
self.beacon.start()
else: else:
return False return False

View file

@ -143,7 +143,14 @@ def post_beacon():
api_abort(f"Incorrect value for 'enabled'. Shoud be bool.") api_abort(f"Incorrect value for 'enabled'. Shoud be bool.")
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)
app.state_manager.set('is_beacon_running', request.json['enabled'])
if not app.state_manager.is_beacon_running:
app.state_manager.set('is_beacon_running', request.json['enabled'])
app.modem_service.put("start_beacon")
else:
app.state_manager.set('is_beacon_running', request.json['enabled'])
app.modem_service.put("stop_beacon")
return api_response(request.json) return api_response(request.json)
@app.route('/modem/ping_ping', methods=['POST']) @app.route('/modem/ping_ping', methods=['POST'])

View file

@ -5,6 +5,7 @@ import structlog
import audio import audio
import ujson as json import ujson as json
import explorer import explorer
import beacon
class SM: class SM:
@ -12,6 +13,7 @@ class SM:
self.log = structlog.get_logger("service") self.log = structlog.get_logger("service")
self.modem = False self.modem = False
self.beacon = False
self.data_handler = False self.data_handler = False
self.app = app self.app = app
self.config = self.app.config_manager.read() self.config = self.app.config_manager.read()
@ -48,6 +50,14 @@ class SM:
threading.Event().wait(0.5) threading.Event().wait(0.5)
if self.start_modem(): if self.start_modem():
self.modem_events.put(json.dumps({"freedata": "modem-event", "event": "restart"})) self.modem_events.put(json.dumps({"freedata": "modem-event", "event": "restart"}))
elif cmd in ['start_beacon']:
self.start_beacon()
elif cmd in ['stop_beacon']:
self.stop_beacon()
else: else:
self.log.warning("[SVC] modem command processing failed", cmd=cmd, state=self.states.is_modem_running) self.log.warning("[SVC] modem command processing failed", cmd=cmd, state=self.states.is_modem_running)
@ -97,4 +107,11 @@ class SM:
self.log.info("tested audio devices", result=audio_test) self.log.info("tested audio devices", result=audio_test)
return audio_test return audio_test
def start_beacon(self):
self.beacon = beacon.Beacon(self.config, self.states, self.modem_events, self.log, self.modem)
self.beacon.start()
def stop_beacon(self):
del self.beacon