mirror of
https://github.com/meshtastic/firmware.git
synced 2025-04-25 17:42:48 +00:00
add BLOCKING modifier to frameFlagTypes
This commit is contained in:
parent
94794edd43
commit
e232e3462c
@ -458,15 +458,32 @@ void EInkDynamicDisplay::checkAsyncFullRefresh()
|
|||||||
// Figure out who runs the post-update code
|
// Figure out who runs the post-update code
|
||||||
void EInkDynamicDisplay::endOrDetach()
|
void EInkDynamicDisplay::endOrDetach()
|
||||||
{
|
{
|
||||||
if (previousRefresh == FULL) { // Note: previousRefresh is the refresh from this loop.
|
if (refresh == FULL) {
|
||||||
asyncRefreshRunning = true; // Set the flag - picked up at start of determineMode(), next loop.
|
asyncRefreshRunning = true; // Set the flag - picked up at start of determineMode(), next loop.
|
||||||
LOG_DEBUG("Async full-refresh begins\n");
|
|
||||||
|
if (frameFlags & BLOCKING)
|
||||||
|
awaitRefresh();
|
||||||
|
else
|
||||||
|
LOG_DEBUG("Async full-refresh begins\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fast Refresh
|
// Fast Refresh
|
||||||
else
|
else
|
||||||
EInkDisplay::endUpdate(); // Still block while updating, but EInkDisplay needs us to call endUpdate() ourselves.
|
EInkDisplay::endUpdate(); // Still block while updating, but EInkDisplay needs us to call endUpdate() ourselves.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Hold control while an async refresh runs
|
||||||
|
void EInkDynamicDisplay::awaitRefresh()
|
||||||
|
{
|
||||||
|
// Continually poll the BUSY pin
|
||||||
|
while (adafruitDisplay->epd2.isBusy())
|
||||||
|
yield();
|
||||||
|
|
||||||
|
// End the full-refresh process
|
||||||
|
adafruitDisplay->endAsyncFull(); // Run the end of nextPage() code
|
||||||
|
EInkDisplay::endUpdate(); // Run base-class code to finish off update (NOT our derived class override)
|
||||||
|
asyncRefreshRunning = false; // Unset the flag
|
||||||
|
}
|
||||||
#endif // HAS_EINK_ASYNCFULL
|
#endif // HAS_EINK_ASYNCFULL
|
||||||
|
|
||||||
#endif // USE_EINK_DYNAMICDISPLAY
|
#endif // USE_EINK_DYNAMICDISPLAY
|
@ -28,6 +28,7 @@ class EInkDynamicDisplay : public EInkDisplay
|
|||||||
RESPONSIVE = (1 << 1), // For frames via forceDisplay()
|
RESPONSIVE = (1 << 1), // For frames via forceDisplay()
|
||||||
COSMETIC = (1 << 2), // For splashes
|
COSMETIC = (1 << 2), // For splashes
|
||||||
DEMAND_FAST = (1 << 3), // Special case only
|
DEMAND_FAST = (1 << 3), // Special case only
|
||||||
|
BLOCKING = (1 << 4), // Modifier - block while refresh runs
|
||||||
};
|
};
|
||||||
void addFrameFlag(frameFlagTypes flag);
|
void addFrameFlag(frameFlagTypes flag);
|
||||||
|
|
||||||
@ -112,6 +113,7 @@ class EInkDynamicDisplay : public EInkDisplay
|
|||||||
#if defined(HAS_EINK_ASYNCFULL)
|
#if defined(HAS_EINK_ASYNCFULL)
|
||||||
void checkAsyncFullRefresh(); // Check the status of "async full-refresh"; run the post-update code if the hardware is ready
|
void checkAsyncFullRefresh(); // Check the status of "async full-refresh"; run the post-update code if the hardware is ready
|
||||||
void endOrDetach(); // Run the post-update code, or delegate it off to checkAsyncFullRefresh()
|
void endOrDetach(); // Run the post-update code, or delegate it off to checkAsyncFullRefresh()
|
||||||
|
void awaitRefresh(); // Hold control while an async refresh runs
|
||||||
void endUpdate() override {} // Disable base-class behavior of running post-update immediately after forceDisplay()
|
void endUpdate() override {} // Disable base-class behavior of running post-update immediately after forceDisplay()
|
||||||
bool asyncRefreshRunning = false; // Flag, checked by checkAsyncFullRefresh()
|
bool asyncRefreshRunning = false; // Flag, checked by checkAsyncFullRefresh()
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user