From 55e45c7ffbac5187271e25c2e389a38a39ba1038 Mon Sep 17 00:00:00 2001 From: lumapu Date: Thu, 8 Aug 2024 23:28:09 +0200 Subject: [PATCH] 0.8.131 * improved refresh routine of ePaper, full refresh each 12h #1107 #1706 --- src/CHANGES.md | 3 ++ src/app.cpp | 4 ++ src/defines.h | 2 +- src/plugins/Display/Display.h | 10 ++++- src/plugins/Display/Display_ePaper.cpp | 52 +++++++++++++++----------- src/plugins/Display/Display_ePaper.h | 4 +- 6 files changed, 50 insertions(+), 25 deletions(-) diff --git a/src/CHANGES.md b/src/CHANGES.md index 133e145a..93cf6c12 100644 --- a/src/CHANGES.md +++ b/src/CHANGES.md @@ -1,5 +1,8 @@ # Development Changes +## 0.8.131 - 2024-08-08 +* improved refresh routine of ePaper, full refresh each 12h #1107 #1706 + ## 0.8.130 - 2024-08-04 * fix message `ERR_DUPLICATE_INVERTER` #1705, #1700 * merge PR: Power limit command accelerated #1704 diff --git a/src/app.cpp b/src/app.cpp index accd0c87..ac66dd3d 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -142,6 +142,10 @@ void app::loop(void) { if (mMqttEnabled && mNetworkConnected) mMqtt.loop(); #endif + + #if defined(PLUGIN_DISPLAY) + mDisplay.loop(); + #endif yield(); } diff --git a/src/defines.h b/src/defines.h index 7324dea8..a4b1468f 100644 --- a/src/defines.h +++ b/src/defines.h @@ -13,7 +13,7 @@ //------------------------------------- #define VERSION_MAJOR 0 #define VERSION_MINOR 8 -#define VERSION_PATCH 130 +#define VERSION_PATCH 131 //------------------------------------- typedef struct { uint8_t ch; diff --git a/src/plugins/Display/Display.h b/src/plugins/Display/Display.h index c818d217..931eeaa7 100644 --- a/src/plugins/Display/Display.h +++ b/src/plugins/Display/Display.h @@ -72,6 +72,14 @@ class Display { } + void loop() { + #if defined(ESP32) && !defined(ETHERNET) + if (DISP_TYPE_T10_EPAPER == mCfg->type) { + mEpaper.refreshLoop(); + } + #endif + } + void payloadEventListener(uint8_t cmd) { mNewPayload = true; } @@ -190,7 +198,7 @@ class Display { mEpaper.loop((totalPower), totalYieldDay, totalYieldTotal, nrprod); mRefreshCycle++; - if (mRefreshCycle > 480) { + if (mRefreshCycle > 2880) { // 15 * 2280 = 44300s = 12h mEpaper.fullRefresh(); mRefreshCycle = 0; } diff --git a/src/plugins/Display/Display_ePaper.cpp b/src/plugins/Display/Display_ePaper.cpp index 86bb0d32..8a4a93a2 100644 --- a/src/plugins/Display/Display_ePaper.cpp +++ b/src/plugins/Display/Display_ePaper.cpp @@ -26,23 +26,22 @@ void DisplayEPaper::init(uint8_t type, uint8_t _CS, uint8_t _DC, uint8_t _RST, u mRefreshState = RefreshStatus::LOGO; mSecondCnt = 0; + mLogoDisplayed = false; if (DISP_TYPE_T10_EPAPER == type) { - Serial.begin(115200); - -#if defined(SPI_HAL) - hal.init(_MOSI, _DC, _SCK, _CS, _RST, _BUSY); - _display = new GxEPD2_BW(GxEPD2_150_BN(&hal)); -#else - _display = new GxEPD2_BW(GxEPD2_150_BN(_CS, _DC, _RST, _BUSY)); - #if defined(USE_HSPI_FOR_EPD) + #if defined(SPI_HAL) + hal.init(_MOSI, _DC, _SCK, _CS, _RST, _BUSY); + _display = new GxEPD2_BW(GxEPD2_150_BN(&hal)); + #else + _display = new GxEPD2_BW(GxEPD2_150_BN(_CS, _DC, _RST, _BUSY)); + #if defined(USE_HSPI_FOR_EPD) hspi.begin(_SCK, _BUSY, _MOSI, _CS); _display->epd2.selectSPI(hspi, SPISettings(spiClk, MSBFIRST, SPI_MODE0)); - #elif defined(PLUGIN_DISPLAY) + #elif defined(PLUGIN_DISPLAY) _display->epd2.init(_SCK, _MOSI, 115200, true, 20, false); - #endif -#endif - _display->init(115200, true, 20, false); + #endif + #endif + _display->init(0, true, 20, false); _display->setRotation(mDisplayRotation); _display->setFullWindow(); _version = version; @@ -58,7 +57,8 @@ void DisplayEPaper::config(uint8_t rotation, bool enPowerSave) { void DisplayEPaper::fullRefresh() { if(RefreshStatus::DONE != mRefreshState) return; - mSecondCnt = 2; + if(mLogoDisplayed) + return; // no refresh during logo display mRefreshState = RefreshStatus::BLACK; } @@ -67,22 +67,29 @@ void DisplayEPaper::refreshLoop() { switch(mRefreshState) { case RefreshStatus::LOGO: _display->fillScreen(GxEPD_BLACK); + _display->firstPage(); _display->drawBitmap(0, 0, logo, 200, 200, GxEPD_WHITE); - mSecondCnt = 2; - mNextRefreshState = RefreshStatus::PARTITIALS; + mSecondCnt = 4; + mNextRefreshState = RefreshStatus::LOGO_WAIT; mRefreshState = RefreshStatus::WAIT; break; + case RefreshStatus::LOGO_WAIT: + if(0 != mSecondCnt) + break; + mRefreshState = RefreshStatus::BLACK; + break; + case RefreshStatus::BLACK: _display->fillScreen(GxEPD_BLACK); + _display->firstPage(); mNextRefreshState = RefreshStatus::WHITE; mRefreshState = RefreshStatus::WAIT; break; case RefreshStatus::WHITE: - if(0 != mSecondCnt) - break; _display->fillScreen(GxEPD_WHITE); + _display->firstPage(); mNextRefreshState = RefreshStatus::PARTITIALS; mRefreshState = RefreshStatus::WAIT; break; @@ -93,11 +100,8 @@ void DisplayEPaper::refreshLoop() { break; case RefreshStatus::PARTITIALS: - if(0 != mSecondCnt) - break; headlineIP(); versionFooter(); - mSecondCnt = 4; // display Logo time during boot up mNextRefreshState = RefreshStatus::DONE; mRefreshState = RefreshStatus::WAIT; break; @@ -219,7 +223,12 @@ void DisplayEPaper::actualPowerPaged(float totalPower, float totalYieldDay, floa if ((totalPower == 0) && (mEnPowerSave)) { _display->fillRect(0, mHeadFootPadding, 200, 200, GxEPD_BLACK); _display->drawBitmap(0, 0, logo, 200, 200, GxEPD_WHITE); + mLogoDisplayed = true; } else { + if(mLogoDisplayed) { + mLogoDisplayed = false; + fullRefresh(); + } _display->getTextBounds(_fmtText, 0, 0, &tbx, &tby, &tbw, &tbh); x = ((_display->width() - tbw) / 2) - tbx; _display->setCursor(x, mHeadFootPadding + tbh + 10); @@ -306,8 +315,7 @@ void DisplayEPaper::loop(float totalPower, float totalYieldDay, float totalYield //*************************************************************************** void DisplayEPaper::tickerSecond() { - if(mSecondCnt != 0) + if(mSecondCnt > 0) mSecondCnt--; - refreshLoop(); } #endif // ESP32 diff --git a/src/plugins/Display/Display_ePaper.h b/src/plugins/Display/Display_ePaper.h index 4fbb0959..ed9c4389 100644 --- a/src/plugins/Display/Display_ePaper.h +++ b/src/plugins/Display/Display_ePaper.h @@ -50,7 +50,8 @@ class DisplayEPaper { WHITE, WAIT, PARTITIALS, - LOGO + LOGO, + LOGO_WAIT }; uint8_t mDisplayRotation; @@ -64,6 +65,7 @@ class DisplayEPaper { const char* _version; RefreshStatus mRefreshState, mNextRefreshState; uint8_t mSecondCnt; + bool mLogoDisplayed; #if defined(SPI_HAL) epdHal hal; #endif