diff --git a/P4_Display_Firmware/Changelog.txt b/P4_Display_Firmware/Changelog.txt index 19f0c2b..b3b1973 100644 --- a/P4_Display_Firmware/Changelog.txt +++ b/P4_Display_Firmware/Changelog.txt @@ -1,3 +1,16 @@ +Version 1.9.11: +- Endlose Startschleife behoben: Beleuchtung an, nie ein Bild. Der P4 startet sich nach dem + Einschalten absichtlich einmal neu, weil das Panel sonst schwarz bleibt. Die Absicherung + dagegen verließ sich darauf, dass der zweite Start kein Kaltstart mehr ist - der Chip + meldet aber auch nach dem selbst ausgelösten Neustart wieder einen Kaltstart. Damit griff + die Bedingung erneut, endlos. +- Der Neustart wird jetzt vermerkt und beim zweiten Durchlauf erkannt, unabhängig davon, was + der Chip als Startgrund meldet. Beim nächsten echten Einschalten erfolgt wieder genau ein + Neustart. +- Die Meldung über diesen Neustart lief bisher über die USB-Verbindung und war im seriellen + Monitor nicht zu sehen - deshalb war von der Schleife nichts zu erkennen. Sie läuft jetzt + denselben Weg wie die übrigen Panel-Meldungen. + Version 1.9.10: - Alle Messzeilen laufen jetzt auf derselben Uhr. Die des Zeichenablaufs startete später als die des Hauptablaufs; die Zeiten ließen sich nur mit Umrechnung vergleichen. diff --git a/P4_Display_Firmware/P4_Display_Firmware.ino b/P4_Display_Firmware/P4_Display_Firmware.ino index aca4ed1..bf2a5f2 100644 --- a/P4_Display_Firmware/P4_Display_Firmware.ino +++ b/P4_Display_Firmware/P4_Display_Firmware.ino @@ -336,19 +336,36 @@ void setup() { // nicht (siehe WS7_DSI_RESTART). // // Deshalb startet der P4 sich nach einem Kaltstart genau einmal selbst neu, nachdem - // der erste Hochlauf durch ist. Beim zweiten Durchlauf ist der Startgrund kein - // Kaltstart mehr, die Bedingung greift also nicht erneut - eine Schleife ist - // ausgeschlossen. Kostet rund drei Sekunden, aber nur beim Einschalten. + // der erste Hochlauf durch ist. Kostet rund drei Sekunden, aber nur beim Einschalten. + // + // Frueher stuetzte sich die Absicherung dagegen allein auf den Startgrund: Beim zweiten + // Durchlauf sei es kein Kaltstart mehr, eine Schleife also ausgeschlossen. Das stimmt + // nicht - der Chip meldet auch nach dem selbst ausgeloesten Neustart wieder einen + // Kaltstart, und dann startet er endlos neu. Genau das ist aufgetreten: Beleuchtung an, + // nie ein Bild. Deshalb wird jetzt zusaetzlich vermerkt, dass der Neustart schon + // stattgefunden hat; darauf ist Verlass, unabhaengig vom gemeldeten Startgrund. #if (JC_PANEL_TYPE == WS_PANEL_7H) && WS7_COLD_BOOT_RESTART if (esp_reset_reason() == ESP_RST_POWERON) { - // Der Fruehstart-Zaehler wurde oben bereits erhoeht. Diesen gewollten Neustart - // darf er nicht mitzaehlen, sonst laeuft die Absturzsicherung nach ein paar - // Einschaltvorgaengen in den Update-Modus. - { Preferences p; p.begin("bootguard", false); p.putUShort("early", 0); p.end(); } - DBG_SERIAL.println(F("[Panel] Kaltstart - einmaliger Neustart fuer das Displaypanel")); - DBG_SERIAL.flush(); - delay(50); - esp_restart(); + Preferences p; + p.begin("bootguard", false); + bool schonNeugestartet = p.getUChar("kaltneu", 0) != 0; + if (schonNeugestartet) { + // Zweiter Durchlauf: Vermerk loeschen, damit beim naechsten echten Einschalten + // wieder genau ein Neustart erfolgt. + p.putUChar("kaltneu", 0); + p.end(); + esp_rom_printf("[Panel] Neustart bereits erfolgt - Hochlauf wird fortgesetzt\n"); + } else { + p.putUChar("kaltneu", 1); + // Der Fruehstart-Zaehler wurde oben bereits erhoeht. Diesen gewollten Neustart + // darf er nicht mitzaehlen, sonst laeuft die Absturzsicherung nach ein paar + // Einschaltvorgaengen in den Update-Modus. + p.putUShort("early", 0); + p.end(); + esp_rom_printf("[Panel] Kaltstart - einmaliger Neustart fuer das Displaypanel\n"); + delay(50); + esp_restart(); + } } #endif g_client.begin(); // UART starten, hello folgt automatisch in loop()