From 9ecccef3150d21da6414a222e6ff0adcb3811754 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Sat, 19 Jun 2021 17:47:47 +0200 Subject: [PATCH 01/38] Call LuaWidget background() if widget is not painted Resolves #222 --- radio/src/lua/widgets.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/radio/src/lua/widgets.cpp b/radio/src/lua/widgets.cpp index b1d0bc489..a5d3dae8b 100644 --- a/radio/src/lua/widgets.cpp +++ b/radio/src/lua/widgets.cpp @@ -198,6 +198,7 @@ class LuaWidget: public Widget int luaWidgetDataRef; char * errorMessage; uint32_t lastRefresh = 0; + bool refreshed = false; void checkEvents() override; void setErrorMessage(const char * funcName); @@ -270,9 +271,16 @@ void LuaWidget::checkEvents() { Widget::checkEvents(); + // paint has not been called + if (!refreshed) { + background(); + refreshed = true; + } + uint32_t now = RTOS_GET_MS(); if (now - lastRefresh >= LUA_WIDGET_REFRESH) { lastRefresh = now; + refreshed = false; invalidate(); #if defined(DEBUG_WINDOWS) @@ -343,12 +351,16 @@ void LuaWidget::refresh(BitmapBuffer* dc) // Remove LCD luaLcdAllowed = false; luaLcdBuffer = nullptr; + + // mark as refreshed + refreshed = true; } void LuaWidget::background() { if (lsWidgets == 0 || errorMessage) return; + TRACE("LuaWidget::background()"); luaSetInstructionsLimit(lsWidgets, WIDGET_SCRIPTS_MAX_INSTRUCTIONS); LuaWidgetFactory * factory = (LuaWidgetFactory *)this->factory; if (factory->backgroundFunction) { From 5e08f1c1b2ebf14692cb4ee3177ff18b3c89ff2a Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Mon, 21 Jun 2021 10:34:07 +0200 Subject: [PATCH 02/38] [color] Fixed lateral cyclic source/weight editing Resolves #290 --- radio/src/gui/colorlcd/model_heli.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/gui/colorlcd/model_heli.cpp b/radio/src/gui/colorlcd/model_heli.cpp index 27cdf9bf2..d01d42cf1 100644 --- a/radio/src/gui/colorlcd/model_heli.cpp +++ b/radio/src/gui/colorlcd/model_heli.cpp @@ -56,7 +56,7 @@ void ModelHeliPage::build(FormWindow * window) // Aileron source new StaticText(window, grid.getLabelSlot(), STR_AILERON); - new SourceChoice(window, grid.getFieldSlot(), 0, MIXSRC_LAST_CH, GET_SET_DEFAULT(g_model.swashR.aileronWeight)); + new SourceChoice(window, grid.getFieldSlot(), 0, MIXSRC_LAST_CH, GET_SET_DEFAULT(g_model.swashR.aileronSource)); grid.nextLine(); // Aileron weight From 4bfcbf7a059f1319f007b68c95e38e339981c8b7 Mon Sep 17 00:00:00 2001 From: Risto Date: Mon, 21 Jun 2021 18:43:40 +0200 Subject: [PATCH 03/38] Adds support for correct Alps EC10E roller hookup (#261) Enhanced roller update (thx to Mike Blandford https://www.rcgroups.com/forums/showpost.php?p=46929617&postcount=9974 ) * TX12 should also have ROTARY_ENCODER_GRANULARITY 2 --- radio/src/opentx.h | 4 -- .../arm/stm32/rotary_encoder_driver.cpp | 41 +++++++++++-------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/radio/src/opentx.h b/radio/src/opentx.h index cc9f4aff8..77e685c95 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -580,10 +580,6 @@ bool setTrimValue(uint8_t phase, uint8_t idx, int trim); #if defined(PCBSKY9X) #define ROTARY_ENCODER_GRANULARITY (2 << g_eeGeneral.rotarySteps) -#elif defined(RADIO_FAMILY_T16) && !defined(RADIO_T18) - #define ROTARY_ENCODER_GRANULARITY (1) -#elif defined(RADIO_TX12) - #define ROTARY_ENCODER_GRANULARITY (1) #else #define ROTARY_ENCODER_GRANULARITY (2) #endif diff --git a/radio/src/targets/common/arm/stm32/rotary_encoder_driver.cpp b/radio/src/targets/common/arm/stm32/rotary_encoder_driver.cpp index 570e134b1..6efe31295 100644 --- a/radio/src/targets/common/arm/stm32/rotary_encoder_driver.cpp +++ b/radio/src/targets/common/arm/stm32/rotary_encoder_driver.cpp @@ -72,25 +72,34 @@ void rotaryEncoderInit() void rotaryEncoderCheck() { #if (defined(RADIO_FAMILY_T16) && !defined(RADIO_T18)) || defined(RADIO_TX12) - static uint8_t state = 0; + static uint8_t state = 0; uint8_t pins = ROTARY_ENCODER_POSITION(); if (pins != (state & 0x03) && !(readKeys() & (1 << KEY_ENTER))) { - if ((pins & 0x01) ^ ((pins & 0x02) >> 1)) { - if ((state & 0x03) == 3) - ++rotencValue; - else - --rotencValue; - } - else - { - if ((state & 0x03) == 3) - --rotencValue; - else if ((state & 0x03) == 0) - ++rotencValue; - } - state &= ~0x03 ; - state |= pins ; + if ((pins ^ (state & 0x03)) == 0x03) + { + if (pins == 3) + { + rotencValue += 2; + } + else + { + rotencValue -= 2; + } + } + else + { + if ((state & 0x01) ^ ((pins & 0x02) >> 1)) + { + rotencValue -= 1; + } + else + { + rotencValue += 1; + } + } + state &= ~0x03; + state |= pins; #else uint8_t newPosition = ROTARY_ENCODER_POSITION(); if (newPosition != rotencPosition && !(readKeys() & (1 << KEY_ENTER))) { From 6f8ecbbb367cf6d1f6f31adc1051d98963b329d8 Mon Sep 17 00:00:00 2001 From: eshifri Date: Mon, 21 Jun 2021 16:35:54 -0700 Subject: [PATCH 04/38] fix color for the HW diagnostic screen(s) --- radio/src/gui/colorlcd/radio_diaganas.cpp | 2 +- radio/src/gui/colorlcd/radio_diagkeys.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/radio/src/gui/colorlcd/radio_diaganas.cpp b/radio/src/gui/colorlcd/radio_diaganas.cpp index f08d848c6..3b24c3cd6 100644 --- a/radio/src/gui/colorlcd/radio_diaganas.cpp +++ b/radio/src/gui/colorlcd/radio_diaganas.cpp @@ -67,7 +67,7 @@ class RadioAnalogsDiagsWindow: public Window { void RadioAnalogsDiagsPage::buildHeader(Window * window) { - new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + 10, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_MENU_RADIO_ANALOGS, 0, MENU_COLOR); + new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + 10, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_MENU_RADIO_ANALOGS, 0, MENU_HIGHLIGHT_COLOR); } void RadioAnalogsDiagsPage::buildBody(Window * window) diff --git a/radio/src/gui/colorlcd/radio_diagkeys.cpp b/radio/src/gui/colorlcd/radio_diagkeys.cpp index 6f0c5f033..8d95ce8e6 100644 --- a/radio/src/gui/colorlcd/radio_diagkeys.cpp +++ b/radio/src/gui/colorlcd/radio_diagkeys.cpp @@ -114,7 +114,7 @@ class RadioKeyDiagsWindow : public Window void RadioKeyDiagsPage::buildHeader(Window * window) { - new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + 10, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_MENU_RADIO_SWITCHES, 0, MENU_COLOR); + new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + 10, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_MENU_RADIO_SWITCHES, 0, MENU_HIGHLIGHT_COLOR); } void RadioKeyDiagsPage::buildBody(Window * window) From eee081e54065f61fbd17d0dc541893379d6c398b Mon Sep 17 00:00:00 2001 From: eshifri Date: Mon, 21 Jun 2021 21:51:45 -0700 Subject: [PATCH 05/38] Fix #303 --- radio/src/gui/colorlcd/radio_sdmanager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/radio/src/gui/colorlcd/radio_sdmanager.cpp b/radio/src/gui/colorlcd/radio_sdmanager.cpp index cd442c3c1..2eef2e5fa 100644 --- a/radio/src/gui/colorlcd/radio_sdmanager.cpp +++ b/radio/src/gui/colorlcd/radio_sdmanager.cpp @@ -33,8 +33,8 @@ class FileNameEditWindow : public Page FileNameEditWindow(const std::string iName) : Page(ICON_RADIO_SD_MANAGER), name(std::move(iName)) { - buildBody(&body); buildHeader(&header); + buildBody(&body); }; #if defined(DEBUG_WINDOWS) @@ -45,7 +45,7 @@ class FileNameEditWindow : public Page void buildHeader(Window *window) { - new StaticText(window, {70, 4, 180, 30}, STR_RENAME_FILE, MENU_BGCOLOR); + new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + 10, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_RENAME_FILE, 0, MENU_HIGHLIGHT_COLOR); } void buildBody(Window *window) From 0adf52fa91c2fd3cb06f379bca3015570a2037e0 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Tue, 22 Jun 2021 13:06:58 +0200 Subject: [PATCH 06/38] Fixed sensor edit page Resolves #292 --- radio/src/gui/colorlcd/model_telemetry.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/radio/src/gui/colorlcd/model_telemetry.cpp b/radio/src/gui/colorlcd/model_telemetry.cpp index e7c02f977..9cc28ba14 100644 --- a/radio/src/gui/colorlcd/model_telemetry.cpp +++ b/radio/src/gui/colorlcd/model_telemetry.cpp @@ -122,17 +122,21 @@ class SensorEditWindow : public Page { Page(ICON_MODEL_TELEMETRY), index(index) { - buildBody(&body); buildHeader(&header); + buildBody(&body); } protected: uint8_t index; - FormWindow * sensorParametersWindow = nullptr; + FormGroup * sensorParametersWindow = nullptr; void buildHeader(Window * window) { - new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_SENSOR + std::to_string(index + 1), 0, MENU_COLOR); + new StaticText(window, + {PAGE_TITLE_LEFT, PAGE_TITLE_TOP, LCD_W - PAGE_TITLE_LEFT, + PAGE_LINE_HEIGHT}, + STR_SENSOR + std::to_string(index + 1), 0, + MENU_HIGHLIGHT_COLOR); // dynamic display of sensor value ? //new StaticText(window, {70, 28, 100, 20}, "SF" + std::to_string(index), 0, MENU_COLOR); } @@ -321,9 +325,7 @@ class SensorEditWindow : public Page { SET_DIRTY(); }); - coord_t delta = sensorParametersWindow->adjustHeight(); - Window * parent = sensorParametersWindow->getParent(); - parent->moveWindowsTop(sensorParametersWindow->top(), delta); + sensorParametersWindow->adjustHeight(); } void buildBody(FormWindow * window) @@ -355,7 +357,9 @@ class SensorEditWindow : public Page { }); grid.nextLine(); - sensorParametersWindow = new FormWindow(window, {0, grid.getWindowHeight(), LCD_W, 0}); + sensorParametersWindow = new FormGroup(window, {0, grid.getWindowHeight(), LCD_W, 0}, + FORM_FORWARD_FOCUS | FORM_NO_BORDER + | FORWARD_SCROLL); updateSensorParametersWindow(); grid.addWindow(sensorParametersWindow); From 78279e0df5f3746533c25a12cffe0a8052ef0407 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Tue, 22 Jun 2021 13:50:47 +0200 Subject: [PATCH 07/38] Add setting for keys backlight Resolves #240 --- radio/src/gui/colorlcd/radio_setup.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/radio/src/gui/colorlcd/radio_setup.cpp b/radio/src/gui/colorlcd/radio_setup.cpp index 9a4d64430..99282ae65 100644 --- a/radio/src/gui/colorlcd/radio_setup.cpp +++ b/radio/src/gui/colorlcd/radio_setup.cpp @@ -356,6 +356,13 @@ void RadioSetupPage::build(FormWindow * window) new Slider(window, grid.getFieldSlot(), BACKLIGHT_LEVEL_MIN, BACKLIGHT_LEVEL_MAX, GET_SET_DEFAULT(g_eeGeneral.blOffBright)); grid.nextLine(); +#if defined(KEYS_BACKLIGHT_GPIO) + // Keys backlight + new StaticText(window, grid.getLabelSlot(true), STR_KEYS_BACKLIGHT); + new CheckBox(window, grid.getFieldSlot(), GET_SET_DEFAULT(g_eeGeneral.keysBacklight)); + grid.nextLine(); +#endif + // Flash beep new StaticText(window, grid.getLabelSlot(true), STR_ALARM); new CheckBox(window, grid.getFieldSlot(), GET_SET_DEFAULT(g_eeGeneral.alarmsFlash)); From 1e73101a43a81607c960d1f0e7c5721f5d4452f2 Mon Sep 17 00:00:00 2001 From: 3djc Date: Sat, 29 May 2021 10:08:57 +0200 Subject: [PATCH 08/38] Set correct channel count for Ghost modules opentx/opentx#8534 --- radio/src/pulses/modules_helpers.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/radio/src/pulses/modules_helpers.h b/radio/src/pulses/modules_helpers.h index c33a433c4..37a8c45c2 100644 --- a/radio/src/pulses/modules_helpers.h +++ b/radio/src/pulses/modules_helpers.h @@ -386,6 +386,8 @@ inline int8_t defaultModuleChannels_M8(uint8_t idx) return 4; // 12 channels else if (isModulePXX2(idx)) return 8; // 16 channels + else if (isModuleGhost(idx)) + return 4; // 12 channels else return maxModuleChannels_M8(idx); } From fb3dc07338067643923237473f1efebaea9e0f8c Mon Sep 17 00:00:00 2001 From: phileville <84094746+phileville@users.noreply.github.com> Date: Tue, 22 Jun 2021 18:24:48 +0200 Subject: [PATCH 09/38] Update README.md Updated readme with info and links --- README.md | 59 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 51 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 5d3851e01..17e6abbab 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,53 @@ -# EdgeTX +

+ + +# Welcome to EdgeTX! +**The cutting edge open-source firmware for your R/C radio!** + + +### About EdgeTX +EdgeTX is the cutting edge of OpenTX. It is the place where innovative ideas and cutting-edge features are developed and field-tested by the enthusiasts of our hobby. EdgeTX is a community project – ideas from the community, developed by the community, and enjoyed by the community! The community will always have a say in what EdgeTX is and what EdgeTX will be in the future. Without community feedback and involvement EdgeTX cannot exist. + +### Navigation Links + +> [Community Guidelines](https://github.com/EdgeTX/edgetx.github.io/wiki/Community-Guidlines) + +> [Installation Guide](https://github.com/EdgeTX/edgetx.github.io/wiki/EdgeTX-Installation-Guide) + +> [Installation Video](https://www.youtube.com/watch?v=Y9OvW9XCjOs) + +> [FAQ](https://github.com/EdgeTX/edgetx.github.io/wiki/Frequently-Asked-Questions) + +> [Reporting Issues / Requesting features](https://github.com/EdgeTX/edgetx/issues/new/choose) + +> [Development WIKI](https://github.com/EdgeTX/edgetx/wiki) + +> [Flasher Info Page](https://github.com/EdgeTX/flasher) + +> [Flasher Downloads](https://github.com/EdgeTX/flasher/releases) + +> [SD Card Info Page](https://github.com/EdgeTX/edgetx-sdcard) + +> [SD Card Downloads](https://github.com/EdgeTX/edgetx-sdcard/releases) + +> [Sound Packs Info Page](https://github.com/EdgeTX/edgetx-sdcard-sounds) + +> [Sound Packs Downloads](https://github.com/EdgeTX/edgetx-sdcard-sounds/releases) + +> [EdgeTX Build Environment Docker Images](https://github.com/EdgeTX/build-edgetx) + +### Community +[Discord](https://discord.gg/wF9wUKnZ6H) + +[![Discord](https://img.shields.io/discord/839849772864503828.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/wF9wUKnZ6H) + +[Facebook](https://www.facebook.com/groups/edgetx) + +[Github Discussions](https://github.com/EdgeTX/edgetx/discussions) + + +## Acknowledgements +Some icon assets provided by [ICONS8](https://icons8.com). + [![Commit Tests](https://github.com/EdgeTX/edgetx/actions/workflows/actions.yml/badge.svg)](https://github.com/EdgeTX/edgetx/actions/workflows/actions.yml) - -EdgeTX is the cutting edge version of OpenTX. Innovative ideas and cutting-edge features are developed and field-tested here, with an emphasis on new developments rather than maintenance and legacy. - -Stay tuned for more! - -## Acknowedgements -Some icon assets provided by [ICONS8](https://icons8.com). From 53261ad067e6f76bb3cca807f9da48458049e9ee Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Tue, 22 Jun 2021 20:36:50 +0200 Subject: [PATCH 10/38] Removed waiting for serial queue triggers emergency mode in case serial port has not been enabled. --- .../targets/common/arm/stm32/aux_serial_driver.cpp | 12 ++---------- radio/src/targets/horus/board.h | 2 +- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp b/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp index a04c16ed8..a3524c47a 100644 --- a/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp +++ b/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp @@ -159,11 +159,7 @@ void auxSerialInit(unsigned int mode, unsigned int protocol) void auxSerialPutc(char c) { #if !defined(SIMU) - int n = 0; - while (auxSerialTxFifo.isFull()) { - delay_ms(1); - if (++n > 100) return; - } + if (auxSerialTxFifo.isFull()) return; auxSerialTxFifo.push(c); USART_ITConfig(AUX_SERIAL_USART, USART_IT_TXE, ENABLE); #endif @@ -357,11 +353,7 @@ void aux2SerialInit(unsigned int mode, unsigned int protocol) void aux2SerialPutc(char c) { #if !defined(SIMU) - int n = 0; - while (aux2SerialTxFifo.isFull()) { - delay_ms(1); - if (++n > 100) return; - } + if (aux2SerialTxFifo.isFull()) return; aux2SerialTxFifo.push(c); USART_ITConfig(AUX2_SERIAL_USART, USART_IT_TXE, ENABLE); #endif diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h index b248791a1..8150ed589 100644 --- a/radio/src/targets/horus/board.h +++ b/radio/src/targets/horus/board.h @@ -641,7 +641,7 @@ void sportUpdatePowerInit(); #define DEBUG_BAUDRATE 115200 #define LUA_DEFAULT_BAUDRATE 115200 #endif -#if defined(AUX_SERIAL_GPIO) +#if defined(AUX_SERIAL) extern uint8_t auxSerialMode; #if defined __cplusplus void auxSerialSetup(unsigned int baudrate, bool dma, uint16_t length = USART_WordLength_8b, uint16_t parity = USART_Parity_No, uint16_t stop = USART_StopBits_1); From c2908e67d236f565faa267d539d4597456484231 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Tue, 22 Jun 2021 20:37:54 +0200 Subject: [PATCH 11/38] [color] Init serial mode properly --- radio/src/gui/colorlcd/radio_hardware.cpp | 26 ++++++++++++++++------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/radio/src/gui/colorlcd/radio_hardware.cpp b/radio/src/gui/colorlcd/radio_hardware.cpp index b5c264846..36f9a52c5 100644 --- a/radio/src/gui/colorlcd/radio_hardware.cpp +++ b/radio/src/gui/colorlcd/radio_hardware.cpp @@ -278,19 +278,29 @@ void RadioHardwarePage::build(FormWindow * window) #if defined(AUX_SERIAL) new StaticText(window, grid.getLabelSlot(), STR_AUX_SERIAL_MODE); - auto aux = new Choice(window, grid.getFieldSlot(1,0), STR_AUX_SERIAL_MODES, 0, UART_MODE_MAX, GET_SET_DEFAULT(g_eeGeneral.auxSerialMode)); - aux->setAvailableHandler([=](int value) { - return isAuxModeAvailable; - }); + auto aux = + new Choice(window, grid.getFieldSlot(1, 0), STR_AUX_SERIAL_MODES, 0, + UART_MODE_MAX, GET_DEFAULT(g_eeGeneral.auxSerialMode), + [](int value) { + g_eeGeneral.auxSerialMode = value; + auxSerialInit(g_eeGeneral.auxSerialMode, modelTelemetryProtocol()); + SET_DIRTY(); + }); + aux->setAvailableHandler([=](int value) { return isAuxModeAvailable; }); grid.nextLine(); #endif #if defined(AUX2_SERIAL) new StaticText(window, grid.getLabelSlot(), STR_AUX2_SERIAL_MODE); - auto aux2 = new Choice(window, grid.getFieldSlot(1,0), STR_AUX_SERIAL_MODES, 0, UART_MODE_MAX, GET_SET_DEFAULT(g_eeGeneral.aux2SerialMode)); - aux2->setAvailableHandler([=](int value) { - return isAux2ModeAvailable; - }); + auto aux2 = + new Choice(window, grid.getFieldSlot(1, 0), STR_AUX_SERIAL_MODES, 0, + UART_MODE_MAX, GET_DEFAULT(g_eeGeneral.aux2SerialMode), + [](int value) { + g_eeGeneral.aux2SerialMode = value; + aux2SerialInit(g_eeGeneral.aux2SerialMode, modelTelemetryProtocol()); + SET_DIRTY(); + }); + aux2->setAvailableHandler([=](int value) { return isAux2ModeAvailable; }); grid.nextLine(); #endif From b1768afc365115a5fc9d9165407349493884ae9c Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Tue, 22 Jun 2021 21:40:47 +0200 Subject: [PATCH 12/38] [color] reset clipboard on page tab switch Resolves #301 --- radio/src/gui/colorlcd/model_inputs.cpp | 4 ++++ radio/src/gui/colorlcd/model_mixes.cpp | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/radio/src/gui/colorlcd/model_inputs.cpp b/radio/src/gui/colorlcd/model_inputs.cpp index 815d709e6..06080ad4e 100644 --- a/radio/src/gui/colorlcd/model_inputs.cpp +++ b/radio/src/gui/colorlcd/model_inputs.cpp @@ -403,6 +403,10 @@ class InputLineButton : public CommonInputOrMixButton ModelInputsPage::ModelInputsPage(): PageTab(STR_MENUINPUTS, ICON_MODEL_INPUTS) { + setOnSetVisibleHandler([]() { + // reset clipboard + s_copyMode = 0; + }); } void ModelInputsPage::rebuild(FormWindow * window, int8_t focusIndex) diff --git a/radio/src/gui/colorlcd/model_mixes.cpp b/radio/src/gui/colorlcd/model_mixes.cpp index 09804edf1..3d534b32a 100644 --- a/radio/src/gui/colorlcd/model_mixes.cpp +++ b/radio/src/gui/colorlcd/model_mixes.cpp @@ -312,6 +312,10 @@ void insertMix(uint8_t idx, uint8_t channel) ModelMixesPage::ModelMixesPage() : PageTab(STR_MIXES, ICON_MODEL_MIXER) { + setOnSetVisibleHandler([]() { + // reset clipboard + s_copyMode = 0; + }); } void ModelMixesPage::rebuild(FormWindow * window, int8_t focusMixIndex) From 90c730d5da12b2f6c781020a803d2849e76a5745 Mon Sep 17 00:00:00 2001 From: 3djc Date: Tue, 22 Jun 2021 10:49:50 +0200 Subject: [PATCH 13/38] Fix pulse timing issue --- radio/src/pulses/pulses.cpp | 14 +++++++------- radio/src/pulses/pxx.h | 3 ++- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/radio/src/pulses/pulses.cpp b/radio/src/pulses/pulses.cpp index 0ec02e49e..7ac4a69e8 100755 --- a/radio/src/pulses/pulses.cpp +++ b/radio/src/pulses/pulses.cpp @@ -268,12 +268,12 @@ void enablePulsesExternalModule(uint8_t protocol) #if defined(PXX2) && defined(EXTMODULE_USART) case PROTOCOL_CHANNELS_PXX2_HIGHSPEED: extmoduleInvertedSerialStart(PXX2_HIGHSPEED_BAUDRATE); - mixerSchedulerSetPeriod(EXTERNAL_MODULE, PXX2_PERIOD); + mixerSchedulerSetPeriod(EXTERNAL_MODULE, PXX2_NO_HEARTBEAT_PERIOD); break; case PROTOCOL_CHANNELS_PXX2_LOWSPEED: extmoduleInvertedSerialStart(PXX2_LOWSPEED_BAUDRATE); - mixerSchedulerSetPeriod(EXTERNAL_MODULE, PXX2_PERIOD); + mixerSchedulerSetPeriod(EXTERNAL_MODULE, PXX2_NO_HEARTBEAT_PERIOD); break; #endif @@ -347,7 +347,7 @@ bool setupPulsesExternalModule(uint8_t protocol) case PROTOCOL_CHANNELS_PXX2_LOWSPEED: extmodulePulsesData.pxx2.setupFrame(EXTERNAL_MODULE); #if defined(PCBSKY9X) - sheduleNextMixerCalculation(EXTERNAL_MODULE, PXX2_PERIOD); + sheduleNextMixerCalculation(EXTERNAL_MODULE, PXX2_NO_HEARTBEAT_PERIOD); #endif return true; #endif @@ -487,9 +487,9 @@ static void enablePulsesInternalModule(uint8_t protocol) #if defined(INTMODULE_HEARTBEAT) // use backup trigger (1 ms later) init_intmodule_heartbeat(); - mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_PERIOD + 1000/*us*/); + mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_MAX_HEARTBEAT_PERIOD); #else - mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_PERIOD); + mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_NO_HEARTBEAT_PERIOD); #endif break; #endif @@ -547,9 +547,9 @@ bool setupPulsesInternalModule(uint8_t protocol) else { #if defined(INTMODULE_HEARTBEAT) mixerSchedulerResetTimer(); - mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_PERIOD + 2000 /* backup */); + mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_MAX_HEARTBEAT_PERIOD); #else - mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_PERIOD); + mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_NO_HEARTBEAT_PERIOD); #endif } return result; diff --git a/radio/src/pulses/pxx.h b/radio/src/pulses/pxx.h index e852de180..90956fe35 100644 --- a/radio/src/pulses/pxx.h +++ b/radio/src/pulses/pxx.h @@ -29,7 +29,8 @@ #define PXX2_LOWSPEED_BAUDRATE 230400 #define PXX2_HIGHSPEED_BAUDRATE 450000 -#define PXX2_PERIOD 4000/*us*/ +#define PXX2_NO_HEARTBEAT_PERIOD 4000/*us*/ +#define PXX2_MAX_HEARTBEAT_PERIOD (7000 + 1000)/*us 7ms frame rate + 1ms heartbeat backup*/ #define PXX2_TOOLS_PERIOD 1000/*us*/ #define PXX2_FRAME_MAXLENGTH 64 From 751bb6127ddbb81daf41c505a215d88617100c28 Mon Sep 17 00:00:00 2001 From: 3djc Date: Tue, 22 Jun 2021 14:16:21 +0200 Subject: [PATCH 14/38] Further protection --- radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp b/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp index e918f174a..a9ee219f2 100755 --- a/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp +++ b/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp @@ -140,6 +140,9 @@ void intmoduleSendBuffer(const uint8_t * data, uint8_t size) return; #if defined(INTMODULE_DMA_STREAM) + if (!DMA_GetITStatus(INTMODULE_DMA_STREAM, INTMODULE_DMA_FLAG_TC)) + return;; + DMA_InitTypeDef DMA_InitStructure; DMA_DeInit(INTMODULE_DMA_STREAM); DMA_InitStructure.DMA_Channel = INTMODULE_DMA_CHANNEL; From 063eef1eeb2d00652c29d20c269c29f07321c143 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Wed, 23 Jun 2021 06:42:30 +0200 Subject: [PATCH 15/38] Updated libopenui Resolves #197 --- radio/src/thirdparty/libopenui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/thirdparty/libopenui b/radio/src/thirdparty/libopenui index bca0e093b..05067daa6 160000 --- a/radio/src/thirdparty/libopenui +++ b/radio/src/thirdparty/libopenui @@ -1 +1 @@ -Subproject commit bca0e093b001596d27cc8297a3ec142a3b42239b +Subproject commit 05067daa62127ae1bfaa0a2f518d8249b606a4d3 From f3a01d7ee7588100cd532daf53beeed32b7c25af Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Sun, 20 Jun 2021 15:33:32 +0200 Subject: [PATCH 16/38] Fixed missing sliders on main screen and calibration --- radio/src/gui/colorlcd/view_main_decoration.cpp | 12 ++++++------ radio/src/targets/horus/board.h | 7 +++++++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/radio/src/gui/colorlcd/view_main_decoration.cpp b/radio/src/gui/colorlcd/view_main_decoration.cpp index 19684d928..f99e526b3 100644 --- a/radio/src/gui/colorlcd/view_main_decoration.cpp +++ b/radio/src/gui/colorlcd/view_main_decoration.cpp @@ -53,7 +53,7 @@ void ViewMainDecoration::setSlidersVisible(bool visible) // sliders[SLIDERS_REAR_LEFT]->setWidth(visible ? TRIM_SQUARE_SIZE : 0); -#if defined(HARDWARE_EXT1) +#if defined(HARDWARE_EXT1) || defined(PCBX12S) if (IS_POT_SLIDER_AVAILABLE(EXT1)) { sliders[SLIDERS_EXT1]->setWidth(visible ? TRIM_SQUARE_SIZE : 0); } @@ -61,7 +61,7 @@ void ViewMainDecoration::setSlidersVisible(bool visible) sliders[SLIDERS_REAR_RIGHT]->setWidth(visible ? TRIM_SQUARE_SIZE : 0); -#if defined(HARDWARE_EXT2) +#if defined(HARDWARE_EXT2) || defined(PCBX12S) if (IS_POT_SLIDER_AVAILABLE(EXT2)) { sliders[SLIDERS_EXT2]->setWidth(visible ? TRIM_SQUARE_SIZE : 0); } @@ -140,7 +140,7 @@ void ViewMainDecoration::adjustDecoration() sliders[SLIDERS_REAR_LEFT]->setLeft(pos); sliders[SLIDERS_REAR_LEFT]->setTop(vertTop); -#if defined(HARDWARE_EXT1) +#if defined(HARDWARE_EXT1) || defined(PCBX12S) sliders[SLIDERS_EXT1]->setLeft(pos); if (IS_POT_SLIDER_AVAILABLE(EXT1)) { auto rl = sliders[SLIDERS_REAR_LEFT]; @@ -167,7 +167,7 @@ void ViewMainDecoration::adjustDecoration() sliders[SLIDERS_REAR_RIGHT]->setLeft(pos); sliders[SLIDERS_REAR_RIGHT]->setTop(vertTop); -#if defined(HARDWARE_EXT2) +#if defined(HARDWARE_EXT2) || defined(PCBX12S) sliders[SLIDERS_EXT2]->setLeft(pos); if (IS_POT_SLIDER_AVAILABLE(EXT2)) { auto rr = sliders[SLIDERS_REAR_RIGHT]; @@ -268,11 +268,11 @@ void ViewMainDecoration::createSliders() sliders[SLIDERS_REAR_LEFT] = new MainViewVerticalSlider(this, r, CALIBRATED_SLIDER_REAR_LEFT); sliders[SLIDERS_REAR_RIGHT] = new MainViewVerticalSlider(this, r, CALIBRATED_SLIDER_REAR_RIGHT); -#if defined(HARDWARE_EXT1) +#if defined(HARDWARE_EXT1) || defined(PCBX12S) sliders[SLIDERS_EXT1] = new MainViewVerticalSlider(this, r, CALIBRATED_POT_EXT1); #endif -#if defined(HARDWARE_EXT2) +#if defined(HARDWARE_EXT2) || defined(PCBX12S) sliders[SLIDERS_EXT2] = new MainViewVerticalSlider(this, r, CALIBRATED_POT_EXT2); #endif } diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h index 8150ed589..bc1be0d09 100644 --- a/radio/src/targets/horus/board.h +++ b/radio/src/targets/horus/board.h @@ -379,6 +379,11 @@ enum Analogs { NUM_ANALOGS }; +#if defined(PCBX12S) +#define EXT1 SLIDER_FRONT_LEFT +#define EXT2 SLIDER_FRONT_RIGHT +#endif + #define SLIDER1 SLIDER_FRONT_LEFT #define SLIDER2 SLIDER_FRONT_RIGHT @@ -411,7 +416,9 @@ enum CalibratedAnalogs { CALIBRATED_POT3, #if defined(PCBX12S) CALIBRATED_SLIDER_FRONT_LEFT, + CALIBRATED_POT_EXT1 = CALIBRATED_SLIDER_FRONT_LEFT, CALIBRATED_SLIDER_FRONT_RIGHT, + CALIBRATED_POT_EXT2 = CALIBRATED_SLIDER_FRONT_RIGHT, CALIBRATED_SLIDER_REAR_LEFT, CALIBRATED_SLIDER_REAR_RIGHT, #else From dc07cf57192c1f9b6bdeba25ff7cbda11db1d21e Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Wed, 23 Jun 2021 07:05:41 +0200 Subject: [PATCH 17/38] Fix telemetry reset menu ... when called from main view 2+ (first screen was fine). --- radio/src/gui/colorlcd/view_main_menu.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/radio/src/gui/colorlcd/view_main_menu.cpp b/radio/src/gui/colorlcd/view_main_menu.cpp index 39bd26b88..569baa0a8 100644 --- a/radio/src/gui/colorlcd/view_main_menu.cpp +++ b/radio/src/gui/colorlcd/view_main_menu.cpp @@ -89,6 +89,7 @@ ViewMainMenu::ViewMainMenu(Window* parent) : resetMenu->addLine(STR_RESET_TIMER2, []() { timerReset(1); }); resetMenu->addLine(STR_RESET_TIMER3, []() { timerReset(2); }); resetMenu->addLine(STR_RESET_TELEMETRY, []() { telemetryReset(); }); + resetMenu->setLeft(parent->getScrollPositionX()); return 0; }); From 78db9bcdca1497832f32681e233c14a345cf6453 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Wed, 23 Jun 2021 08:29:24 +0200 Subject: [PATCH 18/38] [color] Add minutes to GPS position display Resolves #281 --- radio/src/gui/colorlcd/draw_functions.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/radio/src/gui/colorlcd/draw_functions.cpp b/radio/src/gui/colorlcd/draw_functions.cpp index 0b2ca84f3..a0530c2b0 100644 --- a/radio/src/gui/colorlcd/draw_functions.cpp +++ b/radio/src/gui/colorlcd/draw_functions.cpp @@ -324,15 +324,15 @@ coord_t drawGPSCoord(BitmapBuffer * dc, coord_t x, coord_t y, int32_t value, con void drawGPSPosition(BitmapBuffer * dc, coord_t x, coord_t y, int32_t longitude, int32_t latitude, LcdFlags flags) { if (flags & PREC1) { - drawGPSCoord(dc, x, y, latitude, "NS", flags, false); - drawGPSCoord(dc, x, y + FH, longitude, "EW", flags, false); + drawGPSCoord(dc, x, y, latitude, "NS", flags, true); + drawGPSCoord(dc, x, y + FH, longitude, "EW", flags, true); } else { if (flags & RIGHT) { - x = drawGPSCoord(dc, x, y, longitude, "EW", flags, false); - drawGPSCoord(dc, x - 5, y, latitude, "NS", flags, false); + x = drawGPSCoord(dc, x, y, longitude, "EW", flags, true); + drawGPSCoord(dc, x - 5, y, latitude, "NS", flags, true); } else { - x = drawGPSCoord(dc, x, y, latitude, "NS", flags, false); - drawGPSCoord(dc, x + 5, y, longitude, "EW", flags, false); + x = drawGPSCoord(dc, x, y, latitude, "NS", flags, true); + drawGPSCoord(dc, x + 5, y, longitude, "EW", flags, true); } } } From cdd6d18d29afd511dbd8045a247a6643c5a37ff4 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Wed, 23 Jun 2021 12:39:47 +0200 Subject: [PATCH 19/38] Fixed trims display depending on stick mode Resolves #287 --- radio/src/gui/colorlcd/layouts/trims.cpp | 3 ++- radio/src/gui/colorlcd/view_main_decoration.cpp | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/radio/src/gui/colorlcd/layouts/trims.cpp b/radio/src/gui/colorlcd/layouts/trims.cpp index 82dc4f9e3..312d7adbf 100644 --- a/radio/src/gui/colorlcd/layouts/trims.cpp +++ b/radio/src/gui/colorlcd/layouts/trims.cpp @@ -24,7 +24,8 @@ void MainViewTrim::checkEvents() { Window::checkEvents(); - int8_t newValue = getTrimValue(mixerCurrentFlightMode, idx); + int8_t stickIndex = CONVERT_MODE(idx); + int8_t newValue = getTrimValue(mixerCurrentFlightMode, stickIndex); if (value != newValue) { value = newValue; invalidate(); diff --git a/radio/src/gui/colorlcd/view_main_decoration.cpp b/radio/src/gui/colorlcd/view_main_decoration.cpp index f99e526b3..9f876ab10 100644 --- a/radio/src/gui/colorlcd/view_main_decoration.cpp +++ b/radio/src/gui/colorlcd/view_main_decoration.cpp @@ -286,22 +286,22 @@ void ViewMainDecoration::createTrims() HORIZONTAL_SLIDERS_WIDTH, 0 }; - trims[TRIMS_LH] = new MainViewHorizontalTrim(this, r, 0); + trims[TRIMS_LH] = new MainViewHorizontalTrim(this, r, TRIMS_LH); r = rect_t { right() - HORIZONTAL_SLIDERS_WIDTH - HMARGIN, 0, HORIZONTAL_SLIDERS_WIDTH, 0 }; - trims[TRIMS_RH] = new MainViewHorizontalTrim(this, r, 3); + trims[TRIMS_RH] = new MainViewHorizontalTrim(this, r, TRIMS_RH); r = rect_t { 0, 0, 0, VERTICAL_SLIDERS_HEIGHT }; - trims[TRIMS_LV] = new MainViewVerticalTrim(this, r, 2); - trims[TRIMS_RV] = new MainViewVerticalTrim(this, r, 1); + trims[TRIMS_LV] = new MainViewVerticalTrim(this, r, TRIMS_LV); + trims[TRIMS_RV] = new MainViewVerticalTrim(this, r, TRIMS_RV); } void ViewMainDecoration::createFlightMode() From 6126241f0b94e3263d13fa9a06144d7da20d174d Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Wed, 23 Jun 2021 12:45:13 +0200 Subject: [PATCH 20/38] Revert "Further protection" This reverts commit 751bb6127ddbb81daf41c505a215d88617100c28. --- radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp b/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp index a9ee219f2..e918f174a 100755 --- a/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp +++ b/radio/src/targets/common/arm/stm32/intmodule_serial_driver.cpp @@ -140,9 +140,6 @@ void intmoduleSendBuffer(const uint8_t * data, uint8_t size) return; #if defined(INTMODULE_DMA_STREAM) - if (!DMA_GetITStatus(INTMODULE_DMA_STREAM, INTMODULE_DMA_FLAG_TC)) - return;; - DMA_InitTypeDef DMA_InitStructure; DMA_DeInit(INTMODULE_DMA_STREAM); DMA_InitStructure.DMA_Channel = INTMODULE_DMA_CHANNEL; From 68cb9c2d92cb6bfefb79dd8f2395a0e6b0562006 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Wed, 23 Jun 2021 12:49:42 +0200 Subject: [PATCH 21/38] [color] Patch unavailabel global/special function if not available Resolves #295 --- radio/src/gui/colorlcd/special_functions.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/radio/src/gui/colorlcd/special_functions.cpp b/radio/src/gui/colorlcd/special_functions.cpp index 3faf9d9ad..f60ca8a17 100644 --- a/radio/src/gui/colorlcd/special_functions.cpp +++ b/radio/src/gui/colorlcd/special_functions.cpp @@ -384,10 +384,23 @@ class SpecialFunctionEditPage : public Page }); grid.nextLine(); + // Patch function in case not available + if (!isAssignableFunctionAvailable(CFN_FUNC(cfn), functions)) { + auto func = 0; + while(!isAssignableFunctionAvailable(func, functions) + && (func < FUNC_MAX - 1)) { + func++; + } + if (func < FUNC_MAX - 1) { + CFN_FUNC(cfn) = func; + } + } + // Function new StaticText(window, grid.getLabelSlot(), STR_FUNC); auto functionChoice = - new Choice(window, grid.getFieldSlot(), STR_VFSWFUNC, 0, FUNC_MAX - 1, + new Choice(window, grid.getFieldSlot(), STR_VFSWFUNC, + 0, FUNC_MAX - 1, GET_DEFAULT(CFN_FUNC(cfn))); functionChoice->setSetValueHandler([=](int32_t newValue) { CFN_FUNC(cfn) = newValue; From efc947da63e8d83e2b702b434a19841843cb71b3 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Wed, 23 Jun 2021 16:26:40 +0200 Subject: [PATCH 22/38] Changed "About" screen --- radio/src/bitmaps/480x272/CMakeLists.txt | 6 +- .../480x272/default_theme/mask_qrcode.png | Bin 0 -> 20412 bytes radio/src/gui/128x64/view_about.cpp | 137 ++-------------- radio/src/gui/212x64/view_about.cpp | 126 ++------------- radio/src/gui/colorlcd/CMakeLists.txt | 1 + radio/src/gui/colorlcd/view_about.cpp | 149 +++--------------- radio/src/gui/colorlcd/view_about.h | 31 ++++ radio/src/gui/colorlcd/view_main_menu.cpp | 3 +- radio/src/translations.cpp | 42 ----- radio/src/translations/cn.h.txt | 49 ------ radio/src/translations/cz.h.txt | 57 ------- radio/src/translations/de.h.txt | 57 ------- radio/src/translations/en.h.txt | 65 -------- radio/src/translations/es.h.txt | 57 ------- radio/src/translations/fi.h.txt | 57 ------- radio/src/translations/fr.h.txt | 65 -------- radio/src/translations/it.h.txt | 57 ------- radio/src/translations/nl.h.txt | 56 ------- radio/src/translations/pl.h.txt | 57 ------- radio/src/translations/pt.h.txt | 57 ------- radio/src/translations/se.h.txt | 57 ------- radio/src/translations/tw.h.txt | 57 ------- 22 files changed, 81 insertions(+), 1162 deletions(-) create mode 100644 radio/src/bitmaps/480x272/default_theme/mask_qrcode.png create mode 100644 radio/src/gui/colorlcd/view_about.h diff --git a/radio/src/bitmaps/480x272/CMakeLists.txt b/radio/src/bitmaps/480x272/CMakeLists.txt index 32e10bb5f..0563ea339 100644 --- a/radio/src/bitmaps/480x272/CMakeLists.txt +++ b/radio/src/bitmaps/480x272/CMakeLists.txt @@ -26,7 +26,7 @@ add_bitmaps_target(${BITMAP_TARGET_PREFIX}_calibration_bitmaps "${RADIO_SRC_DIR} add_bitmaps_target(${BITMAP_TARGET_PREFIX}_button_bitmaps "${RADIO_SRC_DIR}/bitmaps/480x272/button/alpha_*.png" "4/4/4/4" "${BITMAP_ARGS}") add_bitmaps_target(${BITMAP_TARGET_PREFIX}_alpha_bitmaps "${RADIO_SRC_DIR}/bitmaps/480x272/alpha_*.png" "4/4/4/4" "${BITMAP_ARGS}") add_bitmaps_target(${BITMAP_TARGET_PREFIX}_alpha_calibration_bitmaps "${RADIO_SRC_DIR}/bitmaps/480x272/calibration/alpha_*.png" "4/4/4/4" "${BITMAP_ARGS}") -add_bitmaps_target(${BITMAP_TARGET_PREFIX}_masks ${RADIO_SRC_DIR}/bitmaps/480x272/mask_*.png 8bits "${MASK_ARGS}") +add_bitmaps_target(${BITMAP_TARGET_PREFIX}_masks "${RADIO_SRC_DIR}/bitmaps/480x272/mask_*.png" 8bits "${MASK_ARGS}") add_bitmaps_target(${BITMAP_TARGET_PREFIX}_slider_masks "${RADIO_SRC_DIR}/bitmaps/480x272/slider/*.png" 8bits "${MASK_ARGS}") add_bitmaps_target(${BITMAP_TARGET_PREFIX}_layouts_masks "${RADIO_SRC_DIR}/gui/colorlcd/layouts/*.png" 8bits "${MASK_ARGS}") add_bitmaps_target(${BITMAP_TARGET_PREFIX}_fonts ${RADIO_SRC_DIR}/fonts/truetype/*.png 8bits "${MASK_RLE_ARGS}") @@ -35,8 +35,8 @@ add_bitmaps_target(${BITMAP_TARGET_PREFIX}_volume_masks ${RADIO_SRC_DIR}/bitmaps add_bitmaps_target(${BITMAP_TARGET_PREFIX}_themes_masks "${RADIO_SRC_DIR}/bitmaps/480x272/default_theme/mask_*.png" 8bits "${BITMAPS_ARGS}") add_png_target(${BITMAP_TARGET_PREFIX}_themes_alpha "${RADIO_SRC_DIR}/bitmaps/480x272/default_theme/alpha_*.png") -add_bitmaps_target(${BITMAP_TARGET_PREFIX}_bootloader_bitmaps ${RADIO_SRC_DIR}/bitmaps/480x272/bootloader/bmp_*.png "4/4/4/4" "${BITMAP_RLE_ARGS}") -add_bitmaps_target(${BITMAP_TARGET_PREFIX}_bootloader_icons ${RADIO_SRC_DIR}/bitmaps/480x272/bootloader/icon_*.png 8bits "${MASK_ARGS}") +add_bitmaps_target(${BITMAP_TARGET_PREFIX}_bootloader_bitmaps "${RADIO_SRC_DIR}/bitmaps/480x272/bootloader/bmp_*.png" "4/4/4/4" "${BITMAP_RLE_ARGS}") +add_bitmaps_target(${BITMAP_TARGET_PREFIX}_bootloader_icons "${RADIO_SRC_DIR}/bitmaps/480x272/bootloader/icon_*.png" 8bits "${MASK_ARGS}") add_dependencies(${BITMAP_TARGET_PREFIX}_bitmaps ${BITMAP_TARGET_PREFIX}_calibration_bitmaps ${BITMAP_TARGET_PREFIX}_button_bitmaps ${BITMAP_TARGET_PREFIX}_alpha_bitmaps ${BITMAP_TARGET_PREFIX}_alpha_calibration_bitmaps ${BITMAP_TARGET_PREFIX}_masks ${BITMAP_TARGET_PREFIX}_slider_masks ${BITMAP_TARGET_PREFIX}_layouts_masks diff --git a/radio/src/bitmaps/480x272/default_theme/mask_qrcode.png b/radio/src/bitmaps/480x272/default_theme/mask_qrcode.png new file mode 100644 index 0000000000000000000000000000000000000000..515f1b395e329ca47f502db50fc091cad0c41af6 GIT binary patch literal 20412 zcma&Nb$A=kvaV}pX2yV-IcAI*WoB7sW@cu#}s64cwM@9Z9-muNA(@u(krQ$LcSTo_k7ardUej5 zipf{Uc`)*;`012KaE|=u6yQL9Lff%$L2i`&{62Mb!F8E4M_#kq(51J3)Kxrsem2ew zMELylaA_94!$ff`bg{b~)|*3ljbu0a;{85;b)viyzjZcuvjJY8D!xAZ{2sRT?o3m& zzV*fTYR@#)?*0Aj!sqSv@XOln#W~4R)0g*4FToB!-^{A_O*iiQ&LhE%uOW<#Iblzp zIL{H>3XS}$LrCxHZ(}dIXIqn96OAB@#OvRdnL9!br>3aWQ^s$Uc0nm+&o`9a~DJ4^FGreslc+v#Z6|b)Kaa9hcdyis5DOqAFIhSr->`L#SI4lHR+I;5}(n zHyUruK%#)$%AHfXxk>EU+%;(GfI&C_CXtT|s!KEy^R=`bo)&IVnQYn5AXc|a)>IiO zOx8Aek&NM7(3P!dSkRY>Vr*EKDXVB%T>F_P6%9NuT-x-!0NT&>q`>EpwHrkfnr2!Y zYMEx)-0|Y=*3FKVmA7W-_{5O9t}jRExo+6p3&aYA&q{yJaXhvt&bgwpwDX?(zIDCW z)bUEXr7+RvRo?aTJf%3{m!(~uG)sKaq`Fto;H%d=mT8hj_!%$psJ~1BA^?rAuJ|!I zaBk+;cy=r(inn^Syl+MS^B`i;o|x}zQ{D5)zAq1V+N__m?as-5X6$*FgQJ4feOS`- z?Ygg%rOu|Qz|0DwG-^YsqWG)(9D+@|&14E@&|U4?Rd9zaqRnB)T!c-S+x&Rv_zJng zNQj!!O?b$`?1h{}8qF0b>i$H`htbg^$;%jgf#i`Lzv*U}Ha@X&4 zjBxXC*U321s^VwBZUK^eoqyQ}qk_Dz-tG3B;F~&~7RvawrJs7%9G@QN9J7zykbBAf zQiBDI0bN=+^bgvLOZlCtYBtJK(RPG2=QAFK?L#S#lLK0lv8TZqIo!txH41hFl#cn! z4z>#pk}lQH+quP^ooP-AT2~L_4(enT>e)ahuk8poo|Svcb7I+nzM?^34);rxm_4gg zi_-n*MfXAh5iK(Ry3Ss#qtBVAi)&67&mK)iHldIH;s19o@#mx^L=uen-FMeOl?(#PH>N`iSxmzq6*K zuvXeR+%5>~d=#)QMQkA97C2MmEhS!$vVqjSWVgH0Q~FjnIP3*-=w7k5=dLf-pF0w) zGPyjSLW;(5qP{zz{QeE2``OOdO|;OxyY8kpOe2{|uxv5S>oN9QW*0u%eFEB~Yn6su zxL@K1^UUk(NDF->iDJyEx$T?R$m^$OKPAc~->x4=OA;%IzHJn=@$^EBh~j+{Zdom7 z{fkC47}sn{s1X8zNyvc!v#J!JpRs|UsGopOaCS867=E9Wg`hVi|ii6~0nA%y0r-PgBJX%M?FW;#x7==AM&4dn?f+Cx=Tnfk_{`v>eZ3wdv1jo} z&8*?t<0()+bCFqH#53KBIW0Ncx8ocBoo663`v7TcANqQQaR{$Yp(Be_qV^xUnTIBSm5ZJ-J~r=6K>)QrO#S0q~;Bz6;{gbABFYsXC++M^6$hi&Gzm_hNWtm0k$H^<^Z^Vs$i)9{uBq3o5Oq*1l8oA z9sJgzm_=Ko1F9S@6`vb?`K`P)Ew$VsShf@GmK5TvI}l2Fn&8t5dz1GV2&s~FavL9{ zsh?e7PxNXuAfe+=L6SW-bp(OZW4=7Gbf8+5wKD8)uI*Q|Q7imrZb#*q5UhC>$dAm` z1z^BLhV3eHC7ayWtE-j5K6)%yT@(FUte^}(!AHdPQeO>k>LI&4Ugg0XIox=W^kfbt zU8B%VBZs1j_#uN)Og#s&RmefHov!lG`&0$pY0%1-cr7Z7)DB+lH{o2Wj@wTPW9Scd zUuS8*QZb{|LxLe!do;)F*KRv2?^;sV3v}VzBAIw5=_##?(9HDP%AbwA;zJ_c5QKr+^V7#t_vgQoWTFv+Rf@*k2~gZ*2*Djjc8AC|b$XVffB44iPq2 zGFZ8y_;T-uj&Y3FdsvlaTLyv-S01+s)SmY{~ip;?mrODA{a_JXwHjFt@tMsv&A2o ze}>*)JU4eFBBg@e47KV2_(Ol}jyIxIUKOn4KZ{0)7jlT@%S$WEL}~lYn?(on!ItyG z=TBs`hSBbm4(@E{<)otWAla-RTtESXU>d_>tOqZHLQgtj zyp4o_D-}vKD2U&^&(Houl&j4jNjS->_Ero>lnP$9O5G(_<+oLfT7a)L&zR!T=}lKfEsO=bwqxUD*p zhRv+lta95o$a?3wEd5g>I$$xS84V|`?`8miZ1TjV36>iA6b>whEDwrlWX~OkgFP5y z_w`Grg4Jj?MG^yfW7mV5J68uIMX9%HO>)m-B~lB*dil^wrh_q``4Xb7@+d+vMR`yo z?0@a<3j2+r*&il7dw2$yIyf2!QOqG>_!kRE^E~~Z%{mm*S1JWamw0E|?mS}P z2rZXn^U~^`%t5;31}6d~4jisC!)Y$yBoq?R6>`3`gZ5Z1gD3^gD~uRyG{;^6)5N(A zImg`5^!m{7$y!K(pQdz9xsl{8#&}VKt3;w}*S>dDk#;eOA&>veCC$SOr-{W54-V^7 z$csW~>IWR!Z7)?VppYU>AhxAW4d`0KWbBmjJB}72jszBC1P15ZK=`i{d9%F^mk2K2EsbiW26ECxyj2naVjKAmno3x}(2=9yXxR0n8W1$Rcl8F3gv^4xt&>*FIm zLMV#YHbzKDTL`Jifhxhws{M)-IEW2D9YFC_Vf{`Ti<`^`Qi2QqSih#eo%OrDFYWf+ zHu($e5|P!NRUeH3R})+w`&;0JfAAvgM<1$1Z$=b#XTy4^K}ISrSj7-AGGttc7lr-Q z8xUc!Kegy`O~Fw6<0%x&jh;7+*zfFf<<%Lc{Tk?vJOlj`$YN7B1+S{qGbpXW&E*r` zuj`+^STD+$wv#uXAFCAC%o2((gq|ON$bIv{ODbT@LV``F;JG9wfOBHt-9bNz~O zV(sU?GX9p-C4uHF$nBcD@q{NpaN+#=^3&7ry4~}w#Cc#Idfv*gg`4d2Q#)DK9BQq< zUgOW37l@Dv9~_M5KBR`KfFoDbdll2mP81)VGmX-0Sn>1!kc$1@e9S(YLqImL2nBI&8vHA4c^JUvJ0 zVdW^OpsO_vSvS!P`VjF6wBVxyz052nU~DUW10n9fu&n~rWDU6lc(tScm_|TEM|zPG zS3cw-2Q_y->S6bD;@E5Xa3@V~xkyagW%`t7HgeyyYecme{t#~i z=GI_;_q0NBGIvKYRTYzT>`(BKM>|GL2y2!N+|9FSUd{5M(4jk(mF|9|uEJ08;fQoY zi=mfD$cij(NK9gEQvt5MmBv4DF^@_&wJF#-p(90RHC%bS*_r8g*O@{+O?(*$&L_3- zP~#$*cjIAw$;Ceqv9~~s8_PT#7Hlx663E`E_lT20b%i3derPMTks_%|rs)r}(#Q8T zKDBCTRPi51z%Hq?4~+}+UQ}w&KSH|uZlq6Wfe zK?uY*>Te=it@q7YsVb8UPYz$H6Fc<9-inAACYA{f*OFW4OO+<%WE!PpwQ6I?C3mac z`Fne-ULQdRckkJoa)l=PUj+gWBZa5bkSgqqKC&ErGYaj1ykLdGlXZtdSKbU|?6x_v z7ls@yKfB6C!$V)22%ZaHj^PL(a1X6fCd@-1=N8@)61lGKU$AAsiN?BVHtIKxrKcaf z)1`~9siP($N!b-0t@)NBheu;!8mxTJcPB6e6v?-lUfKT%-cw@}H+uZ!A$9Et&qI12XmZ#el$gBZn;`I=_DH%#5IX!;LTi&8V8s`V zhbWYjPa3uz!lFd3O^2c{=X!BBFzlkKP~dUG{%r5KM3Beko!bybP0N6Rc0g`ku*5o9 z5W3EY0utdX>Z!>Xg2xH=_E1#5NT}A-cbXGFd%y+^v*AZh~ScS=Z^6@_6PR zF8>>`&=e*2qx=tVx~pP}5C!1(qhGl~jcHbUjwF{1AG0Hz1dvd4knmbj8NKqxN-zh# z@as0G?{6?iicis%Zy$niyQL1dz6*0q5^4tQ`ohdh`36aj06dT>f@sme0n>EWsOi(v zbP>owFc~gY983ztLy5*+F0L^Xc&pLE%V@CTb#ToBQ{~o`v$MtzzVn;O6!43}vbd;P zfMYa7O?ByGFr(#V;DM7l?K#{Lrx24{gZTgD=Kg}S7chpoIx)t|ZsRMI0 zc{zl4YSj1$*z#xY7``33KOTr*bOVfzDztw%TW-;8pRR0ZTKk|}*7;Sb6sXFLjGwh1 zSs&+r_V4Xl%WY&MI-!qeS?!2#R%#sQcp9~06vQvDcbE}qclQZ^=jDeDIX(Ig2t|2+ zZ_EFcj{rF~T>UY6OkL8N$y!V&`-}a#(zG%-5kim)WnN9~GHtCb=luOu)jL~c{cM5# zCn8x5b`;z@4zg>Gp##h&Wh~hge%eqT+*rwB+{R!&)v8tmo01Q9XW7ar*UMb(FJsuPld_X8FT!m)}P zt#97?U^W5OHf80K0e7|iI(1SkG~i)_K1v^-4>P4es%biI0a=nPY+iAK06yL<3W>W!SViN7P1A?pp2jF zQ;AVf^*yZB9xJC738rtReGOtCnwK`I8tXdd*o`K5kdoZLQjVsxZ{55rQ1fgDls?)* z=)${4T5TdtE4pylDiuPgXElIS*;ZMi7CKWt@>n2b&#kUM9Rf==iGAVuyE2&KiaoZb z*_%w)%UBGjD+1i_@11Q1vE9=u)^4B9Qr*UrjmM@|&;&;*9R!{3e#ct&yrH}*?WzD{ zu8d)B=Z`Lzgn65>86o2$t3odpO}y-`J;^`u!CwW!upGHw&qseV(zjcA`I049Rdr|B zU*IAWqFY~ia&YD_M11@#718ja33ggN2EG-tLS^Iq3>K#;Vw8p}__lOtWG%?fbv=~W zo>x&@vhfwFTWwofHC(==)H{CY!at0CKfqBUWN&3{QXxNtj!6F$fyJpz;oGY^W-pcj zn={rPy%Pi}Ie1y+A-;mi-2FF&L9#_7!jVoSOoYa6XL5WfG3kz2J?489jv0=e@?8Or z3yRWA(5?4nh6vwd`Ec3Mu#f6GzKU+Lm3k{f>DS+eozpdSN}1qOPjo#v*UGCDD&etE<7cqE z`wGuD{4PZe7z=-~-|t$&c@T&Mln5yGdySE8far?xGk@R~$KqN{4+r3;T}gf+8x}A2 zM8ih))=>9>eo=Gad08=y#XREHx*gV)+$5l<+gIbGej_6sdJsyXe#(GXNI2w)F+2}0 zDAC_W;>!8~VmI`@1|~!SPj^6_#_%4mABQ7Dy5M6e9HJXN)$Ymvj=TYX0<`VYjy0byrAp&V}F9(|F9Zo7hc z7xw}Br6Z1pFy^v)9zK6+n6}(kU6cxk$j^K)=A((ZS>ju`c087vEV9jI+1>3?WX3wy zA~ZWaP}{df61P1H2h9-KlCNs@JXRz8vFVtO?ZS0{hVb$b0dYA)J}t~0_Zs0*nS6Dl z1yy~Gj(R5nuwo>*x}TQna5|XN*sFNKzpR=(4QZjoBKDg@17&3s^cxwVj2^h45SvNua0+KY)!KV4cfy6e2+dmOkeumzy+L=u%fO|8Kz>Q`2p?`$$fC|ePo_H zyC3fdeEg7R=zrz?ZcY1gEF%3AS^ak=;vQG zDWz~Jp-7RAr|#;p^DOrIp{EUs_BOTiROcxlN#EN{+4!~oyI|Z+5-Z|zGI6SU!&HnL z*TMeDu1L~kU3rub3xM0$>KA%$kp>qoA*Qz$ZGEgIVznZn6Apt|HZE`-b|KC~1cAQN zT%LcPmLN4B4msiTOXfm)(aQ*lR{fk$3TcqeZ;T6c&@i5|xf4{!){lnq9wZhPXv5{p zPfAcksFWVv6C<$S^Nh9-@eP;A! zoCT(_#+MXjl%Bj*zVdXMv=P^FDn^@UlW20c7u=9GTp7YQC>|$Q06pt2)Rad)~#_S$MEsAoP681=9G5*t41rK=xn~%+sc+~ShP?Dz|DfctgiP*nS`FkV zZdqw&;cmg)Ubxlke5taXR(wP|#1N&l`AaRKA5iA%U5XUYk+W06J-v>`fPejAD}+!b zoye5t1NsLsCmCNAWJH3qNxZx*Lm&(^rMf_?jE4zKfK4@a2&$!q1azmX6hEB3FQt-M zY7teke})JAs7711-1ku!2BS)x++*4z@PU7plIB;qCQWekr3_qc2ecwB2EN)P_Qn@{ z)0OlHjbxUfC9_QH@#qBfTL=zB#Fp7lrd5*RDINS) zWHOb-821%v@EvZ7p2FfS`8w`L-b}SM{YTA^cKYu=QRTplGoJN0&n_9{cvJCe@^b8v;0>1kPJY#&^thKUtgM@{@~smW^(PKhWjxVxJ#KQjCZ%;q1$LPY+#Re4GH$fM{AI`YBv8w6w>xmfx-4qvRVxX*F1_ z`fft5B;o5q4#oj7F^`t7ECk_47kj>3HJD!t>yWxbd)G5(v-Sv)G$uchqp34^d-fFp zJbt1*EHc)jDm2R*nk+v~>G7iV0EnI#r)q$FLvLjpJ0`nKDUhsu7Pq8>d}{3oGpUB$vGA?UCwpa(?DV0cg?m z!{ws7*nZJ_U0b!}+;Tf&Q45BTq5Qv(hacp-Br^)bw> ze;6kCl8JZA76-0RLPsLredx-fk4LH6qF?;no!*{e6g^7NqEk%QV7w>xs5+8bEw~X(BWZLdv zqHKHP&PjdGg-lfL{mc6NBgFLa{ZDS>N}0URrIaUt@4G+vHdO9Gs6;7b;1Dkyw- zPwgyhv~r>2STR(LCnELo^jVfRnZZa{(RJ?2E1gBt6pkUw27X`tSyV}8iU$-ma&X6v zk(bJMslL&Y`5*ME?Kt_62UGZZrN`fIDZJYq;NIc@>SE~qR*7)}bcw-c19ufer4}NX zngS<_3f-wn3@%7i<|GkmVQ_HrWOpgcbd)Qpe4h+(JAIK@vktr*0sDwPD!rw42OiyH zyQ{=s^z8RkZ*9GRau^Ey(dx+(KFK(HgqN=+`6ZhDLLKQvNSlb3_}`-ZmP00sCb47z zSxY+Of}pY{JF&z-d4N{FY7MKc8YTKV9llaD<^)OUElyyd5aoTPVJTNfr(qB_+!qg7 zm!w-QPv!ua@-%|YO+|%^QyGvm*)Lj(J5$fg5_kO(-Pm7%%X8S9+X$f%VY(^UjHK*j z_{k13e%-jUv%s~sYioPO-%8i86)B&gwGWJq+RCeo_*IB*l{1GqKU`1XIp}I=QN?zI zFO}trrBZE;5vvGOOQ*t<(rvPBG;-=KDEMgy;8hp>WPK|yODy~tJXto8kN@J=1Gjs@8Z`A2 zQz3{L&KfP+WH8Tx^J}uD;{vEot$b=$@@Hy00m} zI(I;L1LRd_NuW@5>$^O~>IVS-+)hS1r2U~ami)U+N!jDG0A?+ZosGPw9f^V-eg2p_ z_jQJLag}(Sb)y2}jxwc^QW)=pq!ug>SP`@`A4m*VE+|Dx$vjO=!54c-(ZTkEQC}cg zeq=1tw^Z}9m#Qy_oS|o#F6ag;tLdb!9**t7^s&zG3?%if*L6?ST?RFCXCfSGd?PTI z=0ythrn~9SuZ#@G0HYD{s?5QAHyTOd0C}aPDIg( z$4Y?ud1b!*+mYDm&WcoMc}%Jmv$_FQeu7rJ=BtH-fK>)Y^>k6FfW)^J+dhIX$YEu+ zGKGXvm?@-&#w^7*lMV$t9p5A5@n|a}O}Bil*7Z}N?~aQU^E>6giq>P<#%gsxv{$>L z4kL*Y$}$5rNs(4z`?tES{tcs2IuFmym?-; z1+^qh7rP1WWw-4TU)U}AO#pw&n!AQ%xWDO+qCkd1*eL1`twazN2=g#i$?_s6H9;rA z&soNDgvS6m)Y1Bp?27c^2d-pgGG}86m`Cy>^4Xq<{R-6lHN|u=!`!>f{DH{)bKcVe zxJXM*s~$yFt!r3HP$>0uwN{Z`7=P8nCxgBuSX2Z%r6krFj$B=q^pLQw2f8)6+zmqz zs=o?JB4sv2LM{J&{pGW00Uz&I_(@1p*x)!XNMi?F2*L0J3lhJPQCIEK$7S*ow3fzU zjBFUC5;h>rQW+}*>m$?U@Isd61{33w)tdxc1){|B zJAHN5W)=#W-jYdl5%cbB#HQHSh+dKIU5{hxlX(o*c_iLGksPjMr~5U5NJnp~M^1uo zsNvrAa=wV_c!nLQdJ`gaWb~=5IMo*BUoZ^OtFD#Bz7=wusQE#=4p%5AXZdnqd@#y$%MgOA7Tlqic4h2d%l zp!g}C%t={hcC4s;mgk=A}ryoZMnV4|)31sMEsK)^t&io#XFqRPRfo z3AN%f!#KjQyFmzW^<7teOc3~+Ljy3!wREHj6Fc0w=$aT*rdWr=JM^d@Prb`aKEQ|g z)O@7kToEQ=f~iq)8&FeZoNm=(!Fp9c2?NBIjy;BWY91^@CG1{hxMb`fgM&{7g(RC{ zCsZw90_0F?UrI+$<97DVg!E|@ORxx56c?`{fZb#x9={bIu?Vt5M7uaY(VpjF=yifv z-8~-{xF$5XQL;2#^}k`*b`-0I4cGQYEu1L-svk`<03>s^fXm-Jlsu$TYmFvU#hcC; z)H)E6l%2k-9?1dXQND#3kPm#dZ@`u+IAnSmCPSi)-jto~EWN5%kiZ_)xFy(BdZ5v9 zN>QP)OreD7(XH8xnd5#L`~* z{dIDXZIQDdr4DVMANAT_96)6LL3Y<=$Rf;c!m#)CA)xD8JkaS0d`qAp-UDM zasIe@g?XA$AMk8sLR%b)A6WN^zbnO`R`PhzjmmP5S?UF{RIsOV*JRK1MjfQLSp>@A zGnx-G&#SUH9{bk?QQJWncRFv4=XVv_Yr@(FGEo?2%vCoXqLqZ$TG)#xpbtnSQ<*}3 z5mgyo9O4u`0w8_-e47U@!5WKqh_Z?%Rg(iGKl@ycNw_S!fN#2qoCDpY5}Nb#dFkU9 z%S#n;v3kjwe~A`m$MtXy97=Mp5vQnlqCgo^em~U9%!iYUTT4wI!7N}77xL31Esl3o z{QAN9qj`~%N}srBKDkR@3FbU%p%{RiOtL{gT{BG*0I|ndi7q^^B_obK#XXs@)}!ee zqJN=J8M#S2S{HwB+*TQ$b!^m`KY$6Ry#^(S~$R zV353Mu=m@9JlIeNM`rq2hQt#-?h(IL67E*1hwJR(vot8;)9}FS7g^u@3Ub1Yx=@^p zk2RwUv(G>94g9%qu}iD)Z6P^$vzi$@dxpc%#2k#62`@(>MD*vw-k>TleASW@OC0lc z6ku<+T#*N*XB&=6D258wifu-|B^@?wNrf%M}k7mqSR4KJT#D>G3B zP9WQ!PB$%%9XRUbI|}&5!yV1YhG#$c$0L33d&jF`S`-Acwz9sl(oq(+vAf z8<#TI>|(v+E%X)q&2QJ)s_`50T&S45>`{F=SDuc^CETs|RVz~V2BVR;E#hABS5^cO zaoC?6fv|4F#CSh0i$F8P`;_^v+DM1;`~(<1N6ECMwRd7Lb|r%rAtXJ?uXk&iLcDVe`*JHgmE=D};rKoP`!u_?kXc zD+y;0@$m^jlbC~3@AO8gHh*J((3_dJnX^nDTk5kKjFc~%(M+STPQR2{Sv9OM&8sYZ z$$pafQcQxPSJgFrTULT`E;CJ@ZuU`+z03|RDUxE5Y`us2#}5jftyfwMxa44|>hh%N zDZXQsP`a|8N6Hhi$0&nA4r*BNq!AXG=Md!({YI!OIyVcc8PKM(k%!EjaAjMvjHAoO z@Mv})d9lXxNS^VmS~hBlKFe0!2+bB`%Oj!5NUvp@%@nY95PW97=<)IZMMRGzp+ zk#Gkaud34_4$3oDTaCTiZxUBXQbEk_wE>(ey-4D)8LwQt*5IgLm_XA8pe#n4B;=1z zN2F%kGrjZTV_%+jAu3z>7!~^v75t6{dY+L5srdOc(`VFNQbq#|Ttz@l%WgxW{xgqk zveC0DM)H|pav5t_yj?CMFxtZ-7&=whvU59YGX;(|E3;tdg<6TRnabB~qcPUNv zEn)91eIh+IB8+ZxSqp`vsM6k2rX1RhDDI<Z>pHW zF6Lu*q7lN>fv~~^IP#%) z7BS=j8k>1y;Xf|vr=8@P_mC@QITT~qRdNMZge&1y(ViHkV%F%SVy$t@G1=1{+IDL4 zR6a(b*ARgxFqC5i zOfF(oU)U||J-4G1-{-R1ea2*))%^s~ejDP4ifvx_nHaF3>nj9e^0#KFN$x!)i--Jk*Xk?(F|1rLX8V)3UESFI zi!BER&7o=A#oRLho`zO? zs_IDimdi5W#K_B6Gvs2j!4fXIbC$DpL0r-vc#&M+uZNfL?WnCZST`5awc|pnEe&Ik zYC`~M{0aK$S!_hG8Gm9rJTLBgz{~I0Gvij-JudFH1P|DU4a21qGN|*g3;FB>1L7Sw zOO)HK3on24eqqe1q69%t=r5Ax#sFwpP&{`qQr2L!=`BqqsG-Ml)fe`a#%~pIZ{R!l zFQGyBf&-8WTG8O>wpn}5eLOB2AK@`E0PZ4+vMc@)Fr;O%x5`);axF3g^o_WkzZ&j2 z$r~`^V~HXEaHf7KEK~B+MR0V(GB)d&K0{-}0+8hP|SG2OzIrMGi(^QhYS zxL52aWLybwSV-ZVEnher9HwI>pp#qCRbZW)Pc$ySyi->X;Rf^!Vv_?XX=W-br6=L9 z_LF2^QJC>+f#madFZ*h?2~wmPYJ|5IoQt+~YhI;x6^0?*jdc5qKf=p>jnL3X)DeqP z9JNkbqVXkR^kU$GbB`@qL(w|f+AfO=BSjjRb`J4J%g|6tbA;Gky;R8t%11i<948)>va5w{7E?r@5#lmT$*a3Qq69CtI?Pa;hcV{yD;Wgaq3 zF)4-eI4B3JT%-JMNWi+JZyF zJ*Z^E&kpBCJEhD?_3b(2whY?7>*)(|8weKc=j^`KE`xd)Qyq!MyM)6A5}7wh%rknT zrfaA=7lvg@o?A9WD#r3iL|u3s6$c4c^~(NiMbcM#Fk|xOZ(C~>bwCvEbYV%1i5i%h z&;5Dzor6>Xa>V0pYyQy*XY(*mi#)iUKQk!^10?i*U8yA?U7NN|w028}*`!|UMo6N z(yh01f?Jj)N&OTU3~A$iSFEca;W?1|k-T?5jFfY-KgS(L=tl_AAL*JPN#R7;gcVat%OYtf9l8a z1-sjneBd-o#>?K{eGEVQT3OF~(hn2qS z=}VRN*lvdWk_4n$Mqp9~S3jwH6{RNu`$s%{bxG*w-Coi|C!FIbFd6_C#j--(xcJdw z)+JWIozen}49eVx9I`fq1)?-8Wo3hD{E0B)J_ydm4fm(3m*206oO#Kl(ehI@b=4cM zF!O>R9ui9_U3F}>AVv20#~*QDQ|MI=s8zsUGpBDB zw{Um?X7j`4u96txbQ24iymj9%8Cn%9OmuLv&(WdQ~s zbTT!|`^wy(p_lfS~gW75jQ zKCg4gwDu0^S~AMY_|+Oa^CrTW|Ey?Q?IRR8@%ov4xs$x-@T~`>QONuENfMWcPF@YV z-n&KOuO*7P$L}jvT%HqDhPP|c9QRY9KVCVg&l*^Dg_b?8zFQ87s7hu|4x%&D^v{ zOxGSpX=Xa;@N@!G%*vfs?64iB!gJw%u-c92j2?mt=Hhs4LloEhm~dF|JpQUWY*Ns& zS}m+TH{jRqI`egF2yfD2RJ{~bx4C#WStow0#0;<4V?#@>u>dR+UR-q3?k7-;D`Y@0 zk*Y}?Oz^jf^H~akBtdWXRE8VgNkTR|ePTI(CwTsxrm-1=p8b z*caomjIKh~=&U3>rD*h>lU_0+`Sk=345I`-3r4-LCn(!W`}V{|5(@t^Vbq0XAner` zJgGh&zoFFY=2`k{1sQ0%cduqvrtLzpfsr)#<6Ai*{XM-%J3Qlh6%69thWYKxI?({M z@$63p?*QXn;>^r`ciB>by%NAy6YJoVN{lkYFYNlo``Goy-sT|UC()S2+mFg3+fOEQ z$dk$j&zE$+jN*rvbg(x4#i%fvk^g+Vqf*0Q2mBOh`5HkNtWuYa<>)F#OQxH3!~cYp zQp6WZOi{LKBwx#h1%QQLa*Y)FWz|#r)X0fyV%FsV;ZSBOyWw52rL^GN3*YOXv0Kb| z));W!ktJ9Cl+64|<+oae04j=qe%TT%X3kvMnX~}E7?&oBTU2jt z%kpIy5efM+Ug+W#h$Zui2QjtO25)~_Ih_D@=CZ|8*{H+&dnJxSbhCtdXZi)_?-NDl zN(hcc%#F>6^UZH}kQexy-ivq3-2RB1tFsJDWp^8{PM-|MkD~5hdOg>f>*2fdq`&Zr z4;amV=UKf&Cn~0ekOp|8u5Rp1V&mrpFb-=u8q}%zeUSkuPmY;(HjjhY27$XR13)0R zZiDLL3oT19(=NSZp^?c`D7AN(qmHiygXU7u{#J-HV=l767oyhk@G=uQgY>?F-IFqz zgRz9byid!hwwp^eT0dM>kQ8&-@`wCO);ER>HngoI%obJj;#ABpFAE>7h|<(m&~S}7 z$J=Zn_6f?TCej`nLBpvI;Dk zz7642CnT*stFl&g1DUFZ6SSi|k-!x!g<*51<1H?}3j~0^qJH6}CgzPFKEL&GyEti> zE14C$J+5xDWe`e-hGW}E2~irRR#7k}u6|dwrtlqVVtyXCJXYKU3#nIwdABFhAKLd1 zW;pessSB1Dueo?!nbv6Bb2~*Sr>|- zW!}Mlcw)*^m$$ageV%1NVa?X9XhW|pAd=yv;vGDF8 zO95I)r6i`A7+_!+y_e&tMgjVBBBTJ$UMJr_e9!2oikARV07#3NMLpx@{DD=<97OGf zw9(L0(VW(F$>Ivz^SIg;mxt*N zlgRhXdyTUFrjt@{n>^lY0H;;;gBQIn2ihwnOBolQ!ODUQkIiTtLDw(Z&%KJOoLOvX z5`;_Oeb!?r+(a7`u+iFvVYTO|41)suep<$MLcTw$KLi>sp3pMzIqKoH{Ekz}J{2s< zj@psnFdaUlAKU7PMz38n!tn#b?_t&Es<4YRiXNrh@t!hrektH2kF$kh^OZp|{&8iukWSHN{; z?`vqtGxR58#+ZKfC;6=yJj>nk1ryJk9L>4cly?TY5{Sby zWcu4B)3Z!=mltZkYZa^h1pb2m!s}}Z>w=EObtL%DPh)r`pWsr^&oG=O zC^gI<8dljnE(%1Q$4J&Dvs6N;+mJ*zIUPtcjF-uZQ=8X(Svxzk5j4v0_5n=%DN7zY zZ_gTM#Bk18{iV4{9@|ALAG{^vIrzc14a~%9akQNyjdY#^HA$UHHh!olj$3zg~Z zOQxDu@3(APy!rK@OAlu_CV{s_wsVnCzhp^|9CI$pyZJ88-_Uy=w?41SpThTOdMc;^J*|MeCR9R#Nc`@6e*iWhXCn%C8*5u9K6e4Cf4F>q&i{5Z zQ&IdQakdhm(v(-C5VLaxQE)JEFtIR7xLdfgQ3)bZ@H?8A@~MbR{u}Y9B|v5F>}=1+ z%jI{TJ~shB(Lx=xAZ@Y++|h z@t0|2Z0F)EKt=V(PVsN}A1hG8{ZHq=1N?3OgLiT^VV3^W;P^A1KLTbp78V{x7B)sU zUgrPw|6`Sx|1WP_r+-)RPd%C4jqI6OnOK-@Z2pIble2{Df5-bjdN`^5c`Th-1>|Js z;s^vuxPok*ssA&my|s(ef5voi0{!j!CvR&LQ|3QO{S)~=eWax2mHx};ZyC)jZ0!H> z_^bX;r3vuAboMTe*8gZsfXpCkkjdo6%=Wfs{}}#W7rsBE`BPb=zl-A!`JetjgW(f%1Q|KoIjY&&Sqo78O_t&>@}D(D z!T;~o!Y5}3{KxShG05cag8TQ96E!kp{-?>${C^YwZzNT7J2%_^f1Ll8{uf2W(b>(; z(Mr)#(by6MbpF3{{!ilnBB}h@?3|n(J*59X2KE2a@&9YSe*NQX=jibt@l`<%|7!hf zN3yo~r&JUa|Lg*MM!fZ$6#>3n&~E5Bqi#aBqgUnp=b2Oo$2C#K`78wj7rT~MPP+QaR6uae-MJC`z)`R#KJG3X z_SrwNeOFkM%MWB9kh0oX*1PJ_hML*RN)g*RD))X`R4RALC{|G^B0+bq#j49SlU(P` z?(Rr<+qU%6j1}gJws%ITqDR zJ|#bU{Y)BY(s#A_KliVHZSr{Xi}R~oU0AXo8*TU*pOt_8_US``o_jkx5@PTCoU$fDwyK2p;gZx(^W z(*Ec7P+R4SuSr(&8x9y%zdFM%c#!G!{o~B#>)ZE$2AMov{an^LB{Ts5OaA+J literal 0 HcmV?d00001 diff --git a/radio/src/gui/128x64/view_about.cpp b/radio/src/gui/128x64/view_about.cpp index b168f91fb..5913945c6 100644 --- a/radio/src/gui/128x64/view_about.cpp +++ b/radio/src/gui/128x64/view_about.cpp @@ -20,145 +20,26 @@ #include "opentx.h" -const unsigned char about_bmp[] = { -#include "about.lbm" -}; - -enum AboutScreens { - ABOUT_OPENTX, - ABOUT_HARDWARE, - ABOUT_BERTRAND, - ABOUT_ANDRE, - ABOUT_MIKE, - ABOUT_KJELL, - ABOUT_MARTIN, - ABOUT_ROMOLO, - ABOUT_ROB, - ABOUT_PARENTS, - ABOUT_END, - ABOUT_COUNT, -}; - -#define ABOUT_X 2 #define ABOUT_INDENT 4 -#if defined(KEYS_GPIO_REG_PAGEDN) -#define EVT_KEY_PREVIOUS_VIEW EVT_KEY_BREAK(KEY_PAGEUP) -#define EVT_KEY_NEXT_VIEW EVT_KEY_BREAK(KEY_PAGEDN) -#elif defined(NAVIGATION_X7) -#define EVT_KEY_PREVIOUS_VIEW EVT_KEY_LONG(KEY_PAGE) -#define EVT_KEY_NEXT_VIEW EVT_KEY_BREAK(KEY_PAGE) -#else -#define EVT_KEY_PREVIOUS_VIEW EVT_KEY_FIRST(KEY_UP) -#define EVT_KEY_NEXT_VIEW EVT_KEY_FIRST(KEY_DOWN) -#endif +const char ABOUT_VERSION_1[] = "EdgeTX Endeavour (2.4.0)"; +const char ABOUT_VERSION_2[] = "Copyright (C) 2021 EdgeTX"; +const char ABOUT_VERSION_3[] = "https://edge-tx.org"; void menuAboutView(event_t event) { - static uint8_t screenIndex; - static uint8_t greyIndex; - switch(event) { - case EVT_ENTRY: - screenIndex = 0; - greyIndex = 0; - break; - case EVT_KEY_NEXT_VIEW: - screenIndex < ABOUT_PARENTS ? screenIndex++ : screenIndex = ABOUT_OPENTX; - greyIndex = 0; - break; - case EVT_KEY_PREVIOUS_VIEW: - if (IS_KEY_LONG(EVT_KEY_PREVIOUS_VIEW)) { - killEvents(event); - } - screenIndex > ABOUT_OPENTX ? screenIndex-- : screenIndex = ABOUT_PARENTS; - greyIndex = 0; - break; case EVT_KEY_FIRST(KEY_EXIT): + case EVT_KEY_FIRST(KEY_ENTER): chainMenu(menuMainView); break; } - lcdDrawText(17, 0, STR_ABOUTUS, DBLSIZE|INVERS); - lcdDrawSolidHorizontalLine(17, 16, LCD_W-17); - lcdDraw1bitBitmap(8, 0, about_bmp, 0); - LcdFlags att = 0; + lcdDrawText(2, 0, STR_ABOUTUS, DBLSIZE|INVERS); + lcdDrawSolidHorizontalLine(0, 16, LCD_W-17); - uint8_t screenDuration = 150; - - switch (screenIndex) { - case ABOUT_OPENTX: - case ABOUT_END: - lcdDrawText(ABOUT_X, 22, STR_ABOUT_OPENTX_1, SMLSIZE); - lcdDrawText(ABOUT_X, 30, STR_ABOUT_OPENTX_2, SMLSIZE); - lcdDrawText(ABOUT_X, 38, STR_ABOUT_OPENTX_3, SMLSIZE); - lcdDrawText(ABOUT_X, 46, STR_ABOUT_OPENTX_4, SMLSIZE); - lcdDrawText(ABOUT_X, 54, STR_ABOUT_OPENTX_5, SMLSIZE); - screenDuration = 255; - break; - - case ABOUT_BERTRAND: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_BERTRAND_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_BERTRAND_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_BERTRAND_3, att|SMLSIZE); - break; - - case ABOUT_ANDRE: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_ANDRE_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_ANDRE_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_ANDRE_3, att|SMLSIZE); - break; - - case ABOUT_MIKE: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_MIKE_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_MIKE_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_MIKE_3, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 52, STR_ABOUT_MIKE_4, att|SMLSIZE); - break; - - case ABOUT_KJELL: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_KJELL_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_KJELL_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_KJELL_3, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 52, STR_ABOUT_KJELL_4, att|SMLSIZE); - break; - - case ABOUT_MARTIN: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_MARTIN_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_MARTIN_2, att|SMLSIZE); - break; - - case ABOUT_ROMOLO: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_ROMOLO_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_ROMOLO_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_ROMOLO_3, att|SMLSIZE); - break; - - case ABOUT_ROB: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_ROB_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_ROB_2, att|SMLSIZE); - break; - - case ABOUT_HARDWARE: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_HARDWARE_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_HARDWARE_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_HARDWARE_3, att|SMLSIZE); - break; - - case ABOUT_PARENTS: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_PARENTS_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_PARENTS_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_PARENTS_3, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 52, STR_ABOUT_PARENTS_4, att|SMLSIZE); - screenDuration = 255; - break; - } - - if (++greyIndex == screenDuration) { - greyIndex = 0; - if (++screenIndex == ABOUT_COUNT) { - chainMenu(menuMainView); - } - } + lcdDrawText(ABOUT_INDENT, 22, ABOUT_VERSION_1, SMLSIZE); + lcdDrawText(ABOUT_INDENT, 30, ABOUT_VERSION_2, SMLSIZE); + lcdDrawText(ABOUT_INDENT, 38, ABOUT_VERSION_3, SMLSIZE); } diff --git a/radio/src/gui/212x64/view_about.cpp b/radio/src/gui/212x64/view_about.cpp index b75ff1095..078c26ab1 100644 --- a/radio/src/gui/212x64/view_about.cpp +++ b/radio/src/gui/212x64/view_about.cpp @@ -20,132 +20,26 @@ #include "opentx.h" -const unsigned char about_bmp[] = { -#include "about.lbm" -}; - -enum AboutScreens { - ABOUT_OPENTX, - ABOUT_HARDWARE, - ABOUT_BERTRAND, - ABOUT_ANDRE, - ABOUT_MIKE, - ABOUT_KJELL, - ABOUT_MARTIN, - ABOUT_ROMOLO, - ABOUT_ROB, - ABOUT_PARENTS, - ABOUT_END, - ABOUT_COUNT, -}; - -#define ABOUT_X 62 #define ABOUT_INDENT 6 +const char ABOUT_VERSION_1[] = "EdgeTX Endeavour (2.4.0)"; +const char ABOUT_VERSION_2[] = "Copyright (C) 2021 EdgeTX"; +const char ABOUT_VERSION_3[] = "https://edge-tx.org"; + void menuAboutView(event_t event) { - static uint8_t screenIndex; - static uint8_t greyIndex; - switch(event) { - case EVT_ENTRY: - screenIndex = 0; - greyIndex = 0; - break; - case EVT_KEY_FIRST(KEY_DOWN): - screenIndex < ABOUT_PARENTS ? screenIndex++ : screenIndex = ABOUT_OPENTX; - greyIndex = 0; - break; - case EVT_KEY_FIRST(KEY_UP): - screenIndex > ABOUT_OPENTX ? screenIndex-- : screenIndex = ABOUT_PARENTS; - greyIndex = 0; - break; + case EVT_KEY_FIRST(KEY_ENTER): case EVT_KEY_FIRST(KEY_EXIT): chainMenu(menuMainView); break; } - lcdDrawBitmap(0, 0, about_bmp); - lcdDrawText(64, 0, STR_ABOUTUS, DBLSIZE); - lcdDrawSolidHorizontalLine(ABOUT_X, 18, 120); - lcdDrawSolidHorizontalLine(ABOUT_X, 19, 130, GREY_DEFAULT); - LcdFlags att = GREY(max(0, 15-greyIndex/2)); + lcdDrawText(2, 2, STR_ABOUTUS, BOLD); + lcdDrawSolidHorizontalLine(0, 11, 130, GREY_DEFAULT); - uint8_t screenDuration = 150; - - switch (screenIndex) { - case ABOUT_OPENTX: - case ABOUT_END: - lcdDrawText(ABOUT_X, 22, STR_ABOUT_OPENTX_1, SMLSIZE); - lcdDrawText(ABOUT_X, 30, STR_ABOUT_OPENTX_2, SMLSIZE); - lcdDrawText(ABOUT_X, 38, STR_ABOUT_OPENTX_3, SMLSIZE); - lcdDrawText(ABOUT_X, 46, STR_ABOUT_OPENTX_4, SMLSIZE); - lcdDrawText(ABOUT_X, 54, STR_ABOUT_OPENTX_5, SMLSIZE); - screenDuration = 255; - break; - - case ABOUT_BERTRAND: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_BERTRAND_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_BERTRAND_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_BERTRAND_3, att|SMLSIZE); - break; - - case ABOUT_ANDRE: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_ANDRE_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_ANDRE_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_ANDRE_3, att|SMLSIZE); - break; - - case ABOUT_MIKE: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_MIKE_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_MIKE_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_MIKE_3, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 52, STR_ABOUT_MIKE_4, att|SMLSIZE); - break; - - case ABOUT_KJELL: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_KJELL_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_KJELL_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_KJELL_3, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 52, STR_ABOUT_KJELL_4, att|SMLSIZE); - break; - - case ABOUT_MARTIN: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_MARTIN_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_MARTIN_2, att|SMLSIZE); - break; - - case ABOUT_ROMOLO: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_ROMOLO_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_ROMOLO_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_ROMOLO_3, att|SMLSIZE); - break; - - case ABOUT_ROB: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_ROB_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_ROB_2, att|SMLSIZE); - break; - - case ABOUT_HARDWARE: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_HARDWARE_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_HARDWARE_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_HARDWARE_3, att|SMLSIZE); - break; - - case ABOUT_PARENTS: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_PARENTS_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_PARENTS_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_PARENTS_3, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 52, STR_ABOUT_PARENTS_4, att|SMLSIZE); - screenDuration = 255; - break; - } - - if (++greyIndex == screenDuration) { - greyIndex = 0; - if (++screenIndex == ABOUT_COUNT) { - chainMenu(menuMainView); - } - } + lcdDrawText(ABOUT_INDENT, 22, ABOUT_VERSION_1); + lcdDrawText(ABOUT_INDENT, 32, ABOUT_VERSION_2, SMLSIZE); + lcdDrawText(ABOUT_INDENT, 42, ABOUT_VERSION_3); } diff --git a/radio/src/gui/colorlcd/CMakeLists.txt b/radio/src/gui/colorlcd/CMakeLists.txt index 79af1169c..de3a1d804 100644 --- a/radio/src/gui/colorlcd/CMakeLists.txt +++ b/radio/src/gui/colorlcd/CMakeLists.txt @@ -55,6 +55,7 @@ set(GUI_SRC radio_diagkeys.cpp radio_diaganas.cpp radio_calibration.cpp + view_about.cpp view_main.cpp view_main_menu.cpp view_main_decoration.cpp diff --git a/radio/src/gui/colorlcd/view_about.cpp b/radio/src/gui/colorlcd/view_about.cpp index ea3561188..48be1477f 100644 --- a/radio/src/gui/colorlcd/view_about.cpp +++ b/radio/src/gui/colorlcd/view_about.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 @@ -18,136 +19,36 @@ * GNU General Public License for more details. */ +#include "view_about.h" #include "opentx.h" -enum AboutScreens { - ABOUT_OPENTX, - ABOUT_HARDWARE, - ABOUT_BERTRAND, - ABOUT_ANDRE, - ABOUT_MIKE, - ABOUT_KJELL, - ABOUT_MARTIN, - ABOUT_ROMOLO, - ABOUT_ROB, - ABOUT_PARENTS, - ABOUT_END, - ABOUT_COUNT, +const uint8_t mask_qrcode[] = { +#include "mask_qrcode.lbm" }; -#define ABOUT_X 62 -#define ABOUT_INDENT 16 +constexpr coord_t ABOUT_WIDTH = 220; -bool menuAboutView(event_t event) +AboutUs::AboutUs() : + MessageDialog(MainWindow::instance(), STR_ABOUT_US, "") { - static uint8_t screenIndex = 0; - static uint8_t greyIndex = 0; + content->setRect({(LCD_W - ABOUT_WIDTH) / 2, 20, ABOUT_WIDTH, LCD_H - 40}); - switch (event) { - case EVT_ENTRY: - screenIndex = 0; - greyIndex = 0; - break; -#if defined(PCBX12S) - case EVT_KEY_FIRST(KEY_PGDN): -#elif defined(PCBX10) - case EVT_KEY_BREAK(KEY_PGDN): -#endif - screenIndex < ABOUT_PARENTS ? screenIndex++ : screenIndex = ABOUT_OPENTX; - greyIndex = 0; - break; - case EVT_KEY_FIRST(KEY_PGUP): -#if defined(PCBX10) - case EVT_KEY_LONG(KEY_PGDN): -#endif - screenIndex > ABOUT_OPENTX ? screenIndex-- : screenIndex = ABOUT_PARENTS; - greyIndex = 0; - killEvents(event); - break; - case EVT_KEY_FIRST(KEY_EXIT): - chainMenu(menuMainView); - break; - } + messageWidget->setTextFlags(CENTERED | FONT(BOLD) | DEFAULT_COLOR); + messageWidget->setTop(content->top() + 40); + messageWidget->setHeight(2*PAGE_LINE_HEIGHT); - theme->drawBackground(); - theme->drawTopbarBackground(0); + messageWidget->setText("EdgeTX Endeavour (2.4.0)\n" + "Copyright (C) 2021 EdgeTX"); - uint8_t screenDuration = 150; - - switch (screenIndex) { - case ABOUT_OPENTX: - case ABOUT_END: - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_OPENTX_1); - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP + FH, STR_ABOUT_OPENTX_2); - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP + 2*FH, STR_ABOUT_OPENTX_3); - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP + 3*FH, STR_ABOUT_OPENTX_4); - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP + 4*FH, STR_ABOUT_OPENTX_5); - screenDuration = 255; - break; - - case ABOUT_BERTRAND: - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_BERTRAND_1, INVERS); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + FH, STR_ABOUT_BERTRAND_2); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 2*FH, STR_ABOUT_BERTRAND_3); - break; - - case ABOUT_ANDRE: - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_ANDRE_1, INVERS); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + FH, STR_ABOUT_ANDRE_2); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 2*FH, STR_ABOUT_ANDRE_3); - break; - - case ABOUT_MIKE: - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_MIKE_1, INVERS); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + FH, STR_ABOUT_MIKE_2); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 2*FH, STR_ABOUT_MIKE_3); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 3*FH, STR_ABOUT_MIKE_4); - break; - - case ABOUT_KJELL: - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_KJELL_1, INVERS); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + FH, STR_ABOUT_KJELL_2); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 2*FH, STR_ABOUT_KJELL_3); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 3*FH, STR_ABOUT_KJELL_4); - break; - - case ABOUT_MARTIN: - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_MARTIN_1, INVERS); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + FH, STR_ABOUT_MARTIN_2); - break; - - case ABOUT_ROMOLO: - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_ROMOLO_1, INVERS); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + FH, STR_ABOUT_ROMOLO_2); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 2*FH, STR_ABOUT_ROMOLO_3); - break; - - case ABOUT_ROB: - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_ROB_1, INVERS); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + FH, STR_ABOUT_ROB_2); - break; - - case ABOUT_HARDWARE: - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_HARDWARE_1, INVERS); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + FH, STR_ABOUT_HARDWARE_2); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 2*FH, STR_ABOUT_HARDWARE_3); - break; - - case ABOUT_PARENTS: - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_PARENTS_1, INVERS); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + FH, STR_ABOUT_PARENTS_2); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 2*FH, STR_ABOUT_PARENTS_3); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 3*FH, STR_ABOUT_PARENTS_4); - screenDuration = 255; - break; - } - - if (++greyIndex == screenDuration) { - greyIndex = 0; - if (++screenIndex == ABOUT_COUNT) { - chainMenu(menuMainView); - } - } - - return true; + qrcode = BitmapBuffer::load8bitMaskOnBackground(mask_qrcode, DEFAULT_COLOR, + DEFAULT_BGCOLOR); + new StaticBitmap(content, + rect_t{ content->width() / 2 - qrcode->width() / 2, 80, + qrcode->width(), qrcode->height()}, + qrcode); +} + +AboutUs::~AboutUs() +{ + delete qrcode; } diff --git a/radio/src/gui/colorlcd/view_about.h b/radio/src/gui/colorlcd/view_about.h new file mode 100644 index 000000000..e76048878 --- /dev/null +++ b/radio/src/gui/colorlcd/view_about.h @@ -0,0 +1,31 @@ +/* + * 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 + * + * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include "libopenui.h" + +class AboutUs : public MessageDialog +{ + BitmapBuffer* qrcode = nullptr; + + public: + AboutUs(); + ~AboutUs(); +}; diff --git a/radio/src/gui/colorlcd/view_main_menu.cpp b/radio/src/gui/colorlcd/view_main_menu.cpp index 569baa0a8..6c26e2f4f 100644 --- a/radio/src/gui/colorlcd/view_main_menu.cpp +++ b/radio/src/gui/colorlcd/view_main_menu.cpp @@ -26,6 +26,7 @@ #include "menu_model.h" #include "menu_radio.h" #include "menu_screen.h" +#include "view_about.h" #include "view_channels.h" #include "view_statistics.h" #include "select_fab_carousel.h" @@ -101,7 +102,7 @@ ViewMainMenu::ViewMainMenu(Window* parent) : carousel->addButton(ICON_OPENTX, "About\nEdgeTX", [=]() -> uint8_t { deleteLater(); - //TODO: new AboutUs(); + new AboutUs(); return 0; }); diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index b97d27c48..e44692d2a 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -926,48 +926,6 @@ const char STR_BLUETOOTH_PIN_CODE[] = TR_BLUETOOTH_PIN_CODE; #endif const char STR_ABOUTUS[] = TR_ABOUTUS; -const char STR_ABOUT_OPENTX_1[] = TR_ABOUT_OPENTX_1; -const char STR_ABOUT_OPENTX_2[] = TR_ABOUT_OPENTX_2; -const char STR_ABOUT_OPENTX_3[] = TR_ABOUT_OPENTX_3; -const char STR_ABOUT_OPENTX_4[] = TR_ABOUT_OPENTX_4; -const char STR_ABOUT_OPENTX_5[] = TR_ABOUT_OPENTX_5; - -const char STR_ABOUT_BERTRAND_1[] = TR_ABOUT_BERTRAND_1; -const char STR_ABOUT_BERTRAND_2[] = TR_ABOUT_BERTRAND_2; -const char STR_ABOUT_BERTRAND_3[] = TR_ABOUT_BERTRAND_3; - -const char STR_ABOUT_MIKE_1[] = TR_ABOUT_MIKE_1; -const char STR_ABOUT_MIKE_2[] = TR_ABOUT_MIKE_2; -const char STR_ABOUT_MIKE_3[] = TR_ABOUT_MIKE_3; -const char STR_ABOUT_MIKE_4[] = TR_ABOUT_MIKE_4; - -const char STR_ABOUT_ROMOLO_1[] = TR_ABOUT_ROMOLO_1; -const char STR_ABOUT_ROMOLO_2[] = TR_ABOUT_ROMOLO_2; -const char STR_ABOUT_ROMOLO_3[] = TR_ABOUT_ROMOLO_3; - -const char STR_ABOUT_ANDRE_1[] = TR_ABOUT_ANDRE_1; -const char STR_ABOUT_ANDRE_2[] = TR_ABOUT_ANDRE_2; -const char STR_ABOUT_ANDRE_3[] = TR_ABOUT_ANDRE_3; - -const char STR_ABOUT_ROB_1[] = TR_ABOUT_ROB_1; -const char STR_ABOUT_ROB_2[] = TR_ABOUT_ROB_2; - -const char STR_ABOUT_MARTIN_1[] = TR_ABOUT_MARTIN_1; -const char STR_ABOUT_MARTIN_2[] = TR_ABOUT_MARTIN_2; - -const char STR_ABOUT_KJELL_1[] = TR_ABOUT_KJELL_1; -const char STR_ABOUT_KJELL_2[] = TR_ABOUT_KJELL_2; -const char STR_ABOUT_KJELL_3[] = TR_ABOUT_KJELL_3; -const char STR_ABOUT_KJELL_4[] = TR_ABOUT_KJELL_4; - -const char STR_ABOUT_HARDWARE_1[] = TR_ABOUT_HARDWARE_1; -const char STR_ABOUT_HARDWARE_2[] = TR_ABOUT_HARDWARE_2; -const char STR_ABOUT_HARDWARE_3[] = TR_ABOUT_HARDWARE_3; - -const char STR_ABOUT_PARENTS_1[] = TR_ABOUT_PARENTS_1; -const char STR_ABOUT_PARENTS_2[] = TR_ABOUT_PARENTS_2; -const char STR_ABOUT_PARENTS_3[] = TR_ABOUT_PARENTS_3; -const char STR_ABOUT_PARENTS_4[] = TR_ABOUT_PARENTS_4; const char STR_AUTH_FAILURE[] = TR_AUTH_FAILURE; const char STR_PROTOCOL[] = TR_PROTOCOL; diff --git a/radio/src/translations/cn.h.txt b/radio/src/translations/cn.h.txt index 1f0e07dd3..9ae808ca3 100644 --- a/radio/src/translations/cn.h.txt +++ b/radio/src/translations/cn.h.txt @@ -1027,55 +1027,6 @@ // About screen #define TR_ABOUTUS TR(" 关于 ", "关于") -#define TR_ABOUT_OPENTX_1 TR("OpenTX\001is\001open\001source,\001non", "OpenTX is open source, non-") -#define TR_ABOUT_OPENTX_2 TR("commercial,\001wo\001warranties.", "commercial and comes with no") -#define TR_ABOUT_OPENTX_3 TR("It\001was\001developed\001for\001free.", "warranties. It was developed") -#define TR_ABOUT_OPENTX_4 TR("Support through donations", "for free. Support through") -#define TR_ABOUT_OPENTX_5 TR("is welcome!", "donations is welcome!") - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "OpenTX main author" -#define TR_ABOUT_BERTRAND_3 "Companion co-author" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Code and drivers guru" -#define TR_ABOUT_MIKE_3 TR("Arguably,\001one\001of\001the\001best", "Arguably, one of the best") -#define TR_ABOUT_MIKE_4 "Inspirational" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Companion co-author" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Functionality, usability," -#define TR_ABOUT_ANDRE_3 "debugging, documentation" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "openrcforums webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 TR("www.open-tx.org author", "www.open-tx.org main author") -#define TR_ABOUT_KJELL_3 "OpenTX Recorder author" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Graphics designer" - -#if defined(PCBFRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Parent projects" -#define TR_ABOUT_PARENTS_2 TR("Ersky9x (Mike Blandford)", "Ersky9x (Mike Blandford)") -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index 67ba25ac1..aad86571b 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -1121,63 +1121,6 @@ // Taranis About screen #define TR_ABOUTUS TR(" O nás ", "O nás") -#define TR_ABOUT_OPENTX_1 TR3("OpenTX je nekomerční,", "OpenTX\001je\001open-source,", "OpenTX je open-source,") -#define TR_ABOUT_OPENTX_2 TR3("opensource bez záruky.", "nekomerční a bez\001záruky.", "nekomerční a bez záruky.") -#define TR_ABOUT_OPENTX_3 TR3("Vytvořen ve volném čase.", "Byl\001vytvořen\001nadšenými\001modeláři", "Byl vytvořen nadšenými modeláři") -#define TR_ABOUT_OPENTX_4 TR3("Podpora vývoje pomocí", "Podpora\001vývoje\001pomocí", "Podpora vývoje pomocí") -#define TR_ABOUT_OPENTX_5 TR3("finančního daru je vítána!", "drobného\001daru\001je\001vítána!", "drobného daru je vítána!") - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "Hlavní vývojář OpenTX" -#define TR_ABOUT_BERTRAND_3 "Spoluautor Companion" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Specialista na kód," -#define TR_ABOUT_MIKE_3 " a ovladače hardwaru." -#define TR_ABOUT_MIKE_4 "" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Hlavní vývojář" -#define TR_ABOUT_ROMOLO_3 "Companion" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Funkčnost, použitelnost," -#define TR_ABOUT_ANDRE_3 "ladění a dokumentace" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "openrcforums webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "autor www.open-tx.org" -#define TR_ABOUT_KJELL_3 "autor OpenTX Recorder" -#define TR_ABOUT_KJELL_4 "Spoluautor Companion" - -#define TR_ABOUT_MARTIN_1 "Martin Hotař" -#define TR_ABOUT_MARTIN_2 "Design, Čeština" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 "Vývoj a výroba Hardware" - #define TR_ABOUT_HARDWARE_3 "Přispěvatel firmware" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 "Vývoj a výroba Hardware" - #define TR_ABOUT_HARDWARE_3 "Přispěvatel firmware" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 "Vývoj a výroba Hardware" - #define TR_ABOUT_HARDWARE_3 "Přispěvatel firmware" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x designer/výrobce" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Mateřské projekty" -#define TR_ABOUT_PARENTS_2 "ersky9x (Mike Blandford)" -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 7486afd00..de1c9e9cb 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -1131,63 +1131,6 @@ //Taranis About screen #define TR_ABOUTUS "Über OpenTx" -#define TR_ABOUT_OPENTX_1 "OpenTX ist Open Source," -#define TR_ABOUT_OPENTX_2 "nicht kommerziell, ohne" -#define TR_ABOUT_OPENTX_3 "Funktionsgarantie, frei" -#define TR_ABOUT_OPENTX_4 "verfügbar. Unterstützung" -#define TR_ABOUT_OPENTX_5 "durch Spenden willkommen" - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "OpenTX Hauptauthor" -#define TR_ABOUT_BERTRAND_3 "Companion-Mitentwickler" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Code- und Treiber-Guru" -#define TR_ABOUT_MIKE_3 "Wohl einer der Besten." -#define TR_ABOUT_MIKE_4 "Sehr inspirierend." - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Companion-Hauptentwickler" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Funktionalität und Tests," -#define TR_ABOUT_ANDRE_3 "Debugging, Dokumentation" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "Openrcforums Webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "www.open-tx.org Hauptautor" -#define TR_ABOUT_KJELL_3 "Author von OpenTX Recorder" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Grafikdesigner" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Vorgänger-Projekte" -#define TR_ABOUT_PARENTS_2 "Ersky9x (Mike Blandford)" -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' // Taste short #define TR_CHR_LONG 'l' // Taste long #define TR_CHR_TOGGLE 't' // Taste als togglefunktion = Ein Aus Ein diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index b990e4484..c37f99bf4 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -1130,71 +1130,6 @@ // About screen #define TR_ABOUTUS TR(" ABOUT ", "ABOUT") -#define TR_ABOUT_OPENTX_1 TR("OpenTX\001is\001open\001source,\001non", "OpenTX is open source, non-") -#define TR_ABOUT_OPENTX_2 TR("commercial,\001wo\001warranties.", "commercial and comes with no") -#define TR_ABOUT_OPENTX_3 TR("It\001was\001developed\001for\001free.", "warranties. It was developed") -#define TR_ABOUT_OPENTX_4 TR("Support through donations", "for free. Support through") -#define TR_ABOUT_OPENTX_5 TR("is welcome!", "donations is welcome!") - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "OpenTX main author" -#define TR_ABOUT_BERTRAND_3 "Companion co-author" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Code and drivers guru" -#define TR_ABOUT_MIKE_3 TR("Arguably,\001one\001of\001the\001best", "Arguably, one of the best") -#define TR_ABOUT_MIKE_4 "Inspirational" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Companion co-author" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Functionality, usability," -#define TR_ABOUT_ANDRE_3 "debugging, documentation" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "openrcforums webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 TR("www.open-tx.org author", "www.open-tx.org main author") -#define TR_ABOUT_KJELL_3 "OpenTX Recorder author" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Graphics designer" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Parent projects" -#define TR_ABOUT_PARENTS_2 TR("Ersky9x (Mike Blandford)", "Ersky9x (Mike Blandford)") -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index cdfdc068f..de969b1a6 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -1126,63 +1126,6 @@ // Taranis About screen #define TR_ABOUTUS "Nosotros" -#define TR_ABOUT_OPENTX_1 "OpenTX es open source, no-" -#define TR_ABOUT_OPENTX_2 "comercial y viene sin " -#define TR_ABOUT_OPENTX_3 "garantias. Fue desarrollado" -#define TR_ABOUT_OPENTX_4 "libremente. Ayudas a través" -#define TR_ABOUT_OPENTX_5 "de donaciones son bienvenidas!" - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "Autor principal OpenTX" -#define TR_ABOUT_BERTRAND_3 "Companion codesarrollador" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Gurú de codigo y drivers" -#define TR_ABOUT_MIKE_3 "Seguramente uno de los" -#define TR_ABOUT_MIKE_4 "mejores inspiradores" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Desarrollador principal" -#define TR_ABOUT_ROMOLO_3 "Companion" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Funcionalidad, usabilidad," -#define TR_ABOUT_ANDRE_3 "depurado, documentación" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "openrcforums webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "www.open-tx.org main author" -#define TR_ABOUT_KJELL_3 "Autor OpenTX Recorder" -#define TR_ABOUT_KJELL_4 "Colaborador Companion" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Dise\201o gráfico" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 "Productor dise\201o de hardware" - #define TR_ABOUT_HARDWARE_3 "Colaborador firmware" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 "Productor dise\201o de hardware" - #define TR_ABOUT_HARDWARE_3 "Colaborador firmware" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 "Productor dise\201o de hardware" - #define TR_ABOUT_HARDWARE_3 "Colaborador firmware" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x dise\201ador/productor" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Padres del proyecto" -#define TR_ABOUT_PARENTS_2 "ersky9x (Mike Blandford)" -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 17bd0b0c1..06c3476bc 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -1142,63 +1142,6 @@ // About screen #define TR_ABOUTUS TR(" ABOUT ", "ABOUT") -#define TR_ABOUT_OPENTX_1 TR("OpenTX\001is\001open\001source,\001non", "OpenTX is open source, non-") -#define TR_ABOUT_OPENTX_2 TR("commercial,\001wo\001warranties.", "commercial and comes with no") -#define TR_ABOUT_OPENTX_3 TR("It\001was\001developed\001for\001free.", "warranties. It was developed") -#define TR_ABOUT_OPENTX_4 TR("Support through donations", "for free. Support through") -#define TR_ABOUT_OPENTX_5 TR("is welcome!", "donations is welcome!") - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "OpenTX main author" -#define TR_ABOUT_BERTRAND_3 "Companion co-author" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Code and drivers guru" -#define TR_ABOUT_MIKE_3 TR("Arguably,\001one\001of\001the\001best", "Arguably, one of the best") -#define TR_ABOUT_MIKE_4 "Inspirational" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Companion co-author" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Functionality, usability," -#define TR_ABOUT_ANDRE_3 "debugging, documentation" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "openrcforums webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "www.open-tx.org main author" -#define TR_ABOUT_KJELL_3 "OpenTX Recorder author" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Graphics designer" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Parent projects" -#define TR_ABOUT_PARENTS_2 TR("Ersky9x (Mike Blandford)", "Ersky9x (Mike Blandford)") -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index d2ac7ff04..546ebaf41 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -1154,71 +1154,6 @@ // Taranis About screen #define TR_ABOUTUS TR(" A PROPOS ", "A PROPOS") -#define TR_ABOUT_OPENTX_1 TR("OpenTX\001est\001libre,\001non-", "OpenTX est libre, non-") -#define TR_ABOUT_OPENTX_2 TR("commercial,\001et\001offert\001sans", "commercial et n'offre aucune") -#define TR_ABOUT_OPENTX_3 TR("garantie.\001Il\001est\001développé", "garantie. Il a été développé") -#define TR_ABOUT_OPENTX_4 TR("gratuitement.\001Donations", "gratuitement. Vos donations") -#define TR_ABOUT_OPENTX_5 TR("bienvenues!", "sont bienvenues!") - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 TR("Auteur\001principal\001d'OpenTX", "Auteur principal d'OpenTX") -#define TR_ABOUT_BERTRAND_3 TR("Codéveloppeur\001de\001C9X", "Codéveloppeur de Companion") - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Maître du code et des" -#define TR_ABOUT_MIKE_3 "drivers" -#define TR_ABOUT_MIKE_4 "" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Développeur principal de" -#define TR_ABOUT_ROMOLO_3 "OpenTX Companion" - -#define TR_ABOUT_ANDRE_1 "André Bernet" -#define TR_ABOUT_ANDRE_2 TR("Fonctionsé,\001usabilité,","Fonctionnalités, usabilité,") -#define TR_ABOUT_ANDRE_3 TR("débogage,\001documentation","débogage, documentation") - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "Webmaster d'openrcforums" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "Auteur de www.open-tx.org" -#define TR_ABOUT_KJELL_3 "Auteur de OpenTX Recorder" -#define TR_ABOUT_KJELL_4 "Développeur Companion" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Design graphique" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 "Développeur/fabricant" - #define TR_ABOUT_HARDWARE_3 "du matériel" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 "Développeur/fabricant" - #define TR_ABOUT_HARDWARE_3 "du matériel" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 "Développeur/fabricant" - #define TR_ABOUT_HARDWARE_3 "du matériel" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 "Développeur/fabricant" - #define TR_ABOUT_HARDWARE_3 "du matériel" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 "Développeur/fabricant" - #define TR_ABOUT_HARDWARE_3 "du matériel" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Développeur/fabricant" - #define TR_ABOUT_HARDWARE_3 "de la carte Sky9x" -#endif - -#define TR_ABOUT_PARENTS_1 "Projets parents" -#define TR_ABOUT_PARENTS_2 "ersky9x (Mike Blandford)" -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index db28fde80..e1b095635 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -1149,63 +1149,6 @@ // About screen #define TR_ABOUTUS TR(" INFO ", "INFO SU") -#define TR_ABOUT_OPENTX_1 TR("OpenTX\001e'\001open\001source,\001non", "OpenTX e' open source, non-") -#define TR_ABOUT_OPENTX_2 TR("commercial,\001wo\001warranties.", "commerciale, fornito senza") -#define TR_ABOUT_OPENTX_3 TR("It\001was\001developed\001for\001free.", "garanzie. E' stato sviluppato") -#define TR_ABOUT_OPENTX_4 TR("Support through donations", "gratuitamente. Il supporto") -#define TR_ABOUT_OPENTX_5 TR("is welcome!", "mediante donazioni e' gradito!") - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "Autore principale OpenTX" -#define TR_ABOUT_BERTRAND_3 "Co-autore Companion" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Guru codice e driver" -#define TR_ABOUT_MIKE_3 "esperto a basso livello" -#define TR_ABOUT_MIKE_4 "Ispiratore" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Autore Companion" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Funzionalità, usabilità," -#define TR_ABOUT_ANDRE_3 "debugging, documentazione" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "Webmaster openrcforums" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "www.open-tx.org main author" -#define TR_ABOUT_KJELL_3 "OpenTX Recorder author" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Graphic Designer" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 "Disegno/produzione Hardware" - #define TR_ABOUT_HARDWARE_3 "Contributi al Firmware" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 "Disegno/produzione Hardware" - #define TR_ABOUT_HARDWARE_3 "Contributi al Firmware" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 "Disegno/produzione Hardware" - #define TR_ABOUT_HARDWARE_3 "Contributi al Firmware" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Designer/Produttore SKY9X" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Progetti correlati" -#define TR_ABOUT_PARENTS_2 "ersky9x (Mike Blandford)" -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 4b4783a38..f40c93a1a 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -1136,62 +1136,6 @@ // About screen #define TR_ABOUTUS TR(" ABOUT ", "ABOUT") -#define TR_ABOUT_OPENTX_1 TR("OpenTX\001is\001open\001source,\001non", "OpenTX is open source, non-") -#define TR_ABOUT_OPENTX_2 TR("commercial,\001wo\001warranties.", "commercial and comes with no") -#define TR_ABOUT_OPENTX_3 TR("It\001was\001developed\001for\001free.", "warranties. It was developed") -#define TR_ABOUT_OPENTX_4 TR("Support through donations", "for free. Support through") -#define TR_ABOUT_OPENTX_5 TR("is welcome!", "donations is welcome!") - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "OpenTX main author" -#define TR_ABOUT_BERTRAND_3 "Companion co-author" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Code and drivers guru" -#define TR_ABOUT_MIKE_3 TR("Arguably,\001one\001of\001the\001best", "Arguably, one of the best") -#define TR_ABOUT_MIKE_4 "Inspirational" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Companion co-author" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Functionality, usability," -#define TR_ABOUT_ANDRE_3 "debugging, documentation" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "openrcforums webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "www.open-tx.org main author" -#define TR_ABOUT_KJELL_3 "OpenTX Recorder author" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Graphics designer" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer" - #define TR_ABOUT_HARDWARE_3 "" -#endif -#define TR_ABOUT_PARENTS_1 "Parent projects" -#define TR_ABOUT_PARENTS_2 TR("Ersky9x (Mike Blandford)", "Ersky9x (Mike Blandford)") -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 4b14f6f25..7e74be8e5 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -1145,63 +1145,6 @@ // About screen #define TR_ABOUTUS TR(" O ", " O ") -#define TR_ABOUT_OPENTX_1 TR("OpenTX\001is\001open\001source,\001non", "OpenTX is open source, non-") -#define TR_ABOUT_OPENTX_2 TR("commercial,\001wo\001warranties.", "commercial and comes with no") -#define TR_ABOUT_OPENTX_3 TR("It\001was\001developed\001for\001free.", "warranties. It was developed") -#define TR_ABOUT_OPENTX_4 TR("Support through donations", "for free. Support through") -#define TR_ABOUT_OPENTX_5 TR("is welcome!", "donations is welcome!") - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "OpenTX główny autor" -#define TR_ABOUT_BERTRAND_3 "Companion współ-autor" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Guru kodu i driwerów" -#define TR_ABOUT_MIKE_3 TR("Arguably,\001one\001of\001the\001best", "Arguably, one of the best") -#define TR_ABOUT_MIKE_4 "Inspirational" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Companion współ-autor" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Funkcjonalność, użytkowość," -#define TR_ABOUT_ANDRE_3 "debugging, documentacja" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "openrcforums webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "www.open-tx.org main author" -#define TR_ABOUT_KJELL_3 "OpenTX Recorder author" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Projekty graficzne" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 "Proucent/projektant Hardware" - #define TR_ABOUT_HARDWARE_3 "Współautor firmware" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 "Proucent/projektant Hardware" - #define TR_ABOUT_HARDWARE_3 "Współautor firmware" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 "Proucent/projektant Hardware" - #define TR_ABOUT_HARDWARE_3 "Współautor firmware" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x designer/výrobce" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Projekty macierzyste" -#define TR_ABOUT_PARENTS_2 TR("Ersky9x (Mike Blandford)", "Ersky9x (Mike Blandford)") -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 'k' #define TR_CHR_LONG 'd' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 0669c02c4..b301eb6ab 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -1146,63 +1146,6 @@ // Taranis About screen #define TR_ABOUTUS "ABOUT US" -#define TR_ABOUT_OPENTX_1 "OpenTX is open source, non-" -#define TR_ABOUT_OPENTX_2 "commercial and comes with no" -#define TR_ABOUT_OPENTX_3 "warranties. It was developed" -#define TR_ABOUT_OPENTX_4 "for free. Support through" -#define TR_ABOUT_OPENTX_5 "donations is welcome!" - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "OpenTX main author" -#define TR_ABOUT_BERTRAND_3 "Companion co-developer" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Code and drivers guru" -#define TR_ABOUT_MIKE_3 "Arguably, one of the best" -#define TR_ABOUT_MIKE_4 "Inspirational" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Companion main developer" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Functionality, usability," -#define TR_ABOUT_ANDRE_3 "debugging, documentation" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "openrcforums webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "www.open-tx.org main author" -#define TR_ABOUT_KJELL_3 "OpenTX Recorder author" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Graphics designer" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Parent projects" -#define TR_ABOUT_PARENTS_2 "ersky9x (Mike Blandford)" -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index c39926ca7..bf6604dec 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -1148,63 +1148,6 @@ // About screen #define TR_ABOUTUS "Om Oss" -#define TR_ABOUT_OPENTX_1 "OpenTX är icke-kommersiell," -#define TR_ABOUT_OPENTX_2 "öppen programvara utan" -#define TR_ABOUT_OPENTX_3 "garantier som uvecklas helt" -#define TR_ABOUT_OPENTX_4 "ideellt. Stöd i form av" -#define TR_ABOUT_OPENTX_5 "donationer välkomnas!" - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "Chefsutvecklare av OpenTX" -#define TR_ABOUT_BERTRAND_3 "Hjälputvecklare av Companion" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Kod och drivrutins-guru" -#define TR_ABOUT_MIKE_3 "Stor inspirationskälla" -#define TR_ABOUT_MIKE_4 "" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Chefsutvecklare av Companion" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Funktionalitet, Användbarhet," -#define TR_ABOUT_ANDRE_3 "Felsökning, Dokumentation" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "Webmaster för openRCforums" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "Utvecklare av www.open-tx.org" -#define TR_ABOUT_KJELL_3 "Utvecklare av OpenTX Recorder" -#define TR_ABOUT_KJELL_4 "Hjälputvecklare av Companion" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Grafikdesigner" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 "Hårdvarudesign/producent" - #define TR_ABOUT_HARDWARE_3 "" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 "Hårdvarudesign/producent" - #define TR_ABOUT_HARDWARE_3 "" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 "Hårdvarudesign/producent" - #define TR_ABOUT_HARDWARE_3 "" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x design/producent" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Ursprungsprojekt" -#define TR_ABOUT_PARENTS_2 "ersky9x (Mike Blandford)" -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/tw.h.txt b/radio/src/translations/tw.h.txt index 0913cd8f4..32d4c3a97 100644 --- a/radio/src/translations/tw.h.txt +++ b/radio/src/translations/tw.h.txt @@ -1027,63 +1027,6 @@ // About screen #define TR_ABOUTUS TR(" 關於 ", "關於") -#define TR_ABOUT_OPENTX_1 TR("OpenTX\001is\001open\001source,\001non", "OpenTX is open source, non-") -#define TR_ABOUT_OPENTX_2 TR("commercial,\001wo\001warranties.", "commercial and comes with no") -#define TR_ABOUT_OPENTX_3 TR("It\001was\001developed\001for\001free.", "warranties. It was developed") -#define TR_ABOUT_OPENTX_4 TR("Support through donations", "for free. Support through") -#define TR_ABOUT_OPENTX_5 TR("is welcome!", "donations is welcome!") - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "OpenTX main author" -#define TR_ABOUT_BERTRAND_3 "Companion co-author" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Code and drivers guru" -#define TR_ABOUT_MIKE_3 TR("Arguably,\001one\001of\001the\001best", "Arguably, one of the best") -#define TR_ABOUT_MIKE_4 "Inspirational" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Companion co-author" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Functionality, usability," -#define TR_ABOUT_ANDRE_3 "debugging, documentation" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "openrcforums webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 TR("www.open-tx.org author", "www.open-tx.org main author") -#define TR_ABOUT_KJELL_3 "OpenTX Recorder author" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Graphics designer" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Parent projects" -#define TR_ABOUT_PARENTS_2 TR("Ersky9x (Mike Blandford)", "Ersky9x (Mike Blandford)") -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' From 334a29c09bd4c7018a20981f5ddcf4fe4c014852 Mon Sep 17 00:00:00 2001 From: olliw42 Date: Wed, 23 Jun 2021 17:40:20 +0200 Subject: [PATCH 23/38] volt is V --- radio/src/gui/colorlcd/radio_setup.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/gui/colorlcd/radio_setup.cpp b/radio/src/gui/colorlcd/radio_setup.cpp index 99282ae65..3b9c4d419 100644 --- a/radio/src/gui/colorlcd/radio_setup.cpp +++ b/radio/src/gui/colorlcd/radio_setup.cpp @@ -302,7 +302,7 @@ void RadioSetupPage::build(FormWindow * window) // Battery warning new StaticText(window, grid.getLabelSlot(true), STR_BATTERYWARNING); edit = new NumberEdit(window, grid.getFieldSlot(), 30, 120, GET_SET_DEFAULT(g_eeGeneral.vBatWarn), 0, PREC1); - edit->setSuffix("v"); + edit->setSuffix("V"); grid.nextLine(); // Inactivity alarm From 5d9498e88be70cb8d34bac4f08bcac8cc9e5452f Mon Sep 17 00:00:00 2001 From: olliw42 Date: Wed, 23 Jun 2021 14:29:18 +0200 Subject: [PATCH 24/38] avoid compile warning --- radio/src/gui/colorlcd/model_select.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/gui/colorlcd/model_select.cpp b/radio/src/gui/colorlcd/model_select.cpp index 04e08f621..a9cdd89fb 100644 --- a/radio/src/gui/colorlcd/model_select.cpp +++ b/radio/src/gui/colorlcd/model_select.cpp @@ -120,7 +120,7 @@ class ModelButton : public Button partialModel.header.name[0] != '\0') { if (version == 219) { - size_t len = sizeof(partialModel.header.name); + int len = (int)sizeof(partialModel.header.name); char* str = partialModel.header.name; for (int i=0; i < len; i++) { str[i] = zchar2char(str[i]); From 998cc868da0b4c4ddde1d48ef031db5d3bc548b6 Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Thu, 24 Jun 2021 15:45:26 +1000 Subject: [PATCH 25/38] Don't use menu bg colour for inactive SF/GF state --- radio/src/gui/colorlcd/special_functions.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/gui/colorlcd/special_functions.cpp b/radio/src/gui/colorlcd/special_functions.cpp index f60ca8a17..83e6523e6 100644 --- a/radio/src/gui/colorlcd/special_functions.cpp +++ b/radio/src/gui/colorlcd/special_functions.cpp @@ -60,7 +60,7 @@ class SpecialFunctionEditPage : public Page if (active != isActive()) { invalidate(); headerSF->setTextFlags(isActive() ? FONT(BOLD) | HIGHLIGHT_COLOR - : MENU_COLOR); + : FOCUS_COLOR); active = !active; } } From 74222fe74d71e8fbf64277f53c1782a72464b7ab Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 24 Jun 2021 10:13:11 +1000 Subject: [PATCH 26/38] Lua scripts can detect EdgeTX via getVersion Add a sixth parameter to getVersion so that scripts can detect whether running on EdgeTX or OpenTX. i.e. `local ver, radio, maj, minor, rev, osname = getVersion()` --- radio/src/lua/api_general.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index f3654af3d..d88af332f 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -99,7 +99,16 @@ If running in simulator the "-simu" is added * (number) minor version (ie 1 if version 2.1.5) * (number) revision number (ie 5 if version 2.1.5) -@status current Introduced in 2.0.0, expanded in 2.1.7, radio type strings changed in 2.2.0 +@retval multiple (available since 2.1.7) returns 6 values: + * (string) OpenTX version (ie "2.1.5") + * (string) radio type: `x12s`, `x10`, `x9e`, `x9d+`, `x9d` or `x7`. +If running in simulator the "-simu" is added + * (number) major version (ie 2 if version 2.1.5) + * (number) minor version (ie 1 if version 2.1.5) + * (number) revision number (ie 5 if version 2.1.5) + * (string) OS name ( i.e. EdgeTX or nil if OpenTX) + +@status current Introduced in 2.0.0, expanded in 2.1.7, radio type strings changed in 2.2.0, os name added in EdgeTX 2.4.0 ### Example @@ -107,12 +116,13 @@ This example also runs in OpenTX versions where the function returned only one v ```lua local function run(event) - local ver, radio, maj, minor, rev = getVersion() + local ver, radio, maj, minor, rev, osname = getVersion() print("version: "..ver) if radio then print ("radio: "..radio) end if maj then print ("maj: "..maj) end if minor then print ("minor: "..minor) end if rev then print ("rev: "..rev) end + if osname then print ("osname: "..osname) end return 1 end @@ -134,7 +144,8 @@ static int luaGetVersion(lua_State * L) lua_pushnumber(L, VERSION_MAJOR); lua_pushnumber(L, VERSION_MINOR); lua_pushnumber(L, VERSION_REVISION); - return 5; + lua_pushstring(L, "EdgeTX"); + return 6; } /*luadoc From edbec9f35ee07bf0078653196b94701ec3e6c490 Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Thu, 24 Jun 2021 10:41:40 +1000 Subject: [PATCH 27/38] Updated getVersion luadoc and example output Finished updated lua docs for getVersion() api change, verified functionality and grabbed simulator output, removed magic string and used a define instead. --- radio/src/lua/api_general.cpp | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index d88af332f..bed2e48df 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -72,6 +72,8 @@ #define RADIO_VERSION FLAVOUR #endif +#define VERSION_OSNAME "EdgeTX" + #define FIND_FIELD_DESC 0x01 #define KEY_EVENTS(xxx, yyy) \ @@ -91,22 +93,15 @@ Return OpenTX version @retval string OpenTX version (ie "2.1.5") -@retval multiple (available since 2.1.7) returns 5 values: +@retval multiple values (available since 2.1.7): * (string) OpenTX version (ie "2.1.5") * (string) radio type: `x12s`, `x10`, `x9e`, `x9d+`, `x9d` or `x7`. If running in simulator the "-simu" is added * (number) major version (ie 2 if version 2.1.5) * (number) minor version (ie 1 if version 2.1.5) * (number) revision number (ie 5 if version 2.1.5) - -@retval multiple (available since 2.1.7) returns 6 values: - * (string) OpenTX version (ie "2.1.5") - * (string) radio type: `x12s`, `x10`, `x9e`, `x9d+`, `x9d` or `x7`. -If running in simulator the "-simu" is added - * (number) major version (ie 2 if version 2.1.5) - * (number) minor version (ie 1 if version 2.1.5) - * (number) revision number (ie 5 if version 2.1.5) - * (string) OS name ( i.e. EdgeTX or nil if OpenTX) +Since EdgeTX 2.4.0, sixth value added + * (string) OS name (i.e. EdgeTX or nil if OpenTX) @status current Introduced in 2.0.0, expanded in 2.1.7, radio type strings changed in 2.2.0, os name added in EdgeTX 2.4.0 @@ -130,11 +125,12 @@ return { run=run } ``` Output of the above script in simulator: ``` -version: 2.1.7 -radio: taranis-simu +version: 2.4.0 +radio: tx16s-simu maj: 2 -minor: 1 -rev: 7 +minor: 4 +rev: 0 +osname: EdgeTX ``` */ static int luaGetVersion(lua_State * L) @@ -144,7 +140,7 @@ static int luaGetVersion(lua_State * L) lua_pushnumber(L, VERSION_MAJOR); lua_pushnumber(L, VERSION_MINOR); lua_pushnumber(L, VERSION_REVISION); - lua_pushstring(L, "EdgeTX"); + lua_pushstring(L, VERSION_OSNAME); return 6; } From 1dafc3aaccc3aa87b9981f00ecbbb2fe7f9cfc2e Mon Sep 17 00:00:00 2001 From: olliw42 Date: Wed, 23 Jun 2021 14:55:56 +0200 Subject: [PATCH 28/38] telem item: let it blink --- radio/src/gui/colorlcd/model_telemetry.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/radio/src/gui/colorlcd/model_telemetry.cpp b/radio/src/gui/colorlcd/model_telemetry.cpp index 9cc28ba14..d945293bc 100644 --- a/radio/src/gui/colorlcd/model_telemetry.cpp +++ b/radio/src/gui/colorlcd/model_telemetry.cpp @@ -84,6 +84,9 @@ class SensorButton : public Button { else dc->drawSolidFilledRect(2, 2, rect.w - 4, rect.h - 4, FIELD_BGCOLOR); + if (telemetryItem.isFresh()) + dc->drawFilledCircle(24, (2 + rect.h - 4)/2, 4, DEFAULT_COLOR); + dc->drawNumber(2, 1, number, LEFT, 0, nullptr, ":"); dc->drawSizedText(SENSOR_COL1, line1, g_model.telemetrySensors[index].label, TELEM_LABEL_LEN); From adde1160b432490751d5bcf2a1b9ff39810b8fd6 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Sun, 27 Jun 2021 12:28:42 +0200 Subject: [PATCH 29/38] [color] enable insta trim on all views (#347) * [color] enable insta trim on all views Resolves #342 * Removed warning for colorlcd --- radio/src/functions.cpp | 3 --- radio/src/gui/gui_common.h | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/radio/src/functions.cpp b/radio/src/functions.cpp index a3dc0882c..981b7a8b0 100644 --- a/radio/src/functions.cpp +++ b/radio/src/functions.cpp @@ -178,9 +178,6 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext case FUNC_INSTANT_TRIM: newActiveFunctions |= (1u << FUNCTION_INSTANT_TRIM); if (!isFunctionActive(FUNCTION_INSTANT_TRIM)) { -#if defined(COLORLCD) - #warning IS_INSTANT_TRIM_ALLOWED() is always false -#endif if (IS_INSTANT_TRIM_ALLOWED()) { instantTrim(); } diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index dfc9d5bac..46efa21d0 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -123,7 +123,7 @@ bool isSwitch2POSWarningStateAvailable(int state); #endif #if defined(LIBOPENUI) -#define IS_INSTANT_TRIM_ALLOWED() false +#define IS_INSTANT_TRIM_ALLOWED() true #elif defined(GUI) #define IS_INSTANT_TRIM_ALLOWED() (IS_MAIN_VIEW_DISPLAYED() || IS_TELEMETRY_VIEW_DISPLAYED() || IS_OTHER_VIEW_DISPLAYED()) #else From 831ec1751ccfb381f4e36d762dc6ed3210d39bed Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Sun, 27 Jun 2021 12:48:28 +0200 Subject: [PATCH 30/38] Add X9lite-S and Xlite-S --- .github/workflows/actions.yml | 2 ++ .github/workflows/nightly.yml | 2 ++ fw.json | 2 ++ 3 files changed, 6 insertions(+) diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index 4bfc8a80c..69076f2b6 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -38,7 +38,9 @@ jobs: - X9DP - X9DP2019 - X9LITE + - X9LITES - XLITE + - XLITES container: image: ghcr.io/edgetx/edgetx-commit-tests volumes: diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index b4a213c74..700fc579a 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -32,7 +32,9 @@ jobs: - X9DP - X9DP2019 - X9LITE + - X9LITES - XLITE + - XLITES container: image: ghcr.io/edgetx/edgetx-commit-tests volumes: diff --git a/fw.json b/fw.json index 22102d1f2..8fa8b3372 100644 --- a/fw.json +++ b/fw.json @@ -7,7 +7,9 @@ ["X9D Plus 2019", "x9dp2019-"], ["T-Lite", "tlite-"], ["X-Lite", "xlite-"], + ["X-Lite", "xlites-"], ["X9 Lite", "x9lite-"], + ["X9 Lite", "x9lites-"], ["T16", "t16-"], ["T18", "t18-"], ["TX12", "tx12-"], From 84a6cece488523a98aa90887d28fd1c4d5b91e94 Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Mon, 28 Jun 2021 08:54:35 +1000 Subject: [PATCH 31/38] Add the missing 'S' to X-Lite and X9 Lite --- fw.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fw.json b/fw.json index 8fa8b3372..93509d005 100644 --- a/fw.json +++ b/fw.json @@ -7,9 +7,9 @@ ["X9D Plus 2019", "x9dp2019-"], ["T-Lite", "tlite-"], ["X-Lite", "xlite-"], - ["X-Lite", "xlites-"], + ["X-Lite S", "xlites-"], ["X9 Lite", "x9lite-"], - ["X9 Lite", "x9lites-"], + ["X9 Lite S", "x9lites-"], ["T16", "t16-"], ["T18", "t18-"], ["TX12", "tx12-"], From 8efe5e767ef237004a3494f5411ce9bee1d7a0ed Mon Sep 17 00:00:00 2001 From: Risto Date: Mon, 28 Jun 2021 08:46:27 +0200 Subject: [PATCH 32/38] RTC bridge fix (#360) * RTC bridge fix Merged code by @bsongis from https://github.com/opentx/opentx/pull/8577 --- radio/src/opentx.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index e934bcdcb..46c31d190 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -694,11 +694,9 @@ void checkMultiLowPower() #if defined(STM32) static void checkRTCBattery() { - if (isVBatBridgeEnabled()) { - if (getRTCBatteryVoltage() < 200) { - ALERT(STR_BATTERY, STR_WARN_RTC_BATTERY_LOW, AU_ERROR); - } - disableVBatBridge(); + GET_ADC_IF_MIXER_NOT_RUNNING(); + if (getRTCBatteryVoltage() < 200) { + ALERT(STR_BATTERY, STR_WARN_RTC_BATTERY_LOW, AU_ERROR); } } #endif @@ -752,8 +750,11 @@ void checkAll() #endif #if defined(STM32) - if (!g_eeGeneral.disableRtcWarning) + if (isVBatBridgeEnabled() && !g_eeGeneral.disableRtcWarning) { + // only done once at board start checkRTCBattery(); + } + disableVBatBridge(); #endif #if defined(COLORLCD) From a67b61406ffacba71c683cdc0a179da9633b2690 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Sat, 26 Jun 2021 17:03:59 +0200 Subject: [PATCH 33/38] Removed "Disabled RSSI alarm" warning --- radio/src/opentx.cpp | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 46c31d190..6ea3dec47 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -717,17 +717,6 @@ static void checkFailsafe() #else #define checkFailsafe() #endif -void checkRSSIAlarmsDisabled() -{ - if (g_model.rssiAlarms.disabled) { -#if !defined(HARDWARE_INTERNAL_MODULE) - if (!isModuleMultimoduleDSM2(EXTERNAL_MODULE)) -#else - if (!isModuleMultimoduleDSM2(INTERNAL_MODULE) && !isModuleMultimoduleDSM2(EXTERNAL_MODULE)) -#endif - ALERT(STR_RSSIALARM_WARN, STR_NO_RSSIALARM, AU_ERROR); - } -} #if defined(GUI) void checkAll() @@ -743,7 +732,6 @@ void checkAll() checkSwitches(); checkFailsafe(); - checkRSSIAlarmsDisabled(); #if defined(SDCARD) && !defined(RADIOMASTER_RTF_RELEASE) checkSDVersion(); From 32aad89cf36ff6a3f5466321aa75519528a692f0 Mon Sep 17 00:00:00 2001 From: olliw42 Date: Sat, 26 Jun 2021 00:07:52 +0200 Subject: [PATCH 34/38] isAux2ModeAvailable called incorrectly, always did return true --- radio/src/gui/colorlcd/radio_hardware.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/radio/src/gui/colorlcd/radio_hardware.cpp b/radio/src/gui/colorlcd/radio_hardware.cpp index 36f9a52c5..60f1fbe94 100644 --- a/radio/src/gui/colorlcd/radio_hardware.cpp +++ b/radio/src/gui/colorlcd/radio_hardware.cpp @@ -286,7 +286,7 @@ void RadioHardwarePage::build(FormWindow * window) auxSerialInit(g_eeGeneral.auxSerialMode, modelTelemetryProtocol()); SET_DIRTY(); }); - aux->setAvailableHandler([=](int value) { return isAuxModeAvailable; }); + aux->setAvailableHandler(isAuxModeAvailable); grid.nextLine(); #endif @@ -300,7 +300,7 @@ void RadioHardwarePage::build(FormWindow * window) aux2SerialInit(g_eeGeneral.aux2SerialMode, modelTelemetryProtocol()); SET_DIRTY(); }); - aux2->setAvailableHandler([=](int value) { return isAux2ModeAvailable; }); + aux2->setAvailableHandler(isAux2ModeAvailable); grid.nextLine(); #endif From 79eee634fda5ae8d6680a834673ec0075aeb6927 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Sun, 27 Jun 2021 08:48:55 +0200 Subject: [PATCH 35/38] [color] set focus on current model or close to the current operation Resolves #345 --- radio/src/gui/colorlcd/model_select.cpp | 22 +++++++++++++++---- radio/src/storage/modelslist.cpp | 29 +++++++++++++++++++++++++ radio/src/storage/modelslist.h | 3 +++ 3 files changed, 50 insertions(+), 4 deletions(-) diff --git a/radio/src/gui/colorlcd/model_select.cpp b/radio/src/gui/colorlcd/model_select.cpp index a9cdd89fb..909b2cc5c 100644 --- a/radio/src/gui/colorlcd/model_select.cpp +++ b/radio/src/gui/colorlcd/model_select.cpp @@ -210,14 +210,21 @@ class ModelCategoryPageBody : public FormWindow update(); } - void update(int selected = 0) + void update(int selected = -1) { clear(); + if (selected < 0) { + auto model = modelslist.getCurrentModel(); + selected = category->getModelIndex(model); + if (selected < 0) selected = 0; + } + int index = 0; coord_t y = MODEL_CELL_PADDING; coord_t x = MODEL_CELL_PADDING; + ModelButton* selectButton = nullptr; for (auto &model : *category) { auto button = new ModelButton( this, {x, y, MODEL_SELECT_CELL_WIDTH, MODEL_SELECT_CELL_HEIGHT}, @@ -237,7 +244,7 @@ class ModelCategoryPageBody : public FormWindow storageCheck(true); modelslist.setCurrentModel(model); - update(); // modelslist.getModelIndex(modelCell)); + update(); }); } menu->addLine(STR_CREATE_MODEL, getCreateModelAction()); @@ -264,7 +271,7 @@ class ModelCategoryPageBody : public FormWindow .c_str(), [=] { modelslist.removeModel(category, model); - update(index > 0 ? index - 1 : 0); + update(index < category->size() - 1 ? index : index - 1); }); }); } @@ -275,7 +282,7 @@ class ModelCategoryPageBody : public FormWindow }); if (selected == index) { - button->setFocus(SET_FOCUS_DEFAULT); + selectButton = button; } index++; @@ -299,6 +306,8 @@ class ModelCategoryPageBody : public FormWindow if (category->empty()) { setFocus(); + } else if (selectButton) { + selectButton->setFocus(); } } @@ -368,4 +377,9 @@ ModelSelectMenu::ModelSelectMenu(): for (auto category: modelslist.getCategories()) { addTab(new ModelCategoryPage(category)); } + + int idx = modelslist.getCurrentCategoryIdx(); + if (idx >= 0) { + setCurrentTab(idx); + } } diff --git a/radio/src/storage/modelslist.cpp b/radio/src/storage/modelslist.cpp index 1ba806284..f6cf61609 100644 --- a/radio/src/storage/modelslist.cpp +++ b/radio/src/storage/modelslist.cpp @@ -240,6 +240,19 @@ void ModelsCategory::moveModel(ModelCell * model, int8_t step) erase(current); } +int ModelsCategory::getModelIndex(const ModelCell* model) +{ + int idx = 0; + for (auto m : *this) { + if (model == m) + return idx; + + ++idx; + } + + return -1; +} + void ModelsCategory::save(FIL * file) { #if !defined(SDCARD_YAML) @@ -389,6 +402,22 @@ void ModelsList::setCurrentCategory(ModelsCategory * cat) currentCategory = cat; } +int ModelsList::getCurrentCategoryIdx() const +{ + if (!currentCategory) + return -1; + + int idx = 0; + for (auto cat : categories) { + if (currentCategory == cat) + return idx; + + ++idx; + } + + return -1; +} + void ModelsList::setCurrentModel(ModelCell * cell) { currentModel = cell; diff --git a/radio/src/storage/modelslist.h b/radio/src/storage/modelslist.h index f9bde8302..0991fc78e 100644 --- a/radio/src/storage/modelslist.h +++ b/radio/src/storage/modelslist.h @@ -80,6 +80,8 @@ public: void removeModel(ModelCell * model); void moveModel(ModelCell * model, int8_t step); + int getModelIndex(const ModelCell* model); + void save(FIL * file); }; @@ -118,6 +120,7 @@ public: { return currentCategory; } + int getCurrentCategoryIdx() const; void setCurrentModel(ModelCell * cell); From 129866488d41f734b4b5d69d63abdcebd1577434 Mon Sep 17 00:00:00 2001 From: Risto Date: Mon, 28 Jun 2021 09:03:12 +0200 Subject: [PATCH 36/38] Voice timer countdown fix (#362) * Fix mapping of 2 bit signed countdownStart value to seconds value -2 - 5 seconds value -1 - 10 seconds value 0 - 20 seconds value 1 - 30 seconds --- radio/src/myeeprom.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index bbf93de8a..438989eb0 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -222,7 +222,7 @@ enum SwashType { #define IS_MANUAL_RESET_TIMER(idx) (g_model.timers[idx].persistent == 2) #if !defined(PCBSKY9X) -#define TIMER_COUNTDOWN_START(x) (g_model.timers[x].countdownStart > 0 ? 5 : 10 - g_model.timers[x].countdownStart * 10) +#define TIMER_COUNTDOWN_START(x) (g_model.timers[x].countdownStart == 0 ? 20 : (g_model.timers[x].countdownStart == 1 ? 30 : (g_model.timers[x].countdownStart == -1 ? 10 : 5))) #else #define TIMER_COUNTDOWN_START(x) 10 #endif From 26508214753fdbb23bc4123475a8e86e2c876ef8 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Mon, 28 Jun 2021 08:57:18 +0200 Subject: [PATCH 37/38] Fix timer countdown time setting Resolves #358 --- radio/src/gui/128x64/model_setup.cpp | 11 +++++++---- radio/src/gui/212x64/model_setup.cpp | 12 +++++++----- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index 08f1072c1..9a5f4bd69 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -240,7 +240,10 @@ inline uint8_t MODULE_SUBTYPE_ROWS(int moduleIdx) } #define POT_WARN_ROWS ((g_model.potsWarnMode) ? (uint8_t)(NUM_POTS+NUM_SLIDERS) : (uint8_t)0) -#define TIMER_ROWS 1, 0, 1, 0, 0, 0 +#define TIMER_ROWS(x) \ + 1, 0, 1, 0, 0, \ + g_model.timers[x].countdownBeep != COUNTDOWN_SILENT ? (uint8_t)1 \ + : (uint8_t)0 #if defined(PCBSKY9X) #define EXTRA_MODULE_ROWS LABEL(ExtraModule), 1, 2, @@ -411,9 +414,9 @@ void menuModelSetup(event_t event) MENU_TAB({ HEADER_LINE_COLUMNS 0, - TIMER_ROWS, - TIMER_ROWS, - TIMER_ROWS, + TIMER_ROWS(0), + TIMER_ROWS(1), + TIMER_ROWS(2), 0, // Extended limits 1, // Extended trims 0, // Show trims diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index 86878a30b..5b187a545 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -275,8 +275,10 @@ void editTimerCountdown(int timerIdx, coord_t y, LcdFlags attr, event_t event) #define TRAINER_ROWS LABEL(Trainer), 0, TRAINER_CHANNELS_ROW, TRAINER_PPM_PARAMS_ROW #endif -#define TIMER_ROWS \ - 1 | NAVIGATION_LINE_BY_LINE, 0, 1 | NAVIGATION_LINE_BY_LINE, 0, 0, 0 +#define TIMER_ROWS(x) \ + 1 | NAVIGATION_LINE_BY_LINE, 0, 1 | NAVIGATION_LINE_BY_LINE, 0, 0, \ + g_model.timers[x].countdownBeep != COUNTDOWN_SILENT ? (uint8_t)1 \ + : (uint8_t)0 inline uint8_t EXTERNAL_MODULE_TYPE_ROW() { @@ -287,11 +289,11 @@ inline uint8_t EXTERNAL_MODULE_TYPE_ROW() } #if TIMERS == 1 - #define TIMERS_ROWS TIMER_ROWS +#define TIMERS_ROWS TIMER_ROWS(0) #elif TIMERS == 2 - #define TIMERS_ROWS TIMER_ROWS, TIMER_ROWS +#define TIMERS_ROWS TIMER_ROWS(0), TIMER_ROWS(1) #elif TIMERS == 3 - #define TIMERS_ROWS TIMER_ROWS, TIMER_ROWS, TIMER_ROWS +#define TIMERS_ROWS TIMER_ROWS(0), TIMER_ROWS(1), TIMER_ROWS(2) #endif #if defined(PCBX9E) #define SW_WARN_ROWS uint8_t(NAVIGATION_LINE_BY_LINE|(getSwitchWarningsCount()-1)), uint8_t(getSwitchWarningsCount() > 8 ? TITLE_ROW : HIDDEN_ROW), uint8_t(getSwitchWarningsCount() > 16 ? TITLE_ROW : HIDDEN_ROW) From 2aa52965a92ee941ac73249a27d9de778307a19a Mon Sep 17 00:00:00 2001 From: eshifri <46511024+eshifri@users.noreply.github.com> Date: Mon, 28 Jun 2021 23:55:32 -0700 Subject: [PATCH 38/38] Highlite active inputs and mixies (#337). Take 2. (#361) * Highlight active inputs and mixies (#337) --- radio/src/gui/colorlcd/model_inputs.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/radio/src/gui/colorlcd/model_inputs.cpp b/radio/src/gui/colorlcd/model_inputs.cpp index 06080ad4e..62a24d2a8 100644 --- a/radio/src/gui/colorlcd/model_inputs.cpp +++ b/radio/src/gui/colorlcd/model_inputs.cpp @@ -337,7 +337,7 @@ void CommonInputOrMixButton::drawFlightModes(BitmapBuffer *dc, void CommonInputOrMixButton::paint(BitmapBuffer * dc) { dc->drawSolidFilledRect(0, 0, width(), height(), - /*hasFocus() ? FOCUS_BGCOLOR :*/ FIELD_BGCOLOR); + isActive() ? HIGHLIGHT_COLOR : FIELD_BGCOLOR); paintBody(dc); if (!hasFocus()) @@ -397,6 +397,7 @@ class InputLineButton : public CommonInputOrMixButton if (line.flightModes) { drawFlightModes(dc, line.flightModes, textColor); } + } };