USB HID裝置報告描述符詳解 2

2021-06-29 13:40:35 字數 2646 閱讀 9056

標籤:

用途卷標只是報告描述符諸多標籤的乙個。表1列出所有的卷標,利用這些卷標取可以清楚完整的描述符操作的用途。報告描述符的語法不同於usb標準描述符,它是以專案(items)方式排列而成,無一定的長度;專案有乙個前輟(prefix),然後跟著乙個括號,內為該項目的資料:item = prefix(data)。

專案分成三種類別:主專案,全域性專案,區域專案。主專案中的input,ouput,feature三個卷標用來表示報告中資料的種類,這些是報告描述符中最主要的專案,其他專案都是用來修飾這三種專案。主要專案中其他二個卷標後面再作詳細的介紹。 l

input 項:表示裝置操作輸入到主機的資料模式。這個資料格式就形成乙個輸入報告,雖然輸入報告可以用控制型管線以get report(input)來傳輸,但是通常用中斷型輸入管線來傳輸以確保在每一固定週期內都能將更新的輸入報告傳給主機。

loutput項:表示由主機輸出到裝置操作的資料格式。這個資料格式就形成乙個輸出報告。輸出報告通常不適用輪詢的方式來傳送給裝置,而是由應用軟體依實際需求以傳令方式要求送出輸出報告,所以大多用控制型管線以set report(output)指令來將報告送到裝置。當然也可以選擇用中斷型輸出管線來傳送,只是通常不建議這樣用。

lfeature項:表示由主機送到裝置的組態所需資料的資料格式。這個資料模式就形成乙個特徵報告。特徵報告只能用控制型管線以get report(feature)和set report(feature)指令分別來取得和設定裝置的特徵值。

l範例:考慮乙個2x16字的顯示裝置,它的列數、行數、字寬、和字高為固定值屬於feature報告;顯示狀態例如「就緒」和「輸入字錯誤」則屬於input報告;游標位置和顯示的字需可讀寫,所以屬於另乙個feature報告;更新顯示的字則為output報告。為了區別兩個deatures,要用到全域性專案中的report id,每個feature報告有乙個不同的report id,因而主機請求指令要加上report id的值:get report(feature,report id)和set report(feature,report id)。

主專案用來定義報告中資料的種類和格式,而說明主專案之意義與用途為全域性

項 目和區域專案。顧名思義,區域性專案只能適用於列於其下的第乙個主專案,不適用於其他主專案,若乙個主專案之上有幾個不同的卷標的區域性專案,則這些區域 性專案皆適用於描述該主專案。相反,全域性性專案適用於其下方的所有主專案,除非另乙個相同卷標的全域性性專案出現。為了清楚說明報告描述符,將使用「專案狀 態表」(item state table)用來表示在某位址處適用的全域性性專案的組合。圖1顯示全域性性專案和區域性專案與所描述的主專案之對應關係。

區域性專案卷標:

簡單地說,區域性專案(見表1)只是說明用途而已。designator是要搭配實體描述符使用的,這裡不對實體描述符進行介紹,所以略過這些designator標籤。

標籤usage 實際上應該稱作usage id,它搭配全域專案的usage page 卷標才形成前文所定義的用途﹔但是報告描述符允許在區域專案的usage 卷標直接用32位的方式來指定用途,這種方式稱作擴充式用途指定法(extended usage)以示區別。例如:usage(generic desktop:mouse),usage minimum(keyboard:0),和usage maximum(keyboard:101)。很明顯的,擴充式用途指定法會取代『專案狀態表』中的usage page。還有,使用擴充式用途指定法時,資料的高16 個位為用途類頁usage page,低16 個位則為用途識別名usage id。往往乙個報告資料會對應到幾個操作,因而會有幾個用途,例如101 按鍵的鍵盤利用不同**代表不同的鍵,每乙個鍵是乙個操作,有自己的用途,要將所有usage id 列出不太現實,所以就需要usage minimum 和usage maximum 二個標籤。以鍵盤為例,主專案之上只要二個區域專案:usage minimum (0), usage maximum (101)。如此一來,則無鍵按下(usage id 為0)和101 鍵中任一鍵被按下(usage id 為1 至101)的用途都被賦於到乙個報告資料上,後面會有乙個範例進一步解說。

卷標string index 類似卷標usage,而卷標string minimum 和string maximum 則類似標籤usage minimum 和usage maximum。如果希望某個操作對應到乙個字串,則用string index 來描述該操控的報告資料,這個字串在字串描述符中,stringindex (data)專案中的data 是這個字串在字串描述符中的位置索引。如果需要用到幾個字串,則可以使用string minimum 來指向字串描述符中被用到字串的最先位置索引,和string maximum 來指向最後位置索引。

全域性專案卷標

全域性專案的卷標事實上只要usage page,logical minimum,logical maximum,

report size,report id,report count 就足夠了。表2 列了二個音量操作的例子(音量增減鍵和音量旋鈕)將用來輔助說明這些卷標,不過主專案括號內的資料會在後文中再做說明。

表2、音量操作舉例

音量減鍵

音量旋鈕

usage page(consumer)

usage page(consumer)

usage(volume)

usage(volume)

logical minimum(-1)

logical minimum(0)

轉 關於USB HID報告描述符

usb hid報告及報告描述符簡介 在usb中,usbhost是通過各種描述符來識別裝置的,有裝置描述符,配置描述符,介面描述符,端點描述符,字串描述符,報告描述符等等。usb報 告描述符 reportdescriptor 是hid裝置中的乙個描述符,它是比較複雜的乙個描述符。usbhid裝置是通過...

USB裝置驅動6 usb HID 報告描述符

在網上看了許多前輩的文章,就是無法理解報告描述符中的那些數字字元所表達的含義,幾經周折,總算大致了解了。0x05,0x07,usage page keyboard 0x19,0xe0,usage minimum keyboard leftcontrol 0x29,0xe7,usage maximum...

USB HID 描述符 五

usb 滑鼠詳解閱讀順序 1 列舉 2 裝置描述符 3 設定位址 4 配置描述符 5 介面描述符 6 hid 描述符 7 端點描述符 8 字串描述符 9 hid 報告描述符 10 hid 報告的返回 hid 類的裝置在配置描述符中還需要乙個 hid 描述符。它是乙個類描述符,跟在介面描述符後面,hi...