上一篇: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都有特殊意义,协议规定如下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiNx8FesU2cfdGLwczX0xiRGZkRGZ0Xy9GbvNGLwIzXlpXazxSP9cmToJTW1gmMZVTQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLlF2MlV2YmFDMkNGNlhzY5UTMhRTM5ATZxEDN0YTN5MzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
后面跟着的一字节的数据,每个位的含义都是一样的。需要注意的是,对于自定义的报告描述符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)
鼠标、键盘和游戏杆等用途第一包含于通用桌面用途页。
7.1.1 键盘用途
HID_Usage_Tables.pdf从53页开始。定义了各个按键的用途ID。用到的时候,直接查表。
第一列:用途ID(十进制) 第二列:用途ID(十六进制) 第三列:按键名称
7.1.2 鼠标用途
鼠标用途看懂官方例子即可,开发很少用到。
7.2 LED灯用途页0x08(LED)
LED指示灯常用的ID如下图。
包括标准键盘上的大小写LED指示灯,以及一些通信设备(电话设备)的LED指示灯等。
7.3 按键用途页(Button)
详见P67.
7.4 电话通讯设备用途页0x0B(Telephony)
这个用途页定义了电话设备的按键和控制用法。需要注意的是,在很多情况下用途的定义是含糊不清的,这是因为我们假定控制跟电话系统的软件实现相关。比如,软件可以实现暂停,且在对方挂机之前,保持通信通路是打开状态的。而另一种实现是允许用户挂断,然后目标号码满足通信条件的时候回拨。所以,就需要统一用途的定义,使其在不同的厂商中接口能一致,从而在处理新的或多个系统时最大限度地减少学习曲线和挫折感。
电话设备上的指示灯使用LED用途来实现。HID_Usage_Tables.pdf 页码:P69
7.4.1 部分用途ID
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的通用键盘,电话键盘集合包含电话键盘选择器的用法。
手机键盘的定义与普通桌面用途页定义的键盘是不相同的。因为它独特的按键标记。所有手机按键的使用都由选择器定义。按键定义如下:
键值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类相关文档和工具