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
};

hid1_11规范(官方文档)

posted @ 2025-02-07 07:32  D·Kingson.Mo  阅读(691)  评论(0)    收藏  举报