19 int16_t cs_m1, int16_t cs_s1, int16_t cs_m2, int16_t cs_s2,
20 int16_t dc1, int16_t dc2, int16_t rst1, int16_t rst2,
21 int16_t busy_m1, int16_t busy_s1, int16_t busy_m2, int16_t busy_s2) :
22 GxEPD2_EPD(cs_m1, dc1, rst1, busy_m1, LOW, 10000000, WIDTH, HEIGHT, panel, hasColor, hasPartialUpdate, hasFastPartialUpdate),
23 _sck(sck), _miso(miso), _mosi(mosi), _dc1(dc1), _dc2(dc2), _rst1(rst1), _rst2(rst2),
24 _cs_m1(cs_m1), _cs_s1(cs_s1), _cs_m2(cs_m2), _cs_s2(cs_s2),
25 _busy_m1(busy_m1), _busy_s1(busy_s1), _busy_m2(busy_m2), _busy_s2(busy_s2),
27 M1(648, 492, false, cs_m1, dc1),
28 S1(656, 492, false, cs_s1, dc1),
29 M2(656, 492, true, cs_m2, dc2),
30 S2(648, 492, true, cs_s2, dc2)
37 int16_t dc1, int16_t dc2, int16_t rst1, int16_t rst2,
38 int16_t busy_m1, int16_t busy_s1, int16_t busy_m2, int16_t busy_s2) :
39 GxEPD2_EPD(cs_m1, dc1, rst1, busy_m1, LOW, 10000000, WIDTH, HEIGHT, panel, hasColor, hasPartialUpdate, hasFastPartialUpdate),
40 _sck(SCK), _miso(MISO), _mosi(MOSI), _dc1(dc1), _dc2(dc2), _rst1(rst1), _rst2(rst2),
41 _cs_m1(cs_m1), _cs_s1(cs_s1), _cs_m2(cs_m2), _cs_s2(cs_s2),
42 _busy_m1(busy_m1), _busy_s1(busy_s1), _busy_m2(busy_m2), _busy_s2(busy_s2),
44 M1(648, 492, false, cs_m1, dc1),
45 S1(656, 492, false, cs_s1, dc1),
46 M2(656, 492, true, cs_m2, dc2),
47 S2(648, 492, true, cs_s2, dc2)
53 GxEPD2_EPD(23, 25, 33, 32, LOW, 10000000, WIDTH, HEIGHT, panel, hasColor, hasPartialUpdate, hasFastPartialUpdate),
54 _sck(SCK), _miso(MISO), _mosi(MOSI), _dc1(dc), _dc2(dc), _rst1(rst), _rst2(rst),
55 _cs_m1(cs_m1), _cs_s1(cs_s1), _cs_m2(cs_m2), _cs_s2(cs_s2),
56 _busy_m1(busy), _busy_s1(busy), _busy_m2(busy), _busy_s2(busy),
58 M1(648, 492, false, cs_m1, dc),
59 S1(656, 492, false, cs_s1, dc),
60 M2(656, 492, true, cs_m2, dc),
61 S2(648, 492, true, cs_s2, dc)
67 init(serial_diag_bitrate,
true, 20,
false);
70void GxEPD2_1248::init(uint32_t serial_diag_bitrate,
bool initial, uint16_t reset_duration,
bool pulldown_rst_mode)
75 if (serial_diag_bitrate > 0)
77 Serial.begin(serial_diag_bitrate);
79 Serial.println(); Serial.println(
"GxEPD2_1248::init()");
81 pinMode(_cs_m1, OUTPUT);
82 pinMode(_cs_s1, OUTPUT);
83 pinMode(_cs_m2, OUTPUT);
84 pinMode(_cs_s2, OUTPUT);
85 pinMode(_dc1, OUTPUT);
86 pinMode(_dc2, OUTPUT);
87 pinMode(_rst1, OUTPUT);
88 pinMode(_rst2, OUTPUT);
89 pinMode(_busy_m1, INPUT);
90 pinMode(_busy_s1, INPUT);
91 pinMode(_busy_m2, INPUT);
92 pinMode(_busy_s2, INPUT);
93 digitalWrite(_cs_m1, HIGH);
94 digitalWrite(_cs_s1, HIGH);
95 digitalWrite(_cs_m2, HIGH);
96 digitalWrite(_cs_s2, HIGH);
100 _getMasterTemperature();
115 M1.writeScreenBuffer(0x10, value);
116 S1.writeScreenBuffer(0x10, value);
117 M2.writeScreenBuffer(0x10, value);
118 S2.writeScreenBuffer(0x10, value);
120 M1.writeScreenBuffer(0x13, value);
121 S1.writeScreenBuffer(0x13, value);
122 M2.writeScreenBuffer(0x13, value);
123 S2.writeScreenBuffer(0x13, value);
130 M1.writeScreenBuffer(0x10, value);
131 S1.writeScreenBuffer(0x10, value);
132 M2.writeScreenBuffer(0x10, value);
133 S2.writeScreenBuffer(0x10, value);
136void GxEPD2_1248::writeImage(
const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
140 S2.writeImagePart(0x13, bitmap, 0, 0, w, h, x, y, w, h, invert, mirror_y, pgm);
141 M2.writeImagePart(0x13, bitmap, 0, 0, w, h, x - S2.WIDTH, y, w, h, invert, mirror_y, pgm);
142 M1.writeImagePart(0x13, bitmap, 0, 0, w, h, x, y - S2.HEIGHT, w, h, invert, mirror_y, pgm);
143 S1.writeImagePart(0x13, bitmap, 0, 0, w, h, x - M1.WIDTH, y - M2.HEIGHT, w, h, invert, mirror_y, pgm);
147 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
151 S2.writeImagePart(0x13, bitmap, x_part, y_part, w, h, x, y, w, h, invert, mirror_y, pgm);
152 M2.writeImagePart(0x13, bitmap, x_part, y_part, w, h, x - S2.WIDTH, y, w, h, invert, mirror_y, pgm);
153 M1.writeImagePart(0x13, bitmap, x_part, y_part, w, h, x, y - S2.HEIGHT, w, h, invert, mirror_y, pgm);
154 S1.writeImagePart(0x13, bitmap, x_part, y_part, w, h, x - M1.WIDTH, y - M2.HEIGHT, w, h, invert, mirror_y, pgm);
161 S2.writeImagePart(0x10, bitmap, 0, 0, w, h, x, y, w, h, invert, mirror_y, pgm);
162 M2.writeImagePart(0x10, bitmap, 0, 0, w, h, x - S2.WIDTH, y, w, h, invert, mirror_y, pgm);
163 M1.writeImagePart(0x10, bitmap, 0, 0, w, h, x, y - S2.HEIGHT, w, h, invert, mirror_y, pgm);
164 S1.writeImagePart(0x10, bitmap, 0, 0, w, h, x - M1.WIDTH, y - M2.HEIGHT, w, h, invert, mirror_y, pgm);
168 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
172 S2.writeImagePart(0x10, bitmap, x_part, y_part, w, h, x, y, w, h, invert, mirror_y, pgm);
173 M2.writeImagePart(0x10, bitmap, x_part, y_part, w, h, x - S2.WIDTH, y, w, h, invert, mirror_y, pgm);
174 M1.writeImagePart(0x10, bitmap, x_part, y_part, w, h, x, y - S2.HEIGHT, w, h, invert, mirror_y, pgm);
175 S1.writeImagePart(0x10, bitmap, x_part, y_part, w, h, x - M1.WIDTH, y - M2.HEIGHT, w, h, invert, mirror_y, pgm);
178void GxEPD2_1248::writeImage(
const uint8_t* black,
const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
182 writeImage(black, x, y, w, h, invert, mirror_y, pgm);
187 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
191 writeImagePart(black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
195void GxEPD2_1248::writeNative(
const uint8_t* data1,
const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
199 writeImage(data1, x, y, w, h, invert, mirror_y, pgm);
203void GxEPD2_1248::drawImage(
const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
205 writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm);
211 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
213 writeImagePart(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
215 writeImagePartAgain(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
218void GxEPD2_1248::drawImage(
const uint8_t* black,
const uint8_t* color, int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
222 drawImage(black, x, y, w, h, invert, mirror_y, pgm);
226void GxEPD2_1248::drawImagePart(
const uint8_t* black,
const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
227 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
231 drawImagePart(black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
235void GxEPD2_1248::drawNative(
const uint8_t* data1,
const uint8_t* data2, int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
239 drawImage(data1, x, y, w, h, invert, mirror_y, pgm);
271 _writeCommandAll(0x07);
277void GxEPD2_1248::_reset(
void)
279 digitalWrite(_rst1, LOW);
280 digitalWrite(_rst2, LOW);
282 digitalWrite(_rst1, HIGH);
283 digitalWrite(_rst2, HIGH);
288void GxEPD2_1248::_initSPI()
291 if ((SCK != _sck) || (MISO != _miso) || (MOSI != _mosi))
294 SPI.begin(_sck, _miso, _mosi, _cs_m1);
302void GxEPD2_1248::_setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h)
304 uint16_t xe = (x + w - 1) | 0x0007;
305 uint16_t ye = y + h - 1;
319void GxEPD2_1248::_PowerOn()
323 _writeCommandMaster(0x04);
329void GxEPD2_1248::_PowerOff()
333 _writeCommandMaster(0x02);
340void GxEPD2_1248::_InitDisplay()
344 M1.writeCommand(0x00);
346 S1.writeCommand(0x00);
348 M2.writeCommand(0x00);
350 S2.writeCommand(0x00);
353 M1.writeCommand(0x06);
358 M2.writeCommand(0x06);
364 M1.writeCommand(0x61);
369 S1.writeCommand(0x61);
374 M2.writeCommand(0x61);
379 S2.writeCommand(0x61);
384 _writeCommandAll(0x15);
386 _writeCommandAll(0x50);
391 _writeCommandAll(0x60);
394 _writeCommandAll(0xE3);
397 _writeCommandAll(0xe0);
400 _writeCommandAll(0xe5);
401 _writeDataAll(_temperature);
422const unsigned char GxEPD2_1248::lut_20_LUTC_partial[]
PROGMEM =
427const unsigned char GxEPD2_1248::lut_21_LUTWW_partial[]
PROGMEM =
432const unsigned char GxEPD2_1248::lut_22_LUTKW_partial[]
PROGMEM =
438const unsigned char GxEPD2_1248::lut_23_LUTWK_partial[]
PROGMEM =
444const unsigned char GxEPD2_1248::lut_24_LUTKK_partial[]
PROGMEM =
449const unsigned char GxEPD2_1248::lut_25_LUTBD_partial[]
PROGMEM =
454void GxEPD2_1248::_Init_Full()
458 M1.writeCommand(0x00);
460 S1.writeCommand(0x00);
462 M2.writeCommand(0x00);
464 S2.writeCommand(0x00);
470void GxEPD2_1248::_Init_Part()
474 M1.writeCommand(0x00);
476 S1.writeCommand(0x00);
478 M2.writeCommand(0x00);
480 S2.writeCommand(0x00);
482 _writeCommandAll(0x82);
483 _writeDataAll (0x1C);
484 _writeCommandAll(0x50);
487 _writeCommandAll(0x20);
488 _writeDataPGM_All(lut_20_LUTC_partial,
sizeof(lut_20_LUTC_partial), 60 -
sizeof(lut_20_LUTC_partial));
489 _writeCommandAll(0x21);
490 _writeDataPGM_All(lut_21_LUTWW_partial,
sizeof(lut_21_LUTWW_partial), 60 -
sizeof(lut_21_LUTWW_partial));
491 _writeCommandAll(0x22);
492 _writeDataPGM_All(lut_22_LUTKW_partial,
sizeof(lut_22_LUTKW_partial), 60 -
sizeof(lut_22_LUTKW_partial));
493 _writeCommandAll(0x23);
494 _writeDataPGM_All(lut_23_LUTWK_partial,
sizeof(lut_23_LUTWK_partial), 60 -
sizeof(lut_23_LUTWK_partial));
495 _writeCommandAll(0x24);
496 _writeDataPGM_All(lut_24_LUTKK_partial,
sizeof(lut_24_LUTKK_partial), 60 -
sizeof(lut_24_LUTKK_partial));
497 _writeCommandAll(0x25);
498 _writeDataPGM_All(lut_25_LUTBD_partial,
sizeof(lut_25_LUTBD_partial), 60 -
sizeof(lut_25_LUTBD_partial));
503void GxEPD2_1248::_Update_Full()
505 _writeCommandAll(0x12);
509void GxEPD2_1248::_Update_Part()
511 _writeCommandAll(0x12);
515void GxEPD2_1248::_writeCommandMaster(uint8_t c)
518 digitalWrite(_dc1, LOW);
519 digitalWrite(_dc2, LOW);
520 digitalWrite(_cs_m1, LOW);
521 digitalWrite(_cs_m2, LOW);
523 digitalWrite(_cs_m1, HIGH);
524 digitalWrite(_cs_m2, HIGH);
525 digitalWrite(_dc1, HIGH);
526 digitalWrite(_dc2, HIGH);
527 SPI.endTransaction();
530void GxEPD2_1248::_writeDataMaster(uint8_t d)
533 digitalWrite(_cs_m1, LOW);
534 digitalWrite(_cs_m2, LOW);
536 digitalWrite(_cs_m1, HIGH);
537 digitalWrite(_cs_m2, HIGH);
538 SPI.endTransaction();
541void GxEPD2_1248::_writeCommandAll(uint8_t c)
544 digitalWrite(_dc1, LOW);
545 digitalWrite(_dc2, LOW);
546 digitalWrite(_cs_m1, LOW);
547 digitalWrite(_cs_s1, LOW);
548 digitalWrite(_cs_m2, LOW);
549 digitalWrite(_cs_s2, LOW);
551 digitalWrite(_cs_m1, HIGH);
552 digitalWrite(_cs_s1, HIGH);
553 digitalWrite(_cs_m2, HIGH);
554 digitalWrite(_cs_s2, HIGH);
555 digitalWrite(_dc1, HIGH);
556 digitalWrite(_dc2, HIGH);
557 SPI.endTransaction();
560void GxEPD2_1248::_writeDataAll(uint8_t d)
563 digitalWrite(_cs_m1, LOW);
564 digitalWrite(_cs_s1, LOW);
565 digitalWrite(_cs_m2, LOW);
566 digitalWrite(_cs_s2, LOW);
568 digitalWrite(_cs_m1, HIGH);
569 digitalWrite(_cs_s1, HIGH);
570 digitalWrite(_cs_m2, HIGH);
571 digitalWrite(_cs_s2, HIGH);
572 SPI.endTransaction();
575void GxEPD2_1248::_writeDataPGM_All(
const uint8_t* data, uint16_t n, int16_t fill_with_zeroes)
578 digitalWrite(_cs_m1, LOW);
579 digitalWrite(_cs_s1, LOW);
580 digitalWrite(_cs_m2, LOW);
581 digitalWrite(_cs_s2, LOW);
582 for (uint16_t i = 0; i < n; i++)
584 SPI.transfer(pgm_read_byte(&*data++));
586 while (fill_with_zeroes > 0)
591 digitalWrite(_cs_m1, HIGH);
592 digitalWrite(_cs_s1, HIGH);
593 digitalWrite(_cs_m2, HIGH);
594 digitalWrite(_cs_s2, HIGH);
595 SPI.endTransaction();
598void GxEPD2_1248::_waitWhileAnyBusy(
const char* comment, uint16_t busy_time)
603 unsigned long start = micros();
607 bool nb_m1 = _busy_m1 >= 0 ?
_busy_level != digitalRead(_busy_m1) : true;
608 bool nb_s1 = _busy_m1 >= 0 ?
_busy_level != digitalRead(_busy_s1) : true;
609 bool nb_m2 = _busy_m1 >= 0 ?
_busy_level != digitalRead(_busy_m2) : true;
610 bool nb_s2 = _busy_m1 >= 0 ?
_busy_level != digitalRead(_busy_s2) : true;
611 if (nb_m1 && nb_s1 && nb_m2 && nb_s2)
break;
615 Serial.println(
"Busy Timeout!");
623 unsigned long elapsed = micros() - start;
624 Serial.print(comment);
626 Serial.println(elapsed);
631 else delay(busy_time);
634void GxEPD2_1248::_getMasterTemperature()
637 M1.writeCommand(0x40);
638 _waitWhileAnyBusy(
"getMasterTemperature", 300);
640 pinMode(_mosi, INPUT);
642 digitalWrite(_sck, HIGH);
643 pinMode(_sck, OUTPUT);
644 digitalWrite(_cs_m1, LOW);
645 pinMode(_mosi, INPUT);
646 for (uint16_t i = 0; i < 8; i++)
648 digitalWrite(_sck, LOW);
650 delayMicroseconds(2);
651 if (digitalRead(_mosi)) value |= 0x01;
652 delayMicroseconds(2);
653 digitalWrite(_sck, HIGH);
654 delayMicroseconds(2);
656 digitalWrite(_cs_m1, HIGH);
657 pinMode(_sck, INPUT);
658 _temperature = value;
662 Serial.print(
"Master Temperature is "); Serial.println(value);
666void GxEPD2_1248::_readController(uint8_t cmd, uint8_t* data, uint16_t n, int8_t cs, int8_t dc)
668 if (cs < 0) cs = _cs_m1;
669 if (dc < 0) dc = _dc1;
671 digitalWrite(cs, LOW);
672 digitalWrite(dc, LOW);
674 digitalWrite(dc, HIGH);
675 digitalWrite(cs, HIGH);
676 SPI.endTransaction();
677 _waitWhileAnyBusy(
"_readController", 300);
679 pinMode(_mosi, INPUT);
681 digitalWrite(_sck, HIGH);
682 pinMode(_sck, OUTPUT);
683 digitalWrite(cs, LOW);
684 pinMode(_mosi, INPUT);
685 for (uint16_t j = 0; j < n; j++)
688 for (uint16_t i = 0; i < 8; i++)
690 digitalWrite(_sck, LOW);
692 delayMicroseconds(2);
693 if (digitalRead(_mosi)) value |= 0x01;
694 delayMicroseconds(2);
695 digitalWrite(_sck, HIGH);
696 delayMicroseconds(2);
700 digitalWrite(cs, HIGH);
701 pinMode(_sck, INPUT);
705GxEPD2_1248::ScreenPart::ScreenPart(uint16_t width, uint16_t height,
bool rev_scan, int16_t cs, int16_t dc) :
706 WIDTH(width), HEIGHT(height), _rev_scan(rev_scan),
707 _cs(cs), _dc(dc), _spi_settings(4000000, MSBFIRST, SPI_MODE0)
711void GxEPD2_1248::ScreenPart::writeScreenBuffer(uint8_t command, uint8_t value)
713 writeCommand(command);
714 for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(HEIGHT) / 8; i++)
720void GxEPD2_1248::ScreenPart::writeImagePart(uint8_t command,
const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
721 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
724 if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0))
return;
725 if ((x_part < 0) || (x_part >= w_bitmap))
return;
726 if ((y_part < 0) || (y_part >= h_bitmap))
return;
727 int32_t wb_bitmap = (w_bitmap + 7) / 8;
728 x_part -= x_part % 8;
729 w = w_bitmap - x_part < w ? w_bitmap - x_part : w;
730 h = h_bitmap - y_part < h ? h_bitmap - y_part : h;
732 w = 8 * ((w + 7) / 8);
733 int16_t x1 = x < 0 ? 0 : x;
734 int16_t y1 = y < 0 ? 0 : y;
735 int16_t w1 = x + w < int16_t(
WIDTH) ? w : int16_t(
WIDTH) - x;
736 int16_t h1 = y + h < int16_t(
HEIGHT) ? h : int16_t(
HEIGHT) - y;
741 if ((w1 <= 0) || (h1 <= 0))
return;
746 _setPartialRamArea(x1, y1, w1, h1);
747 writeCommand(command);
749 for (int16_t i = 0; i < h1; i++)
751 for (int16_t j = 0; j < w1 / 8; j++)
755 int32_t idx = mirror_y ? x_part / 8 + j + dx / 8 + ((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 8 + j + dx / 8 + (y_part + i + dy) * wb_bitmap;
758#if defined(__AVR) || defined(ESP8266) || defined(ESP32)
759 data = pgm_read_byte(&bitmap[idx]);
768 if (invert) data = ~data;
777void GxEPD2_1248::ScreenPart::writeCommand(uint8_t c)
780 if (
_dc >= 0) digitalWrite(
_dc, LOW);
781 if (
_cs >= 0) digitalWrite(
_cs, LOW);
783 if (
_cs >= 0) digitalWrite(
_cs, HIGH);
784 if (
_dc >= 0) digitalWrite(
_dc, HIGH);
785 SPI.endTransaction();
788void GxEPD2_1248::ScreenPart::writeData(uint8_t d)
791 if (
_cs >= 0) digitalWrite(
_cs, LOW);
793 if (
_cs >= 0) digitalWrite(
_cs, HIGH);
794 SPI.endTransaction();
797void GxEPD2_1248::ScreenPart::_setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h)
799 if (_rev_scan) x =
WIDTH - w - x;
800 uint16_t xe = (x + w - 1) | 0x0007;
801 uint16_t ye = y + h - 1;
815void GxEPD2_1248::ScreenPart::_startTransfer()
818 if (
_cs >= 0) digitalWrite(
_cs, LOW);
821void GxEPD2_1248::ScreenPart::_transfer(uint8_t value)
826void GxEPD2_1248::ScreenPart::_endTransfer()
828 if (
_cs >= 0) digitalWrite(
_cs, HIGH);
829 SPI.endTransaction();
const unsigned char GxEPD2_1248::lut_20_LUTC_partial[] PROGMEM
void init(uint32_t serial_diag_bitrate=0)
void writeImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, int16_t x, int16_t y, int16_t w, int16_t h, bool invert=false, bool mirror_y=false, bool pgm=false)
void refresh(bool partial_update_mode=false)
static const uint16_t partial_refresh_time
static const uint16_t full_refresh_time
void writeNative(const uint8_t *data1, const uint8_t *data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert=false, bool mirror_y=false, bool pgm=false)
void drawImagePart(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, int16_t x, int16_t y, int16_t w, int16_t h, bool invert=false, bool mirror_y=false, bool pgm=false)
static const uint16_t power_on_time
void writeImageAgain(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert=false, bool mirror_y=false, bool pgm=false)
GxEPD2_1248(int16_t cs_m1, int16_t cs_s1, int16_t cs_m2, int16_t cs_s2, int16_t dc1, int16_t dc2, int16_t rst1, int16_t rst2, int16_t busy_m1, int16_t busy_s1, int16_t busy_m2, int16_t busy_s2)
void writeScreenBufferAgain(uint8_t value=0xFF)
void clearScreen(uint8_t value=0xFF)
static const uint16_t HEIGHT
void writeImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert=false, bool mirror_y=false, bool pgm=false)
void writeScreenBuffer(uint8_t value=0xFF)
void drawImage(const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h, bool invert=false, bool mirror_y=false, bool pgm=false)
static const uint16_t WIDTH
void drawNative(const uint8_t *data1, const uint8_t *data2, int16_t x, int16_t y, int16_t w, int16_t h, bool invert=false, bool mirror_y=false, bool pgm=false)
void writeImagePartAgain(const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap, int16_t x, int16_t y, int16_t w, int16_t h, bool invert=false, bool mirror_y=false, bool pgm=false)
void _writeCommand(uint8_t c)
void _writeData(uint8_t d)
void _transfer(uint8_t value)
SPISettings _spi_settings