hid协议报告描述总结.docx
- 文档编号:10909525
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:19
- 大小:33.91KB
hid协议报告描述总结.docx
《hid协议报告描述总结.docx》由会员分享,可在线阅读,更多相关《hid协议报告描述总结.docx(19页珍藏版)》请在冰豆网上搜索。
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)和【进入范围标
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- hid 协议 报告 描述 总结