mirror of
https://github.com/meshtastic/firmware.git
synced 2025-04-25 09:42:35 +00:00
add init code as a determineMode() check
This commit is contained in:
parent
95b6f27d2a
commit
94794edd43
@ -184,7 +184,6 @@ bool EInkDisplay::connect()
|
|||||||
// Init GxEPD2
|
// Init GxEPD2
|
||||||
adafruitDisplay->init();
|
adafruitDisplay->init();
|
||||||
adafruitDisplay->setRotation(3);
|
adafruitDisplay->setRotation(3);
|
||||||
adafruitDisplay->clearScreen(); // Clearing now, so the boot logo will draw nice and smoothe (fast refresh)
|
|
||||||
}
|
}
|
||||||
#elif defined(PCA10059)
|
#elif defined(PCA10059)
|
||||||
{
|
{
|
||||||
|
@ -111,6 +111,7 @@ bool EInkDynamicDisplay::update()
|
|||||||
// Assess situation, pick a refresh type
|
// Assess situation, pick a refresh type
|
||||||
bool EInkDynamicDisplay::determineMode()
|
bool EInkDynamicDisplay::determineMode()
|
||||||
{
|
{
|
||||||
|
checkInitialized();
|
||||||
checkForPromotion();
|
checkForPromotion();
|
||||||
#if defined(HAS_EINK_ASYNCFULL)
|
#if defined(HAS_EINK_ASYNCFULL)
|
||||||
checkAsyncFullRefresh();
|
checkAsyncFullRefresh();
|
||||||
@ -157,6 +158,21 @@ bool EInkDynamicDisplay::determineMode()
|
|||||||
return true; // Do trigger a refresh
|
return true; // Do trigger a refresh
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Is this the very first frame?
|
||||||
|
void EInkDynamicDisplay::checkInitialized()
|
||||||
|
{
|
||||||
|
if (!initialized) {
|
||||||
|
// Undo GxEPD2_BW::partialWindow(), if set by developer in EInkDisplay::connect()
|
||||||
|
configForFullRefresh();
|
||||||
|
|
||||||
|
// Clear any existing image, so we can draw logo with fast-refresh, but also to set GxEPD2_EPD::_initial_write
|
||||||
|
adafruitDisplay->clearScreen();
|
||||||
|
|
||||||
|
LOG_DEBUG("initialized, ");
|
||||||
|
initialized = true;
|
||||||
|
|
||||||
|
// Use a fast-refresh for the next frame; no skipping or else blank screen when waking from deep sleep
|
||||||
|
addFrameFlag(DEMAND_FAST);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,6 +69,7 @@ class EInkDynamicDisplay : public EInkDisplay
|
|||||||
bool update(); // Trigger the display update - determine mode, then call base class
|
bool update(); // Trigger the display update - determine mode, then call base class
|
||||||
|
|
||||||
// Checks as part of determineMode()
|
// Checks as part of determineMode()
|
||||||
|
void checkInitialized(); // Is this the very first frame?
|
||||||
void checkForPromotion(); // Was a frame skipped (rate, display busy) that should have been a FAST refresh?
|
void checkForPromotion(); // Was a frame skipped (rate, display busy) that should have been a FAST refresh?
|
||||||
void checkRateLimiting(); // Is this frame too soon?
|
void checkRateLimiting(); // Is this frame too soon?
|
||||||
void checkCosmetic(); // Was the COSMETIC flag set?
|
void checkCosmetic(); // Was the COSMETIC flag set?
|
||||||
@ -91,6 +92,7 @@ class EInkDynamicDisplay : public EInkDisplay
|
|||||||
refreshTypes previousRefresh = UNSPECIFIED; // (Previous) Outcome
|
refreshTypes previousRefresh = UNSPECIFIED; // (Previous) Outcome
|
||||||
reasonTypes previousReason = NO_OBJECTIONS; // (Previous) Reason
|
reasonTypes previousReason = NO_OBJECTIONS; // (Previous) Reason
|
||||||
|
|
||||||
|
bool initialized = false; // Have we drawn at least one frame yet?
|
||||||
uint32_t previousRunMs = -1; // When did determineMode() last run (rather than rejecting for rate-limiting)
|
uint32_t previousRunMs = -1; // When did determineMode() last run (rather than rejecting for rate-limiting)
|
||||||
uint32_t imageHash = 0; // Hash of the current frame. Don't bother updating if nothing has changed!
|
uint32_t imageHash = 0; // Hash of the current frame. Don't bother updating if nothing has changed!
|
||||||
uint32_t previousImageHash = 0; // Hash of the previous update's frame
|
uint32_t previousImageHash = 0; // Hash of the previous update's frame
|
||||||
|
Loading…
Reference in New Issue
Block a user