void GxGDEP015OC1::eraseDisplay(bool using_partial_update) { if (_current_page != -1) return; if (using_partial_update) { _using_partial_mode = true; // remember _Init_Part(0x01); _writeCommand(0x24); for (uint32_t i = 0; i < GxGDEP015OC1_BUFFER_SIZE; i++) { _writeData(0xFF); } _Update_Part(); delay(GxGDEP015OC1_PU_DELAY); // update erase buffer _writeCommand(0x24); for (uint32_t i = 0; i < GxGDEP015OC1_BUFFER_SIZE; i++) { _writeData(0xFF); } delay(GxGDEP015OC1_PU_DELAY); } else { _using_partial_mode = false; // remember _Init_Full(0x01); _writeCommand(0x24); for (uint32_t i = 0; i < GxGDEP015OC1_BUFFER_SIZE; i++) { _writeData(0xFF); } _Update_Full(); _PowerOff(); } }
void GxEPD2_270::refresh(bool partial_update_mode) { if (partial_update_mode) refresh(0, 0, WIDTH, HEIGHT); else { if (_using_partial_mode) _Init_Full(); _Update_Full(); _initial_refresh = false; // initial full update done } }
void GxEPD2_154c::writeScreenBuffer(uint8_t black_value, uint8_t color_value) { _Init_Full(); _writeCommand(0x10); for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(HEIGHT) / 8; i++) { _writeData(bw2grey[(black_value & 0xF0) >> 4]); _writeData(bw2grey[black_value & 0x0F]); } _writeCommand(0x13); for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(HEIGHT) / 8; i++) { _writeData(color_value); } }
void GxGDEP015OC1::update(void) { if (_current_page != -1) return; _using_partial_mode = false; _Init_Full(0x03); _writeCommand(0x24); for (uint16_t y = 0; y < GxGDEP015OC1_HEIGHT; y++) { for (uint16_t x = 0; x < GxGDEP015OC1_WIDTH / 8; x++) { uint16_t idx = y * (GxGDEP015OC1_WIDTH / 8) + x; uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00; _writeData(~data); } } _Update_Full(); _PowerOff(); }
void GxGDEP015OC1::drawCornerTest(uint8_t em) { if (_current_page != -1) return; _Init_Full(em); _writeCommand(0x24); for (uint32_t y = 0; y < GxGDEP015OC1_HEIGHT; y++) { for (uint32_t x = 0; x < GxGDEP015OC1_WIDTH / 8; x++) { uint8_t data = 0xFF; if ((x < 1) && (y < 8)) data = 0x00; if ((x > GxGDEP015OC1_WIDTH / 8 - 3) && (y < 16)) data = 0x00; if ((x > GxGDEP015OC1_WIDTH / 8 - 4) && (y > GxGDEP015OC1_HEIGHT - 25)) data = 0x00; if ((x < 4) && (y > GxGDEP015OC1_HEIGHT - 33)) data = 0x00; _writeData(data); } } _Update_Full(); _PowerOff(); }
void GxGDEP015OC1::drawPaged(void (*drawCallback)(const void*, const void*), const void* p1, const void* p2) { if (_current_page != -1) return; _using_partial_mode = false; _Init_Full(0x03); _writeCommand(0x24); for (_current_page = 0; _current_page < GxGDEP015OC1_PAGES; _current_page++) { fillScreen(GxEPD_WHITE); drawCallback(p1, p2); for (int16_t y1 = 0; y1 < GxGDEP015OC1_PAGE_HEIGHT; y1++) { for (int16_t x1 = 0; x1 < GxGDEP015OC1_WIDTH / 8; x1++) { uint16_t idx = y1 * (GxGDEP015OC1_WIDTH / 8) + x1; uint8_t data = (idx < sizeof(_buffer)) ? _buffer[idx] : 0x00; _writeData(~data); } } } _current_page = -1; _Update_Full(); _PowerOff(); }
void GxGDEP015OC1::drawBitmap(const uint8_t *bitmap, uint32_t size, int16_t mode) { if (_current_page != -1) return; // example bitmaps are made for y-decrement, x-increment, for origin on opposite corner // bm_flip_x for normal display (bm_flip_y would be rotated) if (mode & bm_default) mode |= bm_flip_x; uint8_t ram_entry_mode = 0x03; // y-increment, x-increment for normal mode if ((mode & bm_flip_y) && (mode & bm_flip_x)) ram_entry_mode = 0x00; // y-decrement, x-decrement else if (mode & bm_flip_y) ram_entry_mode = 0x01; // y-decrement, x-increment else if (mode & bm_flip_x) ram_entry_mode = 0x02; // y-increment, x-decrement if (mode & bm_partial_update) { _using_partial_mode = true; // remember _Init_Part(ram_entry_mode); _writeCommand(0x24); for (uint32_t i = 0; i < GxGDEP015OC1_BUFFER_SIZE; i++) { uint8_t data = 0xFF; // white is 0xFF on device if (i < size) { #if defined(__AVR) || defined(ESP8266) || defined(ESP32) data = pgm_read_byte(&bitmap[i]); #else data = bitmap[i]; #endif if (mode & bm_invert) data = ~data; } _writeData(data); } _Update_Part(); delay(GxGDEP015OC1_PU_DELAY); // update erase buffer _writeCommand(0x24); for (uint32_t i = 0; i < GxGDEP015OC1_BUFFER_SIZE; i++) { uint8_t data = 0xFF; // white is 0xFF on device if (i < size) { #if defined(__AVR) || defined(ESP8266) || defined(ESP32) data = pgm_read_byte(&bitmap[i]); #else data = bitmap[i]; #endif if (mode & bm_invert) data = ~data; } _writeData(data); } delay(GxGDEP015OC1_PU_DELAY); _PowerOff(); } else { _using_partial_mode = false; // remember _Init_Full(ram_entry_mode); _writeCommand(0x24); for (uint32_t i = 0; i < GxGDEP015OC1_BUFFER_SIZE; i++) { uint8_t data = 0xFF; // white is 0xFF on device if (i < size) { #if defined(__AVR) || defined(ESP8266) || defined(ESP32) data = pgm_read_byte(&bitmap[i]); #else data = bitmap[i]; #endif if (mode & bm_invert) data = ~data; } _writeData(data); } _Update_Full(); _PowerOff(); } }