Przeglądaj źródła

Version 1.1.3

- fixed wavetables for GDEW029T5 and GDEW0213I5F
- fixed drawImage(...) overloaded methods signature matching ambiguity
ZinggJM 7 lat temu
rodzic
commit
f476d9204f

+ 4 - 1
README.md

@@ -38,7 +38,10 @@
 - Waveshare e-paper displays with SPI: http://forum.arduino.cc/index.php?topic=487007.0
 - Waveshare e-paper displays with SPI: http://forum.arduino.cc/index.php?topic=487007.0
 - Good Dispay ePaper for Arduino : https://forum.arduino.cc/index.php?topic=436411.0
 - Good Dispay ePaper for Arduino : https://forum.arduino.cc/index.php?topic=436411.0
 
 
-### Version 1.1.2
+### Version 1.1.3
+- fixed wavetables for GDEW029T5 and GDEW0213I5F
+- fixed drawImage(...) overloaded methods signature matching ambiguity
+#### Version 1.1.2
 - added support for GDEW029T5
 - added support for GDEW029T5
 - fixed (added) clipping for partial window
 - fixed (added) clipping for partial window
 - fixed (added) powerOff() after full update (partial update keeps power on)
 - fixed (added) powerOff() after full update (partial update keeps power on)

+ 29 - 4
examples/GxEPD2_Example/GxEPD2_Example.ino

@@ -11,7 +11,7 @@
 
 
 // Supporting Arduino Forum Topics:
 // Supporting Arduino Forum Topics:
 // Waveshare e-paper displays with SPI: http://forum.arduino.cc/index.php?topic=487007.0
 // Waveshare e-paper displays with SPI: http://forum.arduino.cc/index.php?topic=487007.0
-// Good Dispay ePaper for Arduino : https://forum.arduino.cc/index.php?topic=436411.0
+// Good Dispay ePaper for Arduino: https://forum.arduino.cc/index.php?topic=436411.0
 
 
 // mapping suggestion from Waveshare SPI e-Paper to Wemos D1 mini
 // mapping suggestion from Waveshare SPI e-Paper to Wemos D1 mini
 // BUSY -> D2, RST -> D4, DC -> D3, CS -> D8, CLK -> D5, DIN -> D7, GND -> GND, 3.3V -> 3.3V
 // BUSY -> D2, RST -> D4, DC -> D3, CS -> D8, CLK -> D5, DIN -> D7, GND -> GND, 3.3V -> 3.3V
@@ -34,6 +34,9 @@
 // mapping suggestion for AVR, UNO, NANO etc.
 // mapping suggestion for AVR, UNO, NANO etc.
 // BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11
 // BUSY -> 7, RST -> 9, DC -> 8, CS-> 10, CLK -> 13, DIN -> 11
 
 
+// mapping of Waveshare Universal e-Paper Raw Panel Driver Shield for Arduino / NUCLEO
+// BUSY -> 7, RST -> 8, DC -> 9, CS-> 10, CLK -> 13, DIN -> 11
+
 // mapping suggestion for Arduino MEGA
 // mapping suggestion for Arduino MEGA
 // BUSY -> 7, RST -> 9, DC -> 8, CS-> 53, CLK -> 52, DIN -> 51
 // BUSY -> 7, RST -> 9, DC -> 8, CS-> 53, CLK -> 52, DIN -> 51
 
 
@@ -157,6 +160,28 @@
 //GxEPD2_3C<GxEPD2_420c, MAX_HEIGHT_3C(GxEPD2_420c)> display(GxEPD2_420c(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7));
 //GxEPD2_3C<GxEPD2_420c, MAX_HEIGHT_3C(GxEPD2_420c)> display(GxEPD2_420c(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7));
 //GxEPD2_3C<GxEPD2_583c, MAX_HEIGHT_3C(GxEPD2_583c)> display(GxEPD2_583c(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7));
 //GxEPD2_3C<GxEPD2_583c, MAX_HEIGHT_3C(GxEPD2_583c)> display(GxEPD2_583c(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7));
 //GxEPD2_3C<GxEPD2_750c, MAX_HEIGHT_3C(GxEPD2_750c)> display(GxEPD2_750c(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7));
 //GxEPD2_3C<GxEPD2_750c, MAX_HEIGHT_3C(GxEPD2_750c)> display(GxEPD2_750c(/*CS=10*/ SS, /*DC=*/ 8, /*RST=*/ 9, /*BUSY=*/ 7));
+
+// ***** for mapping of Waveshare Universal e-Paper Raw Panel Driver Shield for Arduino / NUCLEO *****
+// CAUTION: the RST line is not connected through level converter! This may damage the display and/or cause malfunction. use -1 for RST parameter
+// select one and adapt to your mapping
+//GxEPD2_BW<GxEPD2_154, MAX_HEIGHT(GxEPD2_154)> display(GxEPD2_154(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ -1, /*BUSY=*/ 7));
+//GxEPD2_BW<GxEPD2_213, MAX_HEIGHT(GxEPD2_213)> display(GxEPD2_213(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ -1, /*BUSY=*/ 7));
+//GxEPD2_BW<GxEPD2_213_flex, MAX_HEIGHT(GxEPD2_213_flex)> display(GxEPD2_213_flex(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ -1, /*BUSY=*/ 7)); // GDEW0213I5F
+//GxEPD2_BW<GxEPD2_290, MAX_HEIGHT(GxEPD2_290)> display(GxEPD2_290(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ -1, /*BUSY=*/ 7));
+//GxEPD2_BW<GxEPD2_290_T5, MAX_HEIGHT(GxEPD2_290_T5)> display(GxEPD2_290_T5(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ -1, /*BUSY=*/ 7)); // GDEW029T5
+//GxEPD2_BW<GxEPD2_270, MAX_HEIGHT(GxEPD2_270)> display(GxEPD2_270(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ -1, /*BUSY=*/ 7));
+//GxEPD2_BW<GxEPD2_420, MAX_HEIGHT(GxEPD2_420)> display(GxEPD2_420(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ -1, /*BUSY=*/ 7));
+//GxEPD2_BW<GxEPD2_583, MAX_HEIGHT(GxEPD2_583)> display(GxEPD2_583(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ -1, /*BUSY=*/ 7));
+//GxEPD2_BW<GxEPD2_750, MAX_HEIGHT(GxEPD2_750)> display(GxEPD2_750(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ -1, /*BUSY=*/ 7));
+// 3-color e-papers
+#define MAX_HEIGHT_3C(EPD) (EPD::HEIGHT <= (MAX_DISPAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8) ? EPD::HEIGHT : (MAX_DISPAY_BUFFER_SIZE / 2) / (EPD::WIDTH / 8))
+//GxEPD2_3C<GxEPD2_154c, MAX_HEIGHT_3C(GxEPD2_154c)> display(GxEPD2_154c(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ -1, /*BUSY=*/ 7));
+//GxEPD2_3C<GxEPD2_213c, MAX_HEIGHT_3C(GxEPD2_213c)> display(GxEPD2_213c(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ -1, /*BUSY=*/ 7));
+//GxEPD2_3C<GxEPD2_290c, MAX_HEIGHT_3C(GxEPD2_290c)> display(GxEPD2_290c(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ -1, /*BUSY=*/ 7));
+//GxEPD2_3C<GxEPD2_270c, MAX_HEIGHT_3C(GxEPD2_270c)> display(GxEPD2_270c(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ -1, /*BUSY=*/ 7));
+//GxEPD2_3C<GxEPD2_420c, MAX_HEIGHT_3C(GxEPD2_420c)> display(GxEPD2_420c(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ -1, /*BUSY=*/ 7));
+//GxEPD2_3C<GxEPD2_583c, MAX_HEIGHT_3C(GxEPD2_583c)> display(GxEPD2_583c(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ -1, /*BUSY=*/ 7));
+//GxEPD2_3C<GxEPD2_750c, MAX_HEIGHT_3C(GxEPD2_750c)> display(GxEPD2_750c(/*CS=10*/ SS, /*DC=*/ 9, /*RST=*/ -1, /*BUSY=*/ 7));
 #endif
 #endif
 
 
 #include "GxEPD2_boards_added.h"
 #include "GxEPD2_boards_added.h"
@@ -409,7 +434,7 @@ void helloEpaper()
   {
   {
     display.fillScreen(GxEPD_WHITE);
     display.fillScreen(GxEPD_WHITE);
     display.setCursor(x, y);
     display.setCursor(x, y);
-    display.println(HelloEpaper);
+    display.print(HelloEpaper);
   }
   }
   while (display.nextPage());
   while (display.nextPage());
   //Serial.println("helloEpaper done");
   //Serial.println("helloEpaper done");
@@ -458,7 +483,7 @@ void deepSleepTest()
   {
   {
     display.fillScreen(GxEPD_WHITE);
     display.fillScreen(GxEPD_WHITE);
     display.setCursor(x, y);
     display.setCursor(x, y);
-    display.println(again);
+    display.print(again);
   }
   }
   while (display.nextPage());
   while (display.nextPage());
   display.hibernate();
   display.hibernate();
@@ -866,7 +891,7 @@ void drawBitmaps640x384()
 #else
 #else
   const unsigned char* bitmaps[] = {}; // not enough code space
   const unsigned char* bitmaps[] = {}; // not enough code space
 #endif
 #endif
-  if (display.epd2.panel == GxEPD2::GDEW075T8)
+  if ((display.epd2.panel == GxEPD2::GDEW075T8) || (display.epd2.panel == GxEPD2::GDEW075Z09))
   {
   {
     for (uint16_t i = 0; i < sizeof(bitmaps) / sizeof(char*); i++)
     for (uint16_t i = 0; i < sizeof(bitmaps) / sizeof(char*); i++)
     {
     {

+ 1 - 1
library.properties

@@ -1,5 +1,5 @@
 name=GxEPD2
 name=GxEPD2
-version=1.1.2
+version=1.1.3
 author=Jean-Marc Zingg
 author=Jean-Marc Zingg
 maintainer=Jean-Marc Zingg
 maintainer=Jean-Marc Zingg
 sentence=Arduino Display Library for SPI E-Paper displays from Dalian Good Display and Waveshare. 
 sentence=Arduino Display Library for SPI E-Paper displays from Dalian Good Display and Waveshare. 

+ 2 - 2
src/GxEPD2_3C.h

@@ -324,7 +324,7 @@ class GxEPD2_3C : public Adafruit_GFX
     {
     {
       epd2.writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm);
       epd2.writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm);
     }
     }
-    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 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)
     {
     {
       epd2.writeImage(black, color, x, y, w, h, invert, mirror_y, pgm);
       epd2.writeImage(black, color, x, y, w, h, invert, mirror_y, pgm);
     }
     }
@@ -338,7 +338,7 @@ class GxEPD2_3C : public Adafruit_GFX
     {
     {
       epd2.drawImage(bitmap, x, y, w, h, invert, mirror_y, pgm);
       epd2.drawImage(bitmap, x, y, w, h, invert, mirror_y, pgm);
     }
     }
-    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 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)
     {
     {
       epd2.drawImage(black, color, x, y, w, h, invert, mirror_y, pgm);
       epd2.drawImage(black, color, x, y, w, h, invert, mirror_y, pgm);
     }
     }

+ 2 - 2
src/GxEPD2_BW.h

@@ -358,7 +358,7 @@ class GxEPD2_BW : public Adafruit_GFX
     {
     {
       epd2.writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm);
       epd2.writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm);
     }
     }
-    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 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)
     {
     {
       epd2.writeImage(black, color, x, y, w, h, invert, mirror_y, pgm);
       epd2.writeImage(black, color, x, y, w, h, invert, mirror_y, pgm);
     }
     }
@@ -372,7 +372,7 @@ class GxEPD2_BW : public Adafruit_GFX
     {
     {
       epd2.drawImage(bitmap, x, y, w, h, invert, mirror_y, pgm);
       epd2.drawImage(bitmap, x, y, w, h, invert, mirror_y, pgm);
     }
     }
-    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 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)
     {
     {
       epd2.drawImage(black, color, x, y, w, h, invert, mirror_y, pgm);
       epd2.drawImage(black, color, x, y, w, h, invert, mirror_y, pgm);
     }
     }

+ 2 - 2
src/GxEPD2_GFX.h

@@ -40,10 +40,10 @@ class GxEPD2_GFX : public Adafruit_GFX
     virtual void writeScreenBuffer(uint8_t value = 0xFF) = 0; // init controller memory (default white)
     virtual void writeScreenBuffer(uint8_t value = 0xFF) = 0; // init controller memory (default white)
     // write to controller memory, without screen refresh; x and w should be multiple of 8
     // write to controller memory, without screen refresh; x and w should be multiple of 8
     virtual 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) = 0;
     virtual 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) = 0;
-    virtual 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) = 0;
+    virtual void 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) = 0;
     // write to controller memory, with screen refresh; x and w should be multiple of 8
     // write to controller memory, with screen refresh; x and w should be multiple of 8
     virtual 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) = 0;
     virtual 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) = 0;
-    virtual 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) = 0;
+    virtual void 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) = 0;
     virtual void refresh(bool partial_update_mode = false) = 0; // screen refresh from controller memory to full screen
     virtual void refresh(bool partial_update_mode = false) = 0; // screen refresh from controller memory to full screen
     virtual void refresh(int16_t x, int16_t y, int16_t w, int16_t h) = 0; // screen refresh from controller memory, partial screen
     virtual void refresh(int16_t x, int16_t y, int16_t w, int16_t h) = 0; // screen refresh from controller memory, partial screen
     virtual void powerOff() = 0; // turns off generation of panel driving voltages, avoids screen fading over time
     virtual void powerOff() = 0; // turns off generation of panel driving voltages, avoids screen fading over time

+ 375 - 235
src/epd/WaveTables.h

@@ -52,219 +52,237 @@ const uint8_t GxGDEH029A1_LUTDefault_part[] PROGMEM =
 // GDEW0213I5F
 // GDEW0213I5F
 
 
 //full screen update LUT
 //full screen update LUT
-const unsigned char GxGDEW0213I5F_lut_20_vcomDC[] PROGMEM = 
-{
-  0x00  , 0x08 , 0x00 , 0x00 , 0x00 , 0x02,
-  0x60  , 0x28 , 0x28 , 0x00 , 0x00 , 0x01,
-  0x00  , 0x14 , 0x00 , 0x00 , 0x00 , 0x01,
-  0x00  , 0x12 , 0x12 , 0x00 , 0x00 , 0x01,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
-  , 0x00 , 0x00,
-};
-const unsigned char GxGDEW0213I5F_lut_21_ww[] PROGMEM = 
-{
-  0x40  , 0x08 , 0x00 , 0x00 , 0x00 , 0x02,
-  0x90  , 0x28 , 0x28 , 0x00 , 0x00 , 0x01,
-  0x40  , 0x14 , 0x00 , 0x00 , 0x00 , 0x01,
-  0xA0  , 0x12 , 0x12 , 0x00 , 0x00 , 0x01,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
-};
-const unsigned char GxGDEW0213I5F_lut_22_bw[] PROGMEM = 
-{
-  0x40  , 0x17 , 0x00 , 0x00 , 0x00 , 0x02 ,
-  0x90  , 0x0F , 0x0F , 0x00 , 0x00 , 0x03 ,
-  0x40  , 0x0A , 0x01 , 0x00 , 0x00 , 0x01 ,
-  0xA0  , 0x0E , 0x0E , 0x00 , 0x00 , 0x02 ,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
-};
-const unsigned char GxGDEW0213I5F_lut_23_wb[] PROGMEM = 
-{
-  0x80  , 0x08 , 0x00 , 0x00 , 0x00 , 0x02,
-  0x90  , 0x28 , 0x28 , 0x00 , 0x00 , 0x01,
-  0x80  , 0x14 , 0x00 , 0x00 , 0x00 , 0x01,
-  0x50  , 0x12 , 0x12 , 0x00 , 0x00 , 0x01,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
-};
-const unsigned char GxGDEW0213I5F_lut_24_bb[] PROGMEM = 
-{
-  0x80  , 0x08 , 0x00 , 0x00 , 0x00 , 0x02,
-  0x90  , 0x28 , 0x28 , 0x00 , 0x00 , 0x01,
-  0x80  , 0x14 , 0x00 , 0x00 , 0x00 , 0x01,
-  0x50  , 0x12 , 0x12 , 0x00 , 0x00 , 0x01,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
+const unsigned char GxGDEW0213I5F_lut_20_vcomDC[] PROGMEM =
+{
+  0x00, 0x08, 0x00, 0x00, 0x00, 0x02,
+  0x60, 0x28, 0x28, 0x00, 0x00, 0x01,
+  0x00, 0x14, 0x00, 0x00, 0x00, 0x01,
+  0x00, 0x12, 0x12, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00,
+};
+
+const unsigned char GxGDEW0213I5F_lut_21_ww[] PROGMEM =
+{
+  0x40, 0x08, 0x00, 0x00, 0x00, 0x02,
+  0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
+  0x40, 0x14, 0x00, 0x00, 0x00, 0x01,
+  0xA0, 0x12, 0x12, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const unsigned char GxGDEW0213I5F_lut_22_bw[] PROGMEM =
+{
+  0x40, 0x08, 0x00, 0x00, 0x00, 0x02,
+  0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
+  0x40, 0x14, 0x00, 0x00, 0x00, 0x01,
+  0xA0, 0x12, 0x12, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const unsigned char GxGDEW0213I5F_lut_23_wb[] PROGMEM =
+{
+  0x80, 0x08, 0x00, 0x00, 0x00, 0x02,
+  0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
+  0x80, 0x14, 0x00, 0x00, 0x00, 0x01,
+  0x50, 0x12, 0x12, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const unsigned char GxGDEW0213I5F_lut_24_bb[] PROGMEM =
+{
+  0x80, 0x08, 0x00, 0x00, 0x00, 0x02,
+  0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
+  0x80, 0x14, 0x00, 0x00, 0x00, 0x01,
+  0x50, 0x12, 0x12, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 };
 };
 
 
 //partial screen update LUT
 //partial screen update LUT
-const unsigned char GxGDEW0213I5F_lut_20_vcomDC_partial[] PROGMEM = 
-{
-  0x00  , 0x19 , 0x01 , 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
-  , 0x00 , 0x00,
-};
-const unsigned char GxGDEW0213I5F_lut_21_ww_partial[] PROGMEM = 
-{
-  0x00  , 0x19 , 0x01 , 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 GxGDEW0213I5F_lut_22_bw_partial[] PROGMEM = 
-{
-  0x80  , 0x19 , 0x01 , 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 GxGDEW0213I5F_lut_23_wb_partial[] PROGMEM = 
-{
-  0x40  , 0x19 , 0x01 , 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 GxGDEW0213I5F_lut_24_bb_partial[] PROGMEM = 
-{
-  0x00  , 0x19 , 0x01 , 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,
+//#define Fx19 0x19 // original value is 25 (phase length)
+#define Fx19 0x28   // new value for test is 40 (phase length)
+const unsigned char GxGDEW0213I5F_lut_20_vcomDC_partial[] PROGMEM =
+{
+  0x00, Fx19, 0x01, 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,
+  0x00, 0x00,
+};
+
+const unsigned char GxGDEW0213I5F_lut_21_ww_partial[] PROGMEM =
+{
+  0x00, Fx19, 0x01, 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 GxGDEW0213I5F_lut_22_bw_partial[] PROGMEM =
+{
+  0x80, Fx19, 0x01, 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 GxGDEW0213I5F_lut_23_wb_partial[] PROGMEM =
+{
+  0x40, Fx19, 0x01, 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 GxGDEW0213I5F_lut_24_bb_partial[] PROGMEM =
+{
+  0x00, Fx19, 0x01, 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,
 };
 };
 
 
 // GDEW029T5 originally same as GDEW0213I5F, changed for test
 // GDEW029T5 originally same as GDEW0213I5F, changed for test
 
 
 //full screen update LUT
 //full screen update LUT
-const unsigned char GxGDEW029T5_lut_20_vcomDC[] PROGMEM = 
-{
-  0x00  , 0x08 , 0x00 , 0x00 , 0x00 , 0x02,
-  0x60  , 0x28 , 0x28 , 0x00 , 0x00 , 0x01,
-  0x00  , 0x14 , 0x00 , 0x00 , 0x00 , 0x01,
-  0x00  , 0x12 , 0x12 , 0x00 , 0x00 , 0x01,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
-  , 0x00 , 0x00,
-};
-const unsigned char GxGDEW029T5_lut_21_ww[] PROGMEM = 
-{
-  0x40  , 0x08 , 0x00 , 0x00 , 0x00 , 0x02,
-  0x90  , 0x28 , 0x28 , 0x00 , 0x00 , 0x01,
-  0x40  , 0x14 , 0x00 , 0x00 , 0x00 , 0x01,
-  0xA0  , 0x12 , 0x12 , 0x00 , 0x00 , 0x01,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
-};
-const unsigned char GxGDEW029T5_lut_22_bw[] PROGMEM = 
-{
-  0x40  , 0x17 , 0x00 , 0x00 , 0x00 , 0x02 ,
-  0x90  , 0x0F , 0x0F , 0x00 , 0x00 , 0x03 ,
-  0x40  , 0x0A , 0x01 , 0x00 , 0x00 , 0x01 ,
-  0xA0  , 0x0E , 0x0E , 0x00 , 0x00 , 0x02 ,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
-};
-const unsigned char GxGDEW029T5_lut_23_wb[] PROGMEM = 
-{
-  0x80  , 0x08 , 0x00 , 0x00 , 0x00 , 0x02,
-  0x90  , 0x28 , 0x28 , 0x00 , 0x00 , 0x01,
-  0x80  , 0x14 , 0x00 , 0x00 , 0x00 , 0x01,
-  0x50  , 0x12 , 0x12 , 0x00 , 0x00 , 0x01,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
-};
-const unsigned char GxGDEW029T5_lut_24_bb[] PROGMEM = 
-{
-  0x80  , 0x08 , 0x00 , 0x00 , 0x00 , 0x02,
-  0x90  , 0x28 , 0x28 , 0x00 , 0x00 , 0x01,
-  0x80  , 0x14 , 0x00 , 0x00 , 0x00 , 0x01,
-  0x50  , 0x12 , 0x12 , 0x00 , 0x00 , 0x01,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
-  0x00  , 0x00 , 0x00 , 0x00 , 0x00 , 0x00,
+const unsigned char GxGDEW029T5_lut_20_vcomDC[] PROGMEM =
+{
+  0x00, 0x08, 0x00, 0x00, 0x00, 0x02,
+  0x60, 0x28, 0x28, 0x00, 0x00, 0x01,
+  0x00, 0x14, 0x00, 0x00, 0x00, 0x01,
+  0x00, 0x12, 0x12, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00,
+};
+
+const unsigned char GxGDEW029T5_lut_21_ww[] PROGMEM =
+{
+  0x40, 0x08, 0x00, 0x00, 0x00, 0x02,
+  0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
+  0x40, 0x14, 0x00, 0x00, 0x00, 0x01,
+  0xA0, 0x12, 0x12, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const unsigned char GxGDEW029T5_lut_22_bw[] PROGMEM =
+{
+  0x40, 0x08, 0x00, 0x00, 0x00, 0x02,
+  0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
+  0x40, 0x14, 0x00, 0x00, 0x00, 0x01,
+  0xA0, 0x12, 0x12, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const unsigned char GxGDEW029T5_lut_23_wb[] PROGMEM =
+{
+  0x80, 0x08, 0x00, 0x00, 0x00, 0x02,
+  0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
+  0x80, 0x14, 0x00, 0x00, 0x00, 0x01,
+  0x50, 0x12, 0x12, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const unsigned char GxGDEW029T5_lut_24_bb[] PROGMEM =
+{
+  0x80, 0x08, 0x00, 0x00, 0x00, 0x02,
+  0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
+  0x80, 0x14, 0x00, 0x00, 0x00, 0x01,
+  0x50, 0x12, 0x12, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 };
 };
 
 
 //partial screen update LUT
 //partial screen update LUT
 //#define Tx19 0x19 // original value is 25 (phase length)
 //#define Tx19 0x19 // original value is 25 (phase length)
 #define Tx19 0x20   // new value for test is 32 (phase length)
 #define Tx19 0x20   // new value for test is 32 (phase length)
-const unsigned char GxGDEW029T5_lut_20_vcomDC_partial[] PROGMEM = 
-{
-  0x00  , Tx19 , 0x01 , 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
-  , 0x00 , 0x00,
-};
-const unsigned char GxGDEW029T5_lut_21_ww_partial[] PROGMEM = 
-{
-  0x00  , Tx19 , 0x01 , 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 GxGDEW029T5_lut_22_bw_partial[] PROGMEM = 
-{
-  0x80  , Tx19 , 0x01 , 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 GxGDEW029T5_lut_23_wb_partial[] PROGMEM = 
-{
-  0x40  , Tx19 , 0x01 , 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 GxGDEW029T5_lut_24_bb_partial[] PROGMEM = 
-{
-  0x00  , Tx19 , 0x01 , 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 GxGDEW029T5_lut_20_vcomDC_partial[] PROGMEM =
+{
+  0x00, Tx19, 0x01, 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,
+  0x00, 0x00,
+};
+
+const unsigned char GxGDEW029T5_lut_21_ww_partial[] PROGMEM =
+{
+  0x00, Tx19, 0x01, 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 GxGDEW029T5_lut_22_bw_partial[] PROGMEM =
+{
+  0x80, Tx19, 0x01, 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 GxGDEW029T5_lut_23_wb_partial[] PROGMEM =
+{
+  0x40, Tx19, 0x01, 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 GxGDEW029T5_lut_24_bb_partial[] PROGMEM =
+{
+  0x00, Tx19, 0x01, 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,
 };
 };
 
 
 //full screen update LUT
 //full screen update LUT
@@ -381,59 +399,179 @@ const uint8_t GxGDEW027W3_lut_24_bb_partial[] PROGMEM =
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 };
 };
 
 
+// GDEW042T2
+
+//#define USE_GDEW042T2_DEMO_WAVETABLE
+
+#ifdef USE_GDEW042T2_DEMO_WAVETABLE
+
 const unsigned char GxGDEW042T2_lut_20_vcom0_full[] PROGMEM =
 const unsigned char GxGDEW042T2_lut_20_vcom0_full[] PROGMEM =
 {
 {
-0x40, 0x17, 0x00, 0x00, 0x00, 0x02,        
-0x00, 0x17, 0x17, 0x00, 0x00, 0x02,        
-0x00, 0x0A, 0x01, 0x00, 0x00, 0x01,        
-0x00, 0x0E, 0x0E, 0x00, 0x00, 0x02,        
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,        
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,        
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x08, 0x00, 0x00, 0x00, 0x02,
+  0x60, 0x28, 0x28, 0x00, 0x00, 0x01,
+  0x00, 0x14, 0x00, 0x00, 0x00, 0x01,
+  0x00, 0x12, 0x12, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00
 };
 };
 
 
 const unsigned char GxGDEW042T2_lut_21_ww_full[] PROGMEM =
 const unsigned char GxGDEW042T2_lut_21_ww_full[] PROGMEM =
 {
 {
-0x40, 0x17, 0x00, 0x00, 0x00, 0x02,
-0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
-0x40, 0x0A, 0x01, 0x00, 0x00, 0x01,
-0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x40, 0x08, 0x00, 0x00, 0x00, 0x02,
+  0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
+  0x40, 0x14, 0x00, 0x00, 0x00, 0x01,
+  0xA0, 0x12, 0x12, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 };
 };
 
 
 const unsigned char GxGDEW042T2_lut_22_bw_full[] PROGMEM =
 const unsigned char GxGDEW042T2_lut_22_bw_full[] PROGMEM =
 {
 {
-0x40, 0x17, 0x00, 0x00, 0x00, 0x02,
-0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
-0x40, 0x0A, 0x01, 0x00, 0x00, 0x01,
-0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,     
+  0x40, 0x08, 0x00, 0x00, 0x00, 0x02,
+  0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
+  0x40, 0x14, 0x00, 0x00, 0x00, 0x01,
+  0xA0, 0x12, 0x12, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 };
 };
 
 
 const unsigned char GxGDEW042T2_lut_23_wb_full[] PROGMEM =
 const unsigned char GxGDEW042T2_lut_23_wb_full[] PROGMEM =
 {
 {
-0x80, 0x17, 0x00, 0x00, 0x00, 0x02,
-0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
-0x80, 0x0A, 0x01, 0x00, 0x00, 0x01,
-0x50, 0x0E, 0x0E, 0x00, 0x00, 0x02,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,         
+  0x80, 0x08, 0x00, 0x00, 0x00, 0x02,
+  0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
+  0x80, 0x14, 0x00, 0x00, 0x00, 0x01,
+  0x50, 0x12, 0x12, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 };
 };
 
 
 const unsigned char GxGDEW042T2_lut_24_bb_full[] PROGMEM =
 const unsigned char GxGDEW042T2_lut_24_bb_full[] PROGMEM =
 {
 {
-0x80, 0x17, 0x00, 0x00, 0x00, 0x02,
-0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
-0x80, 0x0A, 0x01, 0x00, 0x00, 0x01,
-0x50, 0x0E, 0x0E, 0x00, 0x00, 0x02,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,        
+  0x80, 0x08, 0x00, 0x00, 0x00, 0x02,
+  0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
+  0x80, 0x14, 0x00, 0x00, 0x00, 0x01,
+  0x50, 0x12, 0x12, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+
+const unsigned char GxGDEW042T2_lut_20_vcom0_partial[] PROGMEM =
+{
+  0x00, 0x19, 0x01, 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, 0x00, 0x00
+};
+
+const unsigned char GxGDEW042T2_lut_21_ww_partial[] PROGMEM =
+{
+  0x00, 0x19, 0x01, 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 GxGDEW042T2_lut_22_bw_partial[] PROGMEM =
+{
+  0x80, 0x19, 0x01, 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 GxGDEW042T2_lut_23_wb_partial[] PROGMEM =
+{
+  0x40, 0x19, 0x01, 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 GxGDEW042T2_lut_24_bb_partial[] PROGMEM =
+{
+  0x00, 0x19, 0x01, 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
+};
+
+#else
+
+const unsigned char GxGDEW042T2_lut_20_vcom0_full[] PROGMEM =
+{
+  0x40, 0x17, 0x00, 0x00, 0x00, 0x02,
+  0x00, 0x17, 0x17, 0x00, 0x00, 0x02,
+  0x00, 0x0A, 0x01, 0x00, 0x00, 0x01,
+  0x00, 0x0E, 0x0E, 0x00, 0x00, 0x02,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const unsigned char GxGDEW042T2_lut_21_ww_full[] PROGMEM =
+{
+  0x40, 0x17, 0x00, 0x00, 0x00, 0x02,
+  0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
+  0x40, 0x0A, 0x01, 0x00, 0x00, 0x01,
+  0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const unsigned char GxGDEW042T2_lut_22_bw_full[] PROGMEM =
+{
+  0x40, 0x17, 0x00, 0x00, 0x00, 0x02,
+  0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
+  0x40, 0x0A, 0x01, 0x00, 0x00, 0x01,
+  0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const unsigned char GxGDEW042T2_lut_23_wb_full[] PROGMEM =
+{
+  0x80, 0x17, 0x00, 0x00, 0x00, 0x02,
+  0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
+  0x80, 0x0A, 0x01, 0x00, 0x00, 0x01,
+  0x50, 0x0E, 0x0E, 0x00, 0x00, 0x02,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const unsigned char GxGDEW042T2_lut_24_bb_full[] PROGMEM =
+{
+  0x80, 0x17, 0x00, 0x00, 0x00, 0x02,
+  0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
+  0x80, 0x0A, 0x01, 0x00, 0x00, 0x01,
+  0x50, 0x0E, 0x0E, 0x00, 0x00, 0x02,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 };
 };
 
 
 #define TP0A  2 // sustain phase for bb and ww, change phase for bw and wb
 #define TP0A  2 // sustain phase for bb and ww, change phase for bw and wb
@@ -500,3 +638,5 @@ const unsigned char GxGDEW042T2_lut_24_bb_partial[] PROGMEM =
 };
 };
 
 
 #endif
 #endif
+
+#endif