From 2b27d1824888fd3f2d59b969512ff0366638c7cb Mon Sep 17 00:00:00 2001 From: Lewis Jackson <> Date: Mon, 29 May 2023 18:10:06 +0300 Subject: [PATCH] Bugfixes for display --- src/WatchyDisplay.cpp | 47 +++++++++++++++++++++++++++++++++++++++---- src/WatchyDisplay.h | 10 +++++++-- 2 files changed, 51 insertions(+), 6 deletions(-) diff --git a/src/WatchyDisplay.cpp b/src/WatchyDisplay.cpp index 2bfb116..8ff9b2a 100644 --- a/src/WatchyDisplay.cpp +++ b/src/WatchyDisplay.cpp @@ -51,16 +51,49 @@ void WatchyDisplayBase::writeScreenBuffer(uint8_t value) _initial_write = false; } + + _startTransfer(); + TransferCommand(0x24); + + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(HEIGHT) / 8; i++) { + _transfer(value); + } + + _endTransfer(); +} + +void WatchyDisplayBase::writeScreenBufferAgain(uint8_t value) +{ + 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(); } void WatchyDisplayBase::writeImage(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); +} + +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) { - if (!_using_partial_mode) { - InitPart(); + _startTransfer(); + TransferCommand(0x24); + + for (uint32_t i = 0; i < uint32_t(WIDTH) * uint32_t(HEIGHT) / 8; i++) { + _transfer(0xFF); } - writeScreenBuffer(0x24); // initial full screen buffer clean + _endTransfer(); _initial_write = false; } #if defined(ESP8266) || defined(ESP32) @@ -114,7 +147,13 @@ void WatchyDisplayBase::writeImage(const uint8_t * bitmap, int16_t x, int16_t y, _endTransfer(); #if defined(ESP8266) || defined(ESP32) yield(); // avoid wdt -#endif +#endif +} + +void WatchyDisplayBase::writeImageForFullRefresh(const uint8_t * bitmap, int16_t x, int16_t y, int16_t w, int16_t h, bool invert, bool mirror_y, bool pgm) +{ + writeImageInternal(0x26, bitmap, x, y, w, h, invert, mirror_y, pgm); + writeImageInternal(0x24, bitmap, x, y, w, h, invert, mirror_y, pgm); } // screen refresh from controller memory, partial screen diff --git a/src/WatchyDisplay.h b/src/WatchyDisplay.h index a409654..200631e 100644 --- a/src/WatchyDisplay.h +++ b/src/WatchyDisplay.h @@ -17,8 +17,10 @@ public: void clearScreen(uint8_t value = 0xFF) override; // init controller memory (default white) - void writeScreenBuffer(uint8_t value = 0xFF) override; + void writeScreenBuffer(uint8_t value = 0xFF) override; + 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; // 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; @@ -40,6 +42,8 @@ private: static const uint16_t partial_refresh_time = 500; // ms, e.g. 457282us static const bool darkBorder = false; + void writeImageInternal(uint8_t command, 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 InitFull(); void InitPart(); void InitDisplay(); @@ -47,4 +51,6 @@ private: void UpdatePart(); void TransferCommand(uint8_t value); void SetPartialRamArea(uint16_t x, uint16_t y, uint16_t w, uint16_t h); -}; \ No newline at end of file +}; + +typedef GxEPD2_BW WatchyDisplay; \ No newline at end of file