diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index bc9fa4fe1..c064f9a2f 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -9,8 +9,6 @@ set(PCB "X9D+" CACHE STRING "Radio type, one of: ${PCB_TYPES}") set_property(CACHE PCB PROPERTY STRINGS ${PCB_TYPES}) set(TRANSLATIONS "EN" CACHE STRING "Radio language, one of: ${RADIO_LANGUAGES}") set_property(CACHE TRANSLATIONS PROPERTY STRINGS ${RADIO_LANGUAGES}) -set(SPLASH "DEFAULT" CACHE STRING "Splash (DEFAULT/OFF/FRSKY)") -set_property(CACHE SPLASH PROPERTY STRINGS DEFAULT OFF FRSKY) set(DEFAULT_MODE "" CACHE STRING "Default sticks mode") set(POPUP_LEVEL 2 CACHE STRING "Popup level") @@ -269,10 +267,6 @@ if(DANGEROUS_MODULE_FUNCTIONS) add_definitions(-DDANGEROUS_MODULE_FUNCTIONS) endif() -if(NOT SPLASH STREQUAL OFF) - add_definitions(-DSPLASH) -endif() - if(NOT DEFAULT_MODE STREQUAL "") add_definitions(-DDEFAULT_MODE=${DEFAULT_MODE}) endif() diff --git a/radio/src/gui/128x64/menus.h b/radio/src/gui/128x64/menus.h index 620c5ebc4..de39941ba 100644 --- a/radio/src/gui/128x64/menus.h +++ b/radio/src/gui/128x64/menus.h @@ -24,6 +24,7 @@ #include "keys.h" #include "common/stdlcd/menus.h" +#include "common/stdlcd/features.h" #if defined(PCBTARANIS) #define NAVIGATION_LINE_BY_LINE 0x40 diff --git a/radio/src/gui/128x64/radio_diaganas.cpp b/radio/src/gui/128x64/radio_diaganas.cpp index 506846ef7..a275cad0f 100644 --- a/radio/src/gui/128x64/radio_diaganas.cpp +++ b/radio/src/gui/128x64/radio_diaganas.cpp @@ -38,13 +38,6 @@ void menuRadioDiagAnalogs(event_t event) static int viewpage = ANAVIEW_FIRST; -// TODO enum -#if defined(TX_CAPACITY_MEASUREMENT) - #define ANAS_ITEMS_COUNT 3 -#else - #define ANAS_ITEMS_COUNT 1 -#endif - switch (event) { case EVT_KEY_FIRST(KEY_RIGHT): case EVT_KEY_BREAK(KEY_PAGEDN): @@ -74,11 +67,11 @@ void menuRadioDiagAnalogs(event_t event) switch (viewpage) { case (ANAVIEW_CALIB): SIMPLE_SUBMENU(STR_MENU_RADIO_ANALOGS_CALIB, - HEADER_LINE+ANAS_ITEMS_COUNT); + HEADER_LINE+1); break; case (ANAVIEW_RAWLOWFPS): SIMPLE_SUBMENU(STR_MENU_RADIO_ANALOGS_RAWLOWFPS, - HEADER_LINE+ANAS_ITEMS_COUNT); + HEADER_LINE+1); break; } diff --git a/radio/src/gui/128x64/radio_setup.cpp b/radio/src/gui/128x64/radio_setup.cpp index e972380ba..4ad089d74 100644 --- a/radio/src/gui/128x64/radio_setup.cpp +++ b/radio/src/gui/128x64/radio_setup.cpp @@ -38,12 +38,6 @@ const unsigned char sticks[] = { value = editChoice(RADIO_SETUP_2ND_COLUMN, y, nullptr, nullptr, tmp, -2, +2, attr, event); \ } -#if defined(SPLASH) - #define CASE_SPLASH_PARAM(x) x, -#else - #define CASE_SPLASH_PARAM(x) -#endif - #if defined(BATTGRAPH) #define CASE_BATTGRAPH(x) x, #else @@ -83,7 +77,6 @@ enum { CASE_IMU(ITEM_RADIO_SETUP_IMU_OFFSET) ITEM_RADIO_SETUP_ALARMS_LABEL, ITEM_RADIO_SETUP_BATTERY_WARNING, - CASE_CAPACITY(ITEM_RADIO_SETUP_CAPACITY_WARNING) ITEM_RADIO_SETUP_INACTIVITY_ALARM, ITEM_RADIO_SETUP_MEMORY_WARNING, ITEM_RADIO_SETUP_ALARM_WARNING, @@ -188,7 +181,7 @@ void menuRadioSetup(event_t event) CASE_IMU(LABEL(IMU)) CASE_IMU(0) CASE_IMU(0) - LABEL(ALARMS), 0, CASE_CAPACITY(0) + LABEL(ALARMS), 0, 0, 0, 0, 0, /* ITEM_RADIO_SETUP_INACTIVITY_ALARM ITEM_RADIO_SETUP_MEMORY_WARNING ITEM_RADIO_SETUP_ALARM_WARNING ITEM_RADIO_SETUP_RSSI_POWEROFF_ALARM */ CASE_BACKLIGHT(LABEL(BACKLIGHT)) CASE_BACKLIGHT(0) @@ -526,14 +519,6 @@ void menuRadioSetup(event_t event) break; } -#if defined(TX_CAPACITY_MEASUREMENT) - case ITEM_RADIO_SETUP_CAPACITY_WARNING: - lcdDrawTextAlignedLeft(y, STR_CAPAWARNING); - 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(LCD_W-7, y, g_eeGeneral.inactivityTimer, attr|RIGHT); @@ -588,7 +573,6 @@ void menuRadioSetup(event_t event) break; #endif -#if defined(SPLASH) case ITEM_RADIO_SETUP_DISABLE_SPLASH: { lcdDrawTextAlignedLeft(y, STR_SPLASHSCREEN); @@ -602,7 +586,6 @@ void menuRadioSetup(event_t event) 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); diff --git a/radio/src/gui/128x64/splash.cpp b/radio/src/gui/128x64/splash.cpp index 24bf69bcb..48cbc67cd 100644 --- a/radio/src/gui/128x64/splash.cpp +++ b/radio/src/gui/128x64/splash.cpp @@ -21,7 +21,6 @@ #include "opentx.h" -#if defined(SPLASH) const unsigned char splashdata[] = { 'S','P','S',0, #include "bitmaps/128x64/splash.lbm" @@ -35,4 +34,3 @@ void drawSplash() lcdDraw1bitBitmap(0, 0, splash_lbm, 0, 0); lcdRefresh(); } -#endif diff --git a/radio/src/gui/128x64/view_statistics.cpp b/radio/src/gui/128x64/view_statistics.cpp index eb4e082d9..f2d36161b 100644 --- a/radio/src/gui/128x64/view_statistics.cpp +++ b/radio/src/gui/128x64/view_statistics.cpp @@ -169,25 +169,8 @@ void menuStatisticsDebug(event_t event) break; } - uint8_t y = FH + 1; -#if defined(TX_CAPACITY_MEASUREMENT) - // current - lcdDrawTextAlignedLeft(y, STR_CPU_CURRENT); - drawValueWithUnit(MENU_DEBUG_COL1_OFS, y, getCurrent(), UNIT_MILLIAMPS, LEFT); - uint32_t current_scale = 488 + g_eeGeneral.txCurrentCalibration; - lcdDrawChar(MENU_DEBUG_COL2_OFS, y, '>'); - drawValueWithUnit(MENU_DEBUG_COL2_OFS+FW+1, y, Current_max*10*current_scale/8192, UNIT_RAW, LEFT); - y += FH; - - // consumption - lcdDrawTextAlignedLeft(y, STR_CPU_MAH); - drawValueWithUnit(MENU_DEBUG_COL1_OFS, y, g_eeGeneral.mAhUsed + Current_used*current_scale/8192/36, UNIT_MAH, LEFT|PREC1); - y += FH; -#endif - - lcdDrawTextAlignedLeft(y, STR_FREE_MEM_LABEL); lcdDrawNumber(MENU_DEBUG_COL1_OFS, y, availableMemory(), LEFT); lcdDrawText(lcdLastRightPos+FW, y, STR_BYTES); diff --git a/radio/src/gui/212x64/menus.h b/radio/src/gui/212x64/menus.h index cac5a73bf..ea78eed8e 100644 --- a/radio/src/gui/212x64/menus.h +++ b/radio/src/gui/212x64/menus.h @@ -24,6 +24,7 @@ #include "keys.h" #include "common/stdlcd/menus.h" +#include "common/stdlcd/features.h" inline bool isRadioMenuDisplayed() { diff --git a/radio/src/gui/212x64/radio_setup.cpp b/radio/src/gui/212x64/radio_setup.cpp index ad6db7e2f..f9fa67067 100644 --- a/radio/src/gui/212x64/radio_setup.cpp +++ b/radio/src/gui/212x64/radio_setup.cpp @@ -41,12 +41,6 @@ const unsigned char sticks[] = { value = editChoice(RADIO_SETUP_2ND_COLUMN, y, nullptr, nullptr, tmp, -2, +2, attr, event); \ } -#if defined(SPLASH) - #define CASE_SPLASH_PARAM(x) x, -#else - #define CASE_SPLASH_PARAM(x) -#endif - enum MenuRadioSetupItems { CASE_RTCLOCK(ITEM_RADIO_SETUP_DATE) CASE_RTCLOCK(ITEM_RADIO_SETUP_TIME) @@ -535,7 +529,6 @@ void menuRadioSetup(event_t event) break; #endif -#if defined(SPLASH) case ITEM_RADIO_SETUP_DISABLE_SPLASH: lcdDrawTextAlignedLeft(y, STR_SPLASHSCREEN); if (SPLASH_NEEDED()) { @@ -547,7 +540,6 @@ void menuRadioSetup(event_t event) } 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); diff --git a/radio/src/gui/212x64/splash.cpp b/radio/src/gui/212x64/splash.cpp index 907e590d9..fe19a94e6 100644 --- a/radio/src/gui/212x64/splash.cpp +++ b/radio/src/gui/212x64/splash.cpp @@ -21,7 +21,6 @@ #include "opentx.h" -#if defined(SPLASH) #define MAXIMUM_SPLASH_IMAGE_SIZE 3072 const struct { const uint8_t __magic_prefix[4] = { 'S','P','S',0 }; @@ -39,4 +38,3 @@ void drawSplash() lcdDrawRleBitmap(0, 0, splash_lbm); lcdRefresh(); } -#endif diff --git a/radio/src/gui/colorlcd/fullscreen_dialog.cpp b/radio/src/gui/colorlcd/fullscreen_dialog.cpp index f973bb74d..e0017ef7d 100644 --- a/radio/src/gui/colorlcd/fullscreen_dialog.cpp +++ b/radio/src/gui/colorlcd/fullscreen_dialog.cpp @@ -49,36 +49,63 @@ FullScreenDialog::FullScreenDialog( bringToTop(); - init(); + build(); lv_obj_add_event_cb(lvobj, FullScreenDialog::long_pressed, LV_EVENT_LONG_PRESSED, nullptr); + lv_obj_add_event_cb(lvobj, FullScreenDialog::on_draw, LV_EVENT_DRAW_MAIN_BEGIN, nullptr); } -void FullScreenDialog::init() +void FullScreenDialog::on_draw(lv_event_t* e) { - if (!loaded) { - loaded = true; - - std::string t; - if (type == WARNING_TYPE_ALERT) { -#if defined(TRANSLATIONS_FR) || defined(TRANSLATIONS_IT) || defined(TRANSLATIONS_CZ) - t = std::string(STR_WARNING) + "\n" + title; -#else - t = title + "\n" + STR_WARNING; -#endif - } else if (!title.empty()) { - t = title; + auto dlg = (FullScreenDialog*)lv_obj_get_user_data(lv_event_get_target(e)); + if (dlg) { + if (!dlg->loaded) { + dlg->loaded = true; + dlg->delayedInit(); } - new StaticText(this, - rect_t{ALERT_TITLE_LEFT, ALERT_TITLE_TOP, LCD_W - ALERT_TITLE_LEFT - PAGE_PADDING, LCD_H - ALERT_TITLE_TOP - PAGE_PADDING}, - t.c_str(), 0, COLOR_THEME_WARNING | FONT(XL)); + } +} - messageLabel = new StaticText(this, - rect_t{ALERT_MESSAGE_LEFT, ALERT_MESSAGE_TOP, LCD_W - ALERT_MESSAGE_LEFT - PAGE_PADDING, LCD_H - ALERT_MESSAGE_TOP - PAGE_PADDING}, - message.c_str(), 0, COLOR_THEME_PRIMARY1 | FONT(BOLD)); +void FullScreenDialog::build() +{ + std::string t; + if (type == WARNING_TYPE_ALERT) { +#if defined(TRANSLATIONS_FR) || defined(TRANSLATIONS_IT) || defined(TRANSLATIONS_CZ) + t = std::string(STR_WARNING) + "\n" + title; +#else + t = title + "\n" + STR_WARNING; +#endif + } else if (!title.empty()) { + t = title; + } + new StaticText(this, + rect_t{ALERT_TITLE_LEFT, ALERT_TITLE_TOP, LCD_W - ALERT_TITLE_LEFT - PAGE_PADDING, LCD_H - ALERT_TITLE_TOP - PAGE_PADDING}, + t.c_str(), 0, COLOR_THEME_WARNING | FONT(XL)); - if (!action.empty()) { - auto btn = new TextButton(this, { (LCD_W - 280) / 2, LCD_H - 48, 280, 40 }, action.c_str(), + messageLabel = new StaticText(this, + rect_t{ALERT_MESSAGE_LEFT, ALERT_MESSAGE_TOP, LCD_W - ALERT_MESSAGE_LEFT - PAGE_PADDING, LCD_H - ALERT_MESSAGE_TOP - PAGE_PADDING}, + message.c_str(), 0, COLOR_THEME_PRIMARY1 | FONT(BOLD)); + + if (!action.empty()) { + auto btn = new TextButton(this, { (LCD_W - 280) / 2, LCD_H - 48, 280, 40 }, action.c_str(), + [=]() { + closeDialog(); + return 0; + }, COLOR_THEME_PRIMARY1 | FONT(BOLD)); + lv_obj_set_style_bg_color(btn->getLvObj(), makeLvColor(COLOR_THEME_SECONDARY3), 0); + lv_obj_set_style_bg_opa(btn->getLvObj(), LV_OPA_COVER, 0); + lv_obj_set_style_text_color(btn->getLvObj(), makeLvColor(COLOR_THEME_PRIMARY1), 0); + } else { + if (type == WARNING_TYPE_CONFIRM) { + auto btn = new TextButton(this, { LCD_W / 3 - 50, LCD_H - 48, 100, 40 }, STR_EXIT, + [=]() { + deleteLater(); + return 0; + }, COLOR_THEME_PRIMARY1 | FONT(BOLD)); + lv_obj_set_style_bg_color(btn->getLvObj(), makeLvColor(COLOR_THEME_SECONDARY3), 0); + lv_obj_set_style_bg_opa(btn->getLvObj(), LV_OPA_COVER, 0); + lv_obj_set_style_text_color(btn->getLvObj(), makeLvColor(COLOR_THEME_PRIMARY1), 0); + btn = new TextButton(this, { LCD_W * 2 / 3 - 50, LCD_H - 48, 100, 40 }, STR_OK, [=]() { closeDialog(); return 0; @@ -86,25 +113,6 @@ void FullScreenDialog::init() lv_obj_set_style_bg_color(btn->getLvObj(), makeLvColor(COLOR_THEME_SECONDARY3), 0); lv_obj_set_style_bg_opa(btn->getLvObj(), LV_OPA_COVER, 0); lv_obj_set_style_text_color(btn->getLvObj(), makeLvColor(COLOR_THEME_PRIMARY1), 0); - } else { - if (type == WARNING_TYPE_CONFIRM) { - auto btn = new TextButton(this, { LCD_W / 3 - 50, LCD_H - 48, 100, 40 }, STR_EXIT, - [=]() { - deleteLater(); - return 0; - }, COLOR_THEME_PRIMARY1 | FONT(BOLD)); - lv_obj_set_style_bg_color(btn->getLvObj(), makeLvColor(COLOR_THEME_SECONDARY3), 0); - lv_obj_set_style_bg_opa(btn->getLvObj(), LV_OPA_COVER, 0); - lv_obj_set_style_text_color(btn->getLvObj(), makeLvColor(COLOR_THEME_PRIMARY1), 0); - btn = new TextButton(this, { LCD_W * 2 / 3 - 50, LCD_H - 48, 100, 40 }, STR_OK, - [=]() { - closeDialog(); - return 0; - }, COLOR_THEME_PRIMARY1 | FONT(BOLD)); - lv_obj_set_style_bg_color(btn->getLvObj(), makeLvColor(COLOR_THEME_SECONDARY3), 0); - lv_obj_set_style_bg_opa(btn->getLvObj(), LV_OPA_COVER, 0); - lv_obj_set_style_text_color(btn->getLvObj(), makeLvColor(COLOR_THEME_PRIMARY1), 0); - } } } } diff --git a/radio/src/gui/colorlcd/fullscreen_dialog.h b/radio/src/gui/colorlcd/fullscreen_dialog.h index 7f7a1e5ab..f166ebf5b 100644 --- a/radio/src/gui/colorlcd/fullscreen_dialog.h +++ b/radio/src/gui/colorlcd/fullscreen_dialog.h @@ -79,9 +79,11 @@ class FullScreenDialog : public Window bool loaded = false; StaticText* messageLabel; - virtual void init(); + virtual void delayedInit() {} + void build(); static void long_pressed(lv_event_t* e); + static void on_draw(lv_event_t* e); }; #endif // _FULLSCREEN_DIALOG_H_ diff --git a/radio/src/gui/colorlcd/splash.cpp b/radio/src/gui/colorlcd/splash.cpp index 7c13ff445..bc5039586 100644 --- a/radio/src/gui/colorlcd/splash.cpp +++ b/radio/src/gui/colorlcd/splash.cpp @@ -19,7 +19,11 @@ * GNU General Public License for more details. */ -#if defined(SPLASH) +#include "opentx.h" +#include "inactivity_timer.h" +#include "stamp.h" + +extern void checkSpeakerVolume(); #include "opentx.h" #include "stamp.h" @@ -125,4 +129,49 @@ void drawSplash() MainWindow::instance()->setActiveScreen(); } -#endif + +static tmr10ms_t splashStartTime = 0; + +void startSplash() +{ + if (!UNEXPECTED_SHUTDOWN()) { + splashStartTime = get_tmr10ms(); + drawSplash(); + } +} + +void waitSplash() +{ + // Handle color splash screen + if (splashStartTime) { + +#if defined(SIMU) + // Simulator - inputsMoved() returns true immediately without this! + RTOS_WAIT_TICKS(30); +#endif // defined(SIMU) + + 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 // defined(SIMU) + } + + // Reset timer so special/global functions set to !1x don't get triggered + START_SILENCE_PERIOD(); + } +} diff --git a/radio/src/gui/colorlcd/switch_warn_dialog.cpp b/radio/src/gui/colorlcd/switch_warn_dialog.cpp index f6e117a64..4ed70fc54 100644 --- a/radio/src/gui/colorlcd/switch_warn_dialog.cpp +++ b/radio/src/gui/colorlcd/switch_warn_dialog.cpp @@ -26,33 +26,30 @@ SwitchWarnDialog::SwitchWarnDialog() : FullScreenDialog(WARNING_TYPE_ALERT, STR_SWITCHWARN, "", STR_PRESS_ANY_KEY_TO_SKIP) { last_bad_switches = 0xff; - bad_pots = 0; last_bad_pots = 0x0; setCloseCondition(std::bind(&SwitchWarnDialog::warningInactive, this)); } -void SwitchWarnDialog::init() +void SwitchWarnDialog::delayedInit() { - if (!loaded) { - FullScreenDialog::init(); - lv_label_set_long_mode(messageLabel->getLvObj(), LV_LABEL_LONG_DOT); - } + lv_label_set_long_mode(messageLabel->getLvObj(), LV_LABEL_LONG_DOT); + AUDIO_ERROR_MESSAGE(AU_SWITCH_ALERT); } bool SwitchWarnDialog::warningInactive() { + uint16_t bad_pots; + if (!isSwitchWarningRequired(bad_pots)) return true; if (last_bad_switches != switches_states || last_bad_pots != bad_pots) { + // Redraw to update list of switches that need attention invalidate(); - if (last_bad_switches == 0xff || last_bad_pots & 0x7ff) { - AUDIO_ERROR_MESSAGE(AU_SWITCH_ALERT); - } - } - last_bad_pots = bad_pots; - last_bad_switches = switches_states; + last_bad_pots = bad_pots; + last_bad_switches = switches_states; + } return false; } @@ -61,14 +58,6 @@ void SwitchWarnDialog::paint(BitmapBuffer * dc) { if (!running) return; FullScreenDialog::paint(dc); -} - -void SwitchWarnDialog::checkEvents() -{ - if (!running) return; - - FullScreenDialog::checkEvents(); - if (deleted()) return; std::string warn_txt; swarnstate_t states = g_model.switchWarningState; @@ -98,3 +87,21 @@ void SwitchWarnDialog::checkEvents() messageLabel->setText(warn_txt); } + +ThrottleWarnDialog::ThrottleWarnDialog(const char* msg) : + FullScreenDialog(WARNING_TYPE_ALERT, TR_THROTTLE_UPPERCASE, msg, STR_PRESS_ANY_KEY_TO_SKIP) +{ + setCloseCondition(std::bind(&ThrottleWarnDialog::warningInactive, this)); +} + +void ThrottleWarnDialog::delayedInit() +{ + lv_label_set_long_mode(messageLabel->getLvObj(), LV_LABEL_LONG_DOT); + AUDIO_ERROR_MESSAGE(AU_THROTTLE_ALERT); +} + +bool ThrottleWarnDialog::warningInactive() +{ + extern bool isThrottleWarningAlertNeeded(); + return !isThrottleWarningAlertNeeded(); +} diff --git a/radio/src/gui/colorlcd/switch_warn_dialog.h b/radio/src/gui/colorlcd/switch_warn_dialog.h index c76d220fa..1ee6ba980 100644 --- a/radio/src/gui/colorlcd/switch_warn_dialog.h +++ b/radio/src/gui/colorlcd/switch_warn_dialog.h @@ -19,8 +19,7 @@ * GNU General Public License for more details. */ -#ifndef _SWITCH_WARN_DIALOG_H_ -#define _SWITCH_WARN_DIALOG_H_ +#pragma once #include "fullscreen_dialog.h" #include "mainwindow.h" @@ -35,18 +34,28 @@ class SwitchWarnDialog : public FullScreenDialog std::string getName() const override { return "SwitchWarnDialog"; } #endif - void checkEvents() override; void paint(BitmapBuffer* dc) override; protected: swarnstate_t last_bad_switches; - uint16_t bad_pots; uint16_t last_bad_pots; - StaticText* warn_label; bool warningInactive(); - void init() override; + void delayedInit() override; }; +class ThrottleWarnDialog : public FullScreenDialog +{ + public: + ThrottleWarnDialog(const char* msg); + +#if defined(DEBUG_WINDOWS) + std::string getName() const override { return "ThrottleWarnDialog"; } #endif + + protected: + bool warningInactive(); + + void delayedInit() override; +}; diff --git a/radio/src/gui/common/stdlcd/CMakeLists.txt b/radio/src/gui/common/stdlcd/CMakeLists.txt index e090843e3..d88c3da4b 100644 --- a/radio/src/gui/common/stdlcd/CMakeLists.txt +++ b/radio/src/gui/common/stdlcd/CMakeLists.txt @@ -17,6 +17,7 @@ set(GUI_SRC ../common/stdlcd/radio_trainer.cpp ../common/stdlcd/view_telemetry.cpp ../common/stdlcd/calibration.cpp + ../common/stdlcd/splash.cpp model_curve_edit.cpp ) diff --git a/radio/src/gui/common/stdlcd/features.h b/radio/src/gui/common/stdlcd/features.h new file mode 100644 index 000000000..e32dde981 --- /dev/null +++ b/radio/src/gui/common/stdlcd/features.h @@ -0,0 +1,140 @@ +/* + * 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. + */ + +#pragma once + +// Macros for B&W menus + +#if defined(VARIO) + #define CASE_VARIO(x) x, +#else + #define CASE_VARIO(x) +#endif + +#if defined(IMU) +#define CASE_IMU(x) x, +#else +#define CASE_IMU(x) +#endif + +#if defined(BACKLIGHT_GPIO) +#define CASE_BACKLIGHT(x) x, +#else +#define CASE_BACKLIGHT(x) +#endif + +#if defined(RTCLOCK) + #define CASE_RTCLOCK(x) x, +#else + #define CASE_RTCLOCK(x) +#endif + +#if defined(BUZZER) + #define CASE_BUZZER(x) x, +#else + #define CASE_BUZZER(x) +#endif + +#if defined(AUDIO) + #define CASE_AUDIO(x) x, +#else + #define CASE_AUDIO(x) +#endif + +#if defined(PWM_BACKLIGHT) + #define CASE_PWM_BACKLIGHT(x) x, +#else + #define CASE_PWM_BACKLIGHT(x) +#endif + +#if defined(GPS) + #define CASE_GPS(x) x, +#else + #define CASE_GPS(x) +#endif + +#if defined(HAPTIC) + #define CASE_HAPTIC(x) x, +#else + #define CASE_HAPTIC(x) +#endif + +#if defined(PWR_BUTTON_PRESS) + #define CASE_PWR_BUTTON_PRESS(x) x, +#else + #define CASE_PWR_BUTTON_PRESS(x) +#endif + +#if defined(PXX1) + #define CASE_PXX1(x) x, +#else + #define CASE_PXX1(x) +#endif + +#if defined(PXX2) + #define CASE_PXX2(x) x, +#else + #define CASE_PXX2(x) +#endif + +#if defined(BLUETOOTH) + #define CASE_BLUETOOTH(x) x, +#else + #define CASE_BLUETOOTH(x) +#endif + +#if defined(HELI) + #define CASE_HELI(x) x, +#else + #define CASE_HELI(x) +#endif + +#if defined(FLIGHT_MODES) + #define CASE_FLIGHT_MODES(x) x, +#else + #define CASE_FLIGHT_MODES(x) +#endif + +#if defined(GVARS) + #define CASE_GVARS(x) x, +#else + #define CASE_GVARS(x) +#endif + +#if defined(LUA_MODEL_SCRIPTS) + #define CASE_LUA_MODEL_SCRIPTS(x) x, +#else + #define CASE_LUA_MODEL_SCRIPTS(x) +#endif + +#if defined(PCBX9DP) || defined(PCBX9E) + #define CASE_PCBX9E_PCBX9DP(x) x, +#else + #define CASE_PCBX9E_PCBX9DP(x) +#endif + +#if defined(SDCARD) + #define CASE_SDCARD(x) x, +#else + #define CASE_SDCARD(x) +#endif + +#define CASE_SPLASH_PARAM(x) x, diff --git a/radio/src/gui/common/stdlcd/splash.cpp b/radio/src/gui/common/stdlcd/splash.cpp new file mode 100644 index 000000000..3a6f1ec67 --- /dev/null +++ b/radio/src/gui/common/stdlcd/splash.cpp @@ -0,0 +1,76 @@ +/* + * 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 "opentx.h" +#include "inactivity_timer.h" + +void startSplash() +{ +} + +void waitSplash() +{ + // Handle B&W splash screen + +#if defined(PWR_BUTTON_PRESS) + bool refresh = false; +#endif + + if (SPLASH_NEEDED()) { + resetBacklightTimeout(); + drawSplash(); + + getADC(); // init ADC array + + inactivityCheckInputs(); + + tmr10ms_t tgtime = get_tmr10ms() + SPLASH_TIMEOUT; + + while (tgtime > get_tmr10ms()) { + RTOS_WAIT_TICKS(1); + + getADC(); + + if (getEvent() || inactivityCheckInputs()) + return; + +#if defined(PWR_BUTTON_PRESS) + uint32_t pwr_check = pwrCheck(); + if (pwr_check == e_power_off) { + break; + } + else if (pwr_check == e_power_press) { + refresh = true; + } + else if (pwr_check == e_power_on && refresh) { + drawSplash(); + refresh = false; + } +#else + if (pwrCheck() == e_power_off) { + return; + } +#endif + + checkBacklight(); + } + } +} diff --git a/radio/src/gvars.cpp b/radio/src/gvars.cpp index f782438b1..b1dbc3d1d 100644 --- a/radio/src/gvars.cpp +++ b/radio/src/gvars.cpp @@ -85,3 +85,10 @@ int32_t getGVarFieldValuePrec1(int16_t val, int16_t min, int16_t max, int8_t fm) } return limit(min*10, val, max*10); } + +void getGVarIncDecRange(int16_t & valMin, int16_t & valMax) +{ + int16_t rng = abs(valMax - valMin); + valMin = -rng; + valMax = rng; +} diff --git a/radio/src/gvars.h b/radio/src/gvars.h index 6eeba3047..ed3f1fa2a 100644 --- a/radio/src/gvars.h +++ b/radio/src/gvars.h @@ -19,18 +19,17 @@ * GNU General Public License for more details. */ -#ifndef _GVARS_H_ -#define _GVARS_H_ +#pragma once - // GVars have one value per flight mode - #define GVAR_VALUE(gv, fm) g_model.flightModeData[fm].gvars[gv] - #define SET_GVAR_VALUE(idx, phase, value) \ - GVAR_VALUE(idx, phase) = value; \ - storageDirty(EE_MODEL); \ - if (g_model.gvars[idx].popup) { \ - gvarLastChanged = idx; \ - gvarDisplayTimer = GVAR_DISPLAY_TIME; \ - } +// GVars have one value per flight mode +#define GVAR_VALUE(gv, fm) g_model.flightModeData[fm].gvars[gv] +#define SET_GVAR_VALUE(idx, phase, value) \ + GVAR_VALUE(idx, phase) = value; \ + storageDirty(EE_MODEL); \ + if (g_model.gvars[idx].popup) { \ + gvarLastChanged = idx; \ + gvarDisplayTimer = GVAR_DISPLAY_TIME; \ + } #if defined(GVARS) uint8_t getGVarFlightMode(uint8_t fm, uint8_t gv); @@ -72,4 +71,4 @@ constexpr int32_t MIX_WEIGHT_MIN = -500; constexpr int32_t MIX_OFFSET_MAX = 500; constexpr int32_t MIX_OFFSET_MIN = -500; -#endif // _GVARS_H_ +void getGVarIncDecRange(int16_t & valMin, int16_t & valMax); diff --git a/radio/src/main.cpp b/radio/src/main.cpp index 625f92e8d..42c4f16e4 100644 --- a/radio/src/main.cpp +++ b/radio/src/main.cpp @@ -160,7 +160,7 @@ void handleUsbConnection() if (getSelectedUsbMode() != USB_UNSELECTED_MODE) { if (getSelectedUsbMode() == USB_MASS_STORAGE_MODE) { - opentxClose(false); + edgeTxClose(false); } #if defined(USB_SERIAL) else if (getSelectedUsbMode() == USB_SERIAL_MODE) { @@ -177,7 +177,7 @@ void handleUsbConnection() usbStop(); TRACE("USB stopped"); if (getSelectedUsbMode() == USB_MASS_STORAGE_MODE) { - opentxResume(); + edgeTxResume(); pushEvent(EVT_ENTRY); } else if (getSelectedUsbMode() == USB_SERIAL_MODE) { serialStop(SP_VCP); diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 520de7168..7ca1d715d 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -46,11 +46,11 @@ #if defined(LIBOPENUI) #include "libopenui.h" - // #include "shutdown_animation.h" #include "radio_calibration.h" #include "view_main.h" #include "view_text.h" #include "theme.h" + #include "switch_warn_dialog.h" #include "gui/colorlcd/LvglWrapper.h" #endif @@ -59,6 +59,9 @@ #include #endif +extern void startSplash(); +extern void waitSplash(); + RadioData g_eeGeneral; ModelData g_model; @@ -69,6 +72,8 @@ Clipboard clipboard; GlobalData globalData; uint32_t maxMixerDuration; // microseconds + +constexpr uint8_t HEART_TIMER_10MS = 0x01; uint8_t heartbeat; #if defined(OVERRIDE_CHANNEL_FUNCTION) @@ -558,58 +563,6 @@ void resetBacklightTimeout() lightOffCounter = (autoOff*250) << 1; } -#if defined(SPLASH) -void doSplash() -{ -#if defined(PWR_BUTTON_PRESS) - bool refresh = false; -#endif - - if (SPLASH_NEEDED()) { - resetBacklightTimeout(); - drawSplash(); - - getADC(); // init ADC array - - inactivityCheckInputs(); - - tmr10ms_t tgtime = get_tmr10ms() + SPLASH_TIMEOUT; - - while (tgtime > get_tmr10ms()) { - RTOS_WAIT_TICKS(1); - - getADC(); - - if (getEvent() || inactivityCheckInputs()) - return; - -#if defined(PWR_BUTTON_PRESS) - uint32_t pwr_check = pwrCheck(); - if (pwr_check == e_power_off) { - break; - } - else if (pwr_check == e_power_press) { - refresh = true; - } - else if (pwr_check == e_power_on && refresh) { - drawSplash(); - refresh = false; - } -#else - if (pwrCheck() == e_power_off) { - return; - } -#endif - - checkBacklight(); - } -#if defined(LIBOPENUI) - MainWindow::instance()->setActiveScreen(); -#endif - } -} -#endif - #if defined(MULTIMODULE) void checkMultiLowPower() @@ -802,14 +755,10 @@ void checkThrottleStick() strcpy(throttleNotIdle, STR_THROTTLE_NOT_IDLE); } LED_ERROR_BEGIN(); - AUDIO_ERROR_MESSAGE(AU_THROTTLE_ALERT); - auto dialog = - new FullScreenDialog(WARNING_TYPE_ALERT, TR_THROTTLE_UPPERCASE, - throttleNotIdle, STR_PRESS_ANY_KEY_TO_SKIP); - dialog->setCloseCondition([]() { return !isThrottleWarningAlertNeeded(); }); + auto dialog = new ThrottleWarnDialog(throttleNotIdle); dialog->runForever(); - LED_ERROR_END(); } + LED_ERROR_END(); } #else void checkThrottleStick() @@ -1087,9 +1036,9 @@ void flightReset(uint8_t check) } } -void opentxClose(uint8_t shutdown) +void edgeTxClose(uint8_t shutdown) { - TRACE("opentxClose"); + TRACE("edgeTxClose"); watchdogSuspend(2000/*20s*/); @@ -1150,9 +1099,9 @@ void opentxClose(uint8_t shutdown) #endif } -void opentxResume() +void edgeTxResume() { - TRACE("opentxResume"); + TRACE("edgeTxResume"); sdMount(); #if defined(COLORLCD) && defined(LUA) @@ -1317,7 +1266,10 @@ void runStartupAnimation() else if (!isPowerOn) { isPowerOn = true; pwrOn(); - haptic.play(15, 3, PLAY_NOW); +#if defined(HAPTIC) + if (g_eeGeneral.hapticMode != e_mode_quiet) + haptic.play(15, 3, PLAY_NOW); +#endif } } @@ -1370,26 +1322,15 @@ void moveTrimsToOffsets() // copy state of 3 primary to subtrim AUDIO_WARNING2(); } -#if !defined(OPENTX_START_DEFAULT_ARGS) - #define OPENTX_START_DEFAULT_ARGS 0 -#endif +// Overridden by simulator startup +uint8_t startOptions = 0; -const uint8_t startOptions = OPENTX_START_DEFAULT_ARGS; - -void opentxInit() +void edgeTxInit() { - TRACE("opentxInit"); + TRACE("edgeTxInit"); -#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"); - } -#endif + // Show splash screen (color LCD) + startSplash(); #if defined(HARDWARE_TOUCH) && !defined(PCBFLYSKY) && !defined(SIMU) touchPanelInit(); @@ -1411,13 +1352,21 @@ void opentxInit() lcdClear(); lcdRefresh(); lcdRefreshWait(); +#endif - bool radioSettingsValid = storageReadRadioSettings(false); - (void)radioSettingsValid; + // Load radio.yml so radio settings can be used + bool radioSettingsValid = false; +#if defined(RTC_BACKUP_RAM) + // Skip loading if EM startup and radio has RTC backup data + if (!UNEXPECTED_SHUTDOWN()) + radioSettingsValid = storageReadRadioSettings(false); +#else + // No RTC backup - try and load even for EM startup + radioSettingsValid = storageReadRadioSettings(false); +#endif #if defined(GUI) && !defined(COLORLCD) lcdSetContrast(); -#endif #endif BACKLIGHT_ENABLE(); // we start the backlight during the startup animation @@ -1429,9 +1378,12 @@ void opentxInit() else { runStartupAnimation(); } -#else // defined(PWR_BUTTON_PRESS) +#else // defined(STARTUP_ANIMATION) pwrOn(); - haptic.play(15, 3, PLAY_NOW); +#if defined(HAPTIC) + if (g_eeGeneral.hapticMode != e_mode_quiet) + haptic.play(15, 3, PLAY_NOW); +#endif #endif // Radios handle UNEXPECTED_SHUTDOWN() differently: @@ -1486,6 +1438,8 @@ void opentxInit() if (!radioSettingsValid) storageReadRadioSettings(); storageReadCurrentModel(); +#else + (void)radioSettingsValid; #endif #if defined(COLORLCD) && defined(LUA) @@ -1510,11 +1464,6 @@ void opentxInit() storageReadAll(); #endif #endif // #if !defined(EEPROM) - -// TODO: move to board on hook (onStorageReady()?) -// #if defined(SPORT_UPDATE_PWR_GPIO) -// SPORT_UPDATE_POWER_INIT(); -// #endif initSerialPorts(); @@ -1555,48 +1504,8 @@ void opentxInit() if (!g_eeGeneral.dontPlayHello) AUDIO_HELLO(); - // TODO: This needs some refactoring and cleanup -#if defined(SPLASH) - // Handle B&W splash screen - doSplash(); - - // Handle color splash screen -#if !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 // defined(SIMU) - - 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 // defined(SIMU) - } - - // Reset timer so special/global functions set to !1x don't get triggered - START_SILENCE_PERIOD(); - } -#endif // !defined(STARTUP_ANIMATION) -#endif // defined(SPLASH) + // Wait until splash screen done + waitSplash(); } #endif // defined(GUI) @@ -1882,7 +1791,10 @@ uint32_t pwrCheck() #endif // COLORLCD } - haptic.play(15, 3, PLAY_NOW); +#if defined(HAPTIC) + if (g_eeGeneral.hapticMode != e_mode_quiet) + haptic.play(15, 3, PLAY_NOW); +#endif pwr_check_state = PWR_CHECK_OFF; return e_power_off; } diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 26fabfada..491fc703f 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -41,159 +41,6 @@ #include "libopenui/src/libopenui_file.h" #endif -#if defined(SIMU) - #define SWITCH_SIMU(a, b) (a) -#else - #define SWITCH_SIMU(a, b) (b) -#endif - -#if defined(VARIO) - #define CASE_VARIO(x) x, -#else - #define CASE_VARIO(x) -#endif - -#if defined(IMU) -#define CASE_IMU(x) x, -#else -#define CASE_IMU(x) -#endif - -#if defined(BACKLIGHT_GPIO) -#define CASE_BACKLIGHT(x) x, -#else -#define CASE_BACKLIGHT(x) -#endif - -#if defined(OLED_SCREEN) -#define CASE_CONTRAST(x) -#else -#define CASE_CONTRAST(x) x, -#endif - - -#if defined(LUA) - #define CASE_LUA(x) x, -#else - #define CASE_LUA(x) -#endif - -#if defined(RTCLOCK) - #define CASE_RTCLOCK(x) x, -#else - #define CASE_RTCLOCK(x) -#endif - -#if defined(BUZZER) - #define CASE_BUZZER(x) x, -#else - #define CASE_BUZZER(x) -#endif - -#if defined(AUDIO) - #define CASE_AUDIO(x) x, -#else - #define CASE_AUDIO(x) -#endif - -#if defined(PWM_BACKLIGHT) - #define CASE_PWM_BACKLIGHT(x) x, -#else - #define CASE_PWM_BACKLIGHT(x) -#endif - -#if defined(GPS) - #define CASE_GPS(x) x, -#else - #define CASE_GPS(x) -#endif - -#if defined(VARIO) - #define CASE_VARIO(x) x, -#else - #define CASE_VARIO(x) -#endif - -#if defined(HAPTIC) - #define CASE_HAPTIC(x) x, -#else - #define CASE_HAPTIC(x) -#endif - -#if defined(SPLASH) - #define CASE_SPLASH(x) x, -#else - #define CASE_SPLASH(x) -#endif - -#if defined(PWR_BUTTON_PRESS) - #define CASE_PWR_BUTTON_PRESS(x) x, -#else - #define CASE_PWR_BUTTON_PRESS(x) -#endif - -#if defined(PXX1) - #define CASE_PXX1(x) x, -#else - #define CASE_PXX1(x) -#endif - -#if defined(PXX2) - #define CASE_PXX2(x) x, -#else - #define CASE_PXX2(x) -#endif - -#if defined(SDCARD) - #define CASE_SDCARD(x) x, -#else - #define CASE_SDCARD(x) -#endif - -#if defined(BLUETOOTH) - #define CASE_BLUETOOTH(x) x, -#else - #define CASE_BLUETOOTH(x) -#endif - -#if defined(HELI) - #define CASE_HELI(x) x, -#else - #define CASE_HELI(x) -#endif - -#if defined(FLIGHT_MODES) - #define CASE_FLIGHT_MODES(x) x, -#else - #define CASE_FLIGHT_MODES(x) -#endif - -#if defined(GVARS) - #define CASE_GVARS(x) x, -#else - #define CASE_GVARS(x) -#endif - -#if defined(LUA_MODEL_SCRIPTS) - #define CASE_LUA_MODEL_SCRIPTS(x) x, -#else - #define CASE_LUA_MODEL_SCRIPTS(x) -#endif - -#if defined(PCBX9DP) || defined(PCBX9E) - #define CASE_PCBX9E_PCBX9DP(x) x, -#else - #define CASE_PCBX9E_PCBX9DP(x) -#endif - -#if defined(PCBX9E) - #define CASE_PCBX9E(x) x, -#else - #define CASE_PCBX9E(x) -#endif - - #define CASE_CAPACITY(x) - #if defined(FAI) #define IS_FAI_ENABLED() true #define IF_FAI_CHOICE(x) @@ -334,35 +181,17 @@ struct CustomFunctionsContext { #define THRCHK_DEADBAND 16 +#if !defined(COLORLCD) inline bool SPLASH_NEEDED() { -#if defined(COLORLCD) - return false; -#else return g_eeGeneral.splashMode != 3; -#endif } - -#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; -constexpr uint8_t HEART_TIMER_PULSES = 0x02; // when multiple modules this is the first one - -constexpr uint8_t HEART_WDT_CHECK = HEART_TIMER_10MS -#if defined(HARDWARE_INTERNAL_MODULE) - + (HEART_TIMER_PULSES << INTERNAL_MODULE) -#endif -#if defined(HARDWARE_EXTERNAL_MODULE) - + (HEART_TIMER_PULSES << EXTERNAL_MODULE) -#endif - ; // end of HEART_WDT_CHECK +#define SPLASH_TIMEOUT (g_eeGeneral.splashMode == -4 ? 1500 : (g_eeGeneral.splashMode <= 0 ? (400-g_eeGeneral.splashMode * 200) : (400 - g_eeGeneral.splashMode * 100))) extern uint8_t heartbeat; -#define MAX_ALERT_TIME 60 - #define LEN_STD_CHARS 40 #if defined(TRANSLATIONS_CZ) @@ -499,10 +328,6 @@ void flightReset(uint8_t check=true); #define RESET_THR_TRACE() s_timeCum16ThrP = s_timeCumThr = 0 #endif -#if defined(SPLASH) - void doSplash(); -#endif - // disabled function (not used anywhere) #define READ_ONLY() false #define READ_ONLY_UNLOCKED() true @@ -613,14 +438,6 @@ inline void getMixSrcRange(const int source, int16_t & valMin, int16_t & valMax, valMin = -valMax; } } -#if defined(GVAR_MAX) -inline void getGVarIncDecRange(int16_t & valMin, int16_t & valMax) -{ - int16_t rng = abs(valMax - valMin); - valMin = -rng; - valMax = rng; -} -#endif void applyExpos(int16_t * anas, uint8_t mode, uint8_t ovwrIdx=0, int16_t ovwrValue=0); int16_t applyLimits(uint8_t channel, int32_t value); @@ -808,9 +625,9 @@ enum AUDIO_SOUNDS { void checkBattery(); -void opentxClose(uint8_t shutdown=true); -void opentxInit(); -void opentxResume(); +void edgeTxClose(uint8_t shutdown=true); +void edgeTxInit(); +void edgeTxResume(); constexpr uint8_t OPENTX_START_NO_SPLASH = 0x01; constexpr uint8_t OPENTX_START_NO_CALIBRATION = 0x02; @@ -831,7 +648,6 @@ constexpr uint8_t OPENTX_START_NO_CHECKS = 0x04; #define LED_ERROR_END() #endif -// Re-useable byte array to save having multiple buffers #if LCD_W <= 212 constexpr uint8_t SD_SCREEN_FILE_LENGTH = 32; #else @@ -848,6 +664,7 @@ constexpr uint8_t TEXT_FILENAME_MAXLEN = 40; #include "telemetry/ghost_menu.h" #endif +// Re-useable byte array to save having multiple buffers union ReusableBuffer { struct { diff --git a/radio/src/targets/horus/CMakeLists.txt b/radio/src/targets/horus/CMakeLists.txt index 537fb5d31..512de78d8 100644 --- a/radio/src/targets/horus/CMakeLists.txt +++ b/radio/src/targets/horus/CMakeLists.txt @@ -37,10 +37,6 @@ endif() set(CPU_TYPE_FULL STM32F429xI) set(SIZE_TARGET_MEM_DEFINE "MEM_SIZE_SDRAM2=8192") -if(SPLASH STREQUAL OFF) - message(FATAL_ERROR "Option SPLASH=OFF not supported on Horus") -endif() - add_definitions(-DPCBFRSKY) # defines existing internal modules diff --git a/radio/src/targets/nv14/board.h b/radio/src/targets/nv14/board.h index 28aefedf1..29589fc60 100644 --- a/radio/src/targets/nv14/board.h +++ b/radio/src/targets/nv14/board.h @@ -29,6 +29,8 @@ #include "hal.h" #include "hal/serial_port.h" +#include "watchdog_driver.h" + #define FLASHSIZE 0x200000 #define BOOTLOADER_SIZE 0x20000 #define FIRMWARE_ADDRESS 0x08000000 diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index f194adf2b..76aaef71e 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -43,7 +43,8 @@ int g_snapshot_idx = 0; -uint8_t simu_start_mode = 0; +extern uint8_t startOptions; + char * main_thread_error = nullptr; bool simu_shutdown = false; @@ -159,7 +160,7 @@ void simuStart(bool tests, const char * sdPath, const char * settingsPath) menuLevel = 0; #endif - simu_start_mode = (tests ? 0 : OPENTX_START_NO_SPLASH | OPENTX_START_NO_CALIBRATION | OPENTX_START_NO_CHECKS); + startOptions = (tests ? 0 : OPENTX_START_NO_SPLASH | OPENTX_START_NO_CALIBRATION | OPENTX_START_NO_CHECKS); simu_shutdown = false; simuFatfsSetPaths(sdPath, settingsPath); diff --git a/radio/src/targets/simu/simpgmspace.h b/radio/src/targets/simu/simpgmspace.h index 7793948bd..179398b47 100644 --- a/radio/src/targets/simu/simpgmspace.h +++ b/radio/src/targets/simu/simpgmspace.h @@ -39,11 +39,8 @@ extern uint8_t * eeprom; #define __disable_irq() #define __enable_irq() -extern uint8_t simu_start_mode; extern char * main_thread_error; -#define OPENTX_START_DEFAULT_ARGS simu_start_mode - uint64_t simuTimerMicros(void); uint8_t simuSleep(uint32_t ms); // returns true if thread shutdown requested diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 33f82ac26..652846b11 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -553,10 +553,6 @@ set(SDCARD YES) set(TARGET_DIR taranis) set(PPM_LIMITS_SYMETRICAL YES) -if(SPLASH STREQUAL OFF) - message(FATAL_ERROR "Option SPLASH=OFF not supported on Taranis") -endif() - add_definitions(-DPCBTARANIS) add_definitions(-DAUDIO -DVOICE ) diff --git a/radio/src/tasks.cpp b/radio/src/tasks.cpp index 2260ad54a..11ec821b2 100644 --- a/radio/src/tasks.cpp +++ b/radio/src/tasks.cpp @@ -47,7 +47,7 @@ TASK_FUNCTION(menusTask) LvglWrapper::instance(); #endif - opentxInit(); + edgeTxInit(); mixerTaskInit(); @@ -90,7 +90,7 @@ TASK_FUNCTION(menusTask) #endif drawSleepBitmap(); - opentxClose(); + edgeTxClose(); boardOff(); TASK_RETURN(); diff --git a/radio/src/timers.cpp b/radio/src/timers.cpp index eb2956831..cdf63376b 100644 --- a/radio/src/timers.cpp +++ b/radio/src/timers.cpp @@ -25,6 +25,8 @@ volatile tmr10ms_t g_tmr10ms; +#define MAX_ALERT_TIME 60 + #if TIMERS > MAX_TIMERS #error "Timers cannot exceed " .. MAX_TIMERS #endif diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index b425a394a..a685ace3d 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -490,13 +490,10 @@ const char STR_VOLUME[] = TR_VOLUME; const char STR_LCD[] = TR_LCD; const char STR_BRIGHTNESS[] = TR_BRIGHTNESS; const char STR_CPU_TEMP[] = TR_CPU_TEMP; -const char STR_CPU_CURRENT[] = TR_CPU_CURRENT; -const char STR_CPU_MAH[] = TR_CPU_MAH; const char STR_COPROC[] = TR_COPROC; const char STR_COPROC_TEMP[] = TR_COPROC_TEMP; const char STR_TEMPWARNING[] = TR_TEMPWARNING; const char STR_TTL_WARNING[] = TR_TTL_WARNING; -const char STR_CAPAWARNING[] = TR_CAPAWARNING; const char STR_FUNC[] = TR_FUNC; const char STR_V1[] = TR_V1; const char STR_V2[] = TR_V2; diff --git a/radio/src/translations.h b/radio/src/translations.h index 8dbf80b67..5caecfe75 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -748,11 +748,8 @@ extern const char STR_VOLUME[]; extern const char STR_LCD[]; extern const char STR_BRIGHTNESS[]; extern const char STR_CPU_TEMP[]; -extern const char STR_CPU_CURRENT[]; -extern const char STR_CPU_MAH[]; extern const char STR_COPROC[]; extern const char STR_COPROC_TEMP[]; -extern const char STR_CAPAWARNING[]; extern const char STR_TEMPWARNING[]; extern const char STR_TTL_WARNING[]; extern const char STR_FUNC[]; diff --git a/radio/src/translations/cn.h b/radio/src/translations/cn.h index d675bb167..77c20e670 100644 --- a/radio/src/translations/cn.h +++ b/radio/src/translations/cn.h @@ -647,11 +647,8 @@ #define TR_LCD "LCD" #define TR_BRIGHTNESS "亮度" #define TR_CPU_TEMP "CPU 温度" -#define TR_CPU_CURRENT "电流" -#define TR_CPU_MAH "消耗量" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "主板温度" -#define TR_CAPAWARNING INDENT "电流过低" #define TR_TEMPWARNING INDENT "过热" #define TR_TTL_WARNING "注意串口使用逻辑电平3.3V" #define TR_FUNC "功能" diff --git a/radio/src/translations/cz.h b/radio/src/translations/cz.h index 76e41ed4d..4c63523e0 100644 --- a/radio/src/translations/cz.h +++ b/radio/src/translations/cz.h @@ -665,11 +665,8 @@ #define TR_LCD "LCD" #define TR_BRIGHTNESS "Jas" #define TR_CPU_TEMP "Tepl. CPU\016>" -#define TR_CPU_CURRENT "Proud\030>" -#define TR_CPU_MAH "Spotřeba" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "Tepl. MB \016>" -#define TR_CAPAWARNING INDENT "Nízká kapacita" #define TR_TEMPWARNING INDENT "Přehřátí" #define TR_TTL_WARNING "Varování: používat 3.3V hodnoty" #define TR_FUNC "Funkce" diff --git a/radio/src/translations/da.h b/radio/src/translations/da.h index 6611d2702..94bced9d2 100644 --- a/radio/src/translations/da.h +++ b/radio/src/translations/da.h @@ -663,11 +663,8 @@ #define TR_LCD "LCD" #define TR_BRIGHTNESS "Skarphed" #define TR_CPU_TEMP "CPU temp." -#define TR_CPU_CURRENT "CPU strøm" -#define TR_CPU_MAH "Forbrug" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "MB Temp." -#define TR_CAPAWARNING INDENT "Kapacitet lav" #define TR_TEMPWARNING INDENT "For varm" #define TR_TTL_WARNING "Advarsel: brug 3.3V logisk niveau" #define TR_FUNC "Funktion" diff --git a/radio/src/translations/de.h b/radio/src/translations/de.h index 819bf3576..f174296af 100644 --- a/radio/src/translations/de.h +++ b/radio/src/translations/de.h @@ -658,11 +658,8 @@ #define TR_LCD "Bildschirm" #define TR_BRIGHTNESS "Helligkeit" #define TR_CPU_TEMP "CPU-Temp.\016>" -#define TR_CPU_CURRENT "Strom\022>" -#define TR_CPU_MAH "Verbrauch" #define TR_COPROC "CoProz." #define TR_COPROC_TEMP "MB Temp. \016>" -#define TR_CAPAWARNING INDENT "Kapaz. niedrig" // wg 9XR-Pro #define TR_TEMPWARNING INDENT "Temp. größer" //wg 9XR-Pro #define TR_TTL_WARNING "Warning: use 3.3V logic levels" #define TR_FUNC "Funktion" diff --git a/radio/src/translations/en.h b/radio/src/translations/en.h index 0fdb11c44..1ddc5261f 100644 --- a/radio/src/translations/en.h +++ b/radio/src/translations/en.h @@ -658,11 +658,8 @@ #define TR_LCD "LCD" #define TR_BRIGHTNESS "Brightness" #define TR_CPU_TEMP "CPU temp." -#define TR_CPU_CURRENT "Current" -#define TR_CPU_MAH "Consumpt." #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "MB Temp." -#define TR_CAPAWARNING INDENT "Capacity low" #define TR_TEMPWARNING INDENT "Overheat" #define TR_TTL_WARNING "Warning: use 3.3V logic levels" #define TR_FUNC "Function" diff --git a/radio/src/translations/es.h b/radio/src/translations/es.h index 56791c383..04b6f53b4 100644 --- a/radio/src/translations/es.h +++ b/radio/src/translations/es.h @@ -654,11 +654,8 @@ #define TR_LCD "LCD" #define TR_BRIGHTNESS "Brillo" #define TR_CPU_TEMP "CPU Temp.\016>" -#define TR_CPU_CURRENT "Actual\022>" -#define TR_CPU_MAH "Consumo" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "MB Temp. \016>" -#define TR_CAPAWARNING INDENT "Capacidad baja" #define TR_TEMPWARNING INDENT "Sobrecalent" #define TR_TTL_WARNING "Warning: use 3.3V logic levels" #define TR_FUNC "Función" diff --git a/radio/src/translations/fi.h b/radio/src/translations/fi.h index 541e949f9..18ed1eb5a 100644 --- a/radio/src/translations/fi.h +++ b/radio/src/translations/fi.h @@ -669,11 +669,8 @@ #define TR_LCD "LCD-näyttö" #define TR_BRIGHTNESS "Kirkkaus" #define TR_CPU_TEMP "CPU:n lämpötila\016>" -#define TR_CPU_CURRENT "Virta\022>" -#define TR_CPU_MAH "Kulutus" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "MB Temp. \016>" -#define TR_CAPAWARNING INDENT "Capacity Low" #define TR_TEMPWARNING INDENT "Ylikuumentunut" #define TR_TTL_WARNING "Varoitus: käytä 3,3V:n logiikkatasoja" #define TR_FUNC "Func" diff --git a/radio/src/translations/fr.h b/radio/src/translations/fr.h index 981da2d2b..fd311c41c 100644 --- a/radio/src/translations/fr.h +++ b/radio/src/translations/fr.h @@ -662,11 +662,8 @@ #define TR_LCD "LCD" #define TR_BRIGHTNESS "Luminosité" #define TR_CPU_TEMP "Temp. CPU\016>" -#define TR_CPU_CURRENT "Courant\022>" -#define TR_CPU_MAH "Consomm." #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "Temp. CM \016>" -#define TR_CAPAWARNING INDENT "Capacité Faible" #define TR_TEMPWARNING INDENT "Surchauffe" #define TR_TTL_WARNING "Attention: utiliser val. logique 3.3V" #define TR_FUNC "Fonction" diff --git a/radio/src/translations/he.h b/radio/src/translations/he.h index a6552ede5..86cd8208a 100644 --- a/radio/src/translations/he.h +++ b/radio/src/translations/he.h @@ -662,11 +662,8 @@ #define TR_LCD "LCD" #define TR_BRIGHTNESS "בהירות" #define TR_CPU_TEMP "CPU temp." -#define TR_CPU_CURRENT "Current" -#define TR_CPU_MAH "Consumpt." #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "MB Temp." -#define TR_CAPAWARNING INDENT "Capacity low" #define TR_TEMPWARNING INDENT "Overheat" #define TR_TTL_WARNING "אזהרה חיבורים אלה עם מתח 3.3 וולט !" #define TR_FUNC "Function" diff --git a/radio/src/translations/it.h b/radio/src/translations/it.h index 1f91ac12b..e04424b5b 100644 --- a/radio/src/translations/it.h +++ b/radio/src/translations/it.h @@ -657,11 +657,8 @@ #define TR_LCD "LCD" #define TR_BRIGHTNESS "Luminosità" #define TR_CPU_TEMP "Temp CPU \016>" -#define TR_CPU_CURRENT "Corrente\022>" -#define TR_CPU_MAH "Consumo" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "Temp. MB \016>" -#define TR_CAPAWARNING INDENT "Capacità Bassa" #define TR_TEMPWARNING INDENT "Temp. Alta" #define TR_TTL_WARNING "Attenzione: usa livelli logici 3.3V" #define TR_FUNC "Funzione" diff --git a/radio/src/translations/jp.h b/radio/src/translations/jp.h index ab3f29343..dad63900e 100644 --- a/radio/src/translations/jp.h +++ b/radio/src/translations/jp.h @@ -653,11 +653,8 @@ #define TR_LCD "LCD" #define TR_BRIGHTNESS "輝度" #define TR_CPU_TEMP "CPU温度" -#define TR_CPU_CURRENT "電流" -#define TR_CPU_MAH "消費量" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "MB温度" -#define TR_CAPAWARNING INDENT "電流が低すぎます" #define TR_TEMPWARNING INDENT "オーバーヒートです" #define TR_TTL_WARNING "警告: 論理値3.3Vを使用します" #define TR_FUNC TR("機能", "ファンクション") diff --git a/radio/src/translations/nl.h b/radio/src/translations/nl.h index 9a8d7d66b..4243dc95f 100644 --- a/radio/src/translations/nl.h +++ b/radio/src/translations/nl.h @@ -655,11 +655,8 @@ #define TR_LCD "LCD" #define TR_BRIGHTNESS "Helderheid" #define TR_CPU_TEMP "CPU-Temp.\016>" -#define TR_CPU_CURRENT "Stroom\022>" -#define TR_CPU_MAH "Verbruik" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "MB Temp. \016>" -#define TR_CAPAWARNING INDENT "Capaciteit laag" // wg 9XR-Pro #define TR_TEMPWARNING INDENT "Overhitting" //wg 9XR-Pro #define TR_TTL_WARNING "Warning: use 3.3V logic levels" #define TR_FUNC "Funktie" diff --git a/radio/src/translations/pl.h b/radio/src/translations/pl.h index 28c1cce74..c5a725eae 100644 --- a/radio/src/translations/pl.h +++ b/radio/src/translations/pl.h @@ -651,11 +651,8 @@ #define TR_LCD "LCD" #define TR_BRIGHTNESS "Jasność" #define TR_CPU_TEMP "Temp. CPU\016>" -#define TR_CPU_CURRENT "Prąd" -#define TR_CPU_MAH "Zużycie" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "Temp. MB" -#define TR_CAPAWARNING INDENT "Mała pojemność" #define TR_TEMPWARNING INDENT "Przegrzanie" #define TR_TTL_WARNING "Uwaga: use 3.3V logic levels" #define TR_FUNC "Funkcja" diff --git a/radio/src/translations/pt.h b/radio/src/translations/pt.h index bd214b189..63c1265c1 100644 --- a/radio/src/translations/pt.h +++ b/radio/src/translations/pt.h @@ -661,11 +661,8 @@ #define TR_LCD "LCD" #define TR_BRIGHTNESS "Brilho" #define TR_CPU_TEMP "CPU temp." -#define TR_CPU_CURRENT "Current" -#define TR_CPU_MAH "Consumo." #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "MB Temp." -#define TR_CAPAWARNING INDENT "Capacit baixa" #define TR_TEMPWARNING INDENT "SobrAquec." #define TR_TTL_WARNING "Alerta: use 3.3V logic levels" #define TR_FUNC "Funcao" diff --git a/radio/src/translations/ru.h b/radio/src/translations/ru.h index 0cdb0fcb8..71e2f299a 100644 --- a/radio/src/translations/ru.h +++ b/radio/src/translations/ru.h @@ -660,11 +660,8 @@ #define TR_LCD "LCD" #define TR_BRIGHTNESS "Подсветка" #define TR_CPU_TEMP "Темпер проц" -#define TR_CPU_CURRENT "Ток" -#define TR_CPU_MAH "Расход" #define TR_COPROC "Сопроцессор" #define TR_COPROC_TEMP "Темпер сопроц" -#define TR_CAPAWARNING INDENT "Низкая емкость" #define TR_TEMPWARNING INDENT "Перегрев" #define TR_TTL_WARNING "Предупреждение: испол лог уровни 3.3В" #define TR_FUNC "Функция" diff --git a/radio/src/translations/se.h b/radio/src/translations/se.h index 511a90df7..af67737d9 100644 --- a/radio/src/translations/se.h +++ b/radio/src/translations/se.h @@ -674,11 +674,8 @@ #define TR_LCD "LCD" #define TR_BRIGHTNESS "Ljusstyrka" #define TR_CPU_TEMP "CPU temp.\016>" -#define TR_CPU_CURRENT "Ström\022>" -#define TR_CPU_MAH "Förbrukn." #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "MB temp. \016>" -#define TR_CAPAWARNING INDENT "Låg kapacitet" #define TR_TEMPWARNING TR(INDENT "Hög temp", INDENT "Hög temperatur") #define TR_TTL_WARNING "Varning: använd 3.3V logiska nivåer" #define TR_FUNC "Funktion" diff --git a/radio/src/translations/tw.h b/radio/src/translations/tw.h index 80990b14f..458f14f70 100644 --- a/radio/src/translations/tw.h +++ b/radio/src/translations/tw.h @@ -653,11 +653,8 @@ #define TR_LCD "LCD" #define TR_BRIGHTNESS "亮度" #define TR_CPU_TEMP "CPU 溫度" -#define TR_CPU_CURRENT "電流" -#define TR_CPU_MAH "消耗量" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "主板溫度" -#define TR_CAPAWARNING INDENT "電流過低" #define TR_TEMPWARNING INDENT "過熱" #define TR_TTL_WARNING "注意串口使用逻辑电平3.3V" #define TR_FUNC "功能"