Merge pull request #205 from jpirnay/fix-ghosting
fix: Try more conditioning passes on x3 before sleepscreen to get rid of ghosting
This commit is contained in:
+14
-2
@@ -50,18 +50,30 @@ EInkDisplay::RefreshMode convertRefreshMode(HalDisplay::RefreshMode mode) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HalDisplay::requestResync(uint8_t settlePasses) {
|
||||||
|
if (gpio.deviceIsX3() && settlePasses > pendingX3SettlePasses) {
|
||||||
|
pendingX3SettlePasses = settlePasses;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void HalDisplay::displayBuffer(HalDisplay::RefreshMode mode, bool turnOffScreen) {
|
void HalDisplay::displayBuffer(HalDisplay::RefreshMode mode, bool turnOffScreen) {
|
||||||
if (gpio.deviceIsX3() && mode == RefreshMode::HALF_REFRESH) {
|
if (gpio.deviceIsX3() && mode == RefreshMode::HALF_REFRESH) {
|
||||||
einkDisplay.requestResync(1);
|
einkDisplay.requestResync(pendingX3SettlePasses > 1 ? pendingX3SettlePasses : 1);
|
||||||
|
} else if (pendingX3SettlePasses > 0) {
|
||||||
|
einkDisplay.requestResync(pendingX3SettlePasses);
|
||||||
}
|
}
|
||||||
|
pendingX3SettlePasses = 0;
|
||||||
|
|
||||||
einkDisplay.displayBuffer(convertRefreshMode(mode), turnOffScreen);
|
einkDisplay.displayBuffer(convertRefreshMode(mode), turnOffScreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HalDisplay::refreshDisplay(HalDisplay::RefreshMode mode, bool turnOffScreen) {
|
void HalDisplay::refreshDisplay(HalDisplay::RefreshMode mode, bool turnOffScreen) {
|
||||||
if (gpio.deviceIsX3() && mode == RefreshMode::HALF_REFRESH) {
|
if (gpio.deviceIsX3() && mode == RefreshMode::HALF_REFRESH) {
|
||||||
einkDisplay.requestResync(1);
|
einkDisplay.requestResync(pendingX3SettlePasses > 1 ? pendingX3SettlePasses : 1);
|
||||||
|
} else if (pendingX3SettlePasses > 0) {
|
||||||
|
einkDisplay.requestResync(pendingX3SettlePasses);
|
||||||
}
|
}
|
||||||
|
pendingX3SettlePasses = 0;
|
||||||
|
|
||||||
einkDisplay.refreshDisplay(convertRefreshMode(mode), turnOffScreen);
|
einkDisplay.refreshDisplay(convertRefreshMode(mode), turnOffScreen);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,10 @@ class HalDisplay {
|
|||||||
void displayBuffer(RefreshMode mode = RefreshMode::FAST_REFRESH, bool turnOffScreen = false);
|
void displayBuffer(RefreshMode mode = RefreshMode::FAST_REFRESH, bool turnOffScreen = false);
|
||||||
void refreshDisplay(RefreshMode mode = RefreshMode::FAST_REFRESH, bool turnOffScreen = false);
|
void refreshDisplay(RefreshMode mode = RefreshMode::FAST_REFRESH, bool turnOffScreen = false);
|
||||||
|
|
||||||
|
// Request extra X3 ghost-clearing on the next display refresh.
|
||||||
|
// No-op on non-X3 panels. Consumed by the next displayBuffer/refreshDisplay call.
|
||||||
|
void requestResync(uint8_t settlePasses = 0);
|
||||||
|
|
||||||
// Power management
|
// Power management
|
||||||
void deepSleep();
|
void deepSleep();
|
||||||
|
|
||||||
@@ -57,6 +61,7 @@ class HalDisplay {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
EInkDisplay einkDisplay;
|
EInkDisplay einkDisplay;
|
||||||
|
uint8_t pendingX3SettlePasses = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern HalDisplay display;
|
extern HalDisplay display;
|
||||||
|
|||||||
@@ -357,6 +357,10 @@ void SleepActivity::onEnter() {
|
|||||||
if (SETTINGS.sleepScreen != CrossPointSettings::SLEEP_SCREEN_MODE::OVERLAY) {
|
if (SETTINGS.sleepScreen != CrossPointSettings::SLEEP_SCREEN_MODE::OVERLAY) {
|
||||||
GUI.drawPopup(renderer, tr(STR_ENTERING_SLEEP));
|
GUI.drawPopup(renderer, tr(STR_ENTERING_SLEEP));
|
||||||
}
|
}
|
||||||
|
// X3 panels need extra settle passes to fully clear ghosting from the previous reader page
|
||||||
|
// before showing the static sleep image. No-op on other panels. Placed after the popup so
|
||||||
|
// its own displayBuffer doesn't consume the request.
|
||||||
|
display.requestResync(2);
|
||||||
|
|
||||||
switch (SETTINGS.sleepScreen) {
|
switch (SETTINGS.sleepScreen) {
|
||||||
case (CrossPointSettings::SLEEP_SCREEN_MODE::BLANK):
|
case (CrossPointSettings::SLEEP_SCREEN_MODE::BLANK):
|
||||||
|
|||||||
Reference in New Issue
Block a user