必威体育Betway必威体育官网
当前位置:首页 > IT技术

USB-HID设备协议解读

时间:2019-08-08 12:14:29来源:IT技术作者:seo实验室小编阅读:81次「手机版」
 

hid

 参考文献: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设备的描述符分层图:

由图可看出,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则适用于其下方的所有主项目

1Main 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接口的输出端点(对于设备来说是接收端点),可以使用其它的类型,比如批量端点。

相关阅读

uvmm中设备管理

1.设备分类 Uvmm中管理的设备分为两类:透传设备和虚拟设备(模拟设备)。在虚拟机中通过Device_repository类管理,其结构类图如下: 2.

Linux lspci查看硬件设备

Linux 主机的硬件配备lspci 找到的是目前主机上面的硬件配备[root@www ~]# lspci [-vvn]选项与参数:-v     :显示更多的 PCI 接

Linux存储在线管理(一)FC磁盘设备管理

本文主要介绍Linux环境下FC磁盘管理相关只是,主要内容包括FC驱动介绍、Linux SCSI磁盘永久命名、FC磁盘添加与删除、FC磁盘路径添

USB大容量存储设备无法启动--这个设备(服务)的驱动程

问题描述如下: 这个设备(服务)的驱动程序已被禁用。另一个驱动程序可以提供这个功能。 (代码 32) 设备 USB\VID_13FE&PID_4100

集线器端口上的电涌:一个USB设备超过其集线器端口的电

集线器端口上的电涌:一个USB设备超过其集线器端口的电源限制花了三个小时查阅了大量资料,终于把这个问题大致弄清楚了,差点全盘格式

分享到:

栏目导航

推荐阅读

热门阅读