从零开始学USB(二十四、USB接口HID类设备(六)_物理描述符)
物理描述符也称作实体描述符。被用来描述设备的行为特性。
物理描述符是一种数据结构,它提供有关激活控件或控件的人体特定部分的信息。
例如,物理描述符可能指示右手拇指用于激活按钮5.应用程序可以使用此信息将功能分配给设备的控件。
物理描述符完全是可选的。 它们增加了复杂性,并且对大多数设备提供的回报很少。 但是,某些设备,特别是那些具有大量相同控件的设备(例如按钮)会发现物理描述符可以帮助不同的应用程序以更一致的方式为这些控件分配功能。
类似的物理描述符被分组。 报表描述符中包含的指示符索引项目将项目(或控件)映射到物理描述符集合中包含的特定物理描述符(以下统称为描述符集合)。
每个描述符集由一个短标题和一个或多个物理描述符组成。 标题定义了偏移(描述符集是针对右手还是左手用户)和集合的首选项。 对于特定偏置,供应商可以定义备用物理描述符(例如,惯用右手的用户可能能够以多种方式保持设备,因此重新映射触摸各个项目的手指)。
每个物理描述符包含以下三个字段:
- Designator(指示符):识别影响项目的实际身体部位 - 例如手。
- Qualifier(限定符):进一步定义指示符 - 例如,右手或左手。
- Effort(努力值):量化用户必须用于实现项目的努力的价值。
如果多个项目标识相同的指定符/限定符组合,则可以使用“Effort”值来解析函数的分配。 当手处于“静止”位置时,努力值0将用于定义手指所在的按钮,即,用户实际上不需要激活按钮。 当手指必须伸展以达到控制时,努力值会增加。
两个或更多控件只有相同的时间指示符/限定符/努力组合是因为它们物理连接在一起。 一个长的瘦键帽,一端是'+',另一端是' - '就是一个很好的例子。 如果它是作为两个分立的按钮电气地实现的,即使它们都在同一个键帽下,也可以同时按下两个按钮。 如果供应商决定对于该产品,同时按下“+”和“ - ”按钮是有效的,那么它们将被描述为具有相同物理描述符的两个离散按钮。 但是,如果键帽标记为“音量”并且同时按下两个按钮没有任何意义,那么供应商可能会选择将按钮描述为具有三种有效状态的单个项目:关闭,更多音量(+), 并减少音量( - )。 在这种情况下,只需要一个物理描述符。
考虑一个操纵杆,它在底座的左侧有两个按钮(A和B),在杆的前面有一个触发按钮,与按钮A进行逻辑或操作。操纵杆底座通常用左手握住,而 用右手操纵棍子。 因此,第一个描述符集将指定按钮A为:
- 食指,右,努力0
同样,按钮B将被指定为:
- 拇指,左,努力0
如果将操纵杆放在桌面上并且左手用于控制基座上的两个按钮,则另一个描述符集可以识别按钮A的替代映射:
- 中指,左,努力0
按钮B将被指定为:
- 食指,左,努力0
注:指示符标签是可选的,可以为设备的所有,部分或其中一个项目或元素提供。
描述符集0是一个特殊的描述符集,它指定了附加描述符集的数量,以及每个集合中物理描述符的数量。
Part | Offset/Size (Bytes) | Description |
bNumber | 0/1 | 指定物理描述符集数量的数字表达式。 不要在此编号中包含物理描述符0本身。 |
bLength | 1/2 | 标识每个物理描述符长度的数字表达式。 |
在从主机接收到Get_Descriptor请求时,HID类设备将返回在请求wValue低字节中指定的描述符集。 描述符集由标题后跟一个或多个物理描述符组成。
HID类设备对其物理描述符使用以下格式。
- 偏差字段指示描述符集正在表征哪一只手。 这可能不适用于某些设备。
注:仅适合右手的设备不会返回具有左手偏置的描述符集。
- 首选项字段指示描述符集是否包含首选或替代指示符信息。 供应商将为最优选或最典型的物理信息集定义偏好值0。 较高的偏好值表示较不优选的描述符集。
- 描述符集中的物理描述符由报表描述符中的指示符索引项引用。
- 物理描述符包含以下部分:
Part | Offset/Size (Bytes) | Description |
Designator |
0/1 | 指定值; 指示身体的哪个部分影响该项目 |
bFlags | 1/1 |
指定标志的位: 7..5 限定符 4..0 努力值 |
指定值可选如下:
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 | 无名指 |
- 限定符字段指示指定者定义的手(或身体的一半)。 这可能不适用于某些设备。
Qualifier取值含义 | |||
Qualifier取值 | 含义 | Qualifier取值 | 含义 |
0x00 | 无 | 0x04 | 其中之一 |
0x01 | 右 | 0x05 | 中间 |
0x02 | 左 | 0x06 | 保留 |
0x03 | 两者同时 | 0x07 | 保留 |
- “努力”字段表示用户访问控件的容易程度。 值0表示用户可以快速轻松地影响控件。 随着值的增加,用户变得更难或需要更长时间来影响控制。
想要详细的学习物理描述符,可以看 HID Usage Tables 1.12的附录章节。
其中以一个游戏手柄的例子讲述了一个物理描述符的使用。
从零开始学USB(二十四、USB接口HID类设备(六)_物理描述符)相关推荐
- 从零开始学USB(二十二、USB接口HID类设备(四)_报表描述符Local类)
本地项目标签定义控件的特征. 这些项目不会转移到下一个主要项目. 如果Main项定义了多个控件,则可能会有几个类似的Local项标签. 例如,一个Input项可能有几个与之关联的Usage标签,每个控 ...
- USB接口HID类设备——1)理论知识
一.USB HID简介 USB HID类是USB设备的一个标准设备类,属于人机交互操作的设备,包括鼠标.键盘等,主要用于人与计算机进行交互,它还可用来传输数据.控制设备等,如影像显示设备可能使用HID ...
- 从零开始学USB(十九、USB接口HID类设备(一)_HID描述符)
USB设备中有一大类就是HID设备,即Human Interface Devices,人机接口设备.这类设备包括鼠标.键盘等,主要用于人与计算机进行交互.它是USB协议最早支持的一种设备类.HID设备 ...
- 从零开始学USB(二十一、USB接口HID类设备(三)_报表描述符Global类)
Global Item 用于描述一个操作( Main Item )所用到的数据格式,它可以改变一个 state table 的量, 这个 state table 的参数用于修饰 Main Item . ...
- python读取每一行文字二十四_python接口自动化(二十四)--unittest断言——中(详解)...
简介 上一篇通过简单的案例给小伙伴们介绍了一下unittest断言,这篇我们将通过结合和围绕实际的工作来进行unittest的断言.这里以获取城市天气预报的接口为例,设计了 2 个用例,一个是查询北京 ...
- 从零开始学Pytorch(十四)之优化算法进阶
动量 目标函数有关自变量的梯度代表了目标函数在自变量当前位置下降最快的方向.因此,梯度下降也叫作最陡下降(steepest descent).在每次迭代中,梯度下降根据自变量当前位置,沿着当前位置的梯 ...
- python接口自动化测试二十四:上传多个附件,参数化
python接口自动化测试二十四:上传多个附件,参数化 # 添加多个附件参数化files = [("1.png", "1.png") ("2.png& ...
- 【Java】(二十四)File类(文件操作,文件夹操作,FileFilter接口);Properties属性集合
继续上一章,学习JavaIO框架 [Java](二十三)IO框架:流的概念与分类,字节流(对象流[序列化.反序列化]),编码方式,字符流(打印流,转换流) 上一节的学习(字节流,字符流)都是对文件内容 ...
- python仿真搭建_仿真秀学院|从零开始学ANSA二次开发:如何利用Designer搭建窗口,含安装步骤...
原标题:仿真秀学院|从零开始学ANSA二次开发:如何利用Designer搭建窗口,含安装步骤 作者 | 团长 仿真秀专栏作者 首发 |仿真秀App 导读:大家好,我是团长,是一名CAEer,还是一名C ...
最新文章
- golang goland报错错误 $GOPATH/go.mod exists but should not 解决方法
- django2.0集成xadmin0.6报错集锦
- C++primer 9.2.1节练习
- Linux nginx搭建文件服务器
- vue-cli3使用svg图标的详细步骤
- C语言——输出*菱形
- 应用程序池 应用池即应用程序池:
- python 数据可视化利器(bokeh、pyecharts)
- Lazy Load Plugin for jQuery延迟加载测试成功
- 《Excel图表之道》高清PDF精美样章
- Linux 磁盘清理
- 事事有着落,件件有回音——MyAppsp平台督查督办管理系统
- 计算机的数学知识的手抄报图片大全,数学手抄报图片大全获奖作品
- API 鉴权插件上线!支持用户自定义鉴权插件
- jQuery实现无刷新切换主题皮肤功能
- https的FTP文件下载
- 用ado打开Excel文件时报外部表不是预期的格式的解决方法
- 我的第一份实习—ISP图像调试工程师
- 显卡温度过高怎么办,解决显卡温度过高办法?
- 小米扫地机器人原地不动_扫地机在清扫过程中被卡住,如何进行有效脱困?
热门文章
- MAVEN-POM.XML配置解读
- 中小企业会计核算存在的问题及对策
- ACM与IEEE双Fellow、华人女计算机科学家周以真:可信 AI,未来可期
- 原生JS零魂之问(上)学习笔记
- 【2021年最新版Java校招面试题目合集】
- Flink集成Hudi实践
- 背阔肌(06):T杠俯身划船
- “小米汽车”商标被纺织品公司抢注
- [转]华为应对新劳动合同法 万名员工将自选去留[http://news.qq.com/a/20071027/002388.htm 21世纪经济报道]
- web项目上云_联想Filez—携手浙江中烟,发力“云”端,打造“烟草上云”新势能...