16 GxEPD2_EPD(cs, dc, rst, busy, LOW, 10000000, WIDTH, HEIGHT, panel, hasColor, hasPartialUpdate, hasFastPartialUpdate)
31 _writeScreenBuffer(0x13, value);
38 _writeScreenBuffer(0x13, value);
41void GxEPD2_213_T5D::_writeScreenBuffer(uint8_t command, uint8_t value)
44 for (uint32_t i = 0; i < uint32_t(
WIDTH) * uint32_t(
HEIGHT) / 8; i++)
52 _writeImage(0x13, bitmap, x, y, w, h, invert, mirror_y, pgm);
57 _writeImage(0x10, bitmap, x, y, w, h, invert, mirror_y, pgm);
58 _writeImage(0x13, bitmap, x, y, w, h, invert, mirror_y, pgm);
63 _writeImage(0x13, bitmap, x, y, w, h, invert, mirror_y, pgm);
66void GxEPD2_213_T5D::_writeImage(uint8_t command,
const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
70 int16_t wb = (w + 7) / 8;
73 int16_t x1 = x < 0 ? 0 : x;
74 int16_t y1 = y < 0 ? 0 : y;
75 int16_t w1 = x + w < int16_t(
WIDTH) ? w : int16_t(
WIDTH) - x;
76 int16_t h1 = y + h < int16_t(
HEIGHT) ? h : int16_t(
HEIGHT) - y;
81 if ((w1 <= 0) || (h1 <= 0))
return;
84 _setPartialRamArea(x1, y1, w1, h1);
86 for (int16_t i = 0; i < h1; i++)
88 for (int16_t j = 0; j < w1 / 8; j++)
92 int16_t idx = mirror_y ? j + dx / 8 + ((h - 1 - (i + dy))) * wb : j + dx / 8 + (i + dy) * wb;
95#if defined(__AVR) || defined(ESP8266) || defined(ESP32)
96 data = pgm_read_byte(&bitmap[idx]);
105 if (invert) data = ~data;
114 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
116 _writeImagePart(0x13, bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
120 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
122 _writeImagePart(0x13, bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
125void GxEPD2_213_T5D::_writeImagePart(uint8_t command,
const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
126 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
130 if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0))
return;
131 if ((x_part < 0) || (x_part >= w_bitmap))
return;
132 if ((y_part < 0) || (y_part >= h_bitmap))
return;
133 int16_t wb_bitmap = (w_bitmap + 7) / 8;
134 x_part -= x_part % 8;
135 w = w_bitmap - x_part < w ? w_bitmap - x_part : w;
136 h = h_bitmap - y_part < h ? h_bitmap - y_part : h;
138 w = 8 * ((w + 7) / 8);
139 int16_t x1 = x < 0 ? 0 : x;
140 int16_t y1 = y < 0 ? 0 : y;
141 int16_t w1 = x + w < int16_t(
WIDTH) ? w : int16_t(
WIDTH) - x;
142 int16_t h1 = y + h < int16_t(
HEIGHT) ? h : int16_t(
HEIGHT) - y;
147 if ((w1 <= 0) || (h1 <= 0))
return;
150 _setPartialRamArea(x1, y1, w1, h1);
152 for (int16_t i = 0; i < h1; i++)
154 for (int16_t j = 0; j < w1 / 8; j++)
158 int16_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;
161#if defined(__AVR) || defined(ESP8266) || defined(ESP32)
162 data = pgm_read_byte(&bitmap[idx]);
171 if (invert) data = ~data;
179void GxEPD2_213_T5D::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)
183 writeImage(black, x, y, w, h, invert, mirror_y, pgm);
188 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
192 writeImagePart(black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
196void GxEPD2_213_T5D::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)
200 writeImage(data1, x, y, w, h, invert, mirror_y, pgm);
206 writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm);
212 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
214 writeImagePart(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
216 writeImagePartAgain(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
219void GxEPD2_213_T5D::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)
223 drawImage(black, x, y, w, h, invert, mirror_y, pgm);
228 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
232 drawImagePart(black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
236void GxEPD2_213_T5D::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)
240 drawImage(data1, x, y, w, h, invert, mirror_y, pgm);
259 int16_t w1 = x < 0 ? w + x : w;
260 int16_t h1 = y < 0 ? h + y : h;
261 int16_t x1 = x < 0 ? 0 : x;
262 int16_t y1 = y < 0 ? 0 : y;
263 w1 = x1 + w1 < int16_t(
WIDTH) ? w1 : int16_t(
WIDTH) - x1;
264 h1 = y1 + h1 < int16_t(
HEIGHT) ? h1 : int16_t(
HEIGHT) - y1;
265 if ((w1 <= 0) || (h1 <= 0))
return;
268 if (w1 % 8 > 0) w1 += 8 - w1 % 8;
272 _setPartialRamArea(x1, y1, w1, h1);
293void GxEPD2_213_T5D::_setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h)
295 uint16_t xe = (x + w - 1) | 0x0007;
296 uint16_t ye = y + h - 1;
311void GxEPD2_213_T5D::_PowerOn()
321void GxEPD2_213_T5D::_PowerOff()
329void GxEPD2_213_T5D::_InitDisplay()
345const unsigned char GxEPD2_213_T5D::lut_20_vcomDC_partial[]
PROGMEM =
347 0x00,
Tx19, 0x01, 0x00, 0x00, 0x01,
348 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
349 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
350 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
351 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
352 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
353 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
357const unsigned char GxEPD2_213_T5D::lut_21_ww_partial[]
PROGMEM =
359 0x00,
Tx19, 0x01, 0x00, 0x00, 0x01,
360 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
361 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
362 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
363 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
364 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
365 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
368const unsigned char GxEPD2_213_T5D::lut_22_bw_partial[]
PROGMEM =
370 0x80,
Tx19, 0x01, 0x00, 0x00, 0x01,
371 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
372 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
373 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
374 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
375 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
376 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
379const unsigned char GxEPD2_213_T5D::lut_23_wb_partial[]
PROGMEM =
381 0x40,
Tx19, 0x01, 0x00, 0x00, 0x01,
382 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
383 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
384 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
385 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
386 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
387 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
390const unsigned char GxEPD2_213_T5D::lut_24_bb_partial[]
PROGMEM =
392 0x00,
Tx19, 0x01, 0x00, 0x00, 0x01,
393 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
394 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
395 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
396 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
397 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
398 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
401void GxEPD2_213_T5D::_Init_Full()
408void GxEPD2_213_T5D::_Init_Part()
418 _writeDataPGM(lut_20_vcomDC_partial,
sizeof(lut_20_vcomDC_partial));
431void GxEPD2_213_T5D::_Update_Full()
437void GxEPD2_213_T5D::_Update_Part()
const unsigned char GxEPD2_213_T5D::lut_20_vcomDC_partial[] PROGMEM
static const uint16_t HEIGHT
void writeScreenBufferAgain(uint8_t value=0xFF)
static const bool hasFastPartialUpdate
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 clearScreen(uint8_t value=0xFF)
GxEPD2_213_T5D(int16_t cs, int16_t dc, int16_t rst, int16_t busy)
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)
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)
static const uint16_t power_off_time
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)
static const uint16_t power_on_time
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 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)
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)
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 partial_refresh_time
void writeImageForFullRefresh(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 _writeCommand(uint8_t c)
void _writeData(uint8_t d)
void _waitWhileBusy(const char *comment=0, uint16_t busy_time=5000)
void _writeDataPGM(const uint8_t *data, uint16_t n, int16_t fill_with_zeroes=0)