Files
firmware/src/graphics/niche/InkHUD/Renderer.h
T
Larry Doolittle deb45e471c spelling fixes (#9801)
45 corrections in c++ source comments
limited to 27 files in src/gps src/graphics src/input
2026-03-04 16:36:53 +11:00

99 lines
2.7 KiB
C++

#ifdef MESHTASTIC_INCLUDE_INKHUD
/*
Orchestrates updating of the display image
- takes requests (or demands) for display update
- performs the various steps of the rendering operation
- interfaces with the E-Ink driver
*/
#pragma once
#include "configuration.h"
#include "./DisplayHealth.h"
#include "./InkHUD.h"
#include "./Persistence.h"
#include "graphics/niche/Drivers/EInk/EInk.h"
namespace NicheGraphics::InkHUD
{
class Renderer : protected concurrency::OSThread
{
public:
Renderer();
// Configuration, before begin
void setDriver(Drivers::EInk *driver);
void setDisplayResilience(uint8_t fastPerFull, float stressMultiplier);
void begin();
// Call these to make the image change
void requestUpdate(bool all = false); // Update display, if a foreground applet has info it wants to show
void forceUpdate(Drivers::EInk::UpdateTypes type = Drivers::EInk::UpdateTypes::UNSPECIFIED, bool all = false,
bool async = true); // Update display, regardless of whether any applets requested this
// Wait for an update to complete
void awaitUpdate();
// Receives pixel output from an applet (via a tile, which translates the coordinates)
void handlePixel(int16_t x, int16_t y, Color c);
// Size of display, in context of current rotation
uint16_t width();
uint16_t height();
private:
// Make attempts to render / update, once triggered by requestUpdate or forceUpdate
int32_t runOnce() override;
// Apply the display rotation to handled pixels
void rotatePixelCoords(int16_t *x, int16_t *y);
// Execute the render process now, then hand off to driver for display update
void render(bool async = true);
// Steps of the rendering process
void clearBuffer();
void clearTile(Tile *t);
void checkLocks();
bool shouldUpdate();
Drivers::EInk::UpdateTypes decideUpdateType();
void renderUserApplets();
void renderSystemApplets();
void renderPlaceholders();
Drivers::EInk *driver = nullptr; // Interacts with your variants display hardware
DisplayHealth displayHealth; // Manages display health by controlling type of update
uint8_t *imageBuffer = nullptr; // Fed into driver
uint16_t imageBufferHeight = 0;
uint16_t imageBufferWidth = 0;
uint32_t imageBufferSize = 0; // Bytes
SystemApplet *lockRendering = nullptr; // Render this applet *only*
SystemApplet *lockRequests = nullptr; // Honor update requests from this applet *only*
bool requested = false;
bool forced = false;
bool renderAll = false;
// For convenience
InkHUD *inkhud = nullptr;
Persistence::Settings *settings = nullptr;
};
} // namespace NicheGraphics::InkHUD
#endif