diff --git a/lib/GfxRenderer/GfxRenderer.h b/lib/GfxRenderer/GfxRenderer.h index b2d3054aa..63cbc36b8 100644 --- a/lib/GfxRenderer/GfxRenderer.h +++ b/lib/GfxRenderer/GfxRenderer.h @@ -70,7 +70,6 @@ class GfxRenderer { // Screen ops int getScreenWidth() const; int getScreenHeight() const; - void requestResync(uint8_t settlePasses = 0) const { display.requestResync(settlePasses); } void displayBuffer(HalDisplay::RefreshMode refreshMode = HalDisplay::FAST_REFRESH) const; // EXPERIMENTAL: Windowed update - display only a rectangular region // void displayWindow(int x, int y, int width, int height) const; diff --git a/lib/hal/HalDisplay.cpp b/lib/hal/HalDisplay.cpp index 41cfb718d..2cd4159fe 100644 --- a/lib/hal/HalDisplay.cpp +++ b/lib/hal/HalDisplay.cpp @@ -48,15 +48,21 @@ EInkDisplay::RefreshMode convertRefreshMode(HalDisplay::RefreshMode mode) { } void HalDisplay::displayBuffer(HalDisplay::RefreshMode mode, bool turnOffScreen) { + if (gpio.deviceIsX3() && lastBufferWasGray) { + einkDisplay.requestResync(); + } + lastBufferWasGray = false; einkDisplay.displayBuffer(convertRefreshMode(mode), turnOffScreen); } void HalDisplay::refreshDisplay(HalDisplay::RefreshMode mode, bool turnOffScreen) { + if (gpio.deviceIsX3() && lastBufferWasGray) { + einkDisplay.requestResync(); + } + lastBufferWasGray = false; einkDisplay.refreshDisplay(convertRefreshMode(mode), turnOffScreen); } -void HalDisplay::requestResync(uint8_t settlePasses) { einkDisplay.requestResync(settlePasses); } - void HalDisplay::deepSleep() { einkDisplay.deepSleep(); } uint8_t* HalDisplay::getFrameBuffer() const { return einkDisplay.getFrameBuffer(); } @@ -71,7 +77,10 @@ void HalDisplay::copyGrayscaleMsbBuffers(const uint8_t* msbBuffer) { einkDisplay void HalDisplay::cleanupGrayscaleBuffers(const uint8_t* bwBuffer) { einkDisplay.cleanupGrayscaleBuffers(bwBuffer); } -void HalDisplay::displayGrayBuffer(bool turnOffScreen) { einkDisplay.displayGrayBuffer(turnOffScreen); } +void HalDisplay::displayGrayBuffer(bool turnOffScreen) { + einkDisplay.displayGrayBuffer(turnOffScreen); + lastBufferWasGray = true; +} uint16_t HalDisplay::getDisplayWidth() const { return einkDisplay.getDisplayWidth(); } diff --git a/lib/hal/HalDisplay.h b/lib/hal/HalDisplay.h index 1b33e1b73..bcd53b4b7 100644 --- a/lib/hal/HalDisplay.h +++ b/lib/hal/HalDisplay.h @@ -36,9 +36,6 @@ class HalDisplay { void displayBuffer(RefreshMode mode = RefreshMode::FAST_REFRESH, bool turnOffScreen = false); void refreshDisplay(RefreshMode mode = RefreshMode::FAST_REFRESH, bool turnOffScreen = false); - // Hint the display driver to perform a one-shot full resync on next update. - // Optional settle passes are used by X3 only. - void requestResync(uint8_t settlePasses = 0); // Power management void deepSleep(); @@ -61,4 +58,5 @@ class HalDisplay { private: EInkDisplay einkDisplay; + bool lastBufferWasGray = false; }; diff --git a/src/activities/reader/ReaderActivity.cpp b/src/activities/reader/ReaderActivity.cpp index 3b9732349..26bae4e9a 100644 --- a/src/activities/reader/ReaderActivity.cpp +++ b/src/activities/reader/ReaderActivity.cpp @@ -84,7 +84,6 @@ void ReaderActivity::onGoToEpubReader(std::unique_ptr epub) { const auto epubPath = epub->getPath(); currentBookPath = epubPath; exitActivity(); - renderer.requestResync(1); enterNewActivity(new EpubReaderActivity( renderer, mappedInput, std::move(epub), [this, epubPath] { goToLibrary(epubPath); }, [this] { onGoBack(); })); } @@ -93,7 +92,6 @@ void ReaderActivity::onGoToXtcReader(std::unique_ptr xtc) { const auto xtcPath = xtc->getPath(); currentBookPath = xtcPath; exitActivity(); - renderer.requestResync(1); enterNewActivity(new XtcReaderActivity( renderer, mappedInput, std::move(xtc), [this, xtcPath] { goToLibrary(xtcPath); }, [this] { onGoBack(); })); } @@ -102,7 +100,6 @@ void ReaderActivity::onGoToTxtReader(std::unique_ptr txt) { const auto txtPath = txt->getPath(); currentBookPath = txtPath; exitActivity(); - renderer.requestResync(1); enterNewActivity(new TxtReaderActivity( renderer, mappedInput, std::move(txt), [this, txtPath] { goToLibrary(txtPath); }, [this] { onGoBack(); })); } diff --git a/src/main.cpp b/src/main.cpp index fbfeaee6d..f9a233cee 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -149,7 +149,6 @@ void enterDeepSleep() { APP_STATE.lastSleepFromReader = currentActivity && currentActivity->isReaderActivity(); APP_STATE.saveToFile(); exitActivity(); - display.requestResync(); enterNewActivity(new SleepActivity(renderer, mappedInputManager)); display.deepSleep(); @@ -198,10 +197,6 @@ void onGoToBrowser() { } void onGoHome() { - const bool returningFromReader = currentActivity && currentActivity->isReaderActivity(); - if (returningFromReader) { - display.requestResync(1); - } exitActivity(); enterNewActivity(new HomeActivity(renderer, mappedInputManager, onGoToReader, onGoToMyLibrary, onGoToRecentBooks, onGoToSettings, onGoToFileTransfer, onGoToBrowser));