使用Wireshark获取USB HID(Human Interface Device)报告描述符

使用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, 0x0D0xC0, 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, 0x010xC0 是描述键盘 功能的部分,使用的是报告 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 字节,涵盖了一个带触控笔和键盘功能的设备,适用于像平板电脑或触控显示器这样的输入设备。

相关推荐
幽兰的天空2 小时前
介绍 HTTP 请求如何实现跨域
网络·网络协议·http
lisenustc2 小时前
HTTP post请求工具类
网络·网络协议·http
心平气和️2 小时前
HTTP 配置与应用(不同网段)
网络·网络协议·计算机网络·http
心平气和️2 小时前
HTTP 配置与应用(局域网)
网络·计算机网络·http·智能路由器
Mbblovey3 小时前
Picsart美易照片编辑器和视频编辑器
网络·windows·软件构建·需求分析·软件需求
北顾南栀倾寒3 小时前
[Qt]系统相关-网络编程-TCP、UDP、HTTP协议
开发语言·网络·c++·qt·tcp/ip·http·udp
GZ_TOGOGO4 小时前
PIM原理与配置
网络·华为·智能路由器
7ACE4 小时前
Wireshark TS | 虚假的 TCP Spurious Retransmission
网络·网络协议·tcp/ip·wireshark·tcpdump
大丈夫立于天地间5 小时前
ISIS基础知识
网络·网络协议·学习·智能路由器·信息与通信
hgdlip5 小时前
IP属地与视频定位位置不一致:现象解析与影响探讨
服务器·网络·tcp/ip