refactor(companion): unify every reboot/power-off through UITask::shutdown()

Settings > Reboot, the phone app's CMD_REBOOT, and the serial CLI's
"reboot" command each hand-rolled their own flush-then-board.reboot()
sequence, so each could drift independently (Settings > Reboot and the
CLI command were both missing the contacts flush added in the previous
commit). Add a pure-virtual AbstractUITask::shutdown(bool restart) --
every UI variant (ui-new/ui-tiny/ui-orig) already implements a method
with this exact signature -- and route all three call sites through it
instead. CMD_FACTORY_RESET intentionally keeps calling board.reboot()
directly: flushing stale in-RAM prefs back out would defeat the format
it just did.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Jakub
2026-09-08 16:03:37 +02:00
co-authored by Claude Sonnet 5
parent a868a60935
commit e3279646f9
3 changed files with 21 additions and 8 deletions
+13 -6
View File
@@ -2380,11 +2380,13 @@ void MyMesh::handleCmdFrame(size_t len) {
writeOKFrame();
}
} else if (cmd_frame[0] == CMD_REBOOT && memcmp(&cmd_frame[1], "reboot", 6) == 0) {
if (dirty_contacts_expiry) { // is there are pending dirty contacts write needed?
saveContacts();
if (_ui) {
_ui->shutdown(true);
} else {
flushDirtyContacts();
savePrefs();
board.reboot();
}
savePrefs(); // flush any on-device setting change not yet persisted -- see UITask::shutdown()'s comment
board.reboot();
} else if (cmd_frame[0] == CMD_GET_BATT_AND_STORAGE) {
uint8_t reply[11];
int i = 0;
@@ -3192,8 +3194,13 @@ void MyMesh::checkCLIRescueCmd() {
}
} else if (strcmp(cli_command, "reboot") == 0) {
savePrefs(); // flush any on-device setting change not yet persisted -- see UITask::shutdown()'s comment
board.reboot(); // doesn't return
if (_ui) {
_ui->shutdown(true);
} else {
flushDirtyContacts();
savePrefs(); // flush any on-device setting change not yet persisted -- see UITask::shutdown()'s comment
board.reboot(); // doesn't return
}
} else {
Serial.println(" Error: unknown command");
}