diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index 4bfc8a80c..69076f2b6 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -38,7 +38,9 @@ jobs: - X9DP - X9DP2019 - X9LITE + - X9LITES - XLITE + - XLITES container: image: ghcr.io/edgetx/edgetx-commit-tests volumes: diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index b4a213c74..700fc579a 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -32,7 +32,9 @@ jobs: - X9DP - X9DP2019 - X9LITE + - X9LITES - XLITE + - XLITES container: image: ghcr.io/edgetx/edgetx-commit-tests volumes: diff --git a/README.md b/README.md index 5d3851e01..17e6abbab 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,53 @@ -# EdgeTX +

+ + +# Welcome to EdgeTX! +**The cutting edge open-source firmware for your R/C radio!** + + +### About EdgeTX +EdgeTX is the cutting edge of OpenTX. It is the place where innovative ideas and cutting-edge features are developed and field-tested by the enthusiasts of our hobby. EdgeTX is a community project – ideas from the community, developed by the community, and enjoyed by the community! The community will always have a say in what EdgeTX is and what EdgeTX will be in the future. Without community feedback and involvement EdgeTX cannot exist. + +### Navigation Links + +> [Community Guidelines](https://github.com/EdgeTX/edgetx.github.io/wiki/Community-Guidlines) + +> [Installation Guide](https://github.com/EdgeTX/edgetx.github.io/wiki/EdgeTX-Installation-Guide) + +> [Installation Video](https://www.youtube.com/watch?v=Y9OvW9XCjOs) + +> [FAQ](https://github.com/EdgeTX/edgetx.github.io/wiki/Frequently-Asked-Questions) + +> [Reporting Issues / Requesting features](https://github.com/EdgeTX/edgetx/issues/new/choose) + +> [Development WIKI](https://github.com/EdgeTX/edgetx/wiki) + +> [Flasher Info Page](https://github.com/EdgeTX/flasher) + +> [Flasher Downloads](https://github.com/EdgeTX/flasher/releases) + +> [SD Card Info Page](https://github.com/EdgeTX/edgetx-sdcard) + +> [SD Card Downloads](https://github.com/EdgeTX/edgetx-sdcard/releases) + +> [Sound Packs Info Page](https://github.com/EdgeTX/edgetx-sdcard-sounds) + +> [Sound Packs Downloads](https://github.com/EdgeTX/edgetx-sdcard-sounds/releases) + +> [EdgeTX Build Environment Docker Images](https://github.com/EdgeTX/build-edgetx) + +### Community +[Discord](https://discord.gg/wF9wUKnZ6H) + +[![Discord](https://img.shields.io/discord/839849772864503828.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/wF9wUKnZ6H) + +[Facebook](https://www.facebook.com/groups/edgetx) + +[Github Discussions](https://github.com/EdgeTX/edgetx/discussions) + + +## Acknowledgements +Some icon assets provided by [ICONS8](https://icons8.com). + [![Commit Tests](https://github.com/EdgeTX/edgetx/actions/workflows/actions.yml/badge.svg)](https://github.com/EdgeTX/edgetx/actions/workflows/actions.yml) - -EdgeTX is the cutting edge version of OpenTX. Innovative ideas and cutting-edge features are developed and field-tested here, with an emphasis on new developments rather than maintenance and legacy. - -Stay tuned for more! - -## Acknowedgements -Some icon assets provided by [ICONS8](https://icons8.com). diff --git a/fw.json b/fw.json index 22102d1f2..93509d005 100644 --- a/fw.json +++ b/fw.json @@ -7,7 +7,9 @@ ["X9D Plus 2019", "x9dp2019-"], ["T-Lite", "tlite-"], ["X-Lite", "xlite-"], + ["X-Lite S", "xlites-"], ["X9 Lite", "x9lite-"], + ["X9 Lite S", "x9lites-"], ["T16", "t16-"], ["T18", "t18-"], ["TX12", "tx12-"], diff --git a/radio/src/bitmaps/480x272/CMakeLists.txt b/radio/src/bitmaps/480x272/CMakeLists.txt index 32e10bb5f..0563ea339 100644 --- a/radio/src/bitmaps/480x272/CMakeLists.txt +++ b/radio/src/bitmaps/480x272/CMakeLists.txt @@ -26,7 +26,7 @@ add_bitmaps_target(${BITMAP_TARGET_PREFIX}_calibration_bitmaps "${RADIO_SRC_DIR} add_bitmaps_target(${BITMAP_TARGET_PREFIX}_button_bitmaps "${RADIO_SRC_DIR}/bitmaps/480x272/button/alpha_*.png" "4/4/4/4" "${BITMAP_ARGS}") add_bitmaps_target(${BITMAP_TARGET_PREFIX}_alpha_bitmaps "${RADIO_SRC_DIR}/bitmaps/480x272/alpha_*.png" "4/4/4/4" "${BITMAP_ARGS}") add_bitmaps_target(${BITMAP_TARGET_PREFIX}_alpha_calibration_bitmaps "${RADIO_SRC_DIR}/bitmaps/480x272/calibration/alpha_*.png" "4/4/4/4" "${BITMAP_ARGS}") -add_bitmaps_target(${BITMAP_TARGET_PREFIX}_masks ${RADIO_SRC_DIR}/bitmaps/480x272/mask_*.png 8bits "${MASK_ARGS}") +add_bitmaps_target(${BITMAP_TARGET_PREFIX}_masks "${RADIO_SRC_DIR}/bitmaps/480x272/mask_*.png" 8bits "${MASK_ARGS}") add_bitmaps_target(${BITMAP_TARGET_PREFIX}_slider_masks "${RADIO_SRC_DIR}/bitmaps/480x272/slider/*.png" 8bits "${MASK_ARGS}") add_bitmaps_target(${BITMAP_TARGET_PREFIX}_layouts_masks "${RADIO_SRC_DIR}/gui/colorlcd/layouts/*.png" 8bits "${MASK_ARGS}") add_bitmaps_target(${BITMAP_TARGET_PREFIX}_fonts ${RADIO_SRC_DIR}/fonts/truetype/*.png 8bits "${MASK_RLE_ARGS}") @@ -35,8 +35,8 @@ add_bitmaps_target(${BITMAP_TARGET_PREFIX}_volume_masks ${RADIO_SRC_DIR}/bitmaps add_bitmaps_target(${BITMAP_TARGET_PREFIX}_themes_masks "${RADIO_SRC_DIR}/bitmaps/480x272/default_theme/mask_*.png" 8bits "${BITMAPS_ARGS}") add_png_target(${BITMAP_TARGET_PREFIX}_themes_alpha "${RADIO_SRC_DIR}/bitmaps/480x272/default_theme/alpha_*.png") -add_bitmaps_target(${BITMAP_TARGET_PREFIX}_bootloader_bitmaps ${RADIO_SRC_DIR}/bitmaps/480x272/bootloader/bmp_*.png "4/4/4/4" "${BITMAP_RLE_ARGS}") -add_bitmaps_target(${BITMAP_TARGET_PREFIX}_bootloader_icons ${RADIO_SRC_DIR}/bitmaps/480x272/bootloader/icon_*.png 8bits "${MASK_ARGS}") +add_bitmaps_target(${BITMAP_TARGET_PREFIX}_bootloader_bitmaps "${RADIO_SRC_DIR}/bitmaps/480x272/bootloader/bmp_*.png" "4/4/4/4" "${BITMAP_RLE_ARGS}") +add_bitmaps_target(${BITMAP_TARGET_PREFIX}_bootloader_icons "${RADIO_SRC_DIR}/bitmaps/480x272/bootloader/icon_*.png" 8bits "${MASK_ARGS}") add_dependencies(${BITMAP_TARGET_PREFIX}_bitmaps ${BITMAP_TARGET_PREFIX}_calibration_bitmaps ${BITMAP_TARGET_PREFIX}_button_bitmaps ${BITMAP_TARGET_PREFIX}_alpha_bitmaps ${BITMAP_TARGET_PREFIX}_alpha_calibration_bitmaps ${BITMAP_TARGET_PREFIX}_masks ${BITMAP_TARGET_PREFIX}_slider_masks ${BITMAP_TARGET_PREFIX}_layouts_masks diff --git a/radio/src/bitmaps/480x272/default_theme/mask_qrcode.png b/radio/src/bitmaps/480x272/default_theme/mask_qrcode.png new file mode 100644 index 000000000..515f1b395 Binary files /dev/null and b/radio/src/bitmaps/480x272/default_theme/mask_qrcode.png differ diff --git a/radio/src/functions.cpp b/radio/src/functions.cpp index a3dc0882c..981b7a8b0 100644 --- a/radio/src/functions.cpp +++ b/radio/src/functions.cpp @@ -178,9 +178,6 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext case FUNC_INSTANT_TRIM: newActiveFunctions |= (1u << FUNCTION_INSTANT_TRIM); if (!isFunctionActive(FUNCTION_INSTANT_TRIM)) { -#if defined(COLORLCD) - #warning IS_INSTANT_TRIM_ALLOWED() is always false -#endif if (IS_INSTANT_TRIM_ALLOWED()) { instantTrim(); } diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index 08f1072c1..9a5f4bd69 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -240,7 +240,10 @@ inline uint8_t MODULE_SUBTYPE_ROWS(int moduleIdx) } #define POT_WARN_ROWS ((g_model.potsWarnMode) ? (uint8_t)(NUM_POTS+NUM_SLIDERS) : (uint8_t)0) -#define TIMER_ROWS 1, 0, 1, 0, 0, 0 +#define TIMER_ROWS(x) \ + 1, 0, 1, 0, 0, \ + g_model.timers[x].countdownBeep != COUNTDOWN_SILENT ? (uint8_t)1 \ + : (uint8_t)0 #if defined(PCBSKY9X) #define EXTRA_MODULE_ROWS LABEL(ExtraModule), 1, 2, @@ -411,9 +414,9 @@ void menuModelSetup(event_t event) MENU_TAB({ HEADER_LINE_COLUMNS 0, - TIMER_ROWS, - TIMER_ROWS, - TIMER_ROWS, + TIMER_ROWS(0), + TIMER_ROWS(1), + TIMER_ROWS(2), 0, // Extended limits 1, // Extended trims 0, // Show trims diff --git a/radio/src/gui/128x64/view_about.cpp b/radio/src/gui/128x64/view_about.cpp index b168f91fb..5913945c6 100644 --- a/radio/src/gui/128x64/view_about.cpp +++ b/radio/src/gui/128x64/view_about.cpp @@ -20,145 +20,26 @@ #include "opentx.h" -const unsigned char about_bmp[] = { -#include "about.lbm" -}; - -enum AboutScreens { - ABOUT_OPENTX, - ABOUT_HARDWARE, - ABOUT_BERTRAND, - ABOUT_ANDRE, - ABOUT_MIKE, - ABOUT_KJELL, - ABOUT_MARTIN, - ABOUT_ROMOLO, - ABOUT_ROB, - ABOUT_PARENTS, - ABOUT_END, - ABOUT_COUNT, -}; - -#define ABOUT_X 2 #define ABOUT_INDENT 4 -#if defined(KEYS_GPIO_REG_PAGEDN) -#define EVT_KEY_PREVIOUS_VIEW EVT_KEY_BREAK(KEY_PAGEUP) -#define EVT_KEY_NEXT_VIEW EVT_KEY_BREAK(KEY_PAGEDN) -#elif defined(NAVIGATION_X7) -#define EVT_KEY_PREVIOUS_VIEW EVT_KEY_LONG(KEY_PAGE) -#define EVT_KEY_NEXT_VIEW EVT_KEY_BREAK(KEY_PAGE) -#else -#define EVT_KEY_PREVIOUS_VIEW EVT_KEY_FIRST(KEY_UP) -#define EVT_KEY_NEXT_VIEW EVT_KEY_FIRST(KEY_DOWN) -#endif +const char ABOUT_VERSION_1[] = "EdgeTX Endeavour (2.4.0)"; +const char ABOUT_VERSION_2[] = "Copyright (C) 2021 EdgeTX"; +const char ABOUT_VERSION_3[] = "https://edge-tx.org"; void menuAboutView(event_t event) { - static uint8_t screenIndex; - static uint8_t greyIndex; - switch(event) { - case EVT_ENTRY: - screenIndex = 0; - greyIndex = 0; - break; - case EVT_KEY_NEXT_VIEW: - screenIndex < ABOUT_PARENTS ? screenIndex++ : screenIndex = ABOUT_OPENTX; - greyIndex = 0; - break; - case EVT_KEY_PREVIOUS_VIEW: - if (IS_KEY_LONG(EVT_KEY_PREVIOUS_VIEW)) { - killEvents(event); - } - screenIndex > ABOUT_OPENTX ? screenIndex-- : screenIndex = ABOUT_PARENTS; - greyIndex = 0; - break; case EVT_KEY_FIRST(KEY_EXIT): + case EVT_KEY_FIRST(KEY_ENTER): chainMenu(menuMainView); break; } - lcdDrawText(17, 0, STR_ABOUTUS, DBLSIZE|INVERS); - lcdDrawSolidHorizontalLine(17, 16, LCD_W-17); - lcdDraw1bitBitmap(8, 0, about_bmp, 0); - LcdFlags att = 0; + lcdDrawText(2, 0, STR_ABOUTUS, DBLSIZE|INVERS); + lcdDrawSolidHorizontalLine(0, 16, LCD_W-17); - uint8_t screenDuration = 150; - - switch (screenIndex) { - case ABOUT_OPENTX: - case ABOUT_END: - lcdDrawText(ABOUT_X, 22, STR_ABOUT_OPENTX_1, SMLSIZE); - lcdDrawText(ABOUT_X, 30, STR_ABOUT_OPENTX_2, SMLSIZE); - lcdDrawText(ABOUT_X, 38, STR_ABOUT_OPENTX_3, SMLSIZE); - lcdDrawText(ABOUT_X, 46, STR_ABOUT_OPENTX_4, SMLSIZE); - lcdDrawText(ABOUT_X, 54, STR_ABOUT_OPENTX_5, SMLSIZE); - screenDuration = 255; - break; - - case ABOUT_BERTRAND: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_BERTRAND_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_BERTRAND_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_BERTRAND_3, att|SMLSIZE); - break; - - case ABOUT_ANDRE: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_ANDRE_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_ANDRE_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_ANDRE_3, att|SMLSIZE); - break; - - case ABOUT_MIKE: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_MIKE_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_MIKE_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_MIKE_3, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 52, STR_ABOUT_MIKE_4, att|SMLSIZE); - break; - - case ABOUT_KJELL: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_KJELL_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_KJELL_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_KJELL_3, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 52, STR_ABOUT_KJELL_4, att|SMLSIZE); - break; - - case ABOUT_MARTIN: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_MARTIN_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_MARTIN_2, att|SMLSIZE); - break; - - case ABOUT_ROMOLO: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_ROMOLO_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_ROMOLO_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_ROMOLO_3, att|SMLSIZE); - break; - - case ABOUT_ROB: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_ROB_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_ROB_2, att|SMLSIZE); - break; - - case ABOUT_HARDWARE: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_HARDWARE_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_HARDWARE_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_HARDWARE_3, att|SMLSIZE); - break; - - case ABOUT_PARENTS: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_PARENTS_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_PARENTS_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_PARENTS_3, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 52, STR_ABOUT_PARENTS_4, att|SMLSIZE); - screenDuration = 255; - break; - } - - if (++greyIndex == screenDuration) { - greyIndex = 0; - if (++screenIndex == ABOUT_COUNT) { - chainMenu(menuMainView); - } - } + lcdDrawText(ABOUT_INDENT, 22, ABOUT_VERSION_1, SMLSIZE); + lcdDrawText(ABOUT_INDENT, 30, ABOUT_VERSION_2, SMLSIZE); + lcdDrawText(ABOUT_INDENT, 38, ABOUT_VERSION_3, SMLSIZE); } diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index 86878a30b..5b187a545 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -275,8 +275,10 @@ void editTimerCountdown(int timerIdx, coord_t y, LcdFlags attr, event_t event) #define TRAINER_ROWS LABEL(Trainer), 0, TRAINER_CHANNELS_ROW, TRAINER_PPM_PARAMS_ROW #endif -#define TIMER_ROWS \ - 1 | NAVIGATION_LINE_BY_LINE, 0, 1 | NAVIGATION_LINE_BY_LINE, 0, 0, 0 +#define TIMER_ROWS(x) \ + 1 | NAVIGATION_LINE_BY_LINE, 0, 1 | NAVIGATION_LINE_BY_LINE, 0, 0, \ + g_model.timers[x].countdownBeep != COUNTDOWN_SILENT ? (uint8_t)1 \ + : (uint8_t)0 inline uint8_t EXTERNAL_MODULE_TYPE_ROW() { @@ -287,11 +289,11 @@ inline uint8_t EXTERNAL_MODULE_TYPE_ROW() } #if TIMERS == 1 - #define TIMERS_ROWS TIMER_ROWS +#define TIMERS_ROWS TIMER_ROWS(0) #elif TIMERS == 2 - #define TIMERS_ROWS TIMER_ROWS, TIMER_ROWS +#define TIMERS_ROWS TIMER_ROWS(0), TIMER_ROWS(1) #elif TIMERS == 3 - #define TIMERS_ROWS TIMER_ROWS, TIMER_ROWS, TIMER_ROWS +#define TIMERS_ROWS TIMER_ROWS(0), TIMER_ROWS(1), TIMER_ROWS(2) #endif #if defined(PCBX9E) #define SW_WARN_ROWS uint8_t(NAVIGATION_LINE_BY_LINE|(getSwitchWarningsCount()-1)), uint8_t(getSwitchWarningsCount() > 8 ? TITLE_ROW : HIDDEN_ROW), uint8_t(getSwitchWarningsCount() > 16 ? TITLE_ROW : HIDDEN_ROW) diff --git a/radio/src/gui/212x64/view_about.cpp b/radio/src/gui/212x64/view_about.cpp index b75ff1095..078c26ab1 100644 --- a/radio/src/gui/212x64/view_about.cpp +++ b/radio/src/gui/212x64/view_about.cpp @@ -20,132 +20,26 @@ #include "opentx.h" -const unsigned char about_bmp[] = { -#include "about.lbm" -}; - -enum AboutScreens { - ABOUT_OPENTX, - ABOUT_HARDWARE, - ABOUT_BERTRAND, - ABOUT_ANDRE, - ABOUT_MIKE, - ABOUT_KJELL, - ABOUT_MARTIN, - ABOUT_ROMOLO, - ABOUT_ROB, - ABOUT_PARENTS, - ABOUT_END, - ABOUT_COUNT, -}; - -#define ABOUT_X 62 #define ABOUT_INDENT 6 +const char ABOUT_VERSION_1[] = "EdgeTX Endeavour (2.4.0)"; +const char ABOUT_VERSION_2[] = "Copyright (C) 2021 EdgeTX"; +const char ABOUT_VERSION_3[] = "https://edge-tx.org"; + void menuAboutView(event_t event) { - static uint8_t screenIndex; - static uint8_t greyIndex; - switch(event) { - case EVT_ENTRY: - screenIndex = 0; - greyIndex = 0; - break; - case EVT_KEY_FIRST(KEY_DOWN): - screenIndex < ABOUT_PARENTS ? screenIndex++ : screenIndex = ABOUT_OPENTX; - greyIndex = 0; - break; - case EVT_KEY_FIRST(KEY_UP): - screenIndex > ABOUT_OPENTX ? screenIndex-- : screenIndex = ABOUT_PARENTS; - greyIndex = 0; - break; + case EVT_KEY_FIRST(KEY_ENTER): case EVT_KEY_FIRST(KEY_EXIT): chainMenu(menuMainView); break; } - lcdDrawBitmap(0, 0, about_bmp); - lcdDrawText(64, 0, STR_ABOUTUS, DBLSIZE); - lcdDrawSolidHorizontalLine(ABOUT_X, 18, 120); - lcdDrawSolidHorizontalLine(ABOUT_X, 19, 130, GREY_DEFAULT); - LcdFlags att = GREY(max(0, 15-greyIndex/2)); + lcdDrawText(2, 2, STR_ABOUTUS, BOLD); + lcdDrawSolidHorizontalLine(0, 11, 130, GREY_DEFAULT); - uint8_t screenDuration = 150; - - switch (screenIndex) { - case ABOUT_OPENTX: - case ABOUT_END: - lcdDrawText(ABOUT_X, 22, STR_ABOUT_OPENTX_1, SMLSIZE); - lcdDrawText(ABOUT_X, 30, STR_ABOUT_OPENTX_2, SMLSIZE); - lcdDrawText(ABOUT_X, 38, STR_ABOUT_OPENTX_3, SMLSIZE); - lcdDrawText(ABOUT_X, 46, STR_ABOUT_OPENTX_4, SMLSIZE); - lcdDrawText(ABOUT_X, 54, STR_ABOUT_OPENTX_5, SMLSIZE); - screenDuration = 255; - break; - - case ABOUT_BERTRAND: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_BERTRAND_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_BERTRAND_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_BERTRAND_3, att|SMLSIZE); - break; - - case ABOUT_ANDRE: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_ANDRE_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_ANDRE_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_ANDRE_3, att|SMLSIZE); - break; - - case ABOUT_MIKE: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_MIKE_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_MIKE_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_MIKE_3, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 52, STR_ABOUT_MIKE_4, att|SMLSIZE); - break; - - case ABOUT_KJELL: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_KJELL_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_KJELL_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_KJELL_3, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 52, STR_ABOUT_KJELL_4, att|SMLSIZE); - break; - - case ABOUT_MARTIN: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_MARTIN_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_MARTIN_2, att|SMLSIZE); - break; - - case ABOUT_ROMOLO: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_ROMOLO_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_ROMOLO_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_ROMOLO_3, att|SMLSIZE); - break; - - case ABOUT_ROB: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_ROB_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_ROB_2, att|SMLSIZE); - break; - - case ABOUT_HARDWARE: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_HARDWARE_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_HARDWARE_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_HARDWARE_3, att|SMLSIZE); - break; - - case ABOUT_PARENTS: - lcdDrawText(ABOUT_X, 24, STR_ABOUT_PARENTS_1, att); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 36, STR_ABOUT_PARENTS_2, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 44, STR_ABOUT_PARENTS_3, att|SMLSIZE); - lcdDrawText(ABOUT_X+ABOUT_INDENT, 52, STR_ABOUT_PARENTS_4, att|SMLSIZE); - screenDuration = 255; - break; - } - - if (++greyIndex == screenDuration) { - greyIndex = 0; - if (++screenIndex == ABOUT_COUNT) { - chainMenu(menuMainView); - } - } + lcdDrawText(ABOUT_INDENT, 22, ABOUT_VERSION_1); + lcdDrawText(ABOUT_INDENT, 32, ABOUT_VERSION_2, SMLSIZE); + lcdDrawText(ABOUT_INDENT, 42, ABOUT_VERSION_3); } diff --git a/radio/src/gui/colorlcd/CMakeLists.txt b/radio/src/gui/colorlcd/CMakeLists.txt index 79af1169c..de3a1d804 100644 --- a/radio/src/gui/colorlcd/CMakeLists.txt +++ b/radio/src/gui/colorlcd/CMakeLists.txt @@ -55,6 +55,7 @@ set(GUI_SRC radio_diagkeys.cpp radio_diaganas.cpp radio_calibration.cpp + view_about.cpp view_main.cpp view_main_menu.cpp view_main_decoration.cpp diff --git a/radio/src/gui/colorlcd/draw_functions.cpp b/radio/src/gui/colorlcd/draw_functions.cpp index 0b2ca84f3..a0530c2b0 100644 --- a/radio/src/gui/colorlcd/draw_functions.cpp +++ b/radio/src/gui/colorlcd/draw_functions.cpp @@ -324,15 +324,15 @@ coord_t drawGPSCoord(BitmapBuffer * dc, coord_t x, coord_t y, int32_t value, con void drawGPSPosition(BitmapBuffer * dc, coord_t x, coord_t y, int32_t longitude, int32_t latitude, LcdFlags flags) { if (flags & PREC1) { - drawGPSCoord(dc, x, y, latitude, "NS", flags, false); - drawGPSCoord(dc, x, y + FH, longitude, "EW", flags, false); + drawGPSCoord(dc, x, y, latitude, "NS", flags, true); + drawGPSCoord(dc, x, y + FH, longitude, "EW", flags, true); } else { if (flags & RIGHT) { - x = drawGPSCoord(dc, x, y, longitude, "EW", flags, false); - drawGPSCoord(dc, x - 5, y, latitude, "NS", flags, false); + x = drawGPSCoord(dc, x, y, longitude, "EW", flags, true); + drawGPSCoord(dc, x - 5, y, latitude, "NS", flags, true); } else { - x = drawGPSCoord(dc, x, y, latitude, "NS", flags, false); - drawGPSCoord(dc, x + 5, y, longitude, "EW", flags, false); + x = drawGPSCoord(dc, x, y, latitude, "NS", flags, true); + drawGPSCoord(dc, x + 5, y, longitude, "EW", flags, true); } } } diff --git a/radio/src/gui/colorlcd/layouts/trims.cpp b/radio/src/gui/colorlcd/layouts/trims.cpp index 82dc4f9e3..312d7adbf 100644 --- a/radio/src/gui/colorlcd/layouts/trims.cpp +++ b/radio/src/gui/colorlcd/layouts/trims.cpp @@ -24,7 +24,8 @@ void MainViewTrim::checkEvents() { Window::checkEvents(); - int8_t newValue = getTrimValue(mixerCurrentFlightMode, idx); + int8_t stickIndex = CONVERT_MODE(idx); + int8_t newValue = getTrimValue(mixerCurrentFlightMode, stickIndex); if (value != newValue) { value = newValue; invalidate(); diff --git a/radio/src/gui/colorlcd/model_heli.cpp b/radio/src/gui/colorlcd/model_heli.cpp index 27cdf9bf2..d01d42cf1 100644 --- a/radio/src/gui/colorlcd/model_heli.cpp +++ b/radio/src/gui/colorlcd/model_heli.cpp @@ -56,7 +56,7 @@ void ModelHeliPage::build(FormWindow * window) // Aileron source new StaticText(window, grid.getLabelSlot(), STR_AILERON); - new SourceChoice(window, grid.getFieldSlot(), 0, MIXSRC_LAST_CH, GET_SET_DEFAULT(g_model.swashR.aileronWeight)); + new SourceChoice(window, grid.getFieldSlot(), 0, MIXSRC_LAST_CH, GET_SET_DEFAULT(g_model.swashR.aileronSource)); grid.nextLine(); // Aileron weight diff --git a/radio/src/gui/colorlcd/model_inputs.cpp b/radio/src/gui/colorlcd/model_inputs.cpp index 815d709e6..62a24d2a8 100644 --- a/radio/src/gui/colorlcd/model_inputs.cpp +++ b/radio/src/gui/colorlcd/model_inputs.cpp @@ -337,7 +337,7 @@ void CommonInputOrMixButton::drawFlightModes(BitmapBuffer *dc, void CommonInputOrMixButton::paint(BitmapBuffer * dc) { dc->drawSolidFilledRect(0, 0, width(), height(), - /*hasFocus() ? FOCUS_BGCOLOR :*/ FIELD_BGCOLOR); + isActive() ? HIGHLIGHT_COLOR : FIELD_BGCOLOR); paintBody(dc); if (!hasFocus()) @@ -397,12 +397,17 @@ class InputLineButton : public CommonInputOrMixButton if (line.flightModes) { drawFlightModes(dc, line.flightModes, textColor); } + } }; ModelInputsPage::ModelInputsPage(): PageTab(STR_MENUINPUTS, ICON_MODEL_INPUTS) { + setOnSetVisibleHandler([]() { + // reset clipboard + s_copyMode = 0; + }); } void ModelInputsPage::rebuild(FormWindow * window, int8_t focusIndex) diff --git a/radio/src/gui/colorlcd/model_mixes.cpp b/radio/src/gui/colorlcd/model_mixes.cpp index 09804edf1..3d534b32a 100644 --- a/radio/src/gui/colorlcd/model_mixes.cpp +++ b/radio/src/gui/colorlcd/model_mixes.cpp @@ -312,6 +312,10 @@ void insertMix(uint8_t idx, uint8_t channel) ModelMixesPage::ModelMixesPage() : PageTab(STR_MIXES, ICON_MODEL_MIXER) { + setOnSetVisibleHandler([]() { + // reset clipboard + s_copyMode = 0; + }); } void ModelMixesPage::rebuild(FormWindow * window, int8_t focusMixIndex) diff --git a/radio/src/gui/colorlcd/model_select.cpp b/radio/src/gui/colorlcd/model_select.cpp index 04e08f621..909b2cc5c 100644 --- a/radio/src/gui/colorlcd/model_select.cpp +++ b/radio/src/gui/colorlcd/model_select.cpp @@ -120,7 +120,7 @@ class ModelButton : public Button partialModel.header.name[0] != '\0') { if (version == 219) { - size_t len = sizeof(partialModel.header.name); + int len = (int)sizeof(partialModel.header.name); char* str = partialModel.header.name; for (int i=0; i < len; i++) { str[i] = zchar2char(str[i]); @@ -210,14 +210,21 @@ class ModelCategoryPageBody : public FormWindow update(); } - void update(int selected = 0) + void update(int selected = -1) { clear(); + if (selected < 0) { + auto model = modelslist.getCurrentModel(); + selected = category->getModelIndex(model); + if (selected < 0) selected = 0; + } + int index = 0; coord_t y = MODEL_CELL_PADDING; coord_t x = MODEL_CELL_PADDING; + ModelButton* selectButton = nullptr; for (auto &model : *category) { auto button = new ModelButton( this, {x, y, MODEL_SELECT_CELL_WIDTH, MODEL_SELECT_CELL_HEIGHT}, @@ -237,7 +244,7 @@ class ModelCategoryPageBody : public FormWindow storageCheck(true); modelslist.setCurrentModel(model); - update(); // modelslist.getModelIndex(modelCell)); + update(); }); } menu->addLine(STR_CREATE_MODEL, getCreateModelAction()); @@ -264,7 +271,7 @@ class ModelCategoryPageBody : public FormWindow .c_str(), [=] { modelslist.removeModel(category, model); - update(index > 0 ? index - 1 : 0); + update(index < category->size() - 1 ? index : index - 1); }); }); } @@ -275,7 +282,7 @@ class ModelCategoryPageBody : public FormWindow }); if (selected == index) { - button->setFocus(SET_FOCUS_DEFAULT); + selectButton = button; } index++; @@ -299,6 +306,8 @@ class ModelCategoryPageBody : public FormWindow if (category->empty()) { setFocus(); + } else if (selectButton) { + selectButton->setFocus(); } } @@ -368,4 +377,9 @@ ModelSelectMenu::ModelSelectMenu(): for (auto category: modelslist.getCategories()) { addTab(new ModelCategoryPage(category)); } + + int idx = modelslist.getCurrentCategoryIdx(); + if (idx >= 0) { + setCurrentTab(idx); + } } diff --git a/radio/src/gui/colorlcd/model_telemetry.cpp b/radio/src/gui/colorlcd/model_telemetry.cpp index e7c02f977..d945293bc 100644 --- a/radio/src/gui/colorlcd/model_telemetry.cpp +++ b/radio/src/gui/colorlcd/model_telemetry.cpp @@ -84,6 +84,9 @@ class SensorButton : public Button { else dc->drawSolidFilledRect(2, 2, rect.w - 4, rect.h - 4, FIELD_BGCOLOR); + if (telemetryItem.isFresh()) + dc->drawFilledCircle(24, (2 + rect.h - 4)/2, 4, DEFAULT_COLOR); + dc->drawNumber(2, 1, number, LEFT, 0, nullptr, ":"); dc->drawSizedText(SENSOR_COL1, line1, g_model.telemetrySensors[index].label, TELEM_LABEL_LEN); @@ -122,17 +125,21 @@ class SensorEditWindow : public Page { Page(ICON_MODEL_TELEMETRY), index(index) { - buildBody(&body); buildHeader(&header); + buildBody(&body); } protected: uint8_t index; - FormWindow * sensorParametersWindow = nullptr; + FormGroup * sensorParametersWindow = nullptr; void buildHeader(Window * window) { - new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_SENSOR + std::to_string(index + 1), 0, MENU_COLOR); + new StaticText(window, + {PAGE_TITLE_LEFT, PAGE_TITLE_TOP, LCD_W - PAGE_TITLE_LEFT, + PAGE_LINE_HEIGHT}, + STR_SENSOR + std::to_string(index + 1), 0, + MENU_HIGHLIGHT_COLOR); // dynamic display of sensor value ? //new StaticText(window, {70, 28, 100, 20}, "SF" + std::to_string(index), 0, MENU_COLOR); } @@ -321,9 +328,7 @@ class SensorEditWindow : public Page { SET_DIRTY(); }); - coord_t delta = sensorParametersWindow->adjustHeight(); - Window * parent = sensorParametersWindow->getParent(); - parent->moveWindowsTop(sensorParametersWindow->top(), delta); + sensorParametersWindow->adjustHeight(); } void buildBody(FormWindow * window) @@ -355,7 +360,9 @@ class SensorEditWindow : public Page { }); grid.nextLine(); - sensorParametersWindow = new FormWindow(window, {0, grid.getWindowHeight(), LCD_W, 0}); + sensorParametersWindow = new FormGroup(window, {0, grid.getWindowHeight(), LCD_W, 0}, + FORM_FORWARD_FOCUS | FORM_NO_BORDER + | FORWARD_SCROLL); updateSensorParametersWindow(); grid.addWindow(sensorParametersWindow); diff --git a/radio/src/gui/colorlcd/radio_diaganas.cpp b/radio/src/gui/colorlcd/radio_diaganas.cpp index f08d848c6..3b24c3cd6 100644 --- a/radio/src/gui/colorlcd/radio_diaganas.cpp +++ b/radio/src/gui/colorlcd/radio_diaganas.cpp @@ -67,7 +67,7 @@ class RadioAnalogsDiagsWindow: public Window { void RadioAnalogsDiagsPage::buildHeader(Window * window) { - new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + 10, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_MENU_RADIO_ANALOGS, 0, MENU_COLOR); + new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + 10, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_MENU_RADIO_ANALOGS, 0, MENU_HIGHLIGHT_COLOR); } void RadioAnalogsDiagsPage::buildBody(Window * window) diff --git a/radio/src/gui/colorlcd/radio_diagkeys.cpp b/radio/src/gui/colorlcd/radio_diagkeys.cpp index 6f0c5f033..8d95ce8e6 100644 --- a/radio/src/gui/colorlcd/radio_diagkeys.cpp +++ b/radio/src/gui/colorlcd/radio_diagkeys.cpp @@ -114,7 +114,7 @@ class RadioKeyDiagsWindow : public Window void RadioKeyDiagsPage::buildHeader(Window * window) { - new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + 10, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_MENU_RADIO_SWITCHES, 0, MENU_COLOR); + new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + 10, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_MENU_RADIO_SWITCHES, 0, MENU_HIGHLIGHT_COLOR); } void RadioKeyDiagsPage::buildBody(Window * window) diff --git a/radio/src/gui/colorlcd/radio_hardware.cpp b/radio/src/gui/colorlcd/radio_hardware.cpp index b5c264846..60f1fbe94 100644 --- a/radio/src/gui/colorlcd/radio_hardware.cpp +++ b/radio/src/gui/colorlcd/radio_hardware.cpp @@ -278,19 +278,29 @@ void RadioHardwarePage::build(FormWindow * window) #if defined(AUX_SERIAL) new StaticText(window, grid.getLabelSlot(), STR_AUX_SERIAL_MODE); - auto aux = new Choice(window, grid.getFieldSlot(1,0), STR_AUX_SERIAL_MODES, 0, UART_MODE_MAX, GET_SET_DEFAULT(g_eeGeneral.auxSerialMode)); - aux->setAvailableHandler([=](int value) { - return isAuxModeAvailable; - }); + auto aux = + new Choice(window, grid.getFieldSlot(1, 0), STR_AUX_SERIAL_MODES, 0, + UART_MODE_MAX, GET_DEFAULT(g_eeGeneral.auxSerialMode), + [](int value) { + g_eeGeneral.auxSerialMode = value; + auxSerialInit(g_eeGeneral.auxSerialMode, modelTelemetryProtocol()); + SET_DIRTY(); + }); + aux->setAvailableHandler(isAuxModeAvailable); grid.nextLine(); #endif #if defined(AUX2_SERIAL) new StaticText(window, grid.getLabelSlot(), STR_AUX2_SERIAL_MODE); - auto aux2 = new Choice(window, grid.getFieldSlot(1,0), STR_AUX_SERIAL_MODES, 0, UART_MODE_MAX, GET_SET_DEFAULT(g_eeGeneral.aux2SerialMode)); - aux2->setAvailableHandler([=](int value) { - return isAux2ModeAvailable; - }); + auto aux2 = + new Choice(window, grid.getFieldSlot(1, 0), STR_AUX_SERIAL_MODES, 0, + UART_MODE_MAX, GET_DEFAULT(g_eeGeneral.aux2SerialMode), + [](int value) { + g_eeGeneral.aux2SerialMode = value; + aux2SerialInit(g_eeGeneral.aux2SerialMode, modelTelemetryProtocol()); + SET_DIRTY(); + }); + aux2->setAvailableHandler(isAux2ModeAvailable); grid.nextLine(); #endif diff --git a/radio/src/gui/colorlcd/radio_sdmanager.cpp b/radio/src/gui/colorlcd/radio_sdmanager.cpp index cd442c3c1..2eef2e5fa 100644 --- a/radio/src/gui/colorlcd/radio_sdmanager.cpp +++ b/radio/src/gui/colorlcd/radio_sdmanager.cpp @@ -33,8 +33,8 @@ class FileNameEditWindow : public Page FileNameEditWindow(const std::string iName) : Page(ICON_RADIO_SD_MANAGER), name(std::move(iName)) { - buildBody(&body); buildHeader(&header); + buildBody(&body); }; #if defined(DEBUG_WINDOWS) @@ -45,7 +45,7 @@ class FileNameEditWindow : public Page void buildHeader(Window *window) { - new StaticText(window, {70, 4, 180, 30}, STR_RENAME_FILE, MENU_BGCOLOR); + new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + 10, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_RENAME_FILE, 0, MENU_HIGHLIGHT_COLOR); } void buildBody(Window *window) diff --git a/radio/src/gui/colorlcd/radio_setup.cpp b/radio/src/gui/colorlcd/radio_setup.cpp index 9a4d64430..3b9c4d419 100644 --- a/radio/src/gui/colorlcd/radio_setup.cpp +++ b/radio/src/gui/colorlcd/radio_setup.cpp @@ -302,7 +302,7 @@ void RadioSetupPage::build(FormWindow * window) // Battery warning new StaticText(window, grid.getLabelSlot(true), STR_BATTERYWARNING); edit = new NumberEdit(window, grid.getFieldSlot(), 30, 120, GET_SET_DEFAULT(g_eeGeneral.vBatWarn), 0, PREC1); - edit->setSuffix("v"); + edit->setSuffix("V"); grid.nextLine(); // Inactivity alarm @@ -356,6 +356,13 @@ void RadioSetupPage::build(FormWindow * window) new Slider(window, grid.getFieldSlot(), BACKLIGHT_LEVEL_MIN, BACKLIGHT_LEVEL_MAX, GET_SET_DEFAULT(g_eeGeneral.blOffBright)); grid.nextLine(); +#if defined(KEYS_BACKLIGHT_GPIO) + // Keys backlight + new StaticText(window, grid.getLabelSlot(true), STR_KEYS_BACKLIGHT); + new CheckBox(window, grid.getFieldSlot(), GET_SET_DEFAULT(g_eeGeneral.keysBacklight)); + grid.nextLine(); +#endif + // Flash beep new StaticText(window, grid.getLabelSlot(true), STR_ALARM); new CheckBox(window, grid.getFieldSlot(), GET_SET_DEFAULT(g_eeGeneral.alarmsFlash)); diff --git a/radio/src/gui/colorlcd/special_functions.cpp b/radio/src/gui/colorlcd/special_functions.cpp index 3faf9d9ad..83e6523e6 100644 --- a/radio/src/gui/colorlcd/special_functions.cpp +++ b/radio/src/gui/colorlcd/special_functions.cpp @@ -60,7 +60,7 @@ class SpecialFunctionEditPage : public Page if (active != isActive()) { invalidate(); headerSF->setTextFlags(isActive() ? FONT(BOLD) | HIGHLIGHT_COLOR - : MENU_COLOR); + : FOCUS_COLOR); active = !active; } } @@ -384,10 +384,23 @@ class SpecialFunctionEditPage : public Page }); grid.nextLine(); + // Patch function in case not available + if (!isAssignableFunctionAvailable(CFN_FUNC(cfn), functions)) { + auto func = 0; + while(!isAssignableFunctionAvailable(func, functions) + && (func < FUNC_MAX - 1)) { + func++; + } + if (func < FUNC_MAX - 1) { + CFN_FUNC(cfn) = func; + } + } + // Function new StaticText(window, grid.getLabelSlot(), STR_FUNC); auto functionChoice = - new Choice(window, grid.getFieldSlot(), STR_VFSWFUNC, 0, FUNC_MAX - 1, + new Choice(window, grid.getFieldSlot(), STR_VFSWFUNC, + 0, FUNC_MAX - 1, GET_DEFAULT(CFN_FUNC(cfn))); functionChoice->setSetValueHandler([=](int32_t newValue) { CFN_FUNC(cfn) = newValue; diff --git a/radio/src/gui/colorlcd/view_about.cpp b/radio/src/gui/colorlcd/view_about.cpp index ea3561188..48be1477f 100644 --- a/radio/src/gui/colorlcd/view_about.cpp +++ b/radio/src/gui/colorlcd/view_about.cpp @@ -1,7 +1,8 @@ /* - * Copyright (C) OpenTX + * Copyright (C) EdgeTX * * Based on code named + * opentx - https://github.com/opentx/opentx * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x @@ -18,136 +19,36 @@ * GNU General Public License for more details. */ +#include "view_about.h" #include "opentx.h" -enum AboutScreens { - ABOUT_OPENTX, - ABOUT_HARDWARE, - ABOUT_BERTRAND, - ABOUT_ANDRE, - ABOUT_MIKE, - ABOUT_KJELL, - ABOUT_MARTIN, - ABOUT_ROMOLO, - ABOUT_ROB, - ABOUT_PARENTS, - ABOUT_END, - ABOUT_COUNT, +const uint8_t mask_qrcode[] = { +#include "mask_qrcode.lbm" }; -#define ABOUT_X 62 -#define ABOUT_INDENT 16 +constexpr coord_t ABOUT_WIDTH = 220; -bool menuAboutView(event_t event) +AboutUs::AboutUs() : + MessageDialog(MainWindow::instance(), STR_ABOUT_US, "") { - static uint8_t screenIndex = 0; - static uint8_t greyIndex = 0; + content->setRect({(LCD_W - ABOUT_WIDTH) / 2, 20, ABOUT_WIDTH, LCD_H - 40}); - switch (event) { - case EVT_ENTRY: - screenIndex = 0; - greyIndex = 0; - break; -#if defined(PCBX12S) - case EVT_KEY_FIRST(KEY_PGDN): -#elif defined(PCBX10) - case EVT_KEY_BREAK(KEY_PGDN): -#endif - screenIndex < ABOUT_PARENTS ? screenIndex++ : screenIndex = ABOUT_OPENTX; - greyIndex = 0; - break; - case EVT_KEY_FIRST(KEY_PGUP): -#if defined(PCBX10) - case EVT_KEY_LONG(KEY_PGDN): -#endif - screenIndex > ABOUT_OPENTX ? screenIndex-- : screenIndex = ABOUT_PARENTS; - greyIndex = 0; - killEvents(event); - break; - case EVT_KEY_FIRST(KEY_EXIT): - chainMenu(menuMainView); - break; - } + messageWidget->setTextFlags(CENTERED | FONT(BOLD) | DEFAULT_COLOR); + messageWidget->setTop(content->top() + 40); + messageWidget->setHeight(2*PAGE_LINE_HEIGHT); - theme->drawBackground(); - theme->drawTopbarBackground(0); + messageWidget->setText("EdgeTX Endeavour (2.4.0)\n" + "Copyright (C) 2021 EdgeTX"); - uint8_t screenDuration = 150; - - switch (screenIndex) { - case ABOUT_OPENTX: - case ABOUT_END: - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_OPENTX_1); - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP + FH, STR_ABOUT_OPENTX_2); - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP + 2*FH, STR_ABOUT_OPENTX_3); - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP + 3*FH, STR_ABOUT_OPENTX_4); - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP + 4*FH, STR_ABOUT_OPENTX_5); - screenDuration = 255; - break; - - case ABOUT_BERTRAND: - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_BERTRAND_1, INVERS); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + FH, STR_ABOUT_BERTRAND_2); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 2*FH, STR_ABOUT_BERTRAND_3); - break; - - case ABOUT_ANDRE: - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_ANDRE_1, INVERS); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + FH, STR_ABOUT_ANDRE_2); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 2*FH, STR_ABOUT_ANDRE_3); - break; - - case ABOUT_MIKE: - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_MIKE_1, INVERS); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + FH, STR_ABOUT_MIKE_2); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 2*FH, STR_ABOUT_MIKE_3); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 3*FH, STR_ABOUT_MIKE_4); - break; - - case ABOUT_KJELL: - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_KJELL_1, INVERS); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + FH, STR_ABOUT_KJELL_2); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 2*FH, STR_ABOUT_KJELL_3); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 3*FH, STR_ABOUT_KJELL_4); - break; - - case ABOUT_MARTIN: - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_MARTIN_1, INVERS); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + FH, STR_ABOUT_MARTIN_2); - break; - - case ABOUT_ROMOLO: - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_ROMOLO_1, INVERS); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + FH, STR_ABOUT_ROMOLO_2); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 2*FH, STR_ABOUT_ROMOLO_3); - break; - - case ABOUT_ROB: - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_ROB_1, INVERS); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + FH, STR_ABOUT_ROB_2); - break; - - case ABOUT_HARDWARE: - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_HARDWARE_1, INVERS); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + FH, STR_ABOUT_HARDWARE_2); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 2*FH, STR_ABOUT_HARDWARE_3); - break; - - case ABOUT_PARENTS: - lcdDrawText(ABOUT_X, MENU_CONTENT_TOP, STR_ABOUT_PARENTS_1, INVERS); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + FH, STR_ABOUT_PARENTS_2); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 2*FH, STR_ABOUT_PARENTS_3); - lcdDrawText(ABOUT_X+ABOUT_INDENT, MENU_CONTENT_TOP + 3*FH, STR_ABOUT_PARENTS_4); - screenDuration = 255; - break; - } - - if (++greyIndex == screenDuration) { - greyIndex = 0; - if (++screenIndex == ABOUT_COUNT) { - chainMenu(menuMainView); - } - } - - return true; + qrcode = BitmapBuffer::load8bitMaskOnBackground(mask_qrcode, DEFAULT_COLOR, + DEFAULT_BGCOLOR); + new StaticBitmap(content, + rect_t{ content->width() / 2 - qrcode->width() / 2, 80, + qrcode->width(), qrcode->height()}, + qrcode); +} + +AboutUs::~AboutUs() +{ + delete qrcode; } diff --git a/radio/src/gui/colorlcd/view_about.h b/radio/src/gui/colorlcd/view_about.h new file mode 100644 index 000000000..e76048878 --- /dev/null +++ b/radio/src/gui/colorlcd/view_about.h @@ -0,0 +1,31 @@ +/* + * Copyright (C) EdgeTX + * + * Based on code named + * opentx - https://github.com/opentx/opentx + * th9x - http://code.google.com/p/th9x + * er9x - http://code.google.com/p/er9x + * gruvin9x - http://code.google.com/p/gruvin9x + * + * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include "libopenui.h" + +class AboutUs : public MessageDialog +{ + BitmapBuffer* qrcode = nullptr; + + public: + AboutUs(); + ~AboutUs(); +}; diff --git a/radio/src/gui/colorlcd/view_main_decoration.cpp b/radio/src/gui/colorlcd/view_main_decoration.cpp index 19684d928..9f876ab10 100644 --- a/radio/src/gui/colorlcd/view_main_decoration.cpp +++ b/radio/src/gui/colorlcd/view_main_decoration.cpp @@ -53,7 +53,7 @@ void ViewMainDecoration::setSlidersVisible(bool visible) // sliders[SLIDERS_REAR_LEFT]->setWidth(visible ? TRIM_SQUARE_SIZE : 0); -#if defined(HARDWARE_EXT1) +#if defined(HARDWARE_EXT1) || defined(PCBX12S) if (IS_POT_SLIDER_AVAILABLE(EXT1)) { sliders[SLIDERS_EXT1]->setWidth(visible ? TRIM_SQUARE_SIZE : 0); } @@ -61,7 +61,7 @@ void ViewMainDecoration::setSlidersVisible(bool visible) sliders[SLIDERS_REAR_RIGHT]->setWidth(visible ? TRIM_SQUARE_SIZE : 0); -#if defined(HARDWARE_EXT2) +#if defined(HARDWARE_EXT2) || defined(PCBX12S) if (IS_POT_SLIDER_AVAILABLE(EXT2)) { sliders[SLIDERS_EXT2]->setWidth(visible ? TRIM_SQUARE_SIZE : 0); } @@ -140,7 +140,7 @@ void ViewMainDecoration::adjustDecoration() sliders[SLIDERS_REAR_LEFT]->setLeft(pos); sliders[SLIDERS_REAR_LEFT]->setTop(vertTop); -#if defined(HARDWARE_EXT1) +#if defined(HARDWARE_EXT1) || defined(PCBX12S) sliders[SLIDERS_EXT1]->setLeft(pos); if (IS_POT_SLIDER_AVAILABLE(EXT1)) { auto rl = sliders[SLIDERS_REAR_LEFT]; @@ -167,7 +167,7 @@ void ViewMainDecoration::adjustDecoration() sliders[SLIDERS_REAR_RIGHT]->setLeft(pos); sliders[SLIDERS_REAR_RIGHT]->setTop(vertTop); -#if defined(HARDWARE_EXT2) +#if defined(HARDWARE_EXT2) || defined(PCBX12S) sliders[SLIDERS_EXT2]->setLeft(pos); if (IS_POT_SLIDER_AVAILABLE(EXT2)) { auto rr = sliders[SLIDERS_REAR_RIGHT]; @@ -268,11 +268,11 @@ void ViewMainDecoration::createSliders() sliders[SLIDERS_REAR_LEFT] = new MainViewVerticalSlider(this, r, CALIBRATED_SLIDER_REAR_LEFT); sliders[SLIDERS_REAR_RIGHT] = new MainViewVerticalSlider(this, r, CALIBRATED_SLIDER_REAR_RIGHT); -#if defined(HARDWARE_EXT1) +#if defined(HARDWARE_EXT1) || defined(PCBX12S) sliders[SLIDERS_EXT1] = new MainViewVerticalSlider(this, r, CALIBRATED_POT_EXT1); #endif -#if defined(HARDWARE_EXT2) +#if defined(HARDWARE_EXT2) || defined(PCBX12S) sliders[SLIDERS_EXT2] = new MainViewVerticalSlider(this, r, CALIBRATED_POT_EXT2); #endif } @@ -286,22 +286,22 @@ void ViewMainDecoration::createTrims() HORIZONTAL_SLIDERS_WIDTH, 0 }; - trims[TRIMS_LH] = new MainViewHorizontalTrim(this, r, 0); + trims[TRIMS_LH] = new MainViewHorizontalTrim(this, r, TRIMS_LH); r = rect_t { right() - HORIZONTAL_SLIDERS_WIDTH - HMARGIN, 0, HORIZONTAL_SLIDERS_WIDTH, 0 }; - trims[TRIMS_RH] = new MainViewHorizontalTrim(this, r, 3); + trims[TRIMS_RH] = new MainViewHorizontalTrim(this, r, TRIMS_RH); r = rect_t { 0, 0, 0, VERTICAL_SLIDERS_HEIGHT }; - trims[TRIMS_LV] = new MainViewVerticalTrim(this, r, 2); - trims[TRIMS_RV] = new MainViewVerticalTrim(this, r, 1); + trims[TRIMS_LV] = new MainViewVerticalTrim(this, r, TRIMS_LV); + trims[TRIMS_RV] = new MainViewVerticalTrim(this, r, TRIMS_RV); } void ViewMainDecoration::createFlightMode() diff --git a/radio/src/gui/colorlcd/view_main_menu.cpp b/radio/src/gui/colorlcd/view_main_menu.cpp index 39bd26b88..6c26e2f4f 100644 --- a/radio/src/gui/colorlcd/view_main_menu.cpp +++ b/radio/src/gui/colorlcd/view_main_menu.cpp @@ -26,6 +26,7 @@ #include "menu_model.h" #include "menu_radio.h" #include "menu_screen.h" +#include "view_about.h" #include "view_channels.h" #include "view_statistics.h" #include "select_fab_carousel.h" @@ -89,6 +90,7 @@ ViewMainMenu::ViewMainMenu(Window* parent) : resetMenu->addLine(STR_RESET_TIMER2, []() { timerReset(1); }); resetMenu->addLine(STR_RESET_TIMER3, []() { timerReset(2); }); resetMenu->addLine(STR_RESET_TELEMETRY, []() { telemetryReset(); }); + resetMenu->setLeft(parent->getScrollPositionX()); return 0; }); @@ -100,7 +102,7 @@ ViewMainMenu::ViewMainMenu(Window* parent) : carousel->addButton(ICON_OPENTX, "About\nEdgeTX", [=]() -> uint8_t { deleteLater(); - //TODO: new AboutUs(); + new AboutUs(); return 0; }); diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index dfc9d5bac..46efa21d0 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -123,7 +123,7 @@ bool isSwitch2POSWarningStateAvailable(int state); #endif #if defined(LIBOPENUI) -#define IS_INSTANT_TRIM_ALLOWED() false +#define IS_INSTANT_TRIM_ALLOWED() true #elif defined(GUI) #define IS_INSTANT_TRIM_ALLOWED() (IS_MAIN_VIEW_DISPLAYED() || IS_TELEMETRY_VIEW_DISPLAYED() || IS_OTHER_VIEW_DISPLAYED()) #else diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index 724af6d62..2cbf3e113 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -74,6 +74,8 @@ #define RADIO_VERSION FLAVOUR #endif +#define VERSION_OSNAME "EdgeTX" + #define FIND_FIELD_DESC 0x01 #define KEY_EVENTS(xxx, yyy) \ @@ -93,15 +95,17 @@ Return OpenTX version @retval string OpenTX version (ie "2.1.5") -@retval multiple (available since 2.1.7) returns 5 values: +@retval multiple values (available since 2.1.7): * (string) OpenTX version (ie "2.1.5") * (string) radio type: `x12s`, `x10`, `x9e`, `x9d+`, `x9d` or `x7`. If running in simulator the "-simu" is added * (number) major version (ie 2 if version 2.1.5) * (number) minor version (ie 1 if version 2.1.5) * (number) revision number (ie 5 if version 2.1.5) +Since EdgeTX 2.4.0, sixth value added + * (string) OS name (i.e. EdgeTX or nil if OpenTX) -@status current Introduced in 2.0.0, expanded in 2.1.7, radio type strings changed in 2.2.0 +@status current Introduced in 2.0.0, expanded in 2.1.7, radio type strings changed in 2.2.0, os name added in EdgeTX 2.4.0 ### Example @@ -109,12 +113,13 @@ This example also runs in OpenTX versions where the function returned only one v ```lua local function run(event) - local ver, radio, maj, minor, rev = getVersion() + local ver, radio, maj, minor, rev, osname = getVersion() print("version: "..ver) if radio then print ("radio: "..radio) end if maj then print ("maj: "..maj) end if minor then print ("minor: "..minor) end if rev then print ("rev: "..rev) end + if osname then print ("osname: "..osname) end return 1 end @@ -122,11 +127,12 @@ return { run=run } ``` Output of the above script in simulator: ``` -version: 2.1.7 -radio: taranis-simu +version: 2.4.0 +radio: tx16s-simu maj: 2 -minor: 1 -rev: 7 +minor: 4 +rev: 0 +osname: EdgeTX ``` */ static int luaGetVersion(lua_State * L) @@ -136,7 +142,8 @@ static int luaGetVersion(lua_State * L) lua_pushnumber(L, VERSION_MAJOR); lua_pushnumber(L, VERSION_MINOR); lua_pushnumber(L, VERSION_REVISION); - return 5; + lua_pushstring(L, VERSION_OSNAME); + return 6; } /*luadoc diff --git a/radio/src/lua/widgets.cpp b/radio/src/lua/widgets.cpp index b1d0bc489..a5d3dae8b 100644 --- a/radio/src/lua/widgets.cpp +++ b/radio/src/lua/widgets.cpp @@ -198,6 +198,7 @@ class LuaWidget: public Widget int luaWidgetDataRef; char * errorMessage; uint32_t lastRefresh = 0; + bool refreshed = false; void checkEvents() override; void setErrorMessage(const char * funcName); @@ -270,9 +271,16 @@ void LuaWidget::checkEvents() { Widget::checkEvents(); + // paint has not been called + if (!refreshed) { + background(); + refreshed = true; + } + uint32_t now = RTOS_GET_MS(); if (now - lastRefresh >= LUA_WIDGET_REFRESH) { lastRefresh = now; + refreshed = false; invalidate(); #if defined(DEBUG_WINDOWS) @@ -343,12 +351,16 @@ void LuaWidget::refresh(BitmapBuffer* dc) // Remove LCD luaLcdAllowed = false; luaLcdBuffer = nullptr; + + // mark as refreshed + refreshed = true; } void LuaWidget::background() { if (lsWidgets == 0 || errorMessage) return; + TRACE("LuaWidget::background()"); luaSetInstructionsLimit(lsWidgets, WIDGET_SCRIPTS_MAX_INSTRUCTIONS); LuaWidgetFactory * factory = (LuaWidgetFactory *)this->factory; if (factory->backgroundFunction) { diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index bbf93de8a..438989eb0 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -222,7 +222,7 @@ enum SwashType { #define IS_MANUAL_RESET_TIMER(idx) (g_model.timers[idx].persistent == 2) #if !defined(PCBSKY9X) -#define TIMER_COUNTDOWN_START(x) (g_model.timers[x].countdownStart > 0 ? 5 : 10 - g_model.timers[x].countdownStart * 10) +#define TIMER_COUNTDOWN_START(x) (g_model.timers[x].countdownStart == 0 ? 20 : (g_model.timers[x].countdownStart == 1 ? 30 : (g_model.timers[x].countdownStart == -1 ? 10 : 5))) #else #define TIMER_COUNTDOWN_START(x) 10 #endif diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 54d9abf0d..a4e1a6176 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -698,11 +698,9 @@ void checkMultiLowPower() #if defined(STM32) static void checkRTCBattery() { - if (isVBatBridgeEnabled()) { - if (getRTCBatteryVoltage() < 200) { - ALERT(STR_BATTERY, STR_WARN_RTC_BATTERY_LOW, AU_ERROR); - } - disableVBatBridge(); + GET_ADC_IF_MIXER_NOT_RUNNING(); + if (getRTCBatteryVoltage() < 200) { + ALERT(STR_BATTERY, STR_WARN_RTC_BATTERY_LOW, AU_ERROR); } } #endif @@ -723,17 +721,6 @@ static void checkFailsafe() #else #define checkFailsafe() #endif -void checkRSSIAlarmsDisabled() -{ - if (g_model.rssiAlarms.disabled) { -#if !defined(HARDWARE_INTERNAL_MODULE) - if (!isModuleMultimoduleDSM2(EXTERNAL_MODULE)) -#else - if (!isModuleMultimoduleDSM2(INTERNAL_MODULE) && !isModuleMultimoduleDSM2(EXTERNAL_MODULE)) -#endif - ALERT(STR_RSSIALARM_WARN, STR_NO_RSSIALARM, AU_ERROR); - } -} #if defined(GUI) void checkAll() @@ -749,15 +736,17 @@ void checkAll() checkSwitches(); checkFailsafe(); - checkRSSIAlarmsDisabled(); #if defined(SDCARD) && !defined(RADIOMASTER_RTF_RELEASE) checkSDVersion(); #endif #if defined(STM32) - if (!g_eeGeneral.disableRtcWarning) + if (isVBatBridgeEnabled() && !g_eeGeneral.disableRtcWarning) { + // only done once at board start checkRTCBattery(); + } + disableVBatBridge(); #endif #if defined(COLORLCD) diff --git a/radio/src/opentx.h b/radio/src/opentx.h index cc9f4aff8..77e685c95 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -580,10 +580,6 @@ bool setTrimValue(uint8_t phase, uint8_t idx, int trim); #if defined(PCBSKY9X) #define ROTARY_ENCODER_GRANULARITY (2 << g_eeGeneral.rotarySteps) -#elif defined(RADIO_FAMILY_T16) && !defined(RADIO_T18) - #define ROTARY_ENCODER_GRANULARITY (1) -#elif defined(RADIO_TX12) - #define ROTARY_ENCODER_GRANULARITY (1) #else #define ROTARY_ENCODER_GRANULARITY (2) #endif diff --git a/radio/src/pulses/modules_helpers.h b/radio/src/pulses/modules_helpers.h index c33a433c4..37a8c45c2 100644 --- a/radio/src/pulses/modules_helpers.h +++ b/radio/src/pulses/modules_helpers.h @@ -386,6 +386,8 @@ inline int8_t defaultModuleChannels_M8(uint8_t idx) return 4; // 12 channels else if (isModulePXX2(idx)) return 8; // 16 channels + else if (isModuleGhost(idx)) + return 4; // 12 channels else return maxModuleChannels_M8(idx); } diff --git a/radio/src/pulses/pulses.cpp b/radio/src/pulses/pulses.cpp index 0ec02e49e..7ac4a69e8 100755 --- a/radio/src/pulses/pulses.cpp +++ b/radio/src/pulses/pulses.cpp @@ -268,12 +268,12 @@ void enablePulsesExternalModule(uint8_t protocol) #if defined(PXX2) && defined(EXTMODULE_USART) case PROTOCOL_CHANNELS_PXX2_HIGHSPEED: extmoduleInvertedSerialStart(PXX2_HIGHSPEED_BAUDRATE); - mixerSchedulerSetPeriod(EXTERNAL_MODULE, PXX2_PERIOD); + mixerSchedulerSetPeriod(EXTERNAL_MODULE, PXX2_NO_HEARTBEAT_PERIOD); break; case PROTOCOL_CHANNELS_PXX2_LOWSPEED: extmoduleInvertedSerialStart(PXX2_LOWSPEED_BAUDRATE); - mixerSchedulerSetPeriod(EXTERNAL_MODULE, PXX2_PERIOD); + mixerSchedulerSetPeriod(EXTERNAL_MODULE, PXX2_NO_HEARTBEAT_PERIOD); break; #endif @@ -347,7 +347,7 @@ bool setupPulsesExternalModule(uint8_t protocol) case PROTOCOL_CHANNELS_PXX2_LOWSPEED: extmodulePulsesData.pxx2.setupFrame(EXTERNAL_MODULE); #if defined(PCBSKY9X) - sheduleNextMixerCalculation(EXTERNAL_MODULE, PXX2_PERIOD); + sheduleNextMixerCalculation(EXTERNAL_MODULE, PXX2_NO_HEARTBEAT_PERIOD); #endif return true; #endif @@ -487,9 +487,9 @@ static void enablePulsesInternalModule(uint8_t protocol) #if defined(INTMODULE_HEARTBEAT) // use backup trigger (1 ms later) init_intmodule_heartbeat(); - mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_PERIOD + 1000/*us*/); + mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_MAX_HEARTBEAT_PERIOD); #else - mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_PERIOD); + mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_NO_HEARTBEAT_PERIOD); #endif break; #endif @@ -547,9 +547,9 @@ bool setupPulsesInternalModule(uint8_t protocol) else { #if defined(INTMODULE_HEARTBEAT) mixerSchedulerResetTimer(); - mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_PERIOD + 2000 /* backup */); + mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_MAX_HEARTBEAT_PERIOD); #else - mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_PERIOD); + mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_NO_HEARTBEAT_PERIOD); #endif } return result; diff --git a/radio/src/pulses/pxx.h b/radio/src/pulses/pxx.h index e852de180..90956fe35 100644 --- a/radio/src/pulses/pxx.h +++ b/radio/src/pulses/pxx.h @@ -29,7 +29,8 @@ #define PXX2_LOWSPEED_BAUDRATE 230400 #define PXX2_HIGHSPEED_BAUDRATE 450000 -#define PXX2_PERIOD 4000/*us*/ +#define PXX2_NO_HEARTBEAT_PERIOD 4000/*us*/ +#define PXX2_MAX_HEARTBEAT_PERIOD (7000 + 1000)/*us 7ms frame rate + 1ms heartbeat backup*/ #define PXX2_TOOLS_PERIOD 1000/*us*/ #define PXX2_FRAME_MAXLENGTH 64 diff --git a/radio/src/storage/modelslist.cpp b/radio/src/storage/modelslist.cpp index 1ba806284..f6cf61609 100644 --- a/radio/src/storage/modelslist.cpp +++ b/radio/src/storage/modelslist.cpp @@ -240,6 +240,19 @@ void ModelsCategory::moveModel(ModelCell * model, int8_t step) erase(current); } +int ModelsCategory::getModelIndex(const ModelCell* model) +{ + int idx = 0; + for (auto m : *this) { + if (model == m) + return idx; + + ++idx; + } + + return -1; +} + void ModelsCategory::save(FIL * file) { #if !defined(SDCARD_YAML) @@ -389,6 +402,22 @@ void ModelsList::setCurrentCategory(ModelsCategory * cat) currentCategory = cat; } +int ModelsList::getCurrentCategoryIdx() const +{ + if (!currentCategory) + return -1; + + int idx = 0; + for (auto cat : categories) { + if (currentCategory == cat) + return idx; + + ++idx; + } + + return -1; +} + void ModelsList::setCurrentModel(ModelCell * cell) { currentModel = cell; diff --git a/radio/src/storage/modelslist.h b/radio/src/storage/modelslist.h index f9bde8302..0991fc78e 100644 --- a/radio/src/storage/modelslist.h +++ b/radio/src/storage/modelslist.h @@ -80,6 +80,8 @@ public: void removeModel(ModelCell * model); void moveModel(ModelCell * model, int8_t step); + int getModelIndex(const ModelCell* model); + void save(FIL * file); }; @@ -118,6 +120,7 @@ public: { return currentCategory; } + int getCurrentCategoryIdx() const; void setCurrentModel(ModelCell * cell); diff --git a/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp b/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp index a04c16ed8..a3524c47a 100644 --- a/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp +++ b/radio/src/targets/common/arm/stm32/aux_serial_driver.cpp @@ -159,11 +159,7 @@ void auxSerialInit(unsigned int mode, unsigned int protocol) void auxSerialPutc(char c) { #if !defined(SIMU) - int n = 0; - while (auxSerialTxFifo.isFull()) { - delay_ms(1); - if (++n > 100) return; - } + if (auxSerialTxFifo.isFull()) return; auxSerialTxFifo.push(c); USART_ITConfig(AUX_SERIAL_USART, USART_IT_TXE, ENABLE); #endif @@ -357,11 +353,7 @@ void aux2SerialInit(unsigned int mode, unsigned int protocol) void aux2SerialPutc(char c) { #if !defined(SIMU) - int n = 0; - while (aux2SerialTxFifo.isFull()) { - delay_ms(1); - if (++n > 100) return; - } + if (aux2SerialTxFifo.isFull()) return; aux2SerialTxFifo.push(c); USART_ITConfig(AUX2_SERIAL_USART, USART_IT_TXE, ENABLE); #endif diff --git a/radio/src/targets/common/arm/stm32/rotary_encoder_driver.cpp b/radio/src/targets/common/arm/stm32/rotary_encoder_driver.cpp index 570e134b1..6efe31295 100644 --- a/radio/src/targets/common/arm/stm32/rotary_encoder_driver.cpp +++ b/radio/src/targets/common/arm/stm32/rotary_encoder_driver.cpp @@ -72,25 +72,34 @@ void rotaryEncoderInit() void rotaryEncoderCheck() { #if (defined(RADIO_FAMILY_T16) && !defined(RADIO_T18)) || defined(RADIO_TX12) - static uint8_t state = 0; + static uint8_t state = 0; uint8_t pins = ROTARY_ENCODER_POSITION(); if (pins != (state & 0x03) && !(readKeys() & (1 << KEY_ENTER))) { - if ((pins & 0x01) ^ ((pins & 0x02) >> 1)) { - if ((state & 0x03) == 3) - ++rotencValue; - else - --rotencValue; - } - else - { - if ((state & 0x03) == 3) - --rotencValue; - else if ((state & 0x03) == 0) - ++rotencValue; - } - state &= ~0x03 ; - state |= pins ; + if ((pins ^ (state & 0x03)) == 0x03) + { + if (pins == 3) + { + rotencValue += 2; + } + else + { + rotencValue -= 2; + } + } + else + { + if ((state & 0x01) ^ ((pins & 0x02) >> 1)) + { + rotencValue -= 1; + } + else + { + rotencValue += 1; + } + } + state &= ~0x03; + state |= pins; #else uint8_t newPosition = ROTARY_ENCODER_POSITION(); if (newPosition != rotencPosition && !(readKeys() & (1 << KEY_ENTER))) { diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h index b248791a1..bc1be0d09 100644 --- a/radio/src/targets/horus/board.h +++ b/radio/src/targets/horus/board.h @@ -379,6 +379,11 @@ enum Analogs { NUM_ANALOGS }; +#if defined(PCBX12S) +#define EXT1 SLIDER_FRONT_LEFT +#define EXT2 SLIDER_FRONT_RIGHT +#endif + #define SLIDER1 SLIDER_FRONT_LEFT #define SLIDER2 SLIDER_FRONT_RIGHT @@ -411,7 +416,9 @@ enum CalibratedAnalogs { CALIBRATED_POT3, #if defined(PCBX12S) CALIBRATED_SLIDER_FRONT_LEFT, + CALIBRATED_POT_EXT1 = CALIBRATED_SLIDER_FRONT_LEFT, CALIBRATED_SLIDER_FRONT_RIGHT, + CALIBRATED_POT_EXT2 = CALIBRATED_SLIDER_FRONT_RIGHT, CALIBRATED_SLIDER_REAR_LEFT, CALIBRATED_SLIDER_REAR_RIGHT, #else @@ -641,7 +648,7 @@ void sportUpdatePowerInit(); #define DEBUG_BAUDRATE 115200 #define LUA_DEFAULT_BAUDRATE 115200 #endif -#if defined(AUX_SERIAL_GPIO) +#if defined(AUX_SERIAL) extern uint8_t auxSerialMode; #if defined __cplusplus void auxSerialSetup(unsigned int baudrate, bool dma, uint16_t length = USART_WordLength_8b, uint16_t parity = USART_Parity_No, uint16_t stop = USART_StopBits_1); diff --git a/radio/src/thirdparty/libopenui b/radio/src/thirdparty/libopenui index bca0e093b..05067daa6 160000 --- a/radio/src/thirdparty/libopenui +++ b/radio/src/thirdparty/libopenui @@ -1 +1 @@ -Subproject commit bca0e093b001596d27cc8297a3ec142a3b42239b +Subproject commit 05067daa62127ae1bfaa0a2f518d8249b606a4d3 diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index b97d27c48..e44692d2a 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -926,48 +926,6 @@ const char STR_BLUETOOTH_PIN_CODE[] = TR_BLUETOOTH_PIN_CODE; #endif const char STR_ABOUTUS[] = TR_ABOUTUS; -const char STR_ABOUT_OPENTX_1[] = TR_ABOUT_OPENTX_1; -const char STR_ABOUT_OPENTX_2[] = TR_ABOUT_OPENTX_2; -const char STR_ABOUT_OPENTX_3[] = TR_ABOUT_OPENTX_3; -const char STR_ABOUT_OPENTX_4[] = TR_ABOUT_OPENTX_4; -const char STR_ABOUT_OPENTX_5[] = TR_ABOUT_OPENTX_5; - -const char STR_ABOUT_BERTRAND_1[] = TR_ABOUT_BERTRAND_1; -const char STR_ABOUT_BERTRAND_2[] = TR_ABOUT_BERTRAND_2; -const char STR_ABOUT_BERTRAND_3[] = TR_ABOUT_BERTRAND_3; - -const char STR_ABOUT_MIKE_1[] = TR_ABOUT_MIKE_1; -const char STR_ABOUT_MIKE_2[] = TR_ABOUT_MIKE_2; -const char STR_ABOUT_MIKE_3[] = TR_ABOUT_MIKE_3; -const char STR_ABOUT_MIKE_4[] = TR_ABOUT_MIKE_4; - -const char STR_ABOUT_ROMOLO_1[] = TR_ABOUT_ROMOLO_1; -const char STR_ABOUT_ROMOLO_2[] = TR_ABOUT_ROMOLO_2; -const char STR_ABOUT_ROMOLO_3[] = TR_ABOUT_ROMOLO_3; - -const char STR_ABOUT_ANDRE_1[] = TR_ABOUT_ANDRE_1; -const char STR_ABOUT_ANDRE_2[] = TR_ABOUT_ANDRE_2; -const char STR_ABOUT_ANDRE_3[] = TR_ABOUT_ANDRE_3; - -const char STR_ABOUT_ROB_1[] = TR_ABOUT_ROB_1; -const char STR_ABOUT_ROB_2[] = TR_ABOUT_ROB_2; - -const char STR_ABOUT_MARTIN_1[] = TR_ABOUT_MARTIN_1; -const char STR_ABOUT_MARTIN_2[] = TR_ABOUT_MARTIN_2; - -const char STR_ABOUT_KJELL_1[] = TR_ABOUT_KJELL_1; -const char STR_ABOUT_KJELL_2[] = TR_ABOUT_KJELL_2; -const char STR_ABOUT_KJELL_3[] = TR_ABOUT_KJELL_3; -const char STR_ABOUT_KJELL_4[] = TR_ABOUT_KJELL_4; - -const char STR_ABOUT_HARDWARE_1[] = TR_ABOUT_HARDWARE_1; -const char STR_ABOUT_HARDWARE_2[] = TR_ABOUT_HARDWARE_2; -const char STR_ABOUT_HARDWARE_3[] = TR_ABOUT_HARDWARE_3; - -const char STR_ABOUT_PARENTS_1[] = TR_ABOUT_PARENTS_1; -const char STR_ABOUT_PARENTS_2[] = TR_ABOUT_PARENTS_2; -const char STR_ABOUT_PARENTS_3[] = TR_ABOUT_PARENTS_3; -const char STR_ABOUT_PARENTS_4[] = TR_ABOUT_PARENTS_4; const char STR_AUTH_FAILURE[] = TR_AUTH_FAILURE; const char STR_PROTOCOL[] = TR_PROTOCOL; diff --git a/radio/src/translations/cn.h.txt b/radio/src/translations/cn.h.txt index 1f0e07dd3..9ae808ca3 100644 --- a/radio/src/translations/cn.h.txt +++ b/radio/src/translations/cn.h.txt @@ -1027,55 +1027,6 @@ // About screen #define TR_ABOUTUS TR(" 关于 ", "关于") -#define TR_ABOUT_OPENTX_1 TR("OpenTX\001is\001open\001source,\001non", "OpenTX is open source, non-") -#define TR_ABOUT_OPENTX_2 TR("commercial,\001wo\001warranties.", "commercial and comes with no") -#define TR_ABOUT_OPENTX_3 TR("It\001was\001developed\001for\001free.", "warranties. It was developed") -#define TR_ABOUT_OPENTX_4 TR("Support through donations", "for free. Support through") -#define TR_ABOUT_OPENTX_5 TR("is welcome!", "donations is welcome!") - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "OpenTX main author" -#define TR_ABOUT_BERTRAND_3 "Companion co-author" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Code and drivers guru" -#define TR_ABOUT_MIKE_3 TR("Arguably,\001one\001of\001the\001best", "Arguably, one of the best") -#define TR_ABOUT_MIKE_4 "Inspirational" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Companion co-author" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Functionality, usability," -#define TR_ABOUT_ANDRE_3 "debugging, documentation" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "openrcforums webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 TR("www.open-tx.org author", "www.open-tx.org main author") -#define TR_ABOUT_KJELL_3 "OpenTX Recorder author" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Graphics designer" - -#if defined(PCBFRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Parent projects" -#define TR_ABOUT_PARENTS_2 TR("Ersky9x (Mike Blandford)", "Ersky9x (Mike Blandford)") -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index 67ba25ac1..aad86571b 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -1121,63 +1121,6 @@ // Taranis About screen #define TR_ABOUTUS TR(" O nás ", "O nás") -#define TR_ABOUT_OPENTX_1 TR3("OpenTX je nekomerční,", "OpenTX\001je\001open-source,", "OpenTX je open-source,") -#define TR_ABOUT_OPENTX_2 TR3("opensource bez záruky.", "nekomerční a bez\001záruky.", "nekomerční a bez záruky.") -#define TR_ABOUT_OPENTX_3 TR3("Vytvořen ve volném čase.", "Byl\001vytvořen\001nadšenými\001modeláři", "Byl vytvořen nadšenými modeláři") -#define TR_ABOUT_OPENTX_4 TR3("Podpora vývoje pomocí", "Podpora\001vývoje\001pomocí", "Podpora vývoje pomocí") -#define TR_ABOUT_OPENTX_5 TR3("finančního daru je vítána!", "drobného\001daru\001je\001vítána!", "drobného daru je vítána!") - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "Hlavní vývojář OpenTX" -#define TR_ABOUT_BERTRAND_3 "Spoluautor Companion" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Specialista na kód," -#define TR_ABOUT_MIKE_3 " a ovladače hardwaru." -#define TR_ABOUT_MIKE_4 "" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Hlavní vývojář" -#define TR_ABOUT_ROMOLO_3 "Companion" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Funkčnost, použitelnost," -#define TR_ABOUT_ANDRE_3 "ladění a dokumentace" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "openrcforums webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "autor www.open-tx.org" -#define TR_ABOUT_KJELL_3 "autor OpenTX Recorder" -#define TR_ABOUT_KJELL_4 "Spoluautor Companion" - -#define TR_ABOUT_MARTIN_1 "Martin Hotař" -#define TR_ABOUT_MARTIN_2 "Design, Čeština" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 "Vývoj a výroba Hardware" - #define TR_ABOUT_HARDWARE_3 "Přispěvatel firmware" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 "Vývoj a výroba Hardware" - #define TR_ABOUT_HARDWARE_3 "Přispěvatel firmware" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 "Vývoj a výroba Hardware" - #define TR_ABOUT_HARDWARE_3 "Přispěvatel firmware" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x designer/výrobce" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Mateřské projekty" -#define TR_ABOUT_PARENTS_2 "ersky9x (Mike Blandford)" -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 7486afd00..de1c9e9cb 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -1131,63 +1131,6 @@ //Taranis About screen #define TR_ABOUTUS "Über OpenTx" -#define TR_ABOUT_OPENTX_1 "OpenTX ist Open Source," -#define TR_ABOUT_OPENTX_2 "nicht kommerziell, ohne" -#define TR_ABOUT_OPENTX_3 "Funktionsgarantie, frei" -#define TR_ABOUT_OPENTX_4 "verfügbar. Unterstützung" -#define TR_ABOUT_OPENTX_5 "durch Spenden willkommen" - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "OpenTX Hauptauthor" -#define TR_ABOUT_BERTRAND_3 "Companion-Mitentwickler" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Code- und Treiber-Guru" -#define TR_ABOUT_MIKE_3 "Wohl einer der Besten." -#define TR_ABOUT_MIKE_4 "Sehr inspirierend." - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Companion-Hauptentwickler" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Funktionalität und Tests," -#define TR_ABOUT_ANDRE_3 "Debugging, Dokumentation" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "Openrcforums Webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "www.open-tx.org Hauptautor" -#define TR_ABOUT_KJELL_3 "Author von OpenTX Recorder" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Grafikdesigner" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Vorgänger-Projekte" -#define TR_ABOUT_PARENTS_2 "Ersky9x (Mike Blandford)" -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' // Taste short #define TR_CHR_LONG 'l' // Taste long #define TR_CHR_TOGGLE 't' // Taste als togglefunktion = Ein Aus Ein diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index b990e4484..c37f99bf4 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -1130,71 +1130,6 @@ // About screen #define TR_ABOUTUS TR(" ABOUT ", "ABOUT") -#define TR_ABOUT_OPENTX_1 TR("OpenTX\001is\001open\001source,\001non", "OpenTX is open source, non-") -#define TR_ABOUT_OPENTX_2 TR("commercial,\001wo\001warranties.", "commercial and comes with no") -#define TR_ABOUT_OPENTX_3 TR("It\001was\001developed\001for\001free.", "warranties. It was developed") -#define TR_ABOUT_OPENTX_4 TR("Support through donations", "for free. Support through") -#define TR_ABOUT_OPENTX_5 TR("is welcome!", "donations is welcome!") - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "OpenTX main author" -#define TR_ABOUT_BERTRAND_3 "Companion co-author" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Code and drivers guru" -#define TR_ABOUT_MIKE_3 TR("Arguably,\001one\001of\001the\001best", "Arguably, one of the best") -#define TR_ABOUT_MIKE_4 "Inspirational" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Companion co-author" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Functionality, usability," -#define TR_ABOUT_ANDRE_3 "debugging, documentation" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "openrcforums webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 TR("www.open-tx.org author", "www.open-tx.org main author") -#define TR_ABOUT_KJELL_3 "OpenTX Recorder author" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Graphics designer" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Parent projects" -#define TR_ABOUT_PARENTS_2 TR("Ersky9x (Mike Blandford)", "Ersky9x (Mike Blandford)") -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index cdfdc068f..de969b1a6 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -1126,63 +1126,6 @@ // Taranis About screen #define TR_ABOUTUS "Nosotros" -#define TR_ABOUT_OPENTX_1 "OpenTX es open source, no-" -#define TR_ABOUT_OPENTX_2 "comercial y viene sin " -#define TR_ABOUT_OPENTX_3 "garantias. Fue desarrollado" -#define TR_ABOUT_OPENTX_4 "libremente. Ayudas a través" -#define TR_ABOUT_OPENTX_5 "de donaciones son bienvenidas!" - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "Autor principal OpenTX" -#define TR_ABOUT_BERTRAND_3 "Companion codesarrollador" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Gurú de codigo y drivers" -#define TR_ABOUT_MIKE_3 "Seguramente uno de los" -#define TR_ABOUT_MIKE_4 "mejores inspiradores" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Desarrollador principal" -#define TR_ABOUT_ROMOLO_3 "Companion" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Funcionalidad, usabilidad," -#define TR_ABOUT_ANDRE_3 "depurado, documentación" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "openrcforums webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "www.open-tx.org main author" -#define TR_ABOUT_KJELL_3 "Autor OpenTX Recorder" -#define TR_ABOUT_KJELL_4 "Colaborador Companion" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Dise\201o gráfico" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 "Productor dise\201o de hardware" - #define TR_ABOUT_HARDWARE_3 "Colaborador firmware" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 "Productor dise\201o de hardware" - #define TR_ABOUT_HARDWARE_3 "Colaborador firmware" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 "Productor dise\201o de hardware" - #define TR_ABOUT_HARDWARE_3 "Colaborador firmware" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x dise\201ador/productor" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Padres del proyecto" -#define TR_ABOUT_PARENTS_2 "ersky9x (Mike Blandford)" -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 17bd0b0c1..06c3476bc 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -1142,63 +1142,6 @@ // About screen #define TR_ABOUTUS TR(" ABOUT ", "ABOUT") -#define TR_ABOUT_OPENTX_1 TR("OpenTX\001is\001open\001source,\001non", "OpenTX is open source, non-") -#define TR_ABOUT_OPENTX_2 TR("commercial,\001wo\001warranties.", "commercial and comes with no") -#define TR_ABOUT_OPENTX_3 TR("It\001was\001developed\001for\001free.", "warranties. It was developed") -#define TR_ABOUT_OPENTX_4 TR("Support through donations", "for free. Support through") -#define TR_ABOUT_OPENTX_5 TR("is welcome!", "donations is welcome!") - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "OpenTX main author" -#define TR_ABOUT_BERTRAND_3 "Companion co-author" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Code and drivers guru" -#define TR_ABOUT_MIKE_3 TR("Arguably,\001one\001of\001the\001best", "Arguably, one of the best") -#define TR_ABOUT_MIKE_4 "Inspirational" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Companion co-author" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Functionality, usability," -#define TR_ABOUT_ANDRE_3 "debugging, documentation" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "openrcforums webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "www.open-tx.org main author" -#define TR_ABOUT_KJELL_3 "OpenTX Recorder author" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Graphics designer" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Parent projects" -#define TR_ABOUT_PARENTS_2 TR("Ersky9x (Mike Blandford)", "Ersky9x (Mike Blandford)") -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index d2ac7ff04..546ebaf41 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -1154,71 +1154,6 @@ // Taranis About screen #define TR_ABOUTUS TR(" A PROPOS ", "A PROPOS") -#define TR_ABOUT_OPENTX_1 TR("OpenTX\001est\001libre,\001non-", "OpenTX est libre, non-") -#define TR_ABOUT_OPENTX_2 TR("commercial,\001et\001offert\001sans", "commercial et n'offre aucune") -#define TR_ABOUT_OPENTX_3 TR("garantie.\001Il\001est\001développé", "garantie. Il a été développé") -#define TR_ABOUT_OPENTX_4 TR("gratuitement.\001Donations", "gratuitement. Vos donations") -#define TR_ABOUT_OPENTX_5 TR("bienvenues!", "sont bienvenues!") - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 TR("Auteur\001principal\001d'OpenTX", "Auteur principal d'OpenTX") -#define TR_ABOUT_BERTRAND_3 TR("Codéveloppeur\001de\001C9X", "Codéveloppeur de Companion") - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Maître du code et des" -#define TR_ABOUT_MIKE_3 "drivers" -#define TR_ABOUT_MIKE_4 "" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Développeur principal de" -#define TR_ABOUT_ROMOLO_3 "OpenTX Companion" - -#define TR_ABOUT_ANDRE_1 "André Bernet" -#define TR_ABOUT_ANDRE_2 TR("Fonctionsé,\001usabilité,","Fonctionnalités, usabilité,") -#define TR_ABOUT_ANDRE_3 TR("débogage,\001documentation","débogage, documentation") - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "Webmaster d'openrcforums" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "Auteur de www.open-tx.org" -#define TR_ABOUT_KJELL_3 "Auteur de OpenTX Recorder" -#define TR_ABOUT_KJELL_4 "Développeur Companion" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Design graphique" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 "Développeur/fabricant" - #define TR_ABOUT_HARDWARE_3 "du matériel" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 "Développeur/fabricant" - #define TR_ABOUT_HARDWARE_3 "du matériel" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 "Développeur/fabricant" - #define TR_ABOUT_HARDWARE_3 "du matériel" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 "Développeur/fabricant" - #define TR_ABOUT_HARDWARE_3 "du matériel" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 "Développeur/fabricant" - #define TR_ABOUT_HARDWARE_3 "du matériel" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Développeur/fabricant" - #define TR_ABOUT_HARDWARE_3 "de la carte Sky9x" -#endif - -#define TR_ABOUT_PARENTS_1 "Projets parents" -#define TR_ABOUT_PARENTS_2 "ersky9x (Mike Blandford)" -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index db28fde80..e1b095635 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -1149,63 +1149,6 @@ // About screen #define TR_ABOUTUS TR(" INFO ", "INFO SU") -#define TR_ABOUT_OPENTX_1 TR("OpenTX\001e'\001open\001source,\001non", "OpenTX e' open source, non-") -#define TR_ABOUT_OPENTX_2 TR("commercial,\001wo\001warranties.", "commerciale, fornito senza") -#define TR_ABOUT_OPENTX_3 TR("It\001was\001developed\001for\001free.", "garanzie. E' stato sviluppato") -#define TR_ABOUT_OPENTX_4 TR("Support through donations", "gratuitamente. Il supporto") -#define TR_ABOUT_OPENTX_5 TR("is welcome!", "mediante donazioni e' gradito!") - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "Autore principale OpenTX" -#define TR_ABOUT_BERTRAND_3 "Co-autore Companion" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Guru codice e driver" -#define TR_ABOUT_MIKE_3 "esperto a basso livello" -#define TR_ABOUT_MIKE_4 "Ispiratore" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Autore Companion" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Funzionalità, usabilità," -#define TR_ABOUT_ANDRE_3 "debugging, documentazione" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "Webmaster openrcforums" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "www.open-tx.org main author" -#define TR_ABOUT_KJELL_3 "OpenTX Recorder author" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Graphic Designer" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 "Disegno/produzione Hardware" - #define TR_ABOUT_HARDWARE_3 "Contributi al Firmware" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 "Disegno/produzione Hardware" - #define TR_ABOUT_HARDWARE_3 "Contributi al Firmware" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 "Disegno/produzione Hardware" - #define TR_ABOUT_HARDWARE_3 "Contributi al Firmware" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Designer/Produttore SKY9X" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Progetti correlati" -#define TR_ABOUT_PARENTS_2 "ersky9x (Mike Blandford)" -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 4b4783a38..f40c93a1a 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -1136,62 +1136,6 @@ // About screen #define TR_ABOUTUS TR(" ABOUT ", "ABOUT") -#define TR_ABOUT_OPENTX_1 TR("OpenTX\001is\001open\001source,\001non", "OpenTX is open source, non-") -#define TR_ABOUT_OPENTX_2 TR("commercial,\001wo\001warranties.", "commercial and comes with no") -#define TR_ABOUT_OPENTX_3 TR("It\001was\001developed\001for\001free.", "warranties. It was developed") -#define TR_ABOUT_OPENTX_4 TR("Support through donations", "for free. Support through") -#define TR_ABOUT_OPENTX_5 TR("is welcome!", "donations is welcome!") - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "OpenTX main author" -#define TR_ABOUT_BERTRAND_3 "Companion co-author" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Code and drivers guru" -#define TR_ABOUT_MIKE_3 TR("Arguably,\001one\001of\001the\001best", "Arguably, one of the best") -#define TR_ABOUT_MIKE_4 "Inspirational" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Companion co-author" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Functionality, usability," -#define TR_ABOUT_ANDRE_3 "debugging, documentation" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "openrcforums webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "www.open-tx.org main author" -#define TR_ABOUT_KJELL_3 "OpenTX Recorder author" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Graphics designer" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer" - #define TR_ABOUT_HARDWARE_3 "" -#endif -#define TR_ABOUT_PARENTS_1 "Parent projects" -#define TR_ABOUT_PARENTS_2 TR("Ersky9x (Mike Blandford)", "Ersky9x (Mike Blandford)") -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 4b14f6f25..7e74be8e5 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -1145,63 +1145,6 @@ // About screen #define TR_ABOUTUS TR(" O ", " O ") -#define TR_ABOUT_OPENTX_1 TR("OpenTX\001is\001open\001source,\001non", "OpenTX is open source, non-") -#define TR_ABOUT_OPENTX_2 TR("commercial,\001wo\001warranties.", "commercial and comes with no") -#define TR_ABOUT_OPENTX_3 TR("It\001was\001developed\001for\001free.", "warranties. It was developed") -#define TR_ABOUT_OPENTX_4 TR("Support through donations", "for free. Support through") -#define TR_ABOUT_OPENTX_5 TR("is welcome!", "donations is welcome!") - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "OpenTX główny autor" -#define TR_ABOUT_BERTRAND_3 "Companion współ-autor" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Guru kodu i driwerów" -#define TR_ABOUT_MIKE_3 TR("Arguably,\001one\001of\001the\001best", "Arguably, one of the best") -#define TR_ABOUT_MIKE_4 "Inspirational" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Companion współ-autor" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Funkcjonalność, użytkowość," -#define TR_ABOUT_ANDRE_3 "debugging, documentacja" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "openrcforums webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "www.open-tx.org main author" -#define TR_ABOUT_KJELL_3 "OpenTX Recorder author" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Projekty graficzne" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 "Proucent/projektant Hardware" - #define TR_ABOUT_HARDWARE_3 "Współautor firmware" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 "Proucent/projektant Hardware" - #define TR_ABOUT_HARDWARE_3 "Współautor firmware" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 "Proucent/projektant Hardware" - #define TR_ABOUT_HARDWARE_3 "Współautor firmware" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x designer/výrobce" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Projekty macierzyste" -#define TR_ABOUT_PARENTS_2 TR("Ersky9x (Mike Blandford)", "Ersky9x (Mike Blandford)") -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 'k' #define TR_CHR_LONG 'd' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 0669c02c4..b301eb6ab 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -1146,63 +1146,6 @@ // Taranis About screen #define TR_ABOUTUS "ABOUT US" -#define TR_ABOUT_OPENTX_1 "OpenTX is open source, non-" -#define TR_ABOUT_OPENTX_2 "commercial and comes with no" -#define TR_ABOUT_OPENTX_3 "warranties. It was developed" -#define TR_ABOUT_OPENTX_4 "for free. Support through" -#define TR_ABOUT_OPENTX_5 "donations is welcome!" - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "OpenTX main author" -#define TR_ABOUT_BERTRAND_3 "Companion co-developer" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Code and drivers guru" -#define TR_ABOUT_MIKE_3 "Arguably, one of the best" -#define TR_ABOUT_MIKE_4 "Inspirational" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Companion main developer" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Functionality, usability," -#define TR_ABOUT_ANDRE_3 "debugging, documentation" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "openrcforums webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "www.open-tx.org main author" -#define TR_ABOUT_KJELL_3 "OpenTX Recorder author" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Graphics designer" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Parent projects" -#define TR_ABOUT_PARENTS_2 "ersky9x (Mike Blandford)" -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index c39926ca7..bf6604dec 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -1148,63 +1148,6 @@ // About screen #define TR_ABOUTUS "Om Oss" -#define TR_ABOUT_OPENTX_1 "OpenTX är icke-kommersiell," -#define TR_ABOUT_OPENTX_2 "öppen programvara utan" -#define TR_ABOUT_OPENTX_3 "garantier som uvecklas helt" -#define TR_ABOUT_OPENTX_4 "ideellt. Stöd i form av" -#define TR_ABOUT_OPENTX_5 "donationer välkomnas!" - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "Chefsutvecklare av OpenTX" -#define TR_ABOUT_BERTRAND_3 "Hjälputvecklare av Companion" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Kod och drivrutins-guru" -#define TR_ABOUT_MIKE_3 "Stor inspirationskälla" -#define TR_ABOUT_MIKE_4 "" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Chefsutvecklare av Companion" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Funktionalitet, Användbarhet," -#define TR_ABOUT_ANDRE_3 "Felsökning, Dokumentation" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "Webmaster för openRCforums" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 "Utvecklare av www.open-tx.org" -#define TR_ABOUT_KJELL_3 "Utvecklare av OpenTX Recorder" -#define TR_ABOUT_KJELL_4 "Hjälputvecklare av Companion" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Grafikdesigner" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 "Hårdvarudesign/producent" - #define TR_ABOUT_HARDWARE_3 "" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 "Hårdvarudesign/producent" - #define TR_ABOUT_HARDWARE_3 "" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 "Hårdvarudesign/producent" - #define TR_ABOUT_HARDWARE_3 "" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x design/producent" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Ursprungsprojekt" -#define TR_ABOUT_PARENTS_2 "ersky9x (Mike Blandford)" -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' diff --git a/radio/src/translations/tw.h.txt b/radio/src/translations/tw.h.txt index 0913cd8f4..32d4c3a97 100644 --- a/radio/src/translations/tw.h.txt +++ b/radio/src/translations/tw.h.txt @@ -1027,63 +1027,6 @@ // About screen #define TR_ABOUTUS TR(" 關於 ", "關於") -#define TR_ABOUT_OPENTX_1 TR("OpenTX\001is\001open\001source,\001non", "OpenTX is open source, non-") -#define TR_ABOUT_OPENTX_2 TR("commercial,\001wo\001warranties.", "commercial and comes with no") -#define TR_ABOUT_OPENTX_3 TR("It\001was\001developed\001for\001free.", "warranties. It was developed") -#define TR_ABOUT_OPENTX_4 TR("Support through donations", "for free. Support through") -#define TR_ABOUT_OPENTX_5 TR("is welcome!", "donations is welcome!") - -#define TR_ABOUT_BERTRAND_1 "Bertrand Songis" -#define TR_ABOUT_BERTRAND_2 "OpenTX main author" -#define TR_ABOUT_BERTRAND_3 "Companion co-author" - -#define TR_ABOUT_MIKE_1 "Mike Blandford" -#define TR_ABOUT_MIKE_2 "Code and drivers guru" -#define TR_ABOUT_MIKE_3 TR("Arguably,\001one\001of\001the\001best", "Arguably, one of the best") -#define TR_ABOUT_MIKE_4 "Inspirational" - -#define TR_ABOUT_ROMOLO_1 "Romolo Manfredini" -#define TR_ABOUT_ROMOLO_2 "Companion co-author" -#define TR_ABOUT_ROMOLO_3 "" - -#define TR_ABOUT_ANDRE_1 "Andre Bernet" -#define TR_ABOUT_ANDRE_2 "Functionality, usability," -#define TR_ABOUT_ANDRE_3 "debugging, documentation" - -#define TR_ABOUT_ROB_1 "Rob Thomson" -#define TR_ABOUT_ROB_2 "openrcforums webmaster" - -#define TR_ABOUT_KJELL_1 "Kjell Kernen" -#define TR_ABOUT_KJELL_2 TR("www.open-tx.org author", "www.open-tx.org main author") -#define TR_ABOUT_KJELL_3 "OpenTX Recorder author" -#define TR_ABOUT_KJELL_4 "Companion contributor" - -#define TR_ABOUT_MARTIN_1 "Martin Hotar" -#define TR_ABOUT_MARTIN_2 "Graphics designer" - -#if defined(MANUFACTURER_FRSKY) - #define TR_ABOUT_HARDWARE_1 "FrSky" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_RADIOMASTER) - #define TR_ABOUT_HARDWARE_1 "Radiomaster" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#elif defined(MANUFACTURER_JUMPER) - #define TR_ABOUT_HARDWARE_1 "JumperRC" - #define TR_ABOUT_HARDWARE_2 TR("Hardware design/producer", "Hardware designer/producer") - #define TR_ABOUT_HARDWARE_3 "Firmware contributor" -#else - #define TR_ABOUT_HARDWARE_1 "Brent Nelson" - #define TR_ABOUT_HARDWARE_2 "Sky9x designer/producer" - #define TR_ABOUT_HARDWARE_3 "" -#endif - -#define TR_ABOUT_PARENTS_1 "Parent projects" -#define TR_ABOUT_PARENTS_2 TR("Ersky9x (Mike Blandford)", "Ersky9x (Mike Blandford)") -#define TR_ABOUT_PARENTS_3 "ER9X (Erez Raviv)" -#define TR_ABOUT_PARENTS_4 "TH9X (Thomas Husterer)" - #define TR_CHR_SHORT 's' #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't'