標(biāo)準(zhǔn)的PS/2鼠標(biāo)支持下面的輸入X左右位移,Y上下位移,左鍵、中鍵和右鍵。鼠標(biāo)以一個(gè)固定的頻率讀取這些輸入并更新不同的計(jì)數(shù)器然后標(biāo)記出反映的移動(dòng)和按鍵狀態(tài),而Microsoft的Intellimouse它既支持標(biāo)準(zhǔn)輸入也支持滾輪和兩個(gè)附加的按鍵。
標(biāo)準(zhǔn)的PS/2鼠標(biāo)發(fā)送位移和按鍵信息給主機(jī)采用如下的3字節(jié)數(shù)據(jù)包格式:
鼠標(biāo)有4個(gè)模式:Reset、Stream、Remote、Wrap,各個(gè)模式具體的介紹詳見《PS2技術(shù)參考》一文,通常我們使用Stream模式,即一旦鼠標(biāo)檢測到位移或發(fā)現(xiàn)一個(gè)或多個(gè)鼠標(biāo)鍵的狀態(tài)改變了,就發(fā)送位移數(shù)據(jù)包數(shù)據(jù)報(bào)告的最大速率被認(rèn)為是采樣速率。參數(shù)的范圍從10采樣點(diǎn)/秒到200采樣點(diǎn)/秒。這個(gè)參數(shù)的缺省值是100采樣點(diǎn)/秒,主機(jī)可以用設(shè)置采樣速率0xF3命令來改變它Stream模式是操作的缺省模式。 微軟的Intellimouse工作起來象標(biāo)準(zhǔn)的PS/2鼠標(biāo)(也就是使用3字節(jié)位移數(shù)據(jù)包,和標(biāo)準(zhǔn)PS/2鼠標(biāo)一樣回應(yīng)所有命令,報(bào)告設(shè)備ID0x00)。要進(jìn)入滾輪模式,主機(jī)應(yīng)該發(fā)送如下的命令序列:
Set sample rate 200
Set sample rate 100
Set sample rate 80 主機(jī)然后應(yīng)該發(fā)布“獲得設(shè)備ID”命令(0xF2)并等待回應(yīng)。如果安裝的是是標(biāo)準(zhǔn)PS/2鼠標(biāo)(非Intellimouse),它回應(yīng)設(shè)備ID0x00。在這種情況下,主機(jī)回辨認(rèn)出實(shí)際這個(gè)設(shè)備沒有滾輪并繼續(xù)把它當(dāng)作是標(biāo)準(zhǔn)PS/2鼠標(biāo)。但是,如果安裝的是微軟的Intellimouse,它返回的ID是0x03。這就告訴主機(jī)掛接的定點(diǎn)設(shè)備有滾輪并且主機(jī)認(rèn)為鼠標(biāo)使用4字節(jié)的位移數(shù)據(jù)包: Z位移是2的補(bǔ)碼表示滾輪的自上次數(shù)據(jù)報(bào)告以來的位移,有效值的范圍在-8到+7這意味著數(shù)值實(shí)際只有低四位;高四位僅用作符號(hào)擴(kuò)展位。
命令集具體介紹詳見《PS2技術(shù)參考》一文:
#definePS2_RESET 0XFF //復(fù)位命令 回應(yīng)0XFA
#defineRESEND 0XFE //再次發(fā)送
#define SET_DEFAULT 0XF6 //使用默認(rèn)設(shè)置 回應(yīng)0XFA
#define DIS_DATA_REPORT 0XF5 //禁用數(shù)據(jù)報(bào)告 回應(yīng)0XFA
#defineEN_DATA_REPORT 0XF4 //使能數(shù)據(jù)報(bào)告 回應(yīng)0XFA
#defineSET_SAMPLE_RATE 0XF3 //設(shè)置采樣速率 回應(yīng)0XFA
#defineGET_DEVICE_ID 0XF2 //得到設(shè)備ID 回應(yīng)0XFA+ID
#defineSET_REMOTE_MODE 0XF0 //設(shè)置到REMOTE模式 回應(yīng)OXFA
#defineSET_WRAP_MODE 0XEE //設(shè)置到WRAP模式 回應(yīng)0XFA
#defineRST_WRAP_MODE 0XEC //回到WRAP之前的模式 回應(yīng)0XFA
#defineREAD_DATA 0XEB //讀取數(shù)據(jù) 回應(yīng)0XFA+位移數(shù)據(jù)包
#defineSET_STREAM_MODE 0XEA //設(shè)置到STREAM模式 回應(yīng)0XFA
#defineSTATUS_REQUEST 0XE9 //請(qǐng)求得到狀態(tài) 回應(yīng)0XFA+3個(gè)字節(jié)
#defineSET_RESOLUTION 0XE8 //設(shè)置分辨率 回應(yīng)OXFA+讀取1個(gè)字節(jié)+再回應(yīng)0XFA
#defineSET_SCALING21 0XE7 //設(shè)置縮放比率為2:1 回應(yīng)0XFA
#defineSET_SCALING11 0XE6 //設(shè)置縮放比率為1:1 回應(yīng)0XFA
|