From 9ffb649af9cee2e19354423995102bfeb623ddef Mon Sep 17 00:00:00 2001 From: olikraus Date: Fri, 8 Sep 2017 11:51:38 +0200 Subject: [PATCH] 2.17.10 --- examples/full_buffer/FPS/FPS.ino | 1 + .../full_buffer/GraphicsTest/GraphicsTest.ino | 1 + .../full_buffer/HelloWorld/HelloWorld.ino | 1 + examples/full_buffer/PrintUTF8/PrintUTF8.ino | 1 + .../SelectionList/SelectionList.ino | 1 + examples/full_buffer/U8g2Logo/U8g2Logo.ino | 1 + examples/page_buffer/Chinese/Chinese.ino | 1 + examples/page_buffer/Clock/Clock.ino | 1 + .../page_buffer/ContrastTest/ContrastTest.ino | 1 + .../page_buffer/DirectAccess/DirectAccess.ino | 1 + examples/page_buffer/ExtUTF8/ExtUTF8.ino | 1 + examples/page_buffer/FPS/FPS.ino | 1 + examples/page_buffer/FlipMode/FlipMode.ino | 1 + .../page_buffer/GraphicsTest/GraphicsTest.ino | 3 +- .../page_buffer/HelloWorld/HelloWorld.ino | 1 + examples/page_buffer/Japanese/Japanese.ino | 1 + examples/page_buffer/Korean/Korean.ino | 1 + .../PowerSaveTest/PowerSaveTest.ino | 9 +- .../PrintHelloWorld/PrintHelloWorld.ino | 1 + examples/page_buffer/PrintUTF8/PrintUTF8.ino | 1 + .../ScrollingText/ScrollingText.ino | 1 + .../SelectionList/SelectionList.ino | 3 +- examples/page_buffer/U8g2Logo/U8g2Logo.ino | 3 +- examples/page_buffer/XBM/XBM.ino | 1 + examples/page_buffer/XORTest/XORTest.ino | 1 + extras/ChangeLog | 3 +- library.properties | 2 +- src/U8g2lib.h | 72 ++ src/U8x8lib.h | 24 + src/clib/u8g2.h | 3 + src/clib/u8g2_d_setup.c | 24 + src/clib/u8x8.h | 2 + src/clib/u8x8_cad.c | 10 + src/clib/u8x8_d_il3820_296x128.c | 761 +++++++++--------- 34 files changed, 547 insertions(+), 393 deletions(-) diff --git a/examples/full_buffer/FPS/FPS.ino b/examples/full_buffer/FPS/FPS.ino index ac387a8f..64f68289 100644 --- a/examples/full_buffer/FPS/FPS.ino +++ b/examples/full_buffer/FPS/FPS.ino @@ -271,6 +271,7 @@ //U8G2_SSD1606_172X72_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! // End of constructor list diff --git a/examples/full_buffer/GraphicsTest/GraphicsTest.ino b/examples/full_buffer/GraphicsTest/GraphicsTest.ino index 7fa08917..7518ff62 100644 --- a/examples/full_buffer/GraphicsTest/GraphicsTest.ino +++ b/examples/full_buffer/GraphicsTest/GraphicsTest.ino @@ -155,6 +155,7 @@ //U8G2_SSD1606_172X72_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! // End of constructor list diff --git a/examples/full_buffer/HelloWorld/HelloWorld.ino b/examples/full_buffer/HelloWorld/HelloWorld.ino index 6e13685f..7afe7c03 100644 --- a/examples/full_buffer/HelloWorld/HelloWorld.ino +++ b/examples/full_buffer/HelloWorld/HelloWorld.ino @@ -154,6 +154,7 @@ //U8G2_SSD1606_172X72_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! // End of constructor list diff --git a/examples/full_buffer/PrintUTF8/PrintUTF8.ino b/examples/full_buffer/PrintUTF8/PrintUTF8.ino index 5ddbb1bb..bd798e47 100644 --- a/examples/full_buffer/PrintUTF8/PrintUTF8.ino +++ b/examples/full_buffer/PrintUTF8/PrintUTF8.ino @@ -157,6 +157,7 @@ //U8G2_SSD1606_172X72_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! // End of constructor list diff --git a/examples/full_buffer/SelectionList/SelectionList.ino b/examples/full_buffer/SelectionList/SelectionList.ino index 7a2af5f3..6da3b8ed 100644 --- a/examples/full_buffer/SelectionList/SelectionList.ino +++ b/examples/full_buffer/SelectionList/SelectionList.ino @@ -154,6 +154,7 @@ //U8G2_SSD1606_172X72_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! // End of constructor list diff --git a/examples/full_buffer/U8g2Logo/U8g2Logo.ino b/examples/full_buffer/U8g2Logo/U8g2Logo.ino index 3c7203ab..f0853e0f 100644 --- a/examples/full_buffer/U8g2Logo/U8g2Logo.ino +++ b/examples/full_buffer/U8g2Logo/U8g2Logo.ino @@ -155,6 +155,7 @@ //U8G2_SSD1606_172X72_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! // End of constructor list diff --git a/examples/page_buffer/Chinese/Chinese.ino b/examples/page_buffer/Chinese/Chinese.ino index 6dbfbd4d..05fca5d6 100644 --- a/examples/page_buffer/Chinese/Chinese.ino +++ b/examples/page_buffer/Chinese/Chinese.ino @@ -157,6 +157,7 @@ //U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! diff --git a/examples/page_buffer/Clock/Clock.ino b/examples/page_buffer/Clock/Clock.ino index a5a79626..2748b7e2 100644 --- a/examples/page_buffer/Clock/Clock.ino +++ b/examples/page_buffer/Clock/Clock.ino @@ -159,6 +159,7 @@ //U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! diff --git a/examples/page_buffer/ContrastTest/ContrastTest.ino b/examples/page_buffer/ContrastTest/ContrastTest.ino index 274cfc52..f6f32af0 100644 --- a/examples/page_buffer/ContrastTest/ContrastTest.ino +++ b/examples/page_buffer/ContrastTest/ContrastTest.ino @@ -156,6 +156,7 @@ //U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! diff --git a/examples/page_buffer/DirectAccess/DirectAccess.ino b/examples/page_buffer/DirectAccess/DirectAccess.ino index 13cf43c0..109c31b2 100644 --- a/examples/page_buffer/DirectAccess/DirectAccess.ino +++ b/examples/page_buffer/DirectAccess/DirectAccess.ino @@ -160,6 +160,7 @@ //U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! diff --git a/examples/page_buffer/ExtUTF8/ExtUTF8.ino b/examples/page_buffer/ExtUTF8/ExtUTF8.ino index e573c617..fffeaceb 100644 --- a/examples/page_buffer/ExtUTF8/ExtUTF8.ino +++ b/examples/page_buffer/ExtUTF8/ExtUTF8.ino @@ -156,6 +156,7 @@ //U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! diff --git a/examples/page_buffer/FPS/FPS.ino b/examples/page_buffer/FPS/FPS.ino index 29071ebe..250523be 100644 --- a/examples/page_buffer/FPS/FPS.ino +++ b/examples/page_buffer/FPS/FPS.ino @@ -335,6 +335,7 @@ //U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! diff --git a/examples/page_buffer/FlipMode/FlipMode.ino b/examples/page_buffer/FlipMode/FlipMode.ino index d4a15394..89d118d6 100644 --- a/examples/page_buffer/FlipMode/FlipMode.ino +++ b/examples/page_buffer/FlipMode/FlipMode.ino @@ -151,6 +151,7 @@ //U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! diff --git a/examples/page_buffer/GraphicsTest/GraphicsTest.ino b/examples/page_buffer/GraphicsTest/GraphicsTest.ino index 9bd5da60..7d5c7525 100644 --- a/examples/page_buffer/GraphicsTest/GraphicsTest.ino +++ b/examples/page_buffer/GraphicsTest/GraphicsTest.ino @@ -155,7 +155,8 @@ //U8G2_UC1611_EA_DOGXL240_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // SW SPI, Due DOGXL240 Test Board //U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display -U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! diff --git a/examples/page_buffer/HelloWorld/HelloWorld.ino b/examples/page_buffer/HelloWorld/HelloWorld.ino index 6453fece..95a74d30 100644 --- a/examples/page_buffer/HelloWorld/HelloWorld.ino +++ b/examples/page_buffer/HelloWorld/HelloWorld.ino @@ -156,6 +156,7 @@ //U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! diff --git a/examples/page_buffer/Japanese/Japanese.ino b/examples/page_buffer/Japanese/Japanese.ino index ce9c93e8..6655cb6b 100644 --- a/examples/page_buffer/Japanese/Japanese.ino +++ b/examples/page_buffer/Japanese/Japanese.ino @@ -157,6 +157,7 @@ //U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! diff --git a/examples/page_buffer/Korean/Korean.ino b/examples/page_buffer/Korean/Korean.ino index 26a635b8..8b12ac41 100644 --- a/examples/page_buffer/Korean/Korean.ino +++ b/examples/page_buffer/Korean/Korean.ino @@ -157,6 +157,7 @@ //U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! diff --git a/examples/page_buffer/PowerSaveTest/PowerSaveTest.ino b/examples/page_buffer/PowerSaveTest/PowerSaveTest.ino index f4813a0c..dfa45604 100644 --- a/examples/page_buffer/PowerSaveTest/PowerSaveTest.ino +++ b/examples/page_buffer/PowerSaveTest/PowerSaveTest.ino @@ -150,6 +150,7 @@ //U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! @@ -175,8 +176,12 @@ void draw(const char *s) void loop(void) { u8g2.setPowerSave(0); - draw("power on"); + draw("power on / x"); u8g2.setPowerSave(1); - draw("power off"); + draw("power off / x"); + u8g2.setPowerSave(0); + draw("power on / +"); + u8g2.setPowerSave(1); + draw("power off / +"); } diff --git a/examples/page_buffer/PrintHelloWorld/PrintHelloWorld.ino b/examples/page_buffer/PrintHelloWorld/PrintHelloWorld.ino index 0b319c52..6f1d879d 100644 --- a/examples/page_buffer/PrintHelloWorld/PrintHelloWorld.ino +++ b/examples/page_buffer/PrintHelloWorld/PrintHelloWorld.ino @@ -157,6 +157,7 @@ //U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! diff --git a/examples/page_buffer/PrintUTF8/PrintUTF8.ino b/examples/page_buffer/PrintUTF8/PrintUTF8.ino index 2f4f89ca..dc0f46aa 100644 --- a/examples/page_buffer/PrintUTF8/PrintUTF8.ino +++ b/examples/page_buffer/PrintUTF8/PrintUTF8.ino @@ -157,6 +157,7 @@ //U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! diff --git a/examples/page_buffer/ScrollingText/ScrollingText.ino b/examples/page_buffer/ScrollingText/ScrollingText.ino index 8097c345..f254114d 100644 --- a/examples/page_buffer/ScrollingText/ScrollingText.ino +++ b/examples/page_buffer/ScrollingText/ScrollingText.ino @@ -160,6 +160,7 @@ //U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! diff --git a/examples/page_buffer/SelectionList/SelectionList.ino b/examples/page_buffer/SelectionList/SelectionList.ino index d6f84b1b..22c8be42 100644 --- a/examples/page_buffer/SelectionList/SelectionList.ino +++ b/examples/page_buffer/SelectionList/SelectionList.ino @@ -58,7 +58,7 @@ //U8G2_SSD1306_128X64_NONAME_1_8080 u8g2(U8G2_R0, 13, 11, 2, 3, 4, 5, 6, A4, /*enable=*/ 7, /*cs=*/ 10, /*dc=*/ 9, /*reset=*/ 8); //U8G2_SSD1306_128X64_VCOMH0_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // same as the NONAME variant, but maximizes setContrast() range //U8G2_SH1106_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); -U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); +//U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); //U8G2_SH1106_128X64_VCOMH0_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // same as the NONAME variant, but maximizes setContrast() range //U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 21, /* data=*/ 20, /* reset=*/ U8X8_PIN_NONE); // Adafruit Feather M0 Basic Proto + FeatherWing OLED //U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // Adafruit Feather ESP8266/32u4 Boards + FeatherWing OLED @@ -146,6 +146,7 @@ U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); //U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! diff --git a/examples/page_buffer/U8g2Logo/U8g2Logo.ino b/examples/page_buffer/U8g2Logo/U8g2Logo.ino index d5b9dc8f..6dfa1cda 100644 --- a/examples/page_buffer/U8g2Logo/U8g2Logo.ino +++ b/examples/page_buffer/U8g2Logo/U8g2Logo.ino @@ -154,7 +154,8 @@ //U8G2_UC1611_EA_DOGXL240_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // SW SPI, Due DOGXL240 Test Board //U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display -U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! diff --git a/examples/page_buffer/XBM/XBM.ino b/examples/page_buffer/XBM/XBM.ino index 7a4edf4c..f57529f7 100644 --- a/examples/page_buffer/XBM/XBM.ino +++ b/examples/page_buffer/XBM/XBM.ino @@ -160,6 +160,7 @@ //U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! diff --git a/examples/page_buffer/XORTest/XORTest.ino b/examples/page_buffer/XORTest/XORTest.ino index 1d1b9d6b..c34aae93 100644 --- a/examples/page_buffer/XORTest/XORTest.ino +++ b/examples/page_buffer/XORTest/XORTest.ino @@ -160,6 +160,7 @@ //U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display //U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! +//U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! diff --git a/extras/ChangeLog b/extras/ChangeLog index 4c12b3a7..8e4236d0 100644 --- a/extras/ChangeLog +++ b/extras/ChangeLog @@ -129,4 +129,5 @@ https://github.com/olikraus/u8g2 ChangeLog * Support for SED1520/SBN1661 (issue 324) 2017-xx-xx v2.17.x olikraus@gmail.com * Additional _m_ and _h_ symbol fonts (issue 335) - * Added parallel interfaces for several UC16xx devices (issue 339) + * Added parallel interfaces for several UC16xx devices (issue 339) + * Support for IL3820, WaveShare 2.9" e-paper (issues 318 & 347) diff --git a/library.properties b/library.properties index 962988ca..fea93e6a 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=U8g2 -version=2.17.9 +version=2.17.10 author=oliver maintainer=oliver sentence=Monochrome LCD, OLED and eInk Library. Display controller: SSD1305, SSD1306, SSD1309, SSD1322, SSD1325, SSD1327, SSD1329, SSD1606, SSD1607, SH1106, T6963, RA8835, LC7981, PCD8544, PCF8812, UC1604, UC1608, UC1610, UC1611, UC1701, ST7565, ST7567, ST7588, NT7534, IST3020, ST7920, LD7032, KS0108, SED1520, SBN1661, MAX7219. Interfaces: I2C, SPI, Parallel. diff --git a/src/U8g2lib.h b/src/U8g2lib.h index dbce3d70..b5279fd5 100644 --- a/src/U8g2lib.h +++ b/src/U8g2lib.h @@ -6025,6 +6025,30 @@ class U8G2_IL3820_296X128_1_3W_SW_SPI : public U8G2 { u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; +class U8G2_IL3820_V2_296X128_1_4W_SW_SPI : public U8G2 { + public: U8G2_IL3820_V2_296X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { + u8g2_Setup_il3820_v2_296x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); + } +}; +class U8G2_IL3820_V2_296X128_1_4W_HW_SPI : public U8G2 { + public: U8G2_IL3820_V2_296X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { + u8g2_Setup_il3820_v2_296x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); + } +}; +class U8G2_IL3820_V2_296X128_1_2ND_4W_HW_SPI : public U8G2 { + public: U8G2_IL3820_V2_296X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { + u8g2_Setup_il3820_v2_296x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); + } +}; +class U8G2_IL3820_V2_296X128_1_3W_SW_SPI : public U8G2 { + public: U8G2_IL3820_V2_296X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { + u8g2_Setup_il3820_v2_296x128_1(&u8g2, rotation, u8x8_byte_3wire_sw_spi, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); + } +}; class U8G2_IL3820_296X128_2_4W_SW_SPI : public U8G2 { public: U8G2_IL3820_296X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); @@ -6049,6 +6073,30 @@ class U8G2_IL3820_296X128_2_3W_SW_SPI : public U8G2 { u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; +class U8G2_IL3820_V2_296X128_2_4W_SW_SPI : public U8G2 { + public: U8G2_IL3820_V2_296X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { + u8g2_Setup_il3820_v2_296x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); + } +}; +class U8G2_IL3820_V2_296X128_2_4W_HW_SPI : public U8G2 { + public: U8G2_IL3820_V2_296X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { + u8g2_Setup_il3820_v2_296x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); + } +}; +class U8G2_IL3820_V2_296X128_2_2ND_4W_HW_SPI : public U8G2 { + public: U8G2_IL3820_V2_296X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { + u8g2_Setup_il3820_v2_296x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); + } +}; +class U8G2_IL3820_V2_296X128_2_3W_SW_SPI : public U8G2 { + public: U8G2_IL3820_V2_296X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { + u8g2_Setup_il3820_v2_296x128_2(&u8g2, rotation, u8x8_byte_3wire_sw_spi, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); + } +}; class U8G2_IL3820_296X128_F_4W_SW_SPI : public U8G2 { public: U8G2_IL3820_296X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); @@ -6073,6 +6121,30 @@ class U8G2_IL3820_296X128_F_3W_SW_SPI : public U8G2 { u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; +class U8G2_IL3820_V2_296X128_F_4W_SW_SPI : public U8G2 { + public: U8G2_IL3820_V2_296X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { + u8g2_Setup_il3820_v2_296x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); + } +}; +class U8G2_IL3820_V2_296X128_F_4W_HW_SPI : public U8G2 { + public: U8G2_IL3820_V2_296X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { + u8g2_Setup_il3820_v2_296x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); + } +}; +class U8G2_IL3820_V2_296X128_F_2ND_4W_HW_SPI : public U8G2 { + public: U8G2_IL3820_V2_296X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { + u8g2_Setup_il3820_v2_296x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); + } +}; +class U8G2_IL3820_V2_296X128_F_3W_SW_SPI : public U8G2 { + public: U8G2_IL3820_V2_296X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { + u8g2_Setup_il3820_v2_296x128_f(&u8g2, rotation, u8x8_byte_3wire_sw_spi, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); + } +}; class U8G2_SED1330_240X128_1_6800 : public U8G2 { public: U8G2_SED1330_240X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_240x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); diff --git a/src/U8x8lib.h b/src/U8x8lib.h index e6eb1cbd..54c59613 100644 --- a/src/U8x8lib.h +++ b/src/U8x8lib.h @@ -2190,6 +2190,30 @@ class U8X8_IL3820_296X128_3W_SW_SPI : public U8X8 { u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; +class U8X8_IL3820_V2_296X128_4W_SW_SPI : public U8X8 { + public: U8X8_IL3820_V2_296X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { + u8x8_Setup(getU8x8(), u8x8_d_il3820_v2_296x128, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); + } +}; +class U8X8_IL3820_V2_296X128_4W_HW_SPI : public U8X8 { + public: U8X8_IL3820_V2_296X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { + u8x8_Setup(getU8x8(), u8x8_d_il3820_v2_296x128, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); + } +}; +class U8X8_IL3820_V2_296X128_2ND_4W_HW_SPI : public U8X8 { + public: U8X8_IL3820_V2_296X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { + u8x8_Setup(getU8x8(), u8x8_d_il3820_v2_296x128, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); + } +}; +class U8X8_IL3820_V2_296X128_3W_SW_SPI : public U8X8 { + public: U8X8_IL3820_V2_296X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { + u8x8_Setup(getU8x8(), u8x8_d_il3820_v2_296x128, u8x8_cad_011, u8x8_byte_3wire_sw_spi, u8x8_gpio_and_delay_arduino); + u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); + } +}; class U8X8_SED1330_240X128_6800 : public U8X8 { public: U8X8_SED1330_240X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sed1330_240x128, u8x8_cad_100, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); diff --git a/src/clib/u8g2.h b/src/clib/u8g2.h index 46dcec3a..e56f0d6a 100644 --- a/src/clib/u8g2.h +++ b/src/clib/u8g2.h @@ -801,8 +801,11 @@ void u8g2_Setup_ssd1607_200x200_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_ void u8g2_Setup_ssd1607_200x200_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1607_200x200_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_il3820_296x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); +void u8g2_Setup_il3820_v2_296x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_il3820_296x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); +void u8g2_Setup_il3820_v2_296x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_il3820_296x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); +void u8g2_Setup_il3820_v2_296x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1330_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1330_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1330_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); diff --git a/src/clib/u8g2_d_setup.c b/src/clib/u8g2_d_setup.c index 0b4cbd91..63f07c7f 100644 --- a/src/clib/u8g2_d_setup.c +++ b/src/clib/u8g2_d_setup.c @@ -2245,6 +2245,14 @@ void u8g2_Setup_il3820_296x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_m buf = u8g2_m_il3820_37_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } +void u8g2_Setup_il3820_v2_296x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) +{ + uint8_t tile_buf_height; + uint8_t *buf; + u8g2_SetupDisplay(u8g2, u8x8_d_il3820_v2_296x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); + buf = u8g2_m_il3820_37_1(&tile_buf_height); + u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); +} /* il3820 2 */ void u8g2_Setup_il3820_296x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { @@ -2254,6 +2262,14 @@ void u8g2_Setup_il3820_296x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_m buf = u8g2_m_il3820_37_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } +void u8g2_Setup_il3820_v2_296x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) +{ + uint8_t tile_buf_height; + uint8_t *buf; + u8g2_SetupDisplay(u8g2, u8x8_d_il3820_v2_296x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); + buf = u8g2_m_il3820_37_2(&tile_buf_height); + u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); +} /* il3820 f */ void u8g2_Setup_il3820_296x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { @@ -2263,6 +2279,14 @@ void u8g2_Setup_il3820_296x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_m buf = u8g2_m_il3820_37_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } +void u8g2_Setup_il3820_v2_296x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) +{ + uint8_t tile_buf_height; + uint8_t *buf; + u8g2_SetupDisplay(u8g2, u8x8_d_il3820_v2_296x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); + buf = u8g2_m_il3820_37_f(&tile_buf_height); + u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); +} /* sed1330 */ /* sed1330 1 */ void u8g2_Setup_sed1330_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) diff --git a/src/clib/u8x8.h b/src/clib/u8x8.h index 2c93c87f..bc3148c0 100644 --- a/src/clib/u8x8.h +++ b/src/clib/u8x8.h @@ -552,6 +552,7 @@ void u8x8_ClearLine(u8x8_t *u8x8, uint8_t line); uint8_t u8x8_cad_SendCmd(u8x8_t *u8x8, uint8_t cmd) U8X8_NOINLINE; uint8_t u8x8_cad_SendArg(u8x8_t *u8x8, uint8_t arg) U8X8_NOINLINE; +uint8_t u8x8_cad_SendMultipleArg(u8x8_t *u8x8, uint8_t cnt, uint8_t arg) U8X8_NOINLINE; uint8_t u8x8_cad_SendData(u8x8_t *u8x8, uint8_t cnt, uint8_t *data) U8X8_NOINLINE; uint8_t u8x8_cad_StartTransfer(u8x8_t *u8x8) U8X8_NOINLINE; uint8_t u8x8_cad_EndTransfer(u8x8_t *u8x8) U8X8_NOINLINE; @@ -802,6 +803,7 @@ uint8_t u8x8_d_pcf8812_96x65(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *a uint8_t u8x8_d_ssd1606_172x72(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1607_200x200(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_il3820_296x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); +uint8_t u8x8_d_il3820_v2_296x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_lc7981_160x80(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_lc7981_160x160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_lc7981_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); diff --git a/src/clib/u8x8_cad.c b/src/clib/u8x8_cad.c index eb869383..80760413 100644 --- a/src/clib/u8x8_cad.c +++ b/src/clib/u8x8_cad.c @@ -95,6 +95,16 @@ uint8_t u8x8_cad_SendArg(u8x8_t *u8x8, uint8_t arg) return u8x8->cad_cb(u8x8, U8X8_MSG_CAD_SEND_ARG, arg, NULL); } +uint8_t u8x8_cad_SendMultipleArg(u8x8_t *u8x8, uint8_t cnt, uint8_t arg) +{ + while( cnt > 0 ) + { + u8x8->cad_cb(u8x8, U8X8_MSG_CAD_SEND_ARG, arg, NULL); + cnt--; + } + return 1; +} + uint8_t u8x8_cad_SendData(u8x8_t *u8x8, uint8_t cnt, uint8_t *data) { return u8x8->cad_cb(u8x8, U8X8_MSG_CAD_SEND_DATA, cnt, data); diff --git a/src/clib/u8x8_d_il3820_296x128.c b/src/clib/u8x8_d_il3820_296x128.c index a1a0717c..17cb43bd 100644 --- a/src/clib/u8x8_d_il3820_296x128.c +++ b/src/clib/u8x8_d_il3820_296x128.c @@ -47,141 +47,268 @@ bit 1: Disable Charge Pump bit 0: Disable Clock - Disable Charge Pump and Clock require about 267ms - Enable Charge Pump and Clock require about 10ms + Disable Charge Pump and Clock require about 10ms + Enable Charge Pump and Clock require about 100 to 300ms Notes: - Introduced a refresh display message, which copies RAM to display - - Charge pump and clock are only enabled for the transfer RAM to display + - Charge pump is always enabled. Charge pump can be enabled/disabled via power save message - U8x8 will not really work because of the two buffers in the SSD1606, however U8g2 should be ok. -*/ + LUT for the 296x128 device (IL3820) + LUT (cmd: 0x032 has 30 bytes) + section 6.8 of the datasheet mentions 256 bits = 32 bytes for the LUT + chapter 7 tells 30 bytes + according to section 6.8: + 20 bytes waveform + 10 bytes timing + 1 byte named as VSH/VSL + 1 empty byte + according to the command table, the lut has 240 bits (=30 bytes * 8 bits) + + + LUT / Refresh time + total_refresh_time = (refresh_lines + dummy_lines*2)*TGate*TS_Sum/f_OSC + + f_OSC=1MHz (according to the datasheets) + refreh_lines = 296 (for the waveshare display, 0x045 cmd) + dummy_lines = 22 (for the upcoming u8g2 code, 0x03a cmd) + TGate = 62 (POR default, 0x03b cmd) + TS_Sum: Sum of all TS entries of the second part of the LUT + f_OSC: 1MHz according to the datasheet. + + so we have + + total_refresh_time = 21080*TS_Sum/1000000 = 21ms * TS_Sum + + + This file includes two devices: + u8x8_d_il3820_296x128 --> includes LUT which is probably from the WaveShare 2.9 Vendor + u8x8_d_il3820_v2_296x128 --> includes LUT which was optimized for faster speed and lesser flicker + +*/ + +/* Waveform part of the LUT (20 bytes) */ +/* bit 7/6: 1 - 1 transition */ +/* bit 5/4: 1 - 0 transition */ +/* bit 3/2: 0 - 1 transition */ +/* bit 1/0: 0 - 0 transition */ +/* 00 – VSS */ +/* 01 – VSH */ +/* 10 – VSL */ +/* 11 – NA */ + #include "u8x8.h" +/*=================================================*/ +/* common code for all devices */ -#define L(a,b,c,d) (((a)<<6)|((b)<<4)|((c)<<2)|(d)) + +static const uint8_t u8x8_d_il3820_296x128_powersave0_seq[] = { + U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ + U8X8_CA(0x22, 0xc0), /* enable clock and charge pump */ + U8X8_C(0x20), /* execute sequence */ + U8X8_DLY(200), /* according to my measures it may take up to 150ms */ + U8X8_DLY(100), /* but it might take longer */ + U8X8_END_TRANSFER(), /* disable chip */ + U8X8_END() /* end of sequence */ +}; + +static const uint8_t u8x8_d_il3820_296x128_powersave1_seq[] = { + U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ + /* disable clock and charge pump only, deep sleep is not entered, because we will loose RAM content */ + U8X8_CA(0x22, 0x02), /* only disable charge pump, HW reset seems to be required if the clock is disabled */ + U8X8_C(0x20), /* execute sequence */ + U8X8_DLY(20), + U8X8_END_TRANSFER(), /* disable chip */ + U8X8_END() /* end of sequence */ +}; + +static const uint8_t u8x8_d_il3820_296x128_flip0_seq[] = { + U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ + U8X8_END_TRANSFER(), /* disable chip */ + U8X8_END() /* end of sequence */ +}; + +static const uint8_t u8x8_d_il3820_296x128_flip1_seq[] = { + U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ + U8X8_END_TRANSFER(), /* disable chip */ + U8X8_END() /* end of sequence */ +}; + + +static const u8x8_display_info_t u8x8_il3820_296x128_display_info = +{ + /* chip_enable_level = */ 0, + /* chip_disable_level = */ 1, + + /* post_chip_enable_wait_ns = */ 120, + /* pre_chip_disable_wait_ns = */ 60, + /* reset_pulse_width_ms = */ 100, + /* post_reset_wait_ms = */ 100, + /* sda_setup_time_ns = */ 50, /* IL3820 */ + /* sck_pulse_width_ns = */ 125, /* IL3820: 125ns, clock cycle = 250ns */ + /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ + /* spi_mode = */ 2, /* active high, rising edge */ + /* i2c_bus_clock_100kHz = */ 4, + /* data_setup_time_ns = */ 40, + /* write_pulse_width_ns = */ 150, + /* tile_width = */ 37, /* 37*8 = 296 */ + /* tile_hight = */ 16, /* 16*8 = 128 */ + /* default_x_offset = */ 0, + /* flipmode_x_offset = */ 0, + /* pixel_width = */ 296, + /* pixel_height = */ 128 +}; + + +static uint8_t *u8x8_convert_tile_for_il3820(uint8_t *t) +{ + uint8_t i; + static uint8_t buf[8]; + uint8_t *pbuf = buf; + + for( i = 0; i < 8; i++ ) + { + *pbuf++ = ~(*t++); + } + return buf; +} + +static void u8x8_d_il3820_draw_tile(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) U8X8_NOINLINE; +static void u8x8_d_il3820_draw_tile(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) +{ + uint16_t x; + uint8_t c, page; + uint8_t *ptr; + u8x8_cad_StartTransfer(u8x8); + + page = u8x8->display_info->tile_height; + page --; + page -= (((u8x8_tile_t *)arg_ptr)->y_pos); + + x = ((u8x8_tile_t *)arg_ptr)->x_pos; + x *= 8; + x += u8x8->x_offset; + + //u8x8_cad_SendCmd(u8x8, 0x011 ); /* cursor increment mode */ + //u8x8_cad_SendArg(u8x8, 7); + + u8x8_cad_SendCmd(u8x8, 0x04f ); /* set cursor column */ + u8x8_cad_SendArg(u8x8, x&255); + u8x8_cad_SendArg(u8x8, x>>8); + + u8x8_cad_SendCmd(u8x8, 0x04e ); /* set cursor row */ + u8x8_cad_SendArg(u8x8, page); + + u8x8_cad_SendCmd(u8x8, 0x024 ); + + do + { + c = ((u8x8_tile_t *)arg_ptr)->cnt; + ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; + do + { + u8x8_cad_SendData(u8x8, 8, u8x8_convert_tile_for_il3820(ptr)); + ptr += 8; + x += 8; + c--; + } while( c > 0 ); + + arg_int--; + } while( arg_int > 0 ); + + u8x8_cad_EndTransfer(u8x8); +} + + + +static const uint8_t u8x8_d_il3820_exec_1000dly_seq[] = { + // assumes, that the start transfer has happend + U8X8_CA(0x22, 0x04), /* display update seq. option: pattern display */ + U8X8_C(0x20), /* execute sequence */ + U8X8_DLY(250), + U8X8_DLY(250), + U8X8_DLY(250), + U8X8_DLY(250), + U8X8_END_TRANSFER(), /* disable chip */ + U8X8_END() /* end of sequence */ +}; + +static void u8x8_d_il3820_first_init(u8x8_t *u8x8) +{ + u8x8_ClearDisplay(u8x8); + + u8x8_cad_StartTransfer(u8x8); + u8x8_cad_SendCmd(u8x8, 0x032); // program update sequence + u8x8_cad_SendMultipleArg(u8x8, 8, 0x055); // all black + u8x8_cad_SendMultipleArg(u8x8, 12, 0x0aa); // all white + u8x8_cad_SendMultipleArg(u8x8, 10, 0x022); // 830ms + u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_exec_1000dly_seq); + +} + +#ifdef OBSOLETE +static void u8x8_d_il3820_second_init(u8x8_t *u8x8) +{ + u8x8_ClearDisplay(u8x8); + + u8x8_cad_StartTransfer(u8x8); + u8x8_cad_SendCmd(u8x8, 0x032); // program update sequence + u8x8_cad_SendMultipleArg(u8x8, 20, 0x000); // do nothing + u8x8_cad_SendMultipleArg(u8x8, 10, 0x011); // 414ms dly + /* reuse sequence from above, ok some time is wasted here, */ + /* delay could be lesser */ + u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_exec_1000dly_seq); +} +#endif + + +/*=================================================*/ +/* first version, LUT from WaveShare */ /* http://www.waveshare.com/wiki/File:2.9inch_e-Paper_Module_code.7z */ static const uint8_t u8x8_d_il3820_296x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ - - - U8X8_CA(0x10, 0x00), /* Deep Sleep mode Control: Disable */ U8X8_C(0x01), U8X8_A(295 % 256), U8X8_A(295/256), U8X8_A(0), + U8X8_CA(0x03, 0x00), /* Gate Driving voltage: 15V (lowest value)*/ + U8X8_CA(0x04, 0x0a), /* Source Driving voltage: 15V (mid value and POR)*/ + //U8X8_CA(0x22, 0xc0), /* display update seq. option: enable clk, enable CP, .... todo: this is never activated */ - - /* according to the command table, the lut has 240 bits (=30 bytes * 8 bits) */ - - /* Waveform part of the LUT (20 bytes) */ - /* bit 7/6: 1 - 1 transition */ - /* bit 5/4: 1 - 0 transition */ - /* bit 3/2: 0 - 1 transition */ - /* bit 1/0: 0 - 0 transition */ - /* 00 – VSS */ - /* 01 – VSH */ - /* 10 – VSL */ - /* 11 – NA */ - -/* -LUT for the 296x128 device (IL3820) -LUT (cmd: 0x032 has 30 bytes) -section 6.8 of the datasheet mentions 256 bits = 32 bytes for the LUT -chapter 7 tells 30 bytes - -according to section 6.8: -20 bytes waveform -10 bytes timing -1 byte named as VSH/VSL -1 empty byte - -*/ -/* - static unsigned char LUTDefault_full[] = - 0x32, - 0x02,0x02,0x01,0x11,0x12, 0x12,0x22,0x22,0x66,0x69, - 0x69,0x59,0x58,0x99,0x99, 0x88,0x00,0x00,0x00,0x00, - 0xF8,0xB4,0x13,0x51,0x35, 0x51,0x51,0x19,0x01,0x00, 0x00}; - static unsigned char LUTDefault_part[] = { - 0x32, - 0x10,0x18,0x18,0x08,0x18, 0x18,0x08,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00, - 0x00,0x13,0x14,0x44,0x12, 0x00,0x00,0x00,0x00,0x00,0x00}; -*/ - -/* -0x00, 0x40, 0x04, 0xa6, 0xa8, -0x65, 0x19, 0xaa, 0x98, 0x11, -0x11, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, - -0x20, 0x26, 0x26, 0x26, 0xff, -0x0f, 0x00, 0x00, 0x00, 0x00 - -71 ticks, 1440 ms + //U8X8_CA(0x0b, 7), /* Set Delay of gate and source non overlap period, POR = 7 */ + U8X8_CA(0x2c, 0xa8), /* write vcom value*/ + U8X8_CA(0x3a, 0x16), /* dummy lines POR=22 (0x016) */ + U8X8_CA(0x3b, 0x08), /* gate time POR=0x08*/ + U8X8_CA(0x3c, 0x33), /* select boarder waveform */ + //U8X8_CA(0x22, 0xc4), /* display update seq. option: clk -> CP -> LUT -> initial display -> pattern display */ -0x00, 0x88, 0x88, 0x88, 0x98, -0x99, 0x99, 0x99, 0x11, 0x11, -0x11, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, + U8X8_CA(0x11, 0x07), /* Define data entry mode, x&y inc, x first*/ -0x20, 0x26, 0x26, 0x26, 0xff, -0x0f, 0x00, 0x00, 0x00, 0x00 -71 ticks, 1440 ms + U8X8_CAA(0x44, 0, 29), /* RAM x start & end, 32*4=128 */ + U8X8_CAAAA(0x45, 0, 0, 295&255, 295>>8), /* RAM y start & end, 0..295 */ + + //U8X8_CA(0x4e, 0), /* set x pos, 0..29? */ + //U8X8_CAA(0x4f, 0, 0), /* set y pos, 0...320??? */ -*/ -#ifdef OLD - - U8X8_C(0x32), /* write LUT register*/ - /* original values */ - U8X8_A(0x00), - U8X8_A(0x88), - U8X8_A(0x88), - U8X8_A(0x88), - U8X8_A(0x98), - - U8X8_A(0x99), - U8X8_A(0x99), - U8X8_A(0x99), - U8X8_A(0x11), - U8X8_A(0x11), - - U8X8_A(0x11), - U8X8_A(0x00), - U8X8_A(0x00), - U8X8_A(0x00), - U8X8_A(0x00), - - U8X8_A(0x00), - U8X8_A(0x00), - U8X8_A(0x00), - U8X8_A(0x00), - U8X8_A(0x00), - - /* Timing part of the LUT, 20 Phases with 4 bit each: 10 bytes */ - U8X8_A(0x20), - U8X8_A(0x26), - U8X8_A(0x26), - U8X8_A(0x26), - U8X8_A(0xff), - U8X8_A(0x0f), - - U8X8_A(0x00), - U8X8_A(0x00), - U8X8_A(0x00), - U8X8_A(0x00), -#endif - + + U8X8_END_TRANSFER(), /* disable chip */ + U8X8_END() /* end of sequence */ +}; + + +static const uint8_t u8x8_d_il3820_to_display_seq[] = { + U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* 0x50, 0xAA, 0x55, 0xAA, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -226,94 +353,7 @@ measured 1582 ms U8X8_A(0x00), U8X8_A(0x00), -#ifdef OLD - /* take the values from the 200x200 SSD1607 device, this looks better */ - U8X8_C(0x32), /* write LUT register*/ - - /* original values, L-macro */ - U8X8_A(L(0,0,0,2)), // 0x02 - U8X8_A(L(0,0,0,2)), // 0x02 - U8X8_A(L(0,0,0,1)), // 0x01 - U8X8_A(L(0,1,0,1)), // 0x11 - U8X8_A(L(0,1,0,2)), // 0x12 - U8X8_A(L(0,1,0,2)), // 0x12 - U8X8_A(L(0,2,0,2)), // 0x22 - U8X8_A(L(0,2,0,2)), // 0x22 - U8X8_A(L(1,2,1,2)), // 0x66 - U8X8_A(L(1,2,2,1)), // 0x69 - U8X8_A(L(1,2,2,1)), // 0x69 - U8X8_A(L(1,1,2,1)), // 0x59 - U8X8_A(L(1,1,2,0)), // 0x58 - U8X8_A(L(2,1,2,1)), // 0x99 - U8X8_A(L(2,1,2,1)), // 0x99 - U8X8_A(L(2,0,2,0)), // 0x88 - U8X8_A(L(0,0,0,0)), // 0x00 - U8X8_A(L(0,0,0,0)), // 0x00 - U8X8_A(L(0,0,0,0)), // 0x00 - U8X8_A(L(0,0,0,0)), // 0x00 - - /* Timing part of the LUT, 20 Phases with 4 bit each: 10 bytes */ - U8X8_A(0xF8), - U8X8_A(0xB4), - U8X8_A(0x13), - U8X8_A(0x51), - U8X8_A(0x35), - U8X8_A(0x51), - U8X8_A(0x51), - U8X8_A(0x19), - U8X8_A(0x01), - U8X8_A(0x00), - -#endif - - U8X8_CA(0x03, 0x00), /* Gate Driving voltage: 15V (lowest value)*/ - U8X8_CA(0x04, 0x0a), /* Source Driving voltage: 15V (mid value and POR)*/ - - //U8X8_CA(0x22, 0xc0), /* display update seq. option: enable clk, enable CP, .... todo: this is never activated */ - - //U8X8_CA(0x0b, 7), /* Set Delay of gate and source non overlap period, POR = 7 */ - U8X8_CA(0x2c, 0xa8), /* write vcom value*/ - U8X8_CA(0x3a, 0x16), /* dummy lines POR=22 (0x016) */ - U8X8_CA(0x3b, 0x08), /* gate time POR=0x08*/ - U8X8_CA(0x3c, 0x33), /* select boarder waveform */ - U8X8_CA(0x22, 0xc4), /* display update seq. option: clk -> CP -> LUT -> initial display -> pattern display */ - - - U8X8_CA(0x11, 0x07), /* Define data entry mode, x&y inc, x first*/ - - U8X8_CAA(0x44, 0, 29), /* RAM x start & end, 32*4=128 */ - U8X8_CAAAA(0x45, 0, 0, 295&255, 295>>8), /* RAM y start & end, 0..295 */ - - U8X8_CA(0x4e, 0), /* set x pos, 0..29? */ - U8X8_CAA(0x4f, 0, 0), /* set y pos, 0...320??? */ - - - U8X8_END_TRANSFER(), /* disable chip */ - U8X8_END() /* end of sequence */ -}; - - -/* -total_refresh_time = (refresh_lines + dummy_lines*2)*TGate*TS_Sum/f_OSC - -f_OSC=1MHz (according to the datasheets) -refreh_lines = 296 (for the waveshare display, 0x045 cmd) -dummy_lines = 22 (for the upcoming u8g2 code, 0x03a cmd) -TGate = 62 (POR default, 0x03b cmd) -TS_Sum: Sum of all TS entries of the second part of the LUT -f_OSC: 1MHz according to the datasheet. - -so we have - -total_refresh_time = 21080*TS_Sum/1000000 = 21ms * TS_Sum -*/ - -static const uint8_t u8x8_d_il3820_to_display_seq[] = { - - - U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ - - U8X8_CA(0x22, 0xc4), /* display update seq. option: clk -> CP -> LUT -> initial display -> pattern display */ + U8X8_CA(0x22, 0x04), /* display update seq. option: pattern display, assumes clk and charge pump are enabled */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(250), /* delay for 1620ms. The current sequence takes 1582ms */ @@ -324,195 +364,38 @@ static const uint8_t u8x8_d_il3820_to_display_seq[] = { U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(120), - - // 6 sep2017: removed the following code, i think the 0x020 exec cmd is missing - //U8X8_CA(0x22, 0x03), /* disable clock and charge pump */ - //U8X8_DLY(250), - //U8X8_DLY(250), - //U8X8_DLY(100), - - U8X8_END_TRANSFER(), /* disable chip */ - U8X8_END() /* end of sequence */ -}; - -static const uint8_t u8x8_d_il3820_296x128_powersave0_seq[] = { - U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ - U8X8_END_TRANSFER(), /* disable chip */ - U8X8_END() /* end of sequence */ -}; - -static const uint8_t u8x8_d_il3820_296x128_powersave1_seq[] = { - U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ - U8X8_END_TRANSFER(), /* disable chip */ - U8X8_END() /* end of sequence */ -}; - -static const uint8_t u8x8_d_il3820_296x128_flip0_seq[] = { - U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ - U8X8_END_TRANSFER(), /* disable chip */ - U8X8_END() /* end of sequence */ -}; - -static const uint8_t u8x8_d_il3820_296x128_flip1_seq[] = { - U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ + U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; -static uint8_t *u8x8_convert_tile_for_il3820(uint8_t *t) -{ - uint8_t i; - static uint8_t buf[8]; - uint8_t *pbuf = buf; - - for( i = 0; i < 8; i++ ) - { - *pbuf++ = ~(*t++); - } - return buf; -} - -static void u8x8_d_il3820_draw_tile(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) U8X8_NOINLINE; -static void u8x8_d_il3820_draw_tile(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) -{ - uint16_t x; - uint8_t c, page; - uint8_t *ptr; - u8x8_cad_StartTransfer(u8x8); - - page = u8x8->display_info->tile_height; - page --; - page -= (((u8x8_tile_t *)arg_ptr)->y_pos); - - //page = (((u8x8_tile_t *)arg_ptr)->y_pos); - - x = ((u8x8_tile_t *)arg_ptr)->x_pos; - x *= 8; - x += u8x8->x_offset; - - - - //u8x8_cad_SendCmd(u8x8, 0x00f ); /* scan start */ - //u8x8_cad_SendArg(u8x8, 0); - - //u8x8_cad_SendCmd(u8x8, 0x011 ); /* cursor increment mode */ - //u8x8_cad_SendArg(u8x8, 7); - - //u8x8_cad_SendCmd(u8x8, 0x045 ); /* window start column */ - //u8x8_cad_SendArg(u8x8, 0); - //u8x8_cad_SendArg(u8x8, 0); - //u8x8_cad_SendArg(u8x8, (296-1)&255); /* end of display */ - //u8x8_cad_SendArg(u8x8, (296-1)>>8); - - //u8x8_cad_SendCmd(u8x8, 0x044 ); /* window end page */ - //u8x8_cad_SendArg(u8x8, page); - //u8x8_cad_SendArg(u8x8, page+1); - - u8x8_cad_SendCmd(u8x8, 0x04f ); /* set cursor column */ - u8x8_cad_SendArg(u8x8, x&255); - u8x8_cad_SendArg(u8x8, x>>8); - - u8x8_cad_SendCmd(u8x8, 0x04e ); /* set cursor row */ - u8x8_cad_SendArg(u8x8, page); - - u8x8_cad_SendCmd(u8x8, 0x024 ); - - do - { - c = ((u8x8_tile_t *)arg_ptr)->cnt; - ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; - do - { - u8x8_cad_SendData(u8x8, 8, u8x8_convert_tile_for_il3820(ptr)); - ptr += 8; - x += 8; - c--; - } while( c > 0 ); - - arg_int--; - } while( arg_int > 0 ); - - u8x8_cad_EndTransfer(u8x8); -} - - -static uint8_t u8x8_d_il3820_296x128_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) +uint8_t u8x8_d_il3820_296x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { - /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_il3820_296x128_display_info); break; - */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_init_seq); - //u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_to_display_seq); - //for(;;) - //; - -#ifdef NOT_USED - /* STRATEGY FOR SSD1606 */ - /* special code for the SSD1606... */ - /* ensure that the initial buffer is clear and all eInk is set to white */ - /* this is done here, because the LUT will be of that kind, that it uses the previous color */ - /* make everything black */ - u8x8_FillDisplay(u8x8); - /* write content to the display */ - u8x8_RefreshDisplay(u8x8); - /* now make everything clear */ - u8x8_FillDisplay(u8x8); - /* write content to the display */ - u8x8_RefreshDisplay(u8x8); - /* now make everything clear */ - u8x8_ClearDisplay(u8x8); - /* write content to the display */ - u8x8_RefreshDisplay(u8x8); -#endif + u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_powersave0_seq); + u8x8_d_il3820_first_init(u8x8); - u8x8_ClearDisplay(u8x8); - /* write content to the display */ - u8x8_RefreshDisplay(u8x8); - /* another update to ensure, that the buffers are cleared */ - u8x8_ClearDisplay(u8x8); - /* write content to the display */ - u8x8_RefreshDisplay(u8x8); + /* usually the DISPLAY_INIT message leaves the display in power save state */ + /* however this is not done for e-paper devices, see: */ + /* https://github.com/olikraus/u8g2/wiki/internal#powersave-mode */ break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: -/* if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_powersave1_seq); -*/ break; - case U8X8_MSG_DISPLAY_SET_FLIP_MODE: -/* - if ( arg_int == 0 ) - { - u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_flip0_seq); - u8x8->x_offset = u8x8->display_info->default_x_offset; - } - else - { - u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_flip1_seq); - u8x8->x_offset = u8x8->display_info->flipmode_x_offset; - } -*/ - break; -#ifdef U8X8_WITH_SET_CONTRAST -/* - case U8X8_MSG_DISPLAY_SET_CONTRAST: - u8x8_cad_StartTransfer(u8x8); - u8x8_cad_EndTransfer(u8x8); -*/ - break; -#endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_d_il3820_draw_tile(u8x8, arg_int, arg_ptr); break; @@ -525,39 +408,145 @@ static uint8_t u8x8_d_il3820_296x128_generic(u8x8_t *u8x8, uint8_t msg, uint8_t return 1; } +/*=================================================*/ +/* second version for the IL3820 display */ -static const u8x8_display_info_t u8x8_il3820_296x128_display_info = -{ - /* chip_enable_level = */ 0, - /* chip_disable_level = */ 1, + +/* http://www.waveshare.com/wiki/File:2.9inch_e-Paper_Module_code.7z */ +static const uint8_t u8x8_d_il3820_v2_296x128_init_seq[] = { + + U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ + + // U8X8_CA(0x10, 0x00), /* Deep Sleep mode Control: POR: Normal mode */ + U8X8_C(0x01), + U8X8_A(295 % 256), U8X8_A(295/256), U8X8_A(0), - /* post_chip_enable_wait_ns = */ 120, - /* pre_chip_disable_wait_ns = */ 60, - /* reset_pulse_width_ms = */ 100, - /* post_reset_wait_ms = */ 100, - /* sda_setup_time_ns = */ 50, /* IL3820 */ - /* sck_pulse_width_ns = */ 125, /* IL3820: 125ns, clock cycle = 250ns */ - /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ - /* spi_mode = */ 2, /* active high, rising edge */ - /* i2c_bus_clock_100kHz = */ 4, - /* data_setup_time_ns = */ 40, - /* write_pulse_width_ns = */ 150, - /* tile_width = */ 37, /* 37*8 = 296 */ - /* tile_hight = */ 16, /* 16*8 = 128 */ - /* default_x_offset = */ 0, - /* flipmode_x_offset = */ 0, - /* pixel_width = */ 296, - /* pixel_height = */ 128 + /* the driving voltagesmust not be that high, in order to aviod level change after */ + /* some seconds (which happens with 0xea */ + U8X8_CA(0x03, 0x75), /* Gate Driving voltage: +/-15V =0x00 POR (+22/-20V) = 0x0ea*/ + U8X8_CA(0x04, 0x0a), /* Source Driving voltage: (POR=0x0a=15V), max=0x0e*/ + + U8X8_CA(0x0b, 7), /* Set Delay of gate and source non overlap period, POR = 7 */ + U8X8_CA(0x2c, 0xa8), /* write vcom value*/ + U8X8_CA(0x3a, 0x16), /* dummy lines POR=22 (0x016) */ + U8X8_CA(0x3b, 0x08), /* gate time POR=0x08*/ + U8X8_CA(0x3c, 0x33), /* select boarder waveform */ + + U8X8_CA(0x11, 0x07), /* Define data entry mode, x&y inc, x first*/ + U8X8_CAA(0x44, 0, 29), /* RAM x start & end, 32*4=128 */ + U8X8_CAAAA(0x45, 0, 0, 295&255, 295>>8), /* RAM y start & end, 0..295 */ + + U8X8_END_TRANSFER(), /* disable chip */ + U8X8_END() /* end of sequence */ }; -uint8_t u8x8_d_il3820_296x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) + +static const uint8_t u8x8_d_il3820_v2_to_display_seq[] = { + U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ + +/* +0xaa, 0x09, 0x09, 0x19, 0x19, +0x11, 0x11, 0x11, 0x11, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, + +0x75, 0x77, 0x77, 0x77, 0x07, +0x00, 0x00, 0x00, 0x00, 0x00 +measured 1240 ms +*/ + U8X8_C(0x32), /* write LUT register*/ + /* https://github.com/olikraus/u8g2/issues/347 */ + U8X8_A(0xaa), + U8X8_A(0x09), + U8X8_A(0x09), + U8X8_A(0x19), + U8X8_A(0x19), + + U8X8_A(0x11), + U8X8_A(0x11), + U8X8_A(0x11), + U8X8_A(0x11), + U8X8_A(0x00), + + U8X8_A(0x00), + U8X8_A(0x00), + U8X8_A(0x00), + U8X8_A(0x00), + U8X8_A(0x00), + + U8X8_A(0x00), + U8X8_A(0x00), + U8X8_A(0x00), + U8X8_A(0x00), + U8X8_A(0x00), + + /* Timing part of the LUT, 20 Phases with 4 bit each: 10 bytes */ + U8X8_A(0x75), + U8X8_A(0x77), + U8X8_A(0x77), + U8X8_A(0x77), + U8X8_A(0x07), + + U8X8_A(0x00), + U8X8_A(0x00), + U8X8_A(0x00), + U8X8_A(0x00), + U8X8_A(0x00), + + U8X8_CA(0x22, 0x04), /* display update seq. option: pattern display */ + U8X8_C(0x20), /* execute sequence */ + + U8X8_DLY(250), /* delay for 1300ms. The current sequence takes 1240ms */ + U8X8_DLY(250), + U8X8_DLY(250), + U8X8_DLY(250), + + U8X8_DLY(250), + U8X8_DLY(50), + + U8X8_END_TRANSFER(), /* disable chip */ + U8X8_END() /* end of sequence */ +}; + +uint8_t u8x8_d_il3820_v2_296x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { - if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) - { + switch(msg) + { + case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_il3820_296x128_display_info); - return 1; - } - return u8x8_d_il3820_296x128_generic(u8x8, msg, arg_int, arg_ptr); + break; + case U8X8_MSG_DISPLAY_INIT: + + u8x8_d_helper_display_init(u8x8); + + u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_v2_296x128_init_seq); + + u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_powersave0_seq); + u8x8_d_il3820_first_init(u8x8); + /* u8x8_d_il3820_second_init(u8x8); */ /* not required, u8g2.begin() will also clear the display once more */ + + /* usually the DISPLAY_INIT message leaves the display in power save state */ + /* however this is not done for e-paper devices, see: */ + /* https://github.com/olikraus/u8g2/wiki/internal#powersave-mode */ + + break; + case U8X8_MSG_DISPLAY_SET_POWER_SAVE: + if ( arg_int == 0 ) + u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_powersave0_seq); + else + u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_powersave1_seq); + break; + case U8X8_MSG_DISPLAY_DRAW_TILE: + u8x8_d_il3820_draw_tile(u8x8, arg_int, arg_ptr); + break; + case U8X8_MSG_DISPLAY_REFRESH: + u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_v2_to_display_seq); + break; + default: + return 0; + } + return 1; } +