从零开始学USB(二十四、USB接口HID类设备(六)_物理描述符)

物理描述符也称作实体描述符。被用来描述设备的行为特性。

物理描述符是一种数据结构,它提供有关激活控件或控件的人体特定部分的信息。
例如,物理描述符可能指示右手拇指用于激活按钮5.应用程序可以使用此信息将功能分配给设备的控件。

物理描述符完全是可选的。 它们增加了复杂性,并且对大多数设备提供的回报很少。 但是,某些设备,特别是那些具有大量相同控件的设备(例如按钮)会发现物理描述符可以帮助不同的应用程序以更一致的方式为这些控件分配功能。 

类似的物理描述符被分组。 报表描述符中包含的指示符索引项目将项目(或控件)映射到物理描述符集合中包含的特定物理描述符(以下统称为描述符集合)。
每个描述符集由一个短标题和一个或多个物理描述符组成。 标题定义了偏移(描述符集是针对右手还是左手用户)和集合的首选项。 对于特定偏置,供应商可以定义备用物理描述符(例如,惯用右手的用户可能能够以多种方式保持设备,因此重新映射触摸各个项目的手指)。

每个物理描述符包含以下三个字段:

  • Designator(指示符):识别影响项目的实际身体部位 - 例如手。
  • Qualifier(限定符):进一步定义指示符 - 例如,右手或左手。
  • Effort(努力值):量化用户必须用于实现项目的努力的价值。

 

如果多个项目标识相同的指定符/限定符组合,则可以使用“Effort”值来解析函数的分配。 当手处于“静止”位置时,努力值0将用于定义手指所在的按钮,即,用户实际上不需要激活按钮。 当手指必须伸展以达到控制时,努力值会增加。

两个或更多控件只有相同的时间指示符/限定符/努力组合是因为它们物理连接在一起。 一个长的瘦键帽,一端是'+',另一端是' - '就是一个很好的例子。 如果它是作为两个分立的按钮电气地实现的,即使它们都在同一个键帽下,也可以同时按下两个按钮。 如果供应商决定对于该产品,同时按下“+”和“ - ”按钮是有效的,那么它们将被描述为具有相同物理描述符的两个离散按钮。 但是,如果键帽标记为“音量”并且同时按下两个按钮没有任何意义,那么供应商可能会选择将按钮描述为具有三种有效状态的单个项目:关闭,更多音量(+), 并减少音量( - )。 在这种情况下,只需要一个物理描述符。

考虑一个操纵杆,它在底座的左侧有两个按钮(A和B),在杆的前面有一个触发按钮,与按钮A进行逻辑或操作。操纵杆底座通常用左手握住,而 用右手操纵棍子。 因此,第一个描述符集将指定按钮A为:

  • 食指,右,努力0

同样,按钮B将被指定为:

  • 拇指,左,努力0

如果将操纵杆放在桌面上并且左手用于控制基座上的两个按钮,则另一个描述符集可以识别按钮A的替代映射:

  • 中指,左,努力0

按钮B将被指定为:

  • 食指,左,努力0

 

注:指示符标签是可选的,可以为设备的所有,部分或其中一个项目或元素提供。

 

描述符集0是一个特殊的描述符集,它指定了附加描述符集的数量,以及每个集合中物理描述符的数量。

PartOffset/Size (Bytes)Description
bNumber0/1指定物理描述符集数量的数字表达式。 不要在此编号中包含物理描述符0本身。
bLength1/2标识每个物理描述符长度的数字表达式。

在从主机接收到Get_Descriptor请求时,HID类设备将返回在请求wValue低字节中指定的描述符集。 描述符集由标题后跟一个或多个物理描述符组成。

 

HID类设备对其物理描述符使用以下格式。

 

  • 偏差字段指示描述符集正在表征哪一只手。 这可能不适用于某些设备。

注:仅适合右手的设备不会返回具有左手偏置的描述符集。

  • 首选项字段指示描述符集是否包含首选或替代指示符信息。 供应商将为最优选或最典型的物理信息集定义偏好值0。 较高的偏好值表示较不优选的描述符集。
  • 描述符集中的物理描述符由报表描述符中的指示符索引项引用。

 

 

  • 物理描述符包含以下部分:
PartOffset/Size (Bytes)Description

Designator

0/1指定值; 指示身体的哪个部分影响该项目
bFlags1/1指定标志的位:
7..5  限定符
4..0  努力值

 

指定值可选如下:

 

bDesignator取值含义表
bDesignator取值含义bDesignator取值含义
0x000x15小指
0x010x16
0x02眼球0x17
0x030x18腰骨
0x04眼皮0x19
0x050x1A大腿
0x060x1B膝盖
0x070x1C小腿
0x08上唇0x1D
0x09下唇0x1E
0x0A0x1F脚跟
0x0B0x20拇指
0x0C上臂0x21大拇指
0x0D手肘0x22第二指
0x0E前臂0x23第三指
0x0F手腕0x24第四指
0x10手掌0x25小拇指
0x11拇指0x26
0x12食指0x27
0x13中指0x28~0xFF保留
0x14无名指 

 

 

  • 限定符字段指示指定者定义的手(或身体的一半)。 这可能不适用于某些设备。

Qualifier取值含义
Qualifier取值含义Qualifier取值含义
0x000x04其中之一
0x010x05中间
0x020x06保留
0x03两者同时0x07保留

 

 

  • “努力”字段表示用户访问控件的容易程度。 值0表示用户可以快速轻松地影响控件。 随着值的增加,用户变得更难或需要更长时间来影响控制。

 

 

想要详细的学习物理描述符,可以看 HID Usage Tables 1.12的附录章节。

其中以一个游戏手柄的例子讲述了一个物理描述符的使用。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑的小刺猬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值