分类: LINUX
2011-05-19 21:00:55
概述:
报告在这里意思是数据传输(data transfer),而报告描述符是对这些传输的数据作用途(usage)上的说明。
USB通讯协议的规范是以1ms产生一个USB帧(frame),USB设备可以每一个帧中发送和接收一个交换(transaction)。交换是由几个封包(packet)组成,而传输是由一个或几个交换来完成传送一口中有效的数据。在这里,传输和报告的意思相类似。传输方式有四种,初始学一般只要了解控制型传输(control transfer)和中断型传输(interrupt transfer)即可。控制型传输是当需要时才执行传输要求,是最一般的传输方式,组态、命令和状态的通讯都可以使用控制型传输;控制型传输主要用于消息型数据(message-type data)。中断型传输目的在做重复的数据更新(recurring data)传输,精确一点而言,即是在每个有限有周期内(bounded period)作至少一次的小量数据发送或接收;所以适用于流动型数据(stream-type data),注意这里所谓的周期时间就是在端点描述符中的轮询间隔时间。报告有三种:input,output,和Feature.后面将作进一步介绍。中断型输入管线(interrupt in pipe)仅可以传送input报告;中断型输出管线(interrupt out pipe)仅可以传送output报告;但是控制型管线(control pipe)可以传送input,output和feature报告。端点描述符有声明所使用的端点为何种管线。
数据本身没有任何意义,要赋于用途才能明确其为控制什么(control);例如设备上的按钮指示灯和X与Y轴的位移等都通称控制,数据则为按钮和指示灯的开关状态或X与Y轴的位移量。为了这个目的应运而生报告描述符,其将数据的操控与它的用途作一对一的对应,所以解读报告后就可以知道每个数据作何种操作。所以“传输的数据”和“操作”只是一事件的两种描述方式。用途是以一个32位卷标(称作usage tag)来表示,高16位称作usage page(用途类页),低16位称为usage DI(用途识别名):
Usage = (usage page:usage ID)
举例说明:二个字节分别为x和y轴的位移数据,因此第一个字节的usage=(generic desktop:X),而第二个字节的usage = (generic desktop:Y),其中generic desktop为用途的大类别(称作用途类页)之一,x和y轴的操作用途属于此用途类页。文件universal serial Bus HID Usage Table完整列出所有的usage pages(用途类页)和usage ID(用途识别名),使用者必须遵照文件的规范来声明操作的用途。该文件的附录A有十多个报告描述符的范例,值得研究下。
表1、报告描述符的标签
主项目 | 全域项目 | 区域项目 | |||
标签 | 代码 | 标签 | 代码 | 标签 | 代码 |
Input | X08? | Usage Page | 0x0? | Usage | 0x0? |
Output | 0x9? | Logical Minimum | 0x1? | Usage Minimum | 0x1? |
Feature | 0x0b? | Logical Maximum | 0x2? | Usage Maximum | 0x2? |
|
| Physical Minimum | 0x3? | Designator Minimum | 0x3? |
Collection | 0xa1 | Physical Maximum | 0x4? | Designator Minimum | 0x4? |
End Collection | 0xc0 | Unit Exponent | 0x5? | Designator Maximum | 0x5? |
|
| Unit | 0x6? | String | 0x7? |
|
| Report Size | 0x7? | Sreing Minimum | 0x8? |
|
| Report ID | 0x8? | String Maximum | 0x9? |
|
| Report Coumt | 0x9? | Delimiter | 0xa? |
|
| Push | 0xA? |
|
|
|
| Pop | 0xb? |
|
|