mirror of
https://github.com/alexhopeoconnor/firmware.git
synced 2026-10-21 02:35:57 +10:00
* Tmini Eink fix * tuning * better refresh * Fix to lora pins to be like the original. * Update pins_arduino.h * removed dead flags from previous tests * Update src/graphics/niche/Drivers/EInk/GDEW0102T4.cpp Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
137 lines
3.6 KiB
C++
137 lines
3.6 KiB
C++
#ifdef MESHTASTIC_INCLUDE_INKHUD
|
|
|
|
/*
|
|
|
|
InkHUD's main class
|
|
- singleton
|
|
- mediator between the various components
|
|
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "configuration.h"
|
|
|
|
#include "graphics/niche/Drivers/EInk/EInk.h"
|
|
|
|
#include "./AppletFont.h"
|
|
|
|
#include <vector>
|
|
|
|
namespace NicheGraphics::InkHUD
|
|
{
|
|
|
|
// Color, understood by display controller IC (as bit values)
|
|
// Also suitable for use as AdafruitGFX colors
|
|
enum Color : uint8_t {
|
|
BLACK = 0,
|
|
WHITE = 1,
|
|
};
|
|
|
|
class Applet;
|
|
class Events;
|
|
class Persistence;
|
|
class Renderer;
|
|
class SystemApplet;
|
|
class Tile;
|
|
class WindowManager;
|
|
|
|
class InkHUD
|
|
{
|
|
public:
|
|
static InkHUD *getInstance(); // Access to this singleton class
|
|
|
|
// Configuration
|
|
// - before InkHUD::begin, in variant nicheGraphics.h,
|
|
|
|
void setDriver(Drivers::EInk *driver);
|
|
void setDisplayResilience(uint8_t fastPerFull = 5, float stressMultiplier = 2.0);
|
|
void addApplet(const char *name, Applet *a, bool defaultActive = false, bool defaultAutoshow = false, uint8_t onTile = -1);
|
|
void notifyApplyingChanges();
|
|
|
|
void begin();
|
|
|
|
// Handle user-button press
|
|
// - connected to an input source, in variant nicheGraphics.h
|
|
|
|
void shortpress();
|
|
void longpress();
|
|
void exitShort();
|
|
void exitLong();
|
|
void navUp();
|
|
void navDown();
|
|
void navLeft();
|
|
void navRight();
|
|
|
|
// Freetext handlers
|
|
void freeText(char c);
|
|
void freeTextDone();
|
|
void freeTextCancel();
|
|
|
|
// Trigger UI changes
|
|
// - called by various InkHUD components
|
|
// - suitable(?) for use by aux button, connected in variant nicheGraphics.h
|
|
|
|
void nextApplet();
|
|
void prevApplet();
|
|
NicheGraphics::InkHUD::Applet *getActiveApplet();
|
|
void openMenu();
|
|
void openAlignStick();
|
|
void openKeyboard();
|
|
void closeKeyboard();
|
|
void nextTile();
|
|
void prevTile();
|
|
void rotate();
|
|
void rotateJoystick(uint8_t angle = 1); // rotate 90 deg by default
|
|
void toggleBatteryIcon();
|
|
|
|
// Used by TipsApplet to force menu to start on Region selection
|
|
bool forceRegionMenu = false;
|
|
|
|
// Input mode hint for devices that use a left/right rocker plus center button
|
|
bool twoWayRocker = false;
|
|
|
|
// Updating the display
|
|
// - called by various InkHUD components
|
|
|
|
void requestUpdate();
|
|
void forceUpdate(Drivers::EInk::UpdateTypes type = Drivers::EInk::UpdateTypes::UNSPECIFIED, bool all = false,
|
|
bool async = true);
|
|
void awaitUpdate();
|
|
|
|
// (Re)configuring WindowManager
|
|
|
|
void autoshow(); // Bring an applet to foreground
|
|
void updateAppletSelection(); // Change which applets are active
|
|
void updateLayout(); // Change multiplexing (count, rotation)
|
|
|
|
// Information passed between components
|
|
|
|
uint16_t width(); // From E-Ink driver
|
|
uint16_t height(); // From E-Ink driver
|
|
std::vector<Tile *> getEmptyTiles(); // From WindowManager
|
|
|
|
// Applets
|
|
|
|
SystemApplet *getSystemApplet(const char *name);
|
|
std::vector<Applet *> userApplets;
|
|
std::vector<SystemApplet *> systemApplets;
|
|
|
|
// Pass drawing output to Renderer
|
|
void drawPixel(int16_t x, int16_t y, Color c);
|
|
|
|
// Shared data which persists between boots
|
|
Persistence *persistence = nullptr;
|
|
|
|
private:
|
|
InkHUD() {} // Constructor made private to force use of InkHUD::getInstance
|
|
|
|
Events *events = nullptr; // Handle non-specific firmware events
|
|
Renderer *renderer = nullptr; // Co-ordinate display updates
|
|
WindowManager *windowManager = nullptr; // Multiplexing of applets
|
|
};
|
|
|
|
} // namespace NicheGraphics::InkHUD
|
|
|
|
#endif
|