From 0311c65dda16c6f4170a4116e2345e8702a34faa Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Wed, 15 Sep 2021 16:49:29 +1000 Subject: [PATCH 1/5] Trigger stop function on press of RTN --- radio/src/gui/colorlcd/radio_spectrum_analyser.cpp | 10 ++++++++++ radio/src/gui/colorlcd/radio_spectrum_analyser.h | 1 + 2 files changed, 11 insertions(+) diff --git a/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp b/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp index 98a8f924a..3d435fa5e 100644 --- a/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp +++ b/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp @@ -206,6 +206,16 @@ RadioSpectrumAnalyser::RadioSpectrumAnalyser(uint8_t moduleIdx) : start(); } +#if defined(HARDWARE_KEYS) +void RadioSpectrumAnalyser::onEvent(event_t event) +{ + if (event == EVT_KEY_LONG(KEY_EXIT) || event == EVT_KEY_BREAK(KEY_EXIT)) { + stop(); + } + Page::onEvent(event); +} +#endif + void RadioSpectrumAnalyser::buildHeader(Window * window) { new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + 10, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_MENU_SPECTRUM_ANALYSER, 0, COLOR_THEME_SECONDARY1); diff --git a/radio/src/gui/colorlcd/radio_spectrum_analyser.h b/radio/src/gui/colorlcd/radio_spectrum_analyser.h index ccca50e48..bbce7c783 100644 --- a/radio/src/gui/colorlcd/radio_spectrum_analyser.h +++ b/radio/src/gui/colorlcd/radio_spectrum_analyser.h @@ -27,6 +27,7 @@ class RadioSpectrumAnalyser: public Page { public: explicit RadioSpectrumAnalyser(uint8_t moduleIdx); + void onEvent(event_t event) override; protected: uint8_t moduleIdx; From a5a54b6ce75285785d98baed0fe7145f6c928873 Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Wed, 15 Sep 2021 22:18:42 +1000 Subject: [PATCH 2/5] Proper close handler and track MPM state properly --- .../gui/colorlcd/radio_spectrum_analyser.cpp | 35 ++++++++----------- .../gui/colorlcd/radio_spectrum_analyser.h | 1 - 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp b/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp index 3d435fa5e..dba470ace 100644 --- a/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp +++ b/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp @@ -200,22 +200,13 @@ RadioSpectrumAnalyser::RadioSpectrumAnalyser(uint8_t moduleIdx) : Page(ICON_RADIO_TOOLS), moduleIdx(moduleIdx) { + setCloseHandler([=]() { stop(); }); init(); buildHeader(&header); buildBody(&body); start(); } -#if defined(HARDWARE_KEYS) -void RadioSpectrumAnalyser::onEvent(event_t event) -{ - if (event == EVT_KEY_LONG(KEY_EXIT) || event == EVT_KEY_BREAK(KEY_EXIT)) { - stop(); - } - Page::onEvent(event); -} -#endif - void RadioSpectrumAnalyser::buildHeader(Window * window) { new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + 10, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_MENU_SPECTRUM_ANALYSER, 0, COLOR_THEME_SECONDARY1); @@ -231,10 +222,13 @@ void RadioSpectrumAnalyser::buildBody(FormWindow * window) void RadioSpectrumAnalyser::init() { #if defined(INTERNAL_MODULE_MULTI) - if (moduleIdx == INTERNAL_MODULE && g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_NONE) { - reusableBuffer.spectrumAnalyser.moduleOFF = true; - setModuleType(INTERNAL_MODULE, MODULE_TYPE_MULTIMODULE); - } + if (moduleIdx == INTERNAL_MODULE && + g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_NONE) { + reusableBuffer.spectrumAnalyser.moduleOFF = true; + setModuleType(INTERNAL_MODULE, MODULE_TYPE_MULTIMODULE); + } else { + reusableBuffer.spectrumAnalyser.moduleOFF = false; + } #endif if (isModuleR9MAccess(moduleIdx)) { @@ -271,15 +265,16 @@ void RadioSpectrumAnalyser::start() void RadioSpectrumAnalyser::stop() { - new MessageDialog(this, STR_MODULE, STR_STOPPING); if (isModulePXX2(moduleIdx)) { - moduleState[moduleIdx].readModuleInformation(&reusableBuffer.moduleSetup.pxx2.moduleInformation, PXX2_HW_INFO_TX_ID, PXX2_HW_INFO_TX_ID); - } - else if (isModuleMultimodule(moduleIdx)) { - if (reusableBuffer.spectrumAnalyser.moduleOFF) + moduleState[moduleIdx].readModuleInformation( + &reusableBuffer.moduleSetup.pxx2.moduleInformation, PXX2_HW_INFO_TX_ID, + PXX2_HW_INFO_TX_ID); + } else if (isModuleMultimodule(moduleIdx)) { + if (reusableBuffer.spectrumAnalyser.moduleOFF) { setModuleType(INTERNAL_MODULE, MODULE_TYPE_NONE); - else + } else { moduleState[moduleIdx].mode = MODULE_MODE_NORMAL; + } } /* wait 1s to resume normal operation before leaving */ // watchdogSuspend(1000); diff --git a/radio/src/gui/colorlcd/radio_spectrum_analyser.h b/radio/src/gui/colorlcd/radio_spectrum_analyser.h index bbce7c783..ccca50e48 100644 --- a/radio/src/gui/colorlcd/radio_spectrum_analyser.h +++ b/radio/src/gui/colorlcd/radio_spectrum_analyser.h @@ -27,7 +27,6 @@ class RadioSpectrumAnalyser: public Page { public: explicit RadioSpectrumAnalyser(uint8_t moduleIdx); - void onEvent(event_t event) override; protected: uint8_t moduleIdx; From 5cb1278cb3c0474c8216db8badb5ca6c42eb7c1f Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Thu, 16 Sep 2021 16:17:41 +1000 Subject: [PATCH 3/5] Never leave MPM mode set to `SPECTRUM_ANALYSER` --- radio/src/gui/colorlcd/radio_spectrum_analyser.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp b/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp index dba470ace..c744a99a8 100644 --- a/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp +++ b/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp @@ -270,11 +270,9 @@ void RadioSpectrumAnalyser::stop() &reusableBuffer.moduleSetup.pxx2.moduleInformation, PXX2_HW_INFO_TX_ID, PXX2_HW_INFO_TX_ID); } else if (isModuleMultimodule(moduleIdx)) { - if (reusableBuffer.spectrumAnalyser.moduleOFF) { + moduleState[moduleIdx].mode = MODULE_MODE_NORMAL; + if (reusableBuffer.spectrumAnalyser.moduleOFF) setModuleType(INTERNAL_MODULE, MODULE_TYPE_NONE); - } else { - moduleState[moduleIdx].mode = MODULE_MODE_NORMAL; - } } /* wait 1s to resume normal operation before leaving */ // watchdogSuspend(1000); From 4d71f04dbe5df85dbee754beabc55aeb05bc6e9e Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Thu, 16 Sep 2021 16:19:02 +1000 Subject: [PATCH 4/5] Update header --- radio/src/gui/colorlcd/radio_spectrum_analyser.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp b/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp index c744a99a8..544e68672 100644 --- a/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp +++ b/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp @@ -1,7 +1,8 @@ /* - * Copyright (C) OpenTX + * Copyright (C) EdgeTX * * Based on code named + * opentx - https://github.com/opentx/opentx * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x From c2588efbca9762bf7a122222a4835bb9453538dc Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Fri, 17 Sep 2021 11:15:33 +0200 Subject: [PATCH 5/5] Prevent proto list to be fetched when started in anything but "normal" mode --- radio/src/gui/colorlcd/radio_spectrum_analyser.cpp | 2 ++ radio/src/io/multi_protolist.cpp | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp b/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp index 544e68672..d7d891003 100644 --- a/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp +++ b/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp @@ -226,6 +226,8 @@ void RadioSpectrumAnalyser::init() if (moduleIdx == INTERNAL_MODULE && g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_NONE) { reusableBuffer.spectrumAnalyser.moduleOFF = true; + // this needs to be set BEFORE the module is set to prevent proto list scanning + moduleState[moduleIdx].mode = MODULE_MODE_SPECTRUM_ANALYSER; setModuleType(INTERNAL_MODULE, MODULE_TYPE_MULTIMODULE); } else { reusableBuffer.spectrumAnalyser.moduleOFF = false; diff --git a/radio/src/io/multi_protolist.cpp b/radio/src/io/multi_protolist.cpp index 830f86eb3..029e5cd82 100644 --- a/radio/src/io/multi_protolist.cpp +++ b/radio/src/io/multi_protolist.cpp @@ -205,7 +205,9 @@ void MultiRfProtocols::fillList(std::function addProto) co bool MultiRfProtocols::triggerScan() { - if (scanState == ScanStop) { + if (scanState == ScanStop + && moduleState[moduleIdx].mode == MODULE_MODE_NORMAL) { + proto2idx.clear(); protoList.clear(); scanState = ScanBegin;