Fork of the espurna firmware for `mhsw` switches
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

84 lines
1.8 KiB

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