feat(doorbell): add staged boot sequence and refactor main loop
This commit is contained in:
@@ -17,7 +17,10 @@ void DisplayDriverTFT::begin() {
|
||||
Serial.printf("[TOUCH] Raw Z=%d (non-zero = controller detected)\n", z);
|
||||
Serial.flush();
|
||||
|
||||
drawBoot();
|
||||
ScreenState st;
|
||||
st.screen = ScreenID::BOOT;
|
||||
st.bootStage = BootStage::SPLASH;
|
||||
drawBoot(st);
|
||||
|
||||
digitalWrite(PIN_LCD_BL, HIGH);
|
||||
Serial.println("[GFX] Backlight ON");
|
||||
@@ -29,15 +32,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;
|
||||
@@ -60,7 +64,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);
|
||||
@@ -69,8 +75,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) {
|
||||
|
||||
Reference in New Issue
Block a user