1.获取设备描述符
CTL: 80 06 00 01 00 00 12 00
IN:  12 01 00 02 00 00 00 08 61 04 4a 5b 00 01 01 02 00 01

解析:

方向:电脑向鼠标请求

请求:获取18字节(0x12)的设备描述符

12 01 -描述符长度18字节,类型为设备描述符

00 02 -USB规范版本2.00

00 -设备类(在接口中定义)

00-设备子类 

00-设备协议

08-最大包大小8字节

61 04 -厂商ID 0x0461

4a 5b -产品ID 0x5b4a

00 01 -设备版本1.00

01-厂商字符串索引1

02-厂商字符串索引2

00-无序列号

01-配置数量1个

2.获取配置描述符(首次9字节)

CTL: 80 06 00 02 00 00 09 00
IN:  09 02 22 00 01 01 00 a0 32

解析:

请求:获取配置描述符的前9字节

响应:配置描述符头部

09 02 -长度9字节,类型配置描述符

22 00 总长度34字节(0x22)

01 -接口数量1个

01 -配置值1

a0 -属性(总线供电,支持远程唤醒)

32 -最大电流100mA(0x32*2mA)

3.获取完整配置描述符集合(34字节)

CTL: 80 06 00 02 00 00 22 00
IN:  09 02 22 00 01 01 00 a0 32 09 04 00 00 01 03 01 02 00 09 21 11 01 00 01 22 4f 00 07 05 81 03 08 00 00

这是最关键的部分,包含完整的配置信息

A.配置描述符

09 02 22 00 01 01 00 a0 32 (同上)

. 接口描述符 (9字节) ⭐ 鼠标识别关键

09 04 00 00 01 03 01 02 00

  • 09 04 - 长度9字节,类型接口描述符

  • 00 - 接口编号0

  • 00 - 交替设置0

  • 01 - 端点数量1个

  • 03 - 接口类:0x03 = HID设备 ✅

  • 01 - 接口子类:0x01 = 支持启动协议 ✅

  • 02 - 接口协议:0x02 = 鼠标 ✅

  • 00 - 接口字符串索引(无)

C. HID描述符 (9字节)

09 21 11 01 00 01 22 4f 00

  • 09 21 - 长度9字节,类型HID描述符

  • 11 01 - HID规范版本1.11

  • 00 - 国家代码(无)

  • 01 - HID描述符数量1个

  • 22 - 描述符类型(报告描述符)

  • 4f 00 - 报告描述符长度79字节(0x4f)

D. 端点描述符 (7字节)

07 05 81 03 08 00 00

6. 📄 获取HID报告描述符

CTL: 81 06 00 22 00 00 8f 00
IN:  05 01 09 02 a1 01 09 01 a1 00 05 09 19 01 29 03 15 00 25 01 75 01 95 03 81 02 75 05 95 01 81 03 05 01 09 30 09 31 09 38 15 81 25 7f 75 08 95 03 81 06 09 3c 05 ff 95 01 75 08 81 06 05 0c 0a 38 02 95 01 81 06 c0 c0

报告描述符解析:

7. 🔤 获取字符串描述符

CTL: 80 06 02 03 09 04 06 01
IN:  38 03 48 00 50 00 20 00 31 00 32 00 35 00 20 00 41 00 4d 00 20 00 55 00 53 00 42 00 20 00 4f 00

解析:

🎯 总结确认

通过分析接口描述符:

设备33被明确识别为一个HID兼容鼠标,支持标准的鼠标报告格式。

  • 07 05 - 长度7字节,类型端点描述符

  • 81 - 端点地址(IN端点1)

  • 03 - 属性(中断传输)

  • 08 00 - 最大包大小8字节

  • 00 - 轮询间隔(系统决定)

  • 4. ⚙️ 设置配置

    text

    CTL: 00 09 01 00 00 00 00 00
  • 激活配置1,设备进入配置状态

  • 5. 🎮 HID类特定请求:设置空闲

    CTL: 21 0a 00 00 00 00 00 00
  • 21 - 方向OUT,类特定请求,指向接口

  • 0a - SET_IDLE请求

  • 设置设备在无数据变化时不报告

  • 定义了鼠标的数据格式:按钮状态(3位)、X/Y坐标、滚轮等

  • 这是HID设备功能的具体定义

  • 获取产品字符串(索引2)

  • Unicode字符串:"HP 125 AM USB O"

  • bInterfaceClass = 0x03 → HID设备

  • bInterfaceSubClass = 0x01 → 支持启动协议

  • bInterfaceProtocol = 0x02 → 鼠标

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐