您现在的位置: USB开发网 > USB技术文档 > USB专题 > USB HID协议中文版
USB HID协议中文版

2、HID设备描述符

------分隔线----------------------------

  HID设备连接到USB主机后,主机通过发送Get_Descriptor请求读取HID设备的描述符,了解描述符对了解USB设备是至关重要的。

2.1 HID设备的描述符

  HID设备除了支持USB设备的5种标准描述符之外,还支持HID设备特有的3种描述符。这些描述符是:

  • USB标准描述符:设备、配置、接口、端点和字符串描述符。
  • HID特有的描述符:HID、报表(Report)和实体(Physical)描述符

  从描述符的关联关系看,HID描述符是关联于接口。所以如果一个HID设备有2个端点,设备不需要每个端点有一个HID描述符。

 

HID描述符的关联关系
 
图2-2 HID描述符的关联关系
  从前面的USB描述符可以看出一个规律,描述符的第一、二字节分别是描述符的长度和类型,描述符的类型字段(bDescriptorType)表明描述符的种类,下表列出了不同描述符的类型字段数值。
 
表2-2 HID的描述符

类型

描述符

应用

数值

标准

 

 

 

 

 

 

 

设备   Device

所有设备必须有,只能一个

01

配置   Configuration

所有设备必须有,至少一个

02

字符串 String

可选择

03

接口   Interface

每一个接口一个

04

端点   Endpoint

除端点0之外的每个端点一个

05

设备限定  Device_Qualiffier

同时支持全速与高速的设备必须有一个

06

Other_Speed_Configuration

 

07

Interface_power

 

08

类别

 

HID

HID设备必须有

21

Hub

 

29

HID

特定

 

报表   Report

HID设备必须有

22

实体   Physical

可选择的

23

 

  对于一个HID设备,设备描述符与配置描述符没有HID特定的信息。其设备描述符的bDeviceClass和bDeviceSubClass字段的值为0,接口描述符的bInterfaceClass字段值为03,表示设备的该接口是HID类别。在接口描述符中其他包含HID特定信息的字段还有子类别码(blnterfaceSubClass)与协议码(blnterfaceProtocol字段)。

  在接口描述符中子类别码字段等于1表示此设备支持启动接口(Boot Interface)。如果设备有启动接口,即便主机的HID没有加载驱动程序,设备也可以使用。这种情形可能发生在计算机是由DOS直接启动,在启动时观看系统设置画面或使用Wndows的安全模式时。

  含有启动接口的键盘或鼠标可以使用BIOS或许多主机支持的默认简单协议。HID规范定义了键盘与鼠标的启动接口协议。如果设备没有启动接口,并且接口描述符中协议码字段是1,表示设备支持键盘接口,协议码字段是2,表示支持鼠标接口。接口描述符中协议码字段是0,表示设备不支持启动协议。

  在 HID Usage Tables规范中定义了键盘与鼠标的启动描述符(Boot Descriptor)。BIOS不需要从设备中读取描述符,因为它知道启动协议,并且假设设备支持启动协议。所以要启动的设备不需要在固件内包含启动接口描述符,它只要在主机尚未要求在报表描述符中的定义协议时支持启动协议即可。在操作系统加载HlD驱动程序后会使用Set_Protocol请求,将设备由启动协议转换成报表协议。

2.2 HID描述符

  HID描述符的主要作用是用来识别HID通信所使用的额外描述符。下表是HID描述符结构。

 表2-3  HID描述符结构

偏移量

字段

字节数

数值类型

说明

0

bLength

1

Numeric

描述符字节数

1

bDescriptorType

1

Constant

0x21 = HID描述符

2

bcdHID

2

Numeric

HID规范版本号(BCD)

4

bCountryCode

1

Numeric

硬件设备所在国家的国家代码

5

bNumDescriptors

1

Numeric

类别描述符数目(至少有一个报表描述符)

6

bDescriptorType

1

Constant

类别描述符的类型

7

wDescriptorLength

2

Numeric

报表描述符的总长度

9

[bDescriptorType]...

1

Constant

附加的描述符的类型,可选的

10

[wDescriptorLength]...

2

Numeric

附加的描述符的总长度,可选的

  bcdHID:设备与其描述符所遵循的HID规范的版本号码,此数值是4个16进位的BCD格式字符。例如版本1.1的bcdHID是0110h。

  bCountryCode:硬件目的国家的识别码。如果不说明,该字段为0。

  bDescriptorType:HID描述符附属的描述符的类型(报表或实体)。每一个 HID都必须至少支持一个报表描述符。一个接口可以支持多个报表描述符,以及一个或多个实体描述符。

  HID描述符的偏移量为9和10的bDescriptorType和wDescriptorLength可以重复存在多个。

  1. 报表描述符

  报表描述符定义了执行设备功能的数据格式和使用方法。

  报表描述符和USB的其他描述符是不一样的,它不是一个简单的表格,报表描述符是USB所有描述符中最复杂的。报表描述符非常复杂而有弹性,因为它需要处理各种用途的设备。报表的数据必须以简洁的格式来储存,这样才不会浪费设备内的储存空间以及数据传输时的总线时间。

  实际上可以这样理解,报表内容的简洁,是通过报表描述符全面的、复杂的数据描述实现的。

  报表描述符必须先描述数据的大小与内容。报表描述符的内容与大小因设备的不同而不同,在进行报表传输之前,主机必须先请求设备的报表描述符,只有得到了报表描述符才可正确解析报表的数据。

  报表描述符是报表描述项目(Item)的集合,每一个描述项目都有相对统一的数据结构,项目很多,通过编码实现。

  (1)项目

  报表描述符由描述HID设备的数据项目(Item)组成,项目的第一个字节(项目前缀)由三部分构成,即项目类型(item type)、项目标志(item tag)和项目长度(item size)。其中项目类型说明项目的数据类型,项目标签说明项目的功能,项目长度说明项目的数据部分的长度。

  HID的项目有短项目和长项目两种,其中短项目的格式如下图。

HID报表短项目格式

图2-3  HID报表短项目格式

  短项目的数据字节数由bSize的值定义,bSize为0、1、2、3时Data部分的字节数分别为0、1、2、4个字节。短项目的项目类型由bType定义,bType为0、1、2时分别为Main、Global和Local类型。

  长项目可以携带较多的数据,其格式如下图。

 

 HID报表长项目格式
图2-4 HID报表长项目格式
 
   

  项目中的第一个字节为上图中的特定值时表明该项目是一个长项目。长项目中的bDataSize说明Data部分的字节数,bLongItemTag在HID规范中没有定义。

  下面是通过汇编实现的一个简单的报表描述符,描述符的每一行是一个项目,该描述符描述了一个从设备接收2个字节的输入报表和发送2个字节到设备的输出报表。

  1. HID_Report_desc_table: 
  2.     db  06h, A0h, FFh   ; Usage Page(Vendor defined)  定义设备功能 
  3.     db  09h, A5h        ; Usage(Vendor Defined)        定义用法 
  4.     db  A1h, 01h        ; Collection(Application)      开一个集合 
  5.     db  09H, A6h        ;   Usage(Vendor defined)      定义用法 
  6.  
  7.                         ;   输入报表 
  8.     db  09h, A7h        ;   Usgae(Vendor defined)      定义用法 
  9.     db  15h80h        ;   Logical Minimum             定义输入最小值=-128 
  10.     db  25h7Fh        ;   Logical Maximum             定义输入最大值=+27 
  11.     db  75h08h        ;   Report Size                  定义报表数据项大小=8 
  12.     db  95h02h        ;   Report Count                 定义报表数据向个数=2 
  13.     db  81h02h        ;   Input(Data,Variable,Absolute)  输入项目 
  14.  
  15.                         ;   输出报表 
  16.     db  09h, A9h        ;   Usgae(Vendor defined)      定义用法 
  17.     db  15h80h        ;   Logical Minimum             定义输入最小值=-128 
  18.     db  25h7Fh        ;   Logical Maximum             定义输入最大值=+27 
  19.     db  75h08h        ;   Report Size                  定义报表数据项大小=8 
  20.     db  95h02h        ;   Report Count                 定义报表数据向个数=2 
  21.     db  91h02h        ;   Output(Data,Variable,Absolute)   输出项目 
  22.  
  23.     db  C0h             ; End Collection                关闭集合 

 (2)项目的分类
报表的项目有Main、Global和Local三大类,每一类都有多个不同的项目,实现不同的描述。

  Main类项目用于定义报表描述符中的数据项。也可以组合其中的若干数据项成为一个集合。Main项目可以分为带数据的Main项目和不带数据的Main项目。带数据项的Main用于生成报表中的数据项,包括Input、Output和Feature项目。不带数据的Main项目不生成报表中的数据项,包括Collection和End Collection项目。

  Global类项目实现对数据的描述,用来识别报表并且描述报表内的数据,包括数据的功能、最大与最小允许值以及数据项的大小与数目等。改变由Main类项目生成的项目状态表。Global类项目描述对后续的所有项目有效,除非遇到有新的Global类项目。

  Local类项目定义控制的特征,这一类项目的作用域不超过下一个Main项目,所以在每一Main项目之前可能有多个Local项目。Local项目用于描述后面的Input、Output和Feature项目。

  下表列出的是全部的项目的前缀字和简要功能说明。

表2-4 HID项目列表

项目

类型

项目标志(Tag)

项目前缀,nn为数据长度

功能说明

Main

类项目

 

 

 

 

Input

1000 00 nn

定义输入报表,主机利用该信息解析设备提供的数据。主机向控制端口发送Get_Report实现输入

Output

1001 00 nn

创建输出报表,通过向设备发送Set_Report实现输出

Feature

1011 00 nn

定义送往设备的设置信息

Collection

1010 00 nn

定义2个以上数据(Input、Output和Feature)的关系为集合,Collection开始一个集合,之后的End Collection结束集合。Collection项目的数据部分说明Collection的类型

End Collection

1100 00 nn

 

Global

类项目

 

 

 

 

 

 

 

 

 

 

 

 

Usage Page

0000 01 nn

指定设备的功能

另外由于Usage项目有32位数据值,Usage Page项目用于为Usage项目在报表描述符中占居存储空间。用于存放后续的Usage项目的高16位。

Logical Minimum

0001 01 nn

定义变量或数组项目的逻辑最小值和最大值

Logical Maximum

0010 01 nn

 

Physical Minimum

0011 01 nn

定义变量或数组项目的物理最小值和最大值,分别和Logical Minimum、Logical Maximum对应

Physical Maximum

0100 01 nn

 

Unit Exponent 

0101 01 nn

定义数值是基于10的指数

Unit

0110 01 nn

单位

Report Size 

0111 01 nn

指定报表数据区域所包含的位数

Report ID 

1000 01 nn

报表ID,该项目在报表中插入一个字节的报表ID

Report Count 

1001 01 nn

报表中数据域的数目

Push 

1010 01 nn

将Global项目状态表送入堆栈

Pop 

1011 01 nn

从堆栈恢复Global项目状态表

 

1100 01 nn –

1111 01 nn

保留

Local

类项目

 

 

 

 

 

 

 

 

 

 

Usage

0000 10 nn

用法索引值,表示对项目或集合建议的用法,用于当一个项目描述多个控制,对每一个变量和数组元素都有建议的用法

Usage Minimum

0001 10 nn

定义阵列或位图中控制操作的第一个和最后一个用法

Usage Maximum

0010 10 nn

 

Designator Index 

0011 10 nn

确定用于控制的实体,指向物理描述符中的目标

Designator Minimum

0100 10 nn

定义阵列或位图目标的起始和终止索引值

Designator Maximum

0101 10 nn

 

String Index 

0111 10 nn

确定字符串描述符中的索引值

String Minimum 

1000 10 nn

定义用于阵列或位图控制中字符串序列索引值的最小值和最大值

String Maximum 

1001 10 nn

 

Delimiter 

1010 10 nn

定义一组Local项目的开始和结束,1=开始,0=结束

 

1010 10 nn –

1111 10 nn

保留

 

  在这些项目中,Usage Page用来指定设备的功能,而Usage项目用来指定个别报表的功能。Usage Page项目相当于是HID的子集合,Usage相当于是Usage Page的子集合。

  2. 报表描述符的项目

(1)Input、Outpot和Feature项目

  这3个项目用来定义报表中的数据字段。

  Input项目可以应用到任何控制、计数器读数或其他设备传给主机的信息。一个输入报表包含一个或多个Input项目,主机使用中断输入传输来请求输入报表。

  Ouput项目用来定义主机传送给设备的信息。一个输出报表包含一个或多个Outpot项目。输出报表包含控制状态的数据。如果有中断输出管道,HID1.1兼容主机使用中断输出传输来传送输出报表,否则使用Set_Report控制请求。

  Feature项目应用到主机传送给设备的信息,或是主机从设备读取Feature项目。一个特征报表包含一个或多个Feature项目,Feature项目通常是包合影响设备与其组件整体行为的配置。特征报表通常是控制可以使用实际的控制面板调整的设置,例如主机可以使用虚拟控制面板来让用户选择控制特征。主机使用 Set_Report与Get_Report请求来传送与接收特征报表。

  在每一个Input、Output和Feature项目的前缀字之后是32位描述数据,目前最多定义了9个位,余的位则是保留。位0~8的定义中只有位7不能应用于Input项目,除此之外其他的位定义都适应于Input、Output和Feature项目。

表2-5  Input、Output和Feature项目的数据项说明

 

数据字段

含义说明

 

名称

0

 

0

Data

数据:表示项目的内容是可更改的(读/写)。

1

Constant

常数:表示项目的内容是不可更改的(只读)。

1

 

0

Array

数组:报告全部控制的状态。如在键盘报表中每一个键在报表中占一位,报表传输全部键的状态,可以同时按下任意多个键。

1

Variable

变量:报告作用中的控制。如在键盘报表中只报告按下的键的编号,可以同时按下的键的数目等于报表的计数(Global类项目Report Count)

2

 

0

Absolute

绝对:表示数值以一个固定值为基准。游戏杆通常是报告绝对数据(游戏杆目前的位置)。

1

Relative

相对:表示数据的改变以上一个读数为基准。鼠标通常是报告相对数据(鼠标的移动位置)。

3

 

0

No Wrap

如果设置为1表示回转,当数值超过最小值到最大值的范围时将回转,如果最小值是0而最大值是10,超过最大值的下一个数值是0。

1

Wrap

 

4

 

0

Linear

线形:表示测量的数据与报表的数据有线性的关系。

1

Non-Linear

非线性:表示测量的数据与报表的数据没有线性的关系。

5

 

0

Preferred 

优选状态:表示控制在没有用户交互时会回到一个特定的状态。如按钮就有优选状态,在无操作时保持未按下的状态。

1

Non-Preferred

非优选状态:它维持在上一个用户选择的状态。如交替的开关就没有优选状态。

6

 

0

No Null Position

无空状态位置:表示控制永远在传送有效的数据。

1

Null State

空状态:表示控制支持一个没有传送有效数据的状态。如操纵杆可能具有一个多方向的按钮开关,在没有按下时在空状态,这时控制将传送一个在 Logical Minimum与Logical Maximum范围之外的数值来表示它在空状态。

7

 

 

0

Non-Volatile

不可变的:表示设备只有在主机请求时才改变数值。当主机传送一个报表并且不要改变不可变项目时,如果该项目是定义成相对(Relative)的,数值0表示不改变数据,如果不可变项目是定义成绝对(Absolute)的,超出范围外的数值则表示不改变数据。

1

Volatile

可变的:表示设备可以自己改变数值,并不是必须主机传送报表要求给设备来改变数值。例如设备控制面板可以由主机软件传送一个报表给设备,也可以由用户自己按设备上的实际按钮。

8

 

0

Bit Field

位字段:表示每一个位或是一个字节内的一组位可以代表一份数据。

1

Buffered Bytes

缓冲字节:表示信息包含一个或多个字节,缓冲字节的报表大小必须是8。

9~31位

保留

注: ①:该位不能应用到数组。

     ②:只应用于Output和Feature项目,对于Input项目该位保留。

(2)Collection和End Collection项目

  所有的报表类型都可以使用Collection与 End Collection项目来将相关的Main类型项目组成群组。这两个项目分别用于打开和关闭集合。所有在Collection与End Collection项目之间的Main类型项目都是 Collection的一部分。

  Collection有3种类型:Application、Physical与Logical,其项目的数据项的值分别为1、0和2。厂商也可以自己定义Collection类型,数据项的值为80h~FFh保留给厂商定义。End Collection项目无数据项。

  Application Collection包含有共同用途的项目或执行单一功能的项目。例如键盘的开机描述符将键盘的按键与LED指示灯数据集合成一个Application Collection。所有的报表必须在一个Application Collection内。

  Physical Collection包含在一个单一几何点上的数据项目,可以将每个位置的数据集合成一个 Physical Collection。在设备报告多个传感器的位置的时候,使用Physical Collection指明不同的数据来自不同的传感器。

  Logical Collection形成一个数据结构,包含由 Collection所连结的不同类型的项目。例如数据缓冲区的内容以及缓冲区内字节数目的计数。

  (3)Usage Page和Usage项目

  Usage page项目的数据部分为1~2个字节,目前的定义全部都是一个字节。Usage Page定义了常用的设备功能,关于Usage Page(以及其他项目)的具体定义内容,可以查阅HID Usage tables,下表是来自HID Usage tables的Usage Page定义。

表2-6  Usage Page定义

 

Page ID 

Page Name

00

Undefined

01

Generic Desktop Controls

02 

Simulation Controls 

03 

VR Controls 

04 

Sport Controls 

05 

Game Controls

06 

Generic Device Controls 

07 

Keyboard/Keypad 

08 

LEDs 

09 

Button 

0A 

Ordinal 

0B 

Telephony 

0C 

Consumer 

0D 

Digitizer 

0E 

Reserved

0F 

PID Page

10 

Unicode 

11-13

Reserved

14 

Alphanumeric Display 

15-3f

Reserved

40

Medical Instruments 

41-7F

Reserved

80-83

Monitor pages

84-87

Power pages

88-8B

Reserved

8C

Bar Code Scanner page

8D

Scale page

8E

Magnetic Stripe Reading (MSR) Devices

8F

Reserved Point of Sale pages 

90

Camera Control Page

91

Arcade Page

92-FEFF

Reserved

FF00-FFFF

Vendor-defined

  

  关于Usage Page的每一个有效定义项,都有一个相应的下一级定义,如Usage Page的数据项数值为1,则设备定义为Generic Desktop Controls,关于该类设备的具体功能可以在HID Usage Tables中查到具体的定义。下表是HID Usage Tables中对Generic Desktop Controls设备的功能定义。

 

表2-7 Generic Desktop Controls 用法定义

Usage ID

Usage Name

Usage Type

参阅HID Usage Tables中的相关章节

00

Undefined

 

 

01

Pointer

CP

4.1

02

Mouse

CA

 

03

Reserved

 

 

04

Joystick

CA

4.1

05

Game Pad

CA

 

06

Keyboard

CA

 

07

Keypad

CA

 

08

Multi-axis Controller

CA

 

09

Tablet PC System Controls

CA

 

0A-2F

Reserved

 

 

30

X

DV

4.2

31

Y

DV

 

32

Z

DV

 

33

Rx

DV

 

34

Ry

DV

 

35

Rz

DV

 

36

Slider

DV

4.3

37

Dial

DV

 

38

Wheel

DV

 

39

Hat switch

DV

 

3A

Counted Buffer

CL

4.6

3B

Byte Count

DV

 

3C

Motion Wakeup

OSC

4.3

3D

Start

OOC

 

3E

Select

OOC

 

3F

Reserved

 

 

40

Vx

DV

4.3.1

41

Vy

DV

 

42

Vz

DV

 

43

Vbrx

DV

 

44

Vbry

DV

 

45

Vbrz

DV

 

46

Vno

DV

 

47

Feature Notification

DV,DF

4.8

48

Resolution Multiplier

DV

 

49-7F

Reserved

 

 

80

System Control

CA

4.5

81

System Power Down

OSC

 

82

System Sleep

OSC

4.5.1

83

System Wake Up

OSC

 

84

System Context Menu

OSC

4.5

85

System Main Menu

OSC

 

86

System App Menu

OSC

 

87

System Menu Help

OSC

 

88

System Menu Exit

OSC

 

89

System Menu Select

OSC

 

8A

System Menu Right

RTC

 

8B

System Menu Left

RTC

 

8C

System Menu Up

RTC

 

8D

System Menu Down

RTC

 

8E

System Cold Restart

OSC

4.5.1

8F

System Warm Restart OSC

 

 

90

D-pad Up

OOC

4.7

91

D-pad Down

OOC

 

92

D-pad Right

OOC

 

93

D-pad Left

OOC

 

94-9F

Reserved

 

 

A0

System Dock

OSC

4.5.1

A1

System Undock

OSC

 

A2

System Setup

OSC

 

A3

System Break

OSC

4.9

A4

System Debugger Break

OSC

 

A5

Application Break

OSC

 

A6

Application Debugger Break

OSC

 

A7

System Speaker Mute 

OSC

4.5.1

A8

System Hibernate

OSC

 

A9-AF

Reserved

 

 

B0

System Display Invert

OSC

4.10

B1

System Display Internal

OSC

 

B2

System Display External

OSC

 

B3

System Display Both

OSC

 

B4

System Display Dual

OSC

 

B5

System Display Toggle Int/Ext

OSC

 

B6

System Display Swap Primary/Secondary

OSC

 

B7

System Display LCD Autoscale

OSC

 

B8-FFFF

Reserved

 

 

 

  用法(Usage)定义了各种各样设备特性,对于Usage Page的每一项都定义了常用的各种用法。

  用法说明了3种信息,即控制、集合和数据。控制说明设备的状态,如on/off、Enable/Disable等。集合说明控制和数据的组合关系。

  上表中的用法类型(Usage Type)描述了应用程序如何处理由Main类型项目生成的数据,具体的定义和详细说明请参阅HID Usage Tables。

  (4)Report ID项目

  Report ID放在信息包中报表数据之前,设备可以支持多个相同类型的报表,每一个报表包含不同的数据与其特有的ID。

  在报表描述符中,Report ID项目作用于其后续所有的项目,直到遇到下一个Report ID为止。如果报表描述符中没有Report ID项目,默认的ID值是0,描述符不能定义一个为0的Report ID,输入报表、输出报表与特征报表可以分享同一个Report ID。

  在Set_Report和Get_Report请求传输中,主机在设置事务的 wValue字段的低字节中指定一个Report ID。在中断传输中如果接口支持一个以上的 Report ID,Report ID必须是传送报表中的第一个字节。如果接口只支持数值为0的默认Report ID,此Report ID不应该在中断传输中随着报表一起传送。

  (5)Logical Minimum和Logical Maximum项目

  Logical Minimum与 Logical Maximum项目定义报表的变量(Variable)或阵列(Array)数据的限制范围,此限制范围以逻辑单位来表示。例如设备报表的一个电流值读数是500mA,而一个单位是2mA,则 Logical Maximum值等于250。

  负数值以2的补码来表示。如果Logical Minimum与Logical Maximum都是正数,就不需要有正负号位。不管 Logical Minimum与Logical Maximum是以有正负号或是无正负号的数值来表示,设备都可以正确地传输数据。数据的接收者必须知道数据是否可以是负值。

  (7)Physical Minimum和Physical Maximum项目

  Physical Minimum和Physical Maximum项目定义数值的限制范围,该限制范围使用Unit项目定义的单位来表示。上例中设备报表的一个电流值读数是500mA,单位是2mA, Logical Maximum值等于250,而Physical Maximum值是500。

Logical Minimum与 Logical Maximum值说明了设备返回数值的边界,可以根据Physical Minimum和Physical Maximum值对数据进行偏移和比例变换。

  (8)Unit Exponent项目

  Unit Exponent项目定义了在使用逻辑范围和实际范围将设备的返回数值转换成实际数值时,使用10的多少次方对数值进行定标。Unit Exponent的值的编码为4位补码,代表10的指数范围是-8~+7。

 

表2-8  Unit Exponent 数值表

 

代码

00h

01h

02h

03h

04h

05h

06h

07h

08h

09h

0Ah

0Bh

0Ch

0Dh

0Eh

0FH

数值

0

1

2

3

4

5

6

7

-8

-7

-6

-5

-4

-3

-2

1

 

  根据以上5个项目的值可以换算出报表传送数据(逻辑数据)与物理数据的转换关系。 

  物理数据值 = 逻辑数据值÷分辨率 

  分辨率 = (LogicalMaximum - LogicalMinimum)÷

      ((PhysicalMaximum - PhysicalMinimum)×10UnitExponent

  (7)Unit项目
Unit项目指定报表数据在使用Physical与Unit Exponent项目转换后使用什么度量单位,以及单位的幂指数值。Unit的数值部分可以长达4字节,按照4位为一段分段,可以分为8个半字节段,由高到低分别为半字节7、半字节6、…、半字节0。每一个半字节对应不同的基本单位,其数值表示单位的指数值,采用4位2的补码表示,取值范围是-8~+7之间。

  从半字节0~6由下表给出了具体的定义,其中半字节0表示测量系统,半字节7保留。例如在半字节0数值为1(表示采用线性公制测量系统)的条件下,半字节1表示长度(单位为厘米),如果其数值为1表示厘米,数值为2表示(厘米)2,成为面积单位。半字节3表示时间(单位为秒),如果其数值为-2,表示(秒)-2

表2-9 Unit 单位的定义

半字节

序号

测量

项目

数值含义

 

 

0

1

2

3

4

0

测量系统

线性、公制

角度、公制

线性、英制

角度、英制

1

长度

 

厘米

半径

英寸

2

质量

 

石拉(slug)

3

时间

 

4

温度

 

开式度(Kelvin)

华式度

5

电流

 

安培

6

亮度

 

烛光

7

保留

 

 

  虽然表中只是定义了有限的基本单位,但可以通过这些基本单位的组合派生出大多数其它的常用单位。

  例如报表使用一个字节传送一个从-20到110华氏度温度值,可以定义以下报表描述项目:

Logical Minimum = -128
Logical Maximum = 127
Physical Minimum = -20
Physical Maximum = 110
Unit Exponent = 0
Unit = 30003h

  Unit的半字节0=3选择英制线性测量系统,半字节4=3选择华氏温度单位。

  130(110+20)华氏度的数值范围线性分布到了256和有效数值区域,每一位相当于0.51华氏度,这样就提高了分辨率。

  (8)Report Size和Report Count项目

  Report Size项目指定Input、Output与Feature项目字段的大小,以位为单位。

  Report Count项目指定Input、Output与Feature项目包含的字段数目。

  例如两个8位的字段,Report Size等于8,而Report Count等于2。8个1位的字段,Report Size等于1,而 Report Count等于8。

  Input、Output与Feature项目报表可以有多个项目,每一个项目可以有自己的Report Size和Report Count项目。

  (9)Push和Pop项目

  Push项目将一个Global项目状态表格的副本压入CPU的堆栈内。GIobal项目状态表格包含所有之前定义的Gobal项目的目前设置。

  Pop项目恢复之前压入堆栈的Global项目状态的储存状态。

  (10)Usage、Usage Minimum和Usage Maximum项目

  这3个项目输入Local类型项目。

  Usage项目和Global类型的Usage Page项目协同描述项目或集合的功能。

  一个报表可以指定一个Usage给许多个控制,或是指定不同的Usage给每一个控制。如果一个报表项目之前有一个Usage,此Usage应用到该项目的所有控制。如果一个报表项目之前有一个以上的Usage,每一个Usage应用到一个控制,Usage与控制是按顺序结合的。

  例如下面报表描述符的一个局部,报表含有2个输入字节,第一个字节的用法是x,第2个字节是y。

  1. Report Size (8) 
  2. Report Count (2) 
  3. Usage (x) 
  4. Usage (y) 
  5. Input (Data, Variable, Absolute)  

 

如果一个报表项目之前有一个以上的Usage,而且控制的数目多于Usage的数目,每一个Usage与一个控制对应,最后一个Usage则应用到所有剩余的控制。

  例如在下面报表包含16个字节输入数据,第一个字节对应用法x,第2个字节对应用法y,剩余的14个字节对应厂商定义的用法。

  1. Usage (x) 
  2. Usage (y) 
  3. Usage (Vendor defined) 
  4. Report Size (8) 
  5. Report Count (16) 
  6. Input (Data, Variable, Absolute)  


Usage Minimum和Usage Maximum可以指定一个 Usage给多个控制或是数组项目。将从Usage Minimum到Usgae Maximun定义的用法顺序对应到多个控制中。

  例如在一个键盘描述符中定义的标准键盘的左、右修饰键的输入项目中,使用一个字节的8位分别输入键盘的左、右Ctrl键、Shift键、Alt键和GUI键,从HID Usage tables文档中的第10节可以查到关于键盘用法的定义,其中上述8个修饰键的用法定义值为224到231。以下是报表描述符的修饰键部分描述。

 

  1. Usage Page (1)              ; 1 = Generic Desktop Controls 
  2. Usage (6)                   ; 6 = Keyboard 
  3. Collection (1)              ; 1 = Application 
  4. Usage Page (7)              ; 7 = Keyboard/Keypad 
  5. Usage Minimum (224)          
  6. Usage Maximum (231) 
  7. Logical Minimum (0) 
  8. Logical Maximum (1) 
  9. Report Size (1) 
  10. Report Count (8) 
  11. Input (Data, Variable, Absolute) 
  12. …… 

 

------分隔线----------------------------
USB开源项目
联系我们
  • Q Q: 1148374829 点击这里给我发消息
  • 旺旺:jhoneqhsieh 点击这里给我发消息
  • 电话:(0)15923141204
  • 淘宝网店