/* BUTTON MODULE Copyright (C) 2016-2019 by Xose PĂ©rez */ #pragma once #include "espurna.h" #include "broker.h" #include "libs/BasePin.h" #include "libs/DebounceEvent.h" #include 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 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();