From 4e49ac68bed0b19b5fbd063c6d13ee2018627b9f Mon Sep 17 00:00:00 2001 From: eshifri <46511024+eshifri@users.noreply.github.com> Date: Wed, 7 Sep 2022 04:40:34 -0700 Subject: [PATCH] feat(colorlcd): Special Function to set main screen (#2160) * Special Function to set main screen (#2135) * chore: Add new SF to LUA constants list * Companion support * Formatting * get rid of magic number * Add function to get the number of custom screens * Change screen numbering from 0-based to 1-based. * Allow SetScreen custom function for Color LCD only * add range protection * cleanup * yet, range protection once again * fix: paintSpecialFunctionLine can't alter SF param data * Fix screen initialization in companion * move screen switching to the UI * Trigger view change from guiMain() * chore: Change "SET" to "Set" for consistency * fix: Somehow missed extra comma in `TW` Co-authored-by: Peter Feerick Co-authored-by: elecpower Co-authored-by: Raphael Coeffic --- .../src/firmwares/customfunctiondata.cpp | 8 +- companion/src/firmwares/customfunctiondata.h | 1 + .../edgetx/yaml_customfunctiondata.cpp | 12 +- companion/src/firmwares/modeldata.cpp | 12 ++ companion/src/firmwares/modeldata.h | 1 + .../src/firmwares/opentx/opentxeeprom.cpp | 3 +- companion/src/modeledit/customfunctions.cpp | 10 +- radio/src/dataconstants.h | 3 +- radio/src/functions.cpp | 139 +++++++++++------- radio/src/globals.h | 1 + radio/src/gui/colorlcd/special_functions.cpp | 18 ++- radio/src/gui/colorlcd/view_main.cpp | 7 +- radio/src/gui/colorlcd/view_main.h | 3 +- radio/src/lua/api_general.cpp | 1 + radio/src/main.cpp | 13 ++ radio/src/myeeprom.h | 6 +- .../storage/yaml/yaml_datastructs_funcs.cpp | 6 + .../storage/yaml/yaml_datastructs_nv14.cpp | 1 + .../src/storage/yaml/yaml_datastructs_x10.cpp | 1 + .../storage/yaml/yaml_datastructs_x12s.cpp | 1 + radio/src/translations/cn.h | 3 +- radio/src/translations/cz.h | 3 +- radio/src/translations/da.h | 3 +- radio/src/translations/de.h | 3 +- radio/src/translations/en.h | 3 +- radio/src/translations/es.h | 3 +- radio/src/translations/fi.h | 3 +- radio/src/translations/fr.h | 3 +- radio/src/translations/it.h | 3 +- radio/src/translations/nl.h | 3 +- radio/src/translations/pl.h | 3 +- radio/src/translations/pt.h | 3 +- radio/src/translations/se.h | 3 +- radio/src/translations/tw.h | 3 +- 34 files changed, 215 insertions(+), 74 deletions(-) diff --git a/companion/src/firmwares/customfunctiondata.cpp b/companion/src/firmwares/customfunctiondata.cpp index 293bdd6db..4d3ef9112 100644 --- a/companion/src/firmwares/customfunctiondata.cpp +++ b/companion/src/firmwares/customfunctiondata.cpp @@ -123,6 +123,8 @@ QString CustomFunctionData::funcToString(const AssignFunc func, const ModelData return tr("Racing Mode"); else if (func == FuncDisableTouch) return tr("Disable Touch"); + else if (func == FuncSetScreen) + return tr("Set Main Screen"); else { return QString(CPN_STR_UNKNOWN_ITEM); } @@ -149,6 +151,9 @@ QString CustomFunctionData::paramToString(const ModelData * model) const else if (func == FuncVolume || func == FuncPlayValue || func == FuncBacklight) { return RawSource(param).toString(model); } + else if (func ==FuncSetScreen) { + return QString("%1").arg(param); + } else if (func == FuncPlayPrompt || func == FuncPlayBoth) { if ( getCurrentFirmware()->getCapability(VoicesAsNumbers)) { return QString("%1").arg(param); @@ -223,7 +228,8 @@ bool CustomFunctionData::isFuncAvailable(const int index) ((index == FuncScreenshot) && !IS_HORUS_OR_TARANIS(fw->getBoard())) || ((index >= FuncRangeCheckInternalModule && index <= FuncBindExternalModule) && !fw->getCapability(DangerousFunctions)) || ((index >= FuncAdjustGV1 && index <= FuncAdjustGVLast) && !fw->getCapability(Gvars)) || - ((index == FuncDisableTouch) && !IS_HORUS_OR_TARANIS(fw->getBoard())) + ((index == FuncDisableTouch) && !IS_HORUS_OR_TARANIS(fw->getBoard())) || + ((index == FuncSetScreen && !Boards::getCapability(fw->getBoard(), Board::HasColorLcd))) ); return !ret; } diff --git a/companion/src/firmwares/customfunctiondata.h b/companion/src/firmwares/customfunctiondata.h index 9a5a9ef39..d2b2265e3 100644 --- a/companion/src/firmwares/customfunctiondata.h +++ b/companion/src/firmwares/customfunctiondata.h @@ -71,6 +71,7 @@ enum AssignFunc { FuncBindExternalModule, FuncRacingMode, FuncDisableTouch, + FuncSetScreen, FuncCount, FuncReserve = -1 }; diff --git a/companion/src/firmwares/edgetx/yaml_customfunctiondata.cpp b/companion/src/firmwares/edgetx/yaml_customfunctiondata.cpp index 25ecaffbf..50f82a1fb 100644 --- a/companion/src/firmwares/edgetx/yaml_customfunctiondata.cpp +++ b/companion/src/firmwares/edgetx/yaml_customfunctiondata.cpp @@ -36,7 +36,8 @@ static bool fnHasRepeat(AssignFunc fn) return (fn == FuncPlayPrompt) || (fn == FuncPlayValue) || (fn == FuncPlayHaptic) - || (fn == FuncPlaySound); + || (fn == FuncPlaySound) + || (fn == FuncSetScreen); } static const YamlLookupTable customFnLut = { @@ -63,6 +64,7 @@ static const YamlLookupTable customFnLut = { { FuncScreenshot, "SCREENSHOT" }, { FuncRacingMode, "RACING_MODE" }, { FuncDisableTouch, "DISABLE_TOUCH" }, + { FuncSetScreen, "SET_SCREEN"}, }; static const YamlLookupTable trainerLut = { @@ -206,6 +208,9 @@ Node convert::encode(const CustomFunctionData& rhs) case FuncLogs: def += std::to_string(rhs.param); break; + case FuncSetScreen: + def += std::to_string(rhs.param); + break; default: add_comma = false; break; @@ -349,6 +354,11 @@ bool convert::decode(const Node& node, def >> param; rhs.param = param; } break; + case FuncSetScreen: { + int param = 0; + def >> param; + rhs.param = param; + } break; default: break; } diff --git a/companion/src/firmwares/modeldata.cpp b/companion/src/firmwares/modeldata.cpp index 8195d964e..c75cf47c5 100644 --- a/companion/src/firmwares/modeldata.cpp +++ b/companion/src/firmwares/modeldata.cpp @@ -1800,3 +1800,15 @@ AbstractStaticItemModel * ModelData::trainerModeItemModel(const GeneralSettings mdl->loadItemList(); return mdl; } + +int ModelData::getCustomScreensCount() const +{ + int cnt = 0; + + for (int i = 0; i < MAX_CUSTOM_SCREENS; i++) { + if (customScreens.customScreenData[i].layoutId[0] != '\0') + cnt++; + } + + return cnt; +} diff --git a/companion/src/firmwares/modeldata.h b/companion/src/firmwares/modeldata.h index 92b6f8f3f..8b32eb526 100644 --- a/companion/src/firmwares/modeldata.h +++ b/companion/src/firmwares/modeldata.h @@ -307,6 +307,7 @@ class ModelData { static QString funcSwitchStartToString(unsigned int value); static AbstractStaticItemModel * funcSwitchStartItemModel(); + int getCustomScreensCount() const; protected: void removeGlobalVar(int & var); diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index 59581ffad..8c3a8da3f 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -1513,6 +1513,7 @@ class CustomFunctionsConversionTable: public ConversionTable { addConversion(FuncScreenshot, val++); addConversion(FuncRacingMode, val++); addConversion(FuncDisableTouch, val++); + addConversion(FuncSetScreen, val++); } } }; @@ -1581,7 +1582,7 @@ class ArmCustomFunctionField: public TransformedField { static bool hasRepeatParam(const CustomFunctionData & fn) { - return (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue || fn.func == FuncPlayHaptic); + return (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue || fn.func == FuncPlayHaptic || fn.func == FuncSetScreen); } void beforeExport() override diff --git a/companion/src/modeledit/customfunctions.cpp b/companion/src/modeledit/customfunctions.cpp index c773e90e5..17b520e65 100644 --- a/companion/src/modeledit/customfunctions.cpp +++ b/companion/src/modeledit/customfunctions.cpp @@ -428,7 +428,7 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified) populateFuncParamCB(fswtchParamT[i], func, cfn.param); widgetsMask |= CUSTOM_FUNCTION_SOURCE_PARAM | CUSTOM_FUNCTION_ENABLE; } - else if (func == FuncPlaySound || func == FuncPlayHaptic || func == FuncPlayValue || func == FuncPlayPrompt || func == FuncPlayBoth || func == FuncBackgroundMusic) { + else if (func == FuncPlaySound || func == FuncPlayHaptic || func == FuncPlayValue || func == FuncPlayPrompt || func == FuncPlayBoth || func == FuncBackgroundMusic || func == FuncSetScreen) { if (func != FuncBackgroundMusic) { if (modified) cfn.repeatParam = fswtchRepeat[i]->currentData().toInt(); @@ -507,6 +507,14 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified) cfn.param = (uint8_t)fswtchParamT[i]->currentIndex(); populateFuncParamCB(fswtchParamT[i], func, cfn.param); widgetsMask |= CUSTOM_FUNCTION_SOURCE_PARAM; + } else if (func == FuncSetScreen) { + fswtchParam[i]->setDecimals(0); + fswtchParam[i]->setMinimum(1); + fswtchParam[i]->setMaximum(model->getCustomScreensCount()); + fswtchParam[i]->setSingleStep(1); + cfn.param = fswtchParam[i]->value(); + fswtchParam[i]->setValue(cfn.param); + widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM; } } else if (func == FuncPlayScript) { diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index 3a685baa3..7eb4a7041 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -824,9 +824,10 @@ enum Functions { FUNC_RACING_MODE, #if defined(COLORLCD) FUNC_DISABLE_TOUCH, + FUNC_SET_SCREEN, #endif #if defined(DEBUG) - FUNC_TEST, // should remain the last before MAX as not added in Companion + FUNC_TEST, // should remain the last before MAX as not added in Companion #endif FUNC_MAX SKIP }; diff --git a/radio/src/functions.cpp b/radio/src/functions.cpp index 279eb3e89..4c68bf84b 100644 --- a/radio/src/functions.cpp +++ b/radio/src/functions.cpp @@ -21,6 +21,10 @@ #include "opentx.h" +#if defined(COLORLCD) +void setRequestedMainView(uint8_t view); +#endif + CustomFunctionsContext modelFunctionsContext = { 0 }; CustomFunctionsContext globalFunctionsContext = { 0 }; @@ -150,7 +154,8 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext if (swtch) { MASK_CFN_TYPE switch_mask = ((MASK_CFN_TYPE)1 << i); - bool active = getSwitch(swtch, IS_PLAY_FUNC(CFN_FUNC(cfn)) ? GETSWITCH_MIDPOS_DELAY : 0); + bool active = getSwitch( + swtch, IS_PLAY_FUNC(CFN_FUNC(cfn)) ? GETSWITCH_MIDPOS_DELAY : 0); if (HAS_ENABLE_PARAM(CFN_FUNC(cfn))) { active &= (bool)CFN_ACTIVE(cfn); @@ -158,15 +163,13 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext if (active) { switch (CFN_FUNC(cfn)) { - #if defined(OVERRIDE_CHANNEL_FUNCTION) case FUNC_OVERRIDE_CHANNEL: safetyCh[CFN_CH_INDEX(cfn)] = CFN_PARAM(cfn); break; #endif - case FUNC_TRAINER: - { + case FUNC_TRAINER: { uint8_t param = CFN_CH_INDEX(cfn); if (param == 0) newActiveFunctions |= 0x0F; @@ -194,16 +197,20 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext timerReset(CFN_PARAM(cfn)); break; case FUNC_RESET_FLIGHT: - if (!(functionsContext.activeSwitches & switch_mask)) { - mainRequestFlags |= (1 << REQUEST_FLIGHT_RESET); // on systems with threads flightReset() must not be called from the mixers thread! + if (!(functionsContext.activeSwitches & switch_mask)) { + mainRequestFlags |= + (1 << REQUEST_FLIGHT_RESET); // on systems with threads + // flightReset() must not be + // called from the mixers + // thread! } break; case FUNC_RESET_TELEMETRY: telemetryReset(); break; } - if (CFN_PARAM(cfn)>=FUNC_RESET_PARAM_FIRST_TELEM) { - uint8_t item = CFN_PARAM(cfn)-FUNC_RESET_PARAM_FIRST_TELEM; + if (CFN_PARAM(cfn) >= FUNC_RESET_PARAM_FIRST_TELEM) { + uint8_t item = CFN_PARAM(cfn) - FUNC_RESET_PARAM_FIRST_TELEM; if (item < MAX_TELEMETRY_SENSORS) { telemetryItems[item].clear(); } @@ -220,46 +227,62 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext #if defined(DANGEROUS_MODULE_FUNCTIONS) case FUNC_RANGECHECK: - case FUNC_BIND: - { + case FUNC_BIND: { unsigned int moduleIndex = CFN_PARAM(cfn); if (moduleIndex < NUM_MODULES) { - moduleState[moduleIndex].mode = 1 + CFN_FUNC(cfn) - FUNC_RANGECHECK; + moduleState[moduleIndex].mode = + 1 + CFN_FUNC(cfn) - FUNC_RANGECHECK; } break; } -#endif +#endif #if defined(GVARS) case FUNC_ADJUST_GVAR: if (CFN_GVAR_MODE(cfn) == FUNC_ADJUST_GVAR_CONSTANT) { - SET_GVAR(CFN_GVAR_INDEX(cfn), CFN_PARAM(cfn), mixerCurrentFlightMode); - } - else if (CFN_GVAR_MODE(cfn) == FUNC_ADJUST_GVAR_GVAR) { - SET_GVAR(CFN_GVAR_INDEX(cfn), GVAR_VALUE(CFN_PARAM(cfn), getGVarFlightMode(mixerCurrentFlightMode, CFN_PARAM(cfn))), mixerCurrentFlightMode); - } - else if (CFN_GVAR_MODE(cfn) == FUNC_ADJUST_GVAR_INCDEC) { + SET_GVAR(CFN_GVAR_INDEX(cfn), CFN_PARAM(cfn), + mixerCurrentFlightMode); + } else if (CFN_GVAR_MODE(cfn) == FUNC_ADJUST_GVAR_GVAR) { + SET_GVAR(CFN_GVAR_INDEX(cfn), + GVAR_VALUE(CFN_PARAM(cfn), + getGVarFlightMode(mixerCurrentFlightMode, + CFN_PARAM(cfn))), + mixerCurrentFlightMode); + } else if (CFN_GVAR_MODE(cfn) == FUNC_ADJUST_GVAR_INCDEC) { if (!(functionsContext.activeSwitches & switch_mask)) { - SET_GVAR(CFN_GVAR_INDEX(cfn), limit(MODEL_GVAR_MIN(CFN_GVAR_INDEX(cfn)), GVAR_VALUE(CFN_GVAR_INDEX(cfn), getGVarFlightMode(mixerCurrentFlightMode, CFN_GVAR_INDEX(cfn))) + CFN_PARAM(cfn), MODEL_GVAR_MAX(CFN_GVAR_INDEX(cfn))), mixerCurrentFlightMode); + SET_GVAR(CFN_GVAR_INDEX(cfn), + limit(MODEL_GVAR_MIN(CFN_GVAR_INDEX(cfn)), + GVAR_VALUE(CFN_GVAR_INDEX(cfn), + getGVarFlightMode( + mixerCurrentFlightMode, + CFN_GVAR_INDEX(cfn))) + + CFN_PARAM(cfn), + MODEL_GVAR_MAX(CFN_GVAR_INDEX(cfn))), + mixerCurrentFlightMode); } - } - else if (CFN_PARAM(cfn) >= MIXSRC_FIRST_TRIM && CFN_PARAM(cfn) <= MIXSRC_LAST_TRIM) { - trimGvar[CFN_PARAM(cfn)-MIXSRC_FIRST_TRIM] = CFN_GVAR_INDEX(cfn); - } - else { - SET_GVAR(CFN_GVAR_INDEX(cfn), limit(MODEL_GVAR_MIN(CFN_GVAR_INDEX(cfn)), calcRESXto100(getValue(CFN_PARAM(cfn))), MODEL_GVAR_MAX(CFN_GVAR_INDEX(cfn))), mixerCurrentFlightMode); + } else if (CFN_PARAM(cfn) >= MIXSRC_FIRST_TRIM && + CFN_PARAM(cfn) <= MIXSRC_LAST_TRIM) { + trimGvar[CFN_PARAM(cfn) - MIXSRC_FIRST_TRIM] = + CFN_GVAR_INDEX(cfn); + } else { + SET_GVAR(CFN_GVAR_INDEX(cfn), + limit(MODEL_GVAR_MIN(CFN_GVAR_INDEX(cfn)), + calcRESXto100(getValue(CFN_PARAM(cfn))), + MODEL_GVAR_MAX(CFN_GVAR_INDEX(cfn))), + mixerCurrentFlightMode); } break; #endif - case FUNC_VOLUME: - { + case FUNC_VOLUME: { getvalue_t raw = getValue(CFN_PARAM(cfn)); // only set volume if input changed more than hysteresis if (abs(requiredSpeakerVolumeRawLast - raw) > VOLUME_HYSTERESIS) { requiredSpeakerVolumeRawLast = raw; } - requiredSpeakerVolume = ((1024 + requiredSpeakerVolumeRawLast) * VOLUME_LEVEL_MAX) / 2048; + requiredSpeakerVolume = + ((1024 + requiredSpeakerVolumeRawLast) * VOLUME_LEVEL_MAX) / + 2048; break; } @@ -277,13 +300,12 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext if (audioQueue.isEmpty()) { AUDIO_PLAY(AU_SPECIAL_SOUND_FIRST + CFN_PARAM(cfn)); } - } - else if (CFN_FUNC(cfn) == FUNC_PLAY_VALUE) { + } else if (CFN_FUNC(cfn) == FUNC_PLAY_VALUE) { PLAY_VALUE(CFN_PARAM(cfn), PLAY_INDEX); } #if defined(HAPTIC) else if (CFN_FUNC(cfn) == FUNC_HAPTIC) { - haptic.event(AU_SPECIAL_SOUND_LAST+CFN_PARAM(cfn)); + haptic.event(AU_SPECIAL_SOUND_LAST + CFN_PARAM(cfn)); } #endif else { @@ -311,25 +333,30 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext case FUNC_PLAY_SOUND: case FUNC_PLAY_TRACK: case FUNC_PLAY_BOTH: - case FUNC_PLAY_VALUE: - { + case FUNC_PLAY_VALUE: { tmr10ms_t tmr10ms = get_tmr10ms(); uint8_t repeatParam = CFN_PLAY_REPEAT(cfn); - if (!functionsContext.lastFunctionTime[i] || (CFN_FUNC(cfn)==FUNC_PLAY_BOTH && active!=(bool)(functionsContext.activeSwitches&switch_mask)) || (repeatParam && (signed)(tmr10ms-functionsContext.lastFunctionTime[i])>=1000*repeatParam)) { + if (!functionsContext.lastFunctionTime[i] || + (CFN_FUNC(cfn) == FUNC_PLAY_BOTH && + active != + (bool)(functionsContext.activeSwitches & switch_mask)) || + (repeatParam && + (signed)(tmr10ms - functionsContext.lastFunctionTime[i]) >= + 1000 * repeatParam)) { functionsContext.lastFunctionTime[i] = tmr10ms; uint8_t param = CFN_PARAM(cfn); if (CFN_FUNC(cfn) == FUNC_PLAY_SOUND) { - AUDIO_PLAY(AU_SPECIAL_SOUND_FIRST+param); - } - else if (CFN_FUNC(cfn) == FUNC_PLAY_VALUE) { + AUDIO_PLAY(AU_SPECIAL_SOUND_FIRST + param); + } else if (CFN_FUNC(cfn) == FUNC_PLAY_VALUE) { PLAY_VALUE(param, PLAY_INDEX); - } - else { + } else { #if defined(GVARS) if (CFN_FUNC(cfn) == FUNC_PLAY_TRACK && param > 250) - param = GVAR_VALUE(param-251, getGVarFlightMode(mixerCurrentFlightMode, param-251)); + param = GVAR_VALUE( + param - 251, + getGVarFlightMode(mixerCurrentFlightMode, param - 251)); #endif - PUSH_CUSTOM_PROMPT(active ? param : param+1, PLAY_INDEX); + PUSH_CUSTOM_PROMPT(active ? param : param + 1, PLAY_INDEX); } } if (!active) { @@ -346,20 +373,21 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext break; #endif - #if defined(SDCARD) case FUNC_LOGS: if (CFN_PARAM(cfn)) { newActiveFunctions |= (1u << FUNCTION_LOGS); - logDelay100ms = CFN_PARAM(cfn); // logging period is 0..25.5s in 100ms increments + logDelay100ms = CFN_PARAM( + cfn); // logging period is 0..25.5s in 100ms increments } break; #endif - case FUNC_BACKLIGHT: - { + case FUNC_BACKLIGHT: { newActiveFunctions |= (1u << FUNCTION_BACKLIGHT); - if (!CFN_PARAM(cfn)) { // When no source is set, backlight works like original backlight and turn on regardless of backlight settings + if (!CFN_PARAM(cfn)) { // When no source is set, backlight works + // like original backlight and turn on + // regardless of backlight settings requiredBacklightBright = BACKLIGHT_FORCED_ON; break; } @@ -369,7 +397,9 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext if (raw == -1024) requiredBacklightBright = 100; else - requiredBacklightBright = (1024 - raw) * (BACKLIGHT_LEVEL_MAX - BACKLIGHT_LEVEL_MIN) / 2048; + requiredBacklightBright = + (1024 - raw) * (BACKLIGHT_LEVEL_MAX - BACKLIGHT_LEVEL_MIN) / + 2048; #else requiredBacklightBright = (1024 - raw) * 100 / 2048; #endif @@ -392,7 +422,17 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext #if defined(HARDWARE_TOUCH) case FUNC_DISABLE_TOUCH: newActiveFunctions |= (1u << FUNCTION_DISABLE_TOUCH); - break; + break; +#endif +#if defined(COLORLCD) + case FUNC_SET_SCREEN: + if (isRepeatDelayElapsed(functions, functionsContext, i)) { + TRACE("SET VIEW %d", (CFN_PARAM(cfn))); + int8_t screenNumber = max(0, CFN_PARAM(cfn) - 1); + setRequestedMainView(screenNumber); + mainRequestFlags |= (1u << REQUEST_MAIN_VIEW); + } + break; #endif #if defined(DEBUG) case FUNC_TEST: @@ -402,8 +442,7 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext } newActiveSwitches |= switch_mask; - } - else { + } else { functionsContext.lastFunctionTime[i] = 0; #if defined(DANGEROUS_MODULE_FUNCTIONS) if (functionsContext.activeSwitches & switch_mask) { diff --git a/radio/src/globals.h b/radio/src/globals.h index 1e903e10c..af40984be 100644 --- a/radio/src/globals.h +++ b/radio/src/globals.h @@ -58,6 +58,7 @@ extern uint8_t requiredBacklightBright; enum MainRequest { REQUEST_SCREENSHOT, REQUEST_FLIGHT_RESET, + REQUEST_MAIN_VIEW, }; extern uint8_t mainRequestFlags; diff --git a/radio/src/gui/colorlcd/special_functions.cpp b/radio/src/gui/colorlcd/special_functions.cpp index daf11ff06..2363591ca 100644 --- a/radio/src/gui/colorlcd/special_functions.cpp +++ b/radio/src/gui/colorlcd/special_functions.cpp @@ -22,6 +22,7 @@ #include "special_functions.h" #include "opentx.h" #include "libopenui.h" +#include "view_main.h" #define SET_DIRTY() storageDirty(functions == g_model.customFn ? EE_MODEL : EE_GENERAL) @@ -241,8 +242,19 @@ class SpecialFunctionEditPage : public Page break; } + case FUNC_SET_SCREEN: + new StaticText(specialFunctionOneWindow, grid.getLabelSlot(), STR_VALUE, + 0, COLOR_THEME_PRIMARY1); + CFN_PARAM(cfn) = (int16_t)max(CFN_PARAM(cfn), (int16_t)1); + CFN_PARAM(cfn) = (int16_t)min( + CFN_PARAM(cfn), (int16_t)ViewMain::instance()->getMainViewsCount()); + new NumberEdit(specialFunctionOneWindow, grid.getFieldSlot(), 1, + ViewMain::instance()->getMainViewsCount(), + GET_SET_DEFAULT(CFN_PARAM(cfn))); + grid.nextLine(); + break; + case FUNC_ADJUST_GVAR: { - new StaticText(specialFunctionOneWindow, grid.getLabelSlot(), STR_GLOBALVAR, 0, COLOR_THEME_PRIMARY1); auto gvarchoice = new Choice(specialFunctionOneWindow, grid.getFieldSlot(), 0, @@ -549,6 +561,10 @@ class SpecialFunctionButton : public Button dc->drawNumber(col3, line1, CFN_PARAM(cfn), COLOR_THEME_SECONDARY1 | PREC1, sizeof(CFN_PARAM(cfn)), nullptr, "s"); break; + case FUNC_SET_SCREEN: + dc->drawNumber(col2, line2, CFN_PARAM(cfn), COLOR_THEME_SECONDARY1); + break; + case FUNC_ADJUST_GVAR: switch(CFN_GVAR_MODE(cfn)) { case FUNC_ADJUST_GVAR_CONSTANT: diff --git a/radio/src/gui/colorlcd/view_main.cpp b/radio/src/gui/colorlcd/view_main.cpp index 7feafeaec..6f11e3cbf 100644 --- a/radio/src/gui/colorlcd/view_main.cpp +++ b/radio/src/gui/colorlcd/view_main.cpp @@ -107,7 +107,7 @@ void ViewMain::addMainView(Window* view, uint32_t viewId) auto view_obj = view->getLvObj(); lv_obj_set_parent(view_obj, tile); - auto user_data = (void*)(unsigned long)viewId; + auto user_data = (void*)(intptr_t)viewId; lv_obj_add_event_cb(tile, tile_view_deleted_cb, LV_EVENT_CHILD_DELETED, user_data); } @@ -140,6 +140,11 @@ void ViewMain::setCurrentMainView(unsigned viewId) lv_obj_set_tile_id(tile_view, viewId, 0, LV_ANIM_OFF); } +void setRequestedMainView(uint8_t view) +{ + g_model.view = view; +} + void ViewMain::nextMainView() { auto view = getCurrentMainView(); diff --git a/radio/src/gui/colorlcd/view_main.h b/radio/src/gui/colorlcd/view_main.h index f21d690f6..8992dad4b 100644 --- a/radio/src/gui/colorlcd/view_main.h +++ b/radio/src/gui/colorlcd/view_main.h @@ -75,11 +75,10 @@ class ViewMain: public Window void onEvent(event_t event) override; void onClicked() override; void onCancel() override; - + protected: static ViewMain * _instance; - unsigned views = 0; lv_obj_t* tile_view = nullptr; TopbarImpl* topbar = nullptr; bool widget_select = false; diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index e386f7d8b..a68c6c7de 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -2625,6 +2625,7 @@ const luaR_value_entry opentxConstants[] = { { "FUNC_RACING_MODE", FUNC_RACING_MODE }, #if defined(COLORLCD) { "FUNC_DISABLE_TOUCH", FUNC_DISABLE_TOUCH }, + { "FUNC_SET_SCREEN", FUNC_SET_SCREEN }, { "SHADOWED", SHADOWED }, { "COLOR", ZoneOption::Color }, diff --git a/radio/src/main.cpp b/radio/src/main.cpp index 7aec159b8..96dfb255f 100644 --- a/radio/src/main.cpp +++ b/radio/src/main.cpp @@ -25,6 +25,7 @@ #if defined(LIBOPENUI) #include "libopenui.h" #include "gui/colorlcd/LvglWrapper.h" + #include "gui/colorlcd/view_main.h" #endif #if defined(CLI) @@ -376,6 +377,18 @@ void guiMain(event_t evt) LvglWrapper::instance()->run(); MainWindow::instance()->run(); + bool mainViewRequested = (mainRequestFlags & (1u << REQUEST_MAIN_VIEW)); + if (mainViewRequested) { + auto viewMain = ViewMain::instance(); + if (g_model.view < viewMain->getMainViewsCount()) { + viewMain->setCurrentMainView(g_model.view); + storageDirty(EE_MODEL); + } else { + g_model.view = viewMain->getCurrentMainView(); + } + mainRequestFlags &= ~(1u << REQUEST_MAIN_VIEW); + } + bool screenshotRequested = (mainRequestFlags & (1u << REQUEST_SCREENSHOT)); if (screenshotRequested) { writeScreenshot(); diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 7e0c70537..84e74307c 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -60,7 +60,11 @@ #endif #define HAS_ENABLE_PARAM(func) ((func) < FUNC_FIRST_WITHOUT_ENABLE || (func == FUNC_BACKLIGHT)) -#define HAS_REPEAT_PARAM(func) (IS_PLAY_FUNC(func) || IS_HAPTIC_FUNC(func)) +#if defined(COLORLCD) +#define HAS_REPEAT_PARAM(func) (IS_PLAY_FUNC(func) || IS_HAPTIC_FUNC(func) || func == FUNC_SET_SCREEN) +#else +#define HAS_REPEAT_PARAM(func) (IS_PLAY_FUNC(func) || IS_HAPTIC_FUNC(func) ) +#endif #define CFN_EMPTY(p) (!(p)->swtch) #define CFN_SWITCH(p) ((p)->swtch) diff --git a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp index efaaa956a..859c0b8a9 100644 --- a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp @@ -1298,6 +1298,9 @@ static void r_customFn(void* user, uint8_t* data, uint32_t bitoffs, } break; +#if defined(COLORLCD) + case FUNC_SET_SCREEN: +#endif case FUNC_HAPTIC: case FUNC_LOGS: // 10th of seconds CFN_PARAM(cfn) = yaml_str2uint(val, l_sep); @@ -1472,6 +1475,9 @@ static bool w_customFn(void* user, uint8_t* data, uint32_t bitoffs, if (!wf(opaque, str, strlen(str))) return false; break; +#if defined(COLORLCD) + case FUNC_SET_SCREEN: +#endif case FUNC_HAPTIC: case FUNC_LOGS: // 10th of seconds str = yaml_unsigned2str(CFN_PARAM(cfn)); diff --git a/radio/src/storage/yaml/yaml_datastructs_nv14.cpp b/radio/src/storage/yaml/yaml_datastructs_nv14.cpp index 549d86f82..95869653b 100644 --- a/radio/src/storage/yaml/yaml_datastructs_nv14.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_nv14.cpp @@ -84,6 +84,7 @@ const struct YamlIdStr enum_Functions[] = { { FUNC_SCREENSHOT, "SCREENSHOT" }, { FUNC_RACING_MODE, "RACING_MODE" }, { FUNC_DISABLE_TOUCH, "DISABLE_TOUCH" }, + { FUNC_SET_SCREEN, "SET_SCREEN" }, { 0, NULL } }; const struct YamlIdStr enum_ZoneOptionValueEnum[] = { diff --git a/radio/src/storage/yaml/yaml_datastructs_x10.cpp b/radio/src/storage/yaml/yaml_datastructs_x10.cpp index d3483afd6..41d011a8a 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x10.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x10.cpp @@ -84,6 +84,7 @@ const struct YamlIdStr enum_Functions[] = { { FUNC_SCREENSHOT, "SCREENSHOT" }, { FUNC_RACING_MODE, "RACING_MODE" }, { FUNC_DISABLE_TOUCH, "DISABLE_TOUCH" }, + { FUNC_SET_SCREEN, "SET_SCREEN" }, { 0, NULL } }; const struct YamlIdStr enum_ZoneOptionValueEnum[] = { diff --git a/radio/src/storage/yaml/yaml_datastructs_x12s.cpp b/radio/src/storage/yaml/yaml_datastructs_x12s.cpp index e5a321359..0e85ace60 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x12s.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x12s.cpp @@ -84,6 +84,7 @@ const struct YamlIdStr enum_Functions[] = { { FUNC_SCREENSHOT, "SCREENSHOT" }, { FUNC_RACING_MODE, "RACING_MODE" }, { FUNC_DISABLE_TOUCH, "DISABLE_TOUCH" }, + { FUNC_SET_SCREEN, "SET_SCREEN" }, { 0, NULL } }; const struct YamlIdStr enum_ZoneOptionValueEnum[] = { diff --git a/radio/src/translations/cn.h b/radio/src/translations/cn.h index 000bdeb29..3aac02630 100644 --- a/radio/src/translations/cn.h +++ b/radio/src/translations/cn.h @@ -160,9 +160,10 @@ #define TR_SF_SCREENSHOT "截屏" #define TR_SF_RACING_MODE "竞速模式" #define TR_SF_DISABLE_TOUCH "禁用触摸" +#define TR_SF_SET_SCREEN "Set Main Screen" #define TR_SF_RESERVE "[保留]" -#define TR_VFSWFUNC TR_SF_SAFETY,"教练","摇杆值存储到微调","复位","设置",TR_ADJUST_GVAR,"音量","设置失控保护","测距模式","模块对频",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"背光",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH TR_SF_TEST +#define TR_VFSWFUNC TR_SF_SAFETY,"教练","摇杆值存储到微调","复位","设置",TR_ADJUST_GVAR,"音量","设置失控保护","测距模式","模块对频",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"背光",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH,TR_SF_SET_SCREEN TR_SF_TEST #define TR_FSW_RESET_TELEM "回传参数" diff --git a/radio/src/translations/cz.h b/radio/src/translations/cz.h index 3b3d27c57..e2304247a 100644 --- a/radio/src/translations/cz.h +++ b/radio/src/translations/cz.h @@ -163,9 +163,10 @@ #define TR_SF_SCREENSHOT "Snímek LCD" #define TR_SF_RACING_MODE "Závodní režim" #define TR_SF_DISABLE_TOUCH "Deaktivace dotyku" +#define TR_SF_SET_SCREEN "Set Main Screen" #define TR_SF_RESERVE "[rezerva]" -#define TR_VFSWFUNC TR_SF_SAFETY,"Trenér","Insta-Trim","Reset","Změna",TR_ADJUST_GVAR,"Hlasitost","Nastavit Failsafe","Kontrola dosahu","ModuleBind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Podsvětlení",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH,TR_SF_TEST +#define TR_VFSWFUNC TR_SF_SAFETY,"Trenér","Insta-Trim","Reset","Změna",TR_ADJUST_GVAR,"Hlasitost","Nastavit Failsafe","Kontrola dosahu","ModuleBind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Podsvětlení",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH,TR_SF_SET_SCREEN TR_SF_TEST #define TR_FSW_RESET_TELEM TR("Telm","Telemetrie") diff --git a/radio/src/translations/da.h b/radio/src/translations/da.h index 12b6abb8d..9cf418825 100644 --- a/radio/src/translations/da.h +++ b/radio/src/translations/da.h @@ -160,9 +160,10 @@ #define TR_SF_SCREENSHOT "Screenshot" #define TR_SF_RACING_MODE "RacingMode" #define TR_SF_DISABLE_TOUCH "No Touch" +#define TR_SF_SET_SCREEN "Set Main Screen" #define TR_SF_RESERVE "[reserve]" -#define TR_VFSWFUNC TR_SF_SAFETY,"Træner","Inst. Trim","Nulstil","Sæt",TR_ADJUST_GVAR,"Volume","SetFejlsikr","AfstandCheck","ModuleBind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Baggrundslys",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH TR_SF_TEST +#define TR_VFSWFUNC TR_SF_SAFETY,"Træner","Inst. Trim","Nulstil","Sæt",TR_ADJUST_GVAR,"Volume","SetFejlsikr","AfstandCheck","ModuleBind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Baggrundslys",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH,TR_SF_SET_SCREEN TR_SF_TEST #define TR_FSW_RESET_TELEM TR("Telm", "Telemetri") diff --git a/radio/src/translations/de.h b/radio/src/translations/de.h index 5dcf3f56b..03a3b91a8 100644 --- a/radio/src/translations/de.h +++ b/radio/src/translations/de.h @@ -164,9 +164,10 @@ #define TR_SF_SCREENSHOT "Screenshot" #define TR_SF_RACING_MODE "RacingMode" #define TR_SF_DISABLE_TOUCH "Kein Touch" +#define TR_SF_SET_SCREEN "Set Main Screen" #define TR_SF_RESERVE "[Reserve]" -#define TR_VFSWFUNC TR_SF_SAFETY,"Lehrer","Inst. Trim","Rücksetz.","Setze",TR_ADJUST_GVAR,"Lautstr.","SetFailsafe","RangeCheck","ModuleBind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"LCD Licht",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH,TR_SF_TEST +#define TR_VFSWFUNC TR_SF_SAFETY,"Lehrer","Inst. Trim","Rücksetz.","Setze",TR_ADJUST_GVAR,"Lautstr.","SetFailsafe","RangeCheck","ModuleBind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"LCD Licht",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH,TR_SF_SET_SCREEN TR_SF_TEST #define TR_FSW_RESET_TELEM TR("Telm","Telemetrie") diff --git a/radio/src/translations/en.h b/radio/src/translations/en.h index 130af0894..b0b54e8e0 100644 --- a/radio/src/translations/en.h +++ b/radio/src/translations/en.h @@ -160,9 +160,10 @@ #define TR_SF_SCREENSHOT "Screenshot" #define TR_SF_RACING_MODE "RacingMode" #define TR_SF_DISABLE_TOUCH "No Touch" +#define TR_SF_SET_SCREEN "Set Main Screen" #define TR_SF_RESERVE "[reserve]" -#define TR_VFSWFUNC TR_SF_SAFETY,"Trainer","Inst. Trim","Reset","Set",TR_ADJUST_GVAR,"Volume","SetFailsafe","RangeCheck","ModuleBind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Backlight",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH TR_SF_TEST +#define TR_VFSWFUNC TR_SF_SAFETY,"Trainer","Inst. Trim","Reset","Set",TR_ADJUST_GVAR,"Volume","SetFailsafe","RangeCheck","ModuleBind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Backlight",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH, TR_SF_SET_SCREEN TR_SF_TEST #define TR_FSW_RESET_TELEM TR("Telm", "Telemetry") diff --git a/radio/src/translations/es.h b/radio/src/translations/es.h index 4b4da7166..b39f668cc 100644 --- a/radio/src/translations/es.h +++ b/radio/src/translations/es.h @@ -161,9 +161,10 @@ #define TR_SF_SCREENSHOT "Captura" #define TR_SF_RACING_MODE "RacingMode" #define TR_SF_DISABLE_TOUCH "No Touch" +#define TR_SF_SET_SCREEN "Set Main Screen" #define TR_SF_RESERVE "[reserv.]" -#define TR_VFSWFUNC TR_SF_SAFETY,"Entrenador","Inst. Trim","Reset","Ajuste",TR_ADJUST_GVAR,"Volumen","Failsafe","CheckRango","Enl.módulo",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Luz Fondo",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH TR_SF_TEST +#define TR_VFSWFUNC TR_SF_SAFETY,"Entrenador","Inst. Trim","Reset","Ajuste",TR_ADJUST_GVAR,"Volumen","Failsafe","CheckRango","Enl.módulo",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Luz Fondo",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH,TR_SF_SET_SCREEN TR_SF_TEST #define TR_FSW_RESET_TELEM TR("Telm", "Telemetría") diff --git a/radio/src/translations/fi.h b/radio/src/translations/fi.h index a2b65803b..2f07d6882 100644 --- a/radio/src/translations/fi.h +++ b/radio/src/translations/fi.h @@ -165,9 +165,10 @@ #define TR_SF_SCREENSHOT "Screenshot" #define TR_SF_RACING_MODE "RacingMode" #define TR_SF_DISABLE_TOUCH "No Touch" +#define TR_SF_SET_SCREEN "Set Main Screen" #define TR_SF_RESERVE "[reserve]" -#define TR_VFSWFUNC TR_SF_SAFETY,"Trainer","Inst. Trim","Reset","Set",TR_ADJUST_GVAR,"Volume","SetFailsafe","RangeCheck","ModuleBind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Backlight",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH,TR_SF_TEST +#define TR_VFSWFUNC TR_SF_SAFETY,"Trainer","Inst. Trim","Reset","Set",TR_ADJUST_GVAR,"Volume","SetFailsafe","RangeCheck","ModuleBind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Backlight",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH,TR_SF_SET_SCREEN TR_SF_TEST #define TR_FSW_RESET_TELEM TR("Telm","Telemetry") diff --git a/radio/src/translations/fr.h b/radio/src/translations/fr.h index d1aaa3498..1074b40eb 100644 --- a/radio/src/translations/fr.h +++ b/radio/src/translations/fr.h @@ -166,9 +166,10 @@ #define TR_SF_SCREENSHOT "Photo Ecran" #define TR_SF_RACING_MODE "Racing Mode" #define TR_SF_DISABLE_TOUCH "No Touch" +#define TR_SF_SET_SCREEN "Set Main Screen" #define TR_SF_RESERVE "[reserve]" -#define TR_VFSWFUNC TR_SF_SAFETY,"Ecolage","Trim instant.","Remise à 0","Déf.",TR_ADJUST_GVAR,"Volume","DéfFailsafe","Test Port.","Bind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Rétroécl.",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH,TR_SF_TEST +#define TR_VFSWFUNC TR_SF_SAFETY,"Ecolage","Trim instant.","Remise à 0","Déf.",TR_ADJUST_GVAR,"Volume","DéfFailsafe","Test Port.","Bind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Rétroécl.",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH,TR_SF_SET_SCREEN TR_SF_TEST #define TR_FSW_RESET_TELEM TR("Télm", "Télémétrie") diff --git a/radio/src/translations/it.h b/radio/src/translations/it.h index c9bc8ceb4..f31ba67b7 100644 --- a/radio/src/translations/it.h +++ b/radio/src/translations/it.h @@ -164,9 +164,10 @@ #define TR_SF_SCREENSHOT "Screenshot" #define TR_SF_RACING_MODE "Modo Racing" #define TR_SF_DISABLE_TOUCH "No Touch" +#define TR_SF_SET_SCREEN "Set Main Screen" #define TR_SF_RESERVE "[riserva]" -#define TR_VFSWFUNC TR_SF_SAFETY,"Maestro","Trim Instant.","Azzera","Set",TR_ADJUST_GVAR,"Volume","SetFailsafe","RangeCheck","ModuleBind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Retroillum.",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH TR_SF_TEST +#define TR_VFSWFUNC TR_SF_SAFETY,"Maestro","Trim Instant.","Azzera","Set",TR_ADJUST_GVAR,"Volume","SetFailsafe","RangeCheck","ModuleBind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Retroillum.",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH,TR_SF_SET_SCREEN TR_SF_TEST #define TR_FSW_RESET_TELEM TR("Telm", "Telemetr.") diff --git a/radio/src/translations/nl.h b/radio/src/translations/nl.h index f9f499bb4..30dada2c7 100644 --- a/radio/src/translations/nl.h +++ b/radio/src/translations/nl.h @@ -163,9 +163,10 @@ #define TR_SF_SCREENSHOT "Schermafdr" #define TR_SF_RACING_MODE "RacingMode" #define TR_SF_DISABLE_TOUCH "No Touch" +#define TR_SF_SET_SCREEN "Set Main Screen" #define TR_SF_RESERVE "[reserve]" -#define TR_VFSWFUNC TR_SF_SAFETY,"Trainer","Inst. Trim","Reset","Set",TR_ADJUST_GVAR,"Volume","SetFailsafe","RangeCheck","ModuleBind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Backlight",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH TR_SF_TEST +#define TR_VFSWFUNC TR_SF_SAFETY,"Trainer","Inst. Trim","Reset","Set",TR_ADJUST_GVAR,"Volume","SetFailsafe","RangeCheck","ModuleBind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Backlight",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH,TR_SF_SET_SCREEN TR_SF_TEST #define TR_FSW_RESET_TELEM TR("Telm", "Telemetrie") diff --git a/radio/src/translations/pl.h b/radio/src/translations/pl.h index 3ca12686b..7d2384bb2 100644 --- a/radio/src/translations/pl.h +++ b/radio/src/translations/pl.h @@ -161,9 +161,10 @@ #define TR_SF_SCREENSHOT "Zrzut Ekra" #define TR_SF_RACING_MODE "RacingMode" #define TR_SF_DISABLE_TOUCH "No Touch" +#define TR_SF_SET_SCREEN "Set Main Screen" #define TR_SF_RESERVE "[rezerwa]" -#define TR_VFSWFUNC TR_SF_SAFETY,"Trener","Inst-Trim","Resetuj","Ustaw",TR_ADJUST_GVAR,"Głośność","SetFailsafe","RangeCheck","ModuleBind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Podświetl",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH TR_SF_TEST +#define TR_VFSWFUNC TR_SF_SAFETY,"Trener","Inst-Trim","Resetuj","Ustaw",TR_ADJUST_GVAR,"Głośność","SetFailsafe","RangeCheck","ModuleBind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Podświetl",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH,TR_SF_SET_SCREEN TR_SF_TEST #define TR_FSW_RESET_TELEM TR("Telm", "Telemetra") diff --git a/radio/src/translations/pt.h b/radio/src/translations/pt.h index 168e02780..dfaa18ff8 100644 --- a/radio/src/translations/pt.h +++ b/radio/src/translations/pt.h @@ -159,9 +159,10 @@ #define TR_SF_SCREENSHOT "Screenshot" #define TR_SF_RACING_MODE "RacingMode" #define TR_SF_DISABLE_TOUCH "No Touch" +#define TR_SF_SET_SCREEN "Set Main Screen" #define TR_SF_RESERVE "[reserve]" -#define TR_VFSWFUNC TR_SF_SAFETY,"Aprendiz","Ajuste Rapido","Reset","Set",TR_ADJUST_GVAR,"Volume","SetFailsafe","RangeCheck","ModuleBind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Backlight",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH TR_SF_TEST +#define TR_VFSWFUNC TR_SF_SAFETY,"Aprendiz","Ajuste Rapido","Reset","Set",TR_ADJUST_GVAR,"Volume","SetFailsafe","RangeCheck","ModuleBind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Backlight",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH,TR_SF_SET_SCREEN TR_SF_TEST #define TR_FSW_RESET_TELEM TR("Telm", "Telemetry") diff --git a/radio/src/translations/se.h b/radio/src/translations/se.h index c2ff3f6bc..3dd3119c5 100644 --- a/radio/src/translations/se.h +++ b/radio/src/translations/se.h @@ -165,9 +165,10 @@ #define TR_SF_SCREENSHOT "Skärmbild" #define TR_SF_RACING_MODE "Tävlingsläge" #define TR_SF_DISABLE_TOUCH "Ej pekskärm" +#define TR_SF_SET_SCREEN "Set Main Screen" #define TR_SF_RESERVE "[reserv]" -#define TR_VFSWFUNC TR_SF_SAFETY,"Lärare","Sätt trimm","Nollställ","Sätt",TR_ADJUST_GVAR,"Volym","Sätt failsafe","Range check","Module bind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE, TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Belysning", TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH,TR_SF_TEST +#define TR_VFSWFUNC TR_SF_SAFETY,"Lärare","Sätt trimm","Nollställ","Sätt",TR_ADJUST_GVAR,"Volym","Sätt failsafe","Range check","Module bind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE, TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Belysning", TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH,TR_SF_SET_SCREEN TR_SF_TEST #define TR_FSW_RESET_TELEM TR("Telm","Telemetri") diff --git a/radio/src/translations/tw.h b/radio/src/translations/tw.h index 1829128ff..8bb4435fc 100644 --- a/radio/src/translations/tw.h +++ b/radio/src/translations/tw.h @@ -160,9 +160,10 @@ #define TR_SF_SCREENSHOT "截屏" #define TR_SF_RACING_MODE "競速模式" #define TR_SF_DISABLE_TOUCH "禁用觸摸" +#define TR_SF_SET_SCREEN "Set Main Screen" #define TR_SF_RESERVE "[保留]" -#define TR_VFSWFUNC TR_SF_SAFETY,"教練","搖桿值存儲到微調","重啟","設置",TR_ADJUST_GVAR,"音量","設置失控保護","測距模式","模塊對頻",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"背光",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH TR_SF_TEST +#define TR_VFSWFUNC TR_SF_SAFETY,"教練","搖桿值存儲到微調","重啟","設置",TR_ADJUST_GVAR,"音量","設置失控保護","測距模式","模塊對頻",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"背光",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH, TR_SF_SET_SCREEN TR_SF_TEST #define TR_FSW_RESET_TELEM "回傳參數"