12static const constexpr uint8_t HID_KEYBOARD_REPORT_DESC[] = {
64 HIDKeyboard(
bool enable_out_endpoint =
false, uint8_t in_ep_interval = 1,
65 uint8_t out_ep_interval = 1,
68 :
HID(enable_out_endpoint, in_ep_interval, out_ep_interval, in_ep_num, out_ep_num)
236 LOCKING_CAPS_LOCK = 0x82,
237 LOCKING_NUM_LOCK = 0x83,
238 LOCKING_SCROLL_LOCK = 0x84,
242 INTERNATIONAL1 = 0x87,
243 INTERNATIONAL2 = 0x88,
244 INTERNATIONAL3 = 0x89,
245 INTERNATIONAL4 = 0x8A,
246 INTERNATIONAL5 = 0x8B,
247 INTERNATIONAL6 = 0x8C,
248 INTERNATIONAL7 = 0x8D,
249 INTERNATIONAL8 = 0x8E,
250 INTERNATIONAL9 = 0x8F,
262 ALTERNATE_ERASE = 0x99,
263 SYSREQ_ATTENTION = 0x9A,
341 RIGHT_CONTROL = 0xE4,
366 ASSERT(keys.size() <= 6);
367 report_ = {
static_cast<uint8_t
>(mods), 0, {0}};
381 Report report = {0, 0, {0}};
396 return ErrorCode::OK;
405 return ConstRawData{HID_KEYBOARD_REPORT_DESC,
sizeof(HID_KEYBOARD_REPORT_DESC)};
434 return ErrorCode::OK;
448 return ErrorCode::OK;
451 return ErrorCode::NOT_SUPPORT;
提供一个通用的回调包装,支持动态参数传递。 Provides a generic callback wrapper, supporting dynamic argument passing.
void Run(bool in_isr, PassArgs &&...args) const
执行回调函数,并传递参数。 Executes the callback function, passing the arguments.
常量原始数据封装类。 A class for encapsulating constant raw data.
size_t size_
数据大小(字节)。 The size of the data (in bytes).
const void * addr_
数据存储地址(常量)。 The storage address of the data (constant).
USB描述符基类 USB descriptor base class.
Data data_
设备描述符数据实例 / Internal data instance
@ HID
人机接口类 / Human Interface Device
EPNumber
端点号 / Endpoint number
@ EP_AUTO
自动分配端点号 / Auto allocate
USB HID(Human Interface Device)基类,支持可选 OUT 端点、自动生成描述符,适合键盘、鼠标、手柄等扩展。 USB HID (Human Interface Device)...
ErrorCode SendInputReport(ConstRawData report)
标准 USB HID 键盘派生类 Standard USB HID Keyboard derived class
void PressKey(std::initializer_list< KeyCode > keys, uint8_t mods=Modifier::NONE)
按下指定按键 / Press the specified key(s)
uint8_t led_state_
LED 状态/ LED state.
bool GetNumLock()
获取 NumLock 状态 / Get NumLock status
bool GetScrollLock()
获取 ScrollLock 状态 / Get ScrollLock status
void SetOnLedChangeCallback(LibXR::Callback< bool, bool, bool > cb)
设置 LED 状态变化回调 / Set LED state change callback
ErrorCode OnSetReportData(bool in_isr, ConstRawData &data) override
处理 SET_REPORT 数据阶段 / Handle SET_REPORT data stage
void OnDataOutComplete(bool in_isr, ConstRawData &data) override
OUT 端点回调,处理 LED 状态 / OUT endpoint callback, handle LED status.
Modifier
修饰键枚举 Modifier enum
@ LEFT_CTRL
左 Ctrl / Left Control
@ LEFT_SHIFT
左 Shift / Left Shift
@ RIGHT_ALT
右 Alt / Right Alt
@ LEFT_GUI
左 GUI / Left GUI (Win/Command)
@ LEFT_ALT
左 Alt / Left Alt
@ RIGHT_GUI
右 GUI / Right GUI
@ RIGHT_CTRL
右 Ctrl / Right Control
@ RIGHT_SHIFT
右 Shift / Right Shift
ErrorCode OnSetReport(uint8_t report_id, DeviceClass::RequestResult &result) override
处理 SET_REPORT 请求 / Handle SET_REPORT request
ErrorCode WriteDeviceDescriptor(DeviceDescriptor &header) override
写入设备描述符 / Write device descriptor
bool GetCapsLock()
获取 CapsLock 状态 / Get CapsLock status
KeyCode
按键代码枚举 / KeyCode enum
@ APPLICATION
Application (Menu)
@ KEYPAD_EQUAL_SIGN
Keypad =.
@ NON_US_HASH
Non-US # and ~.
@ KEYPAD_ENTER
Keypad Enter.
@ KEYPAD_ASTERISK
Keypad *.
@ ERROR_UNDEFINED
未定义 / ErrorUndefined
@ POST_FAIL
POST 失败 / POSTFail.
@ ERROR_ROLLOVER
错误溢出 / ErrorRollOver
@ NON_US_BACKSLASH
Non-US \ and |.
HIDKeyboard(bool enable_out_endpoint=false, uint8_t in_ep_interval=1, uint8_t out_ep_interval=1, Endpoint::EPNumber in_ep_num=Endpoint::EPNumber::EP_AUTO, Endpoint::EPNumber out_ep_num=Endpoint::EPNumber::EP_AUTO)
构造函数 / Constructor
void ReleaseAll()
释放所有按键 / Release all keys
ConstRawData GetReportDesc() override
获取报告描述符 / Get Report Descriptor
Report report_
当前输入报告 / Current input report
LibXR::Callback< bool, bool, bool > on_led_change_cb_
LED 状态变化回调 / LED state change callback.
控制请求结果结构体 / Structure for control transfer results
RawData read_data
设备返回给主机的数据 / Data to read (to host)
ClassID bDeviceClass
设备类代码 / Device class code
uint8_t bDeviceSubClass
设备子类代码 / Device subclass code
uint8_t bDeviceProtocol
协议代码 / Protocol code
输入报告结构体 / Keyboard input report struct
uint8_t keys[6]
最多 6 个按键 / Up to 6 keys
uint8_t modifiers
修饰键 / Modifier
uint8_t reserved
保留 / Reserved