您的位置 首页 数字

USB HID 设备类协议入门

一、应用场合USBHID类是比较大的一个类,HID类设备属于人机交互操作的设备。用于控制计算机操作的一些方面,如USB鼠标,USB键盘,USB…

一、运用场合

  USB HID类是比较大的一个类,HID类设备归于人机交互操作的设备。用于操控计算机操作的一些方面,如USB鼠标,USB键盘,USB游戏操纵杆,USB触摸板,USB轨迹球、电话拨号设备、VCR遥控等等设备。别的,运用HID设备的一个优点便是,操作系统自带了HID类的驱动程序,而用户无需去开发很费事的驱动程序,只需直接运用API调用即可完结通讯。所以许多简略的USB设备,喜爱枚举成HID设备,这样就能够不必装置驱动而直接运用。

二、USB HID类可选用的通讯管道

  一切的HID设备经过USB的操控管道(默许管道,即端点0)和中止管道与主机通讯。

表1、USB HID规范界说的HID设备可用端点
管道 要求 阐明
操控(端点0) 有必要 传输USB描绘符、类恳求代码以及供查询的音讯数据等
中止输入 有必要 传输从设备到主机的输入数据
中止输出 可选 传输从主机到设备的输出数据

  操控管道首要用于以下3个方面:

  • 接纳/呼应USB主机的操控请示及相关的类数据
  • 在USB主机查询时传输数据(如呼应Get_Report恳求等)
  • 接纳USB主机的数据

  中止管道首要用于以下两个方面:

  • USB主机接纳USB设备的异步传输数据
  • USB主机发送有实时性要求的数据给USB设备

  从USB主机到USB设备的中止输出数据传输是可选的,当不支撑中止输出数据传输时,USB主机经过操控管道将数据传输给USB设备。

三、与USB HID设备有关的描绘符

  HID设备的描绘符除了5个USB的规范描绘符(设备描绘符、装备描绘符、接口描绘符、端点描绘符、字符串描绘符,见百合电子工作室的另一篇文章:USB开发根底--USB指令(恳求)和USB描绘符)外,还包括3个HID设备类特定描绘符:HID描绘符、陈述描绘符、实体描绘符。

  除了HID的三个特定描绘符组成对HID设备的解说外,5个规范描绘符中与HID设备有关的部分有:

  • 设备描绘符中bDeviceClass、bDeviceSubClass和bDeviceProtocol三个字段的值有必要为零。
  • 接口描绘符中bInterfaceClass的值有必要为0x03,bInterfaceSubClass的值为0或1,为1表明HID设备符是一个发动设备(Boot Device,一般对PC机而言才有含义,意思是BIOS发动时能辨认并运用您的HID设备,且只要规范鼠标或键盘类设备才干成为Boot Device。假如为0则只要在操作系统发动后才干辨认并运用您的HID设备),bInterfaceProtocol的取值含义如下表所示: 
表2、HID接口描绘符中bInterfaceProtocol的含义
bInterfaceProtocol的取值(十进制) 含义
0 NONE
1 键盘
2 鼠标
3~255 保存

下面分别对这3个HID设备类特定描绘符进行阐明。

1、HID描绘符

  HID描绘符关联于接口描绘符,因此假如一个设备只要一个接口描绘符,则不管它有几个端点描绘符,HID设备只要一个HID描绘符。HID设备描绘符首要描绘HID规范的版别号、HID通讯所运用的额定描绘符、报表描绘符的长度等。表2所示为HID描绘符的结构:

表3、USB HID类描绘符的结构
偏移量 巨细 描绘
0 bLength 1 数字 此描绘符的长度(以字节为单位)
1 bDescriptorType 1 常量 描绘符品种(此处为0x21即HID类描绘符)
2 bcdHID 2 数字 HID规范版别号(BCD码),选用4个16进制的BCD格局编码,如版别1.0的BCD码为0x0100,版别为1.1的BCD码为0x0110
4 bCountryCode 1 数字 硬件意图国家的辨认码(BCD码)(见表3)
5 bNumDescritors 1 数字 支撑的隶属描绘符数目
6 bDescriptorType 1 常量 HID相关描绘符的类型,取值见表5
7 wDescriptorLength 2 数字 陈述描绘符总长度
9 bDescriptorType 1 常量 用于辨认描绘符类型的常量,运用在有一个以上描绘符的设备
10 wDescriptorLength 2 数字 描绘符总长度,运用在有一个以上描绘符的设备

表4、HID硬件意图国家辨认码
辨认码(十进制) 国家和地区 辨认码(十进制) 国家和地区
00 不支撑 18 Netherlands/Dutch
01 Arabic 19 Norwegian
02 Belgian 20 Persian (Farsi)
03 Canadian-Bilingual 21 Poland
04 Canadian-French 22 Portuguese
05 Czech Republic 23 Russia
06 Danish 24 Slovakia
07 Finnish 25 Spanish
08 French 26 Swedish
09 German 27 Swiss/French
10 Greek 28 Swiss/German
11 Hebrew 29 Switzerland
12 Hungary 30 Taiwan
13 International (ISO) 31 Turkish-Q
14 Italian 32 UK
15 Japan (Katakana) 33 US
16 Korean 34 Yugoslavia
17 Latin American 35 Turkish-F
36~255 Reserved

表5、HID相关描绘符类型界说
描绘符类型值 HID相关描绘符类型
0x21 HID描绘符
0x22 报表描绘符
0x23 实体描绘符

2、陈述描绘符

  HID设备的陈述描绘符比较复杂也比较难了解。

  陈述描绘符的语法不同于USB规范描绘符,它是以项目(items)方法摆放而成,无必定的长度。HID的陈述描绘符现已不是简简略单的描绘某个值对应某个固定含义了,它现已能够组合出许多种状况,而且需求PC上的HID驱动程序供给parser解说器来对描绘的设备景象进行从头解说,从而组合生成出本HID硬件设备共同的数据流格局,所以我觉得能够把它了解为“陈述描绘符脚本语言”更为恰当。咱们运用“陈述描绘符”专用脚本语言,让用户来自己界说他们的HID设备都有什么数据、以及这些数据各个位(bit)都有什么含义。

  有关陈述描绘符的详细信息可参阅USB HID协议,USB协会供给了一个HID描绘符修改东西称作HID Descriptor Tool,用它可便利生成咱们的陈述描绘符。

3、实体描绘符

  实体描绘符被用来描绘设备的行为特性。实体描绘符是可选的描绘符,HID设备能够依据其本体的设备特性挑选是否包括实体描绘符。表5所示为HID的实体描绘符结构。

表6、HID实体描绘符的结构
偏移量 巨细  阐明
0 bDesignator 1 用来指定本体的哪一部分影响项目(含义见表6)
1 bFlags 1 位指定标志
位0~4:Effort
位5~7:Qualifier(含义见表7)

表7、bDesignator取值含义表
bDesignator取值 含义 bDesignator取值 含义
0x00 0x15 小指
0x01 0x16
0x02 眼球 0x17
0x03 0x18 腰骨
0x04 眼皮 0x19
0x05 0x1A 大腿
0x06 0x1B 膝盖
0x07 0x1C 小腿
0x08 上唇 0x1D
0x09 下唇 0x1E
0x0A 0x1F 脚跟
0x0B 0x20 拇指
0x0C 上臂 0x21 大拇指
0x0D 手肘 0x22 第二指
0x0E 前臂 0x23 第三指
0x0F 手腕 0x24 第四指
0x10 手掌 0x25 小拇指
0x11 拇指 0x26
0x12 食指 0x27
0x13 中指 0x28~0xFF 保存
0x14 无名指

表8、Qualifier取值含义
Qualifier取值 含义 Qualifier取值 含义
0x00 0x04 其中之一
0x01 0x05 中心
0x02 0x06 保存
0x03 两者一起 0x07 保存

四、USB HID类指令(恳求)

  HID设备类特定的指令(恳求)有6个,它们分别是Get_Report、Get_Idle、Get_Protocol、Set_Report、Set_Idle和Set_Protocol。

  HID类恳求(指令)数据包格局如表8所示:

表9、HID类恳求(指令)包格局
偏移量 巨细 阐明
0 bmRequestType 1

HID设备类恳求特性如下:
位7:
0=从USB HOST到USB设备
1=从USB设备到USB HOST
位6~5:
01=恳求类型为设备类恳求
位4~0:
0001=恳求目标为接口(interface)

因此,针对HID的设备类恳求,只是10100001和00100001有用

1 bRequest 1 HID类恳求(参阅表9)
2 wValue 2 高字节阐明描绘符的类型(参阅表5),而低字节为非0值时被用来选定实体描绘符。
4 wIndex 2 2字节数值,依据不同的bRequest有不同的含义
6 wLength 2 该恳求的数据段长度

表10、HID类恳求
数值 HID类恳求描绘符 注释
0x01 GET_REPORT
0x02 GET_IDLE
0x03 GET_PROTOCOL 只是适应于支撑发动功用的HID设备(Boot Device)
0x09 SET_REPORT
0x0A SET_IDLE
0x0B SET_PROTOCOL 只是适应于支撑发动功用的HID设备(Boot Device)

  USB主机在恳求HID设备的装备描绘符时,设备首要回来的描绘符为:装备描绘符、接口描绘符、HID描绘符、端点描绘符。HID描绘符里包括了其隶属的描绘的类型和长度(如陈述描绘符),然后主机再依据HID描绘符的信息恳求其相关的描绘符。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/shuzi/239181.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部