usb hid類是usb裝置的乙個標準裝置類,包括的裝置非常多。hid類裝置定義它屬於人機互動操作的裝置,用於控制計算機操作的一些方面,如usb滑鼠、usb鍵盤、usb遊戲操縱桿等。但hid裝置類不一定要有人機介面,只要符合hid類別規範的裝置都是hid裝置。
usb hid裝置的乙個好處就是作業系統自帶了hid類的驅動程式,而使用者無需去開發驅動程式,只要使用api系統呼叫即可完成通訊。
所有的hid裝置通過usb的控制管道(預設管道,即端點0)和中斷管道(端點1或端點2)與主機進行通訊。
管道 要求 說明
控制(端點0) 必須 傳輸usb描述符、類請求**以及供查詢的訊息資料
中斷輸入 必須 傳輸從裝置到主機的輸入資料
中斷輸出 可選 傳輸從主機到裝置的輸出資料
注:usb主機為pc,usb裝置如滑鼠等。
控制管道主要用於下面3個方面
中斷管道主要用於下面兩個方面
從usb主機到usb裝置的中斷輸出資料傳輸是可選的,當不支援中斷輸出資料時,usb主機通過控制管道將資料傳輸給usb裝置。
hid裝置的描述符除了5個usb的標準描述符(裝置描述符、配置描述符、介面描述符、端點描述符、字串描述符)外,還包括三個hid裝置類特定的描述符:hid描述符、報告描述符、實體描述符。
除了hid的三個特定描述符組成對hid裝置的解釋外,5個標準描述符中與hid裝置有關的部分有:
binte***ceprotocol的取值(十進位制) 含義
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鍵盤,這種復合鍵盤可以通過在報告描述符裡包含滑鼠和鍵盤兩種報告實現,兩個報告用報告id來區分。
3.實體描述符
實體描述符被用來描述裝置的行為特性。實體描述符是可選的描述符,hid裝置可以根據其本體的裝置特性選擇是否包含實體描述符。hid的實體描述符結構如下表:
偏移量 域 大小 說明
0 bdesignator 1 用來指定本體的那一部分影響專案,見下表
1 bflags 1 位指定標誌
位0~4:effort
位5~7:qualifier,見下表
表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保留
偏移量域
大**明
0bmrequesttype
1hid裝置類請求特性如下:
位7:0=從usb host到usb裝置
1=從usb裝置到usb host
位6~5:
01=請求型別為裝置類請求
位4~0:
0001=請求物件為介面(inte***ce)
因而,針對hid的裝置類請求,僅僅10100001和00100001有效
1brequest
1hid類請求(參考表10)
2wvalue
2高位元組說明描述符的型別(參考表5),而低位元組為非0值時被用來選定實體描述符。
4windex
22位元組數值,根據不同的brequest有不同的意義
6wlength
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描述符的資訊請求其相關的描述符。
關於USBHID協議以及滑鼠鍵盤描述符的解釋
前面有提到關於scsi協議的usb裝置實現。現在來談談usbhid裝置。hid全稱human inte ce device。hid協議裡增加了hid描述符和報告描述符,以及特定的關於hid的類請求。hid裝置的通訊是通過報表來進行的。據說,報告描述符是usb裝置中最難的描述符了。關於hid描述符可以...
VC 識別USB HID裝置
遇到問題 和論壇中一樣,不過前輩是2007年遇到的。有乙個usb裝置,在裝置管理器中顯示為乙個磁碟驅動器,但是它是沒有碟符的,在ondevicechange中,當這個裝置插入或者拔插的時候產生多個dbt devnodes changed,而dbt devicearrival,dbt devicere...
OSPF協議入門
ospf是乙個基於鏈路狀態的動態路由協議 屬於igp的一種 基本思路 在自治系統中的每一台執行ospf的路由器收集各自的介面 鄰接資訊成為鏈路狀態,通過flooding演算法在整個系統廣播自己的鏈路狀態,使得整個系統內部維護有個同步的鏈路狀態資料庫,割據這一資料庫,路由器計算出以自己為根,其它網路節...