HID学习笔记
一、HID 基础概念
1. 什么是 HID?
- HID(Human Interface Device) 是 USB 和 Bluetooth 设备的通用协议,主要用于 键盘、鼠标、游戏手柄、触摸板、遥控器等 人机交互设备。
- HID 设备通过 HID 报告(HID Report) 与主机通信,主机解析 HID 描述符(HID Descriptor)来理解数据格式。
2. HID 报告(HID Report)
- HID 输入报告(Input Report) → 设备向主机发送,例如键盘按键、鼠标移动。
- HID 输出报告(Output Report) → 主机向设备发送,例如键盘指示灯(Num Lock、Caps Lock)。
- HID 特征报告(Feature Report) → 设备和主机之间的配置数据交换,例如固件升级指令。
3. HID 传输协议
- USB HID:USB 设备通过 中断传输(Interrupt Transfer) 发送 HID 报告。
- BLE HID:蓝牙 HID 通过 GATT(Generic Attribute Profile) 传输 HID 报告,HID 数据在 GATT 特性(Characteristics)中进行读写。
二、HID 报告描述符
HID 设备通过 HID Report Descriptor(HID 报告描述符) 告诉主机如何解析数据
1. HID 报告描述符格式
// HID Keyboard Report Descriptor
const uint8_t hid_keyboard_report_desc[] = {
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x06, // Usage (Keyboard)
0xA1, 0x01, // Collection (Application)
0x85, 0x01, // Report ID (1) <-- 报告 ID
0x05, 0x07, // Usage Page (Keyboard)
0x19, 0xE0, // Usage Minimum (Left Control)
0x29, 0xE7, // Usage Maximum (Right GUI)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x75, 0x01, // Report Size (1)
0x95, 0x08, // Report Count (8)
0x81, 0x02, // Input (Data,Var,Abs) <-- 8bit 修饰键
0x95, 0x01, // Report Count (1)
0x75, 0x08, // Report Size (8)
0x81, 0x03, // Input (Cnst,Var,Abs) <-- 1字节保留位
0x95, 0x06, // Report Count (6)
0x75, 0x08, // Report Size (8)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x65, // Logical Maximum (101)
0x05, 0x07, // Usage Page (Keyboard)
0x19, 0x00, // Usage Minimum (0)
0x29, 0x65, // Usage Maximum (101)
0x81, 0x00, // Input (Data,Ary,Abs) <-- 6字节按键值
0xC0 // End Collection
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!