hid协议报告描述总结.docx

上传人:b****8 文档编号:10909525 上传时间:2023-02-23 格式:DOCX 页数:19 大小:33.91KB
下载 相关 举报
hid协议报告描述总结.docx_第1页
第1页 / 共19页
hid协议报告描述总结.docx_第2页
第2页 / 共19页
hid协议报告描述总结.docx_第3页
第3页 / 共19页
hid协议报告描述总结.docx_第4页
第4页 / 共19页
hid协议报告描述总结.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

hid协议报告描述总结.docx

《hid协议报告描述总结.docx》由会员分享,可在线阅读,更多相关《hid协议报告描述总结.docx(19页珍藏版)》请在冰豆网上搜索。

hid协议报告描述总结.docx

hid协议报告描述总结

HID报告描述符主要内容整理

刚刚接触USB(HID)时对【报告描述符】感到难于理解,因此就更无从下手。

下面根据2个主要的协议文本整理出一些常用信息,不完整,备忘。

●主要参考文本:

⏹【协议文本1】:

《DeviceClassDefinitionforHumanInterfaceDevices(HID)》Ver1.11

⏹【协议文本2】:

《UniversalSerialBusHIDUsageTables》Ver1.12

每个协议文本后面的附录都有很多例子可供参考借鉴。

0、主要术语与概念

(1)报告(Report):

HID设备与主机交换信息的单位(报告字节数似乎没有限制);

(2)报告描述符(ReportDescription):

用许多【项目】说明报告的格式与【用途】;

(3)用途(Usage):

用于指出报告中某个数据域的意义或目的,32bit。

高16bit用途页(UsagePage)指出用途的大类,低16bit用途ID(UsageID)指出用途大类下的子用途;

(4)项目(Item):

报告描述符用于说明数据域的某种属性的数据,有短项目和长项目之分,短项目1~5B,长项目3~255B;

(5)共有3种类型的项目:

主项目、全局项目(Global)、局部项目(Local);

(6)主项目(MainItem)共有5个,其中的Input、Output和Feature会产生实际的数据域并附带说明其操作特性(见2.1);其余2个Collection和EndCollection是一对括号,其间的内容构成一个【集合】,用于限定集合中信息的整体特性;

(7)全局项目(GlobalItem):

说明其后主项目产生的数据域的某方面特性,一旦说明一直有效,除非遇到一个新的全局项目说明改变其值;

(8)局部项目(LocalItem):

说明其后主项目产生的数据域的某方面特性,但只对其后的一个主项目有效;

(9)可以认为所有用【全局项目】说明的各种数据域特性构成一个【全局状态表】,随着新的【全局项目】出现,该表在不断变化。

可以使用【全局项目】中的【push】和【pop】将该表入栈或者出栈,以简化描述符。

(10)项目后的【可选数据字节】可以采用简短方式给出(不够该数据的实际位数),此时认为省略了高有效位且它们的值为0。

(11)一个产生多个数据域(ReportCount>1)的主项目之前有一个以上的【用途】时,每个【用途】与一个数据域依次对应,如果数据域个数(ReportCount)超过【用途】的个数,则剩余的数据域都对应于最后一个【用途】。

1、短项目格式(更多细节请参见协议文本1:

p26)

前缀字节说明

bTag

项目标签

指出该项目的具体意义,见后续说明

bType

项目类型

【00】=主项目,【01】=全局项目,【10】=局部项目,【11】=保留

bSize

可选数据字节数

【00,01,10,11】=(0,1,2,4)字节

长项目很少使用,忽略。

2、主项目分类(更多细节请参见协议文本1:

p28)

主项目说明

项目标签

前缀字节取值

Input

输入

100000nn

Output

输出

100100nn

Feature

特征

101100nn

Collection

集合开始

101000nn

EndCollection

集合结束

110000nn

(nn为bSize【可选数据字节数】,后同)

2.1【输入】【输出】【特征】项目的后续数据说明(更多细节请参见协议文本1:

p30)

Bit

取值

0

1

说明(0/1)

8

BitField

BufferedBytes

位域/字节填充(不足8位填充成8位)

7

NonVolatile

Volatile

主机不可改变/可改变状态值,只用于Feature项目

6

NoNullPosition

NullState

没有【无效(空)状态】/有【无效(空)状态】

5

PreferredState

NoPreferred

无操作时回复原位(如按键或游戏杆)/不回复原位

4

Linear

NonLinear

线性/非线性

3

NoWrap

Wrap

卷绕/非卷绕,【卷绕】指最大最小值首尾相连

2

Absolute

Relative

绝对值/相对值

1

Array

Variable

每个字段(ReportSize)独立触发操作/

所有字段(ReportSize*ReportCount)触发一个操作

0

Data

Constant

变量/常量

如果Bit8为0,则可以只给出1字节的低8位数据。

2.2【集合开始】项目后的【集合类型】字节说明(更多细节参见协议文本1:

p33)

集合类型

缩写

取值

说明

Physical

CP

0x00

用于包含单个几何点的控制

Application

CA

0x01

用于包含多种报告、多种应用

Logical

CL

0x02

用于包含多种不同结构的报告数据

Report

0x03

用于包含一个单独的报告(含有报告ID)

NamedArray

Nary

0x04

UsageSwitch

US

0x05

UsageModifier

UM

0x06

Reserved

0x07~0x7F

(保留)未来扩展

0x80~0xFF

(保留)用户自定义

3、全局项目分类(更多细节参见协议文本1:

p35)

项目标签

前缀字节取值

说明

UsagePage

用途页

000001nn

LogicalMinimum

逻辑最小

000101nn

LogicalMaximum

逻辑最大

001001nn

PhysicalMinimum

物理最小

001101nn

PhysicalMaximum

物理最大

010001nn

UnitExponent

单位指数(以10为底)

010101nn

Unit

单位值

011001nn

ReportSize

报告大小(Bit)

011101nn

数据域bit数

ReportID

报告ID

100001nn

取值1~255

ReportCount

报告数量

100101nn

数据域重复次数

Push

全局状态表入栈

101001nn

Pop

全局状态表出栈

101101nn

Reserved

保留

110001nn

~111101nn

全局项目设置的参数会影响其后的所有主项目,直到该参数被重新设置。

3、局部项目分类(更多细节参见协议文本1:

p40)

项目标签

前缀字节取值

说明

Usage

用途

000010nn

UsageMinimum

用途最小

000110nn

许多个用途的(起始值)

UsageMaximum

用途最大

001010nn

许多个用途的(结束值)

DesignatorIndex

指示器ID

001110nn

Designatorinimum

指示器最小

010010nn

Designatoraximum

指示器最大

010110nn

StringIndex

串ID

011110nn

StringMinimum

串最小

100010nn

StringMaximum

串最大

100110nn

Delimiter

分隔符

101010nn

Reserved

保留

101010nn~111110nn

局部项目设置的参数只影响其后的一个主项目。

4、用途页代码(更多细节参见协议文本2:

p14)

代码

用途页

说明

00

Undefined

未定义

01

GenericDesktopControls

通用桌面控制

02

SimulationControls

仿真控制

03

VRControls

虚拟现实控制

04

SportControls

运动控制

05

GameControls

游戏控制

06

GenericDeviceControls

通用设备控制

07

Keyboard/Keypad

键盘

08

LEDs

LED阵

09

Button

按钮

0A

Ordinal

顺序

0B

Telephony

电话

0C

Consumer

消费

0D

Digitizer

数字化仪

0E

Reserved

保留

0F

PIDPage

人体接口设备

10

Unicode

Uincode码

11-13

Reserved

保留

14

AlphanumericDisplay

字符显示

15-3f

Reserved

保留

40

MedicalInstruments

医学设备

41-7F

Reserved

保留

80-83

Monitorpages

监控器页

84-87

Powerpages

电源页

88-8B

Reserved

保留

8C

BarCodeScannerpage

条形码页

8D

Scalepage

天平

8E

MagneticStripeReading(MSR)Devices

磁条阅读设备

8F

ReservedPointofSalepages

90

CameraControlPage

照相机控制页

91

ArcadePage

92-FEFF

Reserved

保留

FF00-FFFF

Vendor-defined

用户自定义

5、【通用桌面控制】用途页下的部分主要用途UsageID(更多细节参见协议文本2:

p26)

用途ID

用途名

用途类型

说明

00

Undefined

未定义

01

Pointer

CP(物理集合)

指针定位

02

Mouse

CA(应用集合)

鼠标

03

Reserved

保留

04

Joystick

CA(应用集合)

游戏摇杆

05

GamePad

CA(应用集合)

游戏板

06

Keyboard

CA(应用集合)

键盘

07

Keypad

CA(应用集合)

键板(数字小键盘)

08

Multi-axisController

CA(应用集合)

多轴控制器

09

TabletPCSystemControls

CA(应用集合)

平板计算机系统控制

0A-2F

Reserved

保留

30

X

DV(动态值)

X坐标

31

Y

DV(动态值)

Y坐标

32

Z

DV(动态值)

Z坐标

33

Rx

DV(动态值)

X轴旋转

34

Ry

DV(动态值)

Y轴旋转

35

Rz

DV(动态值)

Z轴旋转

36

Slider

DV(动态值)

滑动条

37

Dial

DV(动态值)

刻度盘

38

Wheel

DV(动态值)

旋钮

39

Hatswitch

DV(动态值)

碰触开关

6、其他注意事项

(1)一个最小的报告描述符至少应包含:

●Input(或者Output\Feature)

●Usage

●UsagePage

●LogicalMinimum

●LogicalMaximum

●ReportSize

●ReportCount

(2)报告描述符至少要有一个顶层(Application)集合,集合可以嵌套。

(3)报告不能跨越顶层集合。

(4)除了最长的报告,顶层集合中的其他报告必须以【短包】(shortpacket?

)终结;所有没有达到【端点】的【最大包长度(wMaxPacketSize)】的报告也必须以【短包】(shortpacket?

)终结。

(5)整个报告长度必须是字节的整数倍。

(6)项目说明的数据域不能跨越超过4字节,即最长的数据域32bit必须开始于字节边界。

7、几个报告描述符的例子(来源于网络)

(1)一个红外触摸屏的例子【包含2种不同的报告,REPORT_ID

(1),REPORT_ID

(2)】

//126byte

0x05,0x01,//USAGE_PAGE(GenericDesktop)

0x09,0x02,//USAGE(Mouse)

0xa1,0x01,//COLLECTION(Application)

0x09,0x01,//USAGE(Pointer)

0xa1,0x00,//COLLECTION(Physical)

0x85,0x01,//REPORT_ID

(1)

0x05,0x09,//USAGE_PAGE(Button)

0x19,0x01,//USAGE_MINIMUM(Button1)

0x29,0x03,//USAGE_MAXIMUM(Button3)

0x15,0x00,//LOGICAL_MINIMUM(0)

0x25,0x01,//LOGICAL_MAXIMUM

(1)

0x75,0x01,//REPORT_SIZE

(1)

0x95,0x03,//REPORT_COUNT(3)

0x81,0x02,//INPUT(Data,Var,Abs)

0x75,0x05,//REPORT_SIZE(5)

0x95,0x01,//REPORT_COUNT

(1)

0x81,0x01,//INPUT(Cnst,Ary,Abs)

0x05,0x01,//USAGE_PAGE(GenericDesktop)

0x09,0x30,//USAGE(X)

0x09,0x31,//USAGE(Y)

0x15,0x81,//LOGICAL_MINIMUM(-127)

0x25,0x7f,//LOGICAL_MAXIMUM(127)

0x75,0x08,//REPORT_SIZE(8)

0x95,0x02,//REPORT_COUNT

(2)

0x81,0x06,//INPUT(Data,Var,Rel)

0xc0,//END_COLLECTION

0xc0,//END_COLLECTION

0x05,0x01,//USAGE_PAGE(GenericDesktop)

0x09,0x02,//USAGE(Mouse)

0xa1,0x01,//COLLECTION(Application)

0x09,0x01,//USAGE(Pointer)

0xa1,0x00,//COLLECTION(Physical)

0x85,0x02,//REPORT_ID

(2)

0x05,0x09,//USAGE_PAGE(Button)

0x19,0x01,//USAGE_MINIMUM(Button1)

0x29,0x03,//USAGE_MAXIMUM(Button3)

0x15,0x00,//LOGICAL_MINIMUM(0)

0x25,0x01,//LOGICAL_MAXIMUM

(1)

0x75,0x01,//REPORT_SIZE

(1)

0x95,0x03,//REPORT_COUNT(3)

0x81,0x02,//INPUT(Data,Var,Abs)

0x75,0x01,//REPORT_SIZE

(1)

0x95,0x05,//REPORT_COUNT(5)

0x81,0x03,//INPUT(Cnst,Var,Abs)

0x05,0x01,//USAGE_PAGE(GenericDesktop)

0x09,0x30,//USAGE(X)

0x15,0x00,//LOGICAL_MINIMUM(0)

0x26,0xff,0x07,//LOGICAL_MAXIMUM(2047)

0x75,0x10,//REPORT_SIZE(16)

0x95,0x01,//REPORT_COUNT

(1)

0x81,0x02,//INPUT(Data,Var,Abs)

0x09,0x31,//USAGE(Y)

0x15,0x00,//LOGICAL_MINIMUM(0)

0x26,0xff,0x05,//LOGICAL_MAXIMUM(1535)

0x75,0x10,//REPORT_SIZE(16)

0x95,0x01,//REPORT_COUNT

(1)

0x81,0x02,//INPUT(Data,Var,Abs)

0xc0,//END_COLLECTION

0xc0//END_COLLECTION

(2)使用绝对坐标的鼠标报告描述符

DB05H,01H//USAGE_PAGE(GenericDesktop)

DB09H,02H//USAGE(Mouse)

DBa1H,01H//COLLECTION(Application)

DB09H,01H//USAGE(Pointer)

DBa1H,00H//COLLECTION(Physical)

DB05H,09H//USAGE_PAGE(Button)

DB19H,01H//USAGE_MINIMUM(Button1)

DB29H,03H//USAGE_MAXIMUM(Button3)

DB15H,00H//LOGICAL_MINIMUM(0)

DB25H,01H//LOGICAL_MAXIMUM

(1)

DB75H,01H//REPORT_SIZE

(1)

DB95H,03H//REPORT_COUNT(3)

DB81H,02H//INPUT(Data,Var,Abs)

DB75H,01H//REPORT_SIZE

(1)

DB95H,05H//REPORT_COUNT(5)

DB81H,03H//INPUT(Cnst,Var,Abs)

DB05H,01H//USAGE_PAGE(GenericDesktop)

DB09H,30H//USAGE(X)

DB15H,00H//LOGICAL_MINIMUM(0)

DB26H,55H,05H//LOGICAL_MAXIMUM(1365)

DB35H,00H//PHYSICAL_MINIMUM(0)

DB46H,55H,05H//PHYSICAL_MAXIMUM(1365)

DB75H,08H//REPORT_SIZE(16)

DB95H,02H//REPORT_COUNT

(1)

DB81H,02H//INPUT(Data,Var,Abs)

DB09H,31H//USAGE(Y)

DB15H,00H//LOGICAL_MINIMUM(0)

DB26H,ffH,02H//LOGICAL_MAXIMUM(767)

DB35H,00H//PHYSICAL_MINIMUM(0)

DB46H,ffH,02H//PHYSICAL_MAXIMUM(767)

DB75H,08H//REPORT_SIZE(16)

DB95H,02H//REPORT_COUNT

(1)

DB81H,02H//INPUT(Data,Var,Abs)

DBc0H//END_COLLECTION

DBc0h//END_COLLECTION

8、为支持多点触控增加的HID规范

参考文本《DigitizerDriversforWindowsTouchandPen-BasedComputers》。

为支持多点触控(例如Windows7),HID又在数字化仪用途页(0x04,Digitizer)下面增加了下面的几个新的【用途】。

可以接受多点输入值的【顶层应用集合用途ID】分别为:

0x01(数字化仪)、0x02(手写笔)、0x04(触摸屏)和0x05(触摸板)。

名称

说明

类型

用途ID

Contactidentifier

触摸ID

DV(动态值)

0x51

Configuration

配置

CA(应用集合)

0x0E

Devicemode

设备模式

DV(动态值)

0x52

Devicesettings

设备设置

CL(逻辑集合)

0x23

Deviceidentifier

设备ID

DV(动态值)

0x53

Contactcount

触点数

DV(动态值)

0x54

Contactcountmaximum

最大触点数

DV(动态值)

0x55

其中:

●【触摸ID】用于区分不同的触摸点;

●【触点数】用于指出实际有效的触摸点数;

●【最大触点数】用于指出设备支持的最大触点数(只读,用Feature声明);

●【设备ID】用在报告描述符中存在多个【顶层数字化仪集合】时区分不同的设备。

(1)【配置】应用集合、【设备设置】逻辑集合和【设备模式】用于描述【配置报告】顶层集合,该Feature报告用于win7操作系统改变(重新配置)设备模式。

设备模式包括:

0x00鼠标、0x01单点触控、0x02多点触控。

(通常缺省的设备模式应该为鼠标,以便支持win7之前的操作系统)。

(2)多点触摸报告通常具有一个【顶层数字化仪集合】,其中包含若干个【内层指针(finger)逻辑集合】,每一个逻辑集合报告一个触点信息。

【触点数】和【最大触点数】处于顶层数字化仪集合中。

(3)触点信息逻辑集合中必须包含的用途有:

【X】(用途页0x01,用途0x30)、【Y】(用途页0x01,用途0x31)、【触摸ID】(用途页0x0D,用途0x51)、【碰触开关】(用途页0x0D,用途0x42)和【进入范围标

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1