Files
espurna/code/espurna/button.h
Maxim Prokhorov f92116341e system: refactor build configurations
Namespace build configurations of modules, make more things into constexpr
(not fully finished though)

Unify code using ...Count() to parse IDs

Avoid using unsigned char aka uint8_t as index, prefer size_t
as most code already uses it anyway. Making sure we never accidentally
truncate the value or try to read it as 32bit-wide. Also, simplify
access to built in containers, since those use the wide type as well.

Renames led and button types, more consistent initialization and field access.
2021-03-31 09:41:04 +03:00

107 lines
2.1 KiB
C++

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