本文是<实战解析 USB HID 协议>的后续, 文中只有一个细小的新知识点, 主要是补充USB HID Mouse的HID Report Descriptor和Input Report作为例子, 供读者学习参考. 这回我换套工具, 用(昂贵的)Lecroy USB Protocol Suite捕捉/呈现USB Mouse数据(其实USB协议分析仪主要用在硬件产品设计阶段, 用于定位/分析回路或固件设计缺陷; 用来抓USB2.0 Full Speed设备的数据实属杀鸡用牛刀).
下图是USB Protocol Suite在USB发射器插入后捕获的USB设备的SETUP Transfer:

上图中
Transfer 1# ~ Transfer 17#是所有USB2.0设备所共有的Standard Request;
Transfer 18# ~ Transfer 19#: USB Host向USB Device请求USB Keyboard HID Report Descriptor;
Transfer 20# ~ Transfer 21#: USB Host向USB Device请求USB Mouse HID Report Descriptor.
USB Protocol Suite解析得到的Keyboard/Mouse Report Descriptor分别如下:

USB Keyboard HID Report Descriptor (完整Keyboard Report Descriptor 报告见附件html文档)

USB Mouse HID Report Descriptor (完整Mouse Report Descriptor 报告见附件html文档)
USB Protocol Suite 为USB Keyboard生成的HTML文档大小32KB; 为USB Mouse生成的HTML文档大小 80KB. 可见USB Mouse的功能更为复杂(毕竟在设备管理器里HID Keyboard才1个虚拟设备; HID Mouse有5个虚拟设备).

依然使用前一篇文章总结出来的方法, 按以下步骤进行解析:
a). 按UsagePage/Usage/Collection & End Collection进行分组(绿框部分) ;
b). 把Collection & End Collection中相同的Main Item归为一类(红框部分), 同时计算Hid Report将占用的Size;
c). 解读各个字段含义;
Step a). 按UsagePage/Usage/Collection & End Collection进行分组. 按这个规则可以分5组, 如下图. 5个分组中只有第一个分组的用途是Mouse (Usage (Mouse)), 因此我们将注意力集中在此:

Step b). 把Collection & End Collection中相同的Main Item归为一类(下图中所有红框都属于Input Main Item).
传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!