Connect RTTTL shutdown melody to shutdown procedure

Added a new UITask shutdown method to run non-board specific shutdown code.  This avoids having to update all the board files for different hardware.

UITask::shutdown(bool restart = false);

Where the buzzer is available and defined, the RTTTL shutdown melody is played when the button is held down for >5s.
This commit is contained in:
seagull9000 2025-05-27 11:07:51 +12:00
parent 16a283ac5b
commit 30488e6f67
2 changed files with 25 additions and 2 deletions

View file

@ -256,7 +256,7 @@ void UITask::buttonHandler() {
digitalWrite(PIN_STATUS_LED, LOW);
delay(10);
#endif
_board->powerOff();
shutdown();
}
}
btn_state_change_time = millis();
@ -267,6 +267,29 @@ void UITask::buttonHandler() {
#endif
}
/* hardware-agnostic pre-shutdown activity should be done here
*/
void UITask::shutdown(bool restart){
#ifdef PIN_BUZZER
/* note: we have a choice here -
we can do a blocking buzzer.loop() with non-deterministic consequences
or we can set a flag and delay the shutdown for a couple of seconds
while a non-blocking buzzer.loop() plays out in UITask::loop()
*/
buzzer.shutdown();
uint32_t buzzer_timer = millis(); // fail-safe shutdown
while (buzzer.isPlaying() && (millis() - 2500) < buzzer_timer)
buzzer.loop();
#endif // PIN_BUZZER
if (restart)
_board->reboot();
else
_board->powerOff();
}
void UITask::loop() {
buttonHandler();
userLedHandler();