Public Access
Show status messages on the display
- Clock firmware: 'Connecting to WiFi...' and 'Getting the time...' at boot, 'Crashed!' in the OTA-only modes, and 'No WiFi' with the time when WiFi is down for over a minute (new DisplayController screen) - Recovery app: shows its reason, the setup WiFi name, or its IP address, then powers the display off (flipdots keep the image) - StatusScreen and drawTextLines shared by both apps - Driver: ESP begin() no longer draws 'ESP Connected' - Tests: No WiFi screen, short reason texts (70 total) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4749f9e596
commit
c9e0800e36
19 files changed
+332
-48
No files matched your search
+13
-8
@@ -7,6 +7,7 @@
|
||||
#include "BROSE9323.h"
|
||||
#include "config.h"
|
||||
#include "display/frames.h"
|
||||
#include "display/status_screen.h"
|
||||
#include "logic/display_controller.h"
|
||||
#include "logic/status_led.h"
|
||||
#include "nano_link/nano_flash_bridge.h"
|
||||
@@ -19,6 +20,7 @@
|
||||
NanoLink nano(Serial2, NANO_RX_PIN, NANO_TX_PIN, RELAY_PIN, NANO_RESET_PIN);
|
||||
BROSE9323 display(DISPLAY_WIDTH, DISPLAY_HEIGHT, PANEL_WIDTH);
|
||||
FlipdotFrames frames(display);
|
||||
StatusScreen status(display, nano);
|
||||
DisplayController controller(nano, frames);
|
||||
|
||||
// Flashing the Nano over WiFi: restart it into its bootloader, switch it off afterwards.
|
||||
@@ -32,12 +34,14 @@ void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
pinMode(LED_PIN, OUTPUT);
|
||||
nano.begin(); // display off until the main code runs
|
||||
nano.begin(); // display off until something is shown
|
||||
|
||||
// Decided first, before anything that could crash
|
||||
BootMode boot_mode = firmwareGuardBegin();
|
||||
|
||||
wifiBegin();
|
||||
if (boot_mode == BootMode::Normal)
|
||||
status.show("Connecting", "to WiFi...", true);
|
||||
wifiBegin(); // starts the recovery app when it fails
|
||||
otaBegin();
|
||||
|
||||
if (boot_mode == BootMode::SafeMode)
|
||||
@@ -46,19 +50,20 @@ void setup()
|
||||
// then try the main code once more
|
||||
firmwareGuardSafeModeEnded();
|
||||
rebootToRecovery(RecoveryReason::Crash);
|
||||
status.show("Crashed 3x", "OTA only");
|
||||
otaOnlyMode(SAFE_MODE_TIME, LED_PIN);
|
||||
ESP.restart();
|
||||
}
|
||||
if (boot_mode == BootMode::PanicWindow)
|
||||
{
|
||||
status.show("Crashed!", "OTA open 15s");
|
||||
otaOnlyMode(OTA_PANIC_WINDOW, LED_PIN);
|
||||
}
|
||||
|
||||
flashBridge.begin();
|
||||
|
||||
nano.on();
|
||||
display.begin(&nano.stream());
|
||||
display.setTiming(FLIP_TIME);
|
||||
// Shown until the time is synced
|
||||
frames.message("Connecting...");
|
||||
// Shown until the time is synced over NTP
|
||||
status.show("Getting", "the time...", true);
|
||||
|
||||
configTzTime(TIMEZONE, NTP_SERVER);
|
||||
homeAssistantBegin(controller);
|
||||
@@ -82,7 +87,7 @@ void loop()
|
||||
|
||||
struct tm now = {};
|
||||
bool time_valid = getLocalTime(&now, 0);
|
||||
controller.update(millis(), time_valid, now.tm_hour, now.tm_min);
|
||||
controller.update(millis(), time_valid, now.tm_hour, now.tm_min, wifiConnected());
|
||||
|
||||
digitalWrite(LED_PIN, statusLedLevel(millis(), wifiConnected(), nano.isOn()));
|
||||
}
|
||||
Reference in new issue
Block a user