从零开始学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类设备(六)_物理描述符)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 江苏最新建筑施工塔式起重机(建筑特种作业
- 下一篇: php tipask yii 单点登录_