diff --git a/platformio.ini b/platformio.ini index f7974b2e6..d45101430 100644 --- a/platformio.ini +++ b/platformio.ini @@ -23,8 +23,9 @@ default_envs = tbeam ;default_envs = t-echo ;default_envs = nrf52840dk-geeksville ;default_envs = native # lora-relay-v1 # nrf52840dk-geeksville # linux # or if you'd like to change the default to something like lora-relay-v1 put that here -;default_envs = rak4631 -;default_envs = rak4630 +;default_envs = rak4631_5005 +;default_envs = rak4631_5005_eink +;default_envs = rak4631_19003 ;default_envs = meshtastic-diy-v1 ;default_envs = meshtastic-diy-v1.1 @@ -265,4 +266,4 @@ monitor_port = /dev/ttyUSB0 monitor_speed = 115200 # For experimenting with RAM sizes -# board_build.ldscript = linker/nrf52840_s140_sim832.ld \ No newline at end of file +# board_build.ldscript = linker/nrf52840_s140_sim832.ld diff --git a/src/graphics/EInkDisplay2.cpp b/src/graphics/EInkDisplay2.cpp index 2432e6f1c..4c030b60c 100644 --- a/src/graphics/EInkDisplay2.cpp +++ b/src/graphics/EInkDisplay2.cpp @@ -12,7 +12,19 @@ #if defined(TTGO_T_ECHO) #define TECHO_DISPLAY_MODEL GxEPD2_154_D67 #elif defined(RAK4630) + +//GxEPD2_213_B74 - RAK14000 2.13 inch b/w 250x128 #define TECHO_DISPLAY_MODEL GxEPD2_213_B74 + +//4.2 inch 300x400 - GxEPD2_420_M01 +//#define TECHO_DISPLAY_MODEL GxEPD2_420_M01 + +//2.9 inch 296x128 - GxEPD2_290_T5D +//#define TECHO_DISPLAY_MODEL GxEPD2_290_T5D + +//1.54 inch 200x200 - GxEPD2_154_M09 +//#define TECHO_DISPLAY_MODEL GxEPD2_154_M09 + #endif GxEPD2_BW *adafruitDisplay; @@ -22,7 +34,19 @@ EInkDisplay::EInkDisplay(uint8_t address, int sda, int scl) #if defined(TTGO_T_ECHO) setGeometry(GEOMETRY_RAWMODE, TECHO_DISPLAY_MODEL::WIDTH, TECHO_DISPLAY_MODEL::HEIGHT); #elif defined(RAK4630) + + //GxEPD2_213_B74 - RAK14000 2.13 inch b/w 250x128 setGeometry(GEOMETRY_RAWMODE, 250, 122); + + //GxEPD2_420_M01 + //setGeometry(GEOMETRY_RAWMODE, 300, 400); + + //GxEPD2_290_T5D + //setGeometry(GEOMETRY_RAWMODE, 296, 128); + + //GxEPD2_154_M09 + //setGeometry(GEOMETRY_RAWMODE, 200, 200); + #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 @@ -47,8 +71,8 @@ bool EInkDisplay::forceDisplay(uint32_t msecLimit) // FIXME - only draw bits have changed (use backbuf similar to the other displays) // tft.drawBitmap(0, 0, buffer, 128, 64, TFT_YELLOW, TFT_BLACK); - for (uint8_t y = 0; y < displayHeight; y++) { - for (uint8_t x = 0; x < displayWidth; x++) { + for (uint64_t y = 0; y < displayHeight; y++) { + for (uint64_t x = 0; x < displayWidth; x++) { // get src pixel in the page based ordering the OLED lib uses FIXME, super inefficent auto b = buffer[x + (y / 8) * displayWidth]; @@ -63,8 +87,22 @@ bool EInkDisplay::forceDisplay(uint32_t msecLimit) DEBUG_MSG("Updating RAK4361_5005 E-Paper... "); #endif + #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 does not support partial updates + 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.9 inch 296x128 - GxEPD2_290_T5D + // 4.2 inch 300x400 - GxEPD2_420_M01 + //adafruitDisplay->nextPage(); + + #endif + // Put screen to sleep to save power (possibly not necessary because we already did poweroff inside of display) adafruitDisplay->hibernate(); DEBUG_MSG("done\n"); @@ -109,14 +147,33 @@ bool EInkDisplay::connect() pinMode(PIN_EINK_EN, OUTPUT); #endif - auto lowLevel = new TECHO_DISPLAY_MODEL(PIN_EINK_CS, - PIN_EINK_DC, - PIN_EINK_RES, - PIN_EINK_BUSY, SPI1); + +#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) +{ + 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 not support partial updates + adafruitDisplay->setRotation(3); + //For 1.54, 2.9 and 4.2 + //adafruitDisplay->setRotation(1); + + adafruitDisplay->setPartialWindow(0, 0, displayWidth, displayHeight); +} +#endif + + //adafruitDisplay->setFullWindow(); //adafruitDisplay->fillScreen(UNCOLORED); //adafruitDisplay->drawCircle(100, 100, 20, COLORED); diff --git a/variants/WisCore_RAK4631_E-Paper_Board/platformio.ini b/variants/WisCore_RAK4631_E-Paper_Board/platformio.ini index 19874b93c..19855006b 100644 --- a/variants/WisCore_RAK4631_E-Paper_Board/platformio.ini +++ b/variants/WisCore_RAK4631_E-Paper_Board/platformio.ini @@ -5,5 +5,5 @@ build_flags = ${nrf52840_base.build_flags} -Ivariants/WisCore_RAK4631_E-Paper_Bo src_filter = ${nrf52_base.src_filter} +<../variants/WisCore_RAK4631_E-Paper_Board> lib_deps = ${nrf52840_base.lib_deps} - https://github.com/meshtastic/GxEPD2.git + https://github.com/ZinggJM/GxEPD2.git debug_tool = jlink diff --git a/variants/t-echo/platformio.ini b/variants/t-echo/platformio.ini index 495eaf91a..9714b0268 100644 --- a/variants/t-echo/platformio.ini +++ b/variants/t-echo/platformio.ini @@ -12,6 +12,6 @@ build_flags = ${nrf52840_base.build_flags} -Ivariants/t-echo src_filter = ${nrf52_base.src_filter} +<../variants/t-echo> lib_deps = ${nrf52840_base.lib_deps} - https://github.com/geeksville/GxEPD2.git + https://github.com/meshtastic/GxEPD2 adafruit/Adafruit BusIO -;upload_protocol = fs \ No newline at end of file +;upload_protocol = fs