Merge branch 'next' of https://github.com/opentx/opentx into next
This commit is contained in:
@@ -615,6 +615,8 @@ QString FuncSwData::funcToString()
|
||||
return QObject::tr("Play Haptic");
|
||||
else if (func == FuncReset)
|
||||
return QObject::tr("Reset");
|
||||
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)
|
||||
|
||||
@@ -642,6 +642,8 @@ enum AssignFunc {
|
||||
FuncPlaySound,
|
||||
FuncPlayHaptic,
|
||||
FuncReset,
|
||||
FuncSetTimer1,
|
||||
FuncSetTimer2,
|
||||
FuncVario,
|
||||
FuncPlayPrompt,
|
||||
FuncPlayBoth,
|
||||
|
||||
@@ -1307,6 +1307,11 @@ class CustomFunctionsConversionTable: public ConversionTable {
|
||||
addConversion(FuncInstantTrim, val++);
|
||||
if (version >= 216) {
|
||||
addConversion(FuncReset, val++);
|
||||
if (IS_ARM(board)) {
|
||||
addConversion(FuncSetTimer1, val);
|
||||
addConversion(FuncSetTimer2, val);
|
||||
val++;
|
||||
}
|
||||
for (int i=0; i<MAX_GVARS(board, version); i++)
|
||||
addConversion(FuncAdjustGV1+i, val);
|
||||
val++;
|
||||
@@ -1452,6 +1457,12 @@ class ArmCustomFunctionField: public TransformedField {
|
||||
if (version >= 216)
|
||||
*((uint8_t *)(_param+3)) = fn.func - FuncTrainer;
|
||||
}
|
||||
else if (fn.func >= FuncSetTimer1 && fn.func <= FuncSetTimer2) {
|
||||
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));
|
||||
}
|
||||
@@ -1519,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));
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -4605,7 +4605,6 @@ void menuModelLogicalSwitches(uint8_t event)
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
if ((s_editMode>0 || 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);
|
||||
}
|
||||
}
|
||||
@@ -4814,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;
|
||||
}
|
||||
|
||||
@@ -4844,17 +4855,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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
@@ -833,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)
|
||||
@@ -866,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)
|
||||
|
||||
+20
-9
@@ -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
|
||||
|
||||
@@ -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 \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"
|
||||
|
||||
Reference in New Issue
Block a user