10#ifndef M5_UTILITY_BUTTON_STATUS_HPP
11#define M5_UTILITY_BUTTON_STATUS_HPP
30 enum class button_state_t : uint8_t { state_nochange, state_clicked, state_hold, state_decide_click_count };
39 explicit Status(
const uint16_t hold_ms = 500,
const uint16_t debounce_ms = 10,
const uint16_t double_click_ms = 0)
40 : _msecHold{hold_ms}, _msecDebounce{debounce_ms}, _msecDoubleClick{double_click_ms}
49 _msecDebounce =
static_cast<uint16_t
>(msec);
54 _msecHold =
static_cast<uint16_t
>(msec);
64 _msecDoubleClick =
static_cast<uint16_t
>(msec);
82 return _msecDoubleClick ? _msecDoubleClick : _msecHold;
106 return !_oldPress && _press;
111 return _oldPress && !_press;
116 return _currentState == button_state_t::state_clicked;
121 return _currentState == button_state_t::state_hold;
126 return _currentState == button_state_t::state_decide_click_count && _clickCount == 1;
131 return _currentState == button_state_t::state_decide_click_count && _clickCount == 2;
136 return _currentState == button_state_t::state_decide_click_count;
146 return ((
bool)_press) != ((bool)_oldPress);
151 return !_press && _oldPress == 2;
156 return _oldPress && !_press && _lastHoldPeriod >= ms;
161 return (_press && _lastMsec - _lastChange >= ms);
166 return (!_press && _lastMsec - _lastChange >= ms);
172 void setRawState(
const uint32_t msec,
const bool press);
176 return _currentState;
178 inline uint32_t lastChange(
void)
const
182 inline uint32_t getUpdateMsec(
void)
const
189 uint16_t _msecHold{500}, _msecDebounce{10};
191 uint16_t _msecDoubleClick{};
192 uint32_t _lastMsec{}, _lastChange{}, _lastRawChange{}, _lastClicked{};
193 uint16_t _lastHoldPeriod{};
197 uint8_t _press{}, _oldPress{}, _clickCount{};
Top level namespace of M5.
Definition base64.cpp:39