USB-HID鼠標、鍵盤通訊格式(轉) 與本人實際測試結果


內容為網絡轉載,如有版權問題請聯系刪除  

USB鼠標鍵盤協議介紹。 

鼠標發送給PC的數據每次4個字節:BYTE1 BYTE2 BYTE3 BYTE4。定義分別是:
BYTE1 --

       |--bit7:   1   表示 Y 坐標的變化量超出-256~255的范圍,0表示沒有溢出

       |--bit6:   1   表示 X 坐標的變化量超出-256~255的范圍,0表示沒有溢出 

       |--bit5:   Y   坐標變化的符號位,1表示負數,即鼠標向下移動 
       |--bit4:   X   坐標變化的符號位,1表示負數,即鼠標向左移動 
       |--bit3:   恆為1 
       |--bit2:   1表示中鍵按下 
       |--bit1:   1表示右鍵按下 

       |--bit0:   1表示左鍵按下 

BYTE2 -- X坐標變化量,與byte的bit4組成9位符號數,負數表示向左移,正數表右移。用補碼表示變化量 
BYTE3 -- Y坐標變化量,與byte的bit5組成9位符號數,負數表示向下移,正數表上移。用補碼表示變化量
BYTE4 -- 滾輪變化。
由於手上沒有USB鼠標,對BYTE1的4-7位沒有測試,對於BYTE2 BYTE3做個測試,BYTE1的4-7全為0的時候,BYTE2 BYTE3的正負表示鼠標移動方向

備注:本人實測結果如下(win10x64):

BYTE1的高4位完全無用,

BYTE2,X坐標變化量,負數表示向左移,正數表示向右移,

BYTE3,Y坐標變化量,負數表示向上移,正數表示向下移


  鍵盤發送給PC的數據每次8個字節:BYTE1 BYTE2 BYTE3 BYTE4 BYTE5 BYTE6 BYTE7 BYTE8。定義分別是:
BYTE1 --
       |--bit0:   Left Control    是否按下,按下為1 
       |--bit1:   Left Shift        是否按下,按下為1 
       |--bit2:   Left Alt           是否按下,按下為1 
       |--bit3:   Left GUI         是否按下,按下為1 
       |--bit4:   Right Control  是否按下,按下為1  
       |--bit5:   Right Shift      是否按下,按下為1 
       |--bit6:   Right Alt         是否按下,按下為1 
       |--bit7:   Right GUI        是否按下,按下為1 
BYTE2 -- 暫不清楚,有的地方說是保留位
BYTE3--BYTE8 -- 這六個為普通按鍵


鍵盤經過測試。
例如:鍵盤發送一幀數據   02 00 0x04 0x05 00 00 00 00
表示同時按下了Left Shift + ‘a’+‘b’三個鍵
對於鍵碼和PS2的鍵盤有所不同,具體請看附件。
USB HID to PS2 Scan Code 對照表.pdfourdev_651088NZ5EKW.pdf(文件大小:133K) (原文件名:USB HID to PS2 Scan Code Translation Table .pdf) 


2011.6.23補充說明
補充對於鍵盤BYTE2的說明:參照百合網(http://www.baiheee.com/OpenSource/Easy%20USB%2051%20Programer/Easy%20USB%2051%20Programer12.htm)鍵盤的報告描述符,如下

復制代碼
/*******************************************************************************************/
//這里只列出了第二個字節的說明
    //這樣的數據段個數為1    
    0x95, 0x01,                    //   REPORT_COUNT (1)    
    //每個段長度為8bits    
    0x75, 0x08,                    //   REPORT_SIZE (8)    
    //輸入用,常量,值,絕對值    
    0x81, 0x03,                    //   INPUT (Cnst,Var,Abs)    
        
    //上面這8個bit是常量,設備必須返回0  
/*******************************************************************************************/
復制代碼

這里只是指明了這是一個以字節為單位的輸入數據,並沒有指明它的取值范圍。

在HID1.11協議的Appendix B-->B.1 Protocol 1 (Keyboard) 的報告描述符中也有這樣的說明(HID1.11協議的59頁)

復制代碼
/*******************************************************************************************/
   Report Count (1),  
   Report Size (8), 
   Input (Constant),              ;Reserved byte 
   Report Count (5),  
   Report Size (1), 
/*******************************************************************************************/
復制代碼

在注釋中說明,這個字節是保留字節。
這里我也把HID1.11傳上來給大家研究。
ourdev_651409JXHOAD.pdf(文件大小:661K) (原文件名:HID1.11協議.pdf) 
ourdev_651410WJINWH.pdf(文件大小:745K) (原文件名:HID用途表1.12.pdf)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM