From 0c99545b270972ed39f3e3d9b086392942578774 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 25 Mar 2019 17:27:57 +0100 Subject: [PATCH] Progress screen refactoring --- radio/src/dataconstants.h | 6 +- radio/src/gui/128x64/gui.h | 10 +-- radio/src/gui/128x64/model_setup.cpp | 2 +- radio/src/gui/128x64/popups.cpp | 17 +---- radio/src/gui/128x64/popups.h | 51 ++++++-------- radio/src/gui/128x64/radio_version.cpp | 4 +- radio/src/gui/128x64/widgets.cpp | 16 ----- radio/src/gui/212x64/gui.h | 15 ---- radio/src/gui/212x64/model_setup.cpp | 2 +- radio/src/gui/212x64/popups.cpp | 15 ---- radio/src/gui/212x64/popups.h | 24 +++---- radio/src/gui/212x64/radio_version.cpp | 4 +- radio/src/gui/212x64/widgets.cpp | 16 ----- radio/src/gui/480x272/gui.h | 1 - radio/src/gui/480x272/menus.h | 1 - radio/src/gui/480x272/widgets.cpp | 6 +- radio/src/gui/480x272/widgets.h | 2 +- radio/src/gui/common/stdlcd/popups.cpp | 70 +++++++++++++++---- radio/src/gui/common/stdlcd/popups.h | 56 +++++++++++++++ radio/src/io/bootloader_flash.cpp | 2 +- radio/src/io/frsky_device_firmware_update.cpp | 19 +++-- radio/src/sdcard.cpp | 10 +++ radio/src/sdcard.h | 1 + radio/src/storage/eeprom_rlc.cpp | 8 +-- radio/src/translations.cpp | 3 - radio/src/translations.h | 3 - radio/src/translations/cz.h.txt | 14 ++-- radio/src/translations/de.h.txt | 6 +- radio/src/translations/en.h.txt | 6 +- radio/src/translations/es.h.txt | 6 +- radio/src/translations/fi.h.txt | 6 +- radio/src/translations/fr.h.txt | 13 ++-- radio/src/translations/it.h.txt | 4 +- radio/src/translations/nl.h.txt | 8 +-- radio/src/translations/pl.h.txt | 4 +- radio/src/translations/pt.h.txt | 6 +- radio/src/translations/se.h.txt | 4 +- 37 files changed, 226 insertions(+), 215 deletions(-) create mode 100644 radio/src/gui/common/stdlcd/popups.h diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index 7ab53511e..b3854cbe0 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -585,9 +585,9 @@ enum MixSources { MIXSRC_MAX, MIXSRC_FIRST_HELI, - MIXSRC_CYC1 = MIXSRC_FIRST_HELI, LUA_EXPORT("cyc1", "Cyclic 1") - MIXSRC_CYC2, LUA_EXPORT("cyc2", "Cyclic 2") - MIXSRC_CYC3, LUA_EXPORT("cyc3", "Cyclic 3") + MIXSRC_CYC1 = MIXSRC_FIRST_HELI, LUA_EXPORT("cyc1", "Cyclic 1") + MIXSRC_CYC2, LUA_EXPORT("cyc2", "Cyclic 2") + MIXSRC_CYC3, LUA_EXPORT("cyc3", "Cyclic 3") MIXSRC_FIRST_TRIM, MIXSRC_TrimRud = MIXSRC_FIRST_TRIM, LUA_EXPORT("trim-rud", "Rudder trim") diff --git a/radio/src/gui/128x64/gui.h b/radio/src/gui/128x64/gui.h index 8c32bb172..2a2d12834 100644 --- a/radio/src/gui/128x64/gui.h +++ b/radio/src/gui/128x64/gui.h @@ -40,7 +40,6 @@ #define NUM_BODY_LINES (LCD_LINES-1) #define MENU_HEADER_HEIGHT FH -#define MENU_INIT_VPOS 0 #define CURVE_SIDE_WIDTH (LCD_H/2) #define CURVE_CENTER_X (LCD_W-CURVE_SIDE_WIDTH-2) @@ -57,7 +56,6 @@ void drawSlider(coord_t x, coord_t y, uint8_t value, uint8_t max, uint8_t attr); extern int8_t checkIncDec_Ret; // global helper vars -#define EDIT_SELECT_MENU -1 #define EDIT_SELECT_FIELD 0 #define EDIT_MODIFY_FIELD 1 #define EDIT_MODIFY_STRING 2 @@ -242,12 +240,6 @@ uint8_t editDelay(coord_t y, event_t event, uint8_t attr, const char * str, uint #define WARNING_TYPE_CONFIRM 1 #define WARNING_TYPE_INFO 2 -extern const char * warningText; -extern const char * warningInfoText; -extern uint8_t warningInfoLength; -extern uint8_t warningResult; -extern uint8_t warningType; - #define COPY_MODE 1 #define MOVE_MODE 2 extern uint8_t s_copyMode; @@ -343,7 +335,7 @@ void drawStick(coord_t centrex, int16_t xval, int16_t yval); void drawPotsBars(); void doMainScreenGraphics(); -void drawProgressBar(const char * label, int num, int den); +void drawProgressScreen(const char * title, const char * message, int num, int den); void drawSleepBitmap(); void drawVerticalScrollbar(coord_t x, coord_t y, coord_t h, uint16_t offset, uint16_t count, uint8_t visible); diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index 66c81f128..c81142904 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -1825,7 +1825,7 @@ void menuModelSetup(event_t event) #if defined(PXX) if (IS_RANGECHECK_ENABLE()) { showMessageBox("RSSI: "); - lcdDrawNumber(16+4*FW, 5*FH, TELEMETRY_RSSI(), BOLD); + lcdDrawNumber(WARNING_LINE_X, 5*FH, TELEMETRY_RSSI(), BOLD); } #endif diff --git a/radio/src/gui/128x64/popups.cpp b/radio/src/gui/128x64/popups.cpp index d86f076e7..977aa801c 100644 --- a/radio/src/gui/128x64/popups.cpp +++ b/radio/src/gui/128x64/popups.cpp @@ -20,21 +20,6 @@ #include "opentx.h" -const char * warningText = NULL; -const char * warningInfoText; -uint8_t warningInfoLength; -uint8_t warningType; -uint8_t warningResult = 0; -uint8_t warningInfoFlags = ZCHAR; - -void drawMessageBox(const char * title) -{ - lcdDrawFilledRect(MENU_X, MENU_Y, MENU_W, 40, SOLID, ERASE); - lcdDrawRect(MENU_X, MENU_Y, MENU_W, 40); - lcdDrawSizedText(WARNING_LINE_X, WARNING_LINE_Y, title, WARNING_LINE_LEN); - // could be a place for a warningInfoText -} - const unsigned char ASTERISK_BITMAP[] = { #include "asterisk.lbm" }; @@ -55,9 +40,11 @@ void drawAlertBox(const char * title, const char * text, const char * action) #endif lcdDrawSolidFilledRect(0, 0, LCD_W, 32); + if (text) { lcdDrawTextAlignedLeft(5*FH, text); } + if (action) { lcdDrawTextAlignedLeft(7*FH, action); } diff --git a/radio/src/gui/128x64/popups.h b/radio/src/gui/128x64/popups.h index b3f5f9fd4..73edb0a84 100644 --- a/radio/src/gui/128x64/popups.h +++ b/radio/src/gui/128x64/popups.h @@ -23,20 +23,18 @@ #include -#define MENU_X 10 -#define MENU_Y 16 -#define MENU_W LCD_W - 19 +#define MESSAGEBOX_X 10 +#define MESSAGEBOX_Y 16 +#define MESSAGEBOX_W (LCD_W - 19) + +#define MENU_X MESSAGEBOX_X +#define MENU_Y MESSAGEBOX_Y +#define MENU_W MESSAGEBOX_W + #define WARNING_LINE_LEN 20 #define WARNING_LINE_X 16 #define WARNING_LINE_Y 3*FH -void drawMessageBox(const char * title); -void showMessageBox(const char * title); -void runPopupWarning(event_t event); - -extern void (*popupFunc)(event_t event); -extern uint8_t warningInfoFlags; - #if !defined(GUI) #define DISPLAY_WARNING(...) #define POPUP_WARNING(...) @@ -60,26 +58,19 @@ extern uint8_t warningInfoFlags; #define POPUP_MENU_ADD_SD_ITEM(s) #endif - #define POPUP_MENU_ADD_ITEM(s) do { popupMenuOffsetType = MENU_OFFSET_INTERNAL; if (popupMenuItemsCount < POPUP_MENU_MAX_LINES) popupMenuItems[popupMenuItemsCount++] = s; } while (0) - #define POPUP_MENU_SELECT_ITEM(s) s_menu_item = (s > 0 ? (s < popupMenuItemsCount ? s : popupMenuItemsCount) : 0) - #define POPUP_MENU_START(func) do { popupMenuHandler = (func); AUDIO_KEY_PRESS(); } while (0) - #define POPUP_MENU_MAX_LINES 12 - #define MENU_MAX_DISPLAY_LINES 6 - #define MENU_LINE_LENGTH (LEN_MODEL_NAME+12) - #define POPUP_MENU_SET_BSS_FLAG() - #define POPUP_MENU_UNSET_BSS_FLAG() - enum { - MENU_OFFSET_INTERNAL, - MENU_OFFSET_EXTERNAL - }; - extern uint8_t popupMenuOffsetType; - extern uint8_t s_menu_item; +#define POPUP_MENU_ADD_ITEM(s) do { popupMenuOffsetType = MENU_OFFSET_INTERNAL; if (popupMenuItemsCount < POPUP_MENU_MAX_LINES) popupMenuItems[popupMenuItemsCount++] = s; } while (0) +#define POPUP_MENU_SELECT_ITEM(s) s_menu_item = (s > 0 ? (s < popupMenuItemsCount ? s : popupMenuItemsCount) : 0) +#define POPUP_MENU_START(func) do { popupMenuHandler = (func); AUDIO_KEY_PRESS(); } while (0) +#define POPUP_MENU_MAX_LINES 12 +#define MENU_MAX_DISPLAY_LINES 6 +#define MENU_LINE_LENGTH (LEN_MODEL_NAME+12) +#define POPUP_MENU_SET_BSS_FLAG() +#define POPUP_MENU_UNSET_BSS_FLAG() +enum { + MENU_OFFSET_INTERNAL, + MENU_OFFSET_EXTERNAL +}; - extern uint16_t popupMenuOffset; - extern const char * popupMenuItems[POPUP_MENU_MAX_LINES]; - extern uint16_t popupMenuItemsCount; - const char * runPopupMenu(event_t event); - extern void (*popupMenuHandler)(const char * result); - extern const char * popupMenuTitle; +#include "../common/stdlcd/popups.h" #endif // _POPUPS_H_ diff --git a/radio/src/gui/128x64/radio_version.cpp b/radio/src/gui/128x64/radio_version.cpp index 4b47f5f59..5adde9153 100644 --- a/radio/src/gui/128x64/radio_version.cpp +++ b/radio/src/gui/128x64/radio_version.cpp @@ -255,14 +255,14 @@ void menuRadioVersion(event_t event) #endif #if defined(EEPROM_RLC) - lcdDrawText(INDENT_WIDTH, y, BUTTON(TR_EEBACKUP), menuVerticalPosition == ITEM_RADIO_BACKUP_EEPROM ? INVERS : 0); + lcdDrawText(INDENT_WIDTH, y, BUTTON(STR_EEBACKUP), menuVerticalPosition == ITEM_RADIO_BACKUP_EEPROM ? INVERS : 0); y += FH; if (menuVerticalPosition == ITEM_RADIO_BACKUP_EEPROM && event == EVT_KEY_BREAK(KEY_ENTER)) { s_editMode = EDIT_SELECT_FIELD; eepromBackup(); } - lcdDrawText(INDENT_WIDTH, y, BUTTON(TR_FACTORYRESET), menuVerticalPosition == ITEM_RADIO_FACTORY_RESET ? INVERS : 0); + lcdDrawText(INDENT_WIDTH, y, BUTTON(STR_FACTORYRESET), menuVerticalPosition == ITEM_RADIO_FACTORY_RESET ? INVERS : 0); // y += FH; if (menuVerticalPosition == ITEM_RADIO_FACTORY_RESET && event == EVT_KEY_BREAK(KEY_ENTER)) { s_editMode = EDIT_SELECT_FIELD; diff --git a/radio/src/gui/128x64/widgets.cpp b/radio/src/gui/128x64/widgets.cpp index f9ba1f651..6ac179599 100644 --- a/radio/src/gui/128x64/widgets.cpp +++ b/radio/src/gui/128x64/widgets.cpp @@ -230,22 +230,6 @@ void drawStatusLine() } #endif -void drawProgressBar(const char * label, int num, int den) -{ - lcdClear(); - if (label) { - lcdDrawTextAlignedLeft(4*FH, label); - } - lcdDrawRect(4, 6*FH+4, LCD_W-8, 7); - if (num > 0 && den > 0) { - int width = ((LCD_W-12)*num)/den; - lcdDrawSolidHorizontalLine(6, 6*FH+6, width, FORCE); - lcdDrawSolidHorizontalLine(6, 6*FH+7, width, FORCE); - lcdDrawSolidHorizontalLine(6, 6*FH+8, width, FORCE); - } - lcdRefresh(); -} - const unsigned char SLEEP_BITMAP[] = { #include "sleep.lbm" }; diff --git a/radio/src/gui/212x64/gui.h b/radio/src/gui/212x64/gui.h index c745b07c1..6922ae328 100644 --- a/radio/src/gui/212x64/gui.h +++ b/radio/src/gui/212x64/gui.h @@ -32,7 +32,6 @@ #define DEFAULT_SCROLLBAR_X (LCD_W-1) #define NUM_BODY_LINES (LCD_LINES-1) #define MENU_HEADER_HEIGHT FH -#define MENU_INIT_VPOS 0 #define MODEL_BITMAP_WIDTH 64 #define MODEL_BITMAP_HEIGHT 32 @@ -55,11 +54,6 @@ inline void drawFieldLabel(coord_t x, coord_t y, const char * str) extern uint8_t modelBitmap[MODEL_BITMAP_SIZE]; bool loadModelBitmap(char * name, uint8_t * bitmap); -struct MenuItem { - const char * name; - const MenuHandlerFunc action; -}; - // Temporary no highlight extern uint8_t noHighlightCounter; #define NO_HIGHLIGHT() (noHighlightCounter > 0) @@ -71,8 +65,6 @@ void drawSplash(); void drawSecondSplash(); void drawScreenIndex(uint8_t index, uint8_t count, uint8_t attr); void drawVerticalScrollbar(coord_t x, coord_t y, coord_t h, uint16_t offset, uint16_t count, uint8_t visible); -void displayMenuBar(const MenuItem * menu, int index); -void drawProgressBar(const char * label, int num, int den); void drawGauge(coord_t x, coord_t y, coord_t w, coord_t h, int32_t val, int32_t max); void drawColumnHeader(const char * const * headers, uint8_t index); void drawStick(coord_t centrex, int16_t xval, int16_t yval); @@ -86,7 +78,6 @@ typedef uint16_t FlightModesType; extern int8_t checkIncDec_Ret; // global helper vars -#define EDIT_SELECT_MENU -1 #define EDIT_SELECT_FIELD 0 #define EDIT_MODIFY_FIELD 1 #define EDIT_MODIFY_STRING 2 @@ -261,12 +252,6 @@ uint8_t editDelay(coord_t y, event_t event, uint8_t attr, const char * str, uint void copySelection(char * dst, const char * src, uint8_t size); -extern const char * warningText; -extern const char * warningInfoText; -extern uint8_t warningInfoLength; -extern uint8_t warningResult; -extern uint8_t warningType; - #define COPY_MODE 1 #define MOVE_MODE 2 extern uint8_t s_copyMode; diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index 4e31ea4df..1425787ae 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -1240,7 +1240,7 @@ void menuModelSetup(event_t event) #if defined(PXX) if (IS_RANGECHECK_ENABLE()) { showMessageBox("RSSI: "); - lcdDrawNumber(16+4*FW, 5*FH, TELEMETRY_RSSI(), BOLD); + lcdDrawNumber(WARNING_LINE_X, 5*FH, TELEMETRY_RSSI(), BOLD | LEFT); } #endif diff --git a/radio/src/gui/212x64/popups.cpp b/radio/src/gui/212x64/popups.cpp index f5eafda2d..0802949a5 100644 --- a/radio/src/gui/212x64/popups.cpp +++ b/radio/src/gui/212x64/popups.cpp @@ -20,21 +20,6 @@ #include "opentx.h" -const char * warningText = NULL; -const char * warningInfoText; -uint8_t warningInfoLength; -uint8_t warningType; -uint8_t warningResult = 0; -uint8_t warningInfoFlags = ZCHAR; - -void drawMessageBox(const char * title) -{ - lcdDrawFilledRect(10, 16, LCD_W-20, 40, SOLID, ERASE); - lcdDrawRect(10, 16, LCD_W-20, 40); - lcdDrawSizedText(WARNING_LINE_X, WARNING_LINE_Y, title, WARNING_LINE_LEN); - // could be a place for a warningInfoText -} - const unsigned char ASTERISK_BITMAP[] = { #include "asterisk.lbm" }; diff --git a/radio/src/gui/212x64/popups.h b/radio/src/gui/212x64/popups.h index 8ba73f281..295419096 100644 --- a/radio/src/gui/212x64/popups.h +++ b/radio/src/gui/212x64/popups.h @@ -21,20 +21,18 @@ #ifndef _POPUPS_H_ #define _POPUPS_H_ +#define MESSAGEBOX_X 10 +#define MESSAGEBOX_Y 16 +#define MESSAGEBOX_W LCD_W - (2 * MESSAGEBOX_X) + #define MENU_X 30 #define MENU_Y 16 -#define MENU_W LCD_W-(2*MENU_X) +#define MENU_W LCD_W - (2 * MENU_X) + #define WARNING_LINE_LEN 32 #define WARNING_LINE_X 16 #define WARNING_LINE_Y 3*FH -void drawMessageBox(const char * title); -void showMessageBox(const char * title); -void runPopupWarning(event_t event); - -extern void (*popupFunc)(event_t event); -extern uint8_t warningInfoFlags; - #define DISPLAY_WARNING (*popupFunc) #define POPUP_INFORMATION(s) (warningText = s, warningType = WARNING_TYPE_INFO, warningInfoText = 0, popupFunc = runPopupWarning) #define POPUP_WARNING(s) (warningText = s, warningInfoText = 0, popupFunc = runPopupWarning) @@ -51,16 +49,12 @@ extern uint8_t warningInfoFlags; #define POPUP_MENU_ADD_SD_ITEM(s) POPUP_MENU_ADD_ITEM(s) #define MENU_LINE_LENGTH (LEN_MODEL_NAME+12) #define POPUP_MENU_SET_BSS_FLAG() -extern const char * popupMenuItems[POPUP_MENU_MAX_LINES]; -extern uint16_t popupMenuItemsCount; -extern uint16_t popupMenuOffset; + enum { MENU_OFFSET_INTERNAL, MENU_OFFSET_EXTERNAL }; -extern uint8_t popupMenuOffsetType; -extern uint8_t s_menu_item; -const char * runPopupMenu(event_t event); -extern void (*popupMenuHandler)(const char * result); + +#include "../common/stdlcd/popups.h" #endif // _POPUPS_H_ diff --git a/radio/src/gui/212x64/radio_version.cpp b/radio/src/gui/212x64/radio_version.cpp index ed4045ba1..b3fbaca32 100644 --- a/radio/src/gui/212x64/radio_version.cpp +++ b/radio/src/gui/212x64/radio_version.cpp @@ -38,8 +38,8 @@ void menuRadioVersion(event_t event) lcdDrawTextAlignedLeft(MENU_HEADER_HEIGHT+4*FH+1, "UID\037\033:"); lcdDrawText(5*FW+3, MENU_HEADER_HEIGHT+4*FH+1, id); - lcdDrawTextAlignedLeft(MENU_HEADER_HEIGHT+5*FH+1, STR_EEBACKUP); - lcdDrawTextAlignedLeft(MENU_HEADER_HEIGHT+6*FH+1, STR_FACTORYRESET); + lcdDrawText(INDENT_WIDTH, MENU_HEADER_HEIGHT+5*FH+1, "[ENTER Long] " STR_EEBACKUP); + lcdDrawText(INDENT_WIDTH, MENU_HEADER_HEIGHT+6*FH+1, "[MENU Long] " STR_FACTORYRESET); lcdDrawFilledRect(0, MENU_HEADER_HEIGHT+5*FH, LCD_W, 2*FH+1, SOLID); if (event == EVT_KEY_LONG(KEY_ENTER)) { diff --git a/radio/src/gui/212x64/widgets.cpp b/radio/src/gui/212x64/widgets.cpp index 2e4166f94..2cfd11b0b 100644 --- a/radio/src/gui/212x64/widgets.cpp +++ b/radio/src/gui/212x64/widgets.cpp @@ -98,22 +98,6 @@ void drawVerticalScrollbar(coord_t x, coord_t y, coord_t h, uint16_t offset, uin lcdDrawVerticalLine(x, y + yofs, yhgt, SOLID, FORCE); } -void drawProgressBar(const char * label, int num, int den) -{ - lcdClear(); - if (label) { - lcdDrawTextAlignedLeft(4*FH, label); - } - lcdDrawRect(4, 6*FH+4, LCD_W-8, 7); - if (num > 0 && den > 0) { - int width = ((LCD_W-12)*num)/den; - lcdDrawSolidHorizontalLine(6, 6*FH+6, width, FORCE); - lcdDrawSolidHorizontalLine(6, 6*FH+7, width, FORCE); - lcdDrawSolidHorizontalLine(6, 6*FH+8, width, FORCE); - } - lcdRefresh(); -} - void drawGauge(coord_t x, coord_t y, coord_t w, coord_t h, int32_t val, int32_t max) { lcdDrawRect(x, y, w+1, h); diff --git a/radio/src/gui/480x272/gui.h b/radio/src/gui/480x272/gui.h index 7eac8f04d..38e683b22 100644 --- a/radio/src/gui/480x272/gui.h +++ b/radio/src/gui/480x272/gui.h @@ -62,7 +62,6 @@ #define DATETIME_MIDDLE (LCD_W+DATETIME_SEPARATOR_X+4)/2 #define MENU_TITLE_NEXT_POS (lcdNextPos + 10) -#define MENU_INIT_VPOS -1 #if defined(HELI) && defined(GVARS) && defined(LUA_MODEL_SCRIPTS) #define MENU_ICONS_SPACING 31 diff --git a/radio/src/gui/480x272/menus.h b/radio/src/gui/480x272/menus.h index ade7ed28d..a3d3d66f4 100644 --- a/radio/src/gui/480x272/menus.h +++ b/radio/src/gui/480x272/menus.h @@ -265,7 +265,6 @@ typedef uint16_t FlightModesType; extern int8_t checkIncDec_Ret; // global helper vars -#define EDIT_SELECT_MENU -1 #define EDIT_SELECT_FIELD 0 #define EDIT_MODIFY_FIELD 1 #define EDIT_MODIFY_STRING 2 diff --git a/radio/src/gui/480x272/widgets.cpp b/radio/src/gui/480x272/widgets.cpp index 065017c6f..f726b193b 100644 --- a/radio/src/gui/480x272/widgets.cpp +++ b/radio/src/gui/480x272/widgets.cpp @@ -108,12 +108,12 @@ void drawHorizontalScrollbar(coord_t x, coord_t y, coord_t w, uint16_t offset, u } } -void drawProgressBar(const char * label, int num, int den) +void drawProgressScreen(const char * title, const char * message, int num, int den) { lcdClear(); lcdSetColor(WHITE); - if (label) { - lcdDrawText(MENUS_MARGIN_LEFT, LCD_H-42, label, CUSTOM_COLOR); + if (message) { + lcdDrawText(MENUS_MARGIN_LEFT, LCD_H-42, message, CUSTOM_COLOR); } lcdDrawRect(MENUS_MARGIN_LEFT, LCD_H-22, LCD_W-2*MENUS_MARGIN_LEFT, 15, 1, SOLID, CUSTOM_COLOR); lcdSetColor(RED); diff --git a/radio/src/gui/480x272/widgets.h b/radio/src/gui/480x272/widgets.h index 0e2784421..e8be64672 100644 --- a/radio/src/gui/480x272/widgets.h +++ b/radio/src/gui/480x272/widgets.h @@ -49,7 +49,7 @@ void drawButton(coord_t x, coord_t y, const char * label, LcdFlags attr); void drawCheckBox(coord_t x, coord_t y, uint8_t value, LcdFlags attr); void drawVerticalScrollbar(coord_t x, coord_t y, coord_t h, uint16_t offset, uint16_t count, uint8_t visible); void drawHorizontalScrollbar(coord_t x, coord_t y, coord_t w, uint16_t offset, uint16_t count, uint8_t visible); -void drawProgressBar(const char * label, int num, int den); +void drawProgressScreen(const char * title, const char * message, int num, int den); void drawShadow(coord_t x, coord_t y, coord_t w, coord_t h); void drawTrimSquare(coord_t x, coord_t y); void drawHorizontalTrimPosition(coord_t x, coord_t y, int16_t dir); diff --git a/radio/src/gui/common/stdlcd/popups.cpp b/radio/src/gui/common/stdlcd/popups.cpp index d382b2deb..f0e1881d8 100644 --- a/radio/src/gui/common/stdlcd/popups.cpp +++ b/radio/src/gui/common/stdlcd/popups.cpp @@ -20,16 +20,49 @@ #include "opentx.h" -uint8_t popupMenuOffsetType = MENU_OFFSET_INTERNAL; -void (*popupFunc)(event_t event) = NULL; +const char * warningText = NULL; +const char * warningInfoText; +uint8_t warningInfoLength; +uint8_t warningType; +uint8_t warningResult = 0; +uint8_t warningInfoFlags = ZCHAR; + +uint8_t popupMenuOffsetType = MENU_OFFSET_INTERNAL; +void (* popupFunc)(event_t event) = NULL; const char * popupMenuItems[POPUP_MENU_MAX_LINES]; -uint8_t s_menu_item = 0; -uint16_t popupMenuItemsCount = 0; -uint16_t popupMenuOffset = 0; -void (* popupMenuHandler)(const char * result); +uint8_t s_menu_item = 0; +uint16_t popupMenuItemsCount = 0; +uint16_t popupMenuOffset = 0; +void (* popupMenuHandler)(const char * result); const char * popupMenuTitle = nullptr; +void drawMessageBoxBackground(coord_t top, coord_t height) +{ + // white background + lcdDrawFilledRect(MESSAGEBOX_X - 1, top - 1, MESSAGEBOX_W + 2, height + 2, SOLID, ERASE); + + // border + lcdDrawRect(MESSAGEBOX_X, top, MESSAGEBOX_W, height, SOLID, FORCE); +} + +void drawMessageBox(const char * title) +{ + // background + border + drawMessageBoxBackground(MESSAGEBOX_Y, 40); + + // title + lcdDrawSizedText(WARNING_LINE_X, WARNING_LINE_Y, title, WARNING_LINE_LEN); + + // could be a place for a warningInfoText +} + +void showMessageBox(const char * title) +{ + drawMessageBox(title); + lcdRefresh(); +} + const char * runPopupMenu(event_t event) { const char * result = NULL; @@ -175,12 +208,6 @@ void runPopupWarning(event_t event) } } -void showMessageBox(const char * str) -{ - drawMessageBox(str); - lcdRefresh(); -} - void showAlertBox(const char * title, const char * text, const char * action , uint8_t sound) { drawAlertBox(title, text, action); @@ -191,3 +218,22 @@ void showAlertBox(const char * title, const char * text, const char * action , u backlightOn(); checkBacklight(); } + +void drawProgressScreen(const char * title, const char * message, int num, int den) +{ + lcdClear(); + if (title) { + lcdDrawText(LCD_W / 2 - getTextWidth(title) / 2, 2*FH, title); + } + if (message) { + lcdDrawText(4, 5*FH, message); + } + lcdDrawRect(4, 6*FH+4, LCD_W-8, 7); + if (num > 0 && den > 0) { + int width = ((LCD_W-12)*num)/den; + lcdDrawSolidHorizontalLine(6, 6*FH+6, width, FORCE); + lcdDrawSolidHorizontalLine(6, 6*FH+7, width, FORCE); + lcdDrawSolidHorizontalLine(6, 6*FH+8, width, FORCE); + } + lcdRefresh(); +} diff --git a/radio/src/gui/common/stdlcd/popups.h b/radio/src/gui/common/stdlcd/popups.h new file mode 100644 index 000000000..17806561c --- /dev/null +++ b/radio/src/gui/common/stdlcd/popups.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) OpenTX + * + * Based on code named + * 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. + */ + +#ifndef _STDLCD_POPUPS_H_ +#define _STDLCD_POPUPS_H_ + +extern const char * warningText; +extern const char * warningInfoText; +extern uint8_t warningInfoLength; +extern uint8_t warningResult; +extern uint8_t warningType; +extern uint8_t warningInfoFlags; + +extern void (* popupFunc)(event_t event); +extern uint8_t popupMenuOffsetType; + +extern uint16_t popupMenuOffset; +extern const char * popupMenuItems[POPUP_MENU_MAX_LINES]; +extern uint16_t popupMenuItemsCount; +extern void (* popupMenuHandler)(const char * result); +extern const char * popupMenuTitle; +extern uint8_t s_menu_item; + +// Message box +void drawMessageBoxBackground(coord_t top, coord_t height); +void drawMessageBox(const char * title); +void showMessageBox(const char * title); + +// Popup menu +const char * runPopupMenu(event_t event); +void runPopupWarning(event_t event); + +// Full screen with an alert +void showAlertBox(const char * title, const char * text, const char * action , uint8_t sound); + +// Full screen with 2 lines and a progress bar +void drawProgressScreen(const char * title, const char * message, int num, int den); + +#endif // _STDLCD_POPUPS_H_ diff --git a/radio/src/io/bootloader_flash.cpp b/radio/src/io/bootloader_flash.cpp index 612fe4e88..7259b2f6a 100644 --- a/radio/src/io/bootloader_flash.cpp +++ b/radio/src/io/bootloader_flash.cpp @@ -60,7 +60,7 @@ void bootloaderFlash(const char * filename) for (int j=0; j<1024; j+=FLASH_PAGESIZE) { flashWrite(CONVERT_UINT_PTR(FIRMWARE_ADDRESS+i+j), (uint32_t *)(buffer+j)); } - drawProgressBar(STR_WRITING, i, BOOTLOADER_SIZE); + drawProgressScreen("Bootloader", STR_WRITING, i, BOOTLOADER_SIZE); #if defined(SIMU) // add an artificial delay and check for simu quit if (SIMU_SLEEP_OR_EXIT_MS(30)) diff --git a/radio/src/io/frsky_device_firmware_update.cpp b/radio/src/io/frsky_device_firmware_update.cpp index 97cfadf5e..99ab6e30c 100644 --- a/radio/src/io/frsky_device_firmware_update.cpp +++ b/radio/src/io/frsky_device_firmware_update.cpp @@ -153,6 +153,11 @@ bool DeviceFirmwareUpdate::waitState(State newState, uint32_t timeout) #if defined(SIMU) UNUSED(state); UNUSED(timeout); + static uint8_t pass = 0; + if (++pass == 10) { + pass = 0; + RTOS_WAIT_MS(1); + } return true; #else watchdogSuspend(timeout / 10); @@ -226,10 +231,10 @@ const char * DeviceFirmwareUpdate::sendPowerOn() return TR("Bottom pin no resp", "Bottom pin not responding"); } else { - return TR("Module pin no resp", "Module pin not responding"); + return TR("Device pin no resp", "Device pin not responding"); } #else - return TR("Not responding", "Module not responding"); + return TR("Not responding", "Device not responding"); #endif } @@ -272,7 +277,7 @@ const char * DeviceFirmwareUpdate::uploadFile(const char *filename) for (uint32_t i=0; i> 2; // 32 bit word offset into buffer @@ -281,7 +286,7 @@ const char * DeviceFirmwareUpdate::uploadFile(const char *filename) state = SPORT_DATA_TRANSFER, sendFrame(); if (i == 0) { - drawProgressBar(STR_WRITING, file.fptr, file.obj.objsize); + drawProgressScreen(getBasename(filename), STR_WRITING, file.fptr, file.obj.objsize); } } @@ -295,11 +300,11 @@ const char * DeviceFirmwareUpdate::uploadFile(const char *filename) const char * DeviceFirmwareUpdate::endTransfer() { if (!waitState(SPORT_DATA_REQ, 2000)) - return "Module refused data"; + return "Device refused data"; startFrame(PRIM_DATA_EOF); sendFrame(); if (!waitState(SPORT_COMPLETE, 2000)) { - return "Module rejected firmware"; + return "Device rejected firmware"; } return nullptr; } @@ -311,6 +316,8 @@ void DeviceFirmwareUpdate::flashFile(const char * filename) uint8_t intPwr = IS_INTERNAL_MODULE_ON(); uint8_t extPwr = IS_EXTERNAL_MODULE_ON(); + drawProgressScreen(getBasename(filename), "Device reset...", 0, 0); + INTERNAL_MODULE_OFF(); EXTERNAL_MODULE_OFF(); SPORT_UPDATE_POWER_OFF(); diff --git a/radio/src/sdcard.cpp b/radio/src/sdcard.cpp index 669a40c58..52886b8e5 100644 --- a/radio/src/sdcard.cpp +++ b/radio/src/sdcard.cpp @@ -194,6 +194,16 @@ int findNextFileIndex(char * filename, uint8_t size, const char * directory) } } +const char * getBasename(const char * path) +{ + for (int8_t i = strlen(path) - 1; i >= 0; i--) { + if (path[i] == '/') { + return &path[i + 1]; + } + } + return path; +} + const char * getFileExtension(const char * filename, uint8_t size, uint8_t extMaxLen, uint8_t *fnlen, uint8_t *extlen) { int len = size; diff --git a/radio/src/sdcard.h b/radio/src/sdcard.h index e86063d8e..349b824d8 100644 --- a/radio/src/sdcard.h +++ b/radio/src/sdcard.h @@ -118,6 +118,7 @@ inline const char * SDCARD_ERROR(FRESULT result) // NOTE: 'size' must = 0 or be a valid character position within 'filename' array -- it is NOT validated const char * getFileExtension(const char * filename, uint8_t size=0, uint8_t extMaxLen=0, uint8_t *fnlen=NULL, uint8_t *extlen=NULL); +const char * getBasename(const char * path); // TODO REMOVE THE O9X FOURCC in 2.3 #if defined(PCBX12S) diff --git a/radio/src/storage/eeprom_rlc.cpp b/radio/src/storage/eeprom_rlc.cpp index 0ccb5518a..4eda3f925 100644 --- a/radio/src/storage/eeprom_rlc.cpp +++ b/radio/src/storage/eeprom_rlc.cpp @@ -867,7 +867,7 @@ void eeDeleteModel(uint8_t idx) #if defined(SDCARD) void eepromBackup() { - char filename[60]; + char path[60]; uint8_t buffer[1024]; FIL file; @@ -884,20 +884,20 @@ void eepromBackup() } // prepare the filename... - char * tmp = strAppend(filename, EEPROMS_PATH "/eeprom"); + char * tmp = strAppend(path, EEPROMS_PATH "/eeprom"); #if defined(RTCLOCK) tmp = strAppendDate(tmp, true); #endif strAppend(tmp, EEPROM_EXT); // open the file for writing... - f_open(&file, filename, FA_WRITE | FA_CREATE_ALWAYS); + f_open(&file, path, FA_WRITE | FA_CREATE_ALWAYS); for (int i=0; iSD"," [ENTER Long] Backup EEPROM->SD-Karte") -#define TR_FACTORYRESET TR("[MENU Long] Werksreset"," [MENU Long] Auf Werkseinstellungen") +#define STR_EEBACKUP TR("EEPROM->SD", "Backup EEPROM->SD-Karte") +#define STR_FACTORYRESET TR("Werksreset", "Auf Werkseinstellungen") #define TR_CONFIRMRESET TR("Alles löschen? ","ALLE Modelle+Einst. löschen?") #define TR_TO_MANY_LUA_SCRIPTS "Zu viele Lua-Skripte!" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 2987580a6..a5847f726 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -924,7 +924,7 @@ #define TR_FLASH_EXTERNAL_MODULE TR("Flash ext. module", "Flash external module") #define TR_FIRMWARE_UPDATE_ERROR TR("FW update error", "Firmware update error") #define TR_FIRMWARE_UPDATE_SUCCESS "Flash successful" -#define TR_WRITING TR3("\14Writing...", "\032Writing...", "Writing...") +#define STR_WRITING "Writing..." #define TR_CONFIRM_FORMAT "Confirm Format?" #define TR_INTERNALRF "Internal RF" #define TR_EXTERNALRF "External RF" @@ -1037,8 +1037,8 @@ #define TR_SCRIPT "Script" #define TR_INPUTS "Inputs" #define TR_OUTPUTS "Outputs" -#define TR_EEBACKUP "EEPROM backup" -#define TR_FACTORYRESET "Factory reset" +#define STR_EEBACKUP "EEPROM backup" +#define STR_FACTORYRESET "Factory reset" #define TR_CONFIRMRESET TR("Erase ALL", "Erase ALL models and settings?") #define TR_TO_MANY_LUA_SCRIPTS "Too many Lua scripts!" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index c02976c82..231d43006 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -930,7 +930,7 @@ #define TR_FLASH_EXTERNAL_MODULE "Flash external module" #define TR_FIRMWARE_UPDATE_ERROR TR("FW update Error","Firmware update error") #define TR_FIRMWARE_UPDATE_SUCCESS "Flash successful" -#define TR_WRITING "\032Writing..." +#define STR_WRITING "Writing..." #define TR_CONFIRM_FORMAT "Confirm Format?" #define TR_INTERNALRF "Interna RF" #define TR_EXTERNALRF "Externa RF" @@ -1039,8 +1039,8 @@ #define TR_SCRIPT "Script" #define TR_INPUTS "Inputs" #define TR_OUTPUTS "Outputs" -#define TR_EEBACKUP "\004[ENTER Long] to backup the EEPROM" -#define TR_FACTORYRESET "\012[MENU Long]: Factory reset" +#define STR_EEBACKUP "Backup the EEPROM" +#define STR_FACTORYRESET "Factory reset" #define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TO_MANY_LUA_SCRIPTS "Too many Lua scripts!" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index bd63d19ec..b3226e134 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -922,7 +922,7 @@ #define TR_FLASH_EXTERNAL_MODULE "Flash external module" #define TR_FIRMWARE_UPDATE_ERROR TR("FW update Error","Firmware update error") #define TR_FIRMWARE_UPDATE_SUCCESS "Flash successful" -#define TR_WRITING "\032Writing..." +#define TR_WRITING "Writing..." #define TR_CONFIRM_FORMAT "Confirm Format?" #define TR_INTERNALRF "Internal RF" #define TR_EXTERNALRF "External RF" @@ -1031,8 +1031,8 @@ #define TR_SCRIPT "Script" #define TR_INPUTS "Inputs" #define TR_OUTPUTS "Outputs" -#define TR_EEBACKUP "\004[ENTER Long] to backup the EEPROM" -#define TR_FACTORYRESET "\012[MENU Long]: Factory reset" +#define STR_EEBACKUP "Backup the EEPROM" +#define STR_FACTORYRESET "Factory reset" #define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TO_MANY_LUA_SCRIPTS "Too many Lua scripts!" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index ec1eba44e..9045b18fd 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -1044,19 +1044,18 @@ #define TR_INPUTS "Entrées" #define TR_OUTPUTS "Sorties" #if defined(COLORLCD) -#define TR_EEBACKUP "Sauvegarder l'EEPROM" -#define TR_FACTORYRESET "RAZ d'usine" +#define STR_EEBACKUP "Sauvegarder l'EEPROM" +#define STR_FACTORYRESET "RAZ d'usine" #elif defined(PCBXLITE) -#define TR_EEBACKUP "[ENTER Long]:Sauvegarde" -#define TR_FACTORYRESET "[\300ENTER Long]: RAZ usine" +#define STR_EEBACKUP "Sauvegarde" +#define STR_FACTORYRESET "RAZ usine" #else -#define TR_EEBACKUP TR("[ENTER Long]:Sauvegarde", "\004[ENTER Long]: Sauvegarder l'EEPROM") -#define TR_FACTORYRESET TR("\001[MENU Long]: RAZ d'usine", "\016[MENU Long]: RAZ d'usine") +#define STR_EEBACKUP TR("Sauvegarde", "Sauvegarder l'EEPROM") +#define STR_FACTORYRESET "RAZ d'usine" #endif #define TR_CONFIRMRESET TR("Effacer TOUT?","Effacer TOUS modèles/réglages?") #define TR_TO_MANY_LUA_SCRIPTS "Trop de scripts lua!" - // Horus and Taranis column headers #define TR_PHASES_HEADERS_NAME "Nom" #define TR_PHASES_HEADERS_SW "Inter" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 9958a3a34..5b2730408 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -1033,8 +1033,8 @@ #define TR_SCRIPT "Script" #define TR_INPUTS "Ingresso" #define TR_OUTPUTS "Uscita" -#define TR_EEBACKUP "\004[ENTER Lungo] per copiare la EEPROM" -#define TR_FACTORYRESET "\012[MENU Lungo]: Inizializza dati" +#define STR_EEBACKUP "Copiare la EEPROM" +#define STR_FACTORYRESET "Inizializza dati" #define TR_CONFIRMRESET "Resettare TUTTI i dati?" #define TR_TO_MANY_LUA_SCRIPTS "Troppi Scripts Lua!" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 3df6734d7..2671ca6fb 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -1035,11 +1035,11 @@ #define TR_INPUTS "Inputs" #define TR_OUTPUTS "Outputs" #if defined(COLORLCD) -#define TR_EEBACKUP "EEPROM backup" -#define TR_FACTORYRESET "Factory reset" +#define STR_EEBACKUP "EEPROM backup" +#define STR_FACTORYRESET "Factory reset" #else -#define TR_EEBACKUP TR("\001[ENTER Lang]: Backup", "\012[ENTER Lang]: EEPROM backup => SD") -#define TR_FACTORYRESET TR("\001[MENU Lang]: Fact. reset", "\012[MENU Lang]: Factory reset") +#define STR_EEBACKUP TR("Backup", "EEPROM backup => SD") +#define STR_FACTORYRESET TR("Fact. reset", "Factory reset") #endif #define TR_CONFIRMRESET TR("Wis Alles?", "Wis ALLE modellen en instellingen?") diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 5439f35d8..b31b60316 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -1034,8 +1034,8 @@ #define TR_SCRIPT "Skrypt" #define TR_INPUTS "Wejścia" #define TR_OUTPUTS "Wyjścia" -#define TR_EEBACKUP "\012[ENTER Długo] Backup EEPROMu" -#define TR_FACTORYRESET "\012[MENU Long]: Ustaw.Fabrycz" +#define STR_EEBACKUP "Backup EEPROMu" +#define STR_FACTORYRESET "Ustaw.Fabrycz" #define TR_CONFIRMRESET "WYkasować wszytkie modele? " #define TR_TO_MANY_LUA_SCRIPTS "Za dużo skryptów Lua!" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 2ed660a3e..6c5b90e30 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -929,7 +929,7 @@ #define TR_FLASH_EXTERNAL_MODULE "Flash external module" #define TR_FIRMWARE_UPDATE_ERROR TR("FW update Error","Firmware update error") #define TR_FIRMWARE_UPDATE_SUCCESS "Flash successful" -#define TR_WRITING "\032Writing..." +#define STR_WRITING "Writing..." #define TR_CONFIRM_FORMAT "Confirm Format?" #define TR_INTERNALRF "Internal RF" #define TR_EXTERNALRF "External RF" @@ -1038,8 +1038,8 @@ #define TR_SCRIPT "Script" #define TR_INPUTS "Inputs" #define TR_OUTPUTS "Outputs" -#define TR_EEBACKUP "\004[ENTER Long] to backup the EEPROM" -#define TR_FACTORYRESET "\012[MENU Long]: Factory reset" +#define STR_EEBACKUP "Backup the EEPROM" +#define STR_FACTORYRESET "Factory reset" #define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TO_MANY_LUA_SCRIPTS "Too many Lua scripts!" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index 7b6d2a81f..8eee8f3f6 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -1047,8 +1047,8 @@ #define TR_SCRIPT "Programkod" #define TR_INPUTS "Input" #define TR_OUTPUTS "Outputs" -#define TR_EEBACKUP "\004[ENTER Lång] säkerhetskopiera EEPROM" -#define TR_FACTORYRESET "\012[MENU Long]: Factory reset" +#define TR_EEBACKUP "Säkerhetskopiera EEPROM" +#define TR_FACTORYRESET "Factory reset" #define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TO_MANY_LUA_SCRIPTS "För många Lua-scripts!"