Linux HID 驱动开发(2) USB HID Report 描述及usage 概念

 在USB的枚举后,即交互完 设备描述符(device descriptor),配置描述符(configure descriptor),接口描述符(interface descriptor)和终端描述符(endpointer desciptor)。如果是HID设备,即class值为3设备交互还会发送一系统的特殊包来描述HID设备的特性。

  

  这一些描述HID的特性称为Report Descriptor,报告描述符,可以理解它们是HID设备的上传的包,或者接收的包的格式。设备能包含多个report.


  对于每种HID动作的编码,HID有一个专用术语usage (用法),USB协议中支持所有编码表称为usage tables.这里有全部编码表。

HTML版本 

一.report descriptor 格式


    在usb.org网站有HID decriptor tools工具下载 可以用创建和解析report descriptor包格式

       


以下是一个键盘的report descriptor的内容.在最右侧的是原始数据,比如前二字节是0x05,0x01 表示

  USAGE_PAGE.

   


   

Linux HID 驱动开发(2) USB HID Report 描述及usage 概念


可以换一个界面查看得更清楚

   

Linux HID 驱动开发(2) USB HID Report 描述及usage 概念




  

二.report,usage 格式


 从各个软件分析结果看,一个完整的report 分为二部分,一部分定长的头,另一部分就是变长的定义,即上文中出现的Collection部分.每个collection由若干个usage组成

   

   定长头部分有二个定义. usage page.可理解是这个设备类型.


   0x05, 0x01 (Generic Desktop Controls)

    0x06,0x00  (Vendor-Defined 1)

    

    这个在usb hid文档里详细定义

   

Linux HID 驱动开发(2) USB HID Report 描述及usage 概念


接下来的字段称为usage是表示发的包类型(?)


  09 06 按键。

  09 01 自定义


   接下来的是 




   在Collection中,每一个组成部分以称为item,item就是usage.(这里术语整得太多了,但是这一些名词在linux hid都能看到.所以都列在这里。

Collection里一般第一个usage是描述input,第二个描述output.当然有不同例外。
  

  首先看usage是input类型

      在input首先是取值范围。虽然占两个字节,只是低位字节有效
      Logical Minimum 
      logical_maximum
      physical_minimum
      physical_maximum
     是report size,表示report输入字节宽度,report count表示report总数。
 
   比如按键是report size 为1,report count 为8,即一个包为8字节。

   然后是input hid包格式,用两个字符来表示。0x81,0x06表示包里的由如下格式组成.(其中0x06)有效。分析软件解析成如下。
A1 01 与 C0之间表示Application Collection的.
绝大部分report都是Application,从USB HID文档看,还有Logical和Physical类型
 
 
 
 Input (Data,Var,Rel,NWrp,Lin,Pref,NNul,Bit)

普通Mouse解析成
   
    0x81, 0x02,   INPUT (Data,Var,Abs)

这是格式可能参考 HID 1.11
  
  
 
 

Linux HID 驱动开发(2) USB HID Report 描述及usage 概念


如0x06--> 00000110 解析(Data(0),Array(0),...)
   
   接下来是output 描述


 各个包结构可以参见

   


  象键盘包格式是有标准格式的。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wysygp.html