USB HID 協議入門

轉載請註明來源:cuixiaolei的技術博客


 

 

USB HID設備類的應用場合

  USB HID類是USB設備的一個標準設備類,包括的設備很是多。HID類設備定義它屬於人機交互操做的設備,用於控制計算機操做的一些方面,如USB鼠標、USB鍵盤、USB遊戲操縱桿等。但HID設備類不必定要有人機接口,只要符合HID類別規範的設備都是HID設備。異步

  USB HID設備的一個好處就是操做系統自帶了HID類的驅動程序,而用戶無需去開發驅動程序,只要使用API系統調用便可完成通訊。工具

 


 

USB HID設備類的通訊管道

   全部的HID設備經過USB的控制管道(默認管道,即端點0)和中斷管道(端點1或端點2)與主機進行通訊。ui

  管道        要求      說明編碼

  控制(端點0)    必須      傳輸USB描述符、類請求代碼以及供查詢的消息數據操作系統

  中斷輸入      必須      傳輸從設備到主機的輸入數據對象

  中斷輸出      可選      傳輸從主機到設備的輸出數據blog

注:USB主機爲PC,USB設備如鼠標等。接口

 

  控制管道主要用於下面3個方面遊戲

  • 接收/響應USB主機的控制請求以及相關的類數據
  • 在USB主機查詢時傳輸數據(如響應Get_Report請求等)
  • 接收USB主機的數據

 

  中斷管道主要用於下面兩個方面ip

  • USB主機接收USB設備的異步傳輸數據
  • USB主機發送有實時性要求的數據給USB設備

  從USB主機到USB設備的中斷輸出數據傳輸是可選的,當不支持中斷輸出數據時,USB主機經過控制管道將數據傳輸給USB設備。

 


 

與USB HID設備有關的描述符

  HID設備的描述符除了5個USB的標準描述符(設備描述符、配置描述符、接口描述符、端點描述符、字符串描述符)外,還包括三個HID設備類特定的描述符:HID描述符、報告描述符、實體描述符。

  除了HID的三個特定描述符組成對HID設備的解釋外,5個標準描述符中與HID設備有關的部分有:

  • 設備描述符中:bDeviceClass, bDeviceSubClass, bDeviceProtocol三個值必須爲0
  • 接口描述符中:bInterfaceClass的值必須時0x03, bInterfaceSubClass的值爲0或1, 爲1表示HID設備是一個啓動設備(Boot Device, 通常對PC機有意義,意思是BIOS啓動時能識別您使用的HID設備,切只有標準鼠標或者鍵盤才能稱爲Boot Device),爲0表示HID設備是操做系統啓動厚才能識別使用的設備。bInterfaceProtocol的取值含義以下:

  bInterfaceProtocol的取值(十進制)    含義

  0                    NONE

  1                    鍵盤

  2                    鼠標

  3-255                   保留

 

  下面分別對3個HID設備類特定描述符進行說明:

1.HID描述符

  HID描述符關聯於接口描述符,於是若是一個設備只有一個接口描述符,則不管它有幾個端點描述符,HID設備只有一個HID描述符。HID設備描述符主要描述HID規範的版本號, HID通訊所使用的額外描述符, 報表描述符的長度等。下表爲HID描述符的結構。

偏移量    域        大小    值    描述

0      bLength      1     數字    此描述符的長度,以字節爲單位

1      bDescriptorType    1     常量   描述符種類(此處0X21爲HID類)

2      bcdHID      2     數字   HID規範版本號(BCD碼),採用4個16進制的BCD格式編碼,如版本1.0,0x0100,版本1.1,0x10110

4      bCountryCode   1      數字   硬件目的國家的識別碼

5      bNumDescriptors 1      數字   支持的附屬描述符數目

6      bDescriptorType   1     常量   HID相關描述符的類型,見下表

7      wDescriptorLength  2    數字    報告描述符的總長度

9      bDescriptorType  1     常量   用於識別描述符類型的常量,使用有一個以上描述符的設備

10      wDescriptorLength 2     數字   描述符總長度,使用在有一個以上描述符的設備 

 

HID相關描述符類型定義

描述符類型值      HID相關描述符類型

0x21           HID描述符

0x22           報表描述符  

0x23           實體描述符

 

2.報告描述符

  HID設備的報告描述符比較複雜,也比較難理解。

  報告描述符的語法不一樣於USB標準描述符,它是以項目(item)方式排列而成,沒有固定長度。HID的報告描述符已經不是簡單的描述某個值對飲過的固定意義了,它已經可以組合出不少種狀況,並且須要PC上的HID驅動程序提供parser解釋器來對描述符的設備情形進行從新解釋,進而組合生成本HID硬件設備獨特的數據流格式,因此能夠把它理解爲「報告描述符腳本語言」更爲貼切。咱們使用「報告描述符」專用腳本語言,讓用戶來本身定義它們的HID設備都有什麼數據,以及這些數據各個位(bit)都有什麼意義。

  有關報告描述符的詳細信息能夠參考USB HID協議,USB協會提供了一個HID描述符編輯工具稱做HID Descriptor Tool,用它能夠方便生成咱們的報告描述符。

  一個USB HID設備能夠包含多種功能的報告描述符合集,這樣能夠實現複合設備,如帶鼠標功能的USB鍵盤,這種複合鍵盤能夠經過在報告描述符裏包含鼠標和鍵盤兩種報告實現,兩個報告用報告ID來區分。

 

3.實體描述符

  實體描述符被用來描述設備的行爲特性。實體描述符是可選的描述符,HID設備能夠根據其本體的設備特性選擇是否包含實體描述符。HID的實體描述符結構以下表:

偏移量      域      大小      說明

0        bDesignator  1        用來指定本體的那一部分影響項目,見下表

1        bFlags     1        位指定標誌

                        位0~4:Effort

                        位5~7:Qualifier,見下表

 

 

 

表七、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 保留

 


 

USB 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類請求(參考表10)
2 wValue 2 高字節說明描述符的類型(參考表5),而低字節爲非0值時被用來選定實體描述符。
4 wIndex 2 2字節數值,根據不一樣的bRequest有不一樣的意義
6 wLength 2 該請求的數據段長度

 

數值 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描述符的信息請求其相關的描述符。

相關文章
相關標籤/搜索