17 GxEPD2_EPD(cs, dc, rst, busy, LOW, 10000000, WIDTH, HEIGHT, panel, hasColor, hasPartialUpdate, hasFastPartialUpdate)
32 _writeScreenBuffer(0x13, value);
39 _writeScreenBuffer(0x13, value);
42void GxEPD2_290_I6FD::_writeScreenBuffer(uint8_t command, uint8_t value)
45 for (uint32_t i = 0; i < uint32_t(
WIDTH) * uint32_t(
HEIGHT) / 8; i++)
53 _writeImage(0x13, bitmap, x, y, w, h, invert, mirror_y, pgm);
58 _writeImage(0x10, bitmap, x, y, w, h, invert, mirror_y, pgm);
59 _writeImage(0x13, bitmap, x, y, w, h, invert, mirror_y, pgm);
64 _writeImage(0x13, bitmap, x, y, w, h, invert, mirror_y, pgm);
67void GxEPD2_290_I6FD::_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)
71 int16_t wb = (w + 7) / 8;
74 int16_t x1 = x < 0 ? 0 : x;
75 int16_t y1 = y < 0 ? 0 : y;
76 int16_t w1 = x + w < int16_t(
WIDTH) ? w : int16_t(
WIDTH) - x;
77 int16_t h1 = y + h < int16_t(
HEIGHT) ? h : int16_t(
HEIGHT) - y;
82 if ((w1 <= 0) || (h1 <= 0))
return;
85 _setPartialRamArea(x1, y1, w1, h1);
87 for (int16_t i = 0; i < h1; i++)
89 for (int16_t j = 0; j < w1 / 8; j++)
93 int16_t idx = mirror_y ? j + dx / 8 + ((h - 1 - (i + dy))) * wb : j + dx / 8 + (i + dy) * wb;
96#if defined(__AVR) || defined(ESP8266) || defined(ESP32)
97 data = pgm_read_byte(&bitmap[idx]);
106 if (invert) data = ~data;
115 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
117 _writeImagePart(0x13, bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
121 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
123 _writeImagePart(0x13, bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
126void GxEPD2_290_I6FD::_writeImagePart(uint8_t command,
const uint8_t bitmap[], int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
127 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
131 if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0))
return;
132 if ((x_part < 0) || (x_part >= w_bitmap))
return;
133 if ((y_part < 0) || (y_part >= h_bitmap))
return;
134 int16_t wb_bitmap = (w_bitmap + 7) / 8;
135 x_part -= x_part % 8;
136 w = w_bitmap - x_part < w ? w_bitmap - x_part : w;
137 h = h_bitmap - y_part < h ? h_bitmap - y_part : h;
139 w = 8 * ((w + 7) / 8);
140 int16_t x1 = x < 0 ? 0 : x;
141 int16_t y1 = y < 0 ? 0 : y;
142 int16_t w1 = x + w < int16_t(
WIDTH) ? w : int16_t(
WIDTH) - x;
143 int16_t h1 = y + h < int16_t(
HEIGHT) ? h : int16_t(
HEIGHT) - y;
148 if ((w1 <= 0) || (h1 <= 0))
return;
151 _setPartialRamArea(x1, y1, w1, h1);
153 for (int16_t i = 0; i < h1; i++)
155 for (int16_t j = 0; j < w1 / 8; j++)
159 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;
162#if defined(__AVR) || defined(ESP8266) || defined(ESP32)
163 data = pgm_read_byte(&bitmap[idx]);
172 if (invert) data = ~data;
180void GxEPD2_290_I6FD::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)
184 writeImage(black, x, y, w, h, invert, mirror_y, pgm);
189 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
193 writeImagePart(black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
197void GxEPD2_290_I6FD::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)
201 writeImage(data1, x, y, w, h, invert, mirror_y, pgm);
207 writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm);
213 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
215 writeImagePart(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
217 writeImagePartAgain(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
220void GxEPD2_290_I6FD::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)
224 drawImage(black, x, y, w, h, invert, mirror_y, pgm);
229 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
233 drawImagePart(black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
237void GxEPD2_290_I6FD::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)
241 drawImage(data1, x, y, w, h, invert, mirror_y, pgm);
260 int16_t w1 = x < 0 ? w + x : w;
261 int16_t h1 = y < 0 ? h + y : h;
262 int16_t x1 = x < 0 ? 0 : x;
263 int16_t y1 = y < 0 ? 0 : y;
264 w1 = x1 + w1 < int16_t(
WIDTH) ? w1 : int16_t(
WIDTH) - x1;
265 h1 = y1 + h1 < int16_t(
HEIGHT) ? h1 : int16_t(
HEIGHT) - y1;
266 if ((w1 <= 0) || (h1 <= 0))
return;
269 if (w1 % 8 > 0) w1 += 8 - w1 % 8;
273 _setPartialRamArea(x1, y1, w1, h1);
294void GxEPD2_290_I6FD::_setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h)
296 uint16_t xe = (x + w - 1) | 0x0007;
297 uint16_t ye = y + h - 1;
312void GxEPD2_290_I6FD::_PowerOn()
322void GxEPD2_290_I6FD::_PowerOff()
330void GxEPD2_290_I6FD::_InitDisplay()
347const unsigned char GxEPD2_290_I6FD::lut_20_vcomDC_partial[]
PROGMEM =
349 0x00,
Tx19, 0x01, 0x00, 0x00, 0x01,
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,
354 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
355 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
359const unsigned char GxEPD2_290_I6FD::lut_21_ww_partial[]
PROGMEM =
361 0x00,
Tx19, 0x01, 0x00, 0x00, 0x01,
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,
366 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
367 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
370const unsigned char GxEPD2_290_I6FD::lut_22_bw_partial[]
PROGMEM =
372 0x80,
Tx19, 0x01, 0x00, 0x00, 0x01,
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,
377 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
378 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
381const unsigned char GxEPD2_290_I6FD::lut_23_wb_partial[]
PROGMEM =
383 0x40,
Tx19, 0x01, 0x00, 0x00, 0x01,
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,
388 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
389 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
392const unsigned char GxEPD2_290_I6FD::lut_24_bb_partial[]
PROGMEM =
394 0x00,
Tx19, 0x01, 0x00, 0x00, 0x01,
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,
399 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
400 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
403void GxEPD2_290_I6FD::_Init_Full()
410void GxEPD2_290_I6FD::_Init_Part()
420 _writeDataPGM(lut_20_vcomDC_partial,
sizeof(lut_20_vcomDC_partial));
433void GxEPD2_290_I6FD::_Update_Full()
439void GxEPD2_290_I6FD::_Update_Part()
const unsigned char GxEPD2_290_I6FD::lut_20_vcomDC_partial[] PROGMEM
static const uint16_t full_refresh_time
static const bool hasFastPartialUpdate
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 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 writeScreenBuffer(uint8_t value=0xFF)
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 writeScreenBufferAgain(uint8_t value=0xFF)
static const uint16_t power_on_time
static const uint16_t WIDTH
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)
static const uint16_t partial_refresh_time
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 clearScreen(uint8_t value=0xFF)
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 refresh(bool partial_update_mode=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 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)
GxEPD2_290_I6FD(int16_t cs, int16_t dc, int16_t rst, int16_t busy)
static const uint16_t power_off_time
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)