/*
|
|
|
|
BUTTON MODULE
|
|
|
|
Copyright (C) 2016-2019 by Xose Pérez <xose dot perez at gmail dot com>
|
|
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "espurna.h"
|
|
|
|
#include "libs/BasePin.h"
|
|
#include "libs/DebounceEvent.h"
|
|
|
|
#include <memory>
|
|
|
|
constexpr size_t ButtonsActionMax { 255ul };
|
|
|
|
constexpr size_t ButtonsPresetMax { 8ul };
|
|
constexpr size_t ButtonsMax { 32ul };
|
|
|
|
enum class ButtonProvider : int {
|
|
None,
|
|
Gpio,
|
|
Analog
|
|
};
|
|
|
|
enum class ButtonEvent {
|
|
None,
|
|
Pressed,
|
|
Released,
|
|
Click,
|
|
DoubleClick,
|
|
LongClick,
|
|
LongLongClick,
|
|
TripleClick
|
|
};
|
|
|
|
// button actions, limited to 8-bit number (0b11111111 / 0xff / 255)
|
|
|
|
enum class ButtonAction : uint8_t {
|
|
None,
|
|
Toggle,
|
|
On,
|
|
Off,
|
|
AccessPoint,
|
|
Reset,
|
|
Pulse,
|
|
FactoryReset,
|
|
Wps,
|
|
SmartConfig,
|
|
BrightnessIncrease,
|
|
BrightnessDecrease,
|
|
DisplayOn,
|
|
Custom,
|
|
FanLow,
|
|
FanMedium,
|
|
FanHigh
|
|
};
|
|
|
|
struct ButtonActions {
|
|
ButtonAction pressed;
|
|
ButtonAction released;
|
|
ButtonAction click;
|
|
ButtonAction dblclick;
|
|
ButtonAction lngclick;
|
|
ButtonAction lnglngclick;
|
|
ButtonAction trplclick;
|
|
};
|
|
|
|
struct ButtonEventDelays {
|
|
ButtonEventDelays();
|
|
ButtonEventDelays(unsigned long debounce, unsigned long repeat, unsigned long lngclick, unsigned long lnglngclick);
|
|
|
|
unsigned long debounce;
|
|
unsigned long repeat;
|
|
unsigned long lngclick;
|
|
unsigned long lnglngclick;
|
|
};
|
|
|
|
struct button_t {
|
|
button_t(ButtonActions&& actions, ButtonEventDelays&& delays);
|
|
button_t(BasePinPtr&& pin, const debounce_event::types::Config& config,
|
|
ButtonActions&& actions, ButtonEventDelays&& delays);
|
|
|
|
bool state();
|
|
ButtonEvent loop();
|
|
|
|
std::unique_ptr<debounce_event::EventEmitter> event_emitter;
|
|
|
|
ButtonActions actions;
|
|
ButtonEventDelays event_delays;
|
|
};
|
|
|
|
using ButtonEventHandler = void(*)(size_t id, ButtonEvent event);
|
|
void buttonSetCustomAction(ButtonEventHandler);
|
|
void buttonSetNotifyAction(ButtonEventHandler);
|
|
|
|
bool buttonState(size_t id);
|
|
ButtonAction buttonAction(size_t id, const ButtonEvent event);
|
|
|
|
void buttonEvent(size_t id, ButtonEvent event);
|
|
|
|
size_t buttonCount();
|
|
void buttonSetup();
|