HID報告描述符(Report Descriptor)腳本語言研讀筆記2

HID報告描述符(Report Descriptor)腳本語言研讀筆記2
來源: ChinaUnix博客  日期: 2007.09.26 20:24 (共有條評論) 我要評論
 

HID報告描述符(Report Descriptor)腳本語言研讀筆記2
文章來源:http://gliethttp.cublog.cn[轉載請聲明出處]
對HID Script腳本語言的理解:
Global item--全局項
Main item --主項
local item --局部項
  對於Main項,parser解釋器,將順序解釋集合中的數據,並且,解釋器解釋完的數據,
將按Main項出現的先後順序,主要是Input和Output項,順序拼接生成對應的數據bit位,
解釋器將以關鍵字Collection開始解釋並拼接bit位信息,關鍵字End Collection將
結束paser解釋器的工作,我把關鍵字Collection和關鍵字End Collection叫做"集合",
這樣給他取個名字,以後說明起來也方便些,"集合"裏邊描述的就是最後生成的
由HID硬件設備1次性上發給pc的HID驅動程序的數據流了.在HID協議.pdf>中,(gliethttp)
關鍵字Collection和關鍵字End Collection都是Main item主項,對應的控制字分別爲:
1010 00 nn和1100 00 nn,如果Collection後邊有1個參數數據,那麼即爲:
1010 00 01=0xA1,如Collection(Application)
翻譯成控制碼後爲:0xA1,0x01;0xA1的1表示有1個參數數據,0x01表示Application在HID
協議中規定的索引值爲0x01,pc的HID驅動程序在parser解釋器中會通過0x01得知,
是對Application進行數據流位生成,就是說HID報告描述符(Report Descriptor)
所描述的數據流是爲了Application使用的,Application在HID協議.pdf>中包含
兩種設備:mouse和keyboard,至於Collection(Application)裏邊描述的是mouse
還是keyboard,將具體的由Usage進一步限定,如:Usage(KeyBoard),也就是說明確
告訴pc的HID驅動程序的paser解釋器,接下來的這段信息最後生成出來的bits位數據信息,
將交由pc的HID驅動程序中KeyBoard對應的API函數處理,當然這只是HID硬件設備開發者
給pc的HID驅動程序的paser解釋器提供的一個建議值,比如我們做DDK下的HID驅動二次開發,
那麼我們可以很隨意,但是HID硬件設備開發者,建議使用的HID驅動程序API接口,最好遵守,
因爲HID硬件設備開發者比DDK開發人員更清楚送上來的bit數據流的真正物理意義.
  Input和Output是用來真正生成bits位流數據域的關鍵字,他們描述的東西是最後通過
usb總線實實在在發送到pc或者從pc接收的數據位,當然這些bits數據流數據域所代表的意義
以及某段bits位們所代表的意思以及這些bits將交由pc上HID驅動程序的哪一個API接口
來做進一步解析(是mouse還是keyboard),需要其他描述符來描述,比如前邊的Usage就是其中的1個描述符,
  如果一個HID設備同時提供2種不同的功能,那麼就會分別生成2個bits位流數據域,
每個bits位流數據,將交由不同的驅動解析,比如,一個keyboard可能還集成了一個附屬的鼠標功能,
那麼鍵盤數據信息將由HID script腳本描述的keyboard對應bits數據位流傳送,mouse數據將由
HID script腳本描述的mouse對應bits數據位流傳送,但同一個Input管道怎麼能傳送兩個獨立的
數據流呢,答案很簡單:不能,所以又引入了一個Report ID的概念,ID用來標識多條獨立的bits數據流,
pc的HID驅動程序根據ID,將這些獨立的bits數據流們路由到相應的API處理函數上去,
進而不同的bits數據流數據最終都能夠被自己對應的API驅動函數正確接收並解析處理.
  對於2字節、4字節等多字節數據的傳輸,是按小端模式little-endian進行的.這
些多字節數據的最小值由Logical Minimum定義,最大值由Logical Maximum定義,如果兩個值均爲非負
值,那麼bits位流數據就是無符號數,如果沒有明確指定,那麼作爲有符號數處理,另外HID1.1協議
不允許傳輸浮點數據.
  硬件開發者應該時刻清除自己寫的HID script腳本所描述的數據流將來應該由PC上的HID驅動程序
怎麼使用,另外對於硬件開發者來說,對於不允許PC驅動修改的bit位數據,HID1.1協議制定者強烈建議
採用NULL數值,最好不要隨便填其他值.
----------------------------------------------
Main item --主項當前一共5個:
1)Input
2)Output
3)Feature
4)Collection
5)End Collection
----------------------------------------------
Global item--全局項當前一共13個:
1)Usage Page
2)Logical Minimum ---var變量或array數組的邏輯最小值
3)Logical Maximum
4)Physical Minimum
5)Physical Maximum
6)Unit Exponent ---單位的指數值,是10的指數
7)Unit ---單位索引號:可以是時間單位、電流單位、電壓單位和距離單位等等.
8)Report Size
9)Report ID ---數據流的ID值設置
10)Report Count
11)Push
12)Pop
13)Reseved ---保留
----------------------------------------------
local item --局部項當前一共11個:
1)Usage ---定義Uage Page下面某個功能item的起始索引值,比如Keyboard功能,LEDs功能等,
                       這也告訴pc的HID解釋器,Input或Output變量或數組的相應生成數據位用來描述
                       Usage引用到的那個功能,如:用來描述Keyboard功能或LEDs功能等.
2)Usage Minimum ---定義與array或bitmap關聯的usage定義的某個功能下的起始值
                       Usage作爲Uage Page的一個子功能索引號,同時Usage自己也有很多子功能,或者
                       說有很多個子值,這裏就是定義這些子值的範圍值,之後和用Input或Output生成
                       bits位數據流,進行相應關聯.(可以用多維數組來說明,可能會更明確一點)
                       如:Gliethttp[5][6][80],Gliethttp爲最上層,5就是Usage Page(5),6就是在
                       前一個基礎上Usage(6),當然在HID Descriptor Tool裏邊6有它的字符串名,即:
                       Usage(Keyboard),然後80就是Keyboard裏邊的一個索引取值,查找之後是:
            KeyBoard LeftArrow,所以Usage_Minimum(80)就等於Usage_Minimum(KeyBoard LeftArrow)
                       Usage的順序先後和Report Count定義的bits位組的先後順序依次一一對應,Usage Minimum和
                          Usage Maximum之間的Usage的索引值也將依次與Report Count定義的bits位組的先後順序
                          依次一一對應上。
3)Usage Maximum ---定義與array或bitmap關聯的usage的結束值
4)Designator Index
5)Designator Minimum
6)Designator Maximum
7)String Index
8)String Minimum
9)String Maximum
10)Delimiter
11)Reserved
local的作用範圍不會延續到下一個Main item,下一個Main item開始的local值會
自動恢復到local的默認值;如果local item定義開始到下一個Main item之間的
Report Count=0,那麼local item的屬性值將作用在下一個Main item上(通常是Collection)
  以上部分內容來自HID協議.pdf>,部分內容是自己的揣測式理解,可能有不正確之處,要是能夠拿到
HID Descriptor Tool工具的源碼就能夠清除pc的HID驅動程序下的parser解釋器到底是
怎麼處理以上關鍵字的了,linux裏邊可能有,如果大家打算再深入一些的話,我想你可以到linux
的源程序裏邊去看看,那裏有parser解釋器的全部源程序,不過對於我來說,以上的這些知識基本上
就夠用了,再往往深入走,對我已經沒有什麼用了,所以就到這裏;這2篇研讀筆記是我在english文檔中辛苦的總結,
希望能夠對剛剛開始做HID這方面工作的同行們有一點點積極的作用(gliethttp).
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章