From 6a3a9a15b96da08a7cf5f41f4cb5416ff4f0e292 Mon Sep 17 00:00:00 2001 From: Lewis Jackson <> Date: Mon, 29 May 2023 23:34:10 +0300 Subject: [PATCH] Bugfix for epaper display --- src/WatchyDisplay.cpp | 42 ++++++++++-------------------------------- src/WatchyDisplay.h | 1 + 2 files changed, 11 insertions(+), 32 deletions(-) diff --git a/src/WatchyDisplay.cpp b/src/WatchyDisplay.cpp index 8ff9b2a..70caa27 100644 --- a/src/WatchyDisplay.cpp +++ b/src/WatchyDisplay.cpp @@ -10,26 +10,7 @@ void WatchyDisplayBase::clearScreen(uint8_t value) { writeScreenBuffer(value); refresh(true); - - if (!_using_partial_mode) { - InitPart(); - } - - _startTransfer(); - TransferCommand(0x24); - for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(HEIGHT) / 8; i++) { - _transfer(value); - } - _endTransfer(); - - // Is this necessary? Come back to this - FIXME - _startTransfer(); - TransferCommand(0x26); - for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(HEIGHT) / 8; i++) { - _transfer(value); - } - _endTransfer(); - _initial_write = false; // initial full screen buffer clean done + writeScreenBufferAgain(value); } // init controller memory (default white) @@ -48,8 +29,6 @@ void WatchyDisplayBase::writeScreenBuffer(uint8_t value) } _endTransfer(); - - _initial_write = false; } _startTransfer(); @@ -60,6 +39,8 @@ void WatchyDisplayBase::writeScreenBuffer(uint8_t value) } _endTransfer(); + + _initial_write = false; } void WatchyDisplayBase::writeScreenBufferAgain(uint8_t value) @@ -86,15 +67,7 @@ void WatchyDisplayBase::writeImage(const uint8_t * bitmap, int16_t x, int16_t y, void WatchyDisplayBase::writeImageInternal(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) { if (_initial_write) { - _startTransfer(); - TransferCommand(0x24); - - for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(HEIGHT) / 8; i++) { - _transfer(0xFF); - } - - _endTransfer(); - _initial_write = false; + writeScreenBuffer(); } #if defined(ESP8266) || defined(ESP32) yield(); // avoid wdt @@ -120,7 +93,7 @@ void WatchyDisplayBase::writeImageInternal(uint8_t command, const uint8_t * bitm SetPartialRamArea(x1, y1, w1, h1); _startTransfer(); - TransferCommand(0x24); + TransferCommand(command); for (int16_t i = 0; i < h1; i++) { for (int16_t j = 0; j < w1 / 8; j++) { @@ -156,6 +129,11 @@ void WatchyDisplayBase::writeImageForFullRefresh(const uint8_t * bitmap, int16_t writeImageInternal(0x24, bitmap, x, y, w, h, invert, mirror_y, pgm); } +void WatchyDisplayBase::writeImageAgain(const uint8_t * bitmap, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImageInternal(0x24, bitmap, x, y, w, h, invert, mirror_y, pgm); +} + // screen refresh from controller memory, partial screen void WatchyDisplayBase::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, bool mirror_y, bool pgm) { diff --git a/src/WatchyDisplay.h b/src/WatchyDisplay.h index 200631e..04f06e8 100644 --- a/src/WatchyDisplay.h +++ b/src/WatchyDisplay.h @@ -21,6 +21,7 @@ public: void writeScreenBufferAgain(uint8_t value = 0xFF) override; 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) override; 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) override; + 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) override; // screen refresh from controller memory, partial screen 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) override;