M5Unit-KEYBOARD 0.1.0 git rev:b58d024
Loading...
Searching...
No Matches
unit_CardKB.hpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
3 *
4 * SPDX-License-Identifier: MIT
5 */
10#ifndef M5_UNIT_KEYBOARD_UNIT_CARD_KB_HPP
11#define M5_UNIT_KEYBOARD_UNIT_CARD_KB_HPP
12
13#include "unit_Keyboard.hpp"
14#include <m5_utility/container/circular_buffer.hpp>
15
16namespace m5 {
17namespace unit {
18
23namespace cardkb {
26constexpr uint8_t TYPE_CARDKB{0x01};
27constexpr uint8_t TYPE_CARDKB_V11{0x11};
29} // namespace cardkb
30
36class UnitCardKB : public UnitKeyboardBitwise {
37 M5_UNIT_COMPONENT_HPP_BUILDER(UnitCardKB, 0x5F);
38
39public:
41 static constexpr uint8_t NUMBER_OF_KEYS{48};
42
45 static constexpr keyboard::key_index_t KEY_ESC{0};
46 static constexpr keyboard::key_index_t KEY_1{1};
47 static constexpr keyboard::key_index_t KEY_2{2};
48 static constexpr keyboard::key_index_t KEY_3{3};
49 static constexpr keyboard::key_index_t KEY_4{4};
50 static constexpr keyboard::key_index_t KEY_5{5};
51 static constexpr keyboard::key_index_t KEY_6{6};
52 static constexpr keyboard::key_index_t KEY_7{7};
53 static constexpr keyboard::key_index_t KEY_8{8};
54 static constexpr keyboard::key_index_t KEY_9{9};
55 static constexpr keyboard::key_index_t KEY_0{10};
56 static constexpr keyboard::key_index_t KEY_BS{11};
57 static constexpr keyboard::key_index_t KEY_TAB{12};
58 static constexpr keyboard::key_index_t KEY_Q{13};
59 static constexpr keyboard::key_index_t KEY_W{14};
60 static constexpr keyboard::key_index_t KEY_E{15};
61 static constexpr keyboard::key_index_t KEY_R{16};
62 static constexpr keyboard::key_index_t KEY_T{17};
63 static constexpr keyboard::key_index_t KEY_Y{18};
64 static constexpr keyboard::key_index_t KEY_U{19};
65 static constexpr keyboard::key_index_t KEY_I{20};
66 static constexpr keyboard::key_index_t KEY_O{21};
67 static constexpr keyboard::key_index_t KEY_P{22};
68 static constexpr keyboard::key_index_t KEY_NO_KEY{23};
69 static constexpr keyboard::key_index_t KEY_LEFT{24};
70 static constexpr keyboard::key_index_t KEY_UP{25};
71 static constexpr keyboard::key_index_t KEY_A{26};
72 static constexpr keyboard::key_index_t KEY_S{27};
73 static constexpr keyboard::key_index_t KEY_D{28};
74 static constexpr keyboard::key_index_t KEY_F{29};
75 static constexpr keyboard::key_index_t KEY_G{30};
76 static constexpr keyboard::key_index_t KEY_H{31};
77 static constexpr keyboard::key_index_t KEY_J{32};
78 static constexpr keyboard::key_index_t KEY_K{33};
79 static constexpr keyboard::key_index_t KEY_L{34};
80 static constexpr keyboard::key_index_t KEY_ENTER{35};
81 static constexpr keyboard::key_index_t KEY_DOWN{36};
82 static constexpr keyboard::key_index_t KEY_RIGHT{37};
83 static constexpr keyboard::key_index_t KEY_Z{38};
84 static constexpr keyboard::key_index_t KEY_X{39};
85 static constexpr keyboard::key_index_t KEY_C{40};
86 static constexpr keyboard::key_index_t KEY_V{41};
87 static constexpr keyboard::key_index_t KEY_B{42};
88 static constexpr keyboard::key_index_t KEY_N{43};
89 static constexpr keyboard::key_index_t KEY_M{44};
90 static constexpr keyboard::key_index_t KEY_COMMA{45};
91 static constexpr keyboard::key_index_t KEY_PERIOD{46};
92 static constexpr keyboard::key_index_t KEY_SPACE{47};
94
97 static constexpr char SCHAR_LEFT{static_cast<char>(180)};
98 static constexpr char SCHAR_UP{static_cast<char>(181)};
99 static constexpr char SCHAR_DOWN{static_cast<char>(182)};
100 static constexpr char SCHAR_RIGHT{static_cast<char>(183)};
102
107 struct config_t {
109 bool start_periodic{true};
112
113 keyboard::Mode mode{keyboard::Mode::Conventional};
115 uint32_t interval{10};
117 uint32_t repeating_threshold{400};
119 uint32_t holding_threshold{800};
121 };
122
127 explicit UnitCardKB(const uint8_t addr = DEFAULT_ADDRESS) : UnitKeyboardBitwise(addr)
128 {
129 }
131 virtual bool begin() override;
133 virtual void update(const bool force = false) override;
134
137
138 inline config_t config() const
139 {
140 return _cfg;
141 }
146 inline void config(const config_t& cfg)
147 {
148 _cfg = cfg;
149 }
151
153 inline virtual keyboard::key_index_t toKeyIndex(const char ch) const override
154 {
155 return character_to_key_index(ch);
156 }
157
164 static keyboard::key_index_t character_to_key_index(const char ch);
172 static uint8_t character_to_mode_bits(const char ch);
173
177
181 uint8_t hardwareType() const
182 {
183 return _type;
184 }
190 bool readHardwareType(uint8_t& htype);
192
193protected:
194 bool update_new_firmware(const types::elapsed_time_t at);
195 void push_back(m5::container::CircularBuffer<uint8_t>* container, const uint8_t kidx, const uint8_t mod8);
196
197 inline virtual uint8_t to_mode_bits(const char ch) const override
198 {
199 return character_to_mode_bits(ch);
200 }
201
202protected:
203 uint8_t _type{};
204 config_t _cfg{};
205};
206
208namespace cardkb {
209namespace command {
210constexpr uint8_t CMD_HARDWARE_TYPE_REG{0xFD};
211} // namespace command
212} // namespace cardkb
214
215} // namespace unit
216} // namespace m5
217#endif
void config(const config_t &cfg)
Set the configuration.
Definition unit_CardKB.hpp:146
virtual void update(const bool force=false) override
Definition unit_CardKB.cpp:296
static constexpr uint8_t NUMBER_OF_KEYS
Number of keys in the scan matrix (Shift/Sym/Fn modifiers are tracked separately, not included here)
Definition unit_CardKB.hpp:41
static keyboard::key_index_t character_to_key_index(const char ch)
Character to key index.
Definition unit_CardKB.cpp:227
bool readHardwareType(uint8_t &htype)
Read the hardware type.
Definition unit_CardKB.cpp:373
UnitCardKB(const uint8_t addr=DEFAULT_ADDRESS)
Constructor.
Definition unit_CardKB.hpp:127
static uint8_t character_to_mode_bits(const char ch)
Character to mode bits.
Definition unit_CardKB.cpp:243
virtual bool begin() override
Definition unit_CardKB.cpp:263
virtual keyboard::key_index_t toKeyIndex(const char ch) const override
Obtains the key index corresponding to the specified character.
Definition unit_CardKB.hpp:153
uint8_t hardwareType() const
Gets the hardware type.
Definition unit_CardKB.hpp:181
config_t config() const
Gets the configuration.
Definition unit_CardKB.hpp:138
Class supporting keyboard state acquisition by key press bits.
For CardKB.
Top level namespace of M5Stack.
Unit-related namespace.
Settings for begin.
Definition unit_CardKB.hpp:107
uint32_t repeating_threshold
Threshold for key repeating (ms)
Definition unit_CardKB.hpp:117
uint32_t interval
Periodic interval.
Definition unit_CardKB.hpp:115
uint32_t holding_threshold
Threshold for key holding (ms)
Definition unit_CardKB.hpp:119
bool start_periodic
Start periodic measurement on begin?
Definition unit_CardKB.hpp:109
keyboard::Mode mode
Definition unit_CardKB.hpp:113
constexpr uint8_t TYPE_CARDKB_V11
V11 SKU:U035-B.
Definition unit_CardKB.hpp:27
constexpr uint8_t TYPE_CARDKB
SKU:U035.
Definition unit_CardKB.hpp:26
Base class for units.
uint8_t key_index_t
Key index (Not character)
Definition unit_Keyboard.hpp:26
Mode
Operation mode for M5Unit-KEYBOARD firmware.
Definition unit_Keyboard.hpp:58