feat: add 0.5 second option to power on/off delays (#5134)

This commit is contained in:
philmoz
2024-06-10 11:55:31 +10:00
committed by GitHub
parent aa87148fe9
commit 6207b1eae6
10 changed files with 111 additions and 50 deletions
+2 -8
View File
@@ -585,17 +585,11 @@ void menuRadioSetup(event_t event)
#if defined(PWR_BUTTON_PRESS)
case ITEM_RADIO_SETUP_PWR_ON_SPEED:
lcdDrawTextAlignedLeft(y, STR_PWR_ON_DELAY);
lcdDrawNumber(LCD_W-7, y, 2 - g_eeGeneral.pwrOnSpeed, attr|RIGHT);
lcdDrawChar(lcdLastRightPos, y, 's');
if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.pwrOnSpeed, -1, 2);
g_eeGeneral.pwrOnSpeed = pwrDelayToYaml(editChoice(LCD_W-2, y, STR_PWR_ON_DELAY, STR_PWR_OFF_DELAYS, pwrDelayFromYaml(g_eeGeneral.pwrOnSpeed), 0, 4, attr|RIGHT, event));
break;
case ITEM_RADIO_SETUP_PWR_OFF_SPEED:
lcdDrawTextAlignedLeft(y, STR_PWR_OFF_DELAY);
lcdDrawNumber(LCD_W-7, y, 2 - g_eeGeneral.pwrOffSpeed, attr|RIGHT);
lcdDrawChar(lcdLastRightPos, y, 's');
if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.pwrOffSpeed, -1, 2);
g_eeGeneral.pwrOffSpeed = pwrDelayToYaml(editChoice(LCD_W-2, y, STR_PWR_OFF_DELAY, STR_PWR_OFF_DELAYS, pwrDelayFromYaml(g_eeGeneral.pwrOffSpeed), 0, 4, attr|RIGHT, event));
break;
#endif
+2 -8
View File
@@ -549,17 +549,11 @@ void menuRadioSetup(event_t event)
#if defined(PWR_BUTTON_PRESS)
case ITEM_RADIO_SETUP_PWR_ON_SPEED:
lcdDrawTextAlignedLeft(y, STR_PWR_ON_DELAY);
lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, 2 - g_eeGeneral.pwrOnSpeed, attr|LEFT);
lcdDrawChar(lcdLastRightPos, y, 's');
if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.pwrOnSpeed, -1, 2);
g_eeGeneral.pwrOnSpeed = pwrDelayToYaml(editChoice(LCD_W-2, y, STR_PWR_ON_DELAY, STR_PWR_OFF_DELAYS, pwrDelayFromYaml(g_eeGeneral.pwrOnSpeed), 0, 4, attr|RIGHT, event));
break;
case ITEM_RADIO_SETUP_PWR_OFF_SPEED:
lcdDrawTextAlignedLeft(y, STR_PWR_OFF_DELAY);
lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, 2 - g_eeGeneral.pwrOffSpeed, attr|LEFT);
lcdDrawChar(lcdLastRightPos, y, 's');
if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.pwrOffSpeed, -1, 2);
g_eeGeneral.pwrOffSpeed = pwrDelayToYaml(editChoice(LCD_W-2, y, STR_PWR_OFF_DELAY, STR_PWR_OFF_DELAYS, pwrDelayFromYaml(g_eeGeneral.pwrOffSpeed), 0, 4, attr|RIGHT, event));
break;
#endif
+3 -3
View File
@@ -760,10 +760,10 @@ static SetupLineDef setupLines[] = {
STR_PWR_OFF_DELAY,
[](Window* parent, coord_t x, coord_t y) {
new Choice(
parent, {x, y, 0, EdgeTxStyles::UI_ELEMENT_HEIGHT}, STR_PWR_OFF_DELAYS, 0, 3,
[=]() -> int32_t { return 2 - g_eeGeneral.pwrOffSpeed; },
parent, {x, y, 0, EdgeTxStyles::UI_ELEMENT_HEIGHT}, STR_PWR_OFF_DELAYS, 0, 4,
[=]() -> int32_t { return pwrDelayFromYaml(g_eeGeneral.pwrOffSpeed); },
[=](int32_t newValue) {
g_eeGeneral.pwrOffSpeed = 2 - newValue;
g_eeGeneral.pwrOffSpeed = pwrDelayToYaml(newValue);
SET_DIRTY();
});
}
+1 -1
View File
@@ -247,7 +247,7 @@ void drawShutdownAnimation(uint32_t duration, uint32_t totalDuration,
}
}
int quarter = 3 - duration / (totalDuration / 5);
int quarter = 4 - (duration * 5) / totalDuration;
if (quarter < 0) quarter = 0;
for (int i = 3; i >= quarter; i -= 1) shutdownAnim[i]->hide();
+27 -7
View File
@@ -1231,11 +1231,19 @@ void copyMinMaxToOutputs(uint8_t ch)
storageDirty(EE_MODEL);
}
#if defined(PWR_BUTTON_PRESS) || defined(STARTUP_ANIMATION)
uint32_t pwrDelayTime(int delay)
{
static uint8_t vals[] = { 0, 5, 10, 20, 30 };
return vals[pwrDelayFromYaml(delay)] * 10;
}
#endif
#if defined(STARTUP_ANIMATION)
inline uint32_t PWR_PRESS_DURATION_MIN()
{
return (2 - g_eeGeneral.pwrOnSpeed) * 100;
return pwrDelayTime(g_eeGeneral.pwrOnSpeed);
}
constexpr uint32_t PWR_PRESS_DURATION_MAX = 500; // 5s
@@ -1608,6 +1616,20 @@ int main()
tasksStart();
}
#if defined(PWR_BUTTON_PRESS)
int pwrDelayFromYaml(int delay)
{
static int8_t vals[] = { 1, 4, 3, 2, 0 };
return vals[delay + 2];
}
int pwrDelayToYaml(int delay)
{
static int8_t vals[] = { 2, -2, 1, 0, -1 };
return vals[delay];
}
#endif
#if !defined(SIMU)
#if defined(PWR_BUTTON_PRESS)
@@ -1617,19 +1639,17 @@ inline uint32_t PWR_PRESS_SHUTDOWN_DELAY()
if (pwrForcePressed())
return 0;
return (2 - g_eeGeneral.pwrOffSpeed) * 100;
return pwrDelayTime(g_eeGeneral.pwrOffSpeed);
}
uint32_t pwr_press_time = 0;
uint32_t pwrPressedDuration()
{
if (pwr_press_time == 0) {
if (pwr_press_time == 0)
return 0;
}
else {
return get_tmr10ms() - pwr_press_time;
}
return get_tmr10ms() - pwr_press_time;
}
#if defined(COLORLCD)
+3
View File
@@ -950,3 +950,6 @@ extern bool modelLSEnabled();
extern bool modelSFEnabled();
extern bool modelCustomScriptsEnabled();
extern bool modelTelemetryEnabled();
int pwrDelayFromYaml(int delay);
int pwrDelayToYaml(int delay);
+1 -1
View File
@@ -102,7 +102,7 @@
#define TR_FLYSKY_PULSE_PROTO "PWM","PPM"
#define TR_FLYSKY_SERIAL_PROTO "iBUS","SBUS"
#define TR_PPM_POL "-","+"
#define TR_PWR_OFF_DELAYS "0s","1s","2s","4s"
#define TR_PWR_OFF_DELAYS "0s","0.5s","1s","2s","3s"
#if defined(COLORLCD)
#define TR_SPLASHSCREEN_DELAYS "1s","2s","3s","4s","6s","8s","10s","15s"
#endif