From d0440122b9c66640fb69542f8997154b181d2135 Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Sun, 12 Sep 2021 01:08:19 +0200 Subject: [PATCH] Bugfix for AutoSave & 4LD. --- .../usermod_v2_auto_save.h | 20 +++++------- .../usermod_v2_four_line_display.h | 31 +++++++++++-------- 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/usermods/usermod_v2_auto_save/usermod_v2_auto_save.h b/usermods/usermod_v2_auto_save/usermod_v2_auto_save.h index 98937fcfb..f2864362c 100644 --- a/usermods/usermod_v2_auto_save/usermod_v2_auto_save.h +++ b/usermods/usermod_v2_auto_save/usermod_v2_auto_save.h @@ -38,7 +38,7 @@ class AutoSaveUsermod : public Usermod { bool applyAutoSaveOnBoot = false; // do we load auto-saved preset on boot? // If we've detected the need to auto save, this will be non zero. - uint16_t autoSaveAfter = 0; + unsigned long autoSaveAfter = 0; uint8_t knownBrightness = 0; uint8_t knownEffectSpeed = 0; @@ -87,6 +87,12 @@ class AutoSaveUsermod : public Usermod { display = (FourLineDisplayUsermod*) usermods.lookup(USERMOD_ID_FOUR_LINE_DISP); #endif initDone = true; + if (enabled && applyAutoSaveOnBoot) applyPreset(autoSavePreset); + knownBrightness = bri; + knownEffectSpeed = effectSpeed; + knownEffectIntensity = effectIntensity; + knownMode = strip.getMode(); + knownPalette = strip.getSegment(0).palette; } // gets called every time WiFi is (re-)connected. Initialize own network @@ -97,21 +103,11 @@ class AutoSaveUsermod : public Usermod { * Da loop. */ void loop() { - if (!autoSaveAfterSec || !enabled || strip.isUpdating()) return; // setting 0 as autosave seconds disables autosave + if (!autoSaveAfterSec || !enabled || strip.isUpdating() || currentPreset>0) return; // setting 0 as autosave seconds disables autosave unsigned long now = millis(); uint8_t currentMode = strip.getMode(); uint8_t currentPalette = strip.getSegment(0).palette; - if (firstLoop) { - firstLoop = false; - if (applyAutoSaveOnBoot) applyPreset(autoSavePreset); - knownBrightness = bri; - knownEffectSpeed = effectSpeed; - knownEffectIntensity = effectIntensity; - knownMode = currentMode; - knownPalette = currentPalette; - return; - } unsigned long wouldAutoSaveAfter = now + autoSaveAfterSec*1000; if (knownBrightness != bri) { diff --git a/usermods/usermod_v2_four_line_display/usermod_v2_four_line_display.h b/usermods/usermod_v2_four_line_display/usermod_v2_four_line_display.h index 2089db933..03d91e5a9 100644 --- a/usermods/usermod_v2_four_line_display/usermod_v2_four_line_display.h +++ b/usermods/usermod_v2_four_line_display/usermod_v2_four_line_display.h @@ -346,8 +346,8 @@ class FourLineDisplayUsermod : public Usermod { (knownEffectIntensity != effectIntensity) || (knownMode != strip.getMode()) || (knownPalette != strip.getSegment(0).palette)) { - knownHour = 99; // force time update - clear(); + knownHour = 99; // force time update + lastRedraw = now; // update lastRedraw marker } else if (sleepMode && !displayTurnedOff && ((now - lastRedraw)/1000)%5 == 0) { // change line every 5s showName = !showName; @@ -372,13 +372,13 @@ class FourLineDisplayUsermod : public Usermod { break; } knownHour = 99; // force time update + // do not update lastRedraw marker if just switching row contenet } else { // Nothing to change. // Turn off display after 3 minutes with no change. if(sleepMode && !displayTurnedOff && (millis() - lastRedraw > screenTimeout)) { // We will still check if there is a change in redraw() // and turn it back on if it changed. - clear(); // force screen clear sleepOrClock(true); } else if (displayTurnedOff && clockMode) { showTime(); @@ -386,9 +386,6 @@ class FourLineDisplayUsermod : public Usermod { return; } - // do not update lastRedraw marker if just switching row contenet - if (((now - lastRedraw)/1000)%5 != 0) lastRedraw = now; - // Turn the display back on if (displayTurnedOff) sleepOrClock(false); @@ -409,7 +406,7 @@ class FourLineDisplayUsermod : public Usermod { center(line, getCols()-2); drawString(1, 0, line.c_str()); // Print `~` char to indicate that SSID is longer, than our display - if (knownSsid.length() > getCols()-1) { + if (knownSsid.length() > (int)getCols()-1) { drawString(getCols() - 1, 0, "~"); } @@ -523,14 +520,23 @@ class FourLineDisplayUsermod : public Usermod { */ void overlay(const char* line1, const char *line2, long showHowLong) { if (displayTurnedOff) { - // Turn the display back on + // Turn the display back on (includes clear()) sleepOrClock(false); + } else { + clear(); } // Print the overlay - clear(); - if (line1) drawString(0, 1*lineHeight, line1); - if (line2) drawString(0, 2*lineHeight, line2); + if (line1) { + String buf = line1; + center(buf, getCols()); + drawString(0, 1*lineHeight, buf.c_str()); + } + if (line2) { + String buf = line2; + center(buf, getCols()); + drawString(0, 2*lineHeight, buf.c_str()); + } overlayUntil = millis() + showHowLong; } @@ -557,6 +563,7 @@ class FourLineDisplayUsermod : public Usermod { * Enable sleep (turn the display off) or clock mode. */ void sleepOrClock(bool enabled) { + clear(); if (enabled) { if (clockMode) showTime(); else setPowerSave(1); @@ -582,8 +589,6 @@ class FourLineDisplayUsermod : public Usermod { if (knownMinute == minuteCurrent && knownHour == hourCurrent) { // Time hasn't changed. if (!fullScreen) return; - } else { - //if (fullScreen) clear(); } knownMinute = minuteCurrent; knownHour = hourCurrent;