- /*
-
- 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();
|