Files
immich-frame/src/button_handler.h

44 lines
922 B
C
Raw Normal View History

#pragma once
#include <Arduino.h>
#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);
};