feat(doorbell): add staged boot sequence and refactor main loop

This commit is contained in:
2026-02-18 00:35:48 -08:00
parent 46289b9d40
commit bfba3b02fd
15 changed files with 255 additions and 134 deletions

View File

@@ -11,7 +11,10 @@ void DisplayDriverTFT::begin() {
Serial.printf("[GFX] Display OK: %dx%d\n", DISPLAY_WIDTH, DISPLAY_HEIGHT);
drawBoot();
ScreenState st;
st.screen = ScreenID::BOOT;
st.bootStage = BootStage::SPLASH;
drawBoot(st);
digitalWrite(PIN_LCD_BL, HIGH);
Serial.println("[GFX] Backlight ON");
@@ -22,15 +25,16 @@ void DisplayDriverTFT::setBacklight(bool on) { digitalWrite(PIN_LCD_BL, on ? HIG
// ── Rendering ───────────────────────────────────────────────
void DisplayDriverTFT::render(const ScreenState& st) {
if(st.screen != _lastScreen) {
if(st.screen != _lastScreen || (st.screen == ScreenID::BOOT && st.bootStage != _lastBootStage)) {
_needsRedraw = true;
_lastScreen = st.screen;
_lastBootStage = st.bootStage;
}
switch(st.screen) {
case ScreenID::BOOT:
if(_needsRedraw) {
drawBoot();
drawBoot(st);
_needsRedraw = false;
}
break;
@@ -53,7 +57,9 @@ void DisplayDriverTFT::render(const ScreenState& st) {
}
}
void DisplayDriverTFT::drawBoot() {
void DisplayDriverTFT::drawBoot(const ScreenState& st) {
BootStage stage = st.bootStage;
_tft.fillScreen(TFT_BLACK);
_tft.setTextColor(TFT_WHITE, TFT_BLACK);
_tft.setTextSize(2);
@@ -62,8 +68,29 @@ void DisplayDriverTFT::drawBoot() {
_tft.setTextSize(1);
_tft.setCursor(10, 40);
_tft.print(BOARD_NAME);
_tft.setCursor(10, 60);
_tft.print("Booting...");
// Show boot stage status
_tft.setCursor(10, 70);
switch(stage) {
case BootStage::SPLASH:
_tft.print("Initializing...");
break;
case BootStage::INIT_DISPLAY:
_tft.print("Display OK");
break;
case BootStage::INIT_NETWORK:
_tft.print("Network init...");
break;
case BootStage::CONNECTING_WIFI:
_tft.print("Connecting WiFi...");
break;
case BootStage::READY:
_tft.print("All systems go!");
break;
case BootStage::DONE:
_tft.print("Ready!");
break;
}
}
void DisplayDriverTFT::drawAlert(const ScreenState& st) {