|  |  | @ -26,25 +26,26 @@ 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(); | 
			
		
	
		
			
				
					|  |  |  |         _display->setTextColor(GxEPD_BLACK); | 
			
		
	
		
			
				
					|  |  |  |         _display->firstPage(); | 
			
		
	
		
			
				
					|  |  |  |         _version = version; | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
	
		
			
				
					|  |  | @ -58,7 +59,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; | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | @ -66,40 +68,42 @@ void DisplayEPaper::fullRefresh() { | 
			
		
	
		
			
				
					|  |  |  | void DisplayEPaper::refreshLoop() { | 
			
		
	
		
			
				
					|  |  |  |     switch(mRefreshState) { | 
			
		
	
		
			
				
					|  |  |  |         case RefreshStatus::LOGO: | 
			
		
	
		
			
				
					|  |  |  |             _display->fillScreen(GxEPD_BLACK); | 
			
		
	
		
			
				
					|  |  |  |             _display->drawBitmap(0, 0, logo, 200, 200, GxEPD_WHITE); | 
			
		
	
		
			
				
					|  |  |  |             mSecondCnt = 2; | 
			
		
	
		
			
				
					|  |  |  |             mNextRefreshState = RefreshStatus::PARTITIALS; | 
			
		
	
		
			
				
					|  |  |  |             mRefreshState = RefreshStatus::WAIT; | 
			
		
	
		
			
				
					|  |  |  |             _display->fillScreen(GxEPD_WHITE); | 
			
		
	
		
			
				
					|  |  |  |             _display->drawInvertedBitmap(0, 0, logo, 200, 200, GxEPD_BLACK); | 
			
		
	
		
			
				
					|  |  |  |             if(_display->nextPage()) | 
			
		
	
		
			
				
					|  |  |  |                 break; | 
			
		
	
		
			
				
					|  |  |  |             mSecondCnt = 10; | 
			
		
	
		
			
				
					|  |  |  |             _display->powerOff(); | 
			
		
	
		
			
				
					|  |  |  |             mRefreshState = RefreshStatus::LOGO_WAIT; | 
			
		
	
		
			
				
					|  |  |  |             break; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         case RefreshStatus::LOGO_WAIT: | 
			
		
	
		
			
				
					|  |  |  |             if(0 != mSecondCnt) | 
			
		
	
		
			
				
					|  |  |  |                 break; | 
			
		
	
		
			
				
					|  |  |  |             mRefreshState = RefreshStatus::WHITE; | 
			
		
	
		
			
				
					|  |  |  |             _display->firstPage(); | 
			
		
	
		
			
				
					|  |  |  |             break; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         case RefreshStatus::BLACK: | 
			
		
	
		
			
				
					|  |  |  |             _display->fillScreen(GxEPD_BLACK); | 
			
		
	
		
			
				
					|  |  |  |             mNextRefreshState = RefreshStatus::WHITE; | 
			
		
	
		
			
				
					|  |  |  |             mRefreshState = RefreshStatus::WAIT; | 
			
		
	
		
			
				
					|  |  |  |             if(_display->nextPage()) | 
			
		
	
		
			
				
					|  |  |  |                 break; | 
			
		
	
		
			
				
					|  |  |  |             mRefreshState = RefreshStatus::WHITE; | 
			
		
	
		
			
				
					|  |  |  |             _display->firstPage(); | 
			
		
	
		
			
				
					|  |  |  |             break; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         case RefreshStatus::WHITE: | 
			
		
	
		
			
				
					|  |  |  |             if(0 != mSecondCnt) | 
			
		
	
		
			
				
					|  |  |  |                 break; | 
			
		
	
		
			
				
					|  |  |  |             _display->fillScreen(GxEPD_WHITE); | 
			
		
	
		
			
				
					|  |  |  |             mNextRefreshState = RefreshStatus::PARTITIALS; | 
			
		
	
		
			
				
					|  |  |  |             mRefreshState = RefreshStatus::WAIT; | 
			
		
	
		
			
				
					|  |  |  |             break; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         case RefreshStatus::WAIT: | 
			
		
	
		
			
				
					|  |  |  |             if(!_display->nextPage()) | 
			
		
	
		
			
				
					|  |  |  |                 mRefreshState = mNextRefreshState; | 
			
		
	
		
			
				
					|  |  |  |             if(_display->nextPage()) | 
			
		
	
		
			
				
					|  |  |  |                 break; | 
			
		
	
		
			
				
					|  |  |  |             mRefreshState = RefreshStatus::PARTITIALS; | 
			
		
	
		
			
				
					|  |  |  |             _display->firstPage(); | 
			
		
	
		
			
				
					|  |  |  |             break; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         case RefreshStatus::PARTITIALS: | 
			
		
	
		
			
				
					|  |  |  |             if(0 != mSecondCnt) | 
			
		
	
		
			
				
					|  |  |  |                 break; | 
			
		
	
		
			
				
					|  |  |  |             headlineIP(); | 
			
		
	
		
			
				
					|  |  |  |             versionFooter(); | 
			
		
	
		
			
				
					|  |  |  |             mSecondCnt = 4; // display Logo time during boot up
 | 
			
		
	
		
			
				
					|  |  |  |             mNextRefreshState = RefreshStatus::DONE; | 
			
		
	
		
			
				
					|  |  |  |             mRefreshState = RefreshStatus::WAIT; | 
			
		
	
		
			
				
					|  |  |  |             mRefreshState = RefreshStatus::DONE; | 
			
		
	
		
			
				
					|  |  |  |             break; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         default: // RefreshStatus::DONE
 | 
			
		
	
	
		
			
				
					|  |  | @ -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,9 @@ void DisplayEPaper::loop(float totalPower, float totalYieldDay, float totalYield | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | //***************************************************************************
 | 
			
		
	
		
			
				
					|  |  |  | void DisplayEPaper::tickerSecond() { | 
			
		
	
		
			
				
					|  |  |  |     if(mSecondCnt != 0) | 
			
		
	
		
			
				
					|  |  |  |         mSecondCnt--; | 
			
		
	
		
			
				
					|  |  |  |     refreshLoop(); | 
			
		
	
		
			
				
					|  |  |  |     if(RefreshStatus::LOGO_WAIT == mRefreshState) { | 
			
		
	
		
			
				
					|  |  |  |         if(mSecondCnt > 0) | 
			
		
	
		
			
				
					|  |  |  |             mSecondCnt--; | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | #endif  // ESP32
 | 
			
		
	
	
		
			
				
					|  |  | 
 |