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

使用Wireshark选择需要获取的USB进行抓取数据,找到设备(host)接收信息的数据

第二栏出现hid报告,右击选择复制流 

将复制的内容粘贴到USB标准请求及描述符在线分析工具 - USB中文网 进行解析

以图中获取手写板的数据为例:

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. 基本描述
0x05, 0x0D        // Usage Page (Digitizer): 使用 Digitizer(数位板/触控笔)功能页
0x09, 0x01        // Usage (Digitizer): 使用 Digitizer 功能
0xA1, 0x01        // Collection (Application): 开始一个应用集合
1.2. 开关功能(Tip Switch, Barrel Switch, Eraser, Invert)
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 坐标)
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)
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. 键盘基本描述
0x05, 0x01        // Usage Page (Generic Desktop Ctrls): 通用桌面控制
0x09, 0x06        // Usage (Keyboard): 键盘功能
0xA1, 0x01        // Collection (Application): 开始一个应用集合
0x85, 0x02        // Report ID (2): 报告 ID 为 2
2.2. 键盘修饰键输入
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. 普通键盘按键输入
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 字节,涵盖了一个带触控笔和键盘功能的设备,适用于像平板电脑或触控显示器这样的输入设备。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/13038.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【深度学习】LSTM、BiLSTM详解

文章目录 1. LSTM简介:2. LSTM结构图:3. 单层LSTM详解4. 双层LSTM详解5. BiLSTM6. Pytorch实现LSTM示例7. nn.LSTM参数详解 1. LSTM简介: LSTM是一种循环神经网络,它可以处理和预测时间序列中间隔和延迟相对较长的重要事件。LSTM通…

PyQt5 加载UI界面与资源文件

步骤一: 使用 Qt Designer 创建 XXX.ui文件 步骤二: 使用 Qt Designer 创建 资源文件 步骤三: Python文件中创建相关类, 使用 uic.loadUi(mainwidget.ui, self ) 加载UI文件 import sys from PyQt5 import QtCore, QtWidgets, uic from PyQt5.QtCore import Qt f…

ENSP作业——小型园区网

题目 根据上图,可得需求为: 1.配置交换机上的VLAN及IP地址。 2.设置SW1为VLAN 2/3的主根桥,设置SW2为VLAN 20/30的主根桥,且两台交换机互为主备。 3.可以使用super vlan。(本次实验中未使用) 4.上层通过静…

计算机网络:运输层 —— 运输层端口号

文章目录 运输层端口号的分类端口号与应用程序的关联应用举例发送方的复用和接收方的分用 运输层端口号的分类 端口号只具有本地意义,即端口号只是为了标识本计算机网络协议栈应用层中的各应用进程。在因特网中不同计算机中的相同端口号是没有关系的,即…

【C++练习】使用C++编写程序计算π的近似值

题目:使用C编写程序计算π的近似值 描述: 编写一个C程序,使用一个特定的数学公式来计算圆周率(π)的近似值。该程序定义了一个函数calculatePi(),该函数通过一个迭代算法和一个涉及反正切函数(…

Hook小程序

下载: https://github.com/JaveleyQAQ/WeChatOpenDevTools-Python 配置: pip install -r requirements 实现: 开启小程序开发者模式,类似浏览器F12 效果: 使用: 退出微信,进入安装的目录…

如何在pycharm中 判断是否成功安装pytorch环境

1、在电脑开始端,找到 2、打开后 在base环境下 输入conda env list 目前我的环境中没有pytorch 学习视频:【Anaconda、Pytorch、Pycharm到底是什么关系?什么是环境?什么是包?】https://www.bilibili.com/video/BV1CN411s7Ue?vd_sourcefad0750b8c6…

AI陪伴走热,网易云信“融合通讯+AI”新方案发布!附场景App及源码

信息秒回、不会失联、724h 情感陪伴、随时提供情绪价值......在 AI 能力越来越强大的今天,我们开始有了“AI 助手”、“AI 搭子”,甚至开始谈起“AI 男友/女友”,AI 的角色早已超越了简单的生产力工具,它正深入到我们生活的方方面…

力扣 LeetCode 704. 二分查找(Day1:数组)

解题思路: 二分查找主要分为[ left , right ]左闭右闭和[ left , right )左闭右开两种 此处采取[ left , right ]左闭右闭写法 注意: 1. right的初始化取值 2. while中取等 3. right mid -1 ; class Solution {public int search(int[] nums, i…

java-AOP编程示例

SpringBoot工程,有不懂的留言or Kimi一下 LogAspect.java package com.xxx.javaaopdemo.Aspect;import com.xxx.javaaopdemo.LogAnnotation; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang…

Kafka入门:Java客户端库的使用

在现代的分布式系统中,消息队列扮演着至关重要的角色,而Apache Kafka以其高吞吐量、可扩展性和容错性而广受欢迎。本文将带你了解如何使用Kafka的Java客户端库来实现生产者(Producer)和消费者(Consumer)的基…

使用 npm 安装 Yarn

PS E:\WeChat Files\wxid_fipwhzebc1yh22\FileStorage\File\2024-11\spid-admin\spid-admin> yarn install yarn : 无法将“yarn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后…

力扣617:合并二叉树

给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠&#…

谷歌浏览器支持的开发者工具详解

谷歌浏览器(Google Chrome)是全球最受欢迎的网页浏览器之一,它不仅提供了快速、安全的浏览体验,还为开发者提供了强大的开发者工具。本文将详细介绍如何使用谷歌浏览器的开发者工具,并解答一些常见问题。(本…

HTB:OpenAdmin[WriteUP]

目录 连接至HTB服务器并启动靶机 使用nmap对靶机TCP端口进行开放扫描 继续使用nmap对靶机22、80端口进行脚本、服务扫描 使用Dirbuster对靶机网页路径进行递归扫描 ​编辑 尝试在searchsploit中搜索改WebAPP漏洞 横向移动(其实没有横) 启动Metasploit 特权提升 USER_…

IO作业5

设置双信号实现交替生产者线程和消费者线程 #include <myhead.h> int n0; pthread_mutex_t fastmutex;//定义互斥锁 pthread_cond_t cond;//定义条件变量 pthread_cond_t cond2; void *product() {int i;for(i0;i<10;i){n;printf("我生产了一台特斯拉n%d\n"…

Web3.0安全开发实践|BNB链安全开发,这10大实用tips一定要收藏

BNB Chain是Web3世界中最受欢迎的区块链之一&#xff0c;其费用合理、交易迅速以及项目生态系统丰富几大原因吸引了广大用户。与任何的区块链都一样&#xff0c;BNB Chain上的开发者在开发过程中首先考虑的应该是安全问题&#xff1a;因为任何资金的损失都会导致用户对协议及平…

QT开发笔记之小知识

QCoreApplication::aboutToQuit 主事件循环退出前发出的信号&#xff0c;是程序退出前等待QT线程退出回收资源的神器。 官方帮助文档 [signal] void QCoreApplication::aboutToQuit() 该信号在应用程序即将退出主事件循环时发出&#xff0c;例如&#xff1a;当事件循环级别降至…

插入排序(C语言)

直接插入排序的基本思想&#xff1a;把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个新的有序序列 。 一、步骤 1.给定一个乱序的数组&#xff0c;如 从第一个元素开始排序&#xff0c;当只…

文心一言 VS 讯飞星火 VS chatgpt (389)-- 算法导论25.1 2题

二、为什么要求对于所有的 1 ⩽ i ⩽ n 1⩽i⩽n 1⩽i⩽n&#xff0c;有 w i i 0 w_{ii}0 wii​0 &#xff1f;如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 在许多数学和计算应用中&#xff0c;要求矩阵 W W W 的对角线元素 w i i 0 w_{ii} 0 wii​0 是…