Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1682626
  • 博文数量: 311
  • 博客积分: 7778
  • 博客等级: 少将
  • 技术积分: 4186
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-09 19:59
个人简介

蓝点工坊(http://www.bluedrum.cn) 创始人,App和嵌入式产品开发。同时也做相应培训和外包工作。 详细介绍 http://pan.baidu.com/s/1y2g88

文章存档

2012年(3)

2011年(115)

2010年(170)

2009年(23)

分类: 嵌入式

2011-11-01 00:39:22

Andrew Huang 转载请注明作者及出处(http://bluedrum.cublog.cn)

    在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版本 

  这一篇相当不错《USB HID报告及报告描述符简介》,

一.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 描述

 各个包结构可以参见

  象键盘包格式是有标准格式的。
   
  
三.实例分析
   
      这是用USBlyzer分析USB Phone的结果。我个人比较习惯用这个来看
  
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 CollectionC0 



阅读(9435) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~