fix(radio): YAML timer handling (#3949)
* fix: YAML timer handling * chore: improve YAML set timer handling * chore: improve timer handling * feat: only offer defined timer for set and reset functions * feat: only offer defined timer for set and reset functions (bw) * chore: cosmetics
This commit is contained in:
@@ -247,7 +247,7 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||
else if (func == FUNC_SET_TIMER) {
|
||||
maxParam = MAX_TIMERS - 1;
|
||||
lcdDrawTextAtIndex(lcdNextPos, y, STR_VFSWRESET, CFN_TIMER_INDEX(cfn), attr);
|
||||
if (active) CFN_TIMER_INDEX(cfn) = checkIncDec(event, CFN_TIMER_INDEX(cfn), 0, maxParam, eeFlags);
|
||||
if (active) CFN_TIMER_INDEX(cfn) = checkIncDec(event, CFN_TIMER_INDEX(cfn), 0, maxParam, eeFlags, isTimerSourceAvailable);
|
||||
break;
|
||||
}
|
||||
else if (attr) {
|
||||
|
||||
@@ -714,7 +714,7 @@ void drawSource(coord_t x, coord_t y, uint32_t idx, LcdFlags att)
|
||||
lcdDrawSizedText(x, y, g_model.timers[idx].name, LEN_TIMER_NAME, att);
|
||||
}
|
||||
else {
|
||||
drawStringWithIndex(x, y, STR_SRC_TIMER, idx, att);
|
||||
drawStringWithIndex(x, y, STR_SRC_TIMER, idx + 1, att);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -239,7 +239,7 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||
else if (func == FUNC_SET_TIMER) {
|
||||
maxParam = TIMERS-1;
|
||||
drawStringWithIndex(lcdNextPos, y, STR_TIMER, CFN_TIMER_INDEX(cfn)+1, attr);
|
||||
if (active) CFN_TIMER_INDEX(cfn) = checkIncDec(event, CFN_TIMER_INDEX(cfn), 0, maxParam, eeFlags);
|
||||
if (active) CFN_TIMER_INDEX(cfn) = checkIncDec(event, CFN_TIMER_INDEX(cfn), 0, maxParam, eeFlags, isTimerSourceAvailable);
|
||||
break;
|
||||
}
|
||||
else if (attr) {
|
||||
|
||||
@@ -207,8 +207,11 @@ class SpecialFunctionEditPage : public Page
|
||||
timerchoice->setTextHandler([](int32_t value) {
|
||||
return std::string(STR_TIMER) + std::to_string(value + 1);
|
||||
});
|
||||
line = specialFunctionOneWindow->newLine(&grid);
|
||||
timerchoice->setAvailableHandler([=](int value) {
|
||||
return isTimerSourceAvailable(value);
|
||||
});
|
||||
|
||||
line = specialFunctionOneWindow->newLine(&grid);
|
||||
new StaticText(line, rect_t{}, STR_VALUE, 0, COLOR_THEME_PRIMARY1);
|
||||
new TimeEdit(line, rect_t{}, 0,
|
||||
9 * 60 * 60 - 1, GET_SET_DEFAULT(CFN_PARAM(cfn)));
|
||||
@@ -619,7 +622,7 @@ class SpecialFunctionButton : public Button
|
||||
break;
|
||||
|
||||
case FUNC_SET_TIMER:
|
||||
sprintf(s+strlen(s), "%s%d = %s", STR_TIMER, CFN_TIMER_INDEX(cfn) + 1, getTimerString(CFN_PARAM(cfn), {.options = SHOW_TIME}));
|
||||
sprintf(s+strlen(s), "%s%d = %s", STR_SRC_TIMER, CFN_TIMER_INDEX(cfn) + 1, getTimerString(CFN_PARAM(cfn), {.options = SHOW_TIME}));
|
||||
break;
|
||||
|
||||
case FUNC_SET_FAILSAFE:
|
||||
|
||||
@@ -608,6 +608,12 @@ bool isAssignableFunctionAvailable(int function)
|
||||
}
|
||||
#endif
|
||||
|
||||
bool isTimerSourceAvailable(int index)
|
||||
{
|
||||
TimerData *timer = &g_model.timers[index];
|
||||
return timer->mode != 0;
|
||||
}
|
||||
|
||||
bool isSourceAvailableInGlobalResetSpecialFunction(int index)
|
||||
{
|
||||
if (index >= FUNC_RESET_PARAM_FIRST_TELEM)
|
||||
@@ -622,16 +628,14 @@ bool isSourceAvailableInResetSpecialFunction(int index)
|
||||
TelemetrySensor & telemetrySensor = g_model.telemetrySensors[index-FUNC_RESET_PARAM_FIRST_TELEM];
|
||||
return telemetrySensor.isAvailable();
|
||||
}
|
||||
#if TIMERS < 3
|
||||
else if (index == FUNC_RESET_TIMER3) {
|
||||
return false;
|
||||
else if (index <= FUNC_RESET_TIMER3) {
|
||||
if (index > (TIMERS - 1))
|
||||
return false;
|
||||
else {
|
||||
TimerData *timer = &g_model.timers[index];
|
||||
return timer->mode != 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#if TIMERS < 2
|
||||
else if (index == FUNC_RESET_TIMER2) {
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -78,6 +78,7 @@ bool isLogicalSwitchFunctionAvailable(int function);
|
||||
bool isLogicalSwitchAvailable(int index);
|
||||
bool isAssignableFunctionAvailable(int function);
|
||||
bool isSourceAvailable(int source);
|
||||
bool isTimerSourceAvailable(int source);
|
||||
bool isSourceAvailableInGlobalFunctions(int source);
|
||||
bool isSourceAvailableInCustomSwitches(int source);
|
||||
bool isSourceAvailableInResetSpecialFunction(int index);
|
||||
|
||||
@@ -224,6 +224,26 @@ static uint32_t r_mixSrcRaw(const YamlNode* node, const char* val, uint8_t val_l
|
||||
|
||||
return MIXSRC_FIRST_HELI + (val[3] - '1');
|
||||
|
||||
} else if (val_len > 3 &&
|
||||
val[0] == 'T' &&
|
||||
val[1] == 'm' &&
|
||||
val[2] == 'r' &&
|
||||
val[3] >= '1' &&
|
||||
val[3] <= ('1' + MAX_TIMERS)) {
|
||||
|
||||
return MIXSRC_FIRST_TIMER + (val[3] - '1');
|
||||
|
||||
} else if (val_len > 5 && // Old form, removed in 2.10
|
||||
val[0] == 'T' &&
|
||||
val[1] == 'I' &&
|
||||
val[2] == 'M' &&
|
||||
val[3] == 'E' &&
|
||||
val[4] == 'R' &&
|
||||
val[5] >= '1' &&
|
||||
val[5] <= ('1' + MAX_TIMERS)) {
|
||||
|
||||
return MIXSRC_FIRST_TIMER + (val[5] - '1');
|
||||
|
||||
} else if (val_len > 1 &&
|
||||
val[0] == 'T' &&
|
||||
val[1] >= '1' &&
|
||||
@@ -346,6 +366,11 @@ static bool w_mixSrcRaw(const YamlNode* node, uint32_t val, yaml_writer_func wf,
|
||||
return false;
|
||||
str = closing_parenthesis;
|
||||
}
|
||||
else if (val >= MIXSRC_FIRST_TIMER
|
||||
&& val <= MIXSRC_LAST_TIMER) {
|
||||
if (!wf(opaque, "Tmr", 3)) return false;
|
||||
str = yaml_unsigned2str(val - MIXSRC_FIRST_TIMER + 1);
|
||||
}
|
||||
else if (val >= MIXSRC_FIRST_TELEM
|
||||
&& val <= MIXSRC_LAST_TELEM) {
|
||||
|
||||
@@ -1415,7 +1440,7 @@ static void r_customFn(void* user, uint8_t* data, uint32_t bitoffs,
|
||||
&& val[1] == 'm'
|
||||
&& val[2] == 'r'
|
||||
&& val[3] >= '1'
|
||||
&& val[3] <= '3') {
|
||||
&& val[3] <= ('1' + MAX_TIMERS)) {
|
||||
|
||||
CFN_TIMER_INDEX(cfn) = val[3] - '1';
|
||||
|
||||
|
||||
@@ -125,12 +125,8 @@
|
||||
#define TR_SF_RESERVE "[reserve]"
|
||||
|
||||
#define TR_FSW_RESET_TELEM TR("Telm", "Telemetri")
|
||||
#define TR_FSW_RESET_TIMERS "Tid1","Tid2","Tid3"
|
||||
|
||||
#if LCD_W >= 212
|
||||
#define TR_FSW_RESET_TIMERS "Tidtag 1","Tidtag 2","Tidtag 3"
|
||||
#else
|
||||
#define TR_FSW_RESET_TIMERS "Tid1","Tid2","Tid3"
|
||||
#endif
|
||||
|
||||
#define TR_VFSWRESET TR_FSW_RESET_TIMERS,TR("Alle","Flight"),TR_FSW_RESET_TELEM
|
||||
|
||||
|
||||
@@ -121,12 +121,8 @@
|
||||
#define TR_SF_SET_SCREEN "Set Main Screen"
|
||||
|
||||
#define TR_FSW_RESET_TELEM TR("Telm","Telemetrie")
|
||||
#define TR_FSW_RESET_TIMERS "Tmr1","Tmr2","Tmr3"
|
||||
|
||||
#if LCD_W >= 212
|
||||
#define TR_FSW_RESET_TIMERS "Timer 1","Timer 2","Timer 3"
|
||||
#else
|
||||
#define TR_FSW_RESET_TIMERS "Tmr1","Tmr2","Tmr3"
|
||||
#endif
|
||||
|
||||
#define TR_VFSWRESET TR_FSW_RESET_TIMERS,"All",TR_FSW_RESET_TELEM
|
||||
|
||||
|
||||
@@ -123,12 +123,7 @@
|
||||
#define TR_SF_RESERVE "[reserve]"
|
||||
|
||||
#define TR_FSW_RESET_TELEM TR("Telm", "Telemetry")
|
||||
|
||||
#if LCD_W >= 212
|
||||
#define TR_FSW_RESET_TIMERS "Timer 1","Timer 2","Timer 3"
|
||||
#else
|
||||
#define TR_FSW_RESET_TIMERS "Tmr1","Tmr2","Tmr3"
|
||||
#endif
|
||||
#define TR_FSW_RESET_TIMERS "Tmr1","Tmr2","Tmr3"
|
||||
|
||||
#define TR_VFSWRESET TR_FSW_RESET_TIMERS,TR("All","Flight"),TR_FSW_RESET_TELEM
|
||||
|
||||
|
||||
@@ -119,12 +119,7 @@
|
||||
#define TR_SF_SET_SCREEN "Set Main Screen"
|
||||
|
||||
#define TR_FSW_RESET_TELEM TR("Telm", "Telemetría")
|
||||
|
||||
#if LCD_W >= 212
|
||||
#define TR_FSW_RESET_TIMERS "Timer 1","Timer 2","Timer 3"
|
||||
#else
|
||||
#define TR_FSW_RESET_TIMERS "Tmr1","Tmr2","Tmr3"
|
||||
#endif
|
||||
#define TR_FSW_RESET_TIMERS "Tmr1","Tmr2","Tmr3"
|
||||
|
||||
#define TR_VFSWRESET TR_FSW_RESET_TIMERS,TR("Todo","Vuelo"),TR_FSW_RESET_TELEM
|
||||
|
||||
|
||||
@@ -124,12 +124,7 @@
|
||||
#define TR_SF_SET_SCREEN "Set Main Screen"
|
||||
|
||||
#define TR_FSW_RESET_TELEM TR("Telm","Telemetry")
|
||||
|
||||
#if defined(PCBTARANIS)
|
||||
#define TR_FSW_RESET_TIMERS "Timer 1","Timer 2","Timer 3"
|
||||
#else
|
||||
#define TR_FSW_RESET_TIMERS "Tmr1","Tmr2","Tmr3"
|
||||
#endif
|
||||
#define TR_FSW_RESET_TIMERS "Tmr1","Tmr2","Tmr3"
|
||||
|
||||
#define TR_VFSWRESET TR_FSW_RESET_TIMERS,"All",TR_FSW_RESET_TELEM
|
||||
|
||||
|
||||
@@ -123,12 +123,8 @@
|
||||
#define TR_SF_SET_SCREEN "Définir Écran Princ."
|
||||
|
||||
#define TR_FSW_RESET_TELEM TR("Télem.", "Télémétrie")
|
||||
#define TR_FSW_RESET_TIMERS "Chr1","Chr2","Chr3"
|
||||
|
||||
#if LCD_W >= 212
|
||||
#define TR_FSW_RESET_TIMERS "Chrono 1","Chrono 2","Chrono 3"
|
||||
#else
|
||||
#define TR_FSW_RESET_TIMERS "Chr1","Chr2","Chr3"
|
||||
#endif
|
||||
|
||||
#define TR_VFSWRESET TR_FSW_RESET_TIMERS, "Tout", TR_FSW_RESET_TELEM
|
||||
#define TR_FUNCSOUNDS TR("Bp1","Beep1"),TR("Bp2","Beep2"),TR("Bp3","Beep3"),TR("Wrn1","Warn1"),TR("Wrn2","Warn2"),TR("Chee","Cheep"),TR("Rata","Ratata"),"Tick",TR("Sirn","Siren"),"Ring",TR("SciF","SciFi"),TR("Robt","Robot"),TR("Chrp","Chirp"),"Tada",TR("Crck","Crickt"),TR("Alrm","AlmClk")
|
||||
|
||||
@@ -176,12 +176,8 @@
|
||||
#define TR_VFSWFUNC TR_SF_SAFETY,"Trainer","Inst. Trim","Reset","Set",TR_ADJUST_GVAR,"Volume","SetFailsafe","RangeCheck","ModuleBind",TR_SOUND,TR_PLAY_TRACK,TR_PLAY_VALUE,TR_SF_RESERVE,TR_SF_PLAY_SCRIPT,TR_SF_RESERVE,TR_SF_BG_MUSIC,TR_VVARIO,TR_HAPTIC,TR_SDCLOGS,"Backlight",TR_SF_SCREENSHOT,TR_SF_RACING_MODE,TR_SF_DISABLE_TOUCH, TR_SF_SET_SCREEN TR_SF_TEST
|
||||
|
||||
#define TR_FSW_RESET_TELEM TR("Telm", "טלמטריה")
|
||||
#define TR_FSW_RESET_TIMERS "שעון 1","שעון 2","שעון 3"
|
||||
|
||||
#if LCD_W >= 212
|
||||
#define TR_FSW_RESET_TIMERS "שעון 1","שעון 2","שעון 3"
|
||||
#else
|
||||
#define TR_FSW_RESET_TIMERS "שעון 1","שעון 2","שעון 3"
|
||||
#endif
|
||||
|
||||
#define TR_VFSWRESET TR_FSW_RESET_TIMERS,TR("All","Flight"),TR_FSW_RESET_TELEM
|
||||
|
||||
|
||||
@@ -122,12 +122,8 @@
|
||||
#define TR_SF_SET_SCREEN "Setta Schermo Princ."
|
||||
|
||||
#define TR_FSW_RESET_TELEM TR("Telm", "Telemetria")
|
||||
#define TR_FSW_RESET_TIMERS "Tmr1","Tmr2","Tmr3"
|
||||
|
||||
#if LCD_W >= 212
|
||||
#define TR_FSW_RESET_TIMERS "Timer 1","Timer 2","Timer 3"
|
||||
#else
|
||||
#define TR_FSW_RESET_TIMERS "Tmr1","Tmr2","Tmr3"
|
||||
#endif
|
||||
|
||||
#define TR_VFSWRESET TR_FSW_RESET_TIMERS,TR("All","Tutto"),TR_FSW_RESET_TELEM
|
||||
|
||||
|
||||
@@ -120,12 +120,7 @@
|
||||
#define TR_SF_RESERVE "[reserve]"
|
||||
|
||||
#define TR_FSW_RESET_TELEM TR("Telm", "Telemetrie")
|
||||
|
||||
#if LCD_W >= 212
|
||||
#define TR_FSW_RESET_TIMERS "Timer 1","Timer 2","Timer 3"
|
||||
#else
|
||||
#define TR_FSW_RESET_TIMERS "Tmr1","Tmr2","Tmr3"
|
||||
#endif
|
||||
#define TR_FSW_RESET_TIMERS "Tmr1","Tmr2","Tmr3"
|
||||
|
||||
#define TR_VFSWRESET TR_FSW_RESET_TIMERS,TR("All","Vliegdata"),TR_FSW_RESET_TELEM
|
||||
|
||||
|
||||
@@ -117,13 +117,9 @@
|
||||
#define TR_SF_DISABLE_TOUCH "No Touch"
|
||||
#define TR_SF_SET_SCREEN "Set Main Screen"
|
||||
|
||||
#define TR_FSW_RESET_TELEM TR("Telm", "Telemetra")
|
||||
#define TR_FSW_RESET_TELEM TR("Telm", "Telemetra")
|
||||
#define TR_FSW_RESET_TIMERS "Tmr1","Tmr2","Tmr3"
|
||||
|
||||
#if LCD_W >= 212
|
||||
#define TR_FSW_RESET_TIMERS "Timer 1","Timer 2","Timer 3"
|
||||
#else
|
||||
#define TR_FSW_RESET_TIMERS "Tmr1","Tmr2","Tmr3"
|
||||
#endif
|
||||
|
||||
#define TR_VFSWRESET TR_FSW_RESET_TIMERS,TR("All","Flight"),TR_FSW_RESET_TELEM
|
||||
#define TR_FUNCSOUNDS TR("Bp1","Beep1"),TR("Bp2","Beep2"),TR("Bp3","Beep3"),TR("Ost1","Ostrz1"),TR("Ost2","Ostrz2"),TR("Chee","Cheep"),TR("Rata","Ratata"),"Tick",TR("Syre","Syrena"),TR("Dzwo","Dzwone"),TR("Crck","Krytcz"),TR("Alrm","AlmZeg")
|
||||
|
||||
@@ -126,12 +126,7 @@
|
||||
#define TR_SF_RESERVE "[reserve]"
|
||||
|
||||
#define TR_FSW_RESET_TELEM TR("Telm", "Telemetria")
|
||||
|
||||
#if LCD_W >= 212
|
||||
#define TR_FSW_RESET_TIMERS "Timer 1","Timer 2","Timer 3"
|
||||
#else
|
||||
#define TR_FSW_RESET_TIMERS "Tmr1","Tmr2","Tmr3"
|
||||
#endif
|
||||
#define TR_FSW_RESET_TIMERS "Tmr1","Tmr2","Tmr3"
|
||||
|
||||
#define TR_VFSWRESET TR_FSW_RESET_TIMERS,TR("All","Flight"),TR_FSW_RESET_TELEM
|
||||
|
||||
|
||||
@@ -129,12 +129,7 @@
|
||||
#define TR_SF_RESERVE "[reserv]"
|
||||
|
||||
#define TR_FSW_RESET_TELEM TR("Telm","Telemetri")
|
||||
|
||||
#if LCD_W >= 212
|
||||
#define TR_FSW_RESET_TIMERS "Timer 1","Timer 2","Timer 3"
|
||||
#else
|
||||
#define TR_FSW_RESET_TIMERS "Tmr1","Tmr2","Tmr3"
|
||||
#endif
|
||||
#define TR_FSW_RESET_TIMERS "Tmr1","Tmr2","Tmr3"
|
||||
|
||||
#define TR_VFSWRESET TR_FSW_RESET_TIMERS,"Alla",TR_FSW_RESET_TELEM
|
||||
#define TR_FUNCSOUNDS TR("Bp1","Beep1"),TR("Bp2","Beep2"),TR("Bp3","Beep3"),TR("Wrn1","Warn1"),TR("Wrn2","Warn2"),TR("Chee","Cheep"),TR("Rata","Ratata"),"Tick",TR("Sirn","Siren"),"Ring",TR("SciF","SciFi"),TR("Robt","Robot"),TR("Chrp","Chirp"),"Tada",TR("Crck","Crickt"),TR("Alrm","AlmClk")
|
||||
|
||||
Reference in New Issue
Block a user