|
Wireshark Version 3.2.2 (v3.2.2-0-ga3efece3d640)
usb.addr = "1.11.0",其中1表示总线ID、11表示设备地址、0表示设备的端口0(即控制端口)
usb.device_address == 12
这样下面显示的就全是设备地址为12的数据了。
usb.device_address==17 &&usb.src=="1.17.0"
usb.device_address==17 &&usb.dst=="1.17.1"
https://blog.csdn.net/shiailan/article/details/97305163
https://www.amobbs.com/thread-5698355-1-1.html?_dsign=6c372e94
https://blog.csdn.net/haart/article/details/98757658
https://blog.csdn.net/zhoutaopower/article/details/82469665
https://blog.csdn.net/yhl_sophia/article/details/81503046
https://blog.csdn.net/zjy900507/article/details/81280089
报文太多可以通过一些过滤条件,筛选出我们需要的报文。在过滤器中输入usb.addr==“1.5.0”,即可只显示我们想要的报文(因为我想保留的usb设备的地址是5,所以addr等于1.5.0,其中0表示端点0)。
参考文献:Device Class Definition for Human Interface Devices(HID)
用于描述HID功能特征的有三个值:Class SubClass Interfaces
Subclass Code Description
0 No Subclass
1 Boot Interface Subclass
2 - 255 Reserved
Protocol Code Description
0 None
1 Keyboard
2 Mouse
3 - 255 Reserved
The bInterfaceProtocol member of an Interface descriptor only has meaning if the bInterfaceSubClass
member declares that the device supports a boot interface, otherwise it is 0.
HID设备的特性
HID设备与HID驱动只能通过控制传输或者中断传输来连接,且端点0在USB设备中通常是作为控制管道。
在HID中,一次传输就是一个报告。
HID 支持在运行时忽略报表中某些字段的功能,这通过定义报告符长度大于实际生成的报告符长度来实现
HID设备通过HID描述符、报告描述符和物理描述符进行描述,其中物理描述符是可选的
由图可看出,HID Descriptor是与Interface Descriptor并行的描述符,其Class、SubClass和Protocol属性都是在接口描述符中配置,如下:
bInterfaceClass —— 3(HID Class)
bInterfaceSubclass —— 0(Have no subclass) / 1(Boot Device)
bInterfaceProtocol —— 0(Have no Protocol, only valid when Subclass is Boot Device)
同时,Device Descriptor 中的bDeviceClass需配置成0x00
HID Descriptor的组成:
bLength bDescriptorType bcdHID bCountryCode bNumDescriptors bDescriptorType bDescriptorLength...
HID Report Descriptor
如果报告描述符中有出现Report ID,则表示有多个Report,否则就只有一个Input、Output和Feature结构体存在,她们即代表所有的设备数据。
报告描述符中由不同的item组成,一个Item是关于设备的一块信息,所有Item都有1字节的卷标,卷标里包含Tag,type,size
相应的HID Driver里面有一个Item 解析器,对报告符中的Item进行解析,Item解析器一般会解析到Main Item、Pop Item和Push Item并进行相应的操作。
Report Descriptor中的Item解读
Item由三种类型:Main(主项目)、Global(全局项目)、Local(区域项目),后两者主要用于修饰Main Item
Local Item只适用于列下的第一个主项目,而Global Item则适用于其下方的所有主项目
1、 Main Item的主要数据格式
input:设备操作输入到主机的数据格式,该数据格式会形成一个输入报告。获取输入报告的方式有两种:1、用Control pipe以get report(input)来传输;2、用Interrupt pipe在每一周期固定更新输入报告给主机
Output:主机输出到装置的数据格式,形成一个输出报告,以Control pipe用set report(output)将报告送到设备,通常不建议用Interrupt pipe.
Feature:主机送到设备的组态所需数据的数据格式,特征报告只能用Control pipe以get report(feature)和set report(feature)来取得和送出。
Collection:Input、Output和Feature的集合,如Mouse、Keyboard等(代码类型有:Physical、Application、Logical、Report、Named Array、Usage Switch、Usage Modify、Reserved)
End Collection:Collection集合结束
2、Global Item的主要数据格式(不完全)
Usage Page
Report Count
Report Size
3、Local Item的主要数据格式(不完全)
Usage
Usages(用途)是报告符中的一部分,主要用于确认设备的具体操作信息,一个报告符中可以含有多个Usage tags。
Usage和Control的关系是一一对应的
Usage是一个32位的无符号整型,高16位定义用途页(Usage Page),低16位定义用途ID(Usage ID)
Usage Mininum
Usage Maximum
一般的Items 数据格式分两个部分:前缀和数据
例如:USAGE_PAGE(0x05,0x01) 前者表示前缀,后者表示数据
0x01表示用途页为通用桌面设备
0x05——00000101
D0~D1表示这个前缀后面跟的数据长度
D2~D3表示前缀的类型,0-main 1-global 2-local 3-reserved
D4~D7表示前缀的tag,一般有input、output、feature、collection、end collection
HID规范中指出:HID为发送输入报告必须拥有一个中断输入端点。中断IN端点使HID能够在非可预期的时间内向主机发送信息,主机驱动程序将使用中断事务来周期性的轮询设备以获得数据。
因此,对于设备来说,其发送端点(对于主机来说是输入端点)必须为中断端点,这是由HID的类驱动程序所决定的,主机的类驱动程序不会读取HID接口的其它类型的端点的数据。这样设计也是为了保证数据传输的带宽。
而对于HID接口的输出端点(对于设备来说是接收端点),可以使用其它的类型,比如批量端点。
工具:
USB 协会提供了一个HID 描述符编辑工具称作HID Descriptor Tool,其执行程序为DT.exe。这个工具软件可以在USB 网站上取得。虽然称作HID 描述符工具,事实上,仅提供编撰报告描述符之用。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|