17 GxEPD2_EPD(cs, dc, rst, busy, LOW, 10000000, WIDTH, HEIGHT, panel, hasColor, hasPartialUpdate, hasFastPartialUpdate)
34 for (uint32_t i = 0; i < uint32_t(
WIDTH) * uint32_t(
HEIGHT) / 8; i++)
43 for (uint32_t i = 0; i < uint32_t(
WIDTH) * uint32_t(
HEIGHT) / 8; i++)
51void GxEPD2_583_T8::writeImage(
const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
55 uint16_t wb = (w + 7) / 8;
58 int16_t x1 = x < 0 ? 0 : x;
59 int16_t y1 = y < 0 ? 0 : y;
60 int16_t w1 = x + w < int16_t(
WIDTH) ? w : int16_t(
WIDTH) - x;
61 int16_t h1 = y + h < int16_t(
HEIGHT) ? h : int16_t(
HEIGHT) - y;
66 if ((w1 <= 0) || (h1 <= 0))
return;
69 _setPartialRamArea(x1, y1, w1, h1);
72 for (int16_t i = 0; i < h1; i++)
74 for (int16_t j = 0; j < w1 / 8; j++)
78 uint16_t idx = mirror_y ? j + dx / 8 + uint16_t((h - 1 - (i + dy))) * wb : j + dx / 8 + uint16_t(i + dy) * wb;
81#if defined(__AVR) || defined(ESP8266) || defined(ESP32)
82 data = pgm_read_byte(&bitmap[idx]);
91 if (invert) data = ~data;
101 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
105 if ((w_bitmap < 0) || (h_bitmap < 0) || (w < 0) || (h < 0))
return;
106 if ((x_part < 0) || (x_part >= w_bitmap))
return;
107 if ((y_part < 0) || (y_part >= h_bitmap))
return;
108 uint16_t wb_bitmap = (w_bitmap + 7) / 8;
109 x_part -= x_part % 8;
110 w = w_bitmap - x_part < w ? w_bitmap - x_part : w;
111 h = h_bitmap - y_part < h ? h_bitmap - y_part : h;
113 w = 8 * ((w + 7) / 8);
114 int16_t x1 = x < 0 ? 0 : x;
115 int16_t y1 = y < 0 ? 0 : y;
116 int16_t w1 = x + w < int16_t(
WIDTH) ? w : int16_t(
WIDTH) - x;
117 int16_t h1 = y + h < int16_t(
HEIGHT) ? h : int16_t(
HEIGHT) - y;
122 if ((w1 <= 0) || (h1 <= 0))
return;
125 _setPartialRamArea(x1, y1, w1, h1);
128 for (int16_t i = 0; i < h1; i++)
130 for (int16_t j = 0; j < w1 / 8; j++)
134 uint16_t idx = mirror_y ? x_part / 8 + j + dx / 8 + uint16_t((h_bitmap - 1 - (y_part + i + dy))) * wb_bitmap : x_part / 8 + j + dx / 8 + uint16_t(y_part + i + dy) * wb_bitmap;
137#if defined(__AVR) || defined(ESP8266) || defined(ESP32)
138 data = pgm_read_byte(&bitmap[idx]);
147 if (invert) data = ~data;
156void GxEPD2_583_T8::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)
160 writeImage(black, x, y, w, h, invert, mirror_y, pgm);
165 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
169 writeImagePart(black, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
173void GxEPD2_583_T8::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)
177 writeImage(data1, x, y, w, h, invert, mirror_y, pgm);
181void GxEPD2_583_T8::drawImage(
const uint8_t bitmap[], int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
183 writeImage(bitmap, x, y, w, h, invert, mirror_y, pgm);
185 writeImage(bitmap, 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)
191 writeImagePart(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
193 writeImagePart(bitmap, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
196void GxEPD2_583_T8::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)
198 writeImage(black, color, x, y, w, h, invert, mirror_y, pgm);
200 writeImage(black, color, x, y, w, h, invert, mirror_y, pgm);
204 int16_t x, int16_t y, int16_t w, int16_t h,
bool invert,
bool mirror_y,
bool pgm)
206 writeImagePart(black, color, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
208 writeImagePart(black, color, x_part, y_part, w_bitmap, h_bitmap, x, y, w, h, invert, mirror_y, pgm);
211void GxEPD2_583_T8::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)
213 writeNative(data1, data2, x, y, w, h, invert, mirror_y, pgm);
215 writeNative(data1, data2, x, y, w, h, invert, mirror_y, pgm);
233 int16_t w1 = x < 0 ? w + x : w;
234 int16_t h1 = y < 0 ? h + y : h;
235 int16_t x1 = x < 0 ? 0 : x;
236 int16_t y1 = y < 0 ? 0 : y;
237 w1 = x1 + w1 < int16_t(
WIDTH) ? w1 : int16_t(
WIDTH) - x1;
238 h1 = y1 + h1 < int16_t(
HEIGHT) ? h1 : int16_t(
HEIGHT) - y1;
239 if ((w1 <= 0) || (h1 <= 0))
return;
242 if (w1 % 8 > 0) w1 += 8 - w1 % 8;
246 _setPartialRamArea(x1, y1, w1, h1);
267void GxEPD2_583_T8::_setPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h)
269 uint16_t xe = (x + w - 1) | 0x0007;
270 uint16_t ye = y + h - 1;
285void GxEPD2_583_T8::_PowerOn()
295void GxEPD2_583_T8::_PowerOff()
306void GxEPD2_583_T8::_InitDisplay()
338const unsigned char GxEPD2_583_T8::lut_20_LUTC_partial[]
PROGMEM =
343const unsigned char GxEPD2_583_T8::lut_21_LUTWW_partial[]
PROGMEM =
348const unsigned char GxEPD2_583_T8::lut_22_LUTKW_partial[]
PROGMEM =
354const unsigned char GxEPD2_583_T8::lut_23_LUTWK_partial[]
PROGMEM =
360const unsigned char GxEPD2_583_T8::lut_24_LUTKK_partial[]
PROGMEM =
365const unsigned char GxEPD2_583_T8::lut_25_LUTBD_partial[]
PROGMEM =
370void GxEPD2_583_T8::_Init_Full()
379void GxEPD2_583_T8::_Init_Part()
392 _writeDataPGM(lut_20_LUTC_partial,
sizeof(lut_20_LUTC_partial), 42 -
sizeof(lut_20_LUTC_partial));
394 _writeDataPGM(lut_21_LUTWW_partial,
sizeof(lut_21_LUTWW_partial), 42 -
sizeof(lut_21_LUTWW_partial));
396 _writeDataPGM(lut_22_LUTKW_partial,
sizeof(lut_22_LUTKW_partial), 42 -
sizeof(lut_22_LUTKW_partial));
398 _writeDataPGM(lut_23_LUTWK_partial,
sizeof(lut_23_LUTWK_partial), 42 -
sizeof(lut_23_LUTWK_partial));
400 _writeDataPGM(lut_24_LUTKK_partial,
sizeof(lut_24_LUTKK_partial), 42 -
sizeof(lut_24_LUTKK_partial));
402 _writeDataPGM(lut_25_LUTBD_partial,
sizeof(lut_25_LUTBD_partial), 42 -
sizeof(lut_25_LUTBD_partial));
407void GxEPD2_583_T8::_Update_Full()
413void GxEPD2_583_T8::_Update_Part()
const unsigned char GxEPD2_583_T8::lut_20_LUTC_partial[] PROGMEM
static const uint16_t power_off_time
void writeScreenBuffer(uint8_t value=0xFF)
static const bool hasFastPartialUpdate
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_on_time
void clearScreen(uint8_t value=0xFF)
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 full_refresh_time
static const uint16_t partial_refresh_time
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)
GxEPD2_583_T8(int16_t cs, int16_t dc, int16_t rst, int16_t busy)
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 WIDTH
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)
static const bool usePartialUpdateWindow
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 HEIGHT
void _writeCommand(uint8_t c)
void _writeData(uint8_t d)
void _waitWhileBusy(const char *comment=0, uint16_t busy_time=5000)
void _transfer(uint8_t value)
void _writeDataPGM(const uint8_t *data, uint16_t n, int16_t fill_with_zeroes=0)