10#ifndef M5_UNIT_KEYBOARD_UTILITY_CARDKB2_MODIFIER_STATE_HPP
11#define M5_UNIT_KEYBOARD_UTILITY_CARDKB2_MODIFIER_STATE_HPP
33 void onSymEdge(
const bool pressed,
const uint32_t now_ms)
36 const ButtonEvent ev = _sym_detector.edge(pressed, now_ms);
37 if (ev == ButtonEvent::SingleClick) _sym_mode = !_sym_mode;
41 void onAaEdge(
const bool pressed,
const uint32_t now_ms)
43 const ButtonEvent ev = _caps_detector.edge(pressed, now_ms);
45 if (ev == ButtonEvent::PressDown && !_caps_lock) _caps_hold =
true;
47 if ((ev == ButtonEvent::PressUp || ev == ButtonEvent::LongPressUp) && !_caps_lock) _caps_hold =
false;
52 void onFnEdge(
const bool pressed)
58 void poll(
const uint32_t now_ms)
61 if (sev == ButtonEvent::SingleClick) _sym_mode = !_sym_mode;
63 const ButtonEvent cev = _caps_detector.poll(now_ms);
64 if (cev == ButtonEvent::SingleClick) {
67 _caps_one_time =
false;
69 _caps_one_time =
true;
71 }
else if (cev == ButtonEvent::DoubleClick) {
72 _caps_lock = !_caps_lock;
73 _caps_one_time =
false;
77 inline bool fnActive()
const
81 inline bool symActive()
const
83 return _sym_mode || _sym_held;
85 inline bool capsActive()
const
87 return _caps_one_time || _caps_lock || _caps_hold;
91 inline void consumeCapsOneShot()
93 if (_caps_one_time && !_caps_lock && !_caps_hold) _caps_one_time =
false;
98 _sym_detector.reset();
99 _caps_detector.reset();
100 _sym_mode = _sym_held = _fn =
false;
101 _caps_one_time = _caps_lock = _caps_hold =
false;
105 m5::unit::keyboard_bitwise::ButtonEventDetector _sym_detector{};
106 m5::unit::keyboard_bitwise::ButtonEventDetector _caps_detector{};
107 bool _sym_mode{
false};
108 bool _sym_held{
false};
110 bool _caps_one_time{
false};
111 bool _caps_lock{
false};
112 bool _caps_hold{
false};
Tracks Sym (toggle + momentary), Caps (one-shot/lock/hold) and Fn (momentary) from key edges,...
Top level namespace of M5Stack.