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.这里有全部编码表。http://www.rlocman.ru/i/File/2011/09/09/1.pdf HTML版本 http://www.freebsddiary.org/APC/usb_hid_usages.php 一.report descriptor 格式
    在usb.org网站有HID decriptor tools工具下载 可以用创建和解析report descriptor包格式        http://www.usb.org/developers/hidpage/dt2_4.zip
以下是一个键盘的report descriptor的内容.在最右侧的是原始数据,比如前二字节是0x05,0x01 表示   USAGE_PAGE.    
   
可以换一个界面查看得更清楚    


   二.report,usage 格式
 从各个软件分析结果看,一个完整的report 分为二部分,一部分定长的头,另一部分就是变长的定义,即上文中出现的Collection部分.每个collection由若干个usage组成        定长头部分有二个定义. usage page.可理解是这个设备类型.
   0x05, 0x01 (Generic Desktop Controls)     0x06,0x00  (Vendor-Defined 1)          这个在usb hid文档里详细定义    
接下来的字段称为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
  
  


如0x06--> 00000110 解析(Data(0),Array(0),...)
   
   接下来是output 描述
 各个包结构可以参见    http://www.usb.org/developers/devclass_docs/HID1_11.pdf
  象键盘包格式是有标准格式的。    
   三.实例分析           这是用USBlyzer分析USB Phone的结果。我个人比较习惯用这个来看    Interface 3 HID Report Descriptor Vendor-Defined 1
Item Tag (Value) Raw Data
Usage Page (Vendor-Defined 1) 06 00 FF 
Usage (Vendor-Defined 1) 09 01 
Collection (Application) A1 01 
    Usage (Undefined) 09 00 
    Logical Minimum (0) 15 00 
    Logical Maximum (255) 26 FF 00 
    Report Size (8) 75 08 
    Report Count (8) 95 08 
    Input (Data,Var,Rel,NWrp,Lin,Pref,NNul,Bit) 81 06 
    Usage (Undefined) 09 00 
    Report Count (17) 95 11 
    Output (Data,Var,Rel,NWrp,Lin,Pref,NNul,NVol,Bit) 91 06 
    Report Count (12) 95 0C 
    Usage (Vendor-Defined 1:Vendor-Defined 1) 0B 01 00 00 FF 
    Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit) B1 02 
End Collection C0 

相关内容