# USB HID Descriptor USB有很多Class:[USB設備類代碼表(USB Class Code)](https://blog.csdn.net/u014647208/article/details/79994473) USB HID類是比較大的一個類,HID類設備屬於人機交互操作的設備。用於控制計算機操作的一些方面,如USB鼠標,USB鍵盤,USB遊戲操縱桿,USB觸摸板,USB軌跡球、電話撥號設備、VCR遙控等等設備。另外,使用HID設備的一個好處就是,操作系統自帶了HID類的驅動程序,而用戶無需去開發很麻煩的驅動程序,只要直接使用API調用即可完成通信。所以很多簡單的USB設備,喜歡枚舉成HID設備,這樣就可以不用安裝驅動而直接使用。 ## HID Descriptor HID設備的描述符除了5個USB的標準描述符(設備描述符、配置描述符、接口描述符、端點描述符、字符串描述符,還包括3個HID設備類特定描述符:HID描述符、報告描述符、實體描述符。 ### Device Ddescriptor (設備描述符) ==USB設備只有一個設備描述符==。設備描述符是在設備連接時主機讀取的第一個描述符。設備描述符所含的信息,被主機用來取得設備的額外內容。 | Offset | Field | Size | Value | Description | | ------ | ----- | -----| ----- | ----------- | | 0 | bLength |1|Number|以字節為單位的描述符大小 (0x12,18個字節) | | 1 | bDescriptorType |1|Constant|設備描述符類型 (0x01,DEVICE) | | 2 | bcdUSB |2|BCD|USB規範版本號 (0x0210,USB 2.1) | | 4 | bDeviceClass |1|Class|類碼 (0x01-0xFE為USB規範中的Class,0xFF為廠商定義)| | 5 | bDeviceSubClass |1|SubClass|子類碼 | |6 |bDeviceProtocol| 1 |Protocol |協議碼| |7 |bMaxPacketSize0| 1 |Number| 端點0的最大包大小| |8 |idVendor |2 |ID |廠商ID| |10 |idProduct| 2| ID| 產品ID| |12 |bcdDevice |2 |BCD| 設備版本號| |14 |iManufacturer| 1| Index| 製造商字符串描述符索引| |15 |iProduct |1 |Index| 產品的字符串描述符索引| |16 |iSerialNumber |1 |Index| 設備序列號的字符串描述符索引| |17 |bNumConfigurations |1 |Number| 可能的配置數目| 補充: **bDeviceClass** bDeviceClass類碼(Class code)。這個字段為那些在設備層次定義功能的設備規定了它們所屬的類。從0x01到0xFE的值是留給那些被USB規範定義的類。廠商定義的類使用0xFF。大多數設備在接口描述符中規定了它們的類。對於這些設備,若其功能不使用接口關聯描述符(interface association descriptor),則設備描述符中的bDeviceClass 將等於0x00;若其功能使用接口關聯描述符(interface association descriptor),bDeviceClass 就等於0xEF。 **bDeviceSubClass** bDeviceSubClass 子類碼(Subclass code)。這個字段可規定一個類的子類。子類可增加對由類中的一組功能所共享的額外特性和功能的支持。如果bDeviceClass是0x00,則bDeviceSubClass也必須為0x00。如果bDeviceClass在0x01到0xFE範圍內,則bDeviceSubClass等於0x00或等於為設備的類所定義的代碼。標準類(standard classes)中,製造商定義的子類使用0xFF 。 ### Configuration Descriptor (配置描述符) ### Interface Descriptor (接口描述符) ### Endpoint Descriptor (端點描述符) ### Device Ddescriptor (字符串描述符)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up