mirror of
https://github.com/meshtastic/firmware.git
synced 2026-01-03 08:30:45 +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>
80 lines
2.7 KiB
C++
80 lines
2.7 KiB
C++
#ifdef MESHTASTIC_INCLUDE_INKHUD
|
|
|
|
#pragma once
|
|
|
|
/*
|
|
|
|
Handles non-specific events for InkHUD
|
|
|
|
Individual applets are responsible for listening for their own events via the module api etc,
|
|
however this class handles general events which concern InkHUD as a whole, e.g. shutdown
|
|
|
|
*/
|
|
|
|
#include "configuration.h"
|
|
|
|
#include "modules/AdminModule.h"
|
|
|
|
#include "./InkHUD.h"
|
|
#include "./Persistence.h"
|
|
|
|
namespace NicheGraphics::InkHUD
|
|
{
|
|
|
|
class Events
|
|
{
|
|
public:
|
|
Events();
|
|
void begin();
|
|
|
|
void onButtonShort(); // User button: short press
|
|
void onButtonLong(); // User button: long press
|
|
void onExitShort(); // Exit button: short press
|
|
void onExitLong(); // Exit button: long press
|
|
void onNavUp(); // Navigate up
|
|
void onNavDown(); // Navigate down
|
|
void onNavLeft(); // Navigate left
|
|
void onNavRight(); // Navigate right
|
|
|
|
int beforeDeepSleep(void *unused); // Prepare for shutdown
|
|
int beforeReboot(void *unused); // Prepare for reboot
|
|
int onReceiveTextMessage(const meshtastic_MeshPacket *packet); // Store most recent text message
|
|
int onAdminMessage(AdminModule_ObserverData *data); // Handle incoming admin messages
|
|
#ifdef ARCH_ESP32
|
|
int beforeLightSleep(void *unused); // Prepare for light sleep
|
|
#endif
|
|
|
|
private:
|
|
// For convenience
|
|
InkHUD *inkhud = nullptr;
|
|
Persistence::Settings *settings = nullptr;
|
|
|
|
// Get notified when the system is shutting down
|
|
CallbackObserver<Events, void *> deepSleepObserver = CallbackObserver<Events, void *>(this, &Events::beforeDeepSleep);
|
|
|
|
// Get notified when the system is rebooting
|
|
CallbackObserver<Events, void *> rebootObserver = CallbackObserver<Events, void *>(this, &Events::beforeReboot);
|
|
|
|
// Cache *incoming* text messages, for use by applets
|
|
CallbackObserver<Events, const meshtastic_MeshPacket *> textMessageObserver =
|
|
CallbackObserver<Events, const meshtastic_MeshPacket *>(this, &Events::onReceiveTextMessage);
|
|
|
|
// Get notified of incoming admin messages, and handle any which are relevant to InkHUD
|
|
CallbackObserver<Events, AdminModule_ObserverData *> adminMessageObserver =
|
|
CallbackObserver<Events, AdminModule_ObserverData *>(this, &Events::onAdminMessage);
|
|
|
|
#ifdef ARCH_ESP32
|
|
// Get notified when the system is entering light sleep
|
|
CallbackObserver<Events, void *> lightSleepObserver = CallbackObserver<Events, void *>(this, &Events::beforeLightSleep);
|
|
#endif
|
|
|
|
// End any externalNotification beeping, buzzing, blinking etc
|
|
bool dismissExternalNotification();
|
|
|
|
// If set, InkHUD's data will be erased during onReboot
|
|
bool eraseOnReboot = false;
|
|
};
|
|
|
|
} // namespace NicheGraphics::InkHUD
|
|
|
|
#endif |