/*
|
|
|
|
BUTTON MODULE
|
|
|
|
Copyright (C) 2016-2019 by Xose Pérez <xose dot perez at gmail dot com>
|
|
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "espurna.h"
|
|
|
|
#include "broker.h"
|
|
|
|
#include "libs/BasePin.h"
|
|
#include "libs/DebounceEvent.h"
|
|
|
|
#include <memory>
|
|
|
|
constexpr size_t ButtonsPresetMax = 8;
|
|
constexpr size_t ButtonsMax = 32;
|
|
|
|
using button_action_t = uint8_t;
|
|
|
|
enum class ButtonProvider : int {
|
|
None,
|
|
Gpio,
|
|
Analog
|
|
};
|
|
|
|
enum class button_event_t {
|
|
None,
|
|
Pressed,
|
|
Released,
|
|
Click,
|
|
DoubleClick,
|
|
LongClick,
|
|
LongLongClick,
|
|
TripleClick
|
|
};
|
|
|
|
struct button_actions_t {
|
|
button_action_t pressed;
|
|
button_action_t released;
|
|
button_action_t click;
|
|
button_action_t dblclick;
|
|
button_action_t lngclick;
|
|
button_action_t lnglngclick;
|
|
button_action_t trplclick;
|
|
};
|
|
|
|
struct button_event_delays_t {
|
|
button_event_delays_t();
|
|
button_event_delays_t(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(button_actions_t&& actions, button_event_delays_t&& delays);
|
|
button_t(BasePinPtr&& pin, const debounce_event::types::Config& config,
|
|
button_actions_t&& actions, button_event_delays_t&& delays);
|
|
|
|
bool state();
|
|
button_event_t loop();
|
|
|
|
std::unique_ptr<debounce_event::EventEmitter> event_emitter;
|
|
|
|
button_actions_t actions;
|
|
button_event_delays_t event_delays;
|
|
};
|
|
|
|
BrokerDeclare(ButtonBroker, void(unsigned char id, button_event_t event));
|
|
|
|
bool buttonState(unsigned char id);
|
|
button_action_t buttonAction(unsigned char id, const button_event_t event);
|
|
|
|
void buttonEvent(unsigned char id, button_event_t event);
|
|
|
|
unsigned char buttonCount();
|
|
void buttonSetup();
|