diff --git a/src/graphics/EInkDisplay2.cpp b/src/graphics/EInkDisplay2.cpp index 07fcd2c4..d211d91b 100644 --- a/src/graphics/EInkDisplay2.cpp +++ b/src/graphics/EInkDisplay2.cpp @@ -1,11 +1,11 @@ #include "configuration.h" #ifdef USE_EINK -#include "main.h" #include "EInkDisplay2.h" -#include "SPILock.h" -#include #include "GxEPD2_BW.h" +#include "SPILock.h" +#include "main.h" +#include #define COLORED GxEPD_BLACK #define UNCOLORED GxEPD_WHITE @@ -14,26 +14,27 @@ #define TECHO_DISPLAY_MODEL GxEPD2_154_D67 #elif defined(RAK4630) -//GxEPD2_213_BN - RAK14000 2.13 inch b/w 250x122 - changed from GxEPD2_213_B74 - which was not going to give partial update support +// GxEPD2_213_BN - RAK14000 2.13 inch b/w 250x122 - changed from GxEPD2_213_B74 - which was not going to give partial update +// support #define TECHO_DISPLAY_MODEL GxEPD2_213_BN -//4.2 inch 300x400 - GxEPD2_420_M01 +// 4.2 inch 300x400 - GxEPD2_420_M01 //#define TECHO_DISPLAY_MODEL GxEPD2_420_M01 -//2.9 inch 296x128 - GxEPD2_290_T5D +// 2.9 inch 296x128 - GxEPD2_290_T5D //#define TECHO_DISPLAY_MODEL GxEPD2_290_T5D -//1.54 inch 200x200 - GxEPD2_154_M09 +// 1.54 inch 200x200 - GxEPD2_154_M09 //#define TECHO_DISPLAY_MODEL GxEPD2_154_M09 #elif defined(PCA10059) -//4.2 inch 300x400 - GxEPD2_420_M01 +// 4.2 inch 300x400 - GxEPD2_420_M01 #define TECHO_DISPLAY_MODEL GxEPD2_420_M01 #elif defined(M5_COREINK) -//M5Stack CoreInk -//1.54 inch 200x200 - GxEPD2_154_M09 +// M5Stack CoreInk +// 1.54 inch 200x200 - GxEPD2_154_M09 #define TECHO_DISPLAY_MODEL GxEPD2_154_M09 #endif @@ -42,34 +43,34 @@ GxEPD2_BW *adafruitDisplay; EInkDisplay::EInkDisplay(uint8_t address, int sda, int scl) { - #if defined(TTGO_T_ECHO) +#if defined(TTGO_T_ECHO) setGeometry(GEOMETRY_RAWMODE, TECHO_DISPLAY_MODEL::WIDTH, TECHO_DISPLAY_MODEL::HEIGHT); - #elif defined(RAK4630) - - //GxEPD2_213_BN - RAK14000 2.13 inch b/w 250x122 +#elif defined(RAK4630) + + // GxEPD2_213_BN - RAK14000 2.13 inch b/w 250x122 setGeometry(GEOMETRY_RAWMODE, 250, 122); - //GxEPD2_420_M01 - //setGeometry(GEOMETRY_RAWMODE, 300, 400); + // GxEPD2_420_M01 + // setGeometry(GEOMETRY_RAWMODE, 300, 400); - //GxEPD2_290_T5D - //setGeometry(GEOMETRY_RAWMODE, 296, 128); + // GxEPD2_290_T5D + // setGeometry(GEOMETRY_RAWMODE, 296, 128); - //GxEPD2_154_M09 - //setGeometry(GEOMETRY_RAWMODE, 200, 200); - - #elif defined(PCA10059) + // GxEPD2_154_M09 + // setGeometry(GEOMETRY_RAWMODE, 200, 200); - //GxEPD2_420_M01 +#elif defined(PCA10059) + + // GxEPD2_420_M01 setGeometry(GEOMETRY_RAWMODE, 300, 400); - - #elif defined(M5_COREINK) - - //M5Stack_CoreInk 200x200 - //1.54 inch 200x200 - GxEPD2_154_M09 + +#elif defined(M5_COREINK) + + // M5Stack_CoreInk 200x200 + // 1.54 inch 200x200 - GxEPD2_154_M09 setGeometry(GEOMETRY_RAWMODE, EPD_HEIGHT, EPD_WIDTH); - #endif +#endif // setGeometry(GEOMETRY_RAWMODE, 128, 64); // old resolution // setGeometry(GEOMETRY_128_64); // We originally used this because I wasn't sure if rawmode worked - it does } @@ -104,28 +105,28 @@ bool EInkDisplay::forceDisplay(uint32_t msecLimit) } LOG_DEBUG("Updating E-Paper... "); - - #if defined(TTGO_T_ECHO) + +#if defined(TTGO_T_ECHO) // ePaper.Reset(); // wake the screen from sleep adafruitDisplay->display(false); // FIXME, use partial update mode - #elif defined(RAK4630) - - //RAK14000 2.13 inch b/w 250x122 actually now does support partial updates - - //Full update mode (slow) - //adafruitDisplay->display(false); // FIXME, use partial update mode - - //Only enable for e-Paper with support for partial updates and comment out above adafruitDisplay->display(false); - // 1.54 inch 200x200 - GxEPD2_154_M09 - // 2.13 inch 250x122 - GxEPD2_213_BN - // 2.9 inch 296x128 - GxEPD2_290_T5D - // 4.2 inch 300x400 - GxEPD2_420_M01 +#elif defined(RAK4630) + + // RAK14000 2.13 inch b/w 250x122 actually now does support partial updates + + // Full update mode (slow) + // adafruitDisplay->display(false); // FIXME, use partial update mode + + // Only enable for e-Paper with support for partial updates and comment out above adafruitDisplay->display(false); + // 1.54 inch 200x200 - GxEPD2_154_M09 + // 2.13 inch 250x122 - GxEPD2_213_BN + // 2.9 inch 296x128 - GxEPD2_290_T5D + // 4.2 inch 300x400 - GxEPD2_420_M01 adafruitDisplay->nextPage(); - - #elif defined(PCA10059) || defined(M5_COREINK) + +#elif defined(PCA10059) || defined(M5_COREINK) adafruitDisplay->nextPage(); - #endif - +#endif + // Put screen to sleep to save power (possibly not necessary because we already did poweroff inside of display) adafruitDisplay->hibernate(); LOG_DEBUG("done\n"); @@ -175,41 +176,40 @@ bool EInkDisplay::connect() pinMode(PIN_EINK_EN, OUTPUT); #endif - #if defined(TTGO_T_ECHO) -{ - auto lowLevel = new TECHO_DISPLAY_MODEL(PIN_EINK_CS, PIN_EINK_DC, PIN_EINK_RES, PIN_EINK_BUSY, SPI1); - - adafruitDisplay = new GxEPD2_BW(*lowLevel); - adafruitDisplay->init(); - adafruitDisplay->setRotation(3); -} -#elif defined(RAK4630) -{ - if (eink_found) { - auto lowLevel = new TECHO_DISPLAY_MODEL(PIN_EINK_CS, PIN_EINK_DC, PIN_EINK_RES, PIN_EINK_BUSY); + { + auto lowLevel = new TECHO_DISPLAY_MODEL(PIN_EINK_CS, PIN_EINK_DC, PIN_EINK_RES, PIN_EINK_BUSY, SPI1); adafruitDisplay = new GxEPD2_BW(*lowLevel); - - adafruitDisplay->init(115200, true, 10, false, SPI1, SPISettings(4000000, MSBFIRST, SPI_MODE0)); - - //RAK14000 2.13 inch b/w 250x122 does actually now support partial updates + adafruitDisplay->init(); adafruitDisplay->setRotation(3); - //Partial update support for 1.54, 2.13 RAK14000 b/w , 2.9 and 4.2 - //adafruitDisplay->setRotation(1); - adafruitDisplay->setPartialWindow(0, 0, displayWidth, displayHeight); - } else { - (void)adafruitDisplay; - } -} + } +#elif defined(RAK4630) + { + if (eink_found) { + auto lowLevel = new TECHO_DISPLAY_MODEL(PIN_EINK_CS, PIN_EINK_DC, PIN_EINK_RES, PIN_EINK_BUSY); + + adafruitDisplay = new GxEPD2_BW(*lowLevel); + + adafruitDisplay->init(115200, true, 10, false, SPI1, SPISettings(4000000, MSBFIRST, SPI_MODE0)); + + // RAK14000 2.13 inch b/w 250x122 does actually now support partial updates + adafruitDisplay->setRotation(3); + // Partial update support for 1.54, 2.13 RAK14000 b/w , 2.9 and 4.2 + // adafruitDisplay->setRotation(1); + adafruitDisplay->setPartialWindow(0, 0, displayWidth, displayHeight); + } else { + (void)adafruitDisplay; + } + } #elif defined(PCA10059) -{ - auto lowLevel = new TECHO_DISPLAY_MODEL(PIN_EINK_CS, PIN_EINK_DC, PIN_EINK_RES, PIN_EINK_BUSY); - adafruitDisplay = new GxEPD2_BW(*lowLevel); - adafruitDisplay->init(115200, true, 10, false, SPI1, SPISettings(4000000, MSBFIRST, SPI_MODE0)); - adafruitDisplay->setRotation(3); - adafruitDisplay->setPartialWindow(0, 0, displayWidth, displayHeight); -} + { + auto lowLevel = new TECHO_DISPLAY_MODEL(PIN_EINK_CS, PIN_EINK_DC, PIN_EINK_RES, PIN_EINK_BUSY); + adafruitDisplay = new GxEPD2_BW(*lowLevel); + adafruitDisplay->init(115200, true, 10, false, SPI1, SPISettings(4000000, MSBFIRST, SPI_MODE0)); + adafruitDisplay->setRotation(3); + adafruitDisplay->setPartialWindow(0, 0, displayWidth, displayHeight); + } #elif defined(M5_COREINK) auto lowLevel = new TECHO_DISPLAY_MODEL(PIN_EINK_CS, PIN_EINK_DC, PIN_EINK_RES, PIN_EINK_BUSY); adafruitDisplay = new GxEPD2_BW(*lowLevel); @@ -217,12 +217,11 @@ bool EInkDisplay::connect() adafruitDisplay->setRotation(0); adafruitDisplay->setPartialWindow(0, 0, EPD_WIDTH, EPD_HEIGHT); #endif - - - //adafruitDisplay->setFullWindow(); - //adafruitDisplay->fillScreen(UNCOLORED); - //adafruitDisplay->drawCircle(100, 100, 20, COLORED); - //adafruitDisplay->display(false); + + // adafruitDisplay->setFullWindow(); + // adafruitDisplay->fillScreen(UNCOLORED); + // adafruitDisplay->drawCircle(100, 100, 20, COLORED); + // adafruitDisplay->display(false); return true; } diff --git a/src/graphics/EInkDisplay2.h b/src/graphics/EInkDisplay2.h index 727132d0..7d56c802 100644 --- a/src/graphics/EInkDisplay2.h +++ b/src/graphics/EInkDisplay2.h @@ -17,26 +17,26 @@ class EInkDisplay : public OLEDDisplay /// How often should we update the display /// thereafter we do once per 5 minutes uint32_t slowUpdateMsec = 5 * 60 * 1000; - + public: /* constructor FIXME - the parameters are not used, just a temporary hack to keep working like the old displays */ - EInkDisplay(uint8_t address, int sda, int scl); + EInkDisplay(uint8_t address, int sda, int scl, uint8_t screen_model); // Write the buffer to the display memory (for eink we only do this occasionally) virtual void display(void) override; /** * Force a display update if we haven't drawn within the specified msecLimit - * + * * @return true if we did draw the screen */ bool forceDisplay(uint32_t msecLimit = 1000); /** * shim to make the abstraction happy - * + * */ void setDetected(uint8_t detected); @@ -50,5 +50,3 @@ class EInkDisplay : public OLEDDisplay // Connect to the display virtual bool connect() override; }; - - diff --git a/src/graphics/TFTDisplay.cpp b/src/graphics/TFTDisplay.cpp index 670c0f16..e296bc1e 100644 --- a/src/graphics/TFTDisplay.cpp +++ b/src/graphics/TFTDisplay.cpp @@ -22,7 +22,7 @@ void TFTDisplay::display(void) { concurrency::LockGuard g(spiLock); - uint16_t x,y; + uint16_t x, y; for (y = 0; y < displayHeight; y++) { for (x = 0; x < displayWidth; x++) { diff --git a/src/graphics/TFTDisplay.h b/src/graphics/TFTDisplay.h index c9749d9a..c18dc03c 100644 --- a/src/graphics/TFTDisplay.h +++ b/src/graphics/TFTDisplay.h @@ -18,14 +18,14 @@ class TFTDisplay : public OLEDDisplay /* constructor FIXME - the parameters are not used, just a temporary hack to keep working like the old displays */ - TFTDisplay(uint8_t address, int sda, int scl); + TFTDisplay(uint8_t address, int sda, int scl, uint8_t screen_model); // Write the buffer to the display memory virtual void display(void) override; - + /** * shim to make the abstraction happy - * + * */ void setDetected(uint8_t detected);