找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3049|回复: 0
收起左侧

PS2鼠标解析

[复制链接]
ID:105323 发表于 2016-2-12 20:53 | 显示全部楼层 |阅读模式
  标准的PS/2鼠标支持下面的输入X左右位移,Y上下位移,左键、中键和右键。鼠标以一个固定的频率读取这些输入并更新不同的计数器然后标记出反映的移动和按键状态,而Microsoft的Intellimouse它既支持标准输入也支持滚轮和两个附加的按键。
  标准的PS/2鼠标发送位移和按键信息给主机采用如下的3字节数据包格式:
  鼠标有4个模式:Reset、Stream、Remote、Wrap,各个模式具体的介绍详见《PS2技术参考》一文,通常我们使用Stream模式,即一旦鼠标检测到位移或发现一个或多个鼠标键的状态改变了,就发送位移数据包数据报告的最大速率被认为是采样速率。参数的范围从10采样点/秒到200采样点/秒。这个参数的缺省值是100采样点/秒,主机可以用设置采样速率0xF3命令来改变它Stream模式是操作的缺省模式。
  微软的Intellimouse工作起来象标准的PS/2鼠标(也就是使用3字节位移数据包,和标准PS/2鼠标一样回应所有命令,报告设备ID0x00)。要进入滚轮模式,主机应该发送如下的命令序列:  
Set sample rate 200
Set sample rate 100
Set sample rate 80
  主机然后应该发布“获得设备ID”命令(0xF2)并等待回应。如果安装的是是标准PS/2鼠标(非Intellimouse),它回应设备ID0x00。在这种情况下,主机回辨认出实际这个设备没有滚轮并继续把它当作是标准PS/2鼠标。但是,如果安装的是微软的Intellimouse,它返回的ID是0x03。这就告诉主机挂接的定点设备有滚轮并且主机认为鼠标使用4字节的位移数据包:
  Z位移是2的补码表示滚轮的自上次数据报告以来的位移,有效值的范围在-8到+7这意味着数值实际只有低四位;高四位仅用作符号扩展位。

命令集具体介绍详见《PS2技术参考》一文:
#definePS2_RESET          0XFF //复位命令 回应0XFA
#defineRESEND             0XFE //再次发送
#define SET_DEFAULT        0XF6 //使用默认设置 回应0XFA
#define DIS_DATA_REPORT     0XF5 //禁用数据报告 回应0XFA
#defineEN_DATA_REPORT      0XF4 //使能数据报告 回应0XFA
#defineSET_SAMPLE_RATE     0XF3 //设置采样速率 回应0XFA
#defineGET_DEVICE_ID       0XF2 //得到设备ID   回应0XFA+ID
#defineSET_REMOTE_MODE     0XF0 //设置到REMOTE模式 回应OXFA
#defineSET_WRAP_MODE       0XEE //设置到WRAP模式 回应0XFA
#defineRST_WRAP_MODE       0XEC //回到WRAP之前的模式 回应0XFA
#defineREAD_DATA           0XEB //读取数据 回应0XFA+位移数据包
#defineSET_STREAM_MODE     0XEA //设置到STREAM模式 回应0XFA
#defineSTATUS_REQUEST      0XE9 //请求得到状态 回应0XFA+3个字节
#defineSET_RESOLUTION      0XE8 //设置分辨率 回应OXFA+读取1个字节+再回应0XFA
#defineSET_SCALING21       0XE7 //设置缩放比率为2:1 回应0XFA
#defineSET_SCALING11       0XE6 //设置缩放比率为1:1 回应0XFA

   

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表