17 GxEPD2_EPD(cs, dc, rst, busy, LOW, 10000000, WIDTH, HEIGHT, panel, hasColor, hasPartialUpdate, hasFastPartialUpdate)
35 for (uint32_t i = 0; i < uint32_t(
WIDTH) * uint32_t(
HEIGHT) / 8; i++)
41 for (uint32_t i = 0; i < uint32_t(
WIDTH) * uint32_t(
HEIGHT) / 8; i++)
47void GxEPD2_260::writeImage(
const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
51 int16_t wb = (w + 7) / 8;
54 int16_t x1 = x < 0 ? 0 : x;
55 int16_t y1 = y < 0 ? 0 : y;
56 int16_t w1 = x + w < int16_t(
WIDTH) ? w : int16_t(
WIDTH) - x;
57 int16_t h1 = y + h < int16_t(
HEIGHT) ? h : int16_t(
HEIGHT) - y;
62 if ((w1 <= 0) || (h1 <= 0))
return;
65 _setPartialRamArea(x1, y1, w1, h1);
67 for (int16_t i = 0; i < h1; i++)
69 for (int16_t j = 0; j < w1 / 8; j++)
73 int16_t idx = mirror_y ? j + dx / 8 + ((h - 1 - (i + dy))) * wb : j + dx / 8 + (i + dy) * wb;
76#if defined(__AVR) || defined(ESP8266) || defined(ESP32)
77 data = pgm_read_byte(&bitmap[idx]);
86 if (invert) data = ~data;
95 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
99 if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0))
return;
100 if ((x_part < 0) || (x_part >= w_bitmap))
return;
101 if ((y_part < 0) || (y_part >= h_bitmap))
return;
102 int16_t wb_bitmap = (w_bitmap + 7) / 8;
103 x_part -= x_part % 8;
104 w = w_bitmap - x_part < w ? w_bitmap - x_part : w;
105 h = h_bitmap - y_part < h ? h_bitmap - y_part : h;
107 w = 8 * ((w + 7) / 8);
108 int16_t x1 = x < 0 ? 0 : x;
109 int16_t y1 = y < 0 ? 0 : y;
110 int16_t w1 = x + w < int16_t(
WIDTH) ? w : int16_t(
WIDTH) - x;
111 int16_t h1 = y + h < int16_t(
HEIGHT) ? h : int16_t(
HEIGHT) - y;
116 if ((w1 <= 0) || (h1 <= 0))
return;
119 _setPartialRamArea(x1, y1, w1, h1);
121 for (int16_t i = 0; i < h1; i++)
123 for (int16_t j = 0; j < w1 / 8; j++)
127 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;
130#if defined(__AVR) || defined(ESP8266) || defined(ESP32)
131 data = pgm_read_byte(&bitmap[idx]);
140 if (invert) data = ~data;
148void GxEPD2_260::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)
152 writeImage(black, x, y, w, h, invert, mirror_y, pgm);
156void GxEPD2_260::writeImagePart(
const uint8_t* black,
const uint8_t* color, int16_t x_part, int16_t y_part, int16_t w_bitmap, int16_t h_bitmap,
157 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
161 writeImagePart(black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
165void GxEPD2_260::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)
169 writeImage(data1, x, y, w, h, invert, mirror_y, pgm);
173void GxEPD2_260::drawImage(
const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
175 writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm);
177 writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm);
181 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
183 writeImagePart(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
185 writeImagePart(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
188void GxEPD2_260::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)
190 writeImage(black, color, x, y, w, h, invert, mirror_y, pgm);
192 writeImage(black, color, x, y, w, h, invert, mirror_y, pgm);
195void GxEPD2_260::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,
196 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
198 writeImagePart(black, color, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
200 writeImagePart(black, color, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
203void GxEPD2_260::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)
205 writeNative(data1, data2, x, y, w, h, invert, mirror_y, pgm);
207 writeNative(data1, data2, x, y, w, h, invert, mirror_y, pgm);
225 int16_t w1 = x < 0 ? w + x : w;
226 int16_t h1 = y < 0 ? h + y : h;
227 int16_t x1 = x < 0 ? 0 : x;
228 int16_t y1 = y < 0 ? 0 : y;
229 w1 = x1 + w1 < int16_t(
WIDTH) ? w1 : int16_t(
WIDTH) - x1;
230 h1 = y1 + h1 < int16_t(
HEIGHT) ? h1 : int16_t(
HEIGHT) - y1;
231 if ((w1 <= 0) || (h1 <= 0))
return;
234 if (w1 % 8 > 0) w1 += 8 - w1 % 8;
238 _setPartialRamArea(x1, y1, w1, h1);
259void GxEPD2_260::_setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h)
261 uint16_t xe = (x + w - 1) | 0x0007;
262 uint16_t ye = y + h - 1;
274void GxEPD2_260::_PowerOn()
284void GxEPD2_260::_PowerOff()
292void GxEPD2_260::_InitDisplay()
325const unsigned char GxEPD2_260::lut_20_vcom0_full[]
PROGMEM =
327 0x00, 0x08, 0x00, 0x00, 0x00, 0x02,
328 0x60, 0x28, 0x28, 0x00, 0x00, 0x01,
329 0x00, 0x14, 0x00, 0x00, 0x00, 0x01,
330 0x00, 0x12, 0x12, 0x00, 0x00, 0x01,
331 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
332 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
333 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
337const unsigned char GxEPD2_260::lut_21_ww_full[]
PROGMEM =
339 0x40, 0x08, 0x00, 0x00, 0x00, 0x02,
340 0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
341 0x40, 0x14, 0x00, 0x00, 0x00, 0x01,
342 0xA0, 0x12, 0x12, 0x00, 0x00, 0x01,
343 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
344 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
345 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
348const unsigned char GxEPD2_260::lut_22_bw_full[]
PROGMEM =
350 0x40, 0x08, 0x00, 0x00, 0x00, 0x02,
351 0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
352 0x40, 0x14, 0x00, 0x00, 0x00, 0x01,
353 0xA0, 0x12, 0x12, 0x00, 0x00, 0x01,
354 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
355 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
356 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
359const unsigned char GxEPD2_260::lut_23_wb_full[]
PROGMEM =
361 0x80, 0x08, 0x00, 0x00, 0x00, 0x02,
362 0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
363 0x80, 0x14, 0x00, 0x00, 0x00, 0x01,
364 0x50, 0x12, 0x12, 0x00, 0x00, 0x01,
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_260::lut_24_bb_full[]
PROGMEM =
372 0x80, 0x08, 0x00, 0x00, 0x00, 0x02,
373 0x90, 0x28, 0x28, 0x00, 0x00, 0x01,
374 0x80, 0x14, 0x00, 0x00, 0x00, 0x01,
375 0x50, 0x12, 0x12, 0x00, 0x00, 0x01,
376 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
377 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
378 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
407const unsigned char GxEPD2_260::lut_20_vcom0_partial[]
PROGMEM =
412const unsigned char GxEPD2_260::lut_21_ww_partial[]
PROGMEM =
417const unsigned char GxEPD2_260::lut_22_bw_partial[]
PROGMEM =
422const unsigned char GxEPD2_260::lut_23_wb_partial[]
PROGMEM =
427const unsigned char GxEPD2_260::lut_24_bb_partial[]
PROGMEM =
432void GxEPD2_260::_Init_Full()
449void GxEPD2_260::_Init_Part()
453 _writeDataPGM(lut_20_vcom0_partial,
sizeof(lut_20_vcom0_partial), 44 -
sizeof(lut_20_vcom0_partial));
455 _writeDataPGM(lut_21_ww_partial,
sizeof(lut_21_ww_partial), 42 -
sizeof(lut_21_ww_partial));
457 _writeDataPGM(lut_22_bw_partial,
sizeof(lut_22_bw_partial), 42 -
sizeof(lut_22_bw_partial));
459 _writeDataPGM(lut_23_wb_partial,
sizeof(lut_23_wb_partial), 42 -
sizeof(lut_23_wb_partial));
461 _writeDataPGM(lut_24_bb_partial,
sizeof(lut_24_bb_partial), 42 -
sizeof(lut_24_bb_partial));
466void GxEPD2_260::_Update_Full()
472void GxEPD2_260::_Update_Part()
const unsigned char GxEPD2_260::lut_20_vcom0_full[] PROGMEM
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)
GxEPD2_260(int16_t cs, int16_t dc, int16_t rst, int16_t busy)
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)
static const bool usePartialUpdateWindow
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)
static const uint16_t power_off_time
void refresh(bool partial_update_mode=false)
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 writeScreenBuffer(uint8_t value=0xFF)
static const uint16_t WIDTH
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 HEIGHT
static const uint16_t full_refresh_time
void clearScreen(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 partial_refresh_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)