12static const constexpr uint8_t HID_KEYBOARD_REPORT_DESC[] = {
67 bool enable_out_endpoint =
false, uint8_t in_ep_interval = 1,
68 uint8_t out_ep_interval = 1,
69 const char* interface_string =
70 HID<
sizeof(HID_KEYBOARD_REPORT_DESC), 8, 1>::DEFAULT_INTERFACE_STRING)
71 :
HID(in_ep_num, out_ep_num, enable_out_endpoint, in_ep_interval, out_ep_interval,
240 LOCKING_CAPS_LOCK = 0x82,
241 LOCKING_NUM_LOCK = 0x83,
242 LOCKING_SCROLL_LOCK = 0x84,
246 INTERNATIONAL1 = 0x87,
247 INTERNATIONAL2 = 0x88,
248 INTERNATIONAL3 = 0x89,
249 INTERNATIONAL4 = 0x8A,
250 INTERNATIONAL5 = 0x8B,
251 INTERNATIONAL6 = 0x8C,
252 INTERNATIONAL7 = 0x8D,
253 INTERNATIONAL8 = 0x8E,
254 INTERNATIONAL9 = 0x8F,
266 ALTERNATE_ERASE = 0x99,
267 SYSREQ_ATTENTION = 0x9A,
345 RIGHT_CONTROL = 0xE4,
370 ASSERT(keys.size() <= 6);
371 report_ = {
static_cast<uint8_t
>(mods), 0, {0}};
385 Report report = {0, 0, {0}};
409 return ConstRawData{HID_KEYBOARD_REPORT_DESC,
sizeof(HID_KEYBOARD_REPORT_DESC)};
通用回调包装,支持动态参数传递 / Generic callback wrapper supporting dynamic argument passing
只读原始数据视图 / Immutable raw data view
size_t size_
数据字节数 / Data size in bytes
const void * addr_
数据起始地址 / Data start address
USB描述符基类 USB descriptor base class.
Data data_
设备描述符数据实例 / Internal data instance
@ HID
人机接口类 / Human Interface Device
EPNumber
端点号 Endpoint number
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 OnSetReport(uint8_t report_id, DeviceClass::ControlTransferResult &result) override
处理 SET_REPORT 请求 / Handle SET_REPORT request
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 WriteDeviceDescriptor(DeviceDescriptor &header) override
写入设备描述符 / Write device descriptor
bool GetCapsLock()
获取 CapsLock 状态 / Get CapsLock status
HIDKeyboard(Endpoint::EPNumber in_ep_num, Endpoint::EPNumber out_ep_num, bool enable_out_endpoint=false, uint8_t in_ep_interval=1, uint8_t out_ep_interval=1, const char *interface_string=HID< sizeof(HID_KEYBOARD_REPORT_DESC), 8, 1 >::DEFAULT_INTERFACE_STRING)
构造函数 / Constructor
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 |.
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.
@ NOT_SUPPORT
不支持 | Not supported
@ OK
操作成功 | Operation successful
控制请求(Class/Vendor)处理结果 / Control request (Class/Vendor) handling result
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