mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
show popup when modem restarting
This commit is contained in:
parent
aef44b1536
commit
b76726c4a5
3 changed files with 82 additions and 26 deletions
|
@ -121,17 +121,43 @@ export function stateDispatcher(data) {
|
|||
export function eventDispatcher(data) {
|
||||
data = JSON.parse(data);
|
||||
|
||||
// get ptt state as a first test
|
||||
stateStore.ptt_state = data.ptt;
|
||||
|
||||
var message = "";
|
||||
if (data["freedata"] == "modem-message") {
|
||||
// break early if we received a dummy callsign
|
||||
// thats a kind of hotfix, as long as the modem isnt handling this better
|
||||
if (data["dxcallsign"] == "AA0AA-0" || data["dxcallsign"] == "ZZ9YY-0") {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// get ptt state as a first test
|
||||
stateStore.ptt_state = data.ptt;
|
||||
|
||||
// catch modem related events
|
||||
if (data["freedata"] == "modem-event") {
|
||||
|
||||
switch (data["event"]) {
|
||||
case "start":
|
||||
displayToast("success", "bi-arrow-left-right", "Modem started", 5000);
|
||||
return;
|
||||
|
||||
case "stop":
|
||||
displayToast("success", "bi-arrow-left-right", "Modem stopped", 5000);
|
||||
return;
|
||||
|
||||
case "restart":
|
||||
displayToast("secondary", "bi-bootstrap-reboot", "Modem restarted", 5000);
|
||||
return;
|
||||
|
||||
case "failed":
|
||||
displayToast("danger", "bi-bootstrap-reboot", "Modem startup failed | bad config?", 5000);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
var message = "";
|
||||
if (data["freedata"] == "modem-message") {
|
||||
|
||||
console.log(data);
|
||||
|
||||
switch (data["fec"]) {
|
||||
|
@ -341,4 +367,5 @@ export function eventDispatcher(data) {
|
|||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
|
|
@ -70,9 +70,8 @@ def index():
|
|||
@app.route('/config', methods=['GET', 'POST'])
|
||||
def config():
|
||||
if request.method in ['POST']:
|
||||
app.modem_service.put("stop")
|
||||
set_config = app.config_manager.write(request.json)
|
||||
app.modem_service.put("start")
|
||||
app.modem_service.put("restart")
|
||||
if not set_config:
|
||||
response = api_response(None, 'error writing config')
|
||||
else:
|
||||
|
|
|
@ -3,6 +3,8 @@ import data_handler
|
|||
import modem
|
||||
import structlog
|
||||
import audio
|
||||
import ujson as json
|
||||
|
||||
|
||||
class SM:
|
||||
def __init__(self, app):
|
||||
|
@ -26,26 +28,54 @@ class SM:
|
|||
while True:
|
||||
cmd = self.modem_service.get()
|
||||
if cmd in ['start'] and not self.modem:
|
||||
audio_test = audio.test_audio_devices(self.config['AUDIO']['input_device'], self.config['AUDIO']['output_device'])
|
||||
print(audio_test)
|
||||
if False not in audio_test and None not in audio_test and not self.states.is_modem_running:
|
||||
self.log.info("starting modem....")
|
||||
self.modem = modem.RF(self.config, self.modem_events, self.modem_fft, self.modem_service, self.states)
|
||||
self.data_handler = data_handler.DATA(self.config, self.modem_events)
|
||||
self.states.set("is_modem_running", True)
|
||||
|
||||
else:
|
||||
self.log.warning("starting modem failed", input_test=audio_test[0], output_test=audio_test[1])
|
||||
self.states.set("is_modem_running", False)
|
||||
self.log.info("------------------ FreeDATA ------------------")
|
||||
self.log.info("------------------ MODEM ------------------")
|
||||
self.start_modem()
|
||||
elif cmd in ['stop'] and self.modem:
|
||||
self.stop_modem()
|
||||
# we need to wait a bit for avoiding a portaudio crash
|
||||
threading.Event().wait(0.5)
|
||||
|
||||
elif cmd in ['restart']:
|
||||
self.stop_modem()
|
||||
# we need to wait a bit for avoiding a portaudio crash
|
||||
threading.Event().wait(0.5)
|
||||
if self.start_modem():
|
||||
self.modem_events.put(json.dumps({"freedata": "modem-event", "event": "restart"}))
|
||||
|
||||
else:
|
||||
print("--------------------------------------")
|
||||
self.log.info("stopping modem....")
|
||||
del self.modem
|
||||
del self.data_handler
|
||||
self.modem = False
|
||||
self.data_handler = False
|
||||
self.states.set("is_modem_running", False)
|
||||
self.log.warning("[SVC] modem command processing failed", cmd=cmd, state=self.states.is_modem_running)
|
||||
|
||||
threading.Event().wait(0.5)
|
||||
|
||||
def start_modem(self):
|
||||
audio_test = self.test_audio()
|
||||
if False not in audio_test and None not in audio_test and not self.states.is_modem_running:
|
||||
self.log.info("starting modem....")
|
||||
self.modem = modem.RF(self.config, self.modem_events, self.modem_fft, self.modem_service, self.states)
|
||||
self.data_handler = data_handler.DATA(self.config, self.modem_events)
|
||||
self.states.set("is_modem_running", True)
|
||||
return True
|
||||
elif self.states.is_modem_running:
|
||||
self.log.warning("modem already running")
|
||||
return False
|
||||
|
||||
else:
|
||||
self.log.warning("starting modem failed", input_test=audio_test[0], output_test=audio_test[1])
|
||||
self.states.set("is_modem_running", False)
|
||||
self.modem_events.put(json.dumps({"freedata": "modem-event", "event": "failed"}))
|
||||
return False
|
||||
|
||||
def stop_modem(self):
|
||||
self.log.info("stopping modem....")
|
||||
del self.modem
|
||||
del self.data_handler
|
||||
self.modem = False
|
||||
self.data_handler = False
|
||||
self.states.set("is_modem_running", False)
|
||||
|
||||
def test_audio(self):
|
||||
audio_test = audio.test_audio_devices(self.config['AUDIO']['input_device'],
|
||||
self.config['AUDIO']['output_device'])
|
||||
self.log.info("tested audio devices", result=audio_test)
|
||||
|
||||
return audio_test
|
Loading…
Reference in a new issue