This commit is contained in:
ladyada 2025-07-08 19:11:40 -04:00
parent f418a1dcf7
commit cd1d48f3fd
13 changed files with 269 additions and 229 deletions

View file

@ -226,7 +226,7 @@ void Adafruit_EPD::drawPixel(int16_t x, int16_t y, uint16_t color) {
return;
uint8_t *black_pBuf, *color_pBuf;
//Serial.printf("(%d, %d) -> ", x, y);
// Serial.printf("(%d, %d) -> ", x, y);
// check rotation, move pixel around if necessary
switch (getRotation()) {
@ -249,16 +249,16 @@ void Adafruit_EPD::drawPixel(int16_t x, int16_t y, uint16_t color) {
if (_HEIGHT % 8 != 0) {
_HEIGHT += 8 - (_HEIGHT % 8);
}
//Serial.printf("(%d, %d) : ", x, y);
// Serial.printf("(%d, %d) : ", x, y);
uint16_t addr;
if (_data_entry_mode == THINKING_UC8179) {
addr = ((uint32_t)(HEIGHT - 1 - y) * (uint32_t)WIDTH + x) / 8;
} else { // THINKINK_STANDARD default!
addr = ((uint32_t)(WIDTH - 1 - x) * (uint32_t)_HEIGHT + y) / 8;
addr = ((uint32_t)(WIDTH - 1 - x) * (uint32_t)_HEIGHT + y) / 8;
}
uint8_t black_c, color_c;
//Serial.printf("0x%0x\n\r",addr);
// Serial.printf("0x%0x\n\r",addr);
if (use_sram) {
black_c = sram.read8(blackbuffer_addr + addr);

View file

@ -26,8 +26,8 @@
#include "panels/ThinkInk_270_Grayscale4_W3.h"
#include "panels/ThinkInk_270_Tricolor_C44.h"
#include "panels/ThinkInk_270_Tricolor_Z70.h"
#include "panels/ThinkInk_290_Grayscale4_T5.h"
#include "panels/ThinkInk_290_Grayscale4_EAAMFGN.h"
#include "panels/ThinkInk_290_Grayscale4_T5.h"
#include "panels/ThinkInk_290_Mono_BN.h"
#include "panels/ThinkInk_290_Mono_M06.h"
#include "panels/ThinkInk_290_Tricolor_RH.h"
@ -36,13 +36,13 @@
#include "panels/ThinkInk_290_Tricolor_Z94.h"
#include "panels/ThinkInk_370_Mono_BAAMFGN.h"
#include "panels/ThinkInk_370_Tricolor_BABMFGNR.h"
#include "panels/ThinkInk_420_Grayscale4_MFGN.h"
#include "panels/ThinkInk_420_Grayscale4_T2.h"
#include "panels/ThinkInk_420_Mono_BN.h"
#include "panels/ThinkInk_420_Mono_M06.h"
#include "panels/ThinkInk_420_Grayscale4_MFGN.h"
#include "panels/ThinkInk_420_Tricolor_MFGNR.h"
#include "panels/ThinkInk_420_Tricolor_RW.h"
#include "panels/ThinkInk_420_Tricolor_Z21.h"
#include "panels/ThinkInk_420_Tricolor_MFGNR.h"
#include "panels/ThinkInk_583_Mono_AAAMFGN.h"
#include "panels/ThinkInk_583_Tricolor_AABMFGNR.h"
#include "panels/ThinkInk_750_Tricolor_AABMFGNR.h"

View file

@ -28,7 +28,7 @@
#define SSD1683_DISP_CTRL2 0x22
#define SSD1683_WRITE_RAM1 0x24
#define SSD1683_WRITE_RAM2 0x26
#define SSD1683_READ_RAM1 0x27
#define SSD1683_READ_RAM1 0x27
#define SSD1683_SENSE_VCOM 0x28
#define SSD1683_SENSEDUR_VCOM 0x29
#define SSD1683_PROGOTP_VCOM 0x2A

View file

@ -263,7 +263,7 @@ void Adafruit_UC8151D::displayPartial(uint16_t x1, uint16_t y1, uint16_t x2,
buf[2] = y1 >> 8;
buf[3] = y1 & 0xFF;
buf[4] = (y2) >> 8;
buf[5] = (y2) & 0xFF;
buf[5] = (y2)&0xFF;
buf[6] = 0x28;
EPD_command(UC8151D_PTL, buf, 7); // resolution setting

View file

@ -174,13 +174,13 @@ void Adafruit_UC8179::powerUp() {
init_code = _epd_init_code;
}
EPD_commandList(init_code);
// Set display size
uint8_t buf[4];
buf[0] = WIDTH >> 8;
buf[1] = WIDTH & 0xFF;
buf[2] = HEIGHT >> 8;
buf[3] = HEIGHT & 0xFF;
buf[3] = HEIGHT & 0xFF;
Serial.printf("W %d H %d\n\r", WIDTH, HEIGHT);
EPD_command(UC8179_TRES, buf, 4);
}

View file

@ -97,15 +97,15 @@ static const uint8_t ti_290mfgn_gray4_lut_code[] = {
class ThinkInk_290_Grayscale4_EAAMFGN : public Adafruit_SSD1680 {
public:
ThinkInk_290_Grayscale4_EAAMFGN(int16_t SID, int16_t SCLK, int16_t DC,
int16_t RST, int16_t CS, int16_t SRCS,
int16_t MISO, int16_t BUSY = -1)
: Adafruit_SSD1680(296, 128, SID, SCLK, DC, RST, CS, SRCS, MISO, BUSY){};
ThinkInk_290_Grayscale4_EAAMFGN(int16_t DC, int16_t RST, int16_t CS,
int16_t SRCS, int16_t BUSY = -1,
SPIClass* spi = &SPI)
: Adafruit_SSD1680(296, 128, DC, RST, CS, SRCS, BUSY, spi){};
ThinkInk_290_Grayscale4_EAAMFGN(int16_t SID, int16_t SCLK, int16_t DC,
int16_t RST, int16_t CS, int16_t SRCS,
int16_t MISO, int16_t BUSY = -1)
: Adafruit_SSD1680(296, 128, SID, SCLK, DC, RST, CS, SRCS, MISO, BUSY){};
ThinkInk_290_Grayscale4_EAAMFGN(int16_t DC, int16_t RST, int16_t CS,
int16_t SRCS, int16_t BUSY = -1,
SPIClass* spi = &SPI)
: Adafruit_SSD1680(296, 128, DC, RST, CS, SRCS, BUSY, spi){};
void begin(thinkinkmode_t mode = THINKINK_GRAYSCALE4) {
Adafruit_SSD1680::begin(true);

View file

@ -4,23 +4,28 @@
// This file is #included by Adafruit_ThinkInk.h and does not need to
// #include anything else to pick up the EPD header or ink mode enum.
const uint8_t uc8253_mono_init_code[] {
UC8253_POWERON, 0, // soft reset
0xFF, 50, // busy wait
UC8253_VCOM_CDI, 1, 0x97,
UC8253_PANELSETTING, 2, 0b11011111, 0x8D,
0xFE};
const uint8_t uc8253_mono_init_code[]{UC8253_POWERON,
0, // soft reset
0xFF,
50, // busy wait
UC8253_VCOM_CDI,
1,
0x97,
UC8253_PANELSETTING,
2,
0b11011111,
0x8D,
0xFE};
class ThinkInk_370_Mono_BAAMFGN : public Adafruit_UC8253 {
public:
ThinkInk_370_Mono_BAAMFGN(int16_t SID, int16_t SCLK, int16_t DC,
int16_t RST, int16_t CS, int16_t SRCS,
int16_t MISO, int16_t BUSY = -1)
: Adafruit_UC8253(416, 240, SID, SCLK, DC, RST, CS, SRCS, MISO, BUSY){};
ThinkInk_370_Mono_BAAMFGN(int16_t SID, int16_t SCLK, int16_t DC, int16_t RST,
int16_t CS, int16_t SRCS, int16_t MISO,
int16_t BUSY = -1)
: Adafruit_UC8253(416, 240, SID, SCLK, DC, RST, CS, SRCS, MISO, BUSY){};
ThinkInk_370_Mono_BAAMFGN(int16_t DC, int16_t RST, int16_t CS,
int16_t SRCS, int16_t BUSY = -1,
SPIClass* spi = &SPI)
ThinkInk_370_Mono_BAAMFGN(int16_t DC, int16_t RST, int16_t CS, int16_t SRCS,
int16_t BUSY = -1, SPIClass* spi = &SPI)
: Adafruit_UC8253(416, 240, DC, RST, CS, SRCS, BUSY, spi){};
void begin(thinkinkmode_t mode = THINKINK_MONO) {

View file

@ -4,21 +4,25 @@
// This file is #included by Adafruit_ThinkInk.h and does not need to
// #include anything else to pick up the EPD header or ink mode enum.
const uint8_t uc8253_tricolor_init_code[] {
UC8253_POWERON, 0, // soft reset
0xFF, 50, // busy wait
UC8253_PANELSETTING, 2, 0b11001111, 0x8D,
0xFE};
const uint8_t uc8253_tricolor_init_code[]{UC8253_POWERON,
0, // soft reset
0xFF,
50, // busy wait
UC8253_PANELSETTING,
2,
0b11001111,
0x8D,
0xFE};
class ThinkInk_370_Tricolor_BABMFGNR : public Adafruit_UC8253 {
public:
ThinkInk_370_Tricolor_BABMFGNR(int16_t SID, int16_t SCLK, int16_t DC,
int16_t RST, int16_t CS, int16_t SRCS,
ThinkInk_370_Tricolor_BABMFGNR(int16_t SID, int16_t SCLK, int16_t DC,
int16_t RST, int16_t CS, int16_t SRCS,
int16_t MISO, int16_t BUSY = -1)
: Adafruit_UC8253(416, 240, SID, SCLK, DC, RST, CS, SRCS, MISO, BUSY){};
: Adafruit_UC8253(416, 240, SID, SCLK, DC, RST, CS, SRCS, MISO, BUSY){};
ThinkInk_370_Tricolor_BABMFGNR(int16_t DC, int16_t RST, int16_t CS,
int16_t SRCS, int16_t BUSY = -1,
ThinkInk_370_Tricolor_BABMFGNR(int16_t DC, int16_t RST, int16_t CS,
int16_t SRCS, int16_t BUSY = -1,
SPIClass* spi = &SPI)
: Adafruit_UC8253(416, 240, DC, RST, CS, SRCS, BUSY, spi){};

View file

@ -4,99 +4,108 @@
// This file is #included by Adafruit_ThinkInk.h and does not need to
// #include anything else to pick up the EPD header or ink mode enum.
static const uint8_t ti_420mfgn_monofull_init_code[] {
SSD1683_SW_RESET, 0, // 0x12 - Software reset
0xFF, 50, // Wait for busy (20ms delay)
SSD1683_DISP_CTRL1, 2, // 0x21 - Display update control
0x40, // Display update control 1
0x00, // Display update control 2
SSD1683_WRITE_BORDER, 1, // 0x3C - Border waveform control
0x05, // Border color/waveform
SSD1683_DATA_MODE, 1, // 0x11 - Data entry mode
0x03, // Y decrement, X increment
0xFE // End of initialization
static const uint8_t ti_420mfgn_monofull_init_code[]{
SSD1683_SW_RESET,
0, // 0x12 - Software reset
0xFF,
50, // Wait for busy (20ms delay)
SSD1683_DISP_CTRL1,
2, // 0x21 - Display update control
0x40, // Display update control 1
0x00, // Display update control 2
SSD1683_WRITE_BORDER,
1, // 0x3C - Border waveform control
0x05, // Border color/waveform
SSD1683_DATA_MODE,
1, // 0x11 - Data entry mode
0x03, // Y decrement, X increment
0xFE // End of initialization
};
static const uint8_t ti_420mfgn_gray4_init_code[] {
SSD1683_SW_RESET, 0, // 0x12 - Software reset
0xFF, 50, // Wait for busy (20ms delay)
static const uint8_t ti_420mfgn_gray4_init_code[]{
SSD1683_SW_RESET,
0, // 0x12 - Software reset
0xFF,
50, // Wait for busy (20ms delay)
SSD1683_DISP_CTRL1, 2, // 0x21 - Display update control
0x00, // Display update control 1
0x00, // Display update control 2
SSD1683_DISP_CTRL1,
2, // 0x21 - Display update control
0x00, // Display update control 1
0x00, // Display update control 2
SSD1683_WRITE_BORDER, 1, // 0x3C - Border waveform control
0x03, // Border color/waveform
SSD1683_WRITE_BORDER,
1, // 0x3C - Border waveform control
0x03, // Border color/waveform
SSD1683_BOOST_SOFTSTART, 4,
0x8B, 0x9C, 0xA4, 0x0F,
SSD1683_DATA_MODE, 1, // 0x11 - Data entry mode
0x03, // Y decrement, X increment
SSD1683_END_OPTION, 1, 0x07, // LUT[227]
SSD1683_GATE_VOLTAGE, 1, 0x17,
SSD1683_SOURCE_VOLTAGE, 3, 0x41, 0xA8, 0x32, // LUT[229~231]
SSD1683_WRITE_VCOM, 1, 0x30, // LUT[232]
0xFE // End of initialization
SSD1683_BOOST_SOFTSTART,
4,
0x8B,
0x9C,
0xA4,
0x0F,
SSD1683_DATA_MODE,
1, // 0x11 - Data entry mode
0x03, // Y decrement, X increment
SSD1683_END_OPTION,
1,
0x07, // LUT[227]
SSD1683_GATE_VOLTAGE,
1,
0x17,
SSD1683_SOURCE_VOLTAGE,
3,
0x41,
0xA8,
0x32, // LUT[229~231]
SSD1683_WRITE_VCOM,
1,
0x30, // LUT[232]
0xFE // End of initialization
};
static const uint8_t ti_420mfgn_gray4_lut_code[] = {
0x32, 227,
0x01, 0x0A, 0x1B, 0x0F, 0x03, 0x01, 0x01,
0x05, 0x0A, 0x01, 0x0A, 0x01, 0x01, 0x01,
0x05, 0x08, 0x03, 0x02, 0x04, 0x01, 0x01,
0x01, 0x04, 0x04, 0x02, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x0A, 0x1B, 0x0F, 0x03, 0x01, 0x01,
0x05, 0x4A, 0x01, 0x8A, 0x01, 0x01, 0x01,
0x05, 0x48, 0x03, 0x82, 0x84, 0x01, 0x01,
0x01, 0x84, 0x84, 0x82, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x0A, 0x1B, 0x8F, 0x03, 0x01, 0x01,
0x05, 0x4A, 0x01, 0x8A, 0x01, 0x01, 0x01,
0x05, 0x48, 0x83, 0x82, 0x04, 0x01, 0x01,
0x01, 0x04, 0x04, 0x02, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x8A, 0x1B, 0x8F, 0x03, 0x01, 0x01,
0x05, 0x4A, 0x01, 0x8A, 0x01, 0x01, 0x01,
0x05, 0x48, 0x83, 0x02, 0x04, 0x01, 0x01,
0x01, 0x04, 0x04, 0x02, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x8A, 0x9B, 0x8F, 0x03, 0x01, 0x01,
0x05, 0x4A, 0x01, 0x8A, 0x01, 0x01, 0x01,
0x05, 0x48, 0x03, 0x42, 0x04, 0x01, 0x01,
0x01, 0x04, 0x04, 0x42, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00,
0xFE // EOM
0x32, 227, 0x01, 0x0A, 0x1B, 0x0F, 0x03, 0x01, 0x01, 0x05, 0x0A, 0x01,
0x0A, 0x01, 0x01, 0x01, 0x05, 0x08, 0x03, 0x02, 0x04, 0x01, 0x01, 0x01,
0x04, 0x04, 0x02, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x0A, 0x1B, 0x0F,
0x03, 0x01, 0x01, 0x05, 0x4A, 0x01, 0x8A, 0x01, 0x01, 0x01, 0x05, 0x48,
0x03, 0x82, 0x84, 0x01, 0x01, 0x01, 0x84, 0x84, 0x82, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
0x01, 0x01, 0x01, 0x0A, 0x1B, 0x8F, 0x03, 0x01, 0x01, 0x05, 0x4A, 0x01,
0x8A, 0x01, 0x01, 0x01, 0x05, 0x48, 0x83, 0x82, 0x04, 0x01, 0x01, 0x01,
0x04, 0x04, 0x02, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x8A, 0x1B, 0x8F,
0x03, 0x01, 0x01, 0x05, 0x4A, 0x01, 0x8A, 0x01, 0x01, 0x01, 0x05, 0x48,
0x83, 0x02, 0x04, 0x01, 0x01, 0x01, 0x04, 0x04, 0x02, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
0x01, 0x01, 0x01, 0x8A, 0x9B, 0x8F, 0x03, 0x01, 0x01, 0x05, 0x4A, 0x01,
0x8A, 0x01, 0x01, 0x01, 0x05, 0x48, 0x03, 0x42, 0x04, 0x01, 0x01, 0x01,
0x04, 0x04, 0x42, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
0x00,
0xFE // EOM
};
class ThinkInk_420_Grayscale4_MFGN : public Adafruit_SSD1683 {
public:
ThinkInk_420_Grayscale4_MFGN(int16_t SID, int16_t SCLK, int16_t DC, int16_t RST,
int16_t CS, int16_t SRCS, int16_t MISO,
int16_t BUSY = -1)
ThinkInk_420_Grayscale4_MFGN(int16_t SID, int16_t SCLK, int16_t DC,
int16_t RST, int16_t CS, int16_t SRCS,
int16_t MISO, int16_t BUSY = -1)
: Adafruit_SSD1683(300, 400, SID, SCLK, DC, RST, CS, SRCS, MISO, BUSY){};
ThinkInk_420_Grayscale4_MFGN(int16_t DC, int16_t RST, int16_t CS, int16_t SRCS,
int16_t BUSY = -1, SPIClass* spi = &SPI)
ThinkInk_420_Grayscale4_MFGN(int16_t DC, int16_t RST, int16_t CS,
int16_t SRCS, int16_t BUSY = -1,
SPIClass* spi = &SPI)
: Adafruit_SSD1683(300, 400, DC, RST, CS, SRCS, BUSY, spi){};
void begin(thinkinkmode_t mode = THINKINK_MONO) {
Adafruit_SSD1683::begin(true);
inkmode = mode; // Preserve ink mode for ImageReader or others
@ -105,7 +114,7 @@ class ThinkInk_420_Grayscale4_MFGN : public Adafruit_SSD1683 {
setBlackBuffer(0, true); // layer 1 uninverted
_epd_init_code = ti_420mfgn_gray4_init_code;
_epd_lut_code = ti_420mfgn_gray4_lut_code;
_epd_lut_code = ti_420mfgn_gray4_lut_code;
layer_colors[EPD_WHITE] = 0b00;
layer_colors[EPD_BLACK] = 0b11;
@ -127,8 +136,8 @@ class ThinkInk_420_Grayscale4_MFGN : public Adafruit_SSD1683 {
layer_colors[EPD_GRAY] = 0b01;
layer_colors[EPD_LIGHT] = 0b00;
layer_colors[EPD_DARK] = 0b01;
_display_update_val = 0xF7;
_display_update_val = 0xF7;
}
setRotation(1);
default_refresh_delay = 1000;

View file

@ -4,97 +4,106 @@
// This file is #included by Adafruit_ThinkInk.h and does not need to
// #include anything else to pick up the EPD header or ink mode enum.
static const uint8_t ti_420mfgnr_tri_init_code[] {
SSD1683_SW_RESET, 0, // 0x12 - Software reset
0xFF, 50, // Wait for busy (20ms delay)
static const uint8_t ti_420mfgnr_tri_init_code[]{
SSD1683_SW_RESET,
0, // 0x12 - Software reset
0xFF,
50, // Wait for busy (20ms delay)
SSD1683_WRITE_BORDER, 1, // 0x3C - Border waveform control
0x05, // Border color/waveform
SSD1683_WRITE_BORDER,
1, // 0x3C - Border waveform control
0x05, // Border color/waveform
SSD1683_TEMP_CONTROL, 1, 0x80, // 0x18 read temp
SSD1683_DATA_MODE, 1, // 0x11 - Data entry mode
0x03, // Y decrement, X increment
SSD1683_TEMP_CONTROL,
1,
0x80, // 0x18 read temp
0xFE // End of initialization
SSD1683_DATA_MODE,
1, // 0x11 - Data entry mode
0x03, // Y decrement, X increment
0xFE // End of initialization
};
static const uint8_t ti_420mfgnr_gray4_init_code[] {
SSD1683_SW_RESET, 0, // 0x12 - Software reset
0xFF, 50, // Wait for busy (20ms delay)
static const uint8_t ti_420mfgnr_gray4_init_code[]{
SSD1683_SW_RESET,
0, // 0x12 - Software reset
0xFF,
50, // Wait for busy (20ms delay)
SSD1683_DISP_CTRL1, 2, // 0x21 - Display update control
0x00, // Display update control 1
0x00, // Display update control 2
SSD1683_DISP_CTRL1,
2, // 0x21 - Display update control
0x00, // Display update control 1
0x00, // Display update control 2
SSD1683_WRITE_BORDER, 1, // 0x3C - Border waveform control
0x03, // Border color/waveform
SSD1683_WRITE_BORDER,
1, // 0x3C - Border waveform control
0x03, // Border color/waveform
SSD1683_BOOST_SOFTSTART, 4,
0x8B, 0x9C, 0xA4, 0x0F,
SSD1683_DATA_MODE, 1, // 0x11 - Data entry mode
0x03, // Y decrement, X increment
SSD1683_END_OPTION, 1, 0x07, // LUT[227]
SSD1683_GATE_VOLTAGE, 1, 0x17,
SSD1683_SOURCE_VOLTAGE, 3, 0x41, 0xA8, 0x32, // LUT[229~231]
SSD1683_WRITE_VCOM, 1, 0x30, // LUT[232]
0xFE // End of initialization
SSD1683_BOOST_SOFTSTART,
4,
0x8B,
0x9C,
0xA4,
0x0F,
SSD1683_DATA_MODE,
1, // 0x11 - Data entry mode
0x03, // Y decrement, X increment
SSD1683_END_OPTION,
1,
0x07, // LUT[227]
SSD1683_GATE_VOLTAGE,
1,
0x17,
SSD1683_SOURCE_VOLTAGE,
3,
0x41,
0xA8,
0x32, // LUT[229~231]
SSD1683_WRITE_VCOM,
1,
0x30, // LUT[232]
0xFE // End of initialization
};
static const uint8_t ti_420mfgnr_gray4_lut_code[] = {
0x32, 227,
0x01, 0x0A, 0x1B, 0x0F, 0x03, 0x01, 0x01,
0x05, 0x0A, 0x01, 0x0A, 0x01, 0x01, 0x01,
0x05, 0x08, 0x03, 0x02, 0x04, 0x01, 0x01,
0x01, 0x04, 0x04, 0x02, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x0A, 0x1B, 0x0F, 0x03, 0x01, 0x01,
0x05, 0x4A, 0x01, 0x8A, 0x01, 0x01, 0x01,
0x05, 0x48, 0x03, 0x82, 0x84, 0x01, 0x01,
0x01, 0x84, 0x84, 0x82, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x0A, 0x1B, 0x8F, 0x03, 0x01, 0x01,
0x05, 0x4A, 0x01, 0x8A, 0x01, 0x01, 0x01,
0x05, 0x48, 0x83, 0x82, 0x04, 0x01, 0x01,
0x01, 0x04, 0x04, 0x02, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x8A, 0x1B, 0x8F, 0x03, 0x01, 0x01,
0x05, 0x4A, 0x01, 0x8A, 0x01, 0x01, 0x01,
0x05, 0x48, 0x83, 0x02, 0x04, 0x01, 0x01,
0x01, 0x04, 0x04, 0x02, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x8A, 0x9B, 0x8F, 0x03, 0x01, 0x01,
0x05, 0x4A, 0x01, 0x8A, 0x01, 0x01, 0x01,
0x05, 0x48, 0x03, 0x42, 0x04, 0x01, 0x01,
0x01, 0x04, 0x04, 0x42, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00,
0xFE // EOM
0x32, 227, 0x01, 0x0A, 0x1B, 0x0F, 0x03, 0x01, 0x01, 0x05, 0x0A, 0x01,
0x0A, 0x01, 0x01, 0x01, 0x05, 0x08, 0x03, 0x02, 0x04, 0x01, 0x01, 0x01,
0x04, 0x04, 0x02, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x0A, 0x1B, 0x0F,
0x03, 0x01, 0x01, 0x05, 0x4A, 0x01, 0x8A, 0x01, 0x01, 0x01, 0x05, 0x48,
0x03, 0x82, 0x84, 0x01, 0x01, 0x01, 0x84, 0x84, 0x82, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
0x01, 0x01, 0x01, 0x0A, 0x1B, 0x8F, 0x03, 0x01, 0x01, 0x05, 0x4A, 0x01,
0x8A, 0x01, 0x01, 0x01, 0x05, 0x48, 0x83, 0x82, 0x04, 0x01, 0x01, 0x01,
0x04, 0x04, 0x02, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x8A, 0x1B, 0x8F,
0x03, 0x01, 0x01, 0x05, 0x4A, 0x01, 0x8A, 0x01, 0x01, 0x01, 0x05, 0x48,
0x83, 0x02, 0x04, 0x01, 0x01, 0x01, 0x04, 0x04, 0x02, 0x00, 0x01, 0x01,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
0x01, 0x01, 0x01, 0x8A, 0x9B, 0x8F, 0x03, 0x01, 0x01, 0x05, 0x4A, 0x01,
0x8A, 0x01, 0x01, 0x01, 0x05, 0x48, 0x03, 0x42, 0x04, 0x01, 0x01, 0x01,
0x04, 0x04, 0x42, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
0x00,
0xFE // EOM
};
class ThinkInk_420_Mono_MFGNR : public Adafruit_SSD1683 {
public:
ThinkInk_420_Mono_MFGNR(int16_t SID, int16_t SCLK, int16_t DC, int16_t RST,
int16_t CS, int16_t SRCS, int16_t MISO,
int16_t BUSY = -1)
int16_t CS, int16_t SRCS, int16_t MISO,
int16_t BUSY = -1)
: Adafruit_SSD1683(300, 400, SID, SCLK, DC, RST, CS, SRCS, MISO, BUSY){};
ThinkInk_420_Mono_MFGNR(int16_t DC, int16_t RST, int16_t CS, int16_t SRCS,
int16_t BUSY = -1, SPIClass* spi = &SPI)
int16_t BUSY = -1, SPIClass* spi = &SPI)
: Adafruit_SSD1683(300, 400, DC, RST, CS, SRCS, BUSY, spi){};
void begin(thinkinkmode_t mode = THINKINK_TRICOLOR) {
Adafruit_SSD1683::begin(true);
inkmode = mode; // Preserve ink mode for ImageReader or others
@ -103,7 +112,7 @@ class ThinkInk_420_Mono_MFGNR : public Adafruit_SSD1683 {
setBlackBuffer(0, true); // layer 1 uninverted
_epd_init_code = ti_420mfgnr_gray4_init_code;
_epd_lut_code = ti_420mfgnr_gray4_lut_code;
_epd_lut_code = ti_420mfgnr_gray4_lut_code;
layer_colors[EPD_WHITE] = 0b00;
layer_colors[EPD_BLACK] = 0b11;
@ -117,8 +126,8 @@ class ThinkInk_420_Mono_MFGNR : public Adafruit_SSD1683 {
} else if (mode == THINKINK_TRICOLOR) {
setBlackBuffer(0, true);
setColorBuffer(1, false);
_epd_init_code = ti_420mfgnr_tri_init_code;
_epd_init_code = ti_420mfgnr_tri_init_code;
layer_colors[EPD_WHITE] = 0b00;
layer_colors[EPD_BLACK] = 0b01;
@ -126,8 +135,8 @@ class ThinkInk_420_Mono_MFGNR : public Adafruit_SSD1683 {
layer_colors[EPD_GRAY] = 0b10;
layer_colors[EPD_LIGHT] = 0b00;
layer_colors[EPD_DARK] = 0b01;
_display_update_val = 0xF7;
_display_update_val = 0xF7;
default_refresh_delay = 13000;
}
setRotation(1);

View file

@ -3,40 +3,53 @@
#include "Adafruit_EPD.h"
const uint8_t uc8179_mono_init_code[] {
UC8179_POWERSETTING, 4,
0x07, // VGH=20V
0x07, // VGL=-20V
0x3F, // VDH=15V
0x3F, // VDL=-15V
const uint8_t uc8179_mono_init_code[]{UC8179_POWERSETTING,
4,
0x07, // VGH=20V
0x07, // VGL=-20V
0x3F, // VDH=15V
0x3F, // VDL=-15V
UC8179_POWERON, 0,
0xFF, 100, // busy wait
UC8179_PANELSETTING, 1,
0b010111, // BW OTP LUT
UC8179_POWERON,
0,
0xFF,
100, // busy wait
UC8179_TRES, 4,
0x02, 0x88, 0x01, 0xE0,
UC8179_DUALSPI, 1, 0x00,
UC8179_PANELSETTING,
1,
0b010111, // BW OTP LUT
UC8179_WRITE_VCOM, 2, 0x10, 0x07,
UC8179_TCON, 1, 0x22,
UC8179_TRES,
4,
0x02,
0x88,
0x01,
0xE0,
0xFE};
UC8179_DUALSPI,
1,
0x00,
UC8179_WRITE_VCOM,
2,
0x10,
0x07,
UC8179_TCON,
1,
0x22,
0xFE};
class ThinkInk_583_Mono_AAAMFGN : public Adafruit_UC8179 {
private:
public:
ThinkInk_583_Mono_AAAMFGN(int16_t SID, int16_t SCLK, int16_t DC, int16_t RST,
int16_t CS, int16_t SRCS, int16_t MISO,
int16_t BUSY = -1)
int16_t CS, int16_t SRCS, int16_t MISO,
int16_t BUSY = -1)
: Adafruit_UC8179(648, 480, SID, SCLK, DC, RST, CS, SRCS, MISO, BUSY){};
ThinkInk_583_Mono_AAAMFGN(int16_t DC, int16_t RST, int16_t CS, int16_t SRCS,
int16_t BUSY = -1, SPIClass* spi = &SPI)
int16_t BUSY = -1, SPIClass* spi = &SPI)
: Adafruit_UC8179(648, 480, DC, RST, CS, SRCS, BUSY, spi){};
void begin(thinkinkmode_t mode = THINKINK_MONO) {

View file

@ -30,17 +30,17 @@ const uint8_t uc8179_tricolor_init_code[] {
// clang-format on
class ThinkInk_583_Tricolor_AABMFGNR : public Adafruit_UC8179 {
private:
public:
ThinkInk_583_Tricolor_AABMFGNR(int16_t SID, int16_t SCLK, int16_t DC, int16_t RST,
int16_t CS, int16_t SRCS, int16_t MISO,
int16_t BUSY = -1)
ThinkInk_583_Tricolor_AABMFGNR(int16_t SID, int16_t SCLK, int16_t DC,
int16_t RST, int16_t CS, int16_t SRCS,
int16_t MISO, int16_t BUSY = -1)
: Adafruit_UC8179(648, 480, SID, SCLK, DC, RST, CS, SRCS, MISO, BUSY){};
ThinkInk_583_Tricolor_AABMFGNR(int16_t DC, int16_t RST, int16_t CS, int16_t SRCS,
int16_t BUSY = -1, SPIClass* spi = &SPI)
ThinkInk_583_Tricolor_AABMFGNR(int16_t DC, int16_t RST, int16_t CS,
int16_t SRCS, int16_t BUSY = -1,
SPIClass* spi = &SPI)
: Adafruit_UC8179(648, 480, DC, RST, CS, SRCS, BUSY, spi){};
void begin(thinkinkmode_t mode = THINKINK_TRICOLOR) {

View file

@ -30,17 +30,17 @@ const uint8_t uc8179_750_tricolor_init_code[] {
// clang-format on
class ThinkInk_750_Tricolor_AABMFGNR : public Adafruit_UC8179 {
private:
public:
ThinkInk_750_Tricolor_AABMFGNR(int16_t SID, int16_t SCLK, int16_t DC, int16_t RST,
int16_t CS, int16_t SRCS, int16_t MISO,
int16_t BUSY = -1)
ThinkInk_750_Tricolor_AABMFGNR(int16_t SID, int16_t SCLK, int16_t DC,
int16_t RST, int16_t CS, int16_t SRCS,
int16_t MISO, int16_t BUSY = -1)
: Adafruit_UC8179(800, 480, SID, SCLK, DC, RST, CS, SRCS, MISO, BUSY){};
ThinkInk_750_Tricolor_AABMFGNR(int16_t DC, int16_t RST, int16_t CS, int16_t SRCS,
int16_t BUSY = -1, SPIClass* spi = &SPI)
ThinkInk_750_Tricolor_AABMFGNR(int16_t DC, int16_t RST, int16_t CS,
int16_t SRCS, int16_t BUSY = -1,
SPIClass* spi = &SPI)
: Adafruit_UC8179(800, 480, DC, RST, CS, SRCS, BUSY, spi){};
void begin(thinkinkmode_t mode = THINKINK_TRICOLOR) {