From a9ed6485fd7389146c1a494e2e8d77d62f678a8e Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 8 Feb 2014 13:44:42 +0100 Subject: [PATCH 1/3] Issue #594 (Set Timer Function) - Still missing UI in Companion --- companion/src/eeprominterface.cpp | 2 ++ companion/src/eeprominterface.h | 1 + .../src/firmwares/opentx/opentxeeprom.cpp | 2 ++ radio/src/gui/menu_model.cpp | 22 ++++++++++++++----- radio/src/gui/menus.cpp | 5 +++++ radio/src/myeeprom.h | 3 +++ radio/src/translations/en.h | 2 +- 7 files changed, 31 insertions(+), 6 deletions(-) diff --git a/companion/src/eeprominterface.cpp b/companion/src/eeprominterface.cpp index 18379d773..88c6f803d 100644 --- a/companion/src/eeprominterface.cpp +++ b/companion/src/eeprominterface.cpp @@ -615,6 +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 == FuncVario) return QObject::tr("Vario"); else if (func == FuncPlayPrompt) diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index 8f78c2d71..d84f018f0 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -642,6 +642,7 @@ enum AssignFunc { FuncPlaySound, FuncPlayHaptic, FuncReset, + FuncSetTimer, FuncVario, FuncPlayPrompt, FuncPlayBoth, diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index e0365487b..bb56d1d15 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -1307,6 +1307,8 @@ class CustomFunctionsConversionTable: public ConversionTable { addConversion(FuncInstantTrim, val++); if (version >= 216) { addConversion(FuncReset, val++); + if (IS_ARM(board)) + addConversion(FuncSetTimer, val++); for (int i=0; i0 || p1valdiff) && attr) { switch (horz) { case LS_FIELD_FUNCTION: @@ -4679,9 +4678,9 @@ void menuModelLogicalSwitches(uint8_t event) #endif #if LCD_W >= 212 - #define MODEL_CUSTOM_FUNC_1ST_COLUMN (5+4*FW) - #define MODEL_CUSTOM_FUNC_2ND_COLUMN (9*FW) - #define MODEL_CUSTOM_FUNC_3RD_COLUMN (21*FW) + #define MODEL_CUSTOM_FUNC_1ST_COLUMN (5+3*FW) + #define MODEL_CUSTOM_FUNC_2ND_COLUMN (8*FW) + #define MODEL_CUSTOM_FUNC_3RD_COLUMN (20*FW) #define MODEL_CUSTOM_FUNC_4TH_COLUMN (33*FW-3) #define MODEL_CUSTOM_FUNC_4TH_COLUMN_ONOFF (34*FW-3) #else @@ -4798,7 +4797,11 @@ void menuModelCustomFunctions(uint8_t event) if (CFN_SWITCH(sd)) { lcd_putsiAtt(MODEL_CUSTOM_FUNC_2ND_COLUMN, y, STR_VFSWFUNC, func, attr); if (active) { +#if defined(CPUARM) + CFN_FUNC(sd) = checkIncDec(event, CFN_FUNC(sd), 0, FUNC_MAX-1, EE_MODEL, isAssignableFunctionAvailable); +#else CHECK_INCDEC_MODELVAR_ZERO(event, CFN_FUNC(sd), FUNC_MAX-1); +#endif if (checkIncDec_Ret) CFN_RESET(sd); } } @@ -4844,17 +4847,26 @@ void menuModelCustomFunctions(uint8_t event) INCDEC_DECLARE_VARS(); int16_t val_displayed = CFN_PARAM(sd); int8_t val_min = 0; +#if defined(CPUARM) + int16_t val_max = 255; +#else uint8_t val_max = 255; +#endif if (func == FUNC_SAFETY_CHANNEL) { val_displayed = (int8_t)CFN_PARAM(sd); val_min = -125; val_max = 125; lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT); } +#if defined(CPUARM) + else if (func == FUNC_SET_TIMER) { + val_max = 59*60+59; + putsTime(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT, attr); + } +#endif #if defined(AUDIO) else if (func == FUNC_PLAY_SOUND) { val_max = AU_FRSKY_LAST-AU_FRSKY_FIRST-1; lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_FUNCSOUNDS, val_displayed, attr); - break; } #endif #if defined(HAPTIC) diff --git a/radio/src/gui/menus.cpp b/radio/src/gui/menus.cpp index 3296994d4..5bdbeb484 100644 --- a/radio/src/gui/menus.cpp +++ b/radio/src/gui/menus.cpp @@ -1306,6 +1306,11 @@ bool isAssignableFunctionAvailable(int16_t function) return false; #endif +#if !defined(GVARS) + case FUNC_ADJUST_GVAR: + return false; +#endif + default: return true; } diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index cbcfd1389..2ec811d6c 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -726,6 +726,9 @@ enum Functions { FUNC_TRAINER, FUNC_INSTANT_TRIM, FUNC_RESET, +#if defined(CPUARM) + FUNC_SET_TIMER, +#endif FUNC_ADJUST_GVAR, #if defined(CPUARM) FUNC_VOLUME, diff --git a/radio/src/translations/en.h b/radio/src/translations/en.h index 6f2777606..1e0260733 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 " 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 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 #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 From 9052f8824e08426299a9b4a046948de9b3e855ad Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 8 Feb 2014 16:44:59 +0100 Subject: [PATCH 2/3] Issue #594 - Two timers can be set ... --- companion/src/eeprominterface.cpp | 4 +-- companion/src/eeprominterface.h | 3 +- .../src/firmwares/opentx/opentxeeprom.cpp | 11 +++++-- radio/src/gui/menu_model.cpp | 20 +++++++++---- radio/src/myeeprom.h | 10 ++++--- radio/src/opentx.cpp | 29 +++++++++++++------ radio/src/translations/en.h | 14 ++++----- 7 files changed, 60 insertions(+), 31 deletions(-) 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" From d146966a18d33fb93cea944bea5e84134de032bf Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 8 Feb 2014 17:12:26 +0100 Subject: [PATCH 3/3] Issue #594 (SetTimer) - Companion part done --- companion/src/firmwares/opentx/opentxeeprom.cpp | 10 ++++++++-- companion/src/modeledit/customfunctions.cpp | 9 +++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index efbcf74fa..b36ed2c50 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -1458,8 +1458,10 @@ class ArmCustomFunctionField: public TransformedField { *((uint8_t *)(_param+3)) = fn.func - FuncTrainer; } else if (fn.func >= FuncSetTimer1 && fn.func <= FuncSetTimer2) { - if (version >= 216) + if (version >= 216) { + *((uint16_t *)_param) = fn.param; *((uint8_t *)(_param+3)) = fn.func - FuncSetTimer1; + } } else if (fn.func == FuncPlayPrompt || fn.func == FuncBackgroundMusic) { memcpy(_param, fn.paramarm, sizeof(_param)); @@ -1528,10 +1530,14 @@ class ArmCustomFunctionField: public TransformedField { fn.func = AssignFunc(fn.func + index); fn.param = (int)value; } - else if (fn.func >= FuncTrainer && fn.func <= FuncTrainerAIL) { + else if (fn.func >= FuncSetTimer1 && fn.func <= FuncSetTimer2) { fn.func = AssignFunc(fn.func + index); fn.param = (int)value; } + else if (fn.func >= FuncTrainer && fn.func <= FuncTrainerAIL) { + fn.func = AssignFunc(fn.func + index); + fn.param = value; + } else if (fn.func == FuncPlayPrompt || fn.func == FuncBackgroundMusic) { memcpy(fn.paramarm, _param, sizeof(fn.paramarm)); } diff --git a/companion/src/modeledit/customfunctions.cpp b/companion/src/modeledit/customfunctions.cpp index d2468bc19..49f7630e8 100644 --- a/companion/src/modeledit/customfunctions.cpp +++ b/companion/src/modeledit/customfunctions.cpp @@ -347,6 +347,15 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified) populateFuncParamCB(fswtchParamT[i], model, index, model.funcSw[i].param); widgetsMask |= CUSTOM_FUNCTION_SOURCE_PARAM | CUSTOM_FUNCTION_ENABLE; } + else if (index>=FuncSetTimer1 && index<=FuncSetTimer2) { + if (modified) model.funcSw[i].param = fswtchParam[i]->value(); + fswtchParam[i]->setDecimals(0); + fswtchParam[i]->setSingleStep(1); + fswtchParam[i]->setMinimum(0); + fswtchParam[i]->setMaximum(59*60+59); + fswtchParam[i]->setValue(model.funcSw[i].param); + widgetsMask |= CUSTOM_FUNCTION_NUMERIC_PARAM + CUSTOM_FUNCTION_ENABLE; + } else if (index==FuncVolume) { if (modified) model.funcSw[i].param = fswtchParamT[i]->itemData(fswtchParamT[i]->currentIndex()).toInt(); populateFuncParamCB(fswtchParamT[i], model, index, model.funcSw[i].param);