From 63383f15c1343014df153b3757022e8745ae0b42 Mon Sep 17 00:00:00 2001 From: 3djc Date: Sun, 31 Mar 2019 12:24:07 +0200 Subject: [PATCH] Add safety and context to spektrum and power meter --- radio/src/gui/128x64/lcd.cpp | 6 ++++++ radio/src/gui/128x64/lcd.h | 1 + radio/src/gui/212x64/lcd.cpp | 6 ++++++ radio/src/gui/212x64/lcd.h | 1 + radio/src/gui/480x272/lcd.h | 5 +++++ radio/src/gui/common/stdlcd/radio_power_meter.cpp | 15 ++++++++++++++- .../gui/common/stdlcd/radio_spectrum_analyser.cpp | 15 ++++++++++++++- radio/src/gui/common/stdlcd/radio_tools.cpp | 15 ++++++++++++++- 8 files changed, 61 insertions(+), 3 deletions(-) diff --git a/radio/src/gui/128x64/lcd.cpp b/radio/src/gui/128x64/lcd.cpp index d800521df..5d86d9a3a 100644 --- a/radio/src/gui/128x64/lcd.cpp +++ b/radio/src/gui/128x64/lcd.cpp @@ -398,6 +398,12 @@ void lcdDrawText(coord_t x, coord_t y, const char * s, LcdFlags flags) lcdDrawSizedText(x, y, s, 255, flags); } +void lcdDrawCenteredText(coord_t y, const char * s, LcdFlags flags) +{ + coord_t x = (LCD_W - FW * strlen(s)) / 2; + lcdDrawText(x, y, s, flags); +} + void lcdDrawText(coord_t x, coord_t y, const char * s) { lcdDrawText(x, y, s, 0); diff --git a/radio/src/gui/128x64/lcd.h b/radio/src/gui/128x64/lcd.h index 3eb08e861..fa950d7c7 100644 --- a/radio/src/gui/128x64/lcd.h +++ b/radio/src/gui/128x64/lcd.h @@ -115,6 +115,7 @@ extern coord_t lcdNextPos; void lcdDrawChar(coord_t x, coord_t y, const unsigned char c); void lcdDrawChar(coord_t x, coord_t y, const unsigned char c, LcdFlags flags); +void lcdDrawCenteredText(coord_t y, const char * s, LcdFlags flags = 0); void lcdDrawText(coord_t x, coord_t y, const char * s, LcdFlags flags); void lcdDrawTextAtIndex(coord_t x, coord_t y, const char * s, uint8_t idx, LcdFlags flags); void lcdDrawSizedText(coord_t x, coord_t y, const char * s, unsigned char len, LcdFlags flags); diff --git a/radio/src/gui/212x64/lcd.cpp b/radio/src/gui/212x64/lcd.cpp index 0ba2ef825..16debad74 100644 --- a/radio/src/gui/212x64/lcd.cpp +++ b/radio/src/gui/212x64/lcd.cpp @@ -347,6 +347,12 @@ void lcdDrawSizedText(coord_t x, coord_t y, const char * s, uint8_t len) lcdDrawSizedText(x, y, s, len, 0); } +void lcdDrawCenteredText(coord_t y, const char * s, LcdFlags flags) +{ + coord_t x = (LCD_W - FW * strlen(s)) / 2; + lcdDrawText(x, y, s, flags); +} + void lcdDrawText(coord_t x, coord_t y, const char * s, LcdFlags flags) { lcdDrawSizedText(x, y, s, 255, flags); diff --git a/radio/src/gui/212x64/lcd.h b/radio/src/gui/212x64/lcd.h index 2528ee7d8..ce19f41ff 100644 --- a/radio/src/gui/212x64/lcd.h +++ b/radio/src/gui/212x64/lcd.h @@ -106,6 +106,7 @@ extern coord_t lcdNextPos; void lcdDrawChar(coord_t x, coord_t y, const unsigned char c); void lcdDrawChar(coord_t x, coord_t y, const unsigned char c, LcdFlags mode); +void lcdDrawCenteredText(coord_t y, const char * s, LcdFlags flags = 0); void lcdDrawText(coord_t x, coord_t y, const char * s, LcdFlags mode); void lcdDrawTextAtIndex(coord_t x, coord_t y, const char * s,uint8_t idx, LcdFlags mode); void lcdDrawSizedText(coord_t x, coord_t y, const char * s,unsigned char len, LcdFlags mode); diff --git a/radio/src/gui/480x272/lcd.h b/radio/src/gui/480x272/lcd.h index cee3e5804..0cb926789 100644 --- a/radio/src/gui/480x272/lcd.h +++ b/radio/src/gui/480x272/lcd.h @@ -132,6 +132,11 @@ inline void lcdDrawText(coord_t x, coord_t y, const char * s, LcdFlags attr=0) lcd->drawText(x, y, s, attr); } +inline void lcdDrawCenteredText(coord_t y, const char * s, LcdFlags attr=0) +{ + lcd->drawText(LCD_W/2, y, s, attr | CENTERED); +} + inline void lcdDrawSizedText(coord_t x, coord_t y, const char * s, uint8_t len, LcdFlags attr=0) { lcd->drawSizedText(x, y, s, len, attr); diff --git a/radio/src/gui/common/stdlcd/radio_power_meter.cpp b/radio/src/gui/common/stdlcd/radio_power_meter.cpp index fbe5f96ab..6c9b90e1b 100644 --- a/radio/src/gui/common/stdlcd/radio_power_meter.cpp +++ b/radio/src/gui/common/stdlcd/radio_power_meter.cpp @@ -21,8 +21,20 @@ #include #include "opentx.h" +void pxx2ModuleRequiredScreen(event_t event); + void menuRadioPowerMeter(event_t event) { + if(!isModulePXX2(INTERNAL_MODULE)) { + pxx2ModuleRequiredScreen(event); + return; + } + + if(TELEMETRY_STREAMING()) { + lcdDrawCenteredText(LCD_H/2, "Turn off receiver"); + return; + } + SIMPLE_SUBMENU("POWER METER", 1); if (menuEvent) { @@ -32,8 +44,9 @@ void menuRadioPowerMeter(event_t event) watchdogSuspend(500); RTOS_WAIT_MS(500); resumePulses(); + return; } - else if (event == EVT_ENTRY) { + else if (moduleSettings[INTERNAL_MODULE].mode != MODULE_MODE_SPECTRUM_ANALYSER) { memclear(&reusableBuffer.powerMeter, sizeof(reusableBuffer.powerMeter)); reusableBuffer.powerMeter.freq = 2400; moduleSettings[INTERNAL_MODULE].mode = MODULE_MODE_POWER_METER; diff --git a/radio/src/gui/common/stdlcd/radio_spectrum_analyser.cpp b/radio/src/gui/common/stdlcd/radio_spectrum_analyser.cpp index b8ab58cbf..9653a2af9 100644 --- a/radio/src/gui/common/stdlcd/radio_spectrum_analyser.cpp +++ b/radio/src/gui/common/stdlcd/radio_spectrum_analyser.cpp @@ -20,8 +20,20 @@ #include "opentx.h" +extern void pxx2ModuleRequiredScreen(event_t event); + void menuRadioSpectrumAnalyser(event_t event) { + if(!isModulePXX2(INTERNAL_MODULE)) { + pxx2ModuleRequiredScreen(event); + return; + } + + if(TELEMETRY_STREAMING()) { + lcdDrawCenteredText(15, "Turn off receiver"); + return; + } + SIMPLE_SUBMENU("SPECTRUM ANALYSER", 1); if (menuEvent) { @@ -31,8 +43,9 @@ void menuRadioSpectrumAnalyser(event_t event) watchdogSuspend(500); RTOS_WAIT_MS(500); resumePulses(); + return; } - else if (event == EVT_ENTRY) { + else if (moduleSettings[INTERNAL_MODULE].mode != MODULE_MODE_SPECTRUM_ANALYSER) { memclear(reusableBuffer.spectrumAnalyser.bars, sizeof(reusableBuffer.spectrumAnalyser.bars)); moduleSettings[INTERNAL_MODULE].mode = MODULE_MODE_SPECTRUM_ANALYSER; } diff --git a/radio/src/gui/common/stdlcd/radio_tools.cpp b/radio/src/gui/common/stdlcd/radio_tools.cpp index 25efb65ed..d74a15f03 100644 --- a/radio/src/gui/common/stdlcd/radio_tools.cpp +++ b/radio/src/gui/common/stdlcd/radio_tools.cpp @@ -20,6 +20,19 @@ #include "opentx.h" +void pxx2ModuleRequiredScreen(event_t event) +{ + lcdClear(); + lcdDrawCenteredText(15, "THIS FEATURE REQUIRES"); + lcdDrawCenteredText(30, "ACCESS UPGRADE ON"); + lcdDrawCenteredText(45, "YOUR INTERNAL MODULE"); + + if(event == EVT_KEY_FIRST(KEY_EXIT)) { + killEvents(event); + popMenu(); + } +} + void addRadioTool(uint8_t index, const char * label, void (* tool)(event_t event), event_t event) { int8_t sub = menuVerticalPosition - HEADER_LINE; @@ -37,7 +50,7 @@ void menuRadioTools(event_t event) { SIMPLE_MENU("TOOLS", menuTabGeneral, MENU_RADIO_TOOLS, HEADER_LINE + 2); -#if defined(PXX2) +#if defined(PXX2) && !(defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX9E) || defined(PCBX7) || (defined(PCBXLITE) && !defined(PCBXLITES))) addRadioTool(0, "Spectrum Analyser", menuRadioSpectrumAnalyser, event); addRadioTool(1, "Power Meter", menuRadioPowerMeter, event); #endif