9 namespace waveshare_epaper {
11 static const char *
const TAG =
"waveshare_epaper";
13 static const uint8_t LUT_SIZE_WAVESHARE = 30;
15 static const uint8_t FULL_UPDATE_LUT[LUT_SIZE_WAVESHARE] = {0x02, 0x02, 0x01, 0x11, 0x12, 0x12, 0x22, 0x22, 0x66, 0x69,
16 0x69, 0x59, 0x58, 0x99, 0x99, 0x88, 0x00, 0x00, 0x00, 0x00,
17 0xF8, 0xB4, 0x13, 0x51, 0x35, 0x51, 0x51, 0x19, 0x01, 0x00};
19 static const uint8_t PARTIAL_UPDATE_LUT[LUT_SIZE_WAVESHARE] = {
20 0x10, 0x18, 0x18, 0x08, 0x18, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
21 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x14, 0x44, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
23 static const uint8_t LUT_SIZE_TTGO = 70;
25 static const uint8_t FULL_UPDATE_LUT_TTGO[LUT_SIZE_TTGO] = {
26 0x80, 0x60, 0x40, 0x00, 0x00, 0x00, 0x00,
27 0x10, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00,
28 0x80, 0x60, 0x40, 0x00, 0x00, 0x00, 0x00,
29 0x10, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00,
30 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
31 0x03, 0x03, 0x00, 0x00, 0x02,
32 0x09, 0x09, 0x00, 0x00, 0x02,
33 0x03, 0x03, 0x00, 0x00, 0x02,
34 0x00, 0x00, 0x00, 0x00, 0x00,
35 0x00, 0x00, 0x00, 0x00, 0x00,
36 0x00, 0x00, 0x00, 0x00, 0x00,
37 0x00, 0x00, 0x00, 0x00, 0x00,
40 static const uint8_t PARTIAL_UPDATE_LUT_TTGO[LUT_SIZE_TTGO] = {
41 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
42 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
43 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
44 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
45 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
46 0x0A, 0x00, 0x00, 0x00, 0x00,
47 0x00, 0x00, 0x00, 0x00, 0x00,
48 0x00, 0x00, 0x00, 0x00, 0x00,
49 0x00, 0x00, 0x00, 0x00, 0x00,
50 0x00, 0x00, 0x00, 0x00, 0x00,
51 0x00, 0x00, 0x00, 0x00, 0x00,
52 0x00, 0x00, 0x00, 0x00, 0x00,
55 static const uint8_t LUT_SIZE_TTGO_B73 = 100;
57 static const uint8_t FULL_UPDATE_LUT_TTGO_B73[LUT_SIZE_TTGO_B73] = {
58 0xA0, 0x90, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x90, 0xA0, 0x00, 0x00, 0x00, 0x00,
59 0x00, 0x00, 0x00, 0xA0, 0x90, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x90, 0xA0, 0x00,
60 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x03, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
63 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
64 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
67 static const uint8_t PARTIAL_UPDATE_LUT_TTGO_B73[LUT_SIZE_TTGO_B73] = {
68 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
69 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
70 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
72 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
73 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
77 static const uint8_t LUT_SIZE_TTGO_B1 = 29;
79 static const uint8_t FULL_UPDATE_LUT_TTGO_B1[LUT_SIZE_TTGO_B1] = {
80 0x22, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
81 0x00, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x01, 0x00, 0x00, 0x00, 0x00};
83 static const uint8_t PARTIAL_UPDATE_LUT_TTGO_B1[LUT_SIZE_TTGO_B1] = {
84 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
85 0x00, 0x0F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
89 static const uint8_t PARTIAL_UPD_2IN9_LUT_SIZE = 159;
90 static const uint8_t PARTIAL_UPD_2IN9_LUT[PARTIAL_UPD_2IN9_LUT_SIZE] =
92 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
94 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
95 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
97 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
98 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
99 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
100 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
101 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
102 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
103 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
104 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
105 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
106 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
107 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
109 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00,
110 0x22, 0x17, 0x41, 0xB0, 0x32, 0x36,
160 const uint32_t start =
millis();
163 ESP_LOGE(TAG,
"Timeout while displaying image!");
176 const uint8_t
fill = color.
is_on() ? 0x00 : 0xFF;
189 uint32_t small_buffer_length = buffer_length / NUM_BUFFERS;
191 for (
int i = 0; i < NUM_BUFFERS; i++) {
192 this->buffers_[i] = allocator.
allocate(small_buffer_length);
193 if (this->buffers_[i] ==
nullptr) {
194 ESP_LOGE(TAG,
"Could not allocate buffer %d for display!", i);
195 for (
auto &buffer : this->buffers_) {
196 allocator.
deallocate(buffer, small_buffer_length);
206 if (color.
red > 127) {
207 if (color.
green > 170) {
208 if (color.
blue > 127) {
213 }
else if (color.
green > 85) {
219 if (color.
green > 127) {
220 if (color.
blue > 127) {
226 if (color.
blue > 127) {
239 pixel_color = this->color_to_hex(color);
244 if (this->buffers_[0] ==
nullptr) {
245 ESP_LOGE(TAG,
"Buffer unavailable!");
248 for (
auto &buffer : this->buffers_) {
249 for (uint32_t buffer_pos = 0; buffer_pos < small_buffer_length; buffer_pos += 3) {
253 buffer[buffer_pos + 0] = pixel_color << 5 | pixel_color << 2 | pixel_color >> 1;
254 buffer[buffer_pos + 1] = pixel_color << 7 | pixel_color << 4 | pixel_color << 1 | pixel_color >> 2;
255 buffer[buffer_pos + 2] = pixel_color << 6 | pixel_color << 3 | pixel_color << 0;
266 const uint8_t subpos = x & 0x07;
268 if (!color.
is_on()) {
269 this->
buffer_[pos] |= 0x80 >> subpos;
271 this->
buffer_[pos] &= ~(0x80 >> subpos);
295 const uint8_t subpos = x & 0x07;
298 this->
buffer_[pos] |= 0x80 >> subpos;
300 this->
buffer_[pos] &= ~(0x80 >> subpos);
304 if (((color.
red > 0) && (color.
green == 0) && (color.
blue == 0))) {
305 this->
buffer_[pos + buf_half_len] |= 0x80 >> subpos;
307 this->
buffer_[pos + buf_half_len] &= ~(0x80 >> subpos);
314 uint8_t pixel_bits = this->color_to_hex(color);
317 uint32_t first_bit_position = pixel_position * 3;
318 uint32_t byte_position = first_bit_position / 8u;
319 uint32_t byte_subposition = first_bit_position % 8u;
320 uint32_t buffer_position = byte_position / small_buffer_length;
321 uint32_t buffer_subposition = byte_position % small_buffer_length;
323 if (byte_subposition <= 5) {
324 this->buffers_[buffer_position][buffer_subposition] =
325 (this->buffers_[buffer_position][buffer_subposition] & (0xFF ^ (0b111 << (5 - byte_subposition)))) |
326 (pixel_bits << (5 - byte_subposition));
328 this->buffers_[buffer_position][buffer_subposition + 0] =
329 (this->buffers_[buffer_position][buffer_subposition + 0] & (0xFF ^ (0b111 >> (byte_subposition - 5)))) |
330 (pixel_bits >> (byte_subposition - 5));
332 this->buffers_[buffer_position][buffer_subposition + 1] = (this->buffers_[buffer_position][buffer_subposition + 1] &
333 (0xFF ^ (0xFF & (0b111 << (13 - byte_subposition))))) |
334 (pixel_bits << (13 - byte_subposition));
355 this->init_display_();
359 switch (this->model_) {
363 this->deep_sleep_between_updates_ =
true;
364 ESP_LOGI(TAG,
"Set the display to deep sleep");
412 switch (this->model_) {
429 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
430 switch (this->model_) {
432 ESP_LOGCONFIG(TAG,
" Model: 1.54in");
435 ESP_LOGCONFIG(TAG,
" Model: 1.54inV2");
438 ESP_LOGCONFIG(TAG,
" Model: 2.13in");
441 ESP_LOGCONFIG(TAG,
" Model: 2.13inV2");
444 ESP_LOGCONFIG(TAG,
" Model: 2.13in (TTGO)");
447 ESP_LOGCONFIG(TAG,
" Model: 2.13in (TTGO B73)");
450 ESP_LOGCONFIG(TAG,
" Model: 2.13in (TTGO B74)");
453 ESP_LOGCONFIG(TAG,
" Model: 2.13in (TTGO B1)");
456 ESP_LOGCONFIG(TAG,
" Model: 2.9in");
459 ESP_LOGCONFIG(TAG,
" Model: 2.9inV2");
462 ESP_LOGCONFIG(TAG,
" Full Update Every: %" PRIu32, this->full_update_every_);
464 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
466 LOG_UPDATE_INTERVAL(
this);
469 bool full_update = this->at_update_ == 0;
470 bool prev_full_update = this->at_update_ == 1;
472 if (this->deep_sleep_between_updates_) {
473 ESP_LOGI(TAG,
"Wake up the display");
476 this->init_display_();
484 if (this->full_update_every_ >= 1) {
485 if (full_update != prev_full_update) {
486 switch (this->model_) {
490 this->write_lut_(full_update ? FULL_UPDATE_LUT_TTGO : PARTIAL_UPDATE_LUT_TTGO, LUT_SIZE_TTGO);
493 this->write_lut_(full_update ? FULL_UPDATE_LUT_TTGO_B73 : PARTIAL_UPDATE_LUT_TTGO_B73, LUT_SIZE_TTGO_B73);
499 this->write_lut_(full_update ? FULL_UPDATE_LUT_TTGO_B1 : PARTIAL_UPDATE_LUT_TTGO_B1, LUT_SIZE_TTGO_B1);
502 this->write_lut_(full_update ? FULL_UPDATE_LUT : PARTIAL_UPDATE_LUT, LUT_SIZE_WAVESHARE);
505 this->at_update_ = (this->at_update_ + 1) % this->full_update_every_;
511 this->
data(full_update ? 0x55 : 0x26);
530 switch (this->model_) {
533 this->
data(full_update ? 0x05 : 0x80);
537 this->
data(full_update ? 0x03 : 0x01);
544 switch (this->model_) {
595 switch (this->model_) {
599 for (
int j = 0; j < wb; j++) {
621 switch (this->model_) {
625 this->
data(full_update ? 0xF7 : 0xFF);
631 this->
data(full_update ? 0xC7 : 0x0C);
645 if (this->deep_sleep_between_updates_) {
646 ESP_LOGI(TAG,
"Set the display back to deep sleep");
651 switch (this->model_) {
670 switch (this->model_) {
683 switch (this->model_) {
703 for (uint8_t i = 0; i < size; i++)
730 static const uint8_t LUT_VCOM_DC_2_7[44] = {
731 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x05, 0x00, 0x32, 0x32, 0x00, 0x00, 0x02, 0x00,
732 0x0F, 0x0F, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
733 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
736 static const uint8_t LUT_WHITE_TO_WHITE_2_7[42] = {
737 0x50, 0x0F, 0x0F, 0x00, 0x00, 0x05, 0x60, 0x32, 0x32, 0x00, 0x00, 0x02, 0xA0, 0x0F,
738 0x0F, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
739 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
742 static const uint8_t LUT_BLACK_TO_WHITE_2_7[42] = {
743 0x50, 0x0F, 0x0F, 0x00, 0x00, 0x05, 0x60, 0x32, 0x32, 0x00, 0x00, 0x02, 0xA0, 0x0F,
744 0x0F, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
745 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
748 static const uint8_t LUT_WHITE_TO_BLACK_2_7[] = {
749 0xA0, 0x0F, 0x0F, 0x00, 0x00, 0x05, 0x60, 0x32, 0x32, 0x00, 0x00, 0x02, 0x50, 0x0F,
750 0x0F, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
751 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
754 static const uint8_t LUT_BLACK_TO_BLACK_2_7[42] = {
755 0xA0, 0x0F, 0x0F, 0x00, 0x00, 0x05, 0x60, 0x32, 0x32, 0x00, 0x00, 0x02, 0x50, 0x0F,
756 0x0F, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
757 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
820 for (uint8_t i : LUT_VCOM_DC_2_7)
825 for (uint8_t i : LUT_WHITE_TO_WHITE_2_7)
829 for (uint8_t i : LUT_BLACK_TO_WHITE_2_7)
833 for (uint8_t i : LUT_WHITE_TO_BLACK_2_7)
837 for (uint8_t i : LUT_BLACK_TO_BLACK_2_7)
846 for (uint32_t i = 0; i < buf_len; i++) {
854 for (uint32_t i = 0; i < buf_len; i++) {
864 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
865 ESP_LOGCONFIG(TAG,
" Model: 2.7in");
867 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
869 LOG_UPDATE_INTERVAL(
this);
917 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
918 ESP_LOGCONFIG(TAG,
" Model: 2.7in V2");
920 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
922 LOG_UPDATE_INTERVAL(
this);
980 for (uint32_t i = 0; i < buf_len_half; i++) {
988 for (uint32_t i = buf_len_half; i < buf_len_half * 2u; i++) {
1001 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
1002 ESP_LOGCONFIG(TAG,
" Model: 1.54in V2 B");
1004 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
1005 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
1006 LOG_UPDATE_INTERVAL(
this);
1016 static const uint8_t LUT_VCOM_DC_2_7B[44] = {0x00, 0x00, 0x00, 0x1A, 0x1A, 0x00, 0x00, 0x01, 0x00, 0x0A, 0x0A,
1017 0x00, 0x00, 0x08, 0x00, 0x0E, 0x01, 0x0E, 0x01, 0x10, 0x00, 0x0A,
1018 0x0A, 0x00, 0x00, 0x08, 0x00, 0x04, 0x10, 0x00, 0x00, 0x05, 0x00,
1019 0x03, 0x0E, 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x00, 0x00, 0x01};
1021 static const uint8_t LUT_WHITE_TO_WHITE_2_7B[42] = {0x90, 0x1A, 0x1A, 0x00, 0x00, 0x01, 0x40, 0x0A, 0x0A, 0x00, 0x00,
1022 0x08, 0x84, 0x0E, 0x01, 0x0E, 0x01, 0x10, 0x80, 0x0A, 0x0A, 0x00,
1023 0x00, 0x08, 0x00, 0x04, 0x10, 0x00, 0x00, 0x05, 0x00, 0x03, 0x0E,
1024 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x00, 0x00, 0x01};
1026 static const uint8_t LUT_BLACK_TO_WHITE_2_7B[42] = {0xA0, 0x1A, 0x1A, 0x00, 0x00, 0x01, 0x00, 0x0A, 0x0A, 0x00, 0x00,
1027 0x08, 0x84, 0x0E, 0x01, 0x0E, 0x01, 0x10, 0x90, 0x0A, 0x0A, 0x00,
1028 0x00, 0x08, 0xB0, 0x04, 0x10, 0x00, 0x00, 0x05, 0xB0, 0x03, 0x0E,
1029 0x00, 0x00, 0x0A, 0xC0, 0x23, 0x00, 0x00, 0x00, 0x01};
1031 static const uint8_t LUT_WHITE_TO_BLACK_2_7B[] = {0x90, 0x1A, 0x1A, 0x00, 0x00, 0x01, 0x20, 0x0A, 0x0A, 0x00, 0x00,
1032 0x08, 0x84, 0x0E, 0x01, 0x0E, 0x01, 0x10, 0x10, 0x0A, 0x0A, 0x00,
1033 0x00, 0x08, 0x00, 0x04, 0x10, 0x00, 0x00, 0x05, 0x00, 0x03, 0x0E,
1034 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x00, 0x00, 0x01};
1036 static const uint8_t LUT_BLACK_TO_BLACK_2_7B[42] = {0x90, 0x1A, 0x1A, 0x00, 0x00, 0x01, 0x40, 0x0A, 0x0A, 0x00, 0x00,
1037 0x08, 0x84, 0x0E, 0x01, 0x0E, 0x01, 0x10, 0x80, 0x0A, 0x0A, 0x00,
1038 0x00, 0x08, 0x00, 0x04, 0x10, 0x00, 0x00, 0x05, 0x00, 0x03, 0x0E,
1039 0x00, 0x00, 0x0A, 0x00, 0x23, 0x00, 0x00, 0x00, 0x01};
1098 for (uint8_t i : LUT_VCOM_DC_2_7B)
1102 for (uint8_t i : LUT_WHITE_TO_WHITE_2_7B)
1106 for (uint8_t i : LUT_BLACK_TO_WHITE_2_7B)
1110 for (uint8_t i : LUT_WHITE_TO_BLACK_2_7B) {
1116 for (uint8_t i : LUT_BLACK_TO_BLACK_2_7B) {
1137 for (uint32_t i = 0; i < buf_len_half; i++) {
1146 for (uint32_t i = buf_len_half; i < buf_len_half * 2u; i++) {
1162 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
1163 ESP_LOGCONFIG(TAG,
" Model: 2.7in B");
1165 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
1166 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
1167 LOG_UPDATE_INTERVAL(
this);
1199 this->
data((xend >> 3) & 0xff);
1204 this->
data(yend & 0xff);
1205 this->
data((yend >> 8) & 0xff);
1220 for (uint32_t i = 0; i < buf_len; i++) {
1228 for (uint32_t i = 0; i < buf_len; i++) {
1241 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
1242 ESP_LOGCONFIG(TAG,
" Model: 2.7in B V2");
1244 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
1245 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
1246 LOG_UPDATE_INTERVAL(
this);
1320 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
1321 ESP_LOGCONFIG(TAG,
" Model: 2.9in (B)");
1323 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
1324 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
1325 LOG_UPDATE_INTERVAL(
this);
1407 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
1408 ESP_LOGCONFIG(TAG,
" Model: 2.9in (D)");
1410 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
1411 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
1412 LOG_UPDATE_INTERVAL(
this);
1418 static const uint8_t LUT_SIZE_DKE = 70;
1419 static const uint8_t UPDATE_LUT_DKE[LUT_SIZE_DKE] = {
1420 0xA0, 0x90, 0x50, 0x0, 0x0, 0x0, 0x0, 0x50, 0x90, 0xA0, 0x0, 0x0, 0x0, 0x0, 0xA0, 0x90, 0x50, 0x0,
1421 0x0, 0x0, 0x0, 0x50, 0x90, 0xA0, 0x0, 0x0, 0x0, 0x0, 0x00, 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0xF,
1422 0xF, 0x0, 0x0, 0x0, 0xF, 0xF, 0x0, 0x0, 0x02, 0xF, 0xF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
1423 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
1425 static const uint8_t PART_UPDATE_LUT_DKE[LUT_SIZE_DKE] = {
1426 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xa0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x50, 0x10, 0x00, 0x00,
1427 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
1428 0x05, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1429 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
1430 static const uint8_t FULL_UPDATE_LUT_DKE[LUT_SIZE_DKE] = {
1431 0x90, 0x50, 0xa0, 0x50, 0x50, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa0, 0xa0, 0x80, 0x00, 0x90, 0x50, 0xa0, 0x50,
1432 0x50, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa0, 0xa0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17,
1433 0x04, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x00, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x00, 0x04, 0x05, 0x00, 0x00,
1434 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
1498 for (uint8_t v : FULL_UPDATE_LUT_DKE)
1503 ESP_LOGI(TAG,
"Performing e-paper update.");
1529 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
1530 ESP_LOGCONFIG(TAG,
" Model: 2.9in DKE");
1532 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
1533 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
1534 LOG_UPDATE_INTERVAL(
this);
1601 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
1602 ESP_LOGCONFIG(TAG,
" Model: 2.9in (B) V3");
1604 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
1605 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
1606 LOG_UPDATE_INTERVAL(
this);
1657 void WaveshareEPaper2P9InV2R2::reset_() {
1669 ESP_LOGE(TAG,
"fail idle 1");
1708 this->
write_lut_(PARTIAL_UPD_2IN9_LUT, PARTIAL_UPD_2IN9_LUT_SIZE);
1730 ESP_LOGE(TAG,
"fail idle 2");
1769 for (uint8_t i = 0; i < size; i++)
1774 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
1775 ESP_LOGCONFIG(TAG,
" Model: 2.9inV2R2");
1778 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
1779 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
1780 LOG_UPDATE_INTERVAL(
this);
1860 LOG_DISPLAY(
"",
"E-Paper (Good Display)",
this);
1861 ESP_LOGCONFIG(TAG,
" Model: 2.9in GDEY029T94");
1863 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
1864 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
1865 LOG_UPDATE_INTERVAL(
this);
1878 static const uint8_t LUT_20_VCOMDC_29_5[] = {
1879 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x60, 0x28, 0x28, 0x00, 0x00, 0x01, 0x00, 0x14, 0x00,
1880 0x00, 0x00, 0x01, 0x00, 0x12, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1881 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1884 static const uint8_t LUT_21_WW_29_5[] = {
1885 0x40, 0x08, 0x00, 0x00, 0x00, 0x02, 0x90, 0x28, 0x28, 0x00, 0x00, 0x01, 0x40, 0x14,
1886 0x00, 0x00, 0x00, 0x01, 0xA0, 0x12, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
1887 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1890 static const uint8_t LUT_22_BW_29_5[] = {
1891 0x40, 0x08, 0x00, 0x00, 0x00, 0x02, 0x90, 0x28, 0x28, 0x00, 0x00, 0x01, 0x40, 0x14,
1892 0x00, 0x00, 0x00, 0x01, 0xA0, 0x12, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
1893 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1896 static const uint8_t LUT_23_WB_29_5[] = {
1897 0x80, 0x08, 0x00, 0x00, 0x00, 0x02, 0x90, 0x28, 0x28, 0x00, 0x00, 0x01, 0x80, 0x14,
1898 0x00, 0x00, 0x00, 0x01, 0x50, 0x12, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
1899 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1902 static const uint8_t LUT_24_BB_29_5[] = {
1903 0x80, 0x08, 0x00, 0x00, 0x00, 0x02, 0x90, 0x28, 0x28, 0x00, 0x00, 0x01, 0x80, 0x14,
1904 0x00, 0x00, 0x00, 0x01, 0x50, 0x12, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
1905 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1909 static const uint8_t LUT_20_VCOMDC_PARTIAL_29_5[] = {
1910 0x00, 0x20, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1911 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1912 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1915 static const uint8_t LUT_21_WW_PARTIAL_29_5[] = {
1916 0x00, 0x20, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1917 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1918 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1921 static const uint8_t LUT_22_BW_PARTIAL_29_5[] = {
1922 0x80, 0x20, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1923 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1924 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1927 static const uint8_t LUT_23_WB_PARTIAL_29_5[] = {
1928 0x40, 0x20, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1929 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1930 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1933 static const uint8_t LUT_24_BB_PARTIAL_29_5[] = {
1934 0x00, 0x20, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1935 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1936 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1940 if (!this->power_is_on_) {
1944 this->power_is_on_ =
true;
1950 this->power_is_on_ =
false;
1958 ESP_LOGD(TAG,
"go to deep sleep");
1959 this->is_deep_sleep_ =
true;
1968 ESP_LOGI(TAG,
"wake up from deep sleep");
1970 this->is_deep_sleep_ =
false;
1998 this->
data(0b10111111);
2007 ESP_LOGD(TAG,
"panel setting done");
2018 if (this->old_buffer_ ==
nullptr) {
2019 ESP_LOGE(TAG,
"Could not allocate old buffer for display!");
2023 this->old_buffer_[i] = 0xFF;
2035 this->
write_lut_(LUT_20_VCOMDC_29_5,
sizeof(LUT_20_VCOMDC_29_5));
2037 this->
write_lut_(LUT_21_WW_29_5,
sizeof(LUT_21_WW_29_5));
2039 this->
write_lut_(LUT_22_BW_29_5,
sizeof(LUT_22_BW_29_5));
2041 this->
write_lut_(LUT_23_WB_29_5,
sizeof(LUT_23_WB_29_5));
2043 this->
write_lut_(LUT_24_BB_29_5,
sizeof(LUT_24_BB_29_5));
2044 ESP_LOGD(TAG,
"initialized full update");
2055 this->
write_lut_(LUT_20_VCOMDC_PARTIAL_29_5,
sizeof(LUT_20_VCOMDC_PARTIAL_29_5));
2057 this->
write_lut_(LUT_21_WW_PARTIAL_29_5,
sizeof(LUT_21_WW_PARTIAL_29_5));
2059 this->
write_lut_(LUT_22_BW_PARTIAL_29_5,
sizeof(LUT_22_BW_PARTIAL_29_5));
2061 this->
write_lut_(LUT_23_WB_PARTIAL_29_5,
sizeof(LUT_23_WB_PARTIAL_29_5));
2063 this->
write_lut_(LUT_24_BB_PARTIAL_29_5,
sizeof(LUT_24_BB_PARTIAL_29_5));
2064 ESP_LOGD(TAG,
"initialized partial update");
2072 this->init_partial_();
2102 this->old_buffer_[i] = this->
buffer_[i];
2113 ESP_LOGD(TAG,
"full update done");
2116 ESP_LOGD(TAG,
"partial update done");
2127 for (uint8_t i = 0; i < size; i++)
2137 LOG_DISPLAY(
"",
"Waveshare E-Paper (Good Display)",
this);
2138 ESP_LOGCONFIG(TAG,
" Model: 2.9in Greyscale GDEW029T5");
2140 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
2141 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
2143 LOG_UPDATE_INTERVAL(
this);
2163 if (this->lastbuff_ !=
nullptr) {
2169 void GDEW0154M09::reset_() {
2179 void GDEW0154M09::init_internal_() {
2190 const uint8_t panel_setting_1 = 0b11011111;
2197 const uint8_t panel_setting_2 = 0b01110;
2199 const uint8_t wf_t0154_cz_b3_list[] = {
2201 CMD_PSR_PANEL_SETTING, 2, panel_setting_1, panel_setting_2,
2202 CMD_UNDOCUMENTED_0x4D, 1, 0x55,
2203 CMD_UNDOCUMENTED_0xAA, 1, 0x0f,
2204 CMD_UNDOCUMENTED_0xE9, 1, 0x02,
2205 CMD_UNDOCUMENTED_0xB6, 1, 0x11,
2206 CMD_UNDOCUMENTED_0xF3, 1, 0x0a,
2207 CMD_TRES_RESOLUTION_SETTING, 3, 0xc8, 0x00, 0xc8,
2208 CMD_TCON_TCONSETTING, 1, 0x00,
2209 CMD_CDI_VCOM_DATA_INTERVAL, 1, 0xd7,
2210 CMD_PWS_POWER_SAVING, 1, 0x00,
2215 this->write_init_list_(wf_t0154_cz_b3_list);
2220 void GDEW0154M09::write_init_list_(
const uint8_t *list) {
2221 uint8_t list_limit = list[0];
2222 uint8_t *start_ptr = ((uint8_t *) list + 1);
2223 for (uint8_t i = 0; i < list_limit; i++) {
2224 this->
command(*(start_ptr + 0));
2225 for (uint8_t dnum = 0; dnum < *(start_ptr + 1); dnum++) {
2226 this->
data(*(start_ptr + 2 + dnum));
2228 start_ptr += (*(start_ptr + 1) + 2);
2232 void GDEW0154M09::clear_() {
2234 for (uint8_t j = 0; j < 2; j++) {
2235 this->
command(CMD_DTM1_DATA_START_TRANS);
2236 for (
int count = 0; count < pixsize; count++) {
2239 this->
command(CMD_DTM2_DATA_START_TRANS2);
2240 for (
int count = 0; count < pixsize; count++) {
2243 this->
command(CMD_DISPLAY_REFRESH);
2252 this->
command(CMD_DTM1_DATA_START_TRANS);
2256 this->
command(CMD_DTM2_DATA_START_TRANS2);
2260 this->
command(CMD_DISPLAY_REFRESH);
2268 this->
command(CMD_POF_POWER_OFF);
2271 this->
command(CMD_DSLP_DEEP_SLEEP);
2272 this->
data(DATA_DSLP_DEEP_SLEEP);
2278 LOG_DISPLAY(
"",
"M5Stack CoreInk E-Paper (Good Display)",
this);
2279 ESP_LOGCONFIG(TAG,
" Model: 1.54in Greyscale GDEW0154M09");
2281 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
2282 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
2283 LOG_UPDATE_INTERVAL(
this);
2301 ESP_LOGD(TAG,
"Initialization complete, set the display to deep sleep");
2314 void GDEY042T81::reset_() {
2323 void GDEY042T81::init_display_() {
2369 void GDEY042T81::update_full_() {
2390 void GDEY042T81::update_part_() {
2403 ESP_LOGD(TAG,
"Wake up the display");
2408 ESP_LOGE(TAG,
"Failed to perform update, display is busy");
2414 ESP_LOGD(TAG,
"Full update");
2422 this->update_full_();
2428 ESP_LOGD(TAG,
"Update");
2441 this->update_full_();
2450 ESP_LOGD(TAG,
"Partial update");
2454 ESP_LOGE(TAG,
"Failed to perform partial update, display is busy");
2464 this->update_part_();
2469 ESP_LOGD(TAG,
"Set the display back to deep sleep");
2477 LOG_DISPLAY(
"",
"GoodDisplay E-Paper",
this);
2478 ESP_LOGCONFIG(TAG,
" Model: 4.2in B/W GDEY042T81");
2481 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
2482 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
2483 LOG_UPDATE_INTERVAL(
this);
2486 static const uint8_t LUT_VCOM_DC_4_2[] = {
2487 0x00, 0x17, 0x00, 0x00, 0x00, 0x02, 0x00, 0x17, 0x17, 0x00, 0x00, 0x02, 0x00, 0x0A, 0x01,
2488 0x00, 0x00, 0x01, 0x00, 0x0E, 0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2489 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2491 static const uint8_t LUT_WHITE_TO_WHITE_4_2[] = {
2492 0x40, 0x17, 0x00, 0x00, 0x00, 0x02, 0x90, 0x17, 0x17, 0x00, 0x00, 0x02, 0x40, 0x0A,
2493 0x01, 0x00, 0x00, 0x01, 0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
2494 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2496 static const uint8_t LUT_BLACK_TO_WHITE_4_2[] = {
2497 0x40, 0x17, 0x00, 0x00, 0x00, 0x02, 0x90, 0x17, 0x17, 0x00, 0x00, 0x02, 0x40, 0x0A,
2498 0x01, 0x00, 0x00, 0x01, 0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
2499 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2502 static const uint8_t LUT_BLACK_TO_BLACK_4_2[] = {
2503 0x80, 0x17, 0x00, 0x00, 0x00, 0x02, 0x90, 0x17, 0x17, 0x00, 0x00, 0x02, 0x80, 0x0A,
2504 0x01, 0x00, 0x00, 0x01, 0x50, 0x0E, 0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
2505 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2508 static const uint8_t LUT_WHITE_TO_BLACK_4_2[] = {
2509 0x80, 0x17, 0x00, 0x00, 0x00, 0x02, 0x90, 0x17, 0x17, 0x00, 0x00, 0x02, 0x80, 0x0A,
2510 0x01, 0x00, 0x00, 0x01, 0x50, 0x0E, 0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
2511 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2546 for (uint8_t i : LUT_VCOM_DC_4_2)
2550 for (uint8_t i : LUT_WHITE_TO_WHITE_4_2)
2554 for (uint8_t i : LUT_BLACK_TO_WHITE_4_2)
2558 for (uint8_t i : LUT_WHITE_TO_BLACK_4_2)
2562 for (uint8_t i : LUT_BLACK_TO_BLACK_4_2)
2600 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
2601 ESP_LOGCONFIG(TAG,
" Model: 4.2in");
2603 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
2604 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
2605 LOG_UPDATE_INTERVAL(
this);
2656 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
2657 ESP_LOGCONFIG(TAG,
" Model: 4.2in (B V2)");
2659 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
2660 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
2661 LOG_UPDATE_INTERVAL(
this);
2692 for (uint32_t i = 0; i < buf_len; ++i) {
2698 for (uint32_t i = 0; i < buf_len; ++i) {
2714 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
2715 ESP_LOGCONFIG(TAG,
" Model: 4.2in (B V2) BWR-Mode");
2717 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
2718 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
2719 LOG_UPDATE_INTERVAL(
this);
2780 uint8_t temp1 = this->
buffer_[i];
2781 for (uint8_t j = 0; j < 8; j++) {
2811 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
2812 ESP_LOGCONFIG(TAG,
" Model: 5.83in");
2814 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
2815 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
2816 LOG_UPDATE_INTERVAL(
this);
2892 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
2893 ESP_LOGCONFIG(TAG,
" Model: 5.83inv2");
2895 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
2896 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
2897 LOG_UPDATE_INTERVAL(
this);
2968 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
2969 ESP_LOGCONFIG(TAG,
" Model: 7.5in-bv2");
2971 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
2972 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
2973 LOG_UPDATE_INTERVAL(
this);
2982 const uint32_t start =
millis();
2986 ESP_LOGI(TAG,
"Timeout while displaying image!");
3051 uint8_t lut_vcom_7_i_n5_v2[] = {
3052 0x0, 0xF, 0xF, 0x0, 0x0, 0x1, 0x0, 0xF, 0x1, 0xF, 0x1, 0x2, 0x0, 0xF, 0xF, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0,
3053 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
3056 uint8_t lut_ww_7_i_n5_v2[] = {
3057 0x10, 0xF, 0xF, 0x0, 0x0, 0x1, 0x84, 0xF, 0x1, 0xF, 0x1, 0x2, 0x20, 0xF, 0xF, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0,
3058 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
3061 uint8_t lut_bw_7_i_n5_v2[] = {
3062 0x10, 0xF, 0xF, 0x0, 0x0, 0x1, 0x84, 0xF, 0x1, 0xF, 0x1, 0x2, 0x20, 0xF, 0xF, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0,
3063 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
3066 uint8_t lut_wb_7_i_n5_v2[] = {
3067 0x80, 0xF, 0xF, 0x0, 0x0, 0x3, 0x84, 0xF, 0x1, 0xF, 0x1, 0x4, 0x40, 0xF, 0xF, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0,
3068 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
3071 uint8_t lut_bb_7_i_n5_v2[] = {
3072 0x80, 0xF, 0xF, 0x0, 0x0, 0x1, 0x84, 0xF, 0x1, 0xF, 0x1, 0x2, 0x40, 0xF, 0xF, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0,
3073 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
3078 for (count = 0; count < 42; count++)
3079 this->
data(lut_vcom_7_i_n5_v2[count]);
3082 for (count = 0; count < 42; count++)
3083 this->
data(lut_ww_7_i_n5_v2[count]);
3086 for (count = 0; count < 42; count++)
3087 this->
data(lut_bw_7_i_n5_v2[count]);
3090 for (count = 0; count < 42; count++)
3091 this->
data(lut_wb_7_i_n5_v2[count]);
3094 for (count = 0; count < 42; count++)
3095 this->
data(lut_bb_7_i_n5_v2[count]);
3102 for (uint32_t i = 0; i < buf_len; i++) {
3108 for (uint32_t i = 0; i < buf_len; i++) {
3120 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
3121 ESP_LOGCONFIG(TAG,
" Model: 7.5in-bv3");
3123 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
3124 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
3125 LOG_UPDATE_INTERVAL(
this);
3134 const uint32_t start =
millis();
3138 ESP_LOGI(TAG,
"Timeout while displaying image!");
3202 for (uint32_t i = 0; i < buf_len; i++) {
3208 for (uint32_t i = 0; i < buf_len; i++) {
3220 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
3221 ESP_LOGCONFIG(TAG,
" Model: 7.5in-bv3 BWR-Mode");
3223 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
3224 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
3225 LOG_UPDATE_INTERVAL(
this);
3275 uint8_t temp1 = this->
buffer_[i];
3276 for (uint8_t j = 0; j < 8; j++) {
3303 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
3304 ESP_LOGCONFIG(TAG,
" Model: 7.5in");
3306 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
3307 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
3308 LOG_UPDATE_INTERVAL(
this);
3311 if (this->buffers_[0] ==
nullptr) {
3312 ESP_LOGE(TAG,
"Buffer unavailable!");
3411 ESP_LOGI(TAG,
"Display initialized successfully");
3414 if (this->buffers_[0] ==
nullptr) {
3415 ESP_LOGE(TAG,
"Buffer unavailable!");
3420 ESP_LOGI(TAG,
"Initialise the display");
3424 ESP_LOGI(TAG,
"Sending data to the display");
3427 uint8_t byte_to_send;
3428 for (
auto &buffer : this->buffers_) {
3429 for (uint32_t buffer_pos = 0; buffer_pos < small_buffer_length; buffer_pos += 3) {
3430 std::bitset<24> triplet =
3431 buffer[buffer_pos + 0] << 16 | buffer[buffer_pos + 1] << 8 | buffer[buffer_pos + 2] << 0;
3435 byte_to_send = ((triplet >> 17).to_ulong() & 0b01110000) | ((triplet >> 18).to_ulong() & 0b00000111);
3436 this->
data(byte_to_send);
3438 byte_to_send = ((triplet >> 11).to_ulong() & 0b01110000) | ((triplet >> 12).to_ulong() & 0b00000111);
3439 this->
data(byte_to_send);
3441 byte_to_send = ((triplet >> 5).to_ulong() & 0b01110000) | ((triplet >> 6).to_ulong() & 0b00000111);
3442 this->
data(byte_to_send);
3444 byte_to_send = ((triplet << 1).to_ulong() & 0b01110000) | ((triplet << 0).to_ulong() & 0b00000111);
3445 this->
data(byte_to_send);
3451 ESP_LOGI(TAG,
"Power on the display");
3456 ESP_LOGI(TAG,
"Refresh the display");
3462 ESP_LOGI(TAG,
"Power off the display");
3467 ESP_LOGI(TAG,
"Set the display to deep sleep");
3475 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
3476 ESP_LOGCONFIG(TAG,
" Model: 7.3in-F");
3478 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
3479 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
3480 LOG_UPDATE_INTERVAL(
this);
3487 const uint32_t start =
millis();
3490 ESP_LOGE(TAG,
"Timeout while displaying image!");
3504 const uint32_t start =
millis();
3508 ESP_LOGE(TAG,
"Timeout while displaying image!");
3563 ESP_LOGI(TAG,
"Power on the display and hat");
3575 for (uint32_t i = 0; i < buf_len; i++) {
3587 ESP_LOGV(TAG,
"Before command(0x02) (>> power off)");
3590 ESP_LOGV(TAG,
"After command(0x02) (>> power off)");
3597 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
3598 ESP_LOGCONFIG(TAG,
" Model: 7.5inV2rev2");
3600 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
3601 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
3602 LOG_UPDATE_INTERVAL(
this);
3611 const uint32_t start =
millis();
3615 ESP_LOGI(TAG,
"Timeout while displaying image!");
3681 uint8_t lut_vcom_7_i_n5_v2[] = {
3682 0x0, 0xF, 0xF, 0x0, 0x0, 0x1, 0x0, 0xF, 0x1, 0xF, 0x1, 0x2, 0x0, 0xF, 0xF, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0,
3683 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
3686 uint8_t lut_ww_7_i_n5_v2[] = {
3687 0x10, 0xF, 0xF, 0x0, 0x0, 0x1, 0x84, 0xF, 0x1, 0xF, 0x1, 0x2, 0x20, 0xF, 0xF, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0,
3688 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
3691 uint8_t lut_bw_7_i_n5_v2[] = {
3692 0x10, 0xF, 0xF, 0x0, 0x0, 0x1, 0x84, 0xF, 0x1, 0xF, 0x1, 0x2, 0x20, 0xF, 0xF, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0,
3693 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
3696 uint8_t lut_wb_7_i_n5_v2[] = {
3697 0x80, 0xF, 0xF, 0x0, 0x0, 0x3, 0x84, 0xF, 0x1, 0xF, 0x1, 0x4, 0x40, 0xF, 0xF, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0,
3698 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
3701 uint8_t lut_bb_7_i_n5_v2[] = {
3702 0x80, 0xF, 0xF, 0x0, 0x0, 0x1, 0x84, 0xF, 0x1, 0xF, 0x1, 0x2, 0x40, 0xF, 0xF, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0,
3703 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
3708 for (count = 0; count < 42; count++)
3709 this->
data(lut_vcom_7_i_n5_v2[count]);
3712 for (count = 0; count < 42; count++)
3713 this->
data(lut_ww_7_i_n5_v2[count]);
3716 for (count = 0; count < 42; count++)
3717 this->
data(lut_bw_7_i_n5_v2[count]);
3720 for (count = 0; count < 42; count++)
3721 this->
data(lut_wb_7_i_n5_v2[count]);
3724 for (count = 0; count < 42; count++)
3725 this->
data(lut_bb_7_i_n5_v2[count]);
3729 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
3730 ESP_LOGCONFIG(TAG,
" Model: 7.5inV2");
3732 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
3733 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
3734 LOG_UPDATE_INTERVAL(
this);
3743 const uint32_t start =
millis();
3747 ESP_LOGE(TAG,
"Timeout while displaying image!");
3756 void WaveshareEPaper7P5InV2P::reset_() {
3767 void WaveshareEPaper7P5InV2P::turn_on_display_() {
3833 ESP_LOGI(TAG,
"Power on the display and hat");
3841 for (uint32_t i = 0; i < buf_len; i++) {
3845 this->turn_on_display_();
3865 for (uint32_t i = 0; i < buf_len; i++) {
3874 for (uint32_t i = 0; i < buf_len; i++) {
3881 this->turn_on_display_();
3906 for (uint32_t i = 0; i < buf_len; i++) {
3913 this->turn_on_display_();
3916 ESP_LOGV(TAG,
"Before command(0x02) (>> power off)");
3919 ESP_LOGV(TAG,
"After command(0x02) (>> power off)");
3928 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
3929 ESP_LOGCONFIG(TAG,
" Model: 7.50inv2p");
3932 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
3933 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
3934 LOG_UPDATE_INTERVAL(
this);
3999 uint8_t eight_pixels = this->
buffer_[i];
4001 for (uint8_t j = 0; j < 8; j += 2) {
4005 uint8_t left_nibble = (eight_pixels & 0x80) ? 0x30 : 0x00;
4007 uint8_t right_nibble = (eight_pixels & 0x80) ? 0x03 : 0x00;
4009 this->
write_byte(left_nibble | right_nibble);
4028 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
4029 ESP_LOGCONFIG(TAG,
" Model: 7.5in-bc");
4031 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
4032 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
4033 LOG_UPDATE_INTERVAL(
this);
4129 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
4130 ESP_LOGCONFIG(TAG,
" Model: 7.5in-HD-b");
4132 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
4133 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
4134 LOG_UPDATE_INTERVAL(
this);
4137 static const uint8_t LUT_SIZE_TTGO_DKE_PART = 153;
4139 static const uint8_t PART_UPDATE_LUT_TTGO_DKE[LUT_SIZE_TTGO_DKE_PART] = {
4140 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
4141 0x0, 0x0, 0x0, 0x0, 0x40, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0,
4142 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
4143 0xF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
4144 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
4145 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
4146 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
4147 0x0, 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x0, 0x0,
4157 ESP_LOGI(TAG,
"Performing partial e-paper update.");
4159 ESP_LOGI(TAG,
"Performing full e-paper update.");
4196 this->
write_array(PART_UPDATE_LUT_TTGO_DKE,
sizeof(PART_UPDATE_LUT_TTGO_DKE));
4248 ESP_LOGI(TAG,
"Completed e-paper update.");
4255 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
4256 ESP_LOGCONFIG(TAG,
" Model: 2.13inDKE");
4257 LOG_PIN(
" CS Pin: ", this->
cs_);
4259 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
4260 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
4261 LOG_UPDATE_INTERVAL(
this);
4299 this->
data(0 & 0xFF);
4300 this->
data((0 >> 8) & 0x03);
4305 this->
data(0 & 0xFF);
4306 this->
data((0 >> 8) & 0x03);
4319 this->
data(0 & 0xFF);
4320 this->
data((0 >> 8) & 0x03);
4323 this->
data(0 & 0xFF);
4324 this->
data((0 >> 8) & 0x03);
4343 LOG_DISPLAY(
"",
"Waveshare E-Paper",
this);
4344 ESP_LOGCONFIG(TAG,
" Model: 13.3inK");
4346 LOG_PIN(
" DC Pin: ", this->
dc_pin_);
4347 LOG_PIN(
" Busy Pin: ", this->
busy_pin_);
4348 LOG_UPDATE_INTERVAL(
this);
void initialize() override
int get_width_internal() override
virtual void digital_write(bool value)=0
void dump_config() override
void set_full_update_every(uint32_t full_update_every)
int get_height_internal() override
int get_width_internal() override
void dump_config() override
void on_safe_shutdown() override
void dump_config() override
int get_height_internal() override
void dump_config() override
int get_width() override
Get the width of the image in pixels with rotation applied.
int get_height_internal() override
void dump_config() override
void deep_sleep() override
float get_setup_priority() const override
void initialize() override
virtual void initialize()=0
bool deep_sleep_between_updates_
int get_width_internal() override
int get_height_internal() override
void dump_config() override
void status_set_warning(const char *message="unspecified")
void deep_sleep() override
void dump_config() override
void draw_absolute_pixel_internal(int x, int y, Color color) override
void dump_config() override
void dump_config() override
void dump_config() override
void write_lut_(const uint8_t *lut, uint8_t size)
void spi_setup() override
void dump_config() override
int get_width_internal() override
uint32_t idle_timeout_() override
void deep_sleep() override
void draw_absolute_pixel_internal(int x, int y, Color color) override
int get_height_internal() override
void initialize() override
int get_height_internal() override
void initialize() override
int get_height_internal() override
void initialize() override
void dump_config() override
void set_full_update_every(uint32_t full_update_every)
void filled_rectangle(int x1, int y1, int width, int height, Color color=COLOR_ON)
Fill a rectangle with the top left point at [x1,y1] and the bottom right point at [x1+width...
void set_full_update_every(uint32_t full_update_every)
int get_width_internal() override
int get_width_internal() override
uint32_t idle_timeout_() override
void set_full_update_every(uint32_t full_update_every)
WaveshareEPaperTypeA(WaveshareEPaperTypeAModel model)
void fill(Color color) override
virtual void fill(Color color)
Fill the entire screen with the given color.
int get_width_internal() override
void write_byte(uint8_t data)
void initialize() override
int get_width_internal() override
void fill(Color color) override
virtual int get_width_controller()
bool is_on() ESPHOME_ALWAYS_INLINE
uint32_t IRAM_ATTR HOT millis()
void initialize() override
int get_width_internal() override
uint32_t idle_timeout_() override
int get_width_internal() override
int get_width_internal() override
uint32_t idle_timeout_() override
void initialize() override
void init_internal_(uint32_t buffer_length)
int get_width_internal() override
int get_width_internal() override
void initialize() override
uint32_t idle_timeout_() override
void initialize() override
int get_width_internal() override
virtual int get_height_internal()=0
int get_width_controller() override
void dump_config() override
void dump_config() override
void initialize() override
void initialize() override
void dump_config() override
int get_height_internal() override
int get_width_internal() override
void dump_config() override
int get_height_internal() override
WaveshareEPaperTypeAModel model_
void dump_config() override
void initialize() override
int get_height() override
Get the height of the image in pixels with rotation applied.
uint32_t get_buffer_length_() override
void initialize() override
void dump_config() override
virtual uint32_t get_buffer_length_()=0
int get_width_internal() override
int get_width_internal() override
void initialize() override
WaveshareEPaperTypeAModel
uint32_t get_buffer_length_() override
void status_clear_warning()
virtual int get_width_internal()=0
void dump_config() override
void clear()
Clear the entire screen by filling it with OFF pixels.
void initialize() override
void dump_config() override
void initialize() override
void deep_sleep() override
int get_height_internal() override
const float PROCESSOR
For components that use data from sensors like displays.
int get_height_internal() override
void dump_config() override
int get_width_internal() override
Application App
Global storage of Application pointer - only one Application can exist.
void init_internal_7c_(uint32_t buffer_length)
int get_height_internal() override
int get_height_internal() override
int get_height_internal() override
int get_height_internal() override
void set_full_update_every(uint32_t full_update_every)
int get_width_internal() override
void dump_config() override
int get_width_internal() override
void initialize() override
virtual bool digital_read()=0
void initialize() override
uint8_t color_to_hex(Color color)
void deallocate(T *p, size_t n)
void initialize() override
void write_lut_(const uint8_t *lut, uint8_t size)
int get_width_internal() override
int get_height_internal() override
void write_lut_(const uint8_t *lut, uint8_t size)
void initialize() override
void initialize() override
virtual void deep_sleep()=0
void dump_config() override
int get_height_internal() override
int get_height_internal() override
void initialize() override
int get_height_internal() override
void dump_config() override
void initialize() override
virtual uint32_t idle_timeout_()
int get_width_internal() override
void dump_config() override
void dump_config() override
WaveshareEPaper2P9InV2R2()
void dump_config() override
void write_array(const uint8_t *data, size_t length)
int get_width_internal() override
int get_width_internal() override
void initialize() override
int get_height_internal() override
void initialize() override
int get_width_internal() override
int get_height_internal() override
int get_height_internal() override
int get_height_internal() override
int get_width_internal() override
int get_height_internal() override
Implementation of SPI Controller mode.
int get_width_internal() override
void initialize() override
void IRAM_ATTR HOT delayMicroseconds(uint32_t us)
void initialize() override
void command(uint8_t value)
void initialize() override
int get_height_internal() override
void dump_config() override
void dump_config() override
uint32_t full_update_every_
void initialize() override
int get_width_internal() override
void set_full_update_every(uint32_t full_update_every)
int get_height_internal() override
int get_width_controller() override
int get_height_internal() override
int get_height_internal() override
An STL allocator that uses SPI or internal RAM.
void draw_absolute_pixel_internal(int x, int y, Color color) override
int get_height_internal() override
int get_width_internal() override
void initialize() override
void dump_config() override
void dump_config() override
uint32_t get_buffer_length_() override
uint32_t idle_timeout_() override
int get_height_internal() override
void set_full_update_every(uint32_t full_update_every)
int get_width_internal() override
uint32_t idle_timeout_() override
int get_width_internal() override
int get_height_internal() override
void fill(Color color) override
void cmd_data(const uint8_t *data, size_t length)
void dump_config() override
void IRAM_ATTR HOT delay(uint32_t ms)
void initialize() override