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:
3djc
2023-08-28 20:02:03 +10:00
committed by GitHub
parent e56cffafa9
commit 78aa381464
19 changed files with 61 additions and 82 deletions
@@ -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) {
+1 -1
View File
@@ -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) {
+5 -2
View File
@@ -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:
+13 -9
View File
@@ -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;
}
+1
View File
@@ -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';
+1 -5
View File
@@ -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
+1 -5
View File
@@ -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
+1 -6
View File
@@ -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
+1 -6
View File
@@ -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
+1 -6
View File
@@ -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
+1 -5
View File
@@ -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")
+1 -5
View File
@@ -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
+1 -5
View File
@@ -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
+1 -6
View File
@@ -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
+2 -6
View File
@@ -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")
+1 -6
View File
@@ -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
+1 -6
View File
@@ -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")