天天看点

HID用图表大纲HID用途表大纲

上一篇:USB_HID设备实例 USB_HID设备实例_卡卡的博客-CSDN博客

HID用途表大纲

条目(item)格式:1字节的前缀 + 1字节的数据字节

1字节的前缀可区分当前的条目是什么条目:主(main)条目、全局条目(global)、局部条目(local)。

1. bsize

1字节的前缀格式如下:注意各个位的含义

Bit:                 7 6 5 4                                       3 2                                                1 0

bTag bType bSize

第0和第1位表示,该前缀后面跟多少个字节:

00 = 0 : 后面跟0字节的数据

01 = 1 : 后面跟1字节的数据

10 = 2 : 后面跟2字节的数据

11 = 3 : 后面跟4字节的数据

2. bType

第2和第3位表示条目的类型:

00 = 0 : 表示该条目是主条目

01 = 1 : 表示该条目是全局条目

10 = 2 : 表示该条目是局部条目

11 = 3 : 保留

3. bTag

最后的四个位bTag表示当前条目的功能:

1)主条目有5个:input(输入)、output(输出)、Feature(属性)、Collection(集合)、End Collection(关集合)

1000 : Input

1001 : Output

1011 : Feature

1010 : Collection

1100 : End Collection

2)全局条目:用来选择用途页、定义数据域的长度、数据域的数量、报告ID。常用的有Usage Page(用途页)、Logical Mininum(逻辑最小值)、Logical Maxinum(逻辑最大值)、Physical Mininum(物理最小值)、Physical Maxinum(物理最大值)、Report Size(数据域大小)、Report Count(数据域长度)。Report Size描述数据域有多少个位,Report Count描述这样的域有多少个。

0000 : Usage Page

0001 : Logical Minimum

0010 : Logical Maximum

0011 : Physical Minimum

0100 : Physical maximum

0111 : Report Size

1000 : Report ID

1001 : Report Count

3)局部条目:用来定义控制的特性,数据域的用途,用途的最小最大值。常用的有:Usage(用途)、Usage Mininum(用途最小值)、Usage Maxinum(用途最大值)等。

0000 : Usage

0001 : Usage Mininum

0010 : Usage Maxinum

……………………………………

根据上面的规则,给出常用的一些前缀:

0x05:全局,后面跟一字节的用途表选择(Usage Page: xxx)

0x09:局部,后面跟一字节的用途(Usage: xxx)

0xa1:主条目,后面跟一字节的集合定义(Collection: xxx)

0x19:局部条目,后面跟一字节的用途最小值(Usage Mininum: xxx)

0x29:局部条目,后面跟一字节的用途最大值(Usage Maxinum: xxx)

………………………………………………………………………………………………………………

注:一般都是后面跟一字节的数据字,也就是最低两位是01。

4. 条目-代码速查表

注:都是后面跟一字节的短条目。

主条目 全局条目 局部条目
标签 代码 标签 代码 标签 代码
Input 0x81 Usage Page 0x05 Usage 0x09
Output 0x91 Logical Mini 0x15 Usage Mini 0x19
Feature 0xb1 Logical Maxi 0x25 Usage Maxi 0x29
Collection 0xa1 Physical Mini 0x35
EndCollection 0xc1 Physical Maxi 0x45
Report Size 0x75
Report ID 0x85
Report Count 0x95

5. 详解各个条目

5.1 主条目

对于主条目,前缀后跟的一字节怎么写?后面跟着的一字节每个bit都有特殊意义,协议规定如下:

HID用图表大纲HID用途表大纲
HID用图表大纲HID用途表大纲

 后面跟着的一字节的数据,每个位的含义都是一样的。需要注意的是,对于自定义的报告描述符collection的写法,end collection闭集合后面不跟数据字。

解析:

(0) 位0:Data(0)/Constant(1)

 Data表示主条目的数据是可变值,Constant表示主条目的数据为固定不可变的值

Constant用于Feature报告,或者用于填充位(padding),使报告长度为整字节

(1) 位1:Array(0)/Variable(1)

Array表示几个不同的操作的其中一个被触发

Variable表示每个字段仅表示一个操作

如果是Variable,则Report Count的数据值等于报告数据的字段数

若是Array,则Report Count的数据值表示可以同时被触发的最多操作数目

(2) 位2:Absolute(0)/Relative(1)

主条目的数据是以相对固定的基准点方式提供绝对数值(设为Absolute)

或是提供相对于前次报告的相对值(设为Relative)

(3) 位3: Wrap(0)/No Wrap(1)

主条目的数据值达到极低值后会转为极低值,反之亦同,称为卷绕(wrap)

(4) 位4: Liner(0)/Nonliner(1)

主条目的数据与操作刻度为线性关系(设为liner),或为非线性(Nonliner)

(5) 位5 :Preferred(0)/No Preferred(1)

主条目对应的操作在不被触发时会自动恢复到初始状态(Preferred),或是不会恢复原状(No Preferred)。

例如: 键盘的按键和会自动置中的游戏杆。皆为Preferred。

(6) 位6 :No Null Position(0)/Null state(1)

主条目对应的操作有一个状态,其不会送出有意义的数据,即数据将不再Logical Minimum和Maximum之间,这种操控要标注null state,否则为No null position。

(7) 位7 :Non Volatile(0)/Volatile(1)

主条目Feature的数据不允许被主机修改(设为Non volatile),

或是允许被主机改变(volatile),主条目为input和output时,此标注设定无意义,所以Bit7的代码必须为0。

(8) 位8 :bit filed/buffered bytes:

主项目的数据格式要以字节为单位,不足构成字节时自动填充成字节则Buffered Bytes。

(9) Collection和End Collection。

以鼠标而言,实体上是一个指针(pointer),这是应用为计算机鼠标;而这个指针含有3个按键和2个平移轴x和y。

所以指针的报告是由不同格式的数据所组成,因而需要用到collection和end collection将几个input项目集结成一组,其用途为指针,再用collection和end collection将指针括起来说明其应用为鼠标。

标签 end collection没有跟随任何数据,但是collection跟随一个字节数据,例如指针的数据名为Physical,而鼠标和键盘的为Application。

5.2 全局条目

1)主要用来选择用途页,定义数据域的长度、数量、报告ID等。

2)全局条目出现后对接下来的所有主条目都有效,除非遇到另一个全局条目来改变它。

3)常用的全局条目有:Usage Page(用途页),Logical Minimum(逻辑最小值),Logical Maximum(逻辑最大值),Physical Minimum(物理最小值),Physical Maximum(物理最大值),Report Size(数据域大小),Report Count(数据域数量),Report ID(报告ID)。

4)其中Reprot Size 用来描述某个数据域有多少个位;Report Count用来描述这样的数据域有多少个;Logical Minimum和Logical Maximum用来描述数据域的取值范围。

示例:如果是鼠标的3个按键,每个按键占用一个一位的字段,则Report Size(1), Report Count(3);

那么这个报告长度为3个位,可以同时呈现出3个按键的状态(不足一字节,后面要补上)。

Logical Minimum和Logical Maxinum用于说明每个报告字段的数值范围,这是纯数值,所以称为逻辑数值。

5.3 局部条目

1)用来定义控制的特性,例如,该数据域的用途、用途最小值、用途最大值。

2)局部条目只在局部有效,遇到一个主条目后,它的效用就结束了。

3)常用的局部条目有:Usage(用途)、Usage Minimum(用途最小值)、Usage Maximum(用途最大值)。

简单来说,局部条目只是说明用途而已,标签Usage应该称为Usage ID,它搭配全局条目的Usage Page标签才形成所定义的用途。

往往一个报告数据会对应到几个操作,因而会有几个用途,例如101按键的键盘利用不同代码代表不同的按键,每一个键就是一个操作,有自己的用途,要将所有的Usage ID列出不太现实,所以就需要Usage Maximum和Usage Minimum两个标签,以键盘为例,主项目之上,只要两个区域项目:Usage Minimum(0),Usage Maxmum(101)。

在Usage ID=0和Usage ID=101中的任意键被按下的用途都被赋予到一个报告数据上。

6. 速查用途页ID(usage page ID)

用途页ID(hex) 页面名称(USAGE_PAGE) 章节
00 缺省
01 通用桌面控制(Generic Desktop Controls) 4
02 模拟控制(Simulation Control) 5
03 虚拟现实控制(VR Controls)
04 运动控制(Sport Controls) 7
05 游戏控制(Game Controls) 8
06 通用设备控制(Generic Device Controls) 9
07 键盘/小键盘(Keyboard / Keypad) 10
08 LED灯(LEDs) 11
09 按键(Button) 12
0A 序数键(Ordinal) 13
0B 电话(Telephony) 14
0C 消费类电子(Consumer) 15
0D 数字化设备(Digitizer) 16
0E 保留
0F PID页
10 Unicode编码 17
11-13 保留
14 字母数字显示器(Alphanumeric Display) 18
15-3F 保留
40 医疗器械(Medical Instruments) 19
41-7F 保留
80-83 监控设备(Monitor pages) 监控类的USB设备
84-87 电源设备(Power pages) 电源类的USB设备
88-8B 保留
8C 条形码扫描设备(Bar Code Scanner) 跟销售相关的USB设备
8D 称重设备(Scale page)
8E 磁条读数设备(Magnetic Stripe Reading)
8F 保留(用于销售设备)
90 摄像设备控制 图像类的USB设备
91 Arcade Page 跟商场有关的USB设备
92-FEFF 保留
FF00-FFFF 厂商自定义

7. 部分用图页(usage page)

只关注一些开发中,常用的用途即可。有需要可以参考官方HID用图表文档。

7.1 通用桌面用途页0x01(Generic Desktop)

鼠标、键盘和游戏杆等用途第一包含于通用桌面用途页。

HID用图表大纲HID用途表大纲

7.1.1 键盘用途

HID_Usage_Tables.pdf从53页开始。定义了各个按键的用途ID。用到的时候,直接查表。

第一列:用途ID(十进制)  第二列:用途ID(十六进制) 第三列:按键名称

HID用图表大纲HID用途表大纲

7.1.2 鼠标用途

鼠标用途看懂官方例子即可,开发很少用到。

7.2 LED灯用途页0x08(LED)

LED指示灯常用的ID如下图。

HID用图表大纲HID用途表大纲

 包括标准键盘上的大小写LED指示灯,以及一些通信设备(电话设备)的LED指示灯等。

7.3 按键用途页(Button)

详见P67.

7.4 电话通讯设备用途页0x0B(Telephony)

这个用途页定义了电话设备的按键和控制用法。需要注意的是,在很多情况下用途的定义是含糊不清的,这是因为我们假定控制跟电话系统的软件实现相关。比如,软件可以实现暂停,且在对方挂机之前,保持通信通路是打开状态的。而另一种实现是允许用户挂断,然后目标号码满足通信条件的时候回拨。所以,就需要统一用途的定义,使其在不同的厂商中接口能一致,从而在处理新的或多个系统时最大限度地减少学习曲线和挫折感。

电话设备上的指示灯使用LED用途来实现。HID_Usage_Tables.pdf 页码:P69

7.4.1 部分用途ID

HID用图表大纲HID用途表大纲

 7.4.2 电话通讯设备的分类

(1)Phone【电话】:一个应用集合(application set),实现电话通讯设备控制。

(2)Answering Machine【应答机】:一个应用集合(application set),实现语音邮件或答录机控制。

(3)Message Control【消息控制】:和语音邮件控件相关的用途

(4)Handset【手持机】:手持式的电话设备,比如音频接收器和发射器

(5)Headset【头戴式】:与电话耳机(耳机和麦克风)相关的用途,包括音频接收器和发射器。

7.4.3 电话键盘用途(telephony key pad usages)

这是标准的电话键盘(拨号按键0~9,*和#),电话键盘意味着键盘用数字和相关字母字符标记,该集合也可以用作0~9的通用键盘,电话键盘集合包含电话键盘选择器的用法。

手机键盘的定义与普通桌面用途页定义的键盘是不相同的。因为它独特的按键标记。所有手机按键的使用都由选择器定义。按键定义如下:

HID用图表大纲HID用途表大纲

 键值ID详见表Telephony Usage Page。

7.4.4 可编程按键

Programmable Button:可编程电话按钮,此集合包含按键用途页中的用法。可编程按钮1到n分别由按钮页面用法1到n表示。

7.4.5 呼叫控制(call control)

用途名称/ID 解释
开关(Hook Switch/0x20) 表示手持电话设备是否已经就绪,使用一个bit来表示。1表示就绪,反之。
信号灯的闪光(Flash/0x21) 起到指示的作用,通常是一个可选的功能
特性(Feature/0x22) 操作特性的选择
暂停(Hold/0x23) 暂停当前通话
重拨(Redial/0x24) 重拨最后一次通话的号码
呼叫转移(Transfer/0x25) 转移通话到另外一个分机
断开(Drop/0x26) 断开当前通话
忙等待(Park/0x27) 等待线路空闲
呼叫前转(Forward Call/0x28) 转接到另外一个号码
线路(Line/0x2A) 电话仅支持一条线路,则类型为OSC,支持多条线路,类型则为NARY.
免提功能(Speaker Phone/0x2B) 使能免提模式
会议模式(Conference/0x2C) 发起电话会议
响铃(Ring Enable/0x2D) 使能响铃模式
铃声选择(Ring Select/0x2E) 按下铃声选择键,然后选择想要的铃声
电话静音(Phone Mute/0x2F) 禁用被呼叫人的音频,但打电话的人仍可听到输入的音频
来电显示(Caller ID) 显示来电号码

注:表格中列出来的只是部分。

7.4.6 快速拨号功能

快速拨号(Speed Dial/0x50) 启用快速拨号操作
号码存储(Store Number/0x51) 保存快速拨号的号码
查找号码(Recall Number/0x52) 在显示屏上调出快速拨号号码
电话簿(Phone Directory/0x53) 显示电话簿

7.4.7 语音邮件控制

语音邮件(Voice Mail/) 进入语音邮件应用程序
屏幕通话(Screen Calls/) 禁用被呼叫人的音频,并将呼叫转发至语音mai应用程序。来电者仍能听到传入的音频
勿扰模式(Do Not Disturb/) 禁用响铃和扬声器,并将呼叫转移到语音邮件应用程序
消息(Message/) 收听语音消息
接听和断开(Answer On/Off) 切换应答机

7.4.8 本地铃声

一些电话设备在本地生成铃声,而不是通过音频输入传送传送铃声,这些铃声通过手机扬声器或扬声器电话中的扬声器向用户播放。

用途名称/ID 解释
内部通话铃声(Inside Dial Tone/) 一种提示用户已准备好进行内部通话的铃声
外部通话铃声(Outside Dial Tone/) 一种提示用户电话已准备好拨打外部电话的音调
内置铃声(Inside Ring Tone/) 内置铃声响铃
外置铃声(Outside Ring Tone/) 外置铃声响铃
线路忙铃声(Line Busy Tone/) 线路正忙
通话等待(Call Waiting Tone/) 当前用户正在通话,另一个电话正在接听

注:表格中列出来的只是部分。

7.3 多媒体按键0x0C(Consumer)

Consumer页面上的所有的控制都是基于应用程序的,也就是说,能控制某些指定的设备,而不是整个系统。

8. 产品常用功能

(1) 多媒体键值用途页Consumer

常用的控制PC端音乐播放功能:暂停/播放、静音、上/下一曲、音量加/减、快进和快退播放等。

(2) 电话通讯设备用途页Telephony

开发会议室音箱的常用功能:音频通话/来电的接听、挂断和麦克风静音等

(3) 键盘

模拟上报控制PC端网页、音乐/视频播放软件等功能。

(4) 自定义报告数据

用于产品固件升级、和个性化上位机的小批量数据通信。

下一篇:分享HID类相关文档和工具