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)