目录
- 一、HID 基础概念
- 1. 什么是 HID?
- 2. HID 报告(HID Report)
- 3. HID 传输协议
- 二、HID 报告描述符
- 1. 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) <-- 报告 ID0x05, 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
};
hid1_11规范(官方文档)