前面有提到關於scsi協議的usb裝置實現。現在來談談usbhid裝置。hid全稱human inte***ce device。hid協議裡增加了hid描述符和報告描述符,以及特定的關於hid的類請求。hid裝置的通訊是通過報表來進行的。據說,報告描述符是usb裝置中最難的描述符了。關於hid描述符可以參考hid協議。接下來我們談談報告描述符。
每乙個hid裝置都有自己的報告描述符。報告描述符有三種類專案:main類專案,global類專案,local類專案。具體看下表
global作用域是遇到下乙個同名global,local作用域是遇到下乙個main(input,output,feature)。usage min-max表示有幾種功能,logical min-max表示有幾種狀態。每個報告描述符都有報告id,報告id是用來區別復合裝置的。在報告描述符裡沒有寫報告id,預設報告id是0。usb的控制端點可以進行input,output,feature專案的傳輸,
中斷端點可以進行input,output傳輸。
(1)鍵盤的報告描述符
0x05,0x01,// global generic desktop
0x09,0x06,// local keyboard
0x05,0x07,// global keyboard
//第1位元組
0x19,0xe0,// local usage min (keyboard leftcontrol)
0x29,0xe7,// local usage max (keyboard right gui)
0x15,0x00,// global logical min
0x25,0x01,// global logical max
0x95,0x08,// global reportcount
0x75,0x01,// global reportsize
0x81,0x02,// main input(data,var,abs)
//第2位元組
0x95,0x01,// global reportcount
0x75,0x08,// global reportsize
0x81,0x03,// main input(cnst,var,abs)
//第3-8位元組
0x95,0x06,// global reportcount
0x75,0x08,// global reportsize
0x15,0x00,// global logical min
0x26,0xff,0x00,//global logical max
0x19,0x00,// local usage min
0x29,0x65,// local usage max
0x81,0x00,// main output(data,ary,abs)
1位元組輸出報告
0x15,0x00,// global logical min
0x25,0x01,// global logical max
0x95,0x05,// global reportcount
0x75,0x01,// global reportsize
0x05,0x08,// global led
0x19,0x01,// local usage min
0x29,0x05,// local usage max
0x91,0x02,// main output(data,var,abs)
補足上面變成1個位元組
0x95,0x01,// global reportcount
0x75,0x03,// global reportsize
0x91,0x03,// main output(cnst,var,abs)
0xc0 // main end collection
鍵盤的描述符共有8位元組的輸入報告和1位元組的輸出報告。
1位元組輸出報告:這1個位元組總共用了5bits使用3bits常量來補足成1個位元組。5bits用來點亮特殊鍵盤上的led燈,比如鍵盤的大小寫,數字鍵,小鍵盤的led燈。
如果不給鍵盤配置out端點,那麼鍵盤的1位元組輸出報告將由控制端點的setreport進行傳輸。
(2)滑鼠描述符
0x05,0x01, // global generic desktop
0x09,0x02, // local mouse
0x09,0x01, // local pointer
0xa1,0x00, // main phy collection
0x95,0x03, // global reportcount
0x75,0x01, // global reportsize
0x05,0x09, // global button
0x19,0x01, // local usage min
0x29,0x03, // local usage max
0x15,0x00, // global logical min
0x25,0x01, // global logical max
0x81,0x02, // main input(data,var,abs)
0x95,0x01, // global reportcount
0x75,0x05, // global reportsize
0x81,0x03, // main input(cnsr,var,abs)
0x95,0x03,0x75,0x08, // global reportcount global reportsize
0x05,0x01, // global generic desktip
0x09,0x30, // local x
0x09,0x31, // local y
0x09,0x38, // locak wheel
0x15,0x81, // global logical min
0x25,0x7f, // global logical max
0x81,0x06, // main input(data,var,rel)
0xc0, // main end collection
0xc0 // main end collection
滑鼠描述符有4位元組輸入報告。第1個位元組前3位表示左右中三鍵,後面3個位元組分別表示x軸,y軸,滑輪。 USB HID 協議入門
usb hid類是usb裝置的乙個標準裝置類,包括的裝置非常多。hid類裝置定義它屬於人機互動操作的裝置,用於控制計算機操作的一些方面,如usb滑鼠 usb鍵盤 usb遊戲操縱桿等。但hid裝置類不一定要有人機介面,只要符合hid類別規範的裝置都是hid裝置。usb hid裝置的乙個好處就是作業系統...
轉 關於USB HID報告描述符
usb hid報告及報告描述符簡介 在usb中,usbhost是通過各種描述符來識別裝置的,有裝置描述符,配置描述符,介面描述符,端點描述符,字串描述符,報告描述符等等。usb報 告描述符 reportdescriptor 是hid裝置中的乙個描述符,它是比較複雜的乙個描述符。usbhid裝置是通過...
ARP協議以及RARP協議
我們都知道ip位址是不能直接用來通訊的。這是因為ip位址只是主機在抽象網路層中的位址。若要將網路層中的資料傳送給目的主機,則還需要傳到資料鏈路層變成mac幀後才能發到目的網路上。因此,不管網路層使用的是什麼協議,在實際網路的鏈路上傳輸時,最終還是必須使用硬體位址。由於ip位址只有32位,而 硬體位址...