mirror of
https://github.com/meshtastic/firmware.git
synced 2026-01-04 09:02:21 +00:00
* TwoButtonExtened mirrors TwoButton but added joystick functionality * basic ui navigation with a joystick settings->joystick.enabled setting added and SETTINGS_VERSION incremented by one in InkHUD/Persistence.h in seeed_wio_tracker_L1_eink/nicheGraphics.h enable joystick and disable "Next Tile" menu item in implement prevTile and prevApplet functions in InkHUD/WindowManager.h,cpp and InkHUD/InkHUD.h,cpp onStickCenterShort, onStickCenterLong, onStickUp, onStickDown, onStickLeft, and onStickRight functions added to: - InkHUD/InkHUD.h,cpp - InkHUD/Events.h,cpp - InkHUD/Applet.h change navigation actions in InkHUD/Events.cpp events based on whether the joystick is enabled or not in seeed_wio_tracker_L1_eink/nicheGraphics.h connect joystick events to the new joystick handler functions * handle joystick input in NotificationApplet and TipsApplet Both the joystick center short press and the user button short press can be used to advance through the Tips applet. dismiss notifications with any joystick input * MenuApplet controls allows menu navigation including a back button * add AlignStickApplet for aligning the joystick with the screen add joystick.aligned and joystick.alignment to InkHUD/Persistence.h for storing alignment status and relative angle create AlignStick applet that prompts the user for a joystick input and rotates the controls to align with the screen AlignStick applet is run after the tips applet if the joystick is enabled and not aligned add menu item for opening the AlignStick applet * update tips applet with joystick controls * format InkHUD additions * fix stroke consistency when resizing joystick graphic * tweak button tips for order consistency * increase joystick debounce * fix comments * remove unnecessary '+' * remap joystick controls to match standard inkHUD behavior Input with a joystick now behaves as follows User Button (joystick center): - short press in applet -> opens menu - long press in applet -> opens menu - short press in menu -> selects - long press in menu -> selects Exit Button: - short press in applet -> switches tile - long press in applet -> nothing for now - short press in menu -> closes menu - long press in menu -> nothing for now --------- Co-authored-by: scobert <scobert57@gmail.com> Co-authored-by: HarukiToreda <116696711+HarukiToreda@users.noreply.github.com>
120 lines
3.1 KiB
C++
120 lines
3.1 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 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();
|
|
|
|
// Trigger UI changes
|
|
// - called by various InkHUD components
|
|
// - suitable(?) for use by aux button, connected in variant nicheGraphics.h
|
|
|
|
void nextApplet();
|
|
void prevApplet();
|
|
void openMenu();
|
|
void openAlignStick();
|
|
void nextTile();
|
|
void prevTile();
|
|
void rotate();
|
|
void rotateJoystick(uint8_t angle = 1); // rotate 90 deg by default
|
|
void toggleBatteryIcon();
|
|
|
|
// Updating the display
|
|
// - called by various InkHUD components
|
|
|
|
void requestUpdate();
|
|
void forceUpdate(Drivers::EInk::UpdateTypes type = Drivers::EInk::UpdateTypes::UNSPECIFIED, 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 |