使用Wireshark选择需要获取的USB进行抓取数据,找到设备(host)接收信息的数据
第二栏出现hid报告,右击选择复制流
将复制的内容粘贴到USB标准请求及描述符在线分析工具 - USB中文网 进行解析
以图中获取手写板的数据为例:
python
0x05, 0x0D, // Usage Page (Digitizer)
0x09, 0x01, // Usage (Digitizer)
0xA1, 0x01, // Collection (Application)
0x85, 0x01, // Report ID (1)
0x09, 0x02, // Usage (Pen)
0xA1, 0x00, // Collection (Physical)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x75, 0x01, // Report Size (1)
0x09, 0x42, // Usage (Tip Switch)
0x09, 0x44, // Usage (Barrel Switch)
0x09, 0x45, // Usage (Eraser)
0x09, 0x3C, // Usage (Invert)
0x95, 0x04, // Report Count (4)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x01, // Report Count (1)
0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x32, // Usage (In Range)
0x95, 0x01, // Report Count (1)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x02, // Report Count (2)
0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x15, 0x00, // Logical Minimum (0)
0x35, 0x00, // Physical Minimum (0)
0x65, 0x11, // Unit (System: SI Linear, Length: Centimeter)
0x55, 0x0F, // Unit Exponent (-1)
0x75, 0x10, // Report Size (16)
0x95, 0x01, // Report Count (1)
0x09, 0x30, // Usage (X)
0x26, 0x38, 0x63, // Logical Maximum (25400)
0x45, 0x73, // Physical Maximum (115)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x31, // Usage (Y)
0x26, 0x03, 0x3E, // Logical Maximum (15875)
0x45, 0x48, // Physical Maximum (72)
0x95, 0x01, // Report Count (1)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x65, 0x00, // Unit (None)
0x55, 0x00, // Unit Exponent (0)
0x05, 0x0D, // Usage Page (Digitizer)
0x09, 0x30, // Usage (Tip Pressure)
0x15, 0x00, // Logical Minimum (0)
0x26, 0xFF, 0x1F, // Logical Maximum (8191)
0x75, 0x10, // Report Size (16)
0x95, 0x01, // Report Count (1)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x3D, // Usage (X Tilt)
0x16, 0xD8, 0xDC, // Logical Minimum (-9000)
0x26, 0x28, 0x23, // Logical Maximum (9000)
0x75, 0x10, // Report Size (16)
0x95, 0x01, // Report Count (1)
0x55, 0x0E, // Unit Exponent (-2)
0x65, 0x14, // Unit (System: English Rotation, Length: Centimeter)
0x36, 0xD8, 0xDC, // Physical Minimum (-9000)
0x46, 0x28, 0x23, // Physical Maximum (9000)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x3E, // Usage (Y Tilt)
0x16, 0xD8, 0xDC, // Logical Minimum (-9000)
0x26, 0x28, 0x23, // Logical Maximum (9000)
0x75, 0x10, // Report Size (16)
0x95, 0x01, // Report Count (1)
0x55, 0x0E, // Unit Exponent (-2)
0x65, 0x14, // Unit (System: English Rotation, Length: Centimeter)
0x36, 0xD8, 0xDC, // Physical Minimum (-9000)
0x46, 0x28, 0x23, // Physical Maximum (9000)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
0xC0, // End Collection
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x06, // Usage (Keyboard)
0xA1, 0x01, // Collection (Application)
0x85, 0x02, // Report ID (2)
0x05, 0x07, // Usage Page (Kbrd/Keypad)
0x75, 0x01, // Report Size (1)
0x95, 0x08, // Report Count (8)
0x19, 0xE0, // Usage Minimum (0xE0)
0x29, 0xE7, // Usage Maximum (0xE7)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x0C, // Report Count (12)
0x75, 0x08, // Report Size (8)
0x15, 0x00, // Logical Minimum (0)
0x25, 0xFF, // Logical Maximum (-1)
0x05, 0x07, // Usage Page (Kbrd/Keypad)
0x19, 0x00, // Usage Minimum (0x00)
0x29, 0xFF, // Usage Maximum (0xFF)
0x81, 0x00, // Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
// 188 bytes
// best guess: USB HID Report Descriptor
这段是一个USB HID(Human Interface Device)报告描述符 ,用于描述支持**触控笔(Pen Digitizer)和键盘(Keyboard)**功能的设备。这种描述符通常用于告诉主机(比如电脑或手机),设备支持哪些功能,并定义输入报告的格式。
1. 触控笔描述符(Report ID 1)
从 0x05, 0x0D
到 0xC0, 0xC0
是描述触控笔 功能的部分,使用的是报告 ID 1。
1.1. 基本描述
python
0x05, 0x0D // Usage Page (Digitizer): 使用 Digitizer(数位板/触控笔)功能页
0x09, 0x01 // Usage (Digitizer): 使用 Digitizer 功能
0xA1, 0x01 // Collection (Application): 开始一个应用集合
1.2. 开关功能(Tip Switch, Barrel Switch, Eraser, Invert)
python
0x85, 0x01 // Report ID (1): 报告 ID 为 1
0x09, 0x02 // Usage (Pen): 使用 Pen(触控笔)
0xA1, 0x00 // Collection (Physical): 开始一个物理集合
0x09, 0x42 // Usage (Tip Switch): 笔尖开关(即触摸状态)
0x09, 0x44 // Usage (Barrel Switch): 侧键开关
0x09, 0x45 // Usage (Eraser): 橡皮擦开关
0x09, 0x3C // Usage (Invert): 翻转检测
- 这部分定义了触控笔的各种开关,如笔尖、侧键、橡皮擦和翻转状态
1.3. 位置输入(X, Y 坐标)
python
0x05, 0x01 // Usage Page (Generic Desktop Ctrls): 通用桌面控制
0x09, 0x30 // Usage (X): X 轴坐标
0x09, 0x31 // Usage (Y): Y 轴坐标
0x26, 0x38, 0x63 // Logical Maximum (25400): X 坐标最大值为 25400
0x26, 0x03, 0x3E // Logical Maximum (15875): Y 坐标最大值为 15875
- 定义了触控笔的 X 和 Y 轴坐标输入,分别有 16 位(Report Size 16),逻辑最大值是 25400 和 15875,分别表示最大分辨率
1.4. 压力与倾斜输入(Tip Pressure, X Tilt, Y Tilt)
python
0x09, 0x30 // Usage (Tip Pressure): 笔尖压力
0x26, 0xFF, 0x1F // Logical Maximum (8191): 压力最大值为 8191
0x09, 0x3D // Usage (X Tilt): X 轴倾斜
0x09, 0x3E // Usage (Y Tilt): Y 轴倾斜
0x16, 0xD8, 0xDC // Logical Minimum (-9000): 倾斜最小值 -9000
0x26, 0x28, 0x23 // Logical Maximum (9000): 倾斜最大值 9000
- 笔尖压力为 16 位输入,逻辑范围是 0-8191。
- 倾斜输入(X Tilt, Y Tilt)也为 16 位,范围为 -9000 到 9000。
2. 键盘描述符(Report ID 2)
从 0x05, 0x01
到 0xC0
是描述键盘 功能的部分,使用的是报告 ID 2。
2.1. 键盘基本描述
python
0x05, 0x01 // Usage Page (Generic Desktop Ctrls): 通用桌面控制
0x09, 0x06 // Usage (Keyboard): 键盘功能
0xA1, 0x01 // Collection (Application): 开始一个应用集合
0x85, 0x02 // Report ID (2): 报告 ID 为 2
2.2. 键盘修饰键输入
python
0x75, 0x01 // Report Size (1): 每个输入 1 位
0x95, 0x08 // Report Count (8): 有 8 个输入
0x19, 0xE0 // Usage Minimum (0xE0): 使用最小值为 0xE0(修饰键如 Shift, Ctrl)
0x29, 0xE7 // Usage Maximum (0xE7): 使用最大值为 0xE7
- 这部分描述了 8 位的修饰键输入(如 Ctrl、Shift、Alt、Win 键)。
2.3. 普通键盘按键输入
python
0x75, 0x08 // Report Size (8): 每个按键输入 8 位
0x95, 0x0C // Report Count (12): 支持最多同时 12 个按键输入
0x19, 0x00 // Usage Minimum (0x00): 使用最小值为 0x00
0x29, 0xFF // Usage Maximum (0xFF): 使用最大值为 0xFF
- 定义了普通按键的输入,共 12 个按键,每个按键 8 位(1 字节)
- 报告 ID 1 是用于**触控笔(Digitizer)**的输入:
- 包含按钮状态(笔尖、侧键、橡皮擦)、X 和 Y 坐标、笔尖压力、X 和 Y 倾斜。
- 报告 ID 2 是用于键盘 的输入:
- 包含修饰键(Ctrl、Shift 等)和普通按键的输入,支持最多 12 个按键同时按下。
这个 HID 报告描述符总共占用 188 字节,涵盖了一个带触控笔和键盘功能的设备,适用于像平板电脑或触控显示器这样的输入设备。