diff --git a/companion/src/eeprominterface.cpp b/companion/src/eeprominterface.cpp index 88c6f803d..3864b9f41 100644 --- a/companion/src/eeprominterface.cpp +++ b/companion/src/eeprominterface.cpp @@ -615,8 +615,8 @@ QString FuncSwData::funcToString() return QObject::tr("Play Haptic"); else if (func == FuncReset) return QObject::tr("Reset"); - else if (func == FuncSetTimer) - return QObject::tr("Set Timer"); + else if (func >= FuncSetTimer1 && func <= FuncSetTimer2) + return QObject::tr("Set Timer %1").arg(func-FuncSetTimer1+1); else if (func == FuncVario) return QObject::tr("Vario"); else if (func == FuncPlayPrompt) diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index d84f018f0..06c9ec13f 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -642,7 +642,8 @@ enum AssignFunc { FuncPlaySound, FuncPlayHaptic, FuncReset, - FuncSetTimer, + FuncSetTimer1, + FuncSetTimer2, FuncVario, FuncPlayPrompt, FuncPlayBoth, diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index bb56d1d15..efbcf74fa 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -1307,8 +1307,11 @@ class CustomFunctionsConversionTable: public ConversionTable { addConversion(FuncInstantTrim, val++); if (version >= 216) { addConversion(FuncReset, val++); - if (IS_ARM(board)) - addConversion(FuncSetTimer, val++); + if (IS_ARM(board)) { + addConversion(FuncSetTimer1, val); + addConversion(FuncSetTimer2, val); + val++; + } for (int i=0; i= 216) *((uint8_t *)(_param+3)) = fn.func - FuncTrainer; } + else if (fn.func >= FuncSetTimer1 && fn.func <= FuncSetTimer2) { + if (version >= 216) + *((uint8_t *)(_param+3)) = fn.func - FuncSetTimer1; + } else if (fn.func == FuncPlayPrompt || fn.func == FuncBackgroundMusic) { memcpy(_param, fn.paramarm, sizeof(_param)); } diff --git a/radio/src/gui/menu_model.cpp b/radio/src/gui/menu_model.cpp index 31bb23f73..a7499aa0b 100644 --- a/radio/src/gui/menu_model.cpp +++ b/radio/src/gui/menu_model.cpp @@ -4817,28 +4817,36 @@ void menuModelCustomFunctions(uint8_t event) { int8_t maxParam = NUM_CHNOUT-1; if (func == FUNC_SAFETY_CHANNEL) { - putsChn(lcdNextPos, y, CFN_CH_NUMBER(sd)+1, attr); + putsChn(lcdNextPos, y, CFN_CH_INDEX(sd)+1, attr); } else if (func == FUNC_TRAINER) { maxParam = 4; #if defined(CPUARM) - putsMixerSource(lcdNextPos, y, CFN_CH_NUMBER(sd)==0 ? 0 : MIXSRC_Rud+CFN_CH_NUMBER(sd)-1, attr); + putsMixerSource(lcdNextPos, y, CFN_CH_INDEX(sd)==0 ? 0 : MIXSRC_Rud+CFN_CH_INDEX(sd)-1, attr); #else - putsMixerSource(lcdNextPos, y, MIXSRC_Rud+CFN_CH_NUMBER(sd)-1, attr); + putsMixerSource(lcdNextPos, y, MIXSRC_Rud+CFN_CH_INDEX(sd)-1, attr); #endif } #if defined(GVARS) else if (func == FUNC_ADJUST_GVAR) { maxParam = MAX_GVARS-1; - putsStrIdx(lcdNextPos, y, STR_GV, CFN_GVAR_NUMBER(sd)+1, attr); - if (active) CHECK_INCDEC_MODELVAR_ZERO(event, CFN_GVAR_NUMBER(sd), maxParam); + putsStrIdx(lcdNextPos, y, STR_GV, CFN_GVAR_INDEX(sd)+1, attr); + if (active) CHECK_INCDEC_MODELVAR_ZERO(event, CFN_GVAR_INDEX(sd), maxParam); + break; + } +#endif +#if defined(CPUARM) + else if (func == FUNC_SET_TIMER) { + maxParam = 1; + putsStrIdx(lcdNextPos, y, STR_TIMER, CFN_TIMER_INDEX(sd)+1, attr); + if (active) CHECK_INCDEC_MODELVAR_ZERO(event, CFN_TIMER_INDEX(sd), maxParam); break; } #endif else if (attr) { REPEAT_LAST_CURSOR_MOVE(); } - if (active) CHECK_INCDEC_MODELVAR_ZERO(event, CFN_CH_NUMBER(sd), maxParam); + if (active) CHECK_INCDEC_MODELVAR_ZERO(event, CFN_CH_INDEX(sd), maxParam); break; } diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 2ec811d6c..63e59bdc8 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -836,11 +836,12 @@ PACK(typedef struct t_CustomFnData { // Function Switches data #define CFN_SWITCH(p) ((p)->swtch) #define CFN_FUNC(p) ((p)->func) #define CFN_ACTIVE(p) ((p)->active) -#define CFN_CH_NUMBER(p) ((p)->all.param) +#define CFN_CH_INDEX(p) ((p)->all.param) +#define CFN_GVAR_INDEX(p) ((p)->all.param) +#define CFN_TIMER_INDEX(p) ((p)->all.param) #define CFN_PLAY_REPEAT(p) ((p)->active) #define CFN_PLAY_REPEAT_MUL 1 #define CFN_PLAY_REPEAT_NOSTART 0x3F -#define CFN_GVAR_NUMBER(p) ((p)->all.param) #define CFN_GVAR_MODE(p) ((p)->all.mode) #define CFN_PARAM(p) ((p)->all.val) #define CFN_RESET(p) ((p)->active=0, (p)->clear.val1=0, (p)->clear.val2=0) @@ -869,10 +870,11 @@ PACK(typedef struct t_CustomFnData { #define CFN_SWITCH(p) ((p)->all.swtch) #define CFN_FUNC(p) ((p)->all.func) #define CFN_ACTIVE(p) ((p)->all.active) -#define CFN_CH_NUMBER(p) ((p)->all.param) +#define CFN_CH_INDEX(p) ((p)->all.param) +#define CFN_TIMER_INDEX(p) ((p)->all.param) +#define CFN_GVAR_INDEX(p) ((p)->gvar.param) #define CFN_PLAY_REPEAT(p) ((p)->all.param) #define CFN_PLAY_REPEAT_MUL 10 -#define CFN_GVAR_NUMBER(p) ((p)->gvar.param) #define CFN_GVAR_MODE(p) ((p)->gvar.mode) #define CFN_PARAM(p) ((p)->value) #define CFN_RESET(p) ((p)->all.active = 0, CFN_PARAM(p) = 0) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index f21ed57fe..d4caf0ed4 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -3185,14 +3185,14 @@ void evalFunctions() switch(CFN_FUNC(sd)) { case FUNC_SAFETY_CHANNEL: - safetyCh[CFN_CH_NUMBER(sd)] = CFN_PARAM(sd); + safetyCh[CFN_CH_INDEX(sd)] = CFN_PARAM(sd); break; case FUNC_TRAINER: { uint8_t mask = 0x0f; - if (CFN_CH_NUMBER(sd) > 0) { - mask = (1<<(CFN_CH_NUMBER(sd)-1)); + if (CFN_CH_INDEX(sd) > 0) { + mask = (1<<(CFN_CH_INDEX(sd)-1)); } newActiveFunctions |= mask; break; @@ -3235,32 +3235,43 @@ void evalFunctions() } break; +#if defined(CPUARM) + case FUNC_SET_TIMER: + { + TimerState & timerState = timersStates[CFN_TIMER_INDEX(sd)]; + timerState.state = TMR_OFF; // is changed to RUNNING dep from mode + timerState.val = CFN_PARAM(sd); + timerState.val_10ms = 0 ; + break; + } +#endif + #if defined(GVARS) case FUNC_ADJUST_GVAR: if (CFN_GVAR_MODE(sd) == 0) { - SET_GVAR(CFN_GVAR_NUMBER(sd), CFN_PARAM(sd), s_perout_flight_phase); + SET_GVAR(CFN_GVAR_INDEX(sd), CFN_PARAM(sd), s_perout_flight_phase); } else if (CFN_GVAR_MODE(sd) == 2) { - SET_GVAR(CFN_GVAR_NUMBER(sd), GVAR_VALUE(CFN_PARAM(sd), s_perout_flight_phase), s_perout_flight_phase); + SET_GVAR(CFN_GVAR_INDEX(sd), GVAR_VALUE(CFN_PARAM(sd), s_perout_flight_phase), s_perout_flight_phase); } else if (CFN_GVAR_MODE(sd) == 3) { if (!(activeFnSwitches & switch_mask)) { - SET_GVAR(CFN_GVAR_NUMBER(sd), GVAR_VALUE(CFN_GVAR_NUMBER(sd), getGVarFlightPhase(s_perout_flight_phase, CFN_GVAR_NUMBER(sd))) + (CFN_PARAM(sd) ? +1 : -1), s_perout_flight_phase); + SET_GVAR(CFN_GVAR_INDEX(sd), GVAR_VALUE(CFN_GVAR_INDEX(sd), getGVarFlightPhase(s_perout_flight_phase, CFN_GVAR_INDEX(sd))) + (CFN_PARAM(sd) ? +1 : -1), s_perout_flight_phase); } } else if (CFN_PARAM(sd) >= MIXSRC_TrimRud && CFN_PARAM(sd) <= MIXSRC_TrimAil) { - trimGvar[CFN_PARAM(sd)-MIXSRC_TrimRud] = CFN_GVAR_NUMBER(sd); + trimGvar[CFN_PARAM(sd)-MIXSRC_TrimRud] = CFN_GVAR_INDEX(sd); } #if defined(ROTARY_ENCODERS) else if (CFN_PARAM(sd) >= MIXSRC_REa && CFN_PARAM(sd) < MIXSRC_TrimRud) { int8_t scroll = rePreviousValues[CFN_PARAM(sd)-MIXSRC_REa] - (g_rotenc[CFN_PARAM(sd)-MIXSRC_REa] / ROTARY_ENCODER_GRANULARITY); if (scroll) { - SET_GVAR(CFN_GVAR_NUMBER(sd), GVAR_VALUE(CFN_GVAR_NUMBER(sd), getGVarFlightPhase(s_perout_flight_phase, CFN_GVAR_NUMBER(sd))) + scroll, s_perout_flight_phase); + SET_GVAR(CFN_GVAR_INDEX(sd), GVAR_VALUE(CFN_GVAR_INDEX(sd), getGVarFlightPhase(s_perout_flight_phase, CFN_GVAR_INDEX(sd))) + scroll, s_perout_flight_phase); } } #endif else { - SET_GVAR(CFN_GVAR_NUMBER(sd), limit((getvalue_t)-1250, getValue(CFN_PARAM(sd)), (getvalue_t)1250) / 10, s_perout_flight_phase); + SET_GVAR(CFN_GVAR_INDEX(sd), limit((getvalue_t)-1250, getValue(CFN_PARAM(sd)), (getvalue_t)1250) / 10, s_perout_flight_phase); } break; #endif diff --git a/radio/src/translations/en.h b/radio/src/translations/en.h index 1e0260733..292eb2e52 100644 --- a/radio/src/translations/en.h +++ b/radio/src/translations/en.h @@ -225,7 +225,7 @@ #endif #if defined(CPUARM) - #define TR_VFSWFUNC "Safety\0 ""Trainer\0 ""Inst. Trim""Reset\0 ""Set Timer\0" TR_ADJUST_GVAR "Volume\0 " TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_CFN_TEST + #define TR_VFSWFUNC "Safety\0 ""Trainer\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_CFN_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_CFN_TEST #elif defined(PCBGRUVIN9X) #define TR_VFSWFUNC "Safety\0 ""Trainer\0 ""Inst. Trim""Reset\0 " TR_ADJUST_GVAR TR_SOUND TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_CFN_TEST #else @@ -426,13 +426,13 @@ #define TR_EXPONAME "Expo Name" #endif #define TR_BITMAP "Model Image" -#define TR_TIMER TR("Timer","Timer ") -#define TR_ELIMITS TR("E.Limits","Extended Limits") -#define TR_ETRIMS TR("E.Trims","Extended Trims") +#define TR_TIMER TR("Timer", "Timer ") +#define TR_ELIMITS TR("E.Limits", "Extended Limits") +#define TR_ETRIMS TR("E.Trims", "Extended Trims") #define TR_TRIMINC "Trim Step" -#define TR_TTRACE TR("T-Source","Throttle Source") -#define TR_TTRIM TR("T-Trim","Throttle Trim") -#define TR_BEEPCTR TR("Ctr Beep","Center Beep") +#define TR_TTRACE TR("T-Source", "Throttle Source") +#define TR_TTRIM TR("T-Trim", "Throttle Trim") +#define TR_BEEPCTR TR("Ctr Beep", "Center Beep") #define TR_PROTO TR(INDENT "Proto", INDENT "Protocol") #define TR_PPMFRAME TR("PPM frame", INDENT "PPM frame") #define TR_MS "ms"