微软智能PS2鼠标识别

标准的PS/2鼠标支持下面的输入X左右位移,Y上下位移,左键、中键和右键。鼠标以一个固定的频率读取这些输入并更新不同的计数器然后标记出反映的移动和按键状态,而Microsoft的Intellimouse它既支持标准输入也支持滚轮和两个附加的按键。

   标准的PS/2鼠标发送位移和按键信息给主机采用如下的3字节数据包格式:

PS2鼠标解析

   鼠标有4个模式:Reset、Stream、Remote、Wrap,各个模式具体的介绍详见《PS2技术参考》一文,通常我们使用Stream模式,即一旦鼠标检测到位移或发现一个或多个鼠标键的状态改变了,就发送位移数据包数据报告的最大速率被认为是采样速率。参数的范围从10采样点/秒到200采样点/秒。这个参数的缺省值是100采样点/秒,主机可以用设置采样速率0xF3命令来改变它Stream模式是操作的缺省模式。

   微软的Intellimouse工作起来象标准的PS/2鼠标(也就是使用3字节位移数据包,和标准PS/2鼠标一样回应所有命令,报告设备ID0x00)。要进入滚轮模式,主机应该发送如下的命令序列: 0xf3 0xc8 0xf3 0x64 0xf3 0x50
Set sample rate 200    Set sample rate 100     Set sample rate 80

   主机然后应该发布“获得设备ID”命令(0xF2)并等待回应,再将ps2鼠标使能(0xf4)。如果安装的是是标准PS/2鼠标(非Intellimouse),它回应设备ID0x00。在这种情况下,主机回辨认出实际这个设备没有滚轮并继续把它当作是标准PS/2鼠标。但是,如果安装的是微软的Intellimouse,它返回的ID是0x03。这就告诉主机挂接的定点设备有滚轮并且主机认为鼠标使用4字节的位移数据包:

 

 

   Z位移是2的补码表示滚轮的自上次数据报告以来的位移,有效值的范围在-8到+7这意味着数值实际只有低四位;高四位仅用作符号扩展位。

 
命令集具体介绍详见《PS2技术参考》一文:

#define PS2_RESET            0XFF //复位命令 回应0XFA
#define RESEND               0XFE //再次发送
#define SET_DEFAULT          0XF6 //使用默认设置 回应0XFA
#define DIS_DATA_REPORT      0XF5 //禁用数据报告 回应0XFA
#define EN_DATA_REPORT       0XF4 //使能数据报告 回应0XFA
#define SET_SAMPLE_RATE      0XF3 //设置采样速率 回应0XFA
#define GET_DEVICE_ID        0XF2 //得到设备ID   回应0XFA+ID
#define SET_REMOTE_MODE      0XF0 //设置到REMOTE模式 回应OXFA
#define SET_WRAP_MODE        0XEE //设置到WRAP模式 回应0XFA
#define RST_WRAP_MODE        0XEC //回到WRAP之前的模式 回应0XFA
#define READ_DATA            0XEB //读取数据 回应0XFA+位移数据包
#define SET_STREAM_MODE      0XEA //设置到STREAM模式 回应0XFA
#define STATUS_REQUEST       0XE9 //请求得到状态 回应0XFA+3个字节
#define SET_RESOLUTION       0XE8 //设置分辨率 回应OXFA+读取1个字节+再回应0XFA
#define SET_SCALING21        0XE7 //设置缩放比率为2:1 回应0XFA
#define SET_SCALING11        0XE6 //设置缩放比率为1:1 回应0XFA

你可能感兴趣的:(工作,Stream,Microsoft,report,扩展,微软)