#pragma once #include #include "config.h" class PowerManager; class SettingsManager; enum class ButtonEvent : uint8_t { None, NextPhoto, RandomPhoto, PlayPause, DeepSleep, FactoryReset }; class ButtonHandler { public: void begin(PowerManager& power, SettingsManager& settings); ButtonEvent poll(); private: PowerManager* _power = nullptr; SettingsManager* _settings = nullptr; unsigned long _btnTopPressTime = 0; unsigned long _btnUpPressTime = 0; unsigned long _btnDownPressTime = 0; bool _btnTopPressed = false; bool _btnUpPressed = false; bool _btnDownPressed = false; // Double-press detection for BTN_TOP unsigned long _btnTopLastRelease = 0; bool _btnTopPendingSingle = false; static constexpr unsigned long DOUBLE_PRESS_WINDOW = 400; unsigned long _lastDebounce = 0; bool debounced(unsigned long now); };