1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-24 16:55:20 +03:00

Issue #594 - Two timers can be set ...

This commit is contained in:
Bertrand Songis 2014-02-08 16:44:59 +01:00
parent a9ed6485fd
commit 9052f8824e
7 changed files with 60 additions and 31 deletions

View file

@ -615,8 +615,8 @@ QString FuncSwData::funcToString()
return QObject::tr("Play Haptic"); return QObject::tr("Play Haptic");
else if (func == FuncReset) else if (func == FuncReset)
return QObject::tr("Reset"); return QObject::tr("Reset");
else if (func == FuncSetTimer) else if (func >= FuncSetTimer1 && func <= FuncSetTimer2)
return QObject::tr("Set Timer"); return QObject::tr("Set Timer %1").arg(func-FuncSetTimer1+1);
else if (func == FuncVario) else if (func == FuncVario)
return QObject::tr("Vario"); return QObject::tr("Vario");
else if (func == FuncPlayPrompt) else if (func == FuncPlayPrompt)

View file

@ -642,7 +642,8 @@ enum AssignFunc {
FuncPlaySound, FuncPlaySound,
FuncPlayHaptic, FuncPlayHaptic,
FuncReset, FuncReset,
FuncSetTimer, FuncSetTimer1,
FuncSetTimer2,
FuncVario, FuncVario,
FuncPlayPrompt, FuncPlayPrompt,
FuncPlayBoth, FuncPlayBoth,

View file

@ -1307,8 +1307,11 @@ class CustomFunctionsConversionTable: public ConversionTable {
addConversion(FuncInstantTrim, val++); addConversion(FuncInstantTrim, val++);
if (version >= 216) { if (version >= 216) {
addConversion(FuncReset, val++); addConversion(FuncReset, val++);
if (IS_ARM(board)) if (IS_ARM(board)) {
addConversion(FuncSetTimer, val++); addConversion(FuncSetTimer1, val);
addConversion(FuncSetTimer2, val);
val++;
}
for (int i=0; i<MAX_GVARS(board, version); i++) for (int i=0; i<MAX_GVARS(board, version); i++)
addConversion(FuncAdjustGV1+i, val); addConversion(FuncAdjustGV1+i, val);
val++; val++;
@ -1454,6 +1457,10 @@ class ArmCustomFunctionField: public TransformedField {
if (version >= 216) if (version >= 216)
*((uint8_t *)(_param+3)) = fn.func - FuncTrainer; *((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) { else if (fn.func == FuncPlayPrompt || fn.func == FuncBackgroundMusic) {
memcpy(_param, fn.paramarm, sizeof(_param)); memcpy(_param, fn.paramarm, sizeof(_param));
} }

View file

@ -4817,28 +4817,36 @@ void menuModelCustomFunctions(uint8_t event)
{ {
int8_t maxParam = NUM_CHNOUT-1; int8_t maxParam = NUM_CHNOUT-1;
if (func == FUNC_SAFETY_CHANNEL) { 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) { else if (func == FUNC_TRAINER) {
maxParam = 4; maxParam = 4;
#if defined(CPUARM) #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 #else
putsMixerSource(lcdNextPos, y, MIXSRC_Rud+CFN_CH_NUMBER(sd)-1, attr); putsMixerSource(lcdNextPos, y, MIXSRC_Rud+CFN_CH_INDEX(sd)-1, attr);
#endif #endif
} }
#if defined(GVARS) #if defined(GVARS)
else if (func == FUNC_ADJUST_GVAR) { else if (func == FUNC_ADJUST_GVAR) {
maxParam = MAX_GVARS-1; maxParam = MAX_GVARS-1;
putsStrIdx(lcdNextPos, y, STR_GV, CFN_GVAR_NUMBER(sd)+1, attr); putsStrIdx(lcdNextPos, y, STR_GV, CFN_GVAR_INDEX(sd)+1, attr);
if (active) CHECK_INCDEC_MODELVAR_ZERO(event, CFN_GVAR_NUMBER(sd), maxParam); 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; break;
} }
#endif #endif
else if (attr) { else if (attr) {
REPEAT_LAST_CURSOR_MOVE(); 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; break;
} }

View file

@ -836,11 +836,12 @@ PACK(typedef struct t_CustomFnData { // Function Switches data
#define CFN_SWITCH(p) ((p)->swtch) #define CFN_SWITCH(p) ((p)->swtch)
#define CFN_FUNC(p) ((p)->func) #define CFN_FUNC(p) ((p)->func)
#define CFN_ACTIVE(p) ((p)->active) #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(p) ((p)->active)
#define CFN_PLAY_REPEAT_MUL 1 #define CFN_PLAY_REPEAT_MUL 1
#define CFN_PLAY_REPEAT_NOSTART 0x3F #define CFN_PLAY_REPEAT_NOSTART 0x3F
#define CFN_GVAR_NUMBER(p) ((p)->all.param)
#define CFN_GVAR_MODE(p) ((p)->all.mode) #define CFN_GVAR_MODE(p) ((p)->all.mode)
#define CFN_PARAM(p) ((p)->all.val) #define CFN_PARAM(p) ((p)->all.val)
#define CFN_RESET(p) ((p)->active=0, (p)->clear.val1=0, (p)->clear.val2=0) #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_SWITCH(p) ((p)->all.swtch)
#define CFN_FUNC(p) ((p)->all.func) #define CFN_FUNC(p) ((p)->all.func)
#define CFN_ACTIVE(p) ((p)->all.active) #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(p) ((p)->all.param)
#define CFN_PLAY_REPEAT_MUL 10 #define CFN_PLAY_REPEAT_MUL 10
#define CFN_GVAR_NUMBER(p) ((p)->gvar.param)
#define CFN_GVAR_MODE(p) ((p)->gvar.mode) #define CFN_GVAR_MODE(p) ((p)->gvar.mode)
#define CFN_PARAM(p) ((p)->value) #define CFN_PARAM(p) ((p)->value)
#define CFN_RESET(p) ((p)->all.active = 0, CFN_PARAM(p) = 0) #define CFN_RESET(p) ((p)->all.active = 0, CFN_PARAM(p) = 0)

View file

@ -3185,14 +3185,14 @@ void evalFunctions()
switch(CFN_FUNC(sd)) { switch(CFN_FUNC(sd)) {
case FUNC_SAFETY_CHANNEL: case FUNC_SAFETY_CHANNEL:
safetyCh[CFN_CH_NUMBER(sd)] = CFN_PARAM(sd); safetyCh[CFN_CH_INDEX(sd)] = CFN_PARAM(sd);
break; break;
case FUNC_TRAINER: case FUNC_TRAINER:
{ {
uint8_t mask = 0x0f; uint8_t mask = 0x0f;
if (CFN_CH_NUMBER(sd) > 0) { if (CFN_CH_INDEX(sd) > 0) {
mask = (1<<(CFN_CH_NUMBER(sd)-1)); mask = (1<<(CFN_CH_INDEX(sd)-1));
} }
newActiveFunctions |= mask; newActiveFunctions |= mask;
break; break;
@ -3235,32 +3235,43 @@ void evalFunctions()
} }
break; 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) #if defined(GVARS)
case FUNC_ADJUST_GVAR: case FUNC_ADJUST_GVAR:
if (CFN_GVAR_MODE(sd) == 0) { 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) { 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) { else if (CFN_GVAR_MODE(sd) == 3) {
if (!(activeFnSwitches & switch_mask)) { 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) { 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) #if defined(ROTARY_ENCODERS)
else if (CFN_PARAM(sd) >= MIXSRC_REa && CFN_PARAM(sd) < MIXSRC_TrimRud) { 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); int8_t scroll = rePreviousValues[CFN_PARAM(sd)-MIXSRC_REa] - (g_rotenc[CFN_PARAM(sd)-MIXSRC_REa] / ROTARY_ENCODER_GRANULARITY);
if (scroll) { 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 #endif
else { 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; break;
#endif #endif

View file

@ -225,7 +225,7 @@
#endif #endif
#if defined(CPUARM) #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) #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 #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 #else
@ -426,13 +426,13 @@
#define TR_EXPONAME "Expo Name" #define TR_EXPONAME "Expo Name"
#endif #endif
#define TR_BITMAP "Model Image" #define TR_BITMAP "Model Image"
#define TR_TIMER TR("Timer","Timer ") #define TR_TIMER TR("Timer", "Timer ")
#define TR_ELIMITS TR("E.Limits","Extended Limits") #define TR_ELIMITS TR("E.Limits", "Extended Limits")
#define TR_ETRIMS TR("E.Trims","Extended Trims") #define TR_ETRIMS TR("E.Trims", "Extended Trims")
#define TR_TRIMINC "Trim Step" #define TR_TRIMINC "Trim Step"
#define TR_TTRACE TR("T-Source","Throttle Source") #define TR_TTRACE TR("T-Source", "Throttle Source")
#define TR_TTRIM TR("T-Trim","Throttle Trim") #define TR_TTRIM TR("T-Trim", "Throttle Trim")
#define TR_BEEPCTR TR("Ctr Beep","Center Beep") #define TR_BEEPCTR TR("Ctr Beep", "Center Beep")
#define TR_PROTO TR(INDENT "Proto", INDENT "Protocol") #define TR_PROTO TR(INDENT "Proto", INDENT "Protocol")
#define TR_PPMFRAME TR("PPM frame", INDENT "PPM frame") #define TR_PPMFRAME TR("PPM frame", INDENT "PPM frame")
#define TR_MS "ms" #define TR_MS "ms"