mirror of
https://github.com/opentx/opentx.git
synced 2025-07-19 14:25:11 +03:00
[Radio] Adjust value limits for mix sources and update UI for LSs, CFs & telem. (#5445)
* [firmware][ARM] Adjust some value limits for mix sources and update editing UI for LSs, CFs, & telem. bars: * Increase timer limits to +/-8:59:59 when used with LSs, CFs, & bars; * Increase Lua script output limits to +/-30K; * Trim limits based on extended limit model setting; * Limit TX voltage to 25.5; * Limit TX time comparison value to 29:59m; * Use proper GVar limits (user-configured), display precision, & unit in LSs & telem. bars; * Display timer values properly with hours (instead of mmm:ss). * [firmware] getTimerString() would fail with times >= 100min if hours weren't shown. * Fix builds w/out GVars.
This commit is contained in:
parent
716a91fc0c
commit
b69f36afe4
11 changed files with 134 additions and 101 deletions
|
@ -193,18 +193,18 @@ void menuModelDisplay(event_t event)
|
||||||
|
|
||||||
if (IS_BARS_SCREEN(screenIndex)) {
|
if (IS_BARS_SCREEN(screenIndex)) {
|
||||||
FrSkyBarData & bar = g_model.frsky.screens[screenIndex].bars[lineIndex];
|
FrSkyBarData & bar = g_model.frsky.screens[screenIndex].bars[lineIndex];
|
||||||
source_t barSource = bar.source;
|
drawSource(DISPLAY_COL1, y, bar.source, menuHorizontalPosition==0 ? attr : 0);
|
||||||
drawSource(DISPLAY_COL1, y, barSource, menuHorizontalPosition==0 ? attr : 0);
|
int16_t barMax, barMin;
|
||||||
int barMax = getMaximumValue(barSource);
|
LcdFlags lf = LEFT;
|
||||||
int barMin = -barMax;
|
getMixSrcRange(bar.source, barMin, barMax, &lf);
|
||||||
if (barSource) {
|
if (bar.source) {
|
||||||
if (barSource <= MIXSRC_LAST_CH) {
|
if (bar.source <= MIXSRC_LAST_CH) {
|
||||||
drawSourceCustomValue(DISPLAY_COL2, y, barSource, calc100toRESX(bar.barMin), (menuHorizontalPosition==1 ? attr : 0) | LEFT);
|
drawSourceCustomValue(DISPLAY_COL2, y, bar.source, calc100toRESX(bar.barMin), (menuHorizontalPosition==1 ? attr : 0) | lf);
|
||||||
drawSourceCustomValue(DISPLAY_COL3, y, barSource, calc100toRESX(bar.barMax), (menuHorizontalPosition==2 ? attr : 0) | LEFT);
|
drawSourceCustomValue(DISPLAY_COL3, y, bar.source, calc100toRESX(bar.barMax), (menuHorizontalPosition==2 ? attr : 0) | lf);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
drawSourceCustomValue(DISPLAY_COL2, y, barSource, bar.barMin, (menuHorizontalPosition==1 ? attr : 0) | LEFT);
|
drawSourceCustomValue(DISPLAY_COL2, y, bar.source, bar.barMin, (menuHorizontalPosition==1 ? attr : 0) | lf);
|
||||||
drawSourceCustomValue(DISPLAY_COL3, y, barSource, bar.barMax, (menuHorizontalPosition==2 ? attr : 0) | LEFT);
|
drawSourceCustomValue(DISPLAY_COL3, y, bar.source, bar.barMax, (menuHorizontalPosition==2 ? attr : 0) | lf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (attr) {
|
else if (attr) {
|
||||||
|
@ -213,9 +213,9 @@ void menuModelDisplay(event_t event)
|
||||||
if (attr && s_editMode>0) {
|
if (attr && s_editMode>0) {
|
||||||
switch (menuHorizontalPosition) {
|
switch (menuHorizontalPosition) {
|
||||||
case 0:
|
case 0:
|
||||||
bar.source = checkIncDec(event, barSource, 0, MIXSRC_LAST_TELEM, EE_MODEL|INCDEC_SOURCE|NO_INCDEC_MARKS, isSourceAvailable);
|
bar.source = checkIncDec(event, bar.source, 0, MIXSRC_LAST_TELEM, EE_MODEL|INCDEC_SOURCE|NO_INCDEC_MARKS, isSourceAvailable);
|
||||||
if (checkIncDec_Ret) {
|
if (checkIncDec_Ret) {
|
||||||
if (barSource <= MIXSRC_LAST_CH) {
|
if (bar.source <= MIXSRC_LAST_CH) {
|
||||||
bar.barMin = -100;
|
bar.barMin = -100;
|
||||||
bar.barMax = 100;
|
bar.barMax = 100;
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,7 +130,7 @@ void menuModelLogicalSwitchOne(event_t event)
|
||||||
{
|
{
|
||||||
INCDEC_DECLARE_VARS(EE_MODEL);
|
INCDEC_DECLARE_VARS(EE_MODEL);
|
||||||
lcdDrawTextAlignedLeft(y, STR_V2);
|
lcdDrawTextAlignedLeft(y, STR_V2);
|
||||||
int v2_min=0, v2_max=MIXSRC_LAST_TELEM;
|
int16_t v2_min = 0, v2_max = MIXSRC_LAST_TELEM;
|
||||||
if (cstate == LS_FAMILY_BOOL || cstate == LS_FAMILY_STICKY) {
|
if (cstate == LS_FAMILY_BOOL || cstate == LS_FAMILY_STICKY) {
|
||||||
drawSwitch(CSWONE_2ND_COLUMN, y, cs->v2, attr);
|
drawSwitch(CSWONE_2ND_COLUMN, y, cs->v2, attr);
|
||||||
v2_min = SWSRC_OFF+1; v2_max = SWSRC_ON-1;
|
v2_min = SWSRC_OFF+1; v2_max = SWSRC_ON-1;
|
||||||
|
@ -180,13 +180,9 @@ void menuModelLogicalSwitchOne(event_t event)
|
||||||
else
|
else
|
||||||
#endif // TELEMETRY_FRSKY
|
#endif // TELEMETRY_FRSKY
|
||||||
{
|
{
|
||||||
v2_max = getMaximumValue(v1_val); v2_min = -v2_max;
|
LcdFlags lf = attr | LEFT;
|
||||||
if (v1_val <= MIXSRC_LAST_CH) {
|
getMixSrcRange(v1_val, v2_min, v2_max, &lf);
|
||||||
drawSourceCustomValue(CSWONE_2ND_COLUMN, y, v1_val, calc100toRESX(cs->v2), LEFT|attr);
|
drawSourceCustomValue(CSWONE_2ND_COLUMN, y, v1_val, (v1_val <= MIXSRC_LAST_CH ? calc100toRESX(cs->v2) : cs->v2), lf);
|
||||||
}
|
|
||||||
else {
|
|
||||||
drawSourceCustomValue(CSWONE_2ND_COLUMN, y, v1_val, cs->v2, LEFT|attr);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -322,13 +318,11 @@ void menuModelLogicalSwitches(event_t event)
|
||||||
if (v1 >= MIXSRC_FIRST_TELEM) {
|
if (v1 >= MIXSRC_FIRST_TELEM) {
|
||||||
drawSourceCustomValue(CSW_3RD_COLUMN, y, v1, convertLswTelemValue(cs), LEFT);
|
drawSourceCustomValue(CSW_3RD_COLUMN, y, v1, convertLswTelemValue(cs), LEFT);
|
||||||
}
|
}
|
||||||
|
else if (v1 <= MIXSRC_LAST_CH) {
|
||||||
|
drawSourceCustomValue(CSW_3RD_COLUMN, y, v1, calc100toRESX(cs->v2), LEFT);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
if (v1 <= MIXSRC_LAST_CH) {
|
drawSourceCustomValue(CSW_3RD_COLUMN, y, v1, cs->v2, LEFT | (v1 != MIXSRC_TX_TIME ? TIMEHOUR : 0));
|
||||||
drawSourceCustomValue(CSW_3RD_COLUMN, y, v1, calc100toRESX(cs->v2), LEFT);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
drawSourceCustomValue(CSW_3RD_COLUMN, y, v1, cs->v2, LEFT);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -298,10 +298,12 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||||
}
|
}
|
||||||
#if defined(OVERRIDE_CHANNEL_FUNCTION)
|
#if defined(OVERRIDE_CHANNEL_FUNCTION)
|
||||||
else if (func == FUNC_OVERRIDE_CHANNEL) {
|
else if (func == FUNC_OVERRIDE_CHANNEL) {
|
||||||
#if !defined(CPUARM)
|
#if defined(CPUARM)
|
||||||
|
getMixSrcRange(MIXSRC_FIRST_CH, val_min, val_max);
|
||||||
|
#else
|
||||||
val_displayed = (int8_t)CFN_PARAM(cfn);
|
val_displayed = (int8_t)CFN_PARAM(cfn);
|
||||||
#endif
|
|
||||||
val_min = -LIMIT_EXT_PERCENT; val_max = +LIMIT_EXT_PERCENT;
|
val_min = -LIMIT_EXT_PERCENT; val_max = +LIMIT_EXT_PERCENT;
|
||||||
|
#endif
|
||||||
lcdDrawNumber(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT);
|
lcdDrawNumber(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT);
|
||||||
}
|
}
|
||||||
#endif // OVERRIDE_CHANNEL_FUNCTION
|
#endif // OVERRIDE_CHANNEL_FUNCTION
|
||||||
|
@ -311,7 +313,7 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||||
lcdDrawTextAtIndex(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, "\004Int.Ext.", CFN_PARAM(cfn), attr);
|
lcdDrawTextAtIndex(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, "\004Int.Ext.", CFN_PARAM(cfn), attr);
|
||||||
}
|
}
|
||||||
else if (func == FUNC_SET_TIMER) {
|
else if (func == FUNC_SET_TIMER) {
|
||||||
val_max = 539*60+59;
|
getMixSrcRange(MIXSRC_FIRST_TIMER, val_min, val_max);
|
||||||
drawTimer(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT, attr);
|
drawTimer(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT, attr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -400,7 +402,7 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||||
drawSource(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr);
|
drawSource(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr);
|
||||||
INCDEC_ENABLE_CHECK(functionsContext == &globalFunctionsContext ? isSourceAvailableInGlobalFunctions : isSourceAvailable);
|
INCDEC_ENABLE_CHECK(functionsContext == &globalFunctionsContext ? isSourceAvailableInGlobalFunctions : isSourceAvailable);
|
||||||
}
|
}
|
||||||
#endif
|
#endif // CPUARM
|
||||||
#if defined(SDCARD)
|
#if defined(SDCARD)
|
||||||
else if (func == FUNC_LOGS) {
|
else if (func == FUNC_LOGS) {
|
||||||
if (val_displayed) {
|
if (val_displayed) {
|
||||||
|
@ -417,8 +419,13 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||||
switch (CFN_GVAR_MODE(cfn)) {
|
switch (CFN_GVAR_MODE(cfn)) {
|
||||||
case FUNC_ADJUST_GVAR_CONSTANT:
|
case FUNC_ADJUST_GVAR_CONSTANT:
|
||||||
val_displayed = (int16_t)CFN_PARAM(cfn);
|
val_displayed = (int16_t)CFN_PARAM(cfn);
|
||||||
|
#if defined(CPUARM)
|
||||||
|
getMixSrcRange(CFN_GVAR_INDEX(cfn) + MIXSRC_FIRST_GVAR, val_min, val_max);
|
||||||
|
drawGVarValue(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, CFN_GVAR_INDEX(cfn), val_displayed, attr|LEFT);
|
||||||
|
#else
|
||||||
val_min = -CFN_GVAR_CST_MAX; val_max = +CFN_GVAR_CST_MAX;
|
val_min = -CFN_GVAR_CST_MAX; val_max = +CFN_GVAR_CST_MAX;
|
||||||
lcdDrawNumber(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT);
|
lcdDrawNumber(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT);
|
||||||
|
#endif // CPUARM
|
||||||
break;
|
break;
|
||||||
case FUNC_ADJUST_GVAR_SOURCE:
|
case FUNC_ADJUST_GVAR_SOURCE:
|
||||||
val_max = MIXSRC_LAST_CH;
|
val_max = MIXSRC_LAST_CH;
|
||||||
|
@ -433,17 +440,14 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||||
drawStringWithIndex(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, STR_GV, val_displayed+1, attr);
|
drawStringWithIndex(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, STR_GV, val_displayed+1, attr);
|
||||||
break;
|
break;
|
||||||
default: // FUNC_ADJUST_GVAR_INC
|
default: // FUNC_ADJUST_GVAR_INC
|
||||||
#if defined(PCBX7)
|
#if defined(CPUARM)
|
||||||
val_min = -100; val_max = +100;
|
getMixSrcRange(CFN_GVAR_INDEX(cfn) + MIXSRC_FIRST_GVAR, val_min, val_max);
|
||||||
if (val_displayed < 0)
|
lcdDrawText(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, (val_displayed < 0 ? "-= " : "+= "), attr);
|
||||||
lcdDrawText(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, "-= ", attr);
|
|
||||||
else
|
|
||||||
lcdDrawText(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, "+= ", attr);
|
|
||||||
drawGVarValue(lcdNextPos, y, CFN_GVAR_INDEX(cfn), abs(val_displayed), attr|LEFT);
|
drawGVarValue(lcdNextPos, y, CFN_GVAR_INDEX(cfn), abs(val_displayed), attr|LEFT);
|
||||||
#else
|
#else
|
||||||
val_max = 1;
|
val_max = 1;
|
||||||
lcdDrawTextAtIndex(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, PSTR("\003-=1+=1"), val_displayed, attr);
|
lcdDrawTextAtIndex(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, PSTR("\003-=1+=1"), val_displayed, attr);
|
||||||
#endif // PCBX7
|
#endif // CPUARM
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -195,18 +195,18 @@ void menuModelDisplay(event_t event)
|
||||||
|
|
||||||
if (IS_BARS_SCREEN(screenIndex)) {
|
if (IS_BARS_SCREEN(screenIndex)) {
|
||||||
FrSkyBarData & bar = g_model.frsky.screens[screenIndex].bars[lineIndex];
|
FrSkyBarData & bar = g_model.frsky.screens[screenIndex].bars[lineIndex];
|
||||||
source_t barSource = bar.source;
|
drawSource(DISPLAY_COL1, y, bar.source, menuHorizontalPosition==0 ? attr : 0);
|
||||||
drawSource(DISPLAY_COL1, y, barSource, menuHorizontalPosition==0 ? attr : 0);
|
int16_t barMax, barMin;
|
||||||
int barMax = getMaximumValue(barSource);
|
LcdFlags lf = LEFT;
|
||||||
int barMin = -barMax;
|
getMixSrcRange(bar.source, barMin, barMax, &lf);
|
||||||
if (barSource) {
|
if (bar.source) {
|
||||||
if (barSource <= MIXSRC_LAST_CH) {
|
if (bar.source <= MIXSRC_LAST_CH) {
|
||||||
drawSourceCustomValue(DISPLAY_COL2, y, barSource, calc100toRESX(bar.barMin), (menuHorizontalPosition==1 ? attr : 0) | LEFT);
|
drawSourceCustomValue(DISPLAY_COL2, y, bar.source, calc100toRESX(bar.barMin), (menuHorizontalPosition==1 ? attr : 0) | lf);
|
||||||
drawSourceCustomValue(DISPLAY_COL3, y, barSource, calc100toRESX(bar.barMax), (menuHorizontalPosition==2 ? attr : 0) | LEFT);
|
drawSourceCustomValue(DISPLAY_COL3, y, bar.source, calc100toRESX(bar.barMax), (menuHorizontalPosition==2 ? attr : 0) | lf);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
drawSourceCustomValue(DISPLAY_COL2, y, barSource, bar.barMin, (menuHorizontalPosition==1 ? attr : 0) | LEFT);
|
drawSourceCustomValue(DISPLAY_COL2, y, bar.source, bar.barMin, (menuHorizontalPosition==1 ? attr : 0) | lf);
|
||||||
drawSourceCustomValue(DISPLAY_COL3, y, barSource, bar.barMax, (menuHorizontalPosition==2 ? attr : 0) | LEFT);
|
drawSourceCustomValue(DISPLAY_COL3, y, bar.source, bar.barMax, (menuHorizontalPosition==2 ? attr : 0) | lf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (attr) {
|
else if (attr) {
|
||||||
|
@ -215,9 +215,9 @@ void menuModelDisplay(event_t event)
|
||||||
if (attr && s_editMode>0) {
|
if (attr && s_editMode>0) {
|
||||||
switch (menuHorizontalPosition) {
|
switch (menuHorizontalPosition) {
|
||||||
case 0:
|
case 0:
|
||||||
bar.source = checkIncDec(event, barSource, 0, MIXSRC_LAST_TELEM, EE_MODEL|INCDEC_SOURCE|NO_INCDEC_MARKS, isSourceAvailable);
|
bar.source = checkIncDec(event, bar.source, 0, MIXSRC_LAST_TELEM, EE_MODEL|INCDEC_SOURCE|NO_INCDEC_MARKS, isSourceAvailable);
|
||||||
if (checkIncDec_Ret) {
|
if (checkIncDec_Ret) {
|
||||||
if (barSource <= MIXSRC_LAST_CH) {
|
if (bar.source <= MIXSRC_LAST_CH) {
|
||||||
bar.barMin = -100;
|
bar.barMin = -100;
|
||||||
bar.barMax = 100;
|
bar.barMax = 100;
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,9 +115,10 @@ void menuModelLogicalSwitches(event_t event)
|
||||||
|
|
||||||
// CSW params
|
// CSW params
|
||||||
unsigned int cstate = lswFamily(cs->func);
|
unsigned int cstate = lswFamily(cs->func);
|
||||||
int v1_val=cs->v1, v1_min=0, v1_max=MIXSRC_LAST_TELEM;
|
int v1_val = cs->v1;
|
||||||
int v2_min=0, v2_max=MIXSRC_LAST_TELEM;
|
int16_t v1_min = 0, v1_max = MIXSRC_LAST_TELEM;
|
||||||
int v3_min=-1, v3_max=100;
|
int16_t v2_min = 0, v2_max = MIXSRC_LAST_TELEM;
|
||||||
|
int16_t v3_min =-1, v3_max = 100;
|
||||||
|
|
||||||
if (cstate == LS_FAMILY_BOOL || cstate == LS_FAMILY_STICKY) {
|
if (cstate == LS_FAMILY_BOOL || cstate == LS_FAMILY_STICKY) {
|
||||||
drawSwitch(CSW_2ND_COLUMN, y, cs->v1, attr1);
|
drawSwitch(CSW_2ND_COLUMN, y, cs->v1, attr1);
|
||||||
|
@ -168,14 +169,9 @@ void menuModelLogicalSwitches(event_t event)
|
||||||
INCDEC_SET_FLAG(EE_MODEL);
|
INCDEC_SET_FLAG(EE_MODEL);
|
||||||
INCDEC_ENABLE_CHECK(NULL);
|
INCDEC_ENABLE_CHECK(NULL);
|
||||||
}
|
}
|
||||||
v2_max = getMaximumValue(v1_val);
|
LcdFlags lf = attr2 | LEFT;
|
||||||
v2_min = - v2_max;
|
getMixSrcRange(v1_val, v2_min, v2_max, &lf);
|
||||||
if (v1_val <= MIXSRC_LAST_CH) {
|
drawSourceCustomValue(CSW_3RD_COLUMN, y, v1_val, (v1_val <= MIXSRC_LAST_CH ? calc100toRESX(cs->v2) : cs->v2), lf);
|
||||||
drawSourceCustomValue(CSW_3RD_COLUMN, y, v1_val, calc100toRESX(cs->v2), LEFT|attr2);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
drawSourceCustomValue(CSW_3RD_COLUMN, y, v1_val, cs->v2, LEFT|attr2);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// CSW AND switch
|
// CSW AND switch
|
||||||
|
|
|
@ -258,7 +258,7 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||||
}
|
}
|
||||||
#if defined(OVERRIDE_CHANNEL_FUNCTION)
|
#if defined(OVERRIDE_CHANNEL_FUNCTION)
|
||||||
else if (func == FUNC_OVERRIDE_CHANNEL) {
|
else if (func == FUNC_OVERRIDE_CHANNEL) {
|
||||||
val_min = -LIMIT_EXT_PERCENT; val_max = +LIMIT_EXT_PERCENT;
|
getMixSrcRange(MIXSRC_FIRST_CH, val_min, val_max);
|
||||||
lcdDrawNumber(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT);
|
lcdDrawNumber(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -267,7 +267,7 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||||
lcdDrawTextAtIndex(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, "\004Int.Ext.", CFN_PARAM(cfn), attr);
|
lcdDrawTextAtIndex(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, "\004Int.Ext.", CFN_PARAM(cfn), attr);
|
||||||
}
|
}
|
||||||
else if (func == FUNC_SET_TIMER) {
|
else if (func == FUNC_SET_TIMER) {
|
||||||
val_max = 539*60+59; //8:59:59
|
getMixSrcRange(MIXSRC_FIRST_TIMER, val_min, val_max);
|
||||||
drawTimer(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT|TIMEHOUR, attr);
|
drawTimer(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT|TIMEHOUR, attr);
|
||||||
}
|
}
|
||||||
else if (func == FUNC_PLAY_SOUND) {
|
else if (func == FUNC_PLAY_SOUND) {
|
||||||
|
@ -345,11 +345,9 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||||
switch (CFN_GVAR_MODE(cfn)) {
|
switch (CFN_GVAR_MODE(cfn)) {
|
||||||
case FUNC_ADJUST_GVAR_CONSTANT:
|
case FUNC_ADJUST_GVAR_CONSTANT:
|
||||||
{
|
{
|
||||||
uint8_t gvar_index = CFN_GVAR_INDEX(cfn);
|
|
||||||
val_displayed = (int16_t)CFN_PARAM(cfn);
|
val_displayed = (int16_t)CFN_PARAM(cfn);
|
||||||
val_min = max<int16_t>(CFN_GVAR_CST_MIN, MODEL_GVAR_MIN(gvar_index));
|
getMixSrcRange(CFN_GVAR_INDEX(cfn) + MIXSRC_FIRST_GVAR, val_min, val_max);
|
||||||
val_max = min<int16_t>(CFN_GVAR_CST_MAX, MODEL_GVAR_MAX(gvar_index));
|
drawGVarValue(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, CFN_GVAR_INDEX(cfn), val_displayed, attr|LEFT);
|
||||||
drawGVarValue(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, gvar_index, val_displayed, attr|LEFT);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FUNC_ADJUST_GVAR_SOURCE:
|
case FUNC_ADJUST_GVAR_SOURCE:
|
||||||
|
@ -365,12 +363,10 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||||
drawStringWithIndex(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, STR_GV, val_displayed+1, attr);
|
drawStringWithIndex(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, STR_GV, val_displayed+1, attr);
|
||||||
break;
|
break;
|
||||||
default: // FUNC_ADJUST_GVAR_INC
|
default: // FUNC_ADJUST_GVAR_INC
|
||||||
val_min = -100; val_max = +100;
|
getMixSrcRange(CFN_GVAR_INDEX(cfn) + MIXSRC_FIRST_GVAR, val_min, val_max);
|
||||||
if (val_displayed < 0)
|
lcdDrawText(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, (val_displayed < 0 ? "-= " : "+= "), attr);
|
||||||
lcdDrawText(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, "-= ", attr);
|
|
||||||
else
|
|
||||||
lcdDrawText(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, "+= ", attr);
|
|
||||||
drawGVarValue(lcdNextPos, y, CFN_GVAR_INDEX(cfn), abs(val_displayed), attr|LEFT);
|
drawGVarValue(lcdNextPos, y, CFN_GVAR_INDEX(cfn), abs(val_displayed), attr|LEFT);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -119,9 +119,10 @@ bool menuModelLogicalSwitches(event_t event)
|
||||||
|
|
||||||
// CSW params
|
// CSW params
|
||||||
cstate = lswFamily(cs->func);
|
cstate = lswFamily(cs->func);
|
||||||
int v1_val=cs->v1, v1_min=0, v1_max=MIXSRC_LAST_TELEM;
|
int v1_val = cs->v1;
|
||||||
int v2_min=0, v2_max=MIXSRC_LAST_TELEM;
|
int16_t v1_min = 0, v1_max = MIXSRC_LAST_TELEM;
|
||||||
int v3_min=-1, v3_max=100;
|
int16_t v2_min = 0, v2_max = MIXSRC_LAST_TELEM;
|
||||||
|
int16_t v3_min =-1, v3_max = 100;
|
||||||
|
|
||||||
if (cstate == LS_FAMILY_BOOL || cstate == LS_FAMILY_STICKY) {
|
if (cstate == LS_FAMILY_BOOL || cstate == LS_FAMILY_STICKY) {
|
||||||
drawSwitch(CSW_2ND_COLUMN, y, cs->v1, attr1);
|
drawSwitch(CSW_2ND_COLUMN, y, cs->v1, attr1);
|
||||||
|
@ -172,9 +173,9 @@ bool menuModelLogicalSwitches(event_t event)
|
||||||
INCDEC_SET_FLAG(EE_MODEL);
|
INCDEC_SET_FLAG(EE_MODEL);
|
||||||
INCDEC_ENABLE_CHECK(NULL);
|
INCDEC_ENABLE_CHECK(NULL);
|
||||||
}
|
}
|
||||||
v2_max = getMaximumValue(v1_val);
|
LcdFlags lf = attr2 | LEFT;
|
||||||
v2_min = -v2_max;
|
getMixSrcRange(v1_val, v2_min, v2_max, &lf);
|
||||||
drawSourceCustomValue(CSW_3RD_COLUMN, y, v1_val, v1_val <= MIXSRC_LAST_CH ? calc100toRESX(cs->v2) : cs->v2, LEFT|attr2);
|
drawSourceCustomValue(CSW_3RD_COLUMN, y, v1_val, (v1_val <= MIXSRC_LAST_CH ? calc100toRESX(cs->v2) : cs->v2), lf);
|
||||||
}
|
}
|
||||||
|
|
||||||
// CSW AND switch
|
// CSW AND switch
|
||||||
|
|
|
@ -259,7 +259,7 @@ bool menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||||
}
|
}
|
||||||
#if defined(OVERRIDE_CHANNEL_FUNCTION)
|
#if defined(OVERRIDE_CHANNEL_FUNCTION)
|
||||||
else if (func == FUNC_OVERRIDE_CHANNEL) {
|
else if (func == FUNC_OVERRIDE_CHANNEL) {
|
||||||
val_min = -LIMIT_EXT_PERCENT; val_max = +LIMIT_EXT_PERCENT;
|
getMixSrcRange(MIXSRC_FIRST_CH, val_min, val_max);
|
||||||
lcdDrawNumber(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT);
|
lcdDrawNumber(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -270,9 +270,8 @@ bool menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else if (func == FUNC_SET_TIMER) {
|
else if (func == FUNC_SET_TIMER) {
|
||||||
// TODO 539 ? TIMEHOUR ?
|
getMixSrcRange(MIXSRC_FIRST_TIMER, val_min, val_max);
|
||||||
val_max = 59*60+59;
|
drawTimer(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT|TIMEHOUR);
|
||||||
drawTimer(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT);
|
|
||||||
}
|
}
|
||||||
else if (func == FUNC_PLAY_SOUND) {
|
else if (func == FUNC_PLAY_SOUND) {
|
||||||
val_max = AU_SPECIAL_SOUND_LAST-AU_SPECIAL_SOUND_FIRST-1;
|
val_max = AU_SPECIAL_SOUND_LAST-AU_SPECIAL_SOUND_FIRST-1;
|
||||||
|
@ -341,11 +340,9 @@ bool menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||||
switch (CFN_GVAR_MODE(cfn)) {
|
switch (CFN_GVAR_MODE(cfn)) {
|
||||||
case FUNC_ADJUST_GVAR_CONSTANT:
|
case FUNC_ADJUST_GVAR_CONSTANT:
|
||||||
{
|
{
|
||||||
uint8_t gvar_index = CFN_GVAR_INDEX(cfn);
|
val_displayed = (int16_t)CFN_PARAM(cfn);
|
||||||
val_displayed = (int16_t) CFN_PARAM(cfn);
|
getMixSrcRange(CFN_GVAR_INDEX(cfn) + MIXSRC_FIRST_GVAR, val_min, val_max);
|
||||||
val_min = max<int16_t>(CFN_GVAR_CST_MIN, MODEL_GVAR_MIN(gvar_index));
|
drawGVarValue(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, CFN_GVAR_INDEX(cfn), val_displayed, attr|LEFT);
|
||||||
val_max = min<int16_t>(CFN_GVAR_CST_MAX, MODEL_GVAR_MAX(gvar_index));
|
|
||||||
drawGVarValue(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, gvar_index, val_displayed, attr|LEFT);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FUNC_ADJUST_GVAR_SOURCE:
|
case FUNC_ADJUST_GVAR_SOURCE:
|
||||||
|
@ -361,11 +358,8 @@ bool menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||||
drawStringWithIndex(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, STR_GV, val_displayed+1, attr);
|
drawStringWithIndex(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, STR_GV, val_displayed+1, attr);
|
||||||
break;
|
break;
|
||||||
default: // FUNC_ADJUST_GVAR_INC
|
default: // FUNC_ADJUST_GVAR_INC
|
||||||
val_min = -100; val_max = +100;
|
getMixSrcRange(CFN_GVAR_INDEX(cfn) + MIXSRC_FIRST_GVAR, val_min, val_max);
|
||||||
if (val_displayed < 0)
|
lcdDrawText(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, (val_displayed < 0 ? "-= " : "+= "), attr);
|
||||||
lcdDrawText(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, "-= ", attr);
|
|
||||||
else
|
|
||||||
lcdDrawText(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, "+= ", attr);
|
|
||||||
drawGVarValue(lcdNextPos, y, CFN_GVAR_INDEX(cfn), abs(val_displayed), attr|LEFT);
|
drawGVarValue(lcdNextPos, y, CFN_GVAR_INDEX(cfn), abs(val_displayed), attr|LEFT);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -142,6 +142,11 @@ void drawSourceCustomValue(coord_t x, coord_t y, source_t source, int32_t value,
|
||||||
lcdDrawNumber(lcdNextPos, y, gpsData.numSat, flags);
|
lcdDrawNumber(lcdNextPos, y, gpsData.numSat, flags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#if defined(GVARS)
|
||||||
|
else if (source >= MIXSRC_FIRST_GVAR && source <= MIXSRC_LAST_GVAR) {
|
||||||
|
drawGVarValue(x, y, source - MIXSRC_FIRST_GVAR, value, flags);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
else if (source < MIXSRC_FIRST_CH) {
|
else if (source < MIXSRC_FIRST_CH) {
|
||||||
lcdDrawNumber(x, y, calcRESXto100(value), flags);
|
lcdDrawNumber(x, y, calcRESXto100(value), flags);
|
||||||
|
|
|
@ -1016,17 +1016,55 @@ extern uint16_t BandGap;
|
||||||
int expo(int x, int k);
|
int expo(int x, int k);
|
||||||
|
|
||||||
#if defined(CPUARM)
|
#if defined(CPUARM)
|
||||||
inline int getMaximumValue(int source)
|
inline void getMixSrcRange(const int source, int16_t & valMin, int16_t & valMax, LcdFlags * flags = 0)
|
||||||
{
|
{
|
||||||
if (source < MIXSRC_FIRST_CH)
|
if (source >= MIXSRC_FIRST_TRIM && source <= MIXSRC_LAST_TRIM) {
|
||||||
return 100;
|
valMax = g_model.extendedTrims ? TRIM_EXTENDED_MAX : TRIM_MAX;
|
||||||
else if (source <= MIXSRC_LAST_CH)
|
valMin = -valMax;
|
||||||
return g_model.extendedLimits ? 150 : 100;
|
|
||||||
else if (source >= MIXSRC_FIRST_TIMER && source <= MIXSRC_LAST_TIMER)
|
|
||||||
return (23*60)+59;
|
|
||||||
else
|
|
||||||
return 30000;
|
|
||||||
}
|
}
|
||||||
|
#if defined(LUA_INPUTS)
|
||||||
|
else if (source >= MIXSRC_FIRST_LUA && source <= MIXSRC_LAST_LUA) {
|
||||||
|
valMax = 30000;
|
||||||
|
valMin = -valMax;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
else if (source < MIXSRC_FIRST_CH) {
|
||||||
|
valMax = 100;
|
||||||
|
valMin = -valMax;
|
||||||
|
}
|
||||||
|
else if (source <= MIXSRC_LAST_CH) {
|
||||||
|
valMax = g_model.extendedLimits ? LIMIT_EXT_PERCENT : 100;
|
||||||
|
valMin = -valMax;
|
||||||
|
}
|
||||||
|
#if defined(GVARS)
|
||||||
|
else if (source >= MIXSRC_FIRST_GVAR && source <= MIXSRC_LAST_GVAR) {
|
||||||
|
valMax = min<int>(CFN_GVAR_CST_MAX, MODEL_GVAR_MAX(source-MIXSRC_FIRST_GVAR));
|
||||||
|
valMin = max<int>(CFN_GVAR_CST_MIN, MODEL_GVAR_MIN(source-MIXSRC_FIRST_GVAR));
|
||||||
|
if (flags && g_model.gvars[source-MIXSRC_FIRST_GVAR].prec)
|
||||||
|
*flags |= PREC1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
else if (source == MIXSRC_TX_VOLTAGE) {
|
||||||
|
valMax = 255;
|
||||||
|
valMin = 0;
|
||||||
|
if (flags)
|
||||||
|
*flags |= PREC1;
|
||||||
|
}
|
||||||
|
else if (source == MIXSRC_TX_TIME) {
|
||||||
|
valMax = 23 * 60 + 59;
|
||||||
|
valMin = 0;
|
||||||
|
}
|
||||||
|
else if (source >= MIXSRC_FIRST_TIMER && source <= MIXSRC_LAST_TIMER) {
|
||||||
|
valMax = 9 * 60 * 60 - 1;
|
||||||
|
valMin = -valMax;
|
||||||
|
if (flags)
|
||||||
|
*flags |= TIMEHOUR;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
valMax = 30000;
|
||||||
|
valMin = -valMax;
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Curves
|
// Curves
|
||||||
|
|
|
@ -179,6 +179,11 @@ char * getTimerString(char * dest, putstime_t tme, uint8_t hours)
|
||||||
qr.quot = qr2.rem;
|
qr.quot = qr2.rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!hours && qr.quot > 99) {
|
||||||
|
*s++ = '0' + (qr.quot / 100);
|
||||||
|
qr.quot = qr.quot % 100;
|
||||||
|
}
|
||||||
|
|
||||||
*s++ = '0' + (qr.quot / 10);
|
*s++ = '0' + (qr.quot / 10);
|
||||||
*s++ = '0' + (qr.quot % 10);
|
*s++ = '0' + (qr.quot % 10);
|
||||||
*s++ = ':';
|
*s++ = ':';
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue