From 7457c3e4a8befa644fc9e70015d5a3e84ed801aa Mon Sep 17 00:00:00 2001 From: ZinggJM Date: Wed, 11 Aug 2021 14:58:10 +0200 Subject: [PATCH] Version 1.3.7 - added support for GDEW0102T4 1.02" b/w 80x128 panel or Waveshare 1.02" b/w board - the GDEW0102T4 panel has a different connector than the other SPI panels - the GDEW0102T4 panel can be used with the DESPI-C102 connection module - https://buy-lcd.com/products/connection-board-demo-kit-for-102-inch-e-ink-display-despi-c102 - my test have been done with the Waveshare 1.02" b/w board --- README.md | 9 +- examples/GxEPD2_Example/GxEPD2_Example.ino | 70 ++- .../GxEPD2_Example/GxEPD2_display_selection.h | 4 + .../GxEPD2_display_selection_added.h | 5 + .../GxEPD2_display_selection_new_style.h | 1 + .../GxEPD2_Example/GxEPD2_selection_check.h | 1 + .../GxEPD2_display_selection.h | 4 + .../GxEPD2_display_selection_added.h | 5 + .../GxEPD2_display_selection_new_style.h | 1 + .../GxEPD2_selection_check.h | 1 + .../GxEPD2_display_selection.h | 4 + .../GxEPD2_display_selection_added.h | 5 + .../GxEPD2_display_selection_new_style.h | 1 + .../GxEPD2_selection_check.h | 1 + .../GxEPD2_display_selection_new_style.h | 1 + .../GxEPD2_selection_check.h | 1 + .../GxEPD2_display_selection_new_style.h | 1 + .../GxEPD2_selection_check.h | 1 + .../GxEPD2_display_selection_new_style.h | 1 + .../GxEPD2_selection_check.h | 1 + .../GxEPD2_display_selection_new_style.h | 1 + .../GxEPD2_selection_check.h | 1 + .../GxEPD2_display_selection_new_style.h | 1 + .../GxEPD2_selection_check.h | 1 + .../GxEPD2_display_selection_new_style.h | 1 + .../GxEPD2_selection_check.h | 1 + .../GxEPD2_display_selection_new_style.h | 1 + .../GxEPD2_selection_check.h | 1 + library.properties | 2 +- src/GxEPD2.h | 1 + src/GxEPD2_BW.h | 1 + src/bitmaps/Bitmaps80x128.h | 432 ++++++++++++++++++ src/bitmaps/WS_Bitmaps80x128.h | 120 +++++ src/epd/GxEPD2_102.cpp | 429 +++++++++++++++++ src/epd/GxEPD2_102.h | 83 ++++ 35 files changed, 1185 insertions(+), 9 deletions(-) create mode 100644 src/bitmaps/Bitmaps80x128.h create mode 100644 src/bitmaps/WS_Bitmaps80x128.h create mode 100644 src/epd/GxEPD2_102.cpp create mode 100644 src/epd/GxEPD2_102.h diff --git a/README.md b/README.md index 5488b37..11d7411 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,7 @@ - https://github.com/olikraus/u8glib/wiki/tpictureloop ### Supported SPI e-paper panels from Good Display: +- GDEW0102T4 1.02" b/w - GDEP015OC1 1.54" b/w - GDEH0154D67 1.54" b/w, replacement for GDEP015OC1 - GDEW0154T8 1.54" b/w 152x152 @@ -104,7 +105,13 @@ - promotion panels from suppliers are welcome, to add support to GxEPD2 - donation panels from users are welcome, to add support to GxEPD2 -### Version 1.3.6 +### Version 1.3.7 +- added support for GDEW0102T4 1.02" b/w 80x128 panel or Waveshare 1.02" b/w board +- the GDEW0102T4 panel has a different connector than the other SPI panels +- the GDEW0102T4 panel can be used with the DESPI-C102 connection module +- https://buy-lcd.com/products/connection-board-demo-kit-for-102-inch-e-ink-display-despi-c102 +- my test have been done with the Waveshare 1.02" b/w board +#### Version 1.3.6 - added support for Waveshare 2.9" b/w V2, driver class GxEPD2_290_T94_V2 - Waveshare 2.9" b/w V2 uses a GDEM029T94 variant without partial update wft in OTP - driver class GxEPD2_290_T94_V2 uses partial update wft written to registers diff --git a/examples/GxEPD2_Example/GxEPD2_Example.ino b/examples/GxEPD2_Example/GxEPD2_Example.ino index 9aec3d8..e04532f 100644 --- a/examples/GxEPD2_Example/GxEPD2_Example.ino +++ b/examples/GxEPD2_Example/GxEPD2_Example.ino @@ -43,6 +43,7 @@ // therefore bitmaps may get optimized out by the linker // comment out unused bitmaps to reduce code space used +#include "bitmaps/Bitmaps80x128.h" // 1.02" b/w #include "bitmaps/Bitmaps152x152.h" // 1.54" b/w #include "bitmaps/Bitmaps200x200.h" // 1.54" b/w #include "bitmaps/Bitmaps104x212.h" // 2.13" b/w flexible GDEW0213I5F @@ -74,6 +75,7 @@ #else // select only one to fit in code space +//#include "bitmaps/Bitmaps80x128.h" // 1.02" b/w #include "bitmaps/Bitmaps200x200.h" // 1.54" b/w //#include "bitmaps/Bitmaps104x212.h" // 2.13" b/w flexible GDEW0213I5F //#include "bitmaps/Bitmaps128x250.h" // 2.13" b/w @@ -113,6 +115,11 @@ void setup() //delay(1000); showFont("FreeMonoBold9pt7b", &FreeMonoBold9pt7b); delay(1000); + if (display.epd2.WIDTH < 104) + { + showFont("glcdfont", 0); + delay(1000); + } drawBitmaps(); #if !defined(__AVR) // takes too long! if (display.epd2.panel == GxEPD2::ACeP565) @@ -158,6 +165,7 @@ void helloWorld() //Serial.println("helloWorld"); display.setRotation(1); display.setFont(&FreeMonoBold9pt7b); + if (display.epd2.WIDTH < 104) display.setFont(0); display.setTextColor(GxEPD_BLACK); int16_t tbx, tby; uint16_t tbw, tbh; display.getTextBounds(HelloWorld, 0, 0, &tbx, &tby, &tbw, &tbh); @@ -232,6 +240,7 @@ void helloFullScreenPartialMode() display.setPartialWindow(0, 0, display.width(), display.height()); display.setRotation(1); display.setFont(&FreeMonoBold9pt7b); + if (display.epd2.WIDTH < 104) display.setFont(0); display.setTextColor(GxEPD_BLACK); const char* updatemode; if (display.epd2.hasFastPartialUpdate) @@ -280,6 +289,7 @@ void helloArduino() //Serial.println("helloArduino"); display.setRotation(1); display.setFont(&FreeMonoBold9pt7b); + if (display.epd2.WIDTH < 104) display.setFont(0); display.setTextColor(display.epd2.hasColor ? GxEPD_RED : GxEPD_BLACK); int16_t tbx, tby; uint16_t tbw, tbh; // align with centered HelloWorld @@ -310,6 +320,7 @@ void helloEpaper() //Serial.println("helloEpaper"); display.setRotation(1); display.setFont(&FreeMonoBold9pt7b); + if (display.epd2.WIDTH < 104) display.setFont(0); display.setTextColor(display.epd2.hasColor ? GxEPD_RED : GxEPD_BLACK); int16_t tbx, tby; uint16_t tbw, tbh; // align with centered HelloWorld @@ -317,7 +328,7 @@ void helloEpaper() uint16_t x = ((display.width() - tbw) / 2) - tbx; // height might be different display.getTextBounds(HelloEpaper, 0, 0, &tbx, &tby, &tbw, &tbh); - uint16_t y = (display.height() * 3 / 4) + tbh / 2; // y is base line! + uint16_t y = ((display.height() * 3 / 4) - tbh / 2) - tby; // y is base line! // make the window big enough to cover (overwrite) descenders of previous text uint16_t wh = FreeMonoBold9pt7b.yAdvance; uint16_t wy = (display.height() * 3 / 4) - wh / 2; @@ -392,10 +403,10 @@ void helloValue(double v, int digits) int16_t tbx, tby; uint16_t tbw, tbh; display.getTextBounds(valueString, 0, 0, &tbx, &tby, &tbw, &tbh); uint16_t x = ((display.width() - tbw) / 2) - tbx; - uint16_t y = (display.height() * 3 / 4) + tbh / 2; // y is base line! + uint16_t y = ((display.height() * 3 / 4) - tbh / 2) - tby; // y is base line! // show what happens, if we use the bounding box for partial window uint16_t wx = (display.width() - tbw) / 2; - uint16_t wy = (display.height() * 3 / 4) - tbh / 2; + uint16_t wy = ((display.height() * 3 / 4) - tbh / 2) - tby; // y is base line! display.setPartialWindow(wx, wy, tbw, tbh); display.firstPage(); do @@ -438,6 +449,7 @@ void deepSleepTest() const char again[] = "again"; display.setRotation(1); display.setFont(&FreeMonoBold9pt7b); + if (display.epd2.WIDTH < 104) display.setFont(0); display.setTextColor(GxEPD_BLACK); int16_t tbx, tby; uint16_t tbw, tbh; // center text @@ -457,10 +469,10 @@ void deepSleepTest() delay(5000); display.getTextBounds(wokeup, 0, 0, &tbx, &tby, &tbw, &tbh); uint16_t wx = (display.width() - tbw) / 2; - uint16_t wy = (display.height() / 3) + tbh / 2; // y is base line! + uint16_t wy = ((display.height() / 3) - tbh / 2) - tby; // y is base line! display.getTextBounds(from, 0, 0, &tbx, &tby, &tbw, &tbh); uint16_t fx = (display.width() - tbw) / 2; - uint16_t fy = (display.height() * 2 / 3) + tbh / 2; // y is base line! + uint16_t fy = ((display.height() * 2 / 3) - tbh / 2) - tby; // y is base line! display.firstPage(); do { @@ -474,10 +486,10 @@ void deepSleepTest() delay(5000); display.getTextBounds(hibernating, 0, 0, &tbx, &tby, &tbw, &tbh); uint16_t hx = (display.width() - tbw) / 2; - uint16_t hy = (display.height() / 3) + tbh / 2; // y is base line! + uint16_t hy = ((display.height() / 3) - tbh / 2) - tby; // y is base line! display.getTextBounds(again, 0, 0, &tbx, &tby, &tbw, &tbh); uint16_t ax = (display.width() - tbw) / 2; - uint16_t ay = (display.height() * 2 / 3) + tbh / 2; // y is base line! + uint16_t ay = ((display.height() * 2 / 3) - tbh / 2) - tby; // y is base line! display.firstPage(); do { @@ -588,9 +600,11 @@ void showPartialUpdate() uint16_t box_w = 70; uint16_t box_h = 20; uint16_t cursor_y = box_y + box_h - 6; + if (display.epd2.WIDTH < 104) cursor_y = box_y + 6; float value = 13.95; uint16_t incr = display.epd2.hasFastPartialUpdate ? 1 : 3; display.setFont(&FreeMonoBold9pt7b); + if (display.epd2.WIDTH < 104) display.setFont(0); display.setTextColor(GxEPD_BLACK); // show where the update box is for (uint16_t r = 0; r < 4; r++) @@ -646,6 +660,9 @@ void showPartialUpdate() void drawBitmaps() { display.setFullWindow(); +#ifdef _GxBitmaps80x128_H_ + drawBitmaps80x128(); +#endif #ifdef _GxBitmaps152x152_H_ drawBitmaps152x152(); #endif @@ -720,6 +737,45 @@ void drawBitmaps() } } +#ifdef _GxBitmaps80x128_H_ +void drawBitmaps80x128() +{ +#if !defined(__AVR) + const unsigned char* bitmaps[] = + { + Bitmap80x128_1, Bitmap80x128_2, Bitmap80x128_3, Bitmap80x128_4, Bitmap80x128_5 + }; +#else + const unsigned char* bitmaps[] = + { + Bitmap80x128_1, Bitmap80x128_2, Bitmap80x128_3, Bitmap80x128_4, Bitmap80x128_5 + }; +#endif + if ((display.epd2.WIDTH == 80) && (display.epd2.HEIGHT == 128)) + { + for (uint16_t i = 0; i < sizeof(bitmaps) / sizeof(char*); i++) + { + display.firstPage(); + do + { + display.fillScreen(GxEPD_WHITE); + display.drawInvertedBitmap(0, 0, bitmaps[i], 80, 128, GxEPD_BLACK); + } + while (display.nextPage()); + delay(2000); + } + display.firstPage(); + do + { + display.fillScreen(GxEPD_WHITE); + display.drawBitmap(0, 0, WS_Bitmap80x128, 80, 128, GxEPD_BLACK); + } + while (display.nextPage()); + delay(2000); + } +} +#endif + #ifdef _GxBitmaps152x152_H_ void drawBitmaps152x152() { diff --git a/examples/GxEPD2_Example/GxEPD2_display_selection.h b/examples/GxEPD2_Example/GxEPD2_display_selection.h index d6278b6..c0d1865 100644 --- a/examples/GxEPD2_Example/GxEPD2_display_selection.h +++ b/examples/GxEPD2_Example/GxEPD2_display_selection.h @@ -15,6 +15,7 @@ #if defined (ESP8266) // select one and adapt to your mapping, can use full buffer size (full HEIGHT) +//GxEPD2_BW display(GxEPD2_102(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW0154T8 152x152 @@ -125,6 +126,7 @@ #if defined(ESP32) // select one and adapt to your mapping, can use full buffer size (full HEIGHT) +//GxEPD2_BW display(GxEPD2_102(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW0154T8 152x152 @@ -191,6 +193,7 @@ #define MAX_DISPLAY_BUFFER_SIZE 15000ul // ~15k is a good compromise #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) // select one and adapt to your mapping +//GxEPD2_BW display(GxEPD2_102(/*CS=4*/ SS, /*DC=*/ 3, /*RST=*/ 2, /*BUSY=*/ 1)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=4*/ SS, /*DC=*/ 3, /*RST=*/ 2, /*BUSY=*/ 1)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=4*/ SS, /*DC=*/ 3, /*RST=*/ 2, /*BUSY=*/ 1)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=4*/ SS, /*DC=*/ 3, /*RST=*/ 2, /*BUSY=*/ 1)); // GDEW0154T8 152x152 @@ -248,6 +251,7 @@ #endif #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) // select one and adapt to your mapping +//GxEPD2_BW display(GxEPD2_102(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154T8 152x152 diff --git a/examples/GxEPD2_Example/GxEPD2_display_selection_added.h b/examples/GxEPD2_Example/GxEPD2_display_selection_added.h index 02df9d5..645a2d6 100644 --- a/examples/GxEPD2_Example/GxEPD2_display_selection_added.h +++ b/examples/GxEPD2_Example/GxEPD2_display_selection_added.h @@ -22,6 +22,7 @@ #define MAX_DISPLAY_BUFFER_SIZE 32768ul // e.g., up to 96k #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) // select one and adapt to your mapping +//GxEPD2_BW display(GxEPD2_102(/*CS=77*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=77*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=77*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(//*CS=77*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154T8 152x152 @@ -86,6 +87,7 @@ #define MAX_DISPLAY_BUFFER_SIZE 15000ul // ~15k is a good compromise #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) // select one and adapt to your mapping +//GxEPD2_BW display(GxEPD2_102(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW0154T8 152x152 @@ -146,6 +148,7 @@ #if defined(ESP32) && defined(ARDUINO_LOLIN_D32_PRO) // select one and adapt to your mapping, can use full buffer size (full HEIGHT) +//GxEPD2_BW display(GxEPD2_102(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW0154T8 152x152 @@ -204,6 +207,7 @@ #if defined(ESP32) && defined(ARDUINO_ESP32_DEV) // select one and adapt to your mapping, can use full buffer size (full HEIGHT) +//GxEPD2_BW display(GxEPD2_102(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW0154T8 152x152 @@ -316,6 +320,7 @@ #define MAX_DISPLAY_BUFFER_SIZE 131072ul // e.g. half of available ram #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) // select one and adapt to your mapping +//GxEPD2_BW display(GxEPD2_102(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154T8 152x152 diff --git a/examples/GxEPD2_Example/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_Example/GxEPD2_display_selection_new_style.h index 41ce631..c41bac7 100644 --- a/examples/GxEPD2_Example/GxEPD2_display_selection_new_style.h +++ b/examples/GxEPD2_Example/GxEPD2_display_selection_new_style.h @@ -19,6 +19,7 @@ //#define GxEPD2_DISPLAY_CLASS GxEPD2_7C // select the display driver class (only one) for your panel +//#define GxEPD2_DRIVER_CLASS GxEPD2_102 // GxEPD2_102 80x128, UC8175 //#define GxEPD2_DRIVER_CLASS GxEPD2_154 // GDEP015OC1 200x200, IL3829, no longer available //#define GxEPD2_DRIVER_CLASS GxEPD2_154_D67 // GDEH0154D67 200x200, SSD1681 //#define GxEPD2_DRIVER_CLASS GxEPD2_154_T8 // GDEW0154T8 152x152, UC8151 (IL0373) diff --git a/examples/GxEPD2_Example/GxEPD2_selection_check.h b/examples/GxEPD2_Example/GxEPD2_selection_check.h index dd61e89..3a499bc 100644 --- a/examples/GxEPD2_Example/GxEPD2_selection_check.h +++ b/examples/GxEPD2_Example/GxEPD2_selection_check.h @@ -13,6 +13,7 @@ // Waveshare e-paper displays with SPI: http://forum.arduino.cc/index.php?topic=487007.0 // Good Display ePaper for Arduino: https://forum.arduino.cc/index.php?topic=436411.0 +#define GxEPD2_102_IS_BW true #define GxEPD2_154_IS_BW true #define GxEPD2_154_D67_IS_BW true #define GxEPD2_154_T8_IS_BW true diff --git a/examples/GxEPD2_GFX_Example/GxEPD2_display_selection.h b/examples/GxEPD2_GFX_Example/GxEPD2_display_selection.h index d6278b6..c0d1865 100644 --- a/examples/GxEPD2_GFX_Example/GxEPD2_display_selection.h +++ b/examples/GxEPD2_GFX_Example/GxEPD2_display_selection.h @@ -15,6 +15,7 @@ #if defined (ESP8266) // select one and adapt to your mapping, can use full buffer size (full HEIGHT) +//GxEPD2_BW display(GxEPD2_102(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW0154T8 152x152 @@ -125,6 +126,7 @@ #if defined(ESP32) // select one and adapt to your mapping, can use full buffer size (full HEIGHT) +//GxEPD2_BW display(GxEPD2_102(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW0154T8 152x152 @@ -191,6 +193,7 @@ #define MAX_DISPLAY_BUFFER_SIZE 15000ul // ~15k is a good compromise #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) // select one and adapt to your mapping +//GxEPD2_BW display(GxEPD2_102(/*CS=4*/ SS, /*DC=*/ 3, /*RST=*/ 2, /*BUSY=*/ 1)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=4*/ SS, /*DC=*/ 3, /*RST=*/ 2, /*BUSY=*/ 1)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=4*/ SS, /*DC=*/ 3, /*RST=*/ 2, /*BUSY=*/ 1)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=4*/ SS, /*DC=*/ 3, /*RST=*/ 2, /*BUSY=*/ 1)); // GDEW0154T8 152x152 @@ -248,6 +251,7 @@ #endif #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) // select one and adapt to your mapping +//GxEPD2_BW display(GxEPD2_102(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154T8 152x152 diff --git a/examples/GxEPD2_GFX_Example/GxEPD2_display_selection_added.h b/examples/GxEPD2_GFX_Example/GxEPD2_display_selection_added.h index 02df9d5..645a2d6 100644 --- a/examples/GxEPD2_GFX_Example/GxEPD2_display_selection_added.h +++ b/examples/GxEPD2_GFX_Example/GxEPD2_display_selection_added.h @@ -22,6 +22,7 @@ #define MAX_DISPLAY_BUFFER_SIZE 32768ul // e.g., up to 96k #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) // select one and adapt to your mapping +//GxEPD2_BW display(GxEPD2_102(/*CS=77*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=77*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=77*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(//*CS=77*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154T8 152x152 @@ -86,6 +87,7 @@ #define MAX_DISPLAY_BUFFER_SIZE 15000ul // ~15k is a good compromise #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) // select one and adapt to your mapping +//GxEPD2_BW display(GxEPD2_102(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW0154T8 152x152 @@ -146,6 +148,7 @@ #if defined(ESP32) && defined(ARDUINO_LOLIN_D32_PRO) // select one and adapt to your mapping, can use full buffer size (full HEIGHT) +//GxEPD2_BW display(GxEPD2_102(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW0154T8 152x152 @@ -204,6 +207,7 @@ #if defined(ESP32) && defined(ARDUINO_ESP32_DEV) // select one and adapt to your mapping, can use full buffer size (full HEIGHT) +//GxEPD2_BW display(GxEPD2_102(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW0154T8 152x152 @@ -316,6 +320,7 @@ #define MAX_DISPLAY_BUFFER_SIZE 131072ul // e.g. half of available ram #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) // select one and adapt to your mapping +//GxEPD2_BW display(GxEPD2_102(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154T8 152x152 diff --git a/examples/GxEPD2_GFX_Example/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_GFX_Example/GxEPD2_display_selection_new_style.h index 41ce631..c41bac7 100644 --- a/examples/GxEPD2_GFX_Example/GxEPD2_display_selection_new_style.h +++ b/examples/GxEPD2_GFX_Example/GxEPD2_display_selection_new_style.h @@ -19,6 +19,7 @@ //#define GxEPD2_DISPLAY_CLASS GxEPD2_7C // select the display driver class (only one) for your panel +//#define GxEPD2_DRIVER_CLASS GxEPD2_102 // GxEPD2_102 80x128, UC8175 //#define GxEPD2_DRIVER_CLASS GxEPD2_154 // GDEP015OC1 200x200, IL3829, no longer available //#define GxEPD2_DRIVER_CLASS GxEPD2_154_D67 // GDEH0154D67 200x200, SSD1681 //#define GxEPD2_DRIVER_CLASS GxEPD2_154_T8 // GDEW0154T8 152x152, UC8151 (IL0373) diff --git a/examples/GxEPD2_GFX_Example/GxEPD2_selection_check.h b/examples/GxEPD2_GFX_Example/GxEPD2_selection_check.h index dd61e89..3a499bc 100644 --- a/examples/GxEPD2_GFX_Example/GxEPD2_selection_check.h +++ b/examples/GxEPD2_GFX_Example/GxEPD2_selection_check.h @@ -13,6 +13,7 @@ // Waveshare e-paper displays with SPI: http://forum.arduino.cc/index.php?topic=487007.0 // Good Display ePaper for Arduino: https://forum.arduino.cc/index.php?topic=436411.0 +#define GxEPD2_102_IS_BW true #define GxEPD2_154_IS_BW true #define GxEPD2_154_D67_IS_BW true #define GxEPD2_154_T8_IS_BW true diff --git a/examples/GxEPD2_HelloWorld/GxEPD2_display_selection.h b/examples/GxEPD2_HelloWorld/GxEPD2_display_selection.h index d6278b6..c0d1865 100644 --- a/examples/GxEPD2_HelloWorld/GxEPD2_display_selection.h +++ b/examples/GxEPD2_HelloWorld/GxEPD2_display_selection.h @@ -15,6 +15,7 @@ #if defined (ESP8266) // select one and adapt to your mapping, can use full buffer size (full HEIGHT) +//GxEPD2_BW display(GxEPD2_102(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEW0154T8 152x152 @@ -125,6 +126,7 @@ #if defined(ESP32) // select one and adapt to your mapping, can use full buffer size (full HEIGHT) +//GxEPD2_BW display(GxEPD2_102(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=5*/ SS, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4)); // GDEW0154T8 152x152 @@ -191,6 +193,7 @@ #define MAX_DISPLAY_BUFFER_SIZE 15000ul // ~15k is a good compromise #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) // select one and adapt to your mapping +//GxEPD2_BW display(GxEPD2_102(/*CS=4*/ SS, /*DC=*/ 3, /*RST=*/ 2, /*BUSY=*/ 1)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=4*/ SS, /*DC=*/ 3, /*RST=*/ 2, /*BUSY=*/ 1)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=4*/ SS, /*DC=*/ 3, /*RST=*/ 2, /*BUSY=*/ 1)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=4*/ SS, /*DC=*/ 3, /*RST=*/ 2, /*BUSY=*/ 1)); // GDEW0154T8 152x152 @@ -248,6 +251,7 @@ #endif #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) // select one and adapt to your mapping +//GxEPD2_BW display(GxEPD2_102(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154T8 152x152 diff --git a/examples/GxEPD2_HelloWorld/GxEPD2_display_selection_added.h b/examples/GxEPD2_HelloWorld/GxEPD2_display_selection_added.h index 02df9d5..645a2d6 100644 --- a/examples/GxEPD2_HelloWorld/GxEPD2_display_selection_added.h +++ b/examples/GxEPD2_HelloWorld/GxEPD2_display_selection_added.h @@ -22,6 +22,7 @@ #define MAX_DISPLAY_BUFFER_SIZE 32768ul // e.g., up to 96k #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) // select one and adapt to your mapping +//GxEPD2_BW display(GxEPD2_102(/*CS=77*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=77*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=77*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(//*CS=77*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154T8 152x152 @@ -86,6 +87,7 @@ #define MAX_DISPLAY_BUFFER_SIZE 15000ul // ~15k is a good compromise #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) // select one and adapt to your mapping +//GxEPD2_BW display(GxEPD2_102(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=4*/ 4, /*DC=*/ 7, /*RST=*/ 6, /*BUSY=*/ 5)); // GDEW0154T8 152x152 @@ -146,6 +148,7 @@ #if defined(ESP32) && defined(ARDUINO_LOLIN_D32_PRO) // select one and adapt to your mapping, can use full buffer size (full HEIGHT) +//GxEPD2_BW display(GxEPD2_102(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=5*/ 5, /*DC=*/ 0, /*RST=*/ 2, /*BUSY=*/ 15)); // GDEW0154T8 152x152 @@ -204,6 +207,7 @@ #if defined(ESP32) && defined(ARDUINO_ESP32_DEV) // select one and adapt to your mapping, can use full buffer size (full HEIGHT) +//GxEPD2_BW display(GxEPD2_102(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=5*/ 5, /*DC=*/ 2, /*RST=*/ 0, /*BUSY=*/ 4)); // GDEW0154T8 152x152 @@ -316,6 +320,7 @@ #define MAX_DISPLAY_BUFFER_SIZE 131072ul // e.g. half of available ram #define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8)) // select one and adapt to your mapping +//GxEPD2_BW display(GxEPD2_102(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0102T4 //GxEPD2_BW display(GxEPD2_154(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEP015OC1 no longer available //GxEPD2_BW display(GxEPD2_154_D67(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEH0154D67 //GxEPD2_BW display(GxEPD2_154_T8(/*CS=*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7)); // GDEW0154T8 152x152 diff --git a/examples/GxEPD2_HelloWorld/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_HelloWorld/GxEPD2_display_selection_new_style.h index 41ce631..c41bac7 100644 --- a/examples/GxEPD2_HelloWorld/GxEPD2_display_selection_new_style.h +++ b/examples/GxEPD2_HelloWorld/GxEPD2_display_selection_new_style.h @@ -19,6 +19,7 @@ //#define GxEPD2_DISPLAY_CLASS GxEPD2_7C // select the display driver class (only one) for your panel +//#define GxEPD2_DRIVER_CLASS GxEPD2_102 // GxEPD2_102 80x128, UC8175 //#define GxEPD2_DRIVER_CLASS GxEPD2_154 // GDEP015OC1 200x200, IL3829, no longer available //#define GxEPD2_DRIVER_CLASS GxEPD2_154_D67 // GDEH0154D67 200x200, SSD1681 //#define GxEPD2_DRIVER_CLASS GxEPD2_154_T8 // GDEW0154T8 152x152, UC8151 (IL0373) diff --git a/examples/GxEPD2_HelloWorld/GxEPD2_selection_check.h b/examples/GxEPD2_HelloWorld/GxEPD2_selection_check.h index dd61e89..3a499bc 100644 --- a/examples/GxEPD2_HelloWorld/GxEPD2_selection_check.h +++ b/examples/GxEPD2_HelloWorld/GxEPD2_selection_check.h @@ -13,6 +13,7 @@ // Waveshare e-paper displays with SPI: http://forum.arduino.cc/index.php?topic=487007.0 // Good Display ePaper for Arduino: https://forum.arduino.cc/index.php?topic=436411.0 +#define GxEPD2_102_IS_BW true #define GxEPD2_154_IS_BW true #define GxEPD2_154_D67_IS_BW true #define GxEPD2_154_T8_IS_BW true diff --git a/examples/GxEPD2_MinimumExample/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_MinimumExample/GxEPD2_display_selection_new_style.h index 41ce631..c41bac7 100644 --- a/examples/GxEPD2_MinimumExample/GxEPD2_display_selection_new_style.h +++ b/examples/GxEPD2_MinimumExample/GxEPD2_display_selection_new_style.h @@ -19,6 +19,7 @@ //#define GxEPD2_DISPLAY_CLASS GxEPD2_7C // select the display driver class (only one) for your panel +//#define GxEPD2_DRIVER_CLASS GxEPD2_102 // GxEPD2_102 80x128, UC8175 //#define GxEPD2_DRIVER_CLASS GxEPD2_154 // GDEP015OC1 200x200, IL3829, no longer available //#define GxEPD2_DRIVER_CLASS GxEPD2_154_D67 // GDEH0154D67 200x200, SSD1681 //#define GxEPD2_DRIVER_CLASS GxEPD2_154_T8 // GDEW0154T8 152x152, UC8151 (IL0373) diff --git a/examples/GxEPD2_MinimumExample/GxEPD2_selection_check.h b/examples/GxEPD2_MinimumExample/GxEPD2_selection_check.h index dd61e89..3a499bc 100644 --- a/examples/GxEPD2_MinimumExample/GxEPD2_selection_check.h +++ b/examples/GxEPD2_MinimumExample/GxEPD2_selection_check.h @@ -13,6 +13,7 @@ // Waveshare e-paper displays with SPI: http://forum.arduino.cc/index.php?topic=487007.0 // Good Display ePaper for Arduino: https://forum.arduino.cc/index.php?topic=436411.0 +#define GxEPD2_102_IS_BW true #define GxEPD2_154_IS_BW true #define GxEPD2_154_D67_IS_BW true #define GxEPD2_154_T8_IS_BW true diff --git a/examples/GxEPD2_NotPagedExample/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_NotPagedExample/GxEPD2_display_selection_new_style.h index 41ce631..c41bac7 100644 --- a/examples/GxEPD2_NotPagedExample/GxEPD2_display_selection_new_style.h +++ b/examples/GxEPD2_NotPagedExample/GxEPD2_display_selection_new_style.h @@ -19,6 +19,7 @@ //#define GxEPD2_DISPLAY_CLASS GxEPD2_7C // select the display driver class (only one) for your panel +//#define GxEPD2_DRIVER_CLASS GxEPD2_102 // GxEPD2_102 80x128, UC8175 //#define GxEPD2_DRIVER_CLASS GxEPD2_154 // GDEP015OC1 200x200, IL3829, no longer available //#define GxEPD2_DRIVER_CLASS GxEPD2_154_D67 // GDEH0154D67 200x200, SSD1681 //#define GxEPD2_DRIVER_CLASS GxEPD2_154_T8 // GDEW0154T8 152x152, UC8151 (IL0373) diff --git a/examples/GxEPD2_NotPagedExample/GxEPD2_selection_check.h b/examples/GxEPD2_NotPagedExample/GxEPD2_selection_check.h index dd61e89..3a499bc 100644 --- a/examples/GxEPD2_NotPagedExample/GxEPD2_selection_check.h +++ b/examples/GxEPD2_NotPagedExample/GxEPD2_selection_check.h @@ -13,6 +13,7 @@ // Waveshare e-paper displays with SPI: http://forum.arduino.cc/index.php?topic=487007.0 // Good Display ePaper for Arduino: https://forum.arduino.cc/index.php?topic=436411.0 +#define GxEPD2_102_IS_BW true #define GxEPD2_154_IS_BW true #define GxEPD2_154_D67_IS_BW true #define GxEPD2_154_T8_IS_BW true diff --git a/examples/GxEPD2_PagedDisplayUsingCallback/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_PagedDisplayUsingCallback/GxEPD2_display_selection_new_style.h index 41ce631..c41bac7 100644 --- a/examples/GxEPD2_PagedDisplayUsingCallback/GxEPD2_display_selection_new_style.h +++ b/examples/GxEPD2_PagedDisplayUsingCallback/GxEPD2_display_selection_new_style.h @@ -19,6 +19,7 @@ //#define GxEPD2_DISPLAY_CLASS GxEPD2_7C // select the display driver class (only one) for your panel +//#define GxEPD2_DRIVER_CLASS GxEPD2_102 // GxEPD2_102 80x128, UC8175 //#define GxEPD2_DRIVER_CLASS GxEPD2_154 // GDEP015OC1 200x200, IL3829, no longer available //#define GxEPD2_DRIVER_CLASS GxEPD2_154_D67 // GDEH0154D67 200x200, SSD1681 //#define GxEPD2_DRIVER_CLASS GxEPD2_154_T8 // GDEW0154T8 152x152, UC8151 (IL0373) diff --git a/examples/GxEPD2_PagedDisplayUsingCallback/GxEPD2_selection_check.h b/examples/GxEPD2_PagedDisplayUsingCallback/GxEPD2_selection_check.h index dd61e89..3a499bc 100644 --- a/examples/GxEPD2_PagedDisplayUsingCallback/GxEPD2_selection_check.h +++ b/examples/GxEPD2_PagedDisplayUsingCallback/GxEPD2_selection_check.h @@ -13,6 +13,7 @@ // Waveshare e-paper displays with SPI: http://forum.arduino.cc/index.php?topic=487007.0 // Good Display ePaper for Arduino: https://forum.arduino.cc/index.php?topic=436411.0 +#define GxEPD2_102_IS_BW true #define GxEPD2_154_IS_BW true #define GxEPD2_154_D67_IS_BW true #define GxEPD2_154_T8_IS_BW true diff --git a/examples/GxEPD2_SD_Example/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_SD_Example/GxEPD2_display_selection_new_style.h index 41ce631..c41bac7 100644 --- a/examples/GxEPD2_SD_Example/GxEPD2_display_selection_new_style.h +++ b/examples/GxEPD2_SD_Example/GxEPD2_display_selection_new_style.h @@ -19,6 +19,7 @@ //#define GxEPD2_DISPLAY_CLASS GxEPD2_7C // select the display driver class (only one) for your panel +//#define GxEPD2_DRIVER_CLASS GxEPD2_102 // GxEPD2_102 80x128, UC8175 //#define GxEPD2_DRIVER_CLASS GxEPD2_154 // GDEP015OC1 200x200, IL3829, no longer available //#define GxEPD2_DRIVER_CLASS GxEPD2_154_D67 // GDEH0154D67 200x200, SSD1681 //#define GxEPD2_DRIVER_CLASS GxEPD2_154_T8 // GDEW0154T8 152x152, UC8151 (IL0373) diff --git a/examples/GxEPD2_SD_Example/GxEPD2_selection_check.h b/examples/GxEPD2_SD_Example/GxEPD2_selection_check.h index dd61e89..3a499bc 100644 --- a/examples/GxEPD2_SD_Example/GxEPD2_selection_check.h +++ b/examples/GxEPD2_SD_Example/GxEPD2_selection_check.h @@ -13,6 +13,7 @@ // Waveshare e-paper displays with SPI: http://forum.arduino.cc/index.php?topic=487007.0 // Good Display ePaper for Arduino: https://forum.arduino.cc/index.php?topic=436411.0 +#define GxEPD2_102_IS_BW true #define GxEPD2_154_IS_BW true #define GxEPD2_154_D67_IS_BW true #define GxEPD2_154_T8_IS_BW true diff --git a/examples/GxEPD2_SerialFlash_Example/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_SerialFlash_Example/GxEPD2_display_selection_new_style.h index 41ce631..c41bac7 100644 --- a/examples/GxEPD2_SerialFlash_Example/GxEPD2_display_selection_new_style.h +++ b/examples/GxEPD2_SerialFlash_Example/GxEPD2_display_selection_new_style.h @@ -19,6 +19,7 @@ //#define GxEPD2_DISPLAY_CLASS GxEPD2_7C // select the display driver class (only one) for your panel +//#define GxEPD2_DRIVER_CLASS GxEPD2_102 // GxEPD2_102 80x128, UC8175 //#define GxEPD2_DRIVER_CLASS GxEPD2_154 // GDEP015OC1 200x200, IL3829, no longer available //#define GxEPD2_DRIVER_CLASS GxEPD2_154_D67 // GDEH0154D67 200x200, SSD1681 //#define GxEPD2_DRIVER_CLASS GxEPD2_154_T8 // GDEW0154T8 152x152, UC8151 (IL0373) diff --git a/examples/GxEPD2_SerialFlash_Example/GxEPD2_selection_check.h b/examples/GxEPD2_SerialFlash_Example/GxEPD2_selection_check.h index dd61e89..3a499bc 100644 --- a/examples/GxEPD2_SerialFlash_Example/GxEPD2_selection_check.h +++ b/examples/GxEPD2_SerialFlash_Example/GxEPD2_selection_check.h @@ -13,6 +13,7 @@ // Waveshare e-paper displays with SPI: http://forum.arduino.cc/index.php?topic=487007.0 // Good Display ePaper for Arduino: https://forum.arduino.cc/index.php?topic=436411.0 +#define GxEPD2_102_IS_BW true #define GxEPD2_154_IS_BW true #define GxEPD2_154_D67_IS_BW true #define GxEPD2_154_T8_IS_BW true diff --git a/examples/GxEPD2_Spiffs_Example/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_Spiffs_Example/GxEPD2_display_selection_new_style.h index 41ce631..c41bac7 100644 --- a/examples/GxEPD2_Spiffs_Example/GxEPD2_display_selection_new_style.h +++ b/examples/GxEPD2_Spiffs_Example/GxEPD2_display_selection_new_style.h @@ -19,6 +19,7 @@ //#define GxEPD2_DISPLAY_CLASS GxEPD2_7C // select the display driver class (only one) for your panel +//#define GxEPD2_DRIVER_CLASS GxEPD2_102 // GxEPD2_102 80x128, UC8175 //#define GxEPD2_DRIVER_CLASS GxEPD2_154 // GDEP015OC1 200x200, IL3829, no longer available //#define GxEPD2_DRIVER_CLASS GxEPD2_154_D67 // GDEH0154D67 200x200, SSD1681 //#define GxEPD2_DRIVER_CLASS GxEPD2_154_T8 // GDEW0154T8 152x152, UC8151 (IL0373) diff --git a/examples/GxEPD2_Spiffs_Example/GxEPD2_selection_check.h b/examples/GxEPD2_Spiffs_Example/GxEPD2_selection_check.h index dd61e89..3a499bc 100644 --- a/examples/GxEPD2_Spiffs_Example/GxEPD2_selection_check.h +++ b/examples/GxEPD2_Spiffs_Example/GxEPD2_selection_check.h @@ -13,6 +13,7 @@ // Waveshare e-paper displays with SPI: http://forum.arduino.cc/index.php?topic=487007.0 // Good Display ePaper for Arduino: https://forum.arduino.cc/index.php?topic=436411.0 +#define GxEPD2_102_IS_BW true #define GxEPD2_154_IS_BW true #define GxEPD2_154_D67_IS_BW true #define GxEPD2_154_T8_IS_BW true diff --git a/examples/GxEPD2_U8G2_Fonts_Example/GxEPD2_display_selection_new_style.h b/examples/GxEPD2_U8G2_Fonts_Example/GxEPD2_display_selection_new_style.h index 41ce631..c41bac7 100644 --- a/examples/GxEPD2_U8G2_Fonts_Example/GxEPD2_display_selection_new_style.h +++ b/examples/GxEPD2_U8G2_Fonts_Example/GxEPD2_display_selection_new_style.h @@ -19,6 +19,7 @@ //#define GxEPD2_DISPLAY_CLASS GxEPD2_7C // select the display driver class (only one) for your panel +//#define GxEPD2_DRIVER_CLASS GxEPD2_102 // GxEPD2_102 80x128, UC8175 //#define GxEPD2_DRIVER_CLASS GxEPD2_154 // GDEP015OC1 200x200, IL3829, no longer available //#define GxEPD2_DRIVER_CLASS GxEPD2_154_D67 // GDEH0154D67 200x200, SSD1681 //#define GxEPD2_DRIVER_CLASS GxEPD2_154_T8 // GDEW0154T8 152x152, UC8151 (IL0373) diff --git a/examples/GxEPD2_U8G2_Fonts_Example/GxEPD2_selection_check.h b/examples/GxEPD2_U8G2_Fonts_Example/GxEPD2_selection_check.h index dd61e89..3a499bc 100644 --- a/examples/GxEPD2_U8G2_Fonts_Example/GxEPD2_selection_check.h +++ b/examples/GxEPD2_U8G2_Fonts_Example/GxEPD2_selection_check.h @@ -13,6 +13,7 @@ // Waveshare e-paper displays with SPI: http://forum.arduino.cc/index.php?topic=487007.0 // Good Display ePaper for Arduino: https://forum.arduino.cc/index.php?topic=436411.0 +#define GxEPD2_102_IS_BW true #define GxEPD2_154_IS_BW true #define GxEPD2_154_D67_IS_BW true #define GxEPD2_154_T8_IS_BW true diff --git a/library.properties b/library.properties index 4a1bcab..0c5ce2f 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=GxEPD2 -version=1.3.6 +version=1.3.7 author=Jean-Marc Zingg maintainer=Jean-Marc Zingg sentence=Arduino Display Library for SPI E-Paper displays from Dalian Good Display and Waveshare. diff --git a/src/GxEPD2.h b/src/GxEPD2.h index 2d91c5e..9a72a45 100644 --- a/src/GxEPD2.h +++ b/src/GxEPD2.h @@ -35,6 +35,7 @@ class GxEPD2 public: enum Panel { + GDEW0102T4, Waveshare_1_02_bw = GDEW0102T4, GDEP015OC1, Waveshare_1_54_bw = GDEP015OC1, GDEH0154D67, Waveshare_1_54_bw_D67 = GDEH0154D67, GDEW0154T8, diff --git a/src/GxEPD2_BW.h b/src/GxEPD2_BW.h index 2587b4a..48a4150 100644 --- a/src/GxEPD2_BW.h +++ b/src/GxEPD2_BW.h @@ -31,6 +31,7 @@ #endif #include "GxEPD2_EPD.h" +#include "epd/GxEPD2_102.h" #include "epd/GxEPD2_154.h" #include "epd/GxEPD2_154_D67.h" #include "epd/GxEPD2_154_T8.h" diff --git a/src/bitmaps/Bitmaps80x128.h b/src/bitmaps/Bitmaps80x128.h new file mode 100644 index 0000000..2f9fb43 --- /dev/null +++ b/src/bitmaps/Bitmaps80x128.h @@ -0,0 +1,432 @@ +#ifndef _GxBitmaps80x128_H_ +#define _GxBitmaps80x128_H_ + +#if defined(ESP8266) || defined(ESP32) +#include +#else +#include +#endif + +#include "WS_Bitmaps80x128.h" + +const unsigned char Bitmap80x128_1[1280]PROGMEM = +{ /* 0X81,0X01,0X80,0X00,0X50,0X00, */ + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X0F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X80, 0X17, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X03, 0XFF, + 0XFE, 0X40, 0X27, 0XFF, 0XFF, 0XFF, 0XFF, 0XA0, 0X38, 0XFF, 0XFE, 0X10, 0X87, 0XFF, 0XFF, 0XFF, + 0XFF, 0XA0, 0X3A, 0XFF, 0XFE, 0X09, 0X07, 0XFF, 0XFF, 0XFF, 0XFF, 0XA0, 0X3A, 0XFF, 0XFE, 0X26, + 0X47, 0XFF, 0XFF, 0XFF, 0XFF, 0XA0, 0X3A, 0XFF, 0XFE, 0X40, 0X27, 0XFF, 0XFF, 0XFF, 0XFF, 0XA0, + 0X38, 0XFF, 0XFE, 0X80, 0X17, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X03, 0XFF, 0XFF, 0X00, 0X0F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF1, 0XFF, 0X01, 0XFF, 0XFF, 0XF1, 0XFC, + 0X07, 0XFF, 0XFF, 0XF1, 0XFE, 0X00, 0XFF, 0XFF, 0XE1, 0XF8, 0X03, 0XFF, 0XFF, 0XC1, 0XFC, 0X00, + 0X7F, 0XFF, 0XC1, 0XF0, 0X01, 0XFF, 0XFF, 0X81, 0XFC, 0X38, 0X7F, 0XFF, 0XC1, 0XF0, 0XE1, 0XFF, + 0XFE, 0X01, 0XF8, 0X7C, 0X3F, 0XFF, 0X81, 0XE1, 0XF0, 0XFF, 0XFE, 0X01, 0XF8, 0XFE, 0X38, 0XFF, + 0X01, 0XE3, 0XF8, 0XFF, 0XFE, 0X11, 0XF8, 0XFE, 0X38, 0XFF, 0X01, 0XE3, 0XF8, 0XFF, 0XFF, 0XF1, + 0XF8, 0XFE, 0X38, 0XFE, 0X11, 0XE3, 0XF8, 0XFF, 0XFF, 0XF1, 0XF8, 0XFE, 0X3F, 0XFC, 0X31, 0XE3, + 0XF8, 0XFF, 0XFF, 0XF1, 0XF8, 0XFE, 0X3F, 0XFC, 0X31, 0XE3, 0XF8, 0XFF, 0XFF, 0XF1, 0XF8, 0XFE, + 0X3F, 0XF8, 0X71, 0XE3, 0XF8, 0XFF, 0XFF, 0XF1, 0XF8, 0XFE, 0X3F, 0XF0, 0XF1, 0XE3, 0XF8, 0XFF, + 0XFF, 0XF1, 0XF8, 0XFE, 0X3F, 0XF0, 0X00, 0X63, 0XF8, 0XFF, 0XFF, 0XF1, 0XF8, 0XFE, 0X3F, 0XF0, + 0X00, 0X63, 0XF8, 0XFF, 0XFF, 0XF1, 0XF8, 0X7C, 0X3F, 0XF0, 0X00, 0X61, 0XF0, 0XFF, 0XFF, 0XF1, + 0XFC, 0X38, 0X7F, 0XFF, 0XF1, 0XF0, 0XE1, 0XFF, 0XFF, 0XF1, 0XFC, 0X00, 0X78, 0XFF, 0XF1, 0XF0, + 0X01, 0XFF, 0XFF, 0XF1, 0XFE, 0X00, 0XF8, 0XFF, 0XF1, 0XF8, 0X03, 0XFF, 0XFF, 0XF1, 0XFF, 0X01, + 0XF8, 0XFF, 0XF1, 0XFC, 0X07, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X39, 0XCF, 0X9F, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X79, 0X8F, 0X1F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, + 0X73, 0X0E, 0X1F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0XF3, 0XCF, 0X9F, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFC, 0XF3, 0XCF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF9, 0XE7, 0XCF, + 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF9, 0XE7, 0XCF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XBD, 0XFF, 0XBF, 0XFF, 0XFF, 0XBF, 0XFF, 0XFF, + 0XFF, 0XF7, 0X5D, 0XFF, 0XBF, 0XFF, 0XFF, 0XBF, 0XFF, 0XFF, 0XFF, 0XFB, 0X5B, 0X1C, 0XA1, 0XC7, + 0X1C, 0XB1, 0XBB, 0XFF, 0XFF, 0XFB, 0X5A, 0XEB, 0X2E, 0XBA, 0XEB, 0X2E, 0XBB, 0XFF, 0XFF, 0XFA, + 0XEA, 0X0B, 0XAE, 0X83, 0X3B, 0XB0, 0XD7, 0XFF, 0XFF, 0XFA, 0XEA, 0XFB, 0XAE, 0XBF, 0XDB, 0XAE, + 0XD7, 0XFF, 0XFF, 0XFD, 0XF6, 0XEB, 0X2E, 0XBA, 0XEB, 0X2C, 0XEF, 0XFF, 0XFF, 0XFD, 0XF7, 0X1C, + 0XAE, 0XC7, 0X1C, 0XB2, 0XEF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XEF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, + 0X7F, 0X3F, 0XFC, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X63, 0X7F, 0XF9, 0X9F, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC1, 0XFF, 0XF9, 0XF9, 0X30, 0XE1, 0X99, 0XFF, 0XFF, 0XFC, 0X80, 0X9F, + 0XFC, 0X39, 0X32, 0X64, 0XDB, 0XFF, 0XFF, 0XFF, 0X80, 0XFF, 0XFF, 0X99, 0X32, 0X64, 0XD3, 0XFF, + 0XFF, 0XFF, 0XC1, 0XFF, 0XF9, 0X99, 0X32, 0X64, 0XC7, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XFC, 0X3C, + 0X32, 0X64, 0XE7, 0XFF, 0XFF, 0XFF, 0X7F, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XEF, 0XFF, 0XFF, 0XFE, + 0X77, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XCF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, +}; + +const unsigned char Bitmap80x128_2[1280]PROGMEM = +{ /* 0X81,0X01,0X80,0X00,0X50,0X00, */ + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X0F, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0F, 0XFF, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X1F, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X33, 0X00, 0X00, 0X3F, 0XFF, + 0X00, 0X00, 0X70, 0X00, 0X00, 0X4C, 0X00, 0X00, 0X3F, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X48, + 0X00, 0X00, 0X7F, 0XFF, 0X00, 0X00, 0X70, 0X00, 0X00, 0X48, 0X00, 0X00, 0X7F, 0XFF, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X7F, 0X00, 0X00, 0X7F, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0XFF, 0XFF, 0X00, 0X00, 0X3C, 0X20, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0X00, 0X00, 0X7E, 0X20, + 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0X00, 0X00, 0X43, 0X20, 0X00, 0X49, 0X00, 0X00, 0XFF, 0XFF, + 0X00, 0X00, 0X41, 0XA0, 0X00, 0X49, 0X00, 0X01, 0XFF, 0XFF, 0X00, 0X00, 0X40, 0XE0, 0X00, 0X49, + 0X00, 0X01, 0XFF, 0XFF, 0X00, 0X00, 0X60, 0X60, 0X00, 0X49, 0X00, 0X01, 0XFF, 0XFF, 0X00, 0X00, + 0X20, 0X20, 0X00, 0X7F, 0X00, 0X03, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, + 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X03, 0XFF, 0XFF, 0X00, 0X00, 0X3F, 0XC0, 0X00, 0X00, 0X00, 0X07, 0XFF, 0XFF, + 0X00, 0X00, 0X7F, 0XE0, 0X00, 0X30, 0X00, 0X07, 0XFF, 0XFF, 0X00, 0X00, 0X40, 0X20, 0X00, 0X48, + 0X00, 0X07, 0XFF, 0XFF, 0X00, 0X00, 0X40, 0X20, 0X00, 0X48, 0X00, 0X0F, 0XFF, 0XFF, 0X00, 0X00, + 0X40, 0X20, 0X00, 0X48, 0X00, 0X0F, 0XFF, 0XFF, 0X00, 0X00, 0X7F, 0XE0, 0X00, 0X7F, 0X00, 0X0F, + 0XFF, 0XFF, 0X00, 0X00, 0X3F, 0XC0, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X1F, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X00, 0X1F, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X0E, 0X00, 0X1F, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X20, 0X00, 0X34, + 0X00, 0X3F, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X20, 0X00, 0X44, 0X00, 0X3F, 0XFF, 0XFF, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X34, 0X00, 0X3F, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0E, 0X00, 0X3F, + 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X00, 0X7F, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, + 0X00, 0X00, 0X7F, 0XE0, 0X00, 0X30, 0X00, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X7F, 0XE0, 0X00, 0X48, + 0X00, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X30, 0X00, 0X00, 0X48, 0X00, 0XFF, 0XFF, 0XFF, 0X00, 0X00, + 0X10, 0X00, 0X00, 0X48, 0X01, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0X01, 0XFF, + 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X03, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X03, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, + 0X03, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X07, 0XFF, 0XFF, 0XFF, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X07, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X49, 0X07, 0XFF, + 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X49, 0X07, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X49, 0X0F, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X49, 0X0F, 0XFF, 0XFF, 0XFF, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0X0F, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X1F, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0XFF, 0XFF, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X1F, 0XFF, + 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0X00, 0X3F, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X30, 0X00, 0X1F, 0X06, 0X07, 0XC3, 0XF9, 0XCF, 0XFF, 0X00, 0X30, 0X00, 0X1F, 0X06, 0X07, + 0XC3, 0XF9, 0XCF, 0XFF, 0X00, 0X33, 0XFF, 0X9F, 0XE0, 0X60, 0XC0, 0X1E, 0X0F, 0XFF, 0X00, 0X33, + 0XFF, 0X9F, 0XE0, 0X60, 0XC0, 0X1E, 0X0F, 0XFF, 0X00, 0X33, 0XFF, 0X9F, 0XE0, 0X60, 0XC0, 0X1E, + 0X0F, 0XFF, 0X00, 0X33, 0X81, 0X9C, 0XE7, 0XE7, 0XC7, 0XE7, 0XFF, 0XFF, 0X00, 0X33, 0X81, 0X9C, + 0XE7, 0XE7, 0XC7, 0XE7, 0XFF, 0XFF, 0X00, 0X33, 0X81, 0X9F, 0XFE, 0X18, 0X04, 0XF8, 0X3F, 0XFF, + 0X00, 0X33, 0X81, 0X9F, 0XFE, 0X18, 0X04, 0XF8, 0X3F, 0XFF, 0X00, 0X33, 0X81, 0X9F, 0XFF, 0XFF, + 0X00, 0X00, 0X3F, 0XFF, 0X00, 0X33, 0X81, 0X9F, 0XFF, 0XFF, 0X00, 0X00, 0X3F, 0XFF, 0X00, 0X33, + 0X81, 0X9F, 0XFF, 0XFF, 0X00, 0X00, 0X3F, 0XFF, 0X00, 0X33, 0XFF, 0X9F, 0XE6, 0X67, 0X3F, 0X19, + 0XCF, 0XFF, 0X00, 0X33, 0XFF, 0X9F, 0XE6, 0X67, 0X3F, 0X19, 0XCF, 0XFF, 0X00, 0X30, 0X00, 0X1C, + 0X00, 0X18, 0X3B, 0X1F, 0XFF, 0XFF, 0X00, 0X3F, 0XFF, 0XFC, 0XE7, 0X80, 0X3F, 0X1F, 0XCF, 0XFF, + 0X00, 0X3F, 0XFF, 0XFC, 0XE7, 0X80, 0X3F, 0X1F, 0XCF, 0XFF, 0X00, 0X3F, 0XFF, 0XFC, 0XE7, 0X80, + 0X3F, 0X1F, 0XCF, 0XFF, 0X00, 0X3F, 0XFE, 0X00, 0XE0, 0X18, 0X00, 0X06, 0X0F, 0XFF, 0X00, 0X3F, + 0XFE, 0X00, 0XE0, 0X18, 0X00, 0X06, 0X0F, 0XFF, 0X00, 0X30, 0X60, 0X60, 0XF9, 0XFF, 0X03, 0XF8, + 0X0F, 0XFF, 0X00, 0X30, 0X60, 0X60, 0XF9, 0XFF, 0X03, 0XF8, 0X0F, 0XFF, 0X00, 0X30, 0X60, 0X60, + 0XF9, 0XFF, 0X03, 0XF8, 0X0F, 0XFF, 0X00, 0X33, 0XE7, 0X83, 0X07, 0XFF, 0XF8, 0XE0, 0X0F, 0XFF, + 0X00, 0X33, 0XE7, 0X83, 0X07, 0XFF, 0XF8, 0XE0, 0X0F, 0XFF, 0X00, 0X30, 0X7F, 0XE0, 0X18, 0X78, + 0X04, 0X1E, 0X0F, 0XFF, 0X00, 0X30, 0X7F, 0XE0, 0X18, 0X78, 0X04, 0X1E, 0X0F, 0XFF, 0X00, 0X3F, + 0XF8, 0X00, 0XF8, 0X18, 0X07, 0X00, 0X0F, 0XFF, 0X00, 0X3F, 0XF8, 0X00, 0XF8, 0X18, 0X07, 0X00, + 0X0F, 0XFF, 0X00, 0X3F, 0X9E, 0X7C, 0XF8, 0X7F, 0X3F, 0XFF, 0XCF, 0XFF, 0X00, 0X3F, 0X9E, 0X7C, + 0XF8, 0X7F, 0X3F, 0XFF, 0XCF, 0XFF, 0X00, 0X33, 0XFE, 0X1F, 0XE0, 0X00, 0X3F, 0XE0, 0X3F, 0XFF, + 0X00, 0X33, 0XFE, 0X1F, 0XE0, 0X00, 0X3F, 0XE0, 0X3F, 0XFF, 0X00, 0X3C, 0X61, 0XFF, 0X19, 0XFF, + 0X03, 0XE1, 0XCF, 0XFF, 0X00, 0X3C, 0X61, 0XFF, 0X19, 0XFF, 0X03, 0XE1, 0XCF, 0XFF, 0X00, 0X3C, + 0X61, 0XFF, 0X19, 0XFF, 0X03, 0XE1, 0XCF, 0XFF, 0X00, 0X3F, 0X9F, 0X80, 0XE6, 0X60, 0XC0, 0X18, + 0X0F, 0XFF, 0X00, 0X3F, 0X9F, 0X80, 0XE6, 0X60, 0XC0, 0X18, 0X0F, 0XFF, 0X00, 0X3F, 0XFF, 0XFC, + 0XF9, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X3F, 0XFF, 0XFC, 0XF9, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, + 0X00, 0X3F, 0XFF, 0XFC, 0XF9, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X30, 0X00, 0X1C, 0XE6, 0X67, + 0X38, 0X00, 0X0F, 0XFF, 0X00, 0X30, 0X00, 0X1C, 0XE6, 0X67, 0X38, 0X00, 0X0F, 0XFF, 0X00, 0X33, + 0XFF, 0X9C, 0X06, 0X7F, 0XFB, 0XFF, 0XCF, 0XFF, 0X00, 0X33, 0XFF, 0X9C, 0X06, 0X7F, 0XFB, 0XFF, + 0XCF, 0XFF, 0X00, 0X33, 0X81, 0X9C, 0XE6, 0X60, 0X3B, 0X01, 0XCF, 0XFF, 0X00, 0X33, 0X81, 0X9C, + 0XE6, 0X60, 0X3B, 0X01, 0XCF, 0XFF, 0X00, 0X33, 0X81, 0X9F, 0X1E, 0X78, 0X3B, 0X01, 0XCF, 0XFF, + 0X00, 0X33, 0X81, 0X9F, 0X1E, 0X78, 0X3B, 0X01, 0XCF, 0XFF, 0X00, 0X33, 0X81, 0X9C, 0XFF, 0X87, + 0XFB, 0X01, 0XCF, 0XFF, 0X00, 0X33, 0X81, 0X9C, 0XFF, 0X87, 0XFB, 0X01, 0XCF, 0XFF, 0X00, 0X33, + 0XFF, 0X9C, 0XE6, 0X78, 0XFB, 0XFF, 0XCF, 0XFF, 0X00, 0X33, 0XFF, 0X9C, 0XE6, 0X78, 0XFB, 0XFF, + 0XCF, 0XFF, 0X00, 0X33, 0XFF, 0X9C, 0XE6, 0X78, 0XFB, 0XFF, 0XCF, 0XFF, 0X00, 0X30, 0X00, 0X1C, + 0X00, 0X67, 0X38, 0X00, 0X0F, 0XFF, 0X00, 0X30, 0X00, 0X1C, 0X00, 0X67, 0X38, 0X00, 0X0F, 0XFF, + 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, + 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X01, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X00, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, +}; + +const unsigned char Bitmap80x128_3[1280]PROGMEM = +{ /* 0X81,0X01,0X80,0X00,0X50,0X00, */ + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X00, 0X00, + 0X00, 0X1F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XFF, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFE, 0XFF, 0XFE, 0XFF, 0XDF, 0XFF, 0XFF, 0XDF, 0XFC, 0XFF, 0XFE, 0XFF, 0XFF, 0X3F, 0XDF, + 0XFF, 0XFF, 0X9F, 0XFC, 0XFF, 0XFE, 0XFF, 0XFF, 0XC3, 0XDF, 0XFF, 0XFF, 0X1F, 0XFC, 0X7F, 0XFE, + 0XFF, 0XFF, 0X3F, 0XDF, 0XFF, 0XFF, 0X0F, 0XFC, 0X77, 0XFE, 0XFF, 0XFE, 0XFF, 0XDF, 0XFF, 0XFF, + 0X0F, 0XFC, 0X6F, 0XFE, 0XFF, 0XFF, 0XFB, 0XDF, 0XFF, 0XFF, 0X0F, 0XFC, 0X1F, 0XFE, 0XF8, 0X3F, + 0XC7, 0XDF, 0XFF, 0XFF, 0X07, 0XFC, 0X1F, 0XFE, 0XF7, 0XDF, 0X2F, 0XDF, 0XFF, 0XFF, 0X07, 0XFC, + 0X03, 0XFE, 0XF7, 0XDE, 0XEF, 0XDF, 0XFF, 0XFF, 0X03, 0XF8, 0X00, 0XFE, 0XF7, 0XDF, 0X2F, 0XDF, + 0XFF, 0XFF, 0X03, 0XF0, 0X00, 0XFE, 0XF0, 0X1F, 0XC7, 0XDF, 0XFF, 0XFF, 0X03, 0XE1, 0XFF, 0XFE, + 0XFF, 0XFF, 0XFB, 0XDF, 0XFF, 0XFF, 0X01, 0XC3, 0XFF, 0XFE, 0XFF, 0XFF, 0XFB, 0XDF, 0XFF, 0XFF, + 0X01, 0X87, 0XFF, 0XFE, 0XF8, 0X3F, 0XFB, 0XDF, 0XFF, 0XFF, 0X01, 0X0F, 0XFF, 0XFE, 0XF7, 0XDF, + 0XFB, 0XDF, 0XFF, 0XFF, 0X80, 0X1F, 0XFF, 0XFE, 0XF7, 0XDE, 0X03, 0XDF, 0XFF, 0XFF, 0X80, 0X3F, + 0XFF, 0XFE, 0XF7, 0XDF, 0XFF, 0XDF, 0XFF, 0XFF, 0X80, 0X1F, 0XFF, 0XFE, 0XF8, 0X3F, 0XFF, 0XDF, + 0XFF, 0XFF, 0X80, 0X07, 0XFF, 0XFE, 0XFF, 0XFE, 0X1F, 0XDF, 0XFF, 0XFF, 0X80, 0X00, 0XFF, 0XFE, + 0XFF, 0XFE, 0XDF, 0XDF, 0XFF, 0XFF, 0X00, 0X00, 0X3F, 0XFE, 0XF8, 0X3E, 0XDF, 0XDF, 0XFF, 0XFE, + 0X00, 0X00, 0X07, 0XFE, 0XF7, 0XDE, 0X03, 0XDF, 0XFF, 0XFC, 0X00, 0X00, 0X01, 0XFE, 0XF7, 0XDF, + 0XFF, 0XDF, 0XFF, 0XF8, 0X3F, 0XE0, 0X01, 0XFE, 0XF7, 0XDF, 0XFF, 0XDF, 0XFF, 0XF0, 0XFF, 0XFF, + 0XF1, 0XFE, 0XF8, 0X3F, 0X67, 0XDF, 0XFF, 0XE1, 0XFF, 0XFF, 0XFF, 0XFE, 0XFF, 0XFE, 0XDB, 0XDF, + 0XFF, 0XC7, 0XFF, 0XFF, 0XFF, 0XFE, 0XFF, 0XFE, 0XDB, 0XDF, 0XFF, 0XCF, 0XFF, 0XFF, 0XFF, 0XFE, + 0XFA, 0X3F, 0X37, 0XDF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XF6, 0XDF, 0XFF, 0XDF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFE, 0XF7, 0XDF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XF7, 0XDE, + 0X03, 0XDF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XF8, 0X3F, 0XFF, 0XDF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFE, 0XFF, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XFF, 0XFF, 0X07, 0XDF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XFF, 0XFE, 0XFB, 0XDF, 0XFF, 0XBF, 0XFF, 0XFF, 0XFF, 0XFE, + 0XFF, 0XFE, 0XFB, 0XDF, 0XFF, 0XB7, 0XFF, 0XFF, 0XFF, 0XFE, 0XFF, 0XFE, 0XFB, 0XDF, 0XFF, 0XB7, + 0XFF, 0XFF, 0XFF, 0XFE, 0XFF, 0XFE, 0X03, 0XDF, 0XFF, 0X80, 0XFF, 0XFF, 0XFF, 0XFE, 0XFF, 0XFF, + 0XFF, 0XDF, 0XFF, 0X80, 0XFC, 0X00, 0X00, 0XFE, 0XFF, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFC, 0X00, + 0X00, 0XFE, 0X00, 0X00, 0X00, 0X1F, 0XFF, 0XFB, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0X80, 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X9B, 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XCB, + 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XF3, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, + 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0X80, 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XCE, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X86, 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XB2, 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XB8, 0XFC, 0X00, + 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X9C, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XDE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC1, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, + 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XBE, 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0XFC, 0X00, + 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC1, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFD, 0XDF, 0XFF, 0XFF, 0XFF, 0X80, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, + 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XCF, 0XFC, 0X00, 0X00, 0XFF, 0XFE, 0X1F, + 0XFF, 0XFF, 0XFF, 0XEF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, + 0X00, 0XFF, 0XFD, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X1F, 0XFF, 0XFF, + 0XFF, 0XC1, 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFE, 0X3F, 0XFF, 0XFF, 0XFF, 0XBE, 0XFC, 0X00, 0X00, 0XFF, 0XFD, 0XDF, 0XFF, 0XFF, 0XFF, 0XBE, + 0XFC, 0X00, 0X00, 0XFF, 0XFD, 0XDF, 0XFF, 0XFF, 0XFF, 0X80, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, + 0X83, 0XFF, 0XFF, 0XC1, 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0X7D, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, + 0XFF, 0XFF, 0XF4, 0X1F, 0X7D, 0XFF, 0XFF, 0X81, 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0X81, 0XFF, + 0XFF, 0XF8, 0XFC, 0X00, 0X00, 0XFF, 0XFD, 0XDF, 0XFF, 0XFF, 0XFF, 0XF8, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF8, 0X1F, 0X93, 0XFF, 0XFF, 0X81, 0XFC, 0X00, 0X00, 0XFF, 0XFD, 0XFF, 0X6D, 0XFF, 0XFF, 0X81, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X1F, 0X6D, 0XFF, 0XFF, 0XF8, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XDF, + 0X93, 0XFF, 0XFF, 0XF8, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XDF, 0XFF, 0XFF, 0XFF, 0X81, 0XFC, 0X00, + 0X00, 0XFF, 0XFC, 0X3F, 0XFF, 0XFF, 0XFF, 0X9F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0XFF, 0XF0, 0X1F, 0X7D, 0XFF, 0XFF, 0XB6, 0XFC, 0X00, 0X00, 0XFF, + 0XFF, 0XFF, 0X93, 0XFF, 0XFF, 0XB6, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XEF, 0XFF, 0XFF, 0XB6, + 0XFC, 0X00, 0X00, 0XFF, 0XFD, 0XDF, 0X93, 0XFF, 0XFF, 0XB6, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0XDF, + 0X7D, 0XFF, 0XFF, 0X80, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XFF, 0XFF, 0XFF, 0X80, 0XFC, 0X00, + 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0XFF, 0XFD, 0XBF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFD, 0X5F, 0XFF, 0XFF, 0XFF, 0XE3, 0XFC, 0X00, 0X00, 0XFF, + 0XFD, 0X5F, 0X93, 0XFF, 0XFF, 0XC1, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XDF, 0X6D, 0XFF, 0XFF, 0X9C, + 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0X6D, 0XFF, 0XFF, 0XBE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X5F, + 0X93, 0XFF, 0XFF, 0X80, 0XFC, 0X00, 0X00, 0XFF, 0XFD, 0X5F, 0XFF, 0XFF, 0XFF, 0X80, 0XFC, 0X00, + 0X00, 0XFF, 0XFD, 0X5F, 0X9D, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0X65, 0XFF, + 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0X79, 0XFF, 0XFF, 0XF3, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF9, 0X9F, 0XBD, 0XFF, 0XFF, 0XD1, 0XFC, 0X00, 0X00, 0XFF, 0XF6, 0X7F, 0XFF, 0XFF, 0XFF, 0X94, + 0XFC, 0X00, 0X00, 0XFF, 0XF6, 0XFF, 0XFF, 0XFF, 0XFF, 0XB6, 0XFF, 0XFF, 0XFF, 0XFF, 0XF6, 0XFF, + 0X01, 0XFF, 0XFF, 0X9C, 0XFC, 0X00, 0X00, 0XFF, 0XF0, 0X1F, 0XBF, 0XFF, 0XFF, 0XC1, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, +}; + +const unsigned char Bitmap80x128_4[1280]PROGMEM = +{ /* 0X81,0X01,0X80,0X00,0X50,0X00, */ + 0XF0, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X01, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, + 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X40, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XF0, 0X70, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X3C, 0X01, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X0F, 0XE1, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF0, 0X0F, 0XE1, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X3C, 0X01, 0XFF, 0XFF, 0XFF, + 0XFF, 0XCF, 0XFF, 0XFF, 0XF0, 0X70, 0X01, 0XFF, 0XFE, 0X00, 0XFF, 0XCF, 0XFF, 0XFF, 0XF0, 0X40, + 0X01, 0XFF, 0XF8, 0X00, 0X3F, 0XCF, 0XFF, 0XFF, 0XF0, 0X00, 0X01, 0XFF, 0XF1, 0XE7, 0X1F, 0XCE, + 0XFF, 0XFF, 0XF0, 0X00, 0X61, 0XFF, 0XF3, 0XF3, 0XCF, 0XCE, 0XDF, 0XFF, 0XF0, 0X07, 0XE1, 0XFF, + 0XE7, 0XF9, 0XE7, 0XCE, 0XDF, 0XFF, 0XF0, 0X3F, 0X81, 0XFF, 0XE7, 0XF9, 0XE7, 0XCE, 0XDF, 0XFF, + 0XF0, 0X71, 0X01, 0XFF, 0XE7, 0XF9, 0XE7, 0XCE, 0XDF, 0XFF, 0XF0, 0X71, 0X01, 0XFF, 0XE7, 0XF9, + 0XE7, 0XCE, 0XDF, 0XFF, 0XF0, 0X3F, 0X81, 0XFF, 0XE3, 0XF1, 0XE7, 0XCE, 0X01, 0XFF, 0XF0, 0X07, + 0XE1, 0XFF, 0XF1, 0XE3, 0X8F, 0XCE, 0X01, 0XFF, 0XF0, 0X00, 0X61, 0XFF, 0XF8, 0X07, 0X0F, 0XCF, + 0XFF, 0XFF, 0XF0, 0X00, 0X01, 0XFF, 0XFC, 0X0F, 0X3F, 0XCF, 0XFF, 0XFF, 0XF0, 0X00, 0X21, 0XFF, + 0XFF, 0XFF, 0XFF, 0XCF, 0XF7, 0XFF, 0XF0, 0X00, 0X21, 0XFF, 0XFF, 0XFF, 0XFF, 0XCE, 0X01, 0XFF, + 0XF0, 0X00, 0X21, 0XFF, 0XFE, 0X00, 0XFF, 0XCE, 0X01, 0XFF, 0XF0, 0X00, 0X21, 0XFF, 0XF8, 0X00, + 0X3F, 0XCE, 0X77, 0XFF, 0XF0, 0X7F, 0XE1, 0XFF, 0XF1, 0XE7, 0X1F, 0XCF, 0X37, 0XFF, 0XF0, 0X7F, + 0XE1, 0XFF, 0XF3, 0XF3, 0XCF, 0XCF, 0X97, 0XFF, 0XF0, 0X00, 0X01, 0XFF, 0XE7, 0XF9, 0XE7, 0XCF, + 0XC7, 0XFF, 0XF0, 0X3C, 0X01, 0XFF, 0XE7, 0XF9, 0XE7, 0XCF, 0XE7, 0XFF, 0XF0, 0X7E, 0X01, 0XFF, + 0XE7, 0XF9, 0XE7, 0XCF, 0XFF, 0XFF, 0XF0, 0X42, 0X01, 0XFF, 0XE7, 0XF9, 0XE7, 0XCE, 0X01, 0XFF, + 0XF0, 0X42, 0X01, 0XFF, 0XE3, 0XF1, 0XE7, 0XCE, 0X01, 0XFF, 0XF0, 0X7F, 0XE1, 0XFF, 0XF1, 0XE3, + 0X8F, 0XCF, 0XFF, 0XFF, 0XF0, 0X7F, 0XE1, 0XFF, 0XF8, 0X07, 0X0F, 0XCF, 0XFF, 0XFF, 0XF0, 0X00, + 0X01, 0XFF, 0XFC, 0X0F, 0X3F, 0XCF, 0X1D, 0XFF, 0XF0, 0X31, 0XC1, 0XFF, 0XFF, 0XFF, 0XFF, 0XCE, + 0X0D, 0XFF, 0XF0, 0X73, 0XE1, 0XFF, 0XFF, 0XFF, 0XFF, 0XCE, 0XE5, 0XFF, 0XF0, 0X62, 0X21, 0XFF, + 0XFE, 0X00, 0XFF, 0XCE, 0XF1, 0XFF, 0XF0, 0X46, 0X21, 0XFF, 0XF8, 0X00, 0X3F, 0XCE, 0XF9, 0XFF, + 0XF0, 0X44, 0X61, 0XFF, 0XF1, 0XE7, 0X1F, 0XCE, 0X79, 0XFF, 0XF0, 0X7C, 0XE1, 0XFF, 0XF3, 0XF3, + 0XCF, 0XCF, 0X7D, 0XFF, 0XF0, 0X38, 0XC1, 0XFF, 0XE7, 0XF9, 0XE7, 0XCF, 0XFF, 0XFF, 0XF0, 0X00, + 0X01, 0XFF, 0XE7, 0XF9, 0XE7, 0XCF, 0XFF, 0XFF, 0XF0, 0X7F, 0XE1, 0XFF, 0XE7, 0XF9, 0XE7, 0XCF, + 0X03, 0XFF, 0XF0, 0X7F, 0XE1, 0XFF, 0XE7, 0XF9, 0XE7, 0XCE, 0X01, 0XFF, 0XF0, 0X00, 0X01, 0XFF, + 0XE3, 0XF1, 0XE7, 0XCE, 0XFD, 0XFF, 0XF0, 0X1F, 0X81, 0XFF, 0XF1, 0XE3, 0X8F, 0XCE, 0XFD, 0XFF, + 0XF0, 0X3F, 0XC1, 0XFF, 0XF8, 0X07, 0X0F, 0XCE, 0XFD, 0XFF, 0XF0, 0X60, 0X61, 0XFF, 0XFC, 0X0F, + 0X3F, 0XCE, 0X01, 0XFF, 0XF0, 0X40, 0X21, 0XFF, 0XFF, 0XFF, 0XFF, 0XCF, 0X03, 0XFF, 0XF0, 0X40, + 0X21, 0XFF, 0XFF, 0XFF, 0XFF, 0XCF, 0XFF, 0XFF, 0XF0, 0X7F, 0XE1, 0XFF, 0XFE, 0X00, 0XFF, 0XCF, + 0XFF, 0XFF, 0XF0, 0X7F, 0XE1, 0XFF, 0XF8, 0X00, 0X3F, 0XCF, 0XFF, 0XFF, 0XF0, 0X00, 0X01, 0XFF, + 0XF1, 0XE7, 0X1F, 0XCF, 0XFF, 0XFF, 0XF0, 0X00, 0X01, 0XFF, 0XF3, 0XF3, 0XCF, 0XCE, 0X01, 0XFF, + 0XF0, 0X00, 0X01, 0XFF, 0XE7, 0XF9, 0XE7, 0XCE, 0X01, 0XFF, 0XF0, 0X00, 0X01, 0XFF, 0XE7, 0XF9, + 0XE7, 0XCF, 0X3F, 0XFF, 0XF0, 0X00, 0X01, 0XFF, 0XE7, 0XF9, 0XE7, 0XCF, 0XBF, 0XFF, 0XF0, 0X1F, + 0X81, 0XFF, 0XE7, 0XF9, 0XE7, 0XCF, 0XFF, 0XFF, 0XF0, 0X3F, 0XC1, 0XFF, 0XE3, 0XF1, 0XE7, 0XCF, + 0XFF, 0XFF, 0XF0, 0X60, 0X61, 0XFF, 0XF1, 0XE3, 0X8F, 0XCF, 0XFF, 0XFF, 0XF0, 0X40, 0X21, 0XFF, + 0XF8, 0X07, 0X0F, 0XCF, 0X03, 0XFF, 0XF0, 0X40, 0X21, 0XFF, 0XFC, 0X0F, 0X3F, 0XCE, 0X01, 0XFF, + 0XF0, 0X7F, 0XE1, 0XFF, 0XFF, 0XFF, 0XFF, 0XCE, 0XFD, 0XFF, 0XF0, 0X7F, 0XE1, 0XFF, 0XFF, 0XFF, + 0XFF, 0XCE, 0XFD, 0XFF, 0XF0, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XCE, 0XFD, 0XFF, 0XF0, 0X1F, + 0X81, 0XFF, 0XFF, 0XFF, 0XFF, 0XCE, 0X01, 0XFF, 0XF0, 0X3F, 0XC1, 0XFF, 0XFF, 0XFF, 0XFF, 0XCF, + 0X03, 0XFF, 0XF0, 0X60, 0X61, 0XFF, 0XFF, 0XFF, 0XFF, 0XCF, 0XFF, 0XFF, 0XF0, 0X40, 0X21, 0XFF, + 0XFF, 0XFF, 0XFF, 0XCE, 0XFF, 0XFF, 0XF0, 0X40, 0X21, 0XFF, 0XFF, 0XFF, 0XFF, 0XCE, 0X1F, 0XFF, + 0XF0, 0X60, 0X61, 0XFF, 0XFF, 0XFF, 0XFF, 0XCF, 0X03, 0XFF, 0XF0, 0X3F, 0XC1, 0XFF, 0XFF, 0XFF, + 0XFF, 0XCF, 0XF1, 0XFF, 0XF0, 0X1F, 0X81, 0XFF, 0XFF, 0XFF, 0XFF, 0XCF, 0XF1, 0XFF, 0XF0, 0X00, + 0X01, 0XFF, 0XFF, 0X3F, 0XE7, 0XCF, 0X03, 0XFF, 0XF0, 0X1F, 0X81, 0XFF, 0XFF, 0X3F, 0XE7, 0XCE, + 0X1F, 0XFF, 0XF0, 0X3F, 0XC1, 0XFF, 0XFF, 0XFF, 0XFF, 0XCE, 0X1F, 0XFF, 0XF0, 0X60, 0X61, 0XFF, + 0XFF, 0XFF, 0XFF, 0XCF, 0X03, 0XFF, 0XF0, 0X40, 0X21, 0XFF, 0XFF, 0XFF, 0XFF, 0XCF, 0XF1, 0XFF, + 0XF0, 0X40, 0X21, 0XFF, 0XFF, 0XFF, 0XFF, 0XCF, 0XF1, 0XFF, 0XF0, 0X60, 0X61, 0XFF, 0XFF, 0XFF, + 0XFF, 0XCF, 0X03, 0XFF, 0XF0, 0X3F, 0XC1, 0XFF, 0XFF, 0XFF, 0XE7, 0XCE, 0X1F, 0XFF, 0XF0, 0X1F, + 0X81, 0XFF, 0XFF, 0XFF, 0XE7, 0XCE, 0XFF, 0XFF, 0XF0, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XCF, + 0XFF, 0XFF, 0XF0, 0X13, 0XC1, 0XFF, 0XFF, 0XFF, 0XFF, 0XCE, 0XDD, 0XFF, 0XF0, 0X73, 0XE1, 0XFF, + 0XFF, 0XFF, 0XFF, 0XCE, 0XDD, 0XFF, 0XF0, 0X62, 0X61, 0XFF, 0XFF, 0XE0, 0X3F, 0XCE, 0XDD, 0XFF, + 0XF0, 0X42, 0X21, 0XFF, 0XFF, 0XC0, 0X1F, 0XCE, 0XDD, 0XFF, 0XF0, 0X40, 0X21, 0XFF, 0XFF, 0X8F, + 0X8F, 0XCE, 0XDD, 0XFF, 0XF0, 0X60, 0X61, 0XFF, 0XFF, 0X1F, 0XC7, 0XCE, 0XDD, 0XFF, 0XF0, 0X3F, + 0XC1, 0XFF, 0XFF, 0X3F, 0XE7, 0XCE, 0X01, 0XFF, 0XF0, 0X1F, 0X81, 0XFF, 0XFF, 0X3F, 0XE7, 0XCE, + 0X01, 0XFF, 0XF0, 0X00, 0X01, 0XFF, 0XFF, 0X3F, 0XE7, 0XCF, 0XFF, 0XFF, 0XF0, 0X00, 0X01, 0XFF, + 0XFF, 0X3F, 0XE7, 0XCF, 0XFF, 0XFF, 0XF0, 0X00, 0X01, 0XFF, 0XFF, 0X1F, 0XC7, 0XCF, 0X87, 0XFF, + 0XF0, 0X00, 0X01, 0XFF, 0XFF, 0X8F, 0X8F, 0XCF, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, + 0X1F, 0XCE, 0X79, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X3F, 0XCE, 0XFD, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XCE, 0XFD, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XCE, + 0XFD, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XCE, 0XFD, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XE0, 0X00, 0X07, 0XCE, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X07, 0XCE, 0X01, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X8F, 0XCF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X1F, 0XCF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X7F, 0XCF, 0XA3, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XF8, 0XFF, 0XCF, 0X21, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE3, 0XFF, 0XCE, + 0X6D, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC7, 0XFF, 0XCE, 0XED, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0X1F, 0XFF, 0XCE, 0XED, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X3F, 0XFF, 0XCE, 0XFD, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0XFF, 0XFF, 0XCE, 0XF9, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF1, 0XFF, + 0XFF, 0XCE, 0X79, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE0, 0X00, 0X07, 0XCF, 0X03, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XE0, 0X00, 0X07, 0XCF, 0X87, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XCF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XCF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XCF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, +}; + +const unsigned char Bitmap80x128_5[1280]PROGMEM = +{ /* 0X81,0X01,0X80,0X00,0X50,0X00, */ + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF7, 0XFF, 0XFF, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, 0XF7, 0XFE, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, 0XF9, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, + 0XFE, 0X1E, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, 0XF9, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XF7, 0XFF, 0XF7, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, 0XFF, 0XDE, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XC1, 0XFE, 0X3E, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF7, 0XBE, 0XF9, 0X7E, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XBE, 0XF7, 0X7E, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XBE, 0XF9, 0X7E, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0X80, + 0XFE, 0X3E, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, 0XFF, 0XDE, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XF7, 0XFF, 0XFF, 0XDE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XC1, 0XFF, 0XDE, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XBE, 0XFF, 0XDE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF7, 0XBE, 0XF0, 0X1E, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XBE, 0XFF, 0XFE, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XC1, 0XFF, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, + 0XF0, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, 0XF6, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XF7, 0XC1, 0XF6, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XBE, 0XF0, 0X1E, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XBE, 0XFF, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF7, 0XBE, 0XFF, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XC1, 0XFB, 0X3E, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, 0XF6, 0XDE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, + 0XF6, 0XDE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XD1, 0XF9, 0XBE, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XF7, 0XB6, 0XFF, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XBE, 0XFF, 0XFE, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XBE, 0XF0, 0X1E, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF7, 0XC1, 0XFF, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, 0XFF, 0XFE, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, 0XF8, 0X3E, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, + 0XF7, 0XDE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, 0XF7, 0XDE, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XF7, 0XFF, 0XF7, 0XDE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, 0XF0, 0X1E, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF7, 0XFF, 0XFF, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XF7, 0XFF, 0XFF, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF0, 0X00, 0X00, 0X00, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X7F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X6F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X6F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X01, 0XF8, + 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XF7, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X01, 0XF8, 0X00, 0X01, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X37, 0XF8, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X97, 0XF8, 0X00, 0X01, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XC7, 0XF8, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE7, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X01, 0XF8, 0X00, 0X01, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XF8, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X9D, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, + 0XEF, 0XFF, 0XFF, 0XFF, 0X0D, 0XF8, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X65, 0XF8, + 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X71, 0XF8, 0X00, 0X01, 0XFF, 0XFF, 0X0F, 0XFF, + 0XFF, 0XFF, 0X39, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XBD, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0X0F, 0XFF, 0XFF, 0XFF, + 0X83, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X01, 0XF8, 0X00, 0X01, 0XFF, 0XFF, + 0X1F, 0XFF, 0XFF, 0XFF, 0X7D, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XEF, 0XFF, 0XFF, 0XFF, 0X7D, 0XF8, + 0X00, 0X01, 0XFF, 0XFE, 0XEF, 0XFF, 0XFF, 0XFF, 0X01, 0XF8, 0X00, 0X01, 0XFF, 0XFF, 0X1F, 0XC1, + 0XFF, 0XFF, 0X83, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBE, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X01, + 0XFF, 0XFA, 0X0F, 0XBE, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC0, 0XFF, 0XFF, + 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XEF, 0XFF, 0XFF, 0XFF, 0X01, 0XF8, 0X00, 0X01, 0XFF, 0XFC, + 0X0F, 0XC9, 0XFF, 0XFF, 0X9F, 0XF8, 0X00, 0X01, 0XFF, 0XFE, 0XFF, 0XB6, 0XFF, 0XFF, 0XDF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFE, 0X0F, 0XB6, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X01, 0XFF, 0XFF, 0XEF, 0XC9, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XEF, 0XFF, 0XFF, 0XFF, 0X83, 0XF8, 0X00, 0X01, + 0XFF, 0XFE, 0X1F, 0XFF, 0XFF, 0XFF, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X7D, 0XF8, 0X00, 0X01, 0XFF, 0XF8, 0X0F, 0XBE, 0XFF, 0XFF, 0X7D, 0XF8, 0X00, 0X01, 0XFF, 0XFF, + 0XFF, 0XC9, 0XFF, 0XFF, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X1F, 0XF7, 0XFF, 0XFF, 0X83, 0XF8, + 0X00, 0X01, 0XFF, 0XFE, 0XEF, 0XC9, 0XFF, 0XFF, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XEF, 0XBE, + 0XFF, 0XFF, 0X03, 0XF8, 0X00, 0X01, 0XFF, 0XFF, 0X1F, 0XFF, 0XFF, 0XFF, 0XF1, 0XF8, 0X00, 0X01, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF1, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XDF, 0XFF, 0XFF, 0XFF, + 0X03, 0XF8, 0X00, 0X01, 0XFF, 0XFE, 0XAF, 0XFF, 0XFF, 0XFF, 0X03, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, + 0XAF, 0XC9, 0XFF, 0XFF, 0XF1, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X6F, 0XB6, 0XFF, 0XFF, 0XF1, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XB6, 0XFF, 0XFF, 0X03, 0XF8, 0X00, 0X01, 0XFF, 0XFF, 0X2F, 0XC9, + 0XFF, 0XFF, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFE, 0XAF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X01, + 0XFF, 0XFE, 0XAF, 0XCE, 0XFF, 0XFF, 0X6D, 0XF8, 0X00, 0X01, 0XFF, 0XFF, 0X1F, 0XB2, 0XFF, 0XFF, + 0X6D, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XBC, 0XFF, 0XFF, 0X6D, 0XF8, 0X00, 0X01, 0XFF, 0XFC, + 0XCF, 0XDE, 0XFF, 0XFF, 0X6D, 0XFF, 0XFF, 0XFF, 0XFF, 0XFB, 0X3F, 0XFF, 0XFF, 0XFF, 0X01, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFB, 0X7F, 0XFF, 0XFF, 0XFF, 0X01, 0XF8, 0X00, 0X01, 0XFF, 0XFB, 0X7F, 0X80, + 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X01, 0XFF, 0XF8, 0X0F, 0XDF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XC7, 0XF8, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0X83, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X39, 0XF8, 0X00, 0X01, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X7D, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X01, 0XF8, + 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X01, 0XF8, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X01, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XE7, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XA3, 0XF8, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X29, 0XF8, 0X00, 0X01, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0X6D, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X39, 0XF8, + 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X83, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, +}; + +#endif diff --git a/src/bitmaps/WS_Bitmaps80x128.h b/src/bitmaps/WS_Bitmaps80x128.h new file mode 100644 index 0000000..5eb6bf1 --- /dev/null +++ b/src/bitmaps/WS_Bitmaps80x128.h @@ -0,0 +1,120 @@ +/** + @filename : imagedata.cpp + @brief : data file for epd demo + + Copyright (C) Waveshare September 5 2017 + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documnetation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#ifndef _WS_Bitmaps80x128_H_ +#define _WS_Bitmaps80x128_H_ + +#if defined(ESP8266) || defined(ESP32) +#include +#else +#include +#endif + + +const unsigned char WS_Bitmap80x128[] PROGMEM = +{ + 0X00, 0X00, 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X80, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X01, 0X08, + 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X03, 0X0C, 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, + 0X00, 0X00, 0X06, 0X06, 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X04, 0X02, 0X00, 0X00, + 0X01, 0X80, 0XC0, 0X00, 0X00, 0X00, 0X04, 0X02, 0X00, 0X00, 0X01, 0X80, 0XF8, 0X00, 0X00, 0X00, + 0X04, 0X02, 0X00, 0X00, 0X01, 0X80, 0X3F, 0X00, 0X00, 0X00, 0X06, 0X06, 0X00, 0X00, 0X01, 0X80, + 0X07, 0XE0, 0X00, 0X00, 0X03, 0XFC, 0X00, 0X00, 0X01, 0X80, 0X07, 0XF0, 0X00, 0X00, 0X01, 0XF8, + 0X00, 0X00, 0X01, 0X80, 0X1F, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X80, 0XF8, 0X10, + 0X3F, 0XC0, 0X00, 0X00, 0X00, 0X00, 0X01, 0X80, 0XE0, 0X00, 0X7F, 0XC0, 0X03, 0X00, 0X00, 0X00, + 0X01, 0X80, 0X00, 0X00, 0X40, 0X00, 0X07, 0X80, 0X00, 0XC0, 0X01, 0X80, 0X7F, 0X80, 0X40, 0X00, + 0X04, 0X80, 0X00, 0XF8, 0X01, 0X80, 0XFF, 0X80, 0X60, 0X00, 0X07, 0X80, 0X00, 0X3F, 0X01, 0X80, + 0X91, 0X83, 0XFF, 0XC0, 0X03, 0X00, 0X00, 0X07, 0XE1, 0X80, 0X98, 0X83, 0XFF, 0XC0, 0X00, 0X00, + 0X00, 0X07, 0XF1, 0X80, 0X88, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X1F, 0X11, 0X80, 0XC8, 0X80, + 0X40, 0X40, 0X03, 0XF8, 0X00, 0XF8, 0X11, 0X80, 0X6F, 0X80, 0X40, 0X40, 0X07, 0XFC, 0X00, 0XE0, + 0X01, 0X80, 0X27, 0X01, 0XFF, 0XC0, 0X04, 0X66, 0X00, 0X00, 0X01, 0X80, 0X00, 0X01, 0XFF, 0XC0, + 0X04, 0X22, 0X00, 0X7F, 0X81, 0X80, 0X00, 0X00, 0X40, 0X00, 0X04, 0X22, 0X00, 0XFF, 0X81, 0X87, + 0XFF, 0X80, 0X00, 0X00, 0X07, 0XE6, 0X00, 0X91, 0X81, 0X87, 0XFF, 0X82, 0X00, 0X00, 0X03, 0XC4, + 0X00, 0X98, 0X81, 0X83, 0XC0, 0X03, 0X80, 0X00, 0X00, 0X00, 0X00, 0X88, 0X81, 0X80, 0XF0, 0X03, + 0XE0, 0X00, 0X00, 0X00, 0X00, 0XC8, 0X81, 0X80, 0X3E, 0X02, 0X7E, 0X00, 0X03, 0XC2, 0X00, 0X6F, + 0X81, 0X80, 0X0F, 0X82, 0X1F, 0XC0, 0X07, 0XE2, 0X00, 0X27, 0X01, 0X80, 0X0F, 0X82, 0X01, 0XC0, + 0X04, 0X32, 0X00, 0X00, 0X01, 0X80, 0X3E, 0X02, 0X00, 0X00, 0X04, 0X1A, 0X00, 0X00, 0X01, 0X80, + 0XF0, 0X02, 0X00, 0X00, 0X04, 0X0E, 0X07, 0XFF, 0X81, 0X83, 0XC0, 0X00, 0X00, 0X00, 0X07, 0X06, + 0X07, 0XFF, 0X81, 0X87, 0XFF, 0X80, 0X00, 0X00, 0X03, 0X02, 0X00, 0XC1, 0X81, 0X87, 0XFF, 0X80, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X80, 0X81, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X80, + 0X81, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X60, 0X00, 0XC1, 0X81, 0X80, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X60, 0X00, 0X7F, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X20, 0X00, 0X3E, 0X01, 0X80, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X60, 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X60, + 0X00, 0X00, 0X01, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X00, 0X40, 0X00, 0X7F, 0X81, 0X80, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X60, 0X00, 0XFF, 0X81, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X20, 0X00, 0X80, + 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X80, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, + 0X03, 0XBC, 0X00, 0XC0, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X07, 0XFE, 0X00, 0XFF, 0X81, 0X80, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X42, 0X00, 0XFF, 0X81, 0X80, 0X00, 0X00, 0X00, 0X00, 0X04, 0X42, + 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X04, 0X42, 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, + 0X00, 0X00, 0X07, 0X0E, 0X00, 0XFF, 0X81, 0X80, 0X00, 0X00, 0X00, 0X00, 0X03, 0X0C, 0X00, 0XFF, + 0X81, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X81, 0X80, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X81, 0X80, 0X00, 0X00, 0X00, 0X00, 0X03, 0XC2, 0X00, 0X00, 0X81, 0X80, + 0X00, 0X00, 0X00, 0X00, 0X07, 0XE2, 0X00, 0XFF, 0X81, 0X80, 0X00, 0X00, 0X00, 0X00, 0X04, 0X32, + 0X00, 0XFF, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X04, 0X1A, 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, + 0X00, 0X00, 0X04, 0X0E, 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X07, 0X06, 0X01, 0X0E, + 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X03, 0X02, 0X03, 0X1F, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X06, 0X11, 0X81, 0X80, 0X00, 0X02, 0X00, 0X00, 0X00, 0X00, 0X04, 0X10, 0X81, 0X80, + 0X03, 0XFF, 0XC0, 0X00, 0X00, 0X00, 0X04, 0X30, 0X81, 0X80, 0X03, 0XFF, 0XC0, 0X00, 0X00, 0X00, + 0X04, 0X20, 0X81, 0X80, 0X01, 0X82, 0X00, 0X00, 0X00, 0X20, 0X04, 0X20, 0X81, 0X80, 0X00, 0XE2, + 0X00, 0X00, 0X00, 0X20, 0X06, 0X61, 0X81, 0X80, 0X00, 0X72, 0X00, 0X00, 0X0C, 0X01, 0X83, 0XC3, + 0X01, 0X80, 0X00, 0X1A, 0X00, 0X00, 0X00, 0X00, 0X01, 0X82, 0X01, 0X80, 0X00, 0X0E, 0X00, 0X00, + 0X01, 0XFC, 0X00, 0X00, 0X01, 0X80, 0X00, 0X06, 0X00, 0X00, 0X03, 0XFE, 0X00, 0X00, 0X01, 0X80, + 0X00, 0X00, 0X00, 0X00, 0X03, 0XFE, 0X00, 0X00, 0X01, 0X80, 0X00, 0X07, 0X00, 0X00, 0X07, 0XFF, + 0X00, 0X00, 0X01, 0X80, 0X01, 0XEF, 0X80, 0X00, 0X37, 0XFF, 0X60, 0X00, 0X01, 0X80, 0X03, 0XF8, + 0XC0, 0X00, 0X07, 0XFF, 0X00, 0X00, 0X01, 0X80, 0X02, 0X30, 0X40, 0X00, 0X03, 0XFE, 0X00, 0X00, + 0X01, 0X80, 0X02, 0X10, 0X40, 0X00, 0X03, 0XFE, 0X00, 0X00, 0X01, 0X80, 0X03, 0X10, 0XC0, 0X00, + 0X01, 0XFC, 0X00, 0X00, 0X01, 0X80, 0X01, 0X81, 0X80, 0X00, 0X0C, 0X01, 0X80, 0X00, 0X01, 0X80, + 0X00, 0X81, 0X80, 0X00, 0X00, 0X20, 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X20, + 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, + 0X00, 0X00, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X80, 0X01, 0X81, 0X80, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X01, 0X80, 0X01, 0X81, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X80, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0XFF, 0XFF, + 0XC1, 0X80, 0X00, 0XE0, 0X40, 0X00, 0X00, 0X07, 0XFF, 0XFF, 0XC1, 0X80, 0X03, 0XF8, 0X40, 0X00, + 0X00, 0X1F, 0XE0, 0XFF, 0XC1, 0X80, 0X03, 0X1C, 0X40, 0X00, 0X00, 0X3F, 0X80, 0X1F, 0XC1, 0X80, + 0X02, 0X06, 0X40, 0X00, 0X00, 0X3F, 0X00, 0X0F, 0XC1, 0X80, 0X02, 0X03, 0X40, 0X00, 0X00, 0XFC, + 0X0F, 0X07, 0XC1, 0X80, 0X03, 0X01, 0XC0, 0X00, 0X00, 0XFC, 0X07, 0X83, 0XC1, 0X80, 0X01, 0X80, + 0XC0, 0X00, 0X00, 0XFE, 0X03, 0XFF, 0XC1, 0X80, 0X00, 0X80, 0X40, 0X00, 0X01, 0XFF, 0XC0, 0X7F, + 0XC1, 0X80, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC1, 0XF0, 0X7F, 0XC1, 0X80, 0X00, 0X00, 0X00, 0X00, + 0X01, 0XC1, 0XF0, 0X7F, 0XC1, 0X80, 0X00, 0X00, 0X00, 0X00, 0X01, 0XC0, 0XF8, 0X7F, 0XC1, 0X80, + 0X00, 0X00, 0X00, 0X00, 0X01, 0XE0, 0X13, 0XFF, 0XC1, 0X80, 0X03, 0XFF, 0XC0, 0X00, 0X01, 0XF0, + 0X0F, 0XFF, 0XC1, 0X80, 0X03, 0XFF, 0XC0, 0X00, 0X01, 0XFF, 0X01, 0XFF, 0XC1, 0X80, 0X01, 0X80, + 0X00, 0X00, 0X01, 0XFF, 0XC0, 0X7F, 0XC1, 0X80, 0X00, 0XC0, 0X00, 0X00, 0X01, 0XFF, 0XC0, 0X7F, + 0X81, 0X80, 0X00, 0X40, 0X00, 0X00, 0X01, 0XFE, 0X01, 0XFF, 0X81, 0X80, 0X00, 0X00, 0X00, 0X00, + 0X01, 0XFC, 0X1F, 0XFF, 0X81, 0X80, 0X00, 0X00, 0X00, 0X00, 0X01, 0XFC, 0X0F, 0XFF, 0X81, 0X80, + 0X00, 0X00, 0X00, 0X00, 0X01, 0XFF, 0X00, 0XFF, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X01, 0XFF, + 0XC0, 0X7E, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X01, 0XFF, 0X00, 0X7E, 0X01, 0X80, 0X00, 0X00, + 0X00, 0X00, 0X01, 0XFC, 0X03, 0XFC, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X01, 0XFC, 0X1F, 0XF8, + 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X01, 0XFC, 0X7F, 0XF0, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, + 0X01, 0XFC, 0X7F, 0XF0, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X01, 0XFF, 0XFF, 0XC0, 0X01, 0X80, + 0X00, 0X00, 0X00, 0X00, 0X01, 0XFF, 0XFF, 0X00, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X80, 0X00, 0X00, 0X00, 0X00, +}; + +#endif diff --git a/src/epd/GxEPD2_102.cpp b/src/epd/GxEPD2_102.cpp new file mode 100644 index 0000000..abdb704 --- /dev/null +++ b/src/epd/GxEPD2_102.cpp @@ -0,0 +1,429 @@ +// Display Library for SPI e-paper panels from Dalian Good Display and boards from Waveshare. +// Requires HW SPI and Adafruit_GFX. Caution: these e-papers require 3.3V supply AND data lines! +// +// based on Demo Example from Good Display: http://www.e-paper-display.com/download_list/downloadcategoryid=34&isMode=false.html +// Panel: GDEW0102T4 : https://www.good-display.com/product/207.html +// Controller: UC8175 : https://v4.cecdn.yun300.cn/100001_1909185148/UC8175-1.pdf +// +// Author: Jean-Marc Zingg +// +// Version: see library.properties +// +// Library: https://github.com/ZinggJM/GxEPD2 + +#include "GxEPD2_102.h" + +GxEPD2_102::GxEPD2_102(int8_t cs, int8_t dc, int8_t rst, int8_t busy) : + GxEPD2_EPD(cs, dc, rst, busy, LOW, 10000000, WIDTH, HEIGHT, panel, hasColor, hasPartialUpdate, hasFastPartialUpdate) +{ +} + +void GxEPD2_102::clearScreen(uint8_t value) +{ + writeScreenBuffer(value); + refresh(true); + writeScreenBuffer(value); +} + +void GxEPD2_102::writeScreenBuffer(uint8_t value) +{ + _initial_write = false; // initial full screen buffer clean done + if (!_using_partial_mode) _Init_Part(); + if (_initial_refresh) + { + _writeCommand(0x10); // init old data + _startTransfer(); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(HEIGHT) / 8; i++) + { + _transfer(value); + } + _endTransfer(); + } + _writeCommand(0x13); + _startTransfer(); + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(HEIGHT) / 8; i++) + { + _transfer(value); + } + _endTransfer(); +} + +void GxEPD2_102::writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + _writeImage(0x13, bitmap, x, y, w, h, invert, mirror_y, pgm); +} + +void GxEPD2_102::writeImageForFullRefresh(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + _writeImage(0x10, bitmap, x, y, w, h, invert, mirror_y, pgm); + _writeImage(0x13, bitmap, x, y, w, h, invert, mirror_y, pgm); +} + +void GxEPD2_102::_writeImage(uint8_t command, const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (_initial_write) writeScreenBuffer(); // initial full screen buffer clean + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + int16_t wb = (w + 7) / 8; // width bytes, bitmaps are padded + x -= x % 8; // byte boundary + w = wb * 8; // byte boundary + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + if (!_using_partial_mode) _Init_Part(); + //uint32_t start = micros(); + _writeCommand(0x91); // partial in + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(command); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 8; j++) + { + uint8_t data; + // use wb, h of bitmap for index! + int16_t idx = mirror_y ? j + dx / 8 + ((h - 1 - (i + dy))) * wb : j + dx / 8 + (i + dy) * wb; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + _transfer(data); + } + } + _endTransfer(); + _writeCommand(0x92); // partial out + //Serial.print("GxEPD2_102::writeImage took "); Serial.println(micros() - start); + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_102::writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + _writeImagePart(0x13, bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); +} + +void GxEPD2_102::_writeImagePart(uint8_t command, const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (_initial_write) writeScreenBuffer(); // initial full screen buffer clean + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 + if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0)) return; + if ((x_part < 0) || (x_part >= w_bitmap)) return; + if ((y_part < 0) || (y_part >= h_bitmap)) return; + int16_t wb_bitmap = (w_bitmap + 7) / 8; // width bytes, bitmaps are padded + x_part -= x_part % 8; // byte boundary + w = w_bitmap - x_part < w ? w_bitmap - x_part : w; // limit + h = h_bitmap - y_part < h ? h_bitmap - y_part : h; // limit + x -= x % 8; // byte boundary + w = 8 * ((w + 7) / 8); // byte boundary, bitmaps are padded + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + int16_t dx = x1 - x; + int16_t dy = y1 - y; + w1 -= dx; + h1 -= dy; + if ((w1 <= 0) || (h1 <= 0)) return; + if (!_using_partial_mode) _Init_Part(); + _writeCommand(0x91); // partial in + _setPartialRamArea(x1, y1, w1, h1); + _writeCommand(command); + _startTransfer(); + for (int16_t i = 0; i < h1; i++) + { + for (int16_t j = 0; j < w1 / 8; j++) + { + uint8_t data; + // use wb_bitmap, h_bitmap of bitmap for index! + int16_t idx = mirror_y ? x_part / 8 + j + dx / 8 + ((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 8 + j + dx / 8 + (y_part + i + dy) * wb_bitmap; + if (pgm) + { +#if defined(__AVR) || defined(ESP8266) || defined(ESP32) + data = pgm_read_byte(&bitmap[idx]); +#else + data = bitmap[idx]; +#endif + } + else + { + data = bitmap[idx]; + } + if (invert) data = ~data; + _transfer(data); + } + } + _endTransfer(); + _writeCommand(0x92); // partial out + delay(1); // yield() to avoid WDT on ESP8266 and ESP32 +} + +void GxEPD2_102::writeImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (black) + { + writeImage(black, x, y, w, h, invert, mirror_y, pgm); + } +} + +void GxEPD2_102::writeImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (black) + { + writeImagePart(black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); + } +} + +void GxEPD2_102::writeNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + if (data1) + { + writeImage(data1, x, y, w, h, invert, mirror_y, pgm); + } +} + +void GxEPD2_102::drawImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); + writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm); +} + +void GxEPD2_102::drawImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImagePart(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); + writeImagePart(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); +} + +void GxEPD2_102::drawImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImage(black, color, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); + writeImage(black, color, x, y, w, h, invert, mirror_y, pgm); +} + +void GxEPD2_102::drawImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImagePart(black, color, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); + writeImagePart(black, color, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm); +} + +void GxEPD2_102::drawNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeNative(data1, data2, x, y, w, h, invert, mirror_y, pgm); + refresh(x, y, w, h); + writeNative(data1, data2, x, y, w, h, invert, mirror_y, pgm); +} + +void GxEPD2_102::refresh(bool partial_update_mode) +{ + if (partial_update_mode) refresh(0, 0, WIDTH, HEIGHT); + else + { + if (_using_partial_mode) _Init_Full(); + _Update_Full(); + _initial_refresh = false; // initial full update done + } +} + +void GxEPD2_102::refresh(int16_t x, int16_t y, int16_t w, int16_t h) +{ + if (_initial_refresh) return refresh(false); // initial update needs be full update + x -= x % 8; // byte boundary + w -= x % 8; // byte boundary + int16_t x1 = x < 0 ? 0 : x; // limit + int16_t y1 = y < 0 ? 0 : y; // limit + int16_t w1 = x + w < int16_t(WIDTH) ? w : int16_t(WIDTH) - x; // limit + int16_t h1 = y + h < int16_t(HEIGHT) ? h : int16_t(HEIGHT) - y; // limit + w1 -= x1 - x; + h1 -= y1 - y; + if (!_using_partial_mode) _Init_Part(); + if (usePartialUpdateWindow) _writeCommand(0x91); // partial in + _setPartialRamArea(x1, y1, w1, h1); + _Update_Part(); + if (usePartialUpdateWindow) _writeCommand(0x92); // partial out +} + +void GxEPD2_102::powerOff(void) +{ + _PowerOff(); +} + +void GxEPD2_102::hibernate() +{ + _PowerOff(); + if (_rst >= 0) + { + _writeCommand(0x07); // deep sleep + _writeData(0xA5); // check code + _hibernating = true; + } +} + +void GxEPD2_102::_setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + uint16_t xe = (x + w - 1) | 0x0007; // byte boundary inclusive (last byte) + uint16_t ye = y + h - 1; + x &= 0xFFF8; // byte boundary + _writeCommand(0x90); // partial window + _writeData(x); + _writeData(xe); + _writeData(y); + _writeData(ye); + _writeData(0x00); +} + +void GxEPD2_102::_PowerOn() +{ + if (!_power_is_on) + { + _writeCommand(0x04); + _waitWhileBusy("_PowerOn", power_on_time); + } + _power_is_on = true; +} + +void GxEPD2_102::_PowerOff() +{ + _writeCommand(0x02); // power off + _waitWhileBusy("_PowerOff", power_off_time); + _power_is_on = false; + _using_partial_mode = false; +} + +void GxEPD2_102::_InitDisplay() +{ + if (_hibernating) _reset(); + _writeCommand(0xD2); // ?? + _writeData(0x3F); + _writeCommand(0x00); // Panel Setting Register + _writeData (useOTPforFullRefresh ? 0x4F : 0x6F); // LUT from OTP or from Registers + _writeCommand(0x01); // Power Setting + _writeData (0x03); // internal VDH/VDL VGH/VGL + _writeData (0x00); // VDG_LVL +15,-15 + _writeData (0x2b); // VDH_LVL +11 + _writeData (0x2b); // VDL_LVL -11 + _writeCommand(0x06); // Charge Pump Setting + _writeData(0x3f); // 50ms, Stength 4, 8kHz + _writeCommand(0x2A); // LUT Option + _writeData(0x00); // no all gate on + _writeData(0x00); // 0..5 : 10s, 20..30 : 4.8s + _writeCommand(0x30); // PLL + _writeData(0x13); // 30 Hz + _writeCommand(0x50); // VCOM and Data interval setting + _writeData(0x57); // default + _writeCommand(0x60); // TCON + _writeData(0x22); // 24us + _writeCommand(0x61); // Resolution Setting + _writeData (0x50); // HRES 80 + _writeData (0x80); // VRES 128 + _writeCommand(0x82); // Vcom DC Setting + _writeData(0x12); // -1 V + _writeCommand(0xe3); // Power Saving + _writeData(0x33); // +} + +const unsigned char GxEPD2_102::lut_w_full[] PROGMEM = +{ + 0x60, 0x5A, 0x5A, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const unsigned char GxEPD2_102::lut_b_full[] PROGMEM = +{ + 0x90, 0x5A, 0x5A, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const unsigned char GxEPD2_102::lut_w_partial[] PROGMEM = +{ + 0x60, 0x01, 0x01, 0x00, 0x00, 0x01, + 0x80, 0x0f, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const unsigned char GxEPD2_102::lut_b_partial[] PROGMEM = +{ + 0x90, 0x01, 0x01, 0x00, 0x00, 0x01, + 0x40, 0x0f, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +void GxEPD2_102::_Init_Full() +{ + _InitDisplay(); + _writeCommand(0x23); + _writeDataPGM(lut_w_full, sizeof(lut_w_full)); + _writeCommand(0x24); + _writeDataPGM(lut_b_full, sizeof(lut_b_full)); + _PowerOn(); + _using_partial_mode = false; +} + +void GxEPD2_102::_Init_Part() +{ + _InitDisplay(); + _writeCommand(0x00); // Panel Setting Register + _writeData (0x6F); // LUT from Registers + _writeCommand(0x30); // PLL + _writeData(0x05); // 15Hz + _writeCommand(0x50); // VCOM and Data interval setting + _writeData(0xF2); // DDX 11 : differential, VBD 11 : vcom, CDI 2 : 5 hsync + _writeCommand(0x82); // Vcom DC Setting + _writeData(0x00); // -0.1 V + _writeCommand(0x23); + _writeDataPGM(lut_w_partial, sizeof(lut_w_partial)); + _writeCommand(0x24); + _writeDataPGM(lut_b_partial, sizeof(lut_b_partial)); + _PowerOn(); + _using_partial_mode = true; +} + +void GxEPD2_102::_Update_Full() +{ + _writeCommand(0x12); //display refresh + _waitWhileBusy("_Update_Full", full_refresh_time); +} + +void GxEPD2_102::_Update_Part() +{ + _writeCommand(0x12); //display refresh + _waitWhileBusy("_Update_Part", partial_refresh_time); +} diff --git a/src/epd/GxEPD2_102.h b/src/epd/GxEPD2_102.h new file mode 100644 index 0000000..edd4026 --- /dev/null +++ b/src/epd/GxEPD2_102.h @@ -0,0 +1,83 @@ +// Display Library for SPI e-paper panels from Dalian Good Display and boards from Waveshare. +// Requires HW SPI and Adafruit_GFX. Caution: these e-papers require 3.3V supply AND data lines! +// +// based on Demo Example from Good Display: http://www.e-paper-display.com/download_list/downloadcategoryid=34&isMode=false.html +// Panel: GDEW0102T4 : https://www.good-display.com/product/207.html +// Controller: UC8175 : https://v4.cecdn.yun300.cn/100001_1909185148/UC8175-1.pdf +// +// Author: Jean-Marc Zingg +// +// Version: see library.properties +// +// Library: https://github.com/ZinggJM/GxEPD2 + +#ifndef _GxEPD2_102_H_ +#define _GxEPD2_102_H_ + +#include "../GxEPD2_EPD.h" + +class GxEPD2_102 : public GxEPD2_EPD +{ + public: + // attributes + static const uint16_t WIDTH = 80; + static const uint16_t HEIGHT = 128; + static const GxEPD2::Panel panel = GxEPD2::GDEW0102T4; + static const bool hasColor = false; + static const bool hasPartialUpdate = true; + static const bool usePartialUpdateWindow = false; // set false for better image + static const bool hasFastPartialUpdate = true; + static const bool useOTPforFullRefresh = true; + static const uint16_t power_on_time = 250; // ms, e.g. 210453us + static const uint16_t power_off_time = 250; // ms, e.g. 202366us + static const uint16_t full_refresh_time = 3600; // ms, e.g. 3507492us + static const uint16_t partial_refresh_time = 1200; // ms, e.g. 1102149us + // constructor + GxEPD2_102(int8_t cs, int8_t dc, int8_t rst, int8_t busy); + // methods (virtual) + // Support for Bitmaps (Sprites) to Controller Buffer and to Screen + void clearScreen(uint8_t value = 0xFF); // init controller memory and screen (default white) + void writeScreenBuffer(uint8_t value = 0xFF); // init controller memory (default white) + // write to controller memory, without screen refresh; x and w should be multiple of 8 + void writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImageForFullRefresh(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void writeImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + // write sprite of native data to controller memory, without screen refresh; x and w should be multiple of 8 + void writeNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + // write to controller memory, with screen refresh; x and w should be multiple of 8 + void drawImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void drawImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void drawImage(const uint8_t* black, const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void drawImagePart(const uint8_t* black, const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + // write sprite of native data to controller memory, with screen refresh; x and w should be multiple of 8 + void drawNative(const uint8_t* data1, const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void refresh(bool partial_update_mode = false); // screen refresh from controller memory to full screen + void refresh(int16_t x, int16_t y, int16_t w, int16_t h); // screen refresh from controller memory, partial screen + void powerOff(); // turns off generation of panel driving voltages, avoids screen fading over time + void hibernate(); // turns powerOff() and sets controller to deep sleep for minimum power use, ONLY if wakeable by RST (rst >= 0) + private: + void _writeImage(uint8_t command, const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void _writeImagePart(uint8_t command, const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, + int16_t x, int16_t y, int16_t w, int16_t h, bool invert = false, bool mirror_y = false, bool pgm = false); + void _setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + void _PowerOn(); + void _PowerOff(); + void _InitDisplay(); + void _Init_Full(); + void _Init_Part(); + void _Update_Full(); + void _Update_Part(); + private: + static const unsigned char lut_w_full[]; + static const unsigned char lut_b_full[]; + static const unsigned char lut_w_partial[]; + static const unsigned char lut_b_partial[]; +}; + +#endif