Skip to content

Commit

Permalink
0.8.131
Browse files Browse the repository at this point in the history
* improved refresh routine of ePaper, full refresh each 12h #1107 #1706
  • Loading branch information
lumapu committed Aug 8, 2024
1 parent 2435ce7 commit 55e45c7
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 25 deletions.
3 changes: 3 additions & 0 deletions src/CHANGES.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
4 changes: 4 additions & 0 deletions src/app.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,10 @@ void app::loop(void) {
if (mMqttEnabled && mNetworkConnected)
mMqtt.loop();
#endif

#if defined(PLUGIN_DISPLAY)
mDisplay.loop();
#endif
yield();
}

Expand Down
2 changes: 1 addition & 1 deletion src/defines.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
10 changes: 9 additions & 1 deletion src/plugins/Display/Display.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}
Expand Down
52 changes: 30 additions & 22 deletions src/plugins/Display/Display_ePaper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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, GxEPD2_150_BN::HEIGHT>(GxEPD2_150_BN(&hal));
#else
_display = new GxEPD2_BW<GxEPD2_150_BN, GxEPD2_150_BN::HEIGHT>(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, GxEPD2_150_BN::HEIGHT>(GxEPD2_150_BN(&hal));
#else
_display = new GxEPD2_BW<GxEPD2_150_BN, GxEPD2_150_BN::HEIGHT>(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;
Expand All @@ -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;
}

Expand All @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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
4 changes: 3 additions & 1 deletion src/plugins/Display/Display_ePaper.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,8 @@ class DisplayEPaper {
WHITE,
WAIT,
PARTITIALS,
LOGO
LOGO,
LOGO_WAIT
};

uint8_t mDisplayRotation;
Expand All @@ -64,6 +65,7 @@ class DisplayEPaper {
const char* _version;
RefreshStatus mRefreshState, mNextRefreshState;
uint8_t mSecondCnt;
bool mLogoDisplayed;
#if defined(SPI_HAL)
epdHal hal;
#endif
Expand Down

0 comments on commit 55e45c7

Please sign in to comment.