From 9e7a331fa652745f7942682cc1caf92f966a0027 Mon Sep 17 00:00:00 2001 From: philmoz Date: Sun, 30 Jul 2023 11:58:28 +1000 Subject: [PATCH] feat: Splash screen delay opt for colorlcd, startup sound disable opt (#3451) * Enable startup splash screen duration for color LCD radios. Add option to disable startup sound. Add Companion support for changes. * Add translation string for Hebrew language file. * Fix rebase. * chore: Add T20 * Update translations. * Update translations. * Update translations. * Update translations. * Right justify radio setup controls. * Use longer translations for all radios. * Enable splash screen timeout for NV14/EL18. * Suspend watchdog timer to prevent EM if long splash display time selected. * Simplify SPLASH_TIMEOUT code. * Use WDG_RESET instead of watchdogSuspend. --------- Co-authored-by: Phil Mitchell Co-authored-by: Peter Feerick --- .../firmwares/edgetx/yaml_generalsettings.cpp | 10 +- companion/src/firmwares/generalsettings.h | 1 + companion/src/generaledit/generalsetup.cpp | 15 +- companion/src/generaledit/generalsetup.h | 1 + companion/src/generaledit/generalsetup.ui | 1536 +++++++++-------- radio/src/datastructs_private.h | 11 +- radio/src/gui/128x64/radio_setup.cpp | 158 +- radio/src/gui/212x64/radio_setup.cpp | 7 + radio/src/gui/colorlcd/radio_setup.cpp | 23 +- radio/src/opentx.cpp | 3 +- radio/src/opentx.h | 8 +- .../storage/yaml/yaml_datastructs_128x64.cpp | 2 +- .../storage/yaml/yaml_datastructs_nv14.cpp | 4 +- .../src/storage/yaml/yaml_datastructs_t20.cpp | 2 +- .../storage/yaml/yaml_datastructs_tpro.cpp | 2 +- .../src/storage/yaml/yaml_datastructs_x10.cpp | 4 +- .../storage/yaml/yaml_datastructs_x12s.cpp | 4 +- .../src/storage/yaml/yaml_datastructs_x9d.cpp | 2 +- .../src/storage/yaml/yaml_datastructs_x9e.cpp | 2 +- .../storage/yaml/yaml_datastructs_x9lite.cpp | 2 +- .../storage/yaml/yaml_datastructs_xlites.cpp | 2 +- radio/src/tasks.cpp | 46 +- radio/src/translations.cpp | 4 + radio/src/translations.h | 4 + radio/src/translations/cn.h | 1 + radio/src/translations/cz.h | 1 + radio/src/translations/da.h | 1 + radio/src/translations/de.h | 1 + radio/src/translations/en.h | 1 + radio/src/translations/es.h | 1 + radio/src/translations/fi.h | 1 + radio/src/translations/fr.h | 1 + radio/src/translations/he.h | 1 + radio/src/translations/it.h | 1 + radio/src/translations/jp.h | 1 + radio/src/translations/nl.h | 1 + radio/src/translations/pl.h | 1 + radio/src/translations/pt.h | 1 + radio/src/translations/tw.h | 1 + radio/src/translations/untranslated.h | 3 + 40 files changed, 996 insertions(+), 875 deletions(-) diff --git a/companion/src/firmwares/edgetx/yaml_generalsettings.cpp b/companion/src/firmwares/edgetx/yaml_generalsettings.cpp index b58372ef4..a14ea419c 100644 --- a/companion/src/firmwares/edgetx/yaml_generalsettings.cpp +++ b/companion/src/firmwares/edgetx/yaml_generalsettings.cpp @@ -193,9 +193,7 @@ Node convert::encode(const GeneralSettings& rhs) node["internalModuleBaudrate"] = internalModuleBaudrate.value; node["internalModule"] = LookupValue(internalModuleLut, rhs.internalModule); - if (!IS_FAMILY_HORUS_OR_T16(fw->getBoard())) { - node["splashMode"] = rhs.splashMode; - } + node["splashMode"] = rhs.splashMode; node["lightAutoOff"] = rhs.backlightDelay; node["templateSetup"] = rhs.templateSetup; node["hapticLength"] = rhs.hapticLength + 2; @@ -226,6 +224,7 @@ Node convert::encode(const GeneralSettings& rhs) node["varioRange"] = rhs.varioRange * 15; node["varioRepeat"] = rhs.varioRepeat; node["backgroundVolume"] = rhs.backgroundVolume + 2; + node["dontPlayHello"] = (int)rhs.dontPlayHello; if (Boards::getCapability(fw->getBoard(), Board::HasColorLcd)) { node["modelQuickSelect"] = (int)rhs.modelQuickSelect; } @@ -435,9 +434,7 @@ bool convert::decode(const Node& node, GeneralSettings& rhs) rhs.internalModule = Boards::getDefaultInternalModules(fw->getBoard()); } - if (!IS_FAMILY_HORUS_OR_T16(fw->getBoard())) { - node["splashMode"] >> rhs.splashMode; - } + node["splashMode"] >> rhs.splashMode; node["lightAutoOff"] >> rhs.backlightDelay; node["templateSetup"] >> rhs.templateSetup; node["hapticLength"] >> ioffset_int(rhs.hapticLength, 2); @@ -471,6 +468,7 @@ bool convert::decode(const Node& node, GeneralSettings& rhs) node["varioRepeat"] >> rhs.varioRepeat; node["backgroundVolume"] >> ioffset_int(rhs.backgroundVolume, 2); node["modelQuickSelect"] >> rhs.modelQuickSelect; + node["dontPlayHello"] >> rhs.dontPlayHello; // depreciated v2.7 replaced by serialPort if (node["auxSerialMode"]) { diff --git a/companion/src/firmwares/generalsettings.h b/companion/src/firmwares/generalsettings.h index dfaf2a0da..f5b40e23c 100644 --- a/companion/src/firmwares/generalsettings.h +++ b/companion/src/firmwares/generalsettings.h @@ -221,6 +221,7 @@ class GeneralSettings { bool preBeep; bool flashBeep; int splashMode; + bool dontPlayHello; unsigned int backlightDelay; unsigned int templateSetup; //RETA order according to chout_ar array int PPM_Multiplier; diff --git a/companion/src/generaledit/generalsetup.cpp b/companion/src/generaledit/generalsetup.cpp index 15ec5e444..14ac57b23 100644 --- a/companion/src/generaledit/generalsetup.cpp +++ b/companion/src/generaledit/generalsetup.cpp @@ -251,12 +251,9 @@ ui(new Ui::GeneralSetup) ui->rssiPowerOffWarnChkB->setChecked(!generalSettings.disableRssiPoweroffAlarm); // Default is zero=checked + ui->splashScreenDuration->setCurrentIndex(3-generalSettings.splashMode); if (IS_FAMILY_HORUS_OR_T16(firmware->getBoard())) { - ui->splashScreenDuration->hide(); - ui->splashScreenLabel->hide(); - } - else { - ui->splashScreenDuration->setCurrentIndex(3-generalSettings.splashMode); + ui->splashScreenDuration->setItemText(0, QCoreApplication::translate("GeneralSetup", "1s", nullptr)); } if (!firmware->getCapability(PwrButtonPress)) { @@ -477,6 +474,8 @@ void GeneralSetupPanel::setValues() ui->registrationId->setText(generalSettings.registrationId); + ui->startSoundCB->setChecked(!generalSettings.dontPlayHello); + if (Boards::getCapability(firmware->getBoard(), Board::HasColorLcd)) { ui->modelQuickSelect_CB->setChecked(generalSettings.modelQuickSelect); } else { @@ -804,3 +803,9 @@ void GeneralSetupPanel::on_modelQuickSelect_CB_stateChanged(int) generalSettings.modelQuickSelect = ui->modelQuickSelect_CB->isChecked(); emit modified(); } + +void GeneralSetupPanel::on_startSoundCB_stateChanged(int) +{ + generalSettings.dontPlayHello = !ui->startSoundCB->isChecked(); + emit modified(); +} diff --git a/companion/src/generaledit/generalsetup.h b/companion/src/generaledit/generalsetup.h index 0e7354de4..d3675a295 100644 --- a/companion/src/generaledit/generalsetup.h +++ b/companion/src/generaledit/generalsetup.h @@ -93,6 +93,7 @@ class GeneralSetupPanel : public GeneralPanel void on_pwrOffDelay_valueChanged(int); void on_modelQuickSelect_CB_stateChanged(int); + void on_startSoundCB_stateChanged(int); private: Ui::GeneralSetup *ui; diff --git a/companion/src/generaledit/generalsetup.ui b/companion/src/generaledit/generalsetup.ui index 9efd263b8..68a514176 100644 --- a/companion/src/generaledit/generalsetup.ui +++ b/companion/src/generaledit/generalsetup.ui @@ -1166,752 +1166,7 @@ p, li { white-space: pre-wrap; } QLayout::SetDefaultConstraint - - - - - 0 - 0 - - - - - 0 - 0 - - - - - - - Contrast - - - - - - - - 0 - 0 - - - - - 0 - 22 - - - - - Quiet - - - - - Only Alarms - - - - - No Keys - - - - - All - - - - - - - - GPS Coordinates - - - - - - - - Metric - - - - - Imperial - - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - "No Sound" Warning - - - - - - - - 0 - 0 - - - - - 0 - 22 - - - - - - - - - - If not zero will sound beeps if the transmitter has been left without inputs for the specified number of minutes. - - - min - - - 120 - - - - - - - - - - - - - Mode selection: - -Mode 1: - Left stick: Elevator, Rudder - Right stick: Throttle, Aileron - -Mode 2: - Left stick: Throttle, Rudder - Right stick: Elevator, Aileron - -Mode 3: - Left stick: Elevator, Aileron - Right stick: Throttle, Rudder - -Mode 4: - Left stick: Throttle, Aileron - Right stick: Elevator, Rudder - - - - - 1 - - - - Mode 1 (RUD ELE THR AIL) - - - - - Mode 2 (RUD THR ELE AIL) - - - - - Mode 3 (AIL ELE THR RUD) - - - - - Mode 4 (AIL THR ELE RUD) - - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - LCD Display Type - - - - - - - - - - - - - <html><head/><body><p>Channel order</p><p><br/></p><p>Defines the order of the default mixes created on a new model.</p></body></html> - - - 0 - - - - R E T A - - - - - R E A T - - - - - R T E A - - - - - R T A E - - - - - R A E T - - - - - R A T E - - - - - E R T A - - - - - E R A T - - - - - E T R A - - - - - E T A R - - - - - E A R T - - - - - E A T R - - - - - T R E A - - - - - T R A E - - - - - T E R A - - - - - T E A R - - - - - T A R E - - - - - T A E R - - - - - A R E T - - - - - A R T E - - - - - A E R T - - - - - A E T R - - - - - A T R E - - - - - A T E R - - - - - - - - - 0 - 0 - - - - Play Delay (switch mid position) - - - - - - - - 0 - 0 - - - - - 0 - 22 - - - - - - - - - - Battery warning voltage. -This is the threashhold where the battery warning sounds. - -Acceptable values are 3v..12v - - - - - - V - - - 1 - - - 3.000000000000000 - - - 12.000000000000000 - - - 0.100000000000000 - - - 9.600000000000000 - - - - - - - - 0 - 0 - - - - - 0 - 22 - - - - -2 - - - 2 - - - 1 - - - Qt::Horizontal - - - - - - - Power On Delay - - - - - - - Jack Mode - - - - - - - - 0 - 0 - - - - MAVLink Baud Rate - - - - - - - - 0 - 0 - - - - Default Channel Order - - - - - - - - 0 - 0 - - - - - 20 - 0 - - - - - - - Battery Warning - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - Haptic Strength - - - - - - - - - Min - - - - - - - v - - - 1 - - - 3.000000000000000 - - - 16.000000000000000 - - - 0.100000000000000 - - - 9.000000000000000 - - - - - - - Max - - - - - - - v - - - 1 - - - 3.000000000000000 - - - 16.000000000000000 - - - 0.100000000000000 - - - 12.000000000000000 - - - - - - - - - - 0 - 0 - - - - - 0 - 22 - - - - - 16777215 - 16777215 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" text-decoration: underline;">Warnings</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These will define startup warnings.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Throttle warning - will alert if the throttle is not at idle during startup</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Switch warning - will alert if switches are not in their defaul position</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Memory warning - will alert if there's not a lot of memory left</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Silent mode warning - will alert you if the beeper is set to quiet (0)</p></body></html> - - - - - - true - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - Beeper Length - - - - - - - - 0 - 0 - - - - - 0 - 22 - - - - - X-Short - - - - - Short - - - - - Normal - - - - - Long - - - - - X-Long - - - - - - - - - - - 0 - 0 - - - - - --- - - - - - 2s - - - - - 3s - - - - - 4s - - - - - 6s - - - - - 8s - - - - - 10s - - - - - 15s - - - - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - Inactivity Timer - - - - + Qt::Vertical @@ -1924,7 +1179,7 @@ p, li { white-space: pre-wrap; } - + @@ -1943,7 +1198,7 @@ p, li { white-space: pre-wrap; } - + @@ -2021,7 +1276,7 @@ p, li { white-space: pre-wrap; } - + @@ -2073,7 +1328,7 @@ p, li { white-space: pre-wrap; } - + @@ -2127,7 +1382,7 @@ p, li { white-space: pre-wrap; } - + @@ -2162,7 +1417,7 @@ p, li { white-space: pre-wrap; } - + @@ -2181,7 +1436,7 @@ p, li { white-space: pre-wrap; } - + @@ -2356,7 +1611,7 @@ p, li { white-space: pre-wrap; } - + @@ -2389,21 +1644,21 @@ p, li { white-space: pre-wrap; } - + Stick Mode - + USB Mode - + @@ -2427,21 +1682,21 @@ p, li { white-space: pre-wrap; } - + Measurement Units - + Power Off Delay - + sec @@ -2451,7 +1706,7 @@ p, li { white-space: pre-wrap; } - + sec @@ -2461,6 +1716,765 @@ p, li { white-space: pre-wrap; } + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + Contrast + + + + + + + + 0 + 0 + + + + + 0 + 22 + + + + + Quiet + + + + + Only Alarms + + + + + No Keys + + + + + All + + + + + + + + GPS Coordinates + + + + + + + + Metric + + + + + Imperial + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + "No Sound" Warning + + + + + + + + 0 + 0 + + + + + 0 + 22 + + + + + + + + + + If not zero will sound beeps if the transmitter has been left without inputs for the specified number of minutes. + + + min + + + 120 + + + + + + + + + + + + + Mode selection: + +Mode 1: + Left stick: Elevator, Rudder + Right stick: Throttle, Aileron + +Mode 2: + Left stick: Throttle, Rudder + Right stick: Elevator, Aileron + +Mode 3: + Left stick: Elevator, Aileron + Right stick: Throttle, Rudder + +Mode 4: + Left stick: Throttle, Aileron + Right stick: Elevator, Rudder + + + + + 1 + + + + Mode 1 (RUD ELE THR AIL) + + + + + Mode 2 (RUD THR ELE AIL) + + + + + Mode 3 (AIL ELE THR RUD) + + + + + Mode 4 (AIL THR ELE RUD) + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + LCD Display Type + + + + + + + + + + + + + <html><head/><body><p>Channel order</p><p><br/></p><p>Defines the order of the default mixes created on a new model.</p></body></html> + + + 0 + + + + R E T A + + + + + R E A T + + + + + R T E A + + + + + R T A E + + + + + R A E T + + + + + R A T E + + + + + E R T A + + + + + E R A T + + + + + E T R A + + + + + E T A R + + + + + E A R T + + + + + E A T R + + + + + T R E A + + + + + T R A E + + + + + T E R A + + + + + T E A R + + + + + T A R E + + + + + T A E R + + + + + A R E T + + + + + A R T E + + + + + A E R T + + + + + A E T R + + + + + A T R E + + + + + A T E R + + + + + + + + + 0 + 0 + + + + Play Delay (switch mid position) + + + + + + + + 0 + 0 + + + + + 0 + 22 + + + + + + + + + + Battery warning voltage. +This is the threashhold where the battery warning sounds. + +Acceptable values are 3v..12v + + + + + + V + + + 1 + + + 3.000000000000000 + + + 12.000000000000000 + + + 0.100000000000000 + + + 9.600000000000000 + + + + + + + + 0 + 0 + + + + + 0 + 22 + + + + -2 + + + 2 + + + 1 + + + Qt::Horizontal + + + + + + + Power On Delay + + + + + + + Jack Mode + + + + + + + + 0 + 0 + + + + MAVLink Baud Rate + + + + + + + + 0 + 0 + + + + Default Channel Order + + + + + + + + 0 + 0 + + + + + 20 + 0 + + + + + + + Battery Warning + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + Haptic Strength + + + + + + + + + Min + + + + + + + v + + + 1 + + + 3.000000000000000 + + + 16.000000000000000 + + + 0.100000000000000 + + + 9.000000000000000 + + + + + + + Max + + + + + + + v + + + 1 + + + 3.000000000000000 + + + 16.000000000000000 + + + 0.100000000000000 + + + 12.000000000000000 + + + + + + + + + + 0 + 0 + + + + + 0 + 22 + + + + + 16777215 + 16777215 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" text-decoration: underline;">Warnings</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These will define startup warnings.</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Throttle warning - will alert if the throttle is not at idle during startup</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Switch warning - will alert if switches are not in their defaul position</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Memory warning - will alert if there's not a lot of memory left</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Silent mode warning - will alert you if the beeper is set to quiet (0)</p></body></html> + + + + + + true + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + Beeper Length + + + + + + + + 0 + 0 + + + + + 0 + 22 + + + + + X-Short + + + + + Short + + + + + Normal + + + + + Long + + + + + X-Long + + + + + + + + + + + 0 + 0 + + + + + --- + + + + + 2s + + + + + 3s + + + + + 4s + + + + + 6s + + + + + 8s + + + + + 10s + + + + + 15s + + + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + Inactivity Timer + + + + + + + Play Startup Sound + + + + + + + + + + diff --git a/radio/src/datastructs_private.h b/radio/src/datastructs_private.h index 059b8bad2..afc537772 100644 --- a/radio/src/datastructs_private.h +++ b/radio/src/datastructs_private.h @@ -810,12 +810,6 @@ PACK(struct TrainerData { NOBACKUP(TrainerMix mix[4]); }); -#if defined(COLORLCD) - #define SPLASH_MODE uint8_t splashSpares:3 SKIP -#else - #define SPLASH_MODE int8_t splashMode:3 -#endif - #if defined(COLORLCD) #define EXTRA_GENERAL_FIELDS \ NOBACKUP(char currModelFilename[LEN_MODEL_FILENAME+1]); \ @@ -869,7 +863,7 @@ PACK(struct RadioData { int8_t antennaMode:2 ENUM(AntennaModes); uint8_t disableRtcWarning:1; uint8_t keysBacklight:1; - uint8_t spare1:1 SKIP; + NOBACKUP(uint8_t dontPlayHello:1); uint8_t internalModule ENUM(ModuleType); NOBACKUP(TrainerData trainer); NOBACKUP(uint8_t view); // index of view in main screen @@ -885,7 +879,7 @@ PACK(struct RadioData { NOBACKUP(uint8_t inactivityTimer); CUST_ATTR(telemetryBaudrate, r_telemetryBaudrate, nullptr); uint8_t internalModuleBaudrate:3; - SPLASH_MODE; /* 3bits */ + int8_t splashMode:3; /* 3bits */ int8_t hapticMode:2 CUST(r_beeperMode,w_beeperMode); int8_t switchesDelay; NOBACKUP(uint8_t lightAutoOff); @@ -987,7 +981,6 @@ PACK(struct RadioData { #undef TELEMETRY_DATA #undef SCRIPTS_DATA #undef CUSTOM_SCREENS_DATA -#undef SPLASH_MODE #undef EXTRA_GENERAL_FIELDS #undef THEME_DATA #undef NOBACKUP diff --git a/radio/src/gui/128x64/radio_setup.cpp b/radio/src/gui/128x64/radio_setup.cpp index b1dc5383d..70cf5f6b6 100644 --- a/radio/src/gui/128x64/radio_setup.cpp +++ b/radio/src/gui/128x64/radio_setup.cpp @@ -97,6 +97,7 @@ enum { CASE_PWM_BACKLIGHT(ITEM_RADIO_SETUP_BACKLIGHT_BRIGHTNESS_ON) CASE_BACKLIGHT(ITEM_RADIO_SETUP_FLASH_BEEP) CASE_SPLASH_PARAM(ITEM_RADIO_SETUP_DISABLE_SPLASH) + ITEM_RADIO_SETUP_START_SOUND, CASE_PWR_BUTTON_PRESS(ITEM_RADIO_SETUP_PWR_ON_SPEED) CASE_PWR_BUTTON_PRESS(ITEM_RADIO_SETUP_PWR_OFF_SPEED) CASE_PXX2(ITEM_RADIO_SETUP_OWNER_ID) @@ -134,7 +135,7 @@ enum { uint8_t viewOptCheckBox(coord_t y, const char* title, uint8_t value, uint8_t attr, event_t event) { lcdDrawText(INDENT_WIDTH, y, title); - return !editCheckBox(!value, 110, y, nullptr, attr, event ) ; + return !editCheckBox(!value, LCD_W-9, y, nullptr, attr, event ) ; } void menuRadioSetup(event_t event) @@ -192,6 +193,7 @@ void menuRadioSetup(event_t event) CASE_PWM_BACKLIGHT(0) CASE_BACKLIGHT(0) CASE_SPLASH_PARAM(0) + 0, CASE_PWR_BUTTON_PRESS(0) CASE_PWR_BUTTON_PRESS(0) CASE_PXX2(0) /* owner registration ID */ @@ -233,7 +235,7 @@ void menuRadioSetup(event_t event) uint8_t rowattr = (menuHorizontalPosition==j ? attr : 0); switch (j) { case 0: - lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, t.tm_year+TM_YEAR_BASE, rowattr); + lcdDrawNumber(RADIO_SETUP_2ND_COLUMN-2, y, t.tm_year+TM_YEAR_BASE, rowattr); lcdDrawChar(lcdNextPos, y, '-'); if (rowattr && s_editMode > 0) t.tm_year = checkIncDec(event, t.tm_year, 112, 200, 0); break; @@ -265,7 +267,7 @@ void menuRadioSetup(event_t event) uint8_t rowattr = (menuHorizontalPosition==j ? attr : 0); switch (j) { case 0: - lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, t.tm_hour, rowattr|LEADING0, 2); + lcdDrawNumber(LCD_W-6*FW-5, y, t.tm_hour, rowattr|LEADING0, 2); lcdDrawChar(lcdNextPos + 1, y, ':'); if (rowattr && s_editMode > 0) t.tm_hour = checkIncDec(event, t.tm_hour, 0, 23, 0); break; @@ -289,9 +291,9 @@ void menuRadioSetup(event_t event) #if defined(BATTGRAPH) case ITEM_RADIO_SETUP_BATT_RANGE: lcdDrawTextAlignedLeft(y, STR_BATTERY_RANGE); - putsVolts(RADIO_SETUP_2ND_COLUMN, y, 90+g_eeGeneral.vBatMin, (menuHorizontalPosition==0 ? attr : 0)|LEFT|NO_UNIT); - lcdDrawChar(lcdLastRightPos, y, '-'); - putsVolts(lcdLastRightPos+FW, y, 120+g_eeGeneral.vBatMax, (menuHorizontalPosition>0 ? attr : 0)|LEFT|NO_UNIT); + putsVolts(LCD_W-1, y, 120+g_eeGeneral.vBatMax, (menuHorizontalPosition>0 ? attr : 0)|RIGHT|NO_UNIT); + lcdDrawChar(lcdLastLeftPos - FW, y, '-'); + putsVolts(lcdLastLeftPos - FW, y, 90+g_eeGeneral.vBatMin, (menuHorizontalPosition==0 ? attr : 0)|RIGHT|NO_UNIT); if (attr && s_editMode>0) { if (menuHorizontalPosition==0) CHECK_INCDEC_GENVAR(event, g_eeGeneral.vBatMin, -60, g_eeGeneral.vBatMax+29); // min=3.0V @@ -307,17 +309,17 @@ void menuRadioSetup(event_t event) #if defined(AUDIO) case ITEM_RADIO_SETUP_BEEP_MODE: - g_eeGeneral.beepMode = editChoice(RADIO_SETUP_2ND_COLUMN, y, STR_SPEAKER, STR_VBEEPMODE, g_eeGeneral.beepMode, -2, 1, attr, event); + g_eeGeneral.beepMode = editChoice(LCD_W-2, y, STR_SPEAKER, STR_VBEEPMODE, g_eeGeneral.beepMode, -2, 1, attr|RIGHT, event); break; #if defined(BUZZER) // AUDIO + BUZZER case ITEM_RADIO_SETUP_BUZZER_MODE: - g_eeGeneral.buzzerMode = editChoice(RADIO_SETUP_2ND_COLUMN, y, STR_BUZZER, STR_VBEEPMODE, g_eeGeneral.buzzerMode, -2, 1, attr, event); + g_eeGeneral.buzzerMode = editChoice(LCD_W-2, y, STR_BUZZER, STR_VBEEPMODE, g_eeGeneral.buzzerMode, -2, 1, attr|RIGHT, event); break; #endif #elif defined(BUZZER) // BUZZER only case ITEM_RADIO_SETUP_BUZZER_MODE: - g_eeGeneral.beepMode = editChoice(RADIO_SETUP_2ND_COLUMN, y, STR_SPEAKER, STR_VBEEPMODE, g_eeGeneral.beepMode, -2, 1, attr, event); + g_eeGeneral.beepMode = editChoice(LCD_W-2, y, STR_SPEAKER, STR_VBEEPMODE, g_eeGeneral.beepMode, -2, 1, attr|RIGHT, event); break; #endif @@ -359,12 +361,15 @@ void menuRadioSetup(event_t event) #if defined(AUDIO) case ITEM_RADIO_SETUP_SPEAKER_PITCH: - lcdDrawText(INDENT_WIDTH, y, STR_BEEP_PITCH); - lcdDrawChar(RADIO_SETUP_2ND_COLUMN, y, '+', attr); - lcdDrawNumber(RADIO_SETUP_2ND_COLUMN+FW, y, g_eeGeneral.speakerPitch*15, attr|LEFT); - lcdDrawText(lcdLastRightPos, y, "Hz", attr); - if (attr) { - CHECK_INCDEC_GENVAR(event, g_eeGeneral.speakerPitch, 0, 20); + { + lcdDrawText(INDENT_WIDTH, y, STR_BEEP_PITCH); + lcdDrawNumber(LCD_W-14, y, g_eeGeneral.speakerPitch*15, attr|RIGHT); + coord_t lp = lcdLastLeftPos - FW; + lcdDrawText(lcdLastRightPos, y, "Hz", attr); + lcdDrawChar(lp, y, '+', attr); + if (attr) { + CHECK_INCDEC_GENVAR(event, g_eeGeneral.speakerPitch, 0, 20); + } } break; #endif @@ -381,21 +386,21 @@ void menuRadioSetup(event_t event) case ITEM_RADIO_SETUP_VARIO_PITCH: lcdDrawText(INDENT_WIDTH, y, STR_PITCH_AT_ZERO); - lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, VARIO_FREQUENCY_ZERO+(g_eeGeneral.varioPitch*10), attr|LEFT); + lcdDrawNumber(LCD_W-14, y, VARIO_FREQUENCY_ZERO+(g_eeGeneral.varioPitch*10), attr|RIGHT); lcdDrawText(lcdLastRightPos, y, "Hz", attr); if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.varioPitch, -40, 40); break; case ITEM_RADIO_SETUP_VARIO_RANGE: lcdDrawText(INDENT_WIDTH, y, STR_PITCH_AT_MAX); - lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, VARIO_FREQUENCY_ZERO+(g_eeGeneral.varioPitch*10)+VARIO_FREQUENCY_RANGE+(g_eeGeneral.varioRange*10), attr|LEFT); + lcdDrawNumber(LCD_W-14, y, VARIO_FREQUENCY_ZERO+(g_eeGeneral.varioPitch*10)+VARIO_FREQUENCY_RANGE+(g_eeGeneral.varioRange*10), attr|RIGHT); lcdDrawText(lcdLastRightPos, y, "Hz", attr); if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.varioRange, -80, 80); break; case ITEM_RADIO_SETUP_VARIO_REPEAT: lcdDrawText(INDENT_WIDTH, y, STR_REPEAT_AT_ZERO); - lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, VARIO_REPEAT_ZERO+(g_eeGeneral.varioRepeat*10), attr|LEFT); + lcdDrawNumber(LCD_W-14, y, VARIO_REPEAT_ZERO+(g_eeGeneral.varioRepeat*10), attr|RIGHT); lcdDrawText(lcdLastRightPos, y, STR_MS, attr); if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.varioRepeat, -30, 50); break; @@ -407,7 +412,7 @@ void menuRadioSetup(event_t event) break; case ITEM_RADIO_SETUP_HAPTIC_MODE: - g_eeGeneral.hapticMode = editChoice(RADIO_SETUP_2ND_COLUMN, y, INDENT TR_MODE, STR_VBEEPMODE, g_eeGeneral.hapticMode, -2, 1, attr, event); + g_eeGeneral.hapticMode = editChoice(LCD_W-2, y, INDENT TR_MODE, STR_VBEEPMODE, g_eeGeneral.hapticMode, -2, 1, attr|RIGHT, event); break; case ITEM_RADIO_SETUP_HAPTIC_LENGTH: @@ -427,33 +432,39 @@ void menuRadioSetup(event_t event) break; case ITEM_RADIO_SETUP_IMU_MAX: - lcdDrawText(INDENT_WIDTH, y, STR_IMU_MAX); - lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, IMU_MAX_DEFAULT + g_eeGeneral.imuMax, attr|LEFT); - lcdDrawChar(lcdLastRightPos, y, STR_CHAR_BW_DEGREE, attr); - if (attr) { - CHECK_INCDEC_GENVAR(event, g_eeGeneral.imuMax, IMU_MAX_DEFAULT - IMU_MAX_RANGE, IMU_MAX_DEFAULT + IMU_MAX_RANGE); - lcdDrawText(LCD_W-4*FW, y, "("); - lcdDrawNumber(lcdLastRightPos, y, max(abs(gyro.outputs[0]), abs(gyro.outputs[1])) * 180 / 1024); - lcdDrawText(lcdLastRightPos, y, ")"); + { + lcdDrawText(INDENT_WIDTH, y, STR_IMU_MAX); + lcdDrawNumber(LCD_W-7, y, IMU_MAX_DEFAULT + g_eeGeneral.imuMax, attr|RIGHT); + coord_t lp = lcdLastLeftPos - 2; + lcdDrawChar(lcdLastRightPos, y, STR_CHAR_BW_DEGREE, attr); + if (attr) { + CHECK_INCDEC_GENVAR(event, g_eeGeneral.imuMax, IMU_MAX_DEFAULT - IMU_MAX_RANGE, IMU_MAX_DEFAULT + IMU_MAX_RANGE); + lcdDrawText(lp, y, ")", RIGHT); + lcdDrawNumber(lcdLastLeftPos, y, max(abs(gyro.outputs[0]), abs(gyro.outputs[1])) * 180 / 1024, RIGHT); + lcdDrawText(lcdLastLeftPos, y, "(", RIGHT); + } } break; case ITEM_RADIO_SETUP_IMU_OFFSET: - lcdDrawText(INDENT_WIDTH, y, STR_IMU_OFFSET); - lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.imuOffset, attr|LEFT); - lcdDrawChar(lcdLastRightPos, y, STR_CHAR_BW_DEGREE, attr); - if (attr) { - CHECK_INCDEC_GENVAR(event, g_eeGeneral.imuOffset, IMU_OFFSET_MIN, IMU_OFFSET_MAX); - lcdDrawText(LCD_W-4*FW, y, "("); - lcdDrawNumber(lcdLastRightPos, y, gyro.outputs[0] * 180 / 1024); - lcdDrawText(lcdLastRightPos, y, ")"); + { + lcdDrawText(INDENT_WIDTH, y, STR_IMU_OFFSET); + lcdDrawNumber(LCD_W-7, y, g_eeGeneral.imuOffset, attr|RIGHT); + coord_t lp = lcdLastLeftPos - 2; + lcdDrawChar(lcdLastRightPos, y, STR_CHAR_BW_DEGREE, attr); + if (attr) { + CHECK_INCDEC_GENVAR(event, g_eeGeneral.imuOffset, IMU_OFFSET_MIN, IMU_OFFSET_MAX); + lcdDrawText(lp, y, ")", RIGHT); + lcdDrawNumber(lcdLastLeftPos, y, gyro.outputs[0] * 180 / 1024, RIGHT); + lcdDrawText(lcdLastLeftPos, y, "(", RIGHT); + } } break; #endif case ITEM_RADIO_SETUP_CONTRAST: lcdDrawTextAlignedLeft(y, STR_CONTRAST); - lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.contrast, attr|LEFT); + lcdDrawNumber(LCD_W-2, y, g_eeGeneral.contrast, attr|RIGHT); if (attr) { CHECK_INCDEC_GENVAR(event, g_eeGeneral.contrast, LCD_CONTRAST_MIN, LCD_CONTRAST_MAX); lcdSetContrast(); @@ -466,7 +477,7 @@ void menuRadioSetup(event_t event) case ITEM_RADIO_SETUP_BATTERY_WARNING: lcdDrawText(INDENT_WIDTH, y, STR_BATTERYWARNING); - putsVolts(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.vBatWarn, attr|LEFT); + putsVolts(LCD_W-7, y, g_eeGeneral.vBatWarn, attr|RIGHT); if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.vBatWarn, 30, 120); //3-12V break; @@ -474,7 +485,7 @@ void menuRadioSetup(event_t event) { lcdDrawText(INDENT_WIDTH, y, STR_MEMORYWARNING); uint8_t b = 1 - g_eeGeneral.disableMemoryWarning; - g_eeGeneral.disableMemoryWarning = 1 - editCheckBox(b, RADIO_SETUP_2ND_COLUMN, y, nullptr, attr, event); + g_eeGeneral.disableMemoryWarning = 1 - editCheckBox(b, LCD_W-9, y, nullptr, attr, event); break; } @@ -482,7 +493,7 @@ void menuRadioSetup(event_t event) { lcdDrawText(INDENT_WIDTH, y, STR_ALARMWARNING); uint8_t b = 1 - g_eeGeneral.disableAlarmWarning; - g_eeGeneral.disableAlarmWarning = 1 - editCheckBox(b, RADIO_SETUP_2ND_COLUMN, y, nullptr, attr, event); + g_eeGeneral.disableAlarmWarning = 1 - editCheckBox(b, LCD_W-9, y, nullptr, attr, event); break; } @@ -490,21 +501,21 @@ void menuRadioSetup(event_t event) { lcdDrawText(INDENT_WIDTH, y, STR_RSSI_SHUTDOWN_ALARM); uint8_t b = 1 - g_eeGeneral.disableRssiPoweroffAlarm; - g_eeGeneral.disableRssiPoweroffAlarm = 1 - editCheckBox(b, RADIO_SETUP_2ND_COLUMN, y, nullptr, attr, event); + g_eeGeneral.disableRssiPoweroffAlarm = 1 - editCheckBox(b, LCD_W-9, y, nullptr, attr, event); break; } #if defined(TX_CAPACITY_MEASUREMENT) case ITEM_RADIO_SETUP_CAPACITY_WARNING: lcdDrawTextAlignedLeft(y, STR_CAPAWARNING); - drawValueWithUnit(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.mAhWarn*50, UNIT_MAH, attr|LEFT) ; + drawValueWithUnit(LCD_W-2, y, g_eeGeneral.mAhWarn*50, UNIT_MAH, attr|RIGHT) ; if(attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.mAhWarn, 0, 100); break; #endif case ITEM_RADIO_SETUP_INACTIVITY_ALARM: lcdDrawText(INDENT_WIDTH, y, STR_INACTIVITYALARM); - lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.inactivityTimer, attr|LEFT); + lcdDrawNumber(LCD_W-7, y, g_eeGeneral.inactivityTimer, attr|RIGHT); lcdDrawChar(lcdLastRightPos, y, 'm'); if(attr) g_eeGeneral.inactivityTimer = checkIncDec(event, g_eeGeneral.inactivityTimer, 0, 250, EE_GENERAL); //0..250minutes break; @@ -516,24 +527,24 @@ void menuRadioSetup(event_t event) case ITEM_RADIO_SETUP_BACKLIGHT_MODE: lcdDrawText(INDENT_WIDTH, y, STR_MODE); - g_eeGeneral.backlightMode = editChoice(RADIO_SETUP_2ND_COLUMN, y, nullptr, STR_VBLMODE, g_eeGeneral.backlightMode, e_backlight_mode_off, e_backlight_mode_on, attr, event); + g_eeGeneral.backlightMode = editChoice(LCD_W-2, y, nullptr, STR_VBLMODE, g_eeGeneral.backlightMode, e_backlight_mode_off, e_backlight_mode_on, attr|RIGHT, event); break; case ITEM_RADIO_SETUP_FLASH_BEEP: lcdDrawText(INDENT_WIDTH, y, STR_ALARM); - g_eeGeneral.alarmsFlash = editCheckBox(g_eeGeneral.alarmsFlash, RADIO_SETUP_2ND_COLUMN, y, nullptr, attr, event ) ; + g_eeGeneral.alarmsFlash = editCheckBox(g_eeGeneral.alarmsFlash, LCD_W-9, y, nullptr, attr, event ) ; break; case ITEM_RADIO_SETUP_BACKLIGHT_DELAY: lcdDrawText(INDENT_WIDTH, y, STR_DURATION); - lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.lightAutoOff*5, attr|LEFT); + lcdDrawNumber(LCD_W-7, y, g_eeGeneral.lightAutoOff*5, attr|RIGHT); lcdDrawChar(lcdLastRightPos, y, 's'); if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.lightAutoOff, 0, 600/5); break; case ITEM_RADIO_SETUP_BRIGHTNESS: lcdDrawText(INDENT_WIDTH, y, STR_BRIGHTNESS); - lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, 100-g_eeGeneral.backlightBright, attr|LEFT) ; + lcdDrawNumber(LCD_W-2, y, 100-g_eeGeneral.backlightBright, attr|RIGHT) ; if (attr) { uint8_t b = 100 - g_eeGeneral.backlightBright; CHECK_INCDEC_GENVAR(event, b, 0, 100); @@ -545,13 +556,13 @@ void menuRadioSetup(event_t event) #if defined(PWM_BACKLIGHT) case ITEM_RADIO_SETUP_BACKLIGHT_BRIGHTNESS_OFF: lcdDrawText(INDENT_WIDTH, y, STR_BLOFFBRIGHTNESS); - lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.blOffBright, attr|LEFT); + lcdDrawNumber(LCD_W-2, y, g_eeGeneral.blOffBright, attr|RIGHT); if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.blOffBright, 0, 15); break; case ITEM_RADIO_SETUP_BACKLIGHT_BRIGHTNESS_ON: lcdDrawText(INDENT_WIDTH, y, STR_BLONBRIGHTNESS); - lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, 15-g_eeGeneral.blOnBright, attr|LEFT); + lcdDrawNumber(LCD_W-2, y, 15-g_eeGeneral.blOnBright, attr|RIGHT); if (attr) g_eeGeneral.blOnBright = 15 - checkIncDecGen(event, 15-g_eeGeneral.blOnBright, 0, 15); break; #endif @@ -561,28 +572,33 @@ void menuRadioSetup(event_t event) { lcdDrawTextAlignedLeft(y, STR_SPLASHSCREEN); if (SPLASH_NEEDED()) { - lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, SPLASH_TIMEOUT/100, attr|LEFT); + lcdDrawNumber(LCD_W-7, y, SPLASH_TIMEOUT/100, attr|RIGHT); lcdDrawChar(lcdLastRightPos, y, 's'); } else { - lcdDrawMMM(RADIO_SETUP_2ND_COLUMN, y, attr); + lcdDrawMMM(LCD_W-2, y, attr|RIGHT); } if (attr) g_eeGeneral.splashMode = -checkIncDecGen(event, -g_eeGeneral.splashMode, -3, 4); break; } #endif + case ITEM_RADIO_SETUP_START_SOUND: + lcdDrawTextAlignedLeft(y, STR_PLAY_HELLO); + g_eeGeneral.dontPlayHello = !editCheckBox(!g_eeGeneral.dontPlayHello, LCD_W-9, y, nullptr, attr, event ) ; + break; + #if defined(PWR_BUTTON_PRESS) case ITEM_RADIO_SETUP_PWR_ON_SPEED: lcdDrawTextAlignedLeft(y, STR_PWR_ON_DELAY); - lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, 2 - g_eeGeneral.pwrOnSpeed, attr|LEFT); + lcdDrawNumber(LCD_W-7, y, 2 - g_eeGeneral.pwrOnSpeed, attr|RIGHT); lcdDrawChar(lcdLastRightPos, y, 's'); if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.pwrOnSpeed, -1, 2); break; case ITEM_RADIO_SETUP_PWR_OFF_SPEED: lcdDrawTextAlignedLeft(y, STR_PWR_OFF_DELAY); - lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, 2 - g_eeGeneral.pwrOffSpeed, attr|LEFT); + lcdDrawNumber(LCD_W-7, y, 2 - g_eeGeneral.pwrOffSpeed, attr|RIGHT); lcdDrawChar(lcdLastRightPos, y, 's'); if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.pwrOffSpeed, -1, 2); break; @@ -590,10 +606,14 @@ void menuRadioSetup(event_t event) #if defined(PXX2) case ITEM_RADIO_SETUP_OWNER_ID: - editSingleName(RADIO_SETUP_2ND_COLUMN, y, STR_OWNER_ID, - g_eeGeneral.ownerRegistrationID, - PXX2_LEN_REGISTRATION_ID, event, attr, - old_editMode); + lcdDrawTextAlignedLeft(y, STR_OWNER_ID); + if (attr) + editName(RADIO_SETUP_2ND_COLUMN, y, + g_eeGeneral.ownerRegistrationID, + PXX2_LEN_REGISTRATION_ID, event, attr, 0, + old_editMode); + else + lcdDrawSizedText(LCD_W-2, y, g_eeGeneral.ownerRegistrationID, PXX2_LEN_REGISTRATION_ID, RIGHT); break; #endif @@ -602,7 +622,7 @@ void menuRadioSetup(event_t event) { lcdDrawTextAlignedLeft(y, STR_TIMEZONE); int tzIndex = timezoneIndex(g_eeGeneral.timezone, g_eeGeneral.timezoneMinutes); - lcdDrawText(RADIO_SETUP_2ND_COLUMN, y, timezoneDisplay(tzIndex).c_str(), attr); + lcdDrawText(LCD_W-2, y, timezoneDisplay(tzIndex).c_str(), attr|RIGHT); if (attr) { tzIndex = checkIncDec(event, tzIndex, minTimezone(), maxTimezone(), EE_GENERAL); if (checkIncDec_Ret) { @@ -615,24 +635,24 @@ void menuRadioSetup(event_t event) case ITEM_RADIO_SETUP_ADJUST_RTC: lcdDrawTextAlignedLeft(y, STR_ADJUST_RTC); - g_eeGeneral.adjustRTC = editCheckBox(g_eeGeneral.adjustRTC, RADIO_SETUP_2ND_COLUMN, y, nullptr, attr, event); + g_eeGeneral.adjustRTC = editCheckBox(g_eeGeneral.adjustRTC, LCD_W-9, y, nullptr, attr, event); break; case ITEM_RADIO_SETUP_GPSFORMAT: lcdDrawTextAlignedLeft(y, STR_GPS_COORDS_FORMAT); - g_eeGeneral.gpsFormat = editChoice(RADIO_SETUP_2ND_COLUMN, y, nullptr, STR_GPSFORMAT, g_eeGeneral.gpsFormat, 0, 1, attr, event); + g_eeGeneral.gpsFormat = editChoice(LCD_W-2, y, nullptr, STR_GPSFORMAT, g_eeGeneral.gpsFormat, 0, 1, attr|RIGHT, event); break; #endif #if defined(PXX1) case ITEM_RADIO_SETUP_COUNTRYCODE: - g_eeGeneral.countryCode = editChoice(RADIO_SETUP_2ND_COLUMN, y, STR_COUNTRY_CODE, STR_COUNTRY_CODES, g_eeGeneral.countryCode, 0, 2, attr, event); + g_eeGeneral.countryCode = editChoice(LCD_W-2, y, STR_COUNTRY_CODE, STR_COUNTRY_CODES, g_eeGeneral.countryCode, 0, 2, attr|RIGHT, event); break; #endif case ITEM_RADIO_SETUP_LANGUAGE: lcdDrawTextAlignedLeft(y, STR_VOICE_LANGUAGE); - lcdDrawText(RADIO_SETUP_2ND_COLUMN, y, currentLanguagePack->name, attr); + lcdDrawText(LCD_W-2, y, currentLanguagePack->name, attr|RIGHT); if (attr) { currentLanguagePackIdx = checkIncDec(event, currentLanguagePackIdx, 0, DIM(languagePacks)-2, EE_GENERAL); if (checkIncDec_Ret) { @@ -643,12 +663,12 @@ void menuRadioSetup(event_t event) break; case ITEM_RADIO_SETUP_IMPERIAL: - g_eeGeneral.imperial = editChoice(RADIO_SETUP_2ND_COLUMN, y, STR_UNITS_SYSTEM, STR_VUNITSSYSTEM, g_eeGeneral.imperial, 0, 1, attr, event); + g_eeGeneral.imperial = editChoice(LCD_W-2, y, STR_UNITS_SYSTEM, STR_VUNITSSYSTEM, g_eeGeneral.imperial, 0, 1, attr|RIGHT, event); break; #if defined(FAI_CHOICE) case ITEM_RADIO_SETUP_FAI: - editCheckBox(g_eeGeneral.fai, RADIO_SETUP_2ND_COLUMN, y, "FAI Mode", attr, event); + editCheckBox(g_eeGeneral.fai, LCD_W-9, y, "FAI Mode", attr, event); if (attr && checkIncDec_Ret) { if (g_eeGeneral.fai) POPUP_WARNING("FAI\001mode blocked!"); @@ -661,18 +681,18 @@ void menuRadioSetup(event_t event) case ITEM_RADIO_SETUP_SWITCHES_DELAY: lcdDrawTextAlignedLeft(y, STR_SWITCHES_DELAY); - lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, 10*SWITCHES_DELAY(), attr|LEFT); + lcdDrawNumber(LCD_W-14, y, 10*SWITCHES_DELAY(), attr|RIGHT); lcdDrawText(lcdLastRightPos, y, STR_MS, attr); if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.switchesDelay, -15, 100-15); break; case ITEM_RADIO_SETUP_USB_MODE: - g_eeGeneral.USBMode = editChoice(RADIO_SETUP_2ND_COLUMN, y, STR_USBMODE, STR_USBMODES, g_eeGeneral.USBMode, USB_UNSELECTED_MODE, USB_MAX_MODE, attr, event); + g_eeGeneral.USBMode = editChoice(LCD_W-2, y, STR_USBMODE, STR_USBMODES, g_eeGeneral.USBMode, USB_UNSELECTED_MODE, USB_MAX_MODE, attr|RIGHT, event); break; #if defined(JACK_DETECT_GPIO) case ITEM_RADIO_SETUP_JACK_MODE: - g_eeGeneral.jackMode = editChoice(RADIO_SETUP_2ND_COLUMN, y, STR_JACK_MODE, STR_JACK_MODES, g_eeGeneral.jackMode, JACK_UNSELECTED_MODE, JACK_MAX_MODE, attr, event); + g_eeGeneral.jackMode = editChoice(LCD_W-2, y, STR_JACK_MODE, STR_JACK_MODES, g_eeGeneral.jackMode, JACK_UNSELECTED_MODE, JACK_MAX_MODE, attr|RIGHT, event); break; #endif @@ -680,7 +700,7 @@ void menuRadioSetup(event_t event) lcdDrawTextAlignedLeft(y, STR_DEF_CHAN_ORD); // RAET->AETR { for (uint8_t i = 0; i < adcGetMaxInputs(ADC_INPUT_MAIN); i++) { - putsChnLetter(RADIO_SETUP_2ND_COLUMN + i*FW, y, inputMappingChannelOrder(i), attr); + putsChnLetter(LCD_W - 2 - (adcGetMaxInputs(ADC_INPUT_MAIN)-i)*FW, y, inputMappingChannelOrder(i), attr); } if (attr) { auto max_order = inputMappingGetMaxChannelOrder() - 1; @@ -722,9 +742,9 @@ void menuRadioSetup(event_t event) #if defined(ROTARY_ENCODER_NAVIGATION) case ITEM_RADIO_SETUP_ROTARY_ENC_MODE: lcdDrawTextAlignedLeft(y, STR_ROTARY_ENC_MODE); - lcdDrawTextAtIndex(RADIO_SETUP_2ND_COLUMN, y, STR_ROTARY_ENC_OPT, + lcdDrawTextAtIndex(LCD_W-2, y, STR_ROTARY_ENC_OPT, reusableBuffer.generalSettings.rotaryEncoderMode, - attr); + attr|RIGHT); if (attr && s_editMode > 0) { CHECK_INCDEC_GENVAR(event, reusableBuffer.generalSettings.rotaryEncoderMode, diff --git a/radio/src/gui/212x64/radio_setup.cpp b/radio/src/gui/212x64/radio_setup.cpp index 563c123a5..c1ba9ce4c 100644 --- a/radio/src/gui/212x64/radio_setup.cpp +++ b/radio/src/gui/212x64/radio_setup.cpp @@ -83,6 +83,7 @@ enum MenuRadioSetupItems { CASE_PCBX9E_PCBX9DP(ITEM_RADIO_SETUP_BACKLIGHT_COLOR) ITEM_RADIO_SETUP_FLASH_BEEP, CASE_SPLASH_PARAM(ITEM_RADIO_SETUP_DISABLE_SPLASH) + ITEM_RADIO_SETUP_START_SOUND, CASE_PWR_BUTTON_PRESS(ITEM_RADIO_SETUP_PWR_ON_SPEED) CASE_PWR_BUTTON_PRESS(ITEM_RADIO_SETUP_PWR_OFF_SPEED) #if defined(PXX2) @@ -186,6 +187,7 @@ void menuRadioSetup(event_t event) CASE_PCBX9E_PCBX9DP(0) // backlight color 0, // flash beep CASE_SPLASH_PARAM(0) // disable splash + 0, CASE_PWR_BUTTON_PRESS(0) // pwr on speed CASE_PWR_BUTTON_PRESS(0) // pwr off speed CASE_PXX2(0) // owner registration ID @@ -525,6 +527,11 @@ void menuRadioSetup(event_t event) break; #endif + case ITEM_RADIO_SETUP_START_SOUND: + lcdDrawTextAlignedLeft(y, STR_PLAY_HELLO); + g_eeGeneral.dontPlayHello = !editCheckBox(!g_eeGeneral.dontPlayHello, RADIO_SETUP_2ND_COLUMN, y, nullptr, attr, event ) ; + break; + #if defined(PWR_BUTTON_PRESS) case ITEM_RADIO_SETUP_PWR_ON_SPEED: lcdDrawTextAlignedLeft(y, STR_PWR_ON_DELAY); diff --git a/radio/src/gui/colorlcd/radio_setup.cpp b/radio/src/gui/colorlcd/radio_setup.cpp index a27c1cd6c..c067b3f3e 100644 --- a/radio/src/gui/colorlcd/radio_setup.cpp +++ b/radio/src/gui/colorlcd/radio_setup.cpp @@ -706,10 +706,27 @@ void RadioSetupPage::build(FormWindow * window) {STR_ENABLED_FEATURES, [](){new ViewOptionsPage();}}, }); + // Splash screen + auto line = window->newLine(&grid); + new StaticText(line, rect_t{}, STR_SPLASHSCREEN, 0, COLOR_THEME_PRIMARY1); + new Choice(line, rect_t{}, STR_SPLASHSCREEN_DELAYS, 0, 7, + [=]() -> int32_t { + return 3 - g_eeGeneral.splashMode; + }, + [=](int32_t newValue) { + g_eeGeneral.splashMode = 3 - newValue; + SET_DIRTY(); + }); + + // Play startup sound + line = window->newLine(&grid); + new StaticText(line, rect_t{}, STR_PLAY_HELLO, 0, COLOR_THEME_PRIMARY1); + new CheckBox(line, rect_t{}, GET_SET_INVERTED(g_eeGeneral.dontPlayHello)); + #if defined(PWR_BUTTON_PRESS) // Pwr Off Delay { - auto line = window->newLine(&grid); + line = window->newLine(&grid); new StaticText(line, rect_t{}, STR_PWR_OFF_DELAY, 0, COLOR_THEME_PRIMARY1); new Choice(line, rect_t{}, STR_PWR_OFF_DELAYS, 0, 3, [=]() -> int32_t { @@ -725,7 +742,7 @@ void RadioSetupPage::build(FormWindow * window) #if defined(PXX2) // Owner ID { - auto line = window->newLine(&grid); + line = window->newLine(&grid); new StaticText(line, rect_t{}, STR_OWNER_ID, 0, COLOR_THEME_PRIMARY1); new RadioTextEdit(line, rect_t{}, g_eeGeneral.ownerRegistrationID, PXX2_LEN_REGISTRATION_ID); @@ -733,7 +750,7 @@ void RadioSetupPage::build(FormWindow * window) #endif // Country code - auto line = window->newLine(&grid); + line = window->newLine(&grid); new StaticText(line, rect_t{}, STR_COUNTRY_CODE, 0, COLOR_THEME_PRIMARY1); new Choice(line, rect_t{}, STR_COUNTRY_CODES, 0, 2, GET_SET_DEFAULT(g_eeGeneral.countryCode)); diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 810b2dd50..006ca361f 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1105,7 +1105,8 @@ void opentxStart(const uint8_t startOptions = OPENTX_START_DEFAULT_ARGS) #if defined(GUI) if (!calibration_needed && !(startOptions & OPENTX_START_NO_SPLASH)) { - AUDIO_HELLO(); + if (!g_eeGeneral.dontPlayHello) + AUDIO_HELLO(); doSplash(); } #endif diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 3ee2f0d25..1fe2c3ef8 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -340,12 +340,8 @@ inline bool SPLASH_NEEDED() #endif } -#if defined(PCBHORUS) - #define SPLASH_TIMEOUT 0 /* we use the splash duration to load stuff from the SD */ -#elif defined(PCBTARANIS) - #define SPLASH_TIMEOUT (g_eeGeneral.splashMode == -4 ? 1500 : (g_eeGeneral.splashMode <= 0 ? (400-g_eeGeneral.splashMode * 200) : (400 - g_eeGeneral.splashMode * 100))) -#else - #define SPLASH_TIMEOUT (4 * 100) // 4 seconds +#if defined(SPLASH) + #define SPLASH_TIMEOUT (g_eeGeneral.splashMode == -4 ? 1500 : (g_eeGeneral.splashMode <= 0 ? (400-g_eeGeneral.splashMode * 200) : (400 - g_eeGeneral.splashMode * 100))) #endif constexpr uint8_t HEART_TIMER_10MS = 0x01; diff --git a/radio/src/storage/yaml/yaml_datastructs_128x64.cpp b/radio/src/storage/yaml/yaml_datastructs_128x64.cpp index c0615fbcd..cd48c94e6 100644 --- a/radio/src/storage/yaml/yaml_datastructs_128x64.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_128x64.cpp @@ -277,7 +277,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ENUM("antennaMode", 2, enum_AntennaModes), YAML_UNSIGNED( "disableRtcWarning", 1 ), YAML_UNSIGNED( "keysBacklight", 1 ), - YAML_PADDING( 1 ), + YAML_UNSIGNED( "dontPlayHello", 1 ), YAML_ENUM("internalModule", 8, enum_ModuleType), YAML_STRUCT("trainer", 128, struct_TrainerData, NULL), YAML_UNSIGNED( "view", 8 ), diff --git a/radio/src/storage/yaml/yaml_datastructs_nv14.cpp b/radio/src/storage/yaml/yaml_datastructs_nv14.cpp index b4501c50d..53046e4c6 100644 --- a/radio/src/storage/yaml/yaml_datastructs_nv14.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_nv14.cpp @@ -307,7 +307,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ENUM("antennaMode", 2, enum_AntennaModes), YAML_UNSIGNED( "disableRtcWarning", 1 ), YAML_UNSIGNED( "keysBacklight", 1 ), - YAML_PADDING( 1 ), + YAML_UNSIGNED( "dontPlayHello", 1 ), YAML_ENUM("internalModule", 8, enum_ModuleType), YAML_STRUCT("trainer", 128, struct_TrainerData, NULL), YAML_UNSIGNED( "view", 8 ), @@ -323,7 +323,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "inactivityTimer", 8 ), YAML_CUSTOM("telemetryBaudrate",r_telemetryBaudrate,nullptr), YAML_UNSIGNED( "internalModuleBaudrate", 3 ), - YAML_PADDING( 3 ), + YAML_SIGNED( "splashMode", 3 ), YAML_SIGNED_CUST( "hapticMode", 2, r_beeperMode, w_beeperMode ), YAML_SIGNED( "switchesDelay", 8 ), YAML_UNSIGNED( "lightAutoOff", 8 ), diff --git a/radio/src/storage/yaml/yaml_datastructs_t20.cpp b/radio/src/storage/yaml/yaml_datastructs_t20.cpp index 16a00f6c8..3cb3d7571 100644 --- a/radio/src/storage/yaml/yaml_datastructs_t20.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_t20.cpp @@ -277,7 +277,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ENUM("antennaMode", 2, enum_AntennaModes), YAML_UNSIGNED( "disableRtcWarning", 1 ), YAML_UNSIGNED( "keysBacklight", 1 ), - YAML_PADDING( 1 ), + YAML_UNSIGNED( "dontPlayHello", 1 ), YAML_ENUM("internalModule", 8, enum_ModuleType), YAML_STRUCT("trainer", 128, struct_TrainerData, NULL), YAML_UNSIGNED( "view", 8 ), diff --git a/radio/src/storage/yaml/yaml_datastructs_tpro.cpp b/radio/src/storage/yaml/yaml_datastructs_tpro.cpp index 71c44c206..18458320d 100644 --- a/radio/src/storage/yaml/yaml_datastructs_tpro.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_tpro.cpp @@ -277,7 +277,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ENUM("antennaMode", 2, enum_AntennaModes), YAML_UNSIGNED( "disableRtcWarning", 1 ), YAML_UNSIGNED( "keysBacklight", 1 ), - YAML_PADDING( 1 ), + YAML_UNSIGNED( "dontPlayHello", 1 ), YAML_ENUM("internalModule", 8, enum_ModuleType), YAML_STRUCT("trainer", 128, struct_TrainerData, NULL), YAML_UNSIGNED( "view", 8 ), diff --git a/radio/src/storage/yaml/yaml_datastructs_x10.cpp b/radio/src/storage/yaml/yaml_datastructs_x10.cpp index 4a88a2660..9eb40b869 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x10.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x10.cpp @@ -313,7 +313,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ENUM("antennaMode", 2, enum_AntennaModes), YAML_UNSIGNED( "disableRtcWarning", 1 ), YAML_UNSIGNED( "keysBacklight", 1 ), - YAML_PADDING( 1 ), + YAML_UNSIGNED( "dontPlayHello", 1 ), YAML_ENUM("internalModule", 8, enum_ModuleType), YAML_STRUCT("trainer", 128, struct_TrainerData, NULL), YAML_UNSIGNED( "view", 8 ), @@ -329,7 +329,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "inactivityTimer", 8 ), YAML_CUSTOM("telemetryBaudrate",r_telemetryBaudrate,nullptr), YAML_UNSIGNED( "internalModuleBaudrate", 3 ), - YAML_PADDING( 3 ), + YAML_SIGNED( "splashMode", 3 ), YAML_SIGNED_CUST( "hapticMode", 2, r_beeperMode, w_beeperMode ), YAML_SIGNED( "switchesDelay", 8 ), YAML_UNSIGNED( "lightAutoOff", 8 ), diff --git a/radio/src/storage/yaml/yaml_datastructs_x12s.cpp b/radio/src/storage/yaml/yaml_datastructs_x12s.cpp index 4a88a2660..9eb40b869 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x12s.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x12s.cpp @@ -313,7 +313,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ENUM("antennaMode", 2, enum_AntennaModes), YAML_UNSIGNED( "disableRtcWarning", 1 ), YAML_UNSIGNED( "keysBacklight", 1 ), - YAML_PADDING( 1 ), + YAML_UNSIGNED( "dontPlayHello", 1 ), YAML_ENUM("internalModule", 8, enum_ModuleType), YAML_STRUCT("trainer", 128, struct_TrainerData, NULL), YAML_UNSIGNED( "view", 8 ), @@ -329,7 +329,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "inactivityTimer", 8 ), YAML_CUSTOM("telemetryBaudrate",r_telemetryBaudrate,nullptr), YAML_UNSIGNED( "internalModuleBaudrate", 3 ), - YAML_PADDING( 3 ), + YAML_SIGNED( "splashMode", 3 ), YAML_SIGNED_CUST( "hapticMode", 2, r_beeperMode, w_beeperMode ), YAML_SIGNED( "switchesDelay", 8 ), YAML_UNSIGNED( "lightAutoOff", 8 ), diff --git a/radio/src/storage/yaml/yaml_datastructs_x9d.cpp b/radio/src/storage/yaml/yaml_datastructs_x9d.cpp index 9886b668c..d06903e3a 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x9d.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x9d.cpp @@ -277,7 +277,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ENUM("antennaMode", 2, enum_AntennaModes), YAML_UNSIGNED( "disableRtcWarning", 1 ), YAML_UNSIGNED( "keysBacklight", 1 ), - YAML_PADDING( 1 ), + YAML_UNSIGNED( "dontPlayHello", 1 ), YAML_ENUM("internalModule", 8, enum_ModuleType), YAML_STRUCT("trainer", 128, struct_TrainerData, NULL), YAML_UNSIGNED( "view", 8 ), diff --git a/radio/src/storage/yaml/yaml_datastructs_x9e.cpp b/radio/src/storage/yaml/yaml_datastructs_x9e.cpp index ea9585f69..86e2aeef5 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x9e.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x9e.cpp @@ -277,7 +277,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ENUM("antennaMode", 2, enum_AntennaModes), YAML_UNSIGNED( "disableRtcWarning", 1 ), YAML_UNSIGNED( "keysBacklight", 1 ), - YAML_PADDING( 1 ), + YAML_UNSIGNED( "dontPlayHello", 1 ), YAML_ENUM("internalModule", 8, enum_ModuleType), YAML_STRUCT("trainer", 128, struct_TrainerData, NULL), YAML_UNSIGNED( "view", 8 ), diff --git a/radio/src/storage/yaml/yaml_datastructs_x9lite.cpp b/radio/src/storage/yaml/yaml_datastructs_x9lite.cpp index 84ff7d3f2..a3a4dd488 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x9lite.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x9lite.cpp @@ -277,7 +277,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ENUM("antennaMode", 2, enum_AntennaModes), YAML_UNSIGNED( "disableRtcWarning", 1 ), YAML_UNSIGNED( "keysBacklight", 1 ), - YAML_PADDING( 1 ), + YAML_UNSIGNED( "dontPlayHello", 1 ), YAML_ENUM("internalModule", 8, enum_ModuleType), YAML_STRUCT("trainer", 128, struct_TrainerData, NULL), YAML_UNSIGNED( "view", 8 ), diff --git a/radio/src/storage/yaml/yaml_datastructs_xlites.cpp b/radio/src/storage/yaml/yaml_datastructs_xlites.cpp index f4b137df8..a27f02d07 100644 --- a/radio/src/storage/yaml/yaml_datastructs_xlites.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_xlites.cpp @@ -279,7 +279,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_ENUM("antennaMode", 2, enum_AntennaModes), YAML_UNSIGNED( "disableRtcWarning", 1 ), YAML_UNSIGNED( "keysBacklight", 1 ), - YAML_PADDING( 1 ), + YAML_UNSIGNED( "dontPlayHello", 1 ), YAML_ENUM("internalModule", 8, enum_ModuleType), YAML_STRUCT("trainer", 128, struct_TrainerData, NULL), YAML_UNSIGNED( "view", 8 ), diff --git a/radio/src/tasks.cpp b/radio/src/tasks.cpp index 1cf1db139..ed779acc8 100644 --- a/radio/src/tasks.cpp +++ b/radio/src/tasks.cpp @@ -25,6 +25,8 @@ #include "tasks.h" #include "tasks/mixer_task.h" +#include "watchdog_driver.h" + RTOS_TASK_HANDLE menusTaskId; RTOS_DEFINE_STACK(menusTaskId, menusStack, MENUS_STACK_SIZE); @@ -46,7 +48,11 @@ TASK_FUNCTION(menusTask) #endif #if defined(SPLASH) && !defined(STARTUP_ANIMATION) + tmr10ms_t splashStartTime = 0; + bool waitSplash = false; if (!UNEXPECTED_SHUTDOWN()) { + splashStartTime = get_tmr10ms(); + waitSplash = true; drawSplash(); TRACE("drawSplash() completed"); } @@ -58,6 +64,44 @@ TASK_FUNCTION(menusTask) opentxInit(); +#if defined(SPLASH) && !defined(STARTUP_ANIMATION) + if (waitSplash){ + extern bool inactivityCheckInputs(); + extern void checkSpeakerVolume(); + +#if defined(SIMU) + // Simulator - inputsMoved() returns true immediately without this! + RTOS_WAIT_TICKS(30); +#endif + + splashStartTime += SPLASH_TIMEOUT; + while (splashStartTime > get_tmr10ms()) { + WDG_RESET(); + checkSpeakerVolume(); + checkBacklight(); + RTOS_WAIT_TICKS(10); + auto evt = getEvent(); + if (evt || inactivityCheckInputs()) { + if (evt) + killEvents(evt); + break; + } +#if defined(SIMU) + // Allow simulator to exit if closed while splash showing + uint32_t pwr_check = pwrCheck(); + if (pwr_check == e_power_off) { + break; + } +#endif + } + + // Reset timer so special/global functions set to !1x don't get triggered + START_SILENCE_PERIOD(); + } +#endif + + mixerTaskInit(); + #if defined(PWR_BUTTON_PRESS) while (true) { uint32_t pwr_check = pwrCheck(); @@ -111,8 +155,6 @@ void tasksStart() cliStart(); #endif - mixerTaskInit(); - RTOS_CREATE_TASK(menusTaskId, menusTask, "menus", menusStack, MENUS_STACK_SIZE, MENUS_TASK_PRIO); diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 4f15222f5..5223e2832 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -126,6 +126,9 @@ ISTR(BLUETOOTH_MODES); ISTR(TEXT_SIZE); ISTR(SUBTRIMMODES); ISTR(PWR_OFF_DELAYS); +#if defined(COLORLCD) +ISTR(SPLASHSCREEN_DELAYS); +#endif const char STR_MINUTE_SINGULAR[] = TR_MINUTE_SINGULAR; const char STR_MINUTE_PLURAL1[] = TR_MINUTE_PLURAL1; @@ -324,6 +327,7 @@ const char STR_MENULOGICALSWITCH[] = TR_MENULOGICALSWITCH; const char STR_MENULOGICALSWITCHES[] = TR_MENULOGICALSWITCHES; const char STR_MENUCUSTOMFUNC[] = TR_MENUCUSTOMFUNC; const char STR_SPLASHSCREEN[] = TR_SPLASHSCREEN; +const char STR_PLAY_HELLO[] = TR_PLAY_HELLO; const char STR_PWR_ON_DELAY[] = TR_PWR_ON_DELAY; const char STR_PWR_OFF_DELAY[] = TR_PWR_OFF_DELAY; const char STR_THROTTLE_UPPERCASE[] = TR_THROTTLE_UPPERCASE; diff --git a/radio/src/translations.h b/radio/src/translations.h index fba9072e0..185457195 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -402,6 +402,10 @@ extern const char STR_KEYS_BACKLIGHT[]; #endif extern const char STR_SPLASHSCREEN[]; +extern const char STR_PLAY_HELLO[]; +#if defined(COLORLCD) +extern const char* const STR_SPLASHSCREEN_DELAYS[]; +#endif #if defined(PWR_BUTTON_PRESS) extern const char STR_PWR_ON_DELAY[]; extern const char STR_PWR_OFF_DELAY[]; diff --git a/radio/src/translations/cn.h b/radio/src/translations/cn.h index b4cfb987d..71da74b86 100644 --- a/radio/src/translations/cn.h +++ b/radio/src/translations/cn.h @@ -354,6 +354,7 @@ #define TR_KEYS_BACKLIGHT "按键背光" #define TR_BLCOLOR "颜色" #define TR_SPLASHSCREEN "开机图片" +#define TR_PLAY_HELLO "开机语音" #define TR_PWR_ON_DELAY "开机延迟" #define TR_PWR_OFF_DELAY "关机延迟" #define TR_THROTTLE_WARNING TR(INDENT "油门状态", INDENT "油门状态") diff --git a/radio/src/translations/cz.h b/radio/src/translations/cz.h index 9a565ab7e..f922aec4f 100644 --- a/radio/src/translations/cz.h +++ b/radio/src/translations/cz.h @@ -370,6 +370,7 @@ #define TR_KEYS_BACKLIGHT "Podsvětlení kláves" #define TR_BLCOLOR "Barva" #define TR_SPLASHSCREEN TR("úvodní logo", "Zobrazit úvodní logo") +#define TR_PLAY_HELLO "Zvuk při spuštění" #define TR_PWR_ON_DELAY "Zpoždění zapnutí" #define TR_PWR_OFF_DELAY "Zpoždění vypnutí" #define TR_THROTTLE_WARNING TR("* Plyn", INDENT "Kontrola plynu") diff --git a/radio/src/translations/da.h b/radio/src/translations/da.h index e9d5d5d70..98fdee71a 100644 --- a/radio/src/translations/da.h +++ b/radio/src/translations/da.h @@ -369,6 +369,7 @@ #define TR_KEYS_BACKLIGHT "Taster klarhed" #define TR_BLCOLOR "Farve" #define TR_SPLASHSCREEN "Start skærm" +#define TR_PLAY_HELLO "Startop lyd" #define TR_PWR_ON_DELAY "Forsinkelse ved tænd" #define TR_PWR_OFF_DELAY "Forsinkelse ved sluk" #define TR_THROTTLE_WARNING TR(INDENT "Gas adv", INDENT "Gas advarsel") diff --git a/radio/src/translations/de.h b/radio/src/translations/de.h index 126af3d47..30fcd3beb 100644 --- a/radio/src/translations/de.h +++ b/radio/src/translations/de.h @@ -365,6 +365,7 @@ #define TR_KEYS_BACKLIGHT "Keys backlight" #define TR_BLCOLOR "Farbe" #define TR_SPLASHSCREEN TR("Startbild Ein", "Startbild Anzeigedauer") +#define TR_PLAY_HELLO "Startton abspielen" #define TR_PWR_ON_DELAY "PWR EIN Verzög." #define TR_PWR_OFF_DELAY "PWR AUS Verzög." #define TR_THROTTLE_WARNING TR("Gasalarm", INDENT "Gas Alarm") diff --git a/radio/src/translations/en.h b/radio/src/translations/en.h index 6bdd3b675..6e48a4c98 100644 --- a/radio/src/translations/en.h +++ b/radio/src/translations/en.h @@ -365,6 +365,7 @@ #define TR_KEYS_BACKLIGHT "Keys backlight" #define TR_BLCOLOR "Color" #define TR_SPLASHSCREEN "Splash screen" +#define TR_PLAY_HELLO "Startup Sound" #define TR_PWR_ON_DELAY "Pwr On delay" #define TR_PWR_OFF_DELAY "Pwr Off delay" #define TR_THROTTLE_WARNING TR(INDENT "T-Warning", INDENT "Throttle state") diff --git a/radio/src/translations/es.h b/radio/src/translations/es.h index 67d351e96..026e85512 100644 --- a/radio/src/translations/es.h +++ b/radio/src/translations/es.h @@ -362,6 +362,7 @@ #define TR_KEYS_BACKLIGHT "Keys backlight" #define TR_BLCOLOR INDENT "Color" #define TR_SPLASHSCREEN "Pantalla inicio" +#define TR_PLAY_HELLO "Startup Sound" #define TR_PWR_ON_DELAY TR("Atraso On", "Atraso encendido") #define TR_PWR_OFF_DELAY TR("Atraso Off", "Atraso apagado") #define TR_THROTTLE_WARNING TR("Aviso-A", INDENT "Aviso acelerador") diff --git a/radio/src/translations/fi.h b/radio/src/translations/fi.h index b23d7037d..99a242860 100644 --- a/radio/src/translations/fi.h +++ b/radio/src/translations/fi.h @@ -376,6 +376,7 @@ #define TR_KEYS_BACKLIGHT "Keys backlight" #define TR_BLCOLOR "Color" #define TR_SPLASHSCREEN "Splash screen" +#define TR_PLAY_HELLO "Startup Sound" #define TR_PWR_ON_DELAY "Pwr On delay" #define TR_PWR_OFF_DELAY "Pwr Off delay" #define TR_THROTTLE_WARNING TR("T-Warning", INDENT "Throttle Warning") diff --git a/radio/src/translations/fr.h b/radio/src/translations/fr.h index 41c6f977c..ec6966a42 100644 --- a/radio/src/translations/fr.h +++ b/radio/src/translations/fr.h @@ -374,6 +374,7 @@ #define TR_KEYS_BACKLIGHT "Rétroéclairage touches" #define TR_BLCOLOR "Couleur" #define TR_SPLASHSCREEN "Ecran d'accueil" +#define TR_PLAY_HELLO "Son de démarrage" #define TR_PWR_ON_DELAY "Délai btn ON" #define TR_PWR_OFF_DELAY "Délai btn OFF" #define TR_THROTTLE_WARNING TR(INDENT "Alerte gaz", INDENT "Alerte gaz") diff --git a/radio/src/translations/he.h b/radio/src/translations/he.h index 8bee628d5..f17c5e0be 100644 --- a/radio/src/translations/he.h +++ b/radio/src/translations/he.h @@ -444,6 +444,7 @@ #define TR_KEYS_BACKLIGHT "Keys backlight" #define TR_BLCOLOR "צבע" #define TR_SPLASHSCREEN "Splash screen" +#define TR_PLAY_HELLO "צליל אתחול" #define TR_PWR_ON_DELAY "השהיית הפעלה פעיל" #define TR_PWR_OFF_DELAY "משך לחיצה לכיבוי השלט" #define TR_THROTTLE_WARNING TR(INDENT "T-Warning", INDENT "התראת מצערת פתוחה") diff --git a/radio/src/translations/it.h b/radio/src/translations/it.h index db5dfa557..22bdc349b 100644 --- a/radio/src/translations/it.h +++ b/radio/src/translations/it.h @@ -363,6 +363,7 @@ #define TR_KEYS_BACKLIGHT "Luce tasti" #define TR_BLCOLOR "Colore" #define TR_SPLASHSCREEN TR("Sch. avvio", "Schermata d'avvio") +#define TR_PLAY_HELLO "Suono all'accensione" #define TR_PWR_ON_DELAY "Rit. accens." #define TR_PWR_OFF_DELAY "Rit. spegni." #define TR_THROTTLE_WARNING TR(INDENT "All. Mot.", INDENT "Allarme Motore") diff --git a/radio/src/translations/jp.h b/radio/src/translations/jp.h index ed5eb4c8d..a739812de 100644 --- a/radio/src/translations/jp.h +++ b/radio/src/translations/jp.h @@ -360,6 +360,7 @@ #define TR_KEYS_BACKLIGHT "キー バックライト" #define TR_BLCOLOR "カラー" #define TR_SPLASHSCREEN "起動イメージ" +#define TR_PLAY_HELLO "起動時サウンド" #define TR_PWR_ON_DELAY "電源ON遅延" #define TR_PWR_OFF_DELAY "電源OFF遅延" #define TR_THROTTLE_WARNING TR(INDENT "T-Warning", INDENT "Throttle状態") diff --git a/radio/src/translations/nl.h b/radio/src/translations/nl.h index e2d5eb493..e1946f0f4 100644 --- a/radio/src/translations/nl.h +++ b/radio/src/translations/nl.h @@ -363,6 +363,7 @@ #define TR_KEYS_BACKLIGHT "Keys backlight" #define TR_BLCOLOR "Kleur" #define TR_SPLASHSCREEN "Startscherm Aan" +#define TR_PLAY_HELLO "Startup Sound" #define TR_PWR_ON_DELAY "Pwr On delay" #define TR_PWR_OFF_DELAY "Pwr Off delay" #define TR_THROTTLE_WARNING TR(INDENT "T-Warning", INDENT "Throttle Status") diff --git a/radio/src/translations/pl.h b/radio/src/translations/pl.h index 300a3eda9..b5ab3fa1d 100644 --- a/radio/src/translations/pl.h +++ b/radio/src/translations/pl.h @@ -361,6 +361,7 @@ #define TR_KEYS_BACKLIGHT "Podśw. przycisków" #define TR_BLCOLOR "Kolor" #define TR_SPLASHSCREEN "Logo ekranu" +#define TR_PLAY_HELLO "Dźwięk uruchomienia" #define TR_PWR_ON_DELAY "Pwr On delay" #define TR_PWR_OFF_DELAY "Pwr Off delay" #define TR_THROTTLE_WARNING TR(INDENT"OstrzGaz", INDENT "OstrzeżenieGaz") diff --git a/radio/src/translations/pt.h b/radio/src/translations/pt.h index 28ad300c0..fb65a8ea1 100644 --- a/radio/src/translations/pt.h +++ b/radio/src/translations/pt.h @@ -368,6 +368,7 @@ #define TR_KEYS_BACKLIGHT "Keys backlight" #define TR_BLCOLOR "Cor" #define TR_SPLASHSCREEN "Splash screen" +#define TR_PLAY_HELLO "Som ao ligar" #define TR_PWR_ON_DELAY "Delay para LIGA" #define TR_PWR_OFF_DELAY "Delay para DESL" #define TR_THROTTLE_WARNING TR(INDENT "T-Warning", INDENT "Throttle state") diff --git a/radio/src/translations/tw.h b/radio/src/translations/tw.h index 187f3111a..8fd93ab82 100644 --- a/radio/src/translations/tw.h +++ b/radio/src/translations/tw.h @@ -359,6 +359,7 @@ #define TR_KEYS_BACKLIGHT "按鍵背光" #define TR_BLCOLOR "顏色" #define TR_SPLASHSCREEN "開機圖片" +#define TR_PLAY_HELLO "開機語音" #define TR_PWR_ON_DELAY "開機延遲" #define TR_PWR_OFF_DELAY "關機延遲" #define TR_THROTTLE_WARNING TR(INDENT "油門狀態", INDENT "油門狀態") diff --git a/radio/src/translations/untranslated.h b/radio/src/translations/untranslated.h index dc45b9f96..b29ac6ec5 100644 --- a/radio/src/translations/untranslated.h +++ b/radio/src/translations/untranslated.h @@ -96,6 +96,9 @@ #define TR_FLYSKY_SERIAL_PROTO "iBUS","SBUS" #define TR_PPM_POL "-","+" #define TR_PWR_OFF_DELAYS "0s","1s","2s","4s" +#if defined(COLORLCD) +#define TR_SPLASHSCREEN_DELAYS "1s","2s","3s","4s","6s","8s","10s","15s" +#endif // Telemetry sensor name definitions #define STR_SENSOR_RSSI "RSSI"