關於USBHID協議以及滑鼠鍵盤描述符的解釋

2021-07-04 08:03:35 字數 3259 閱讀 9081

前面有提到關於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位,而 硬體位址...