1 Star 0 Fork 0

lwsh.95/system

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
mouse.c 2.51 KB
一键复制 编辑 原始数据 按行查看 历史
liwensheng 提交于 2021-03-31 10:11 . 13.3 benchamrk
/* ""表示该头文件与源文件位于同一个文件夹里,< >则表示该头文件位于编译器的文件夹里。*/
#include "bootpack.h"
struct FIFO32 *mousefifo;
int mousedata0;
/* PS/2鼠标中断
IRQ-12是从PIC的第4号(从PIC相当于IRQ-08~IRQ-15),首先要通知IRQ-12受理已完成,然后再通知主PIC。
这是因为主/从PIC的协调不能够自动完成,如果程序不教给主PIC该怎么做,它就会忽视从PIC的下一个中断请求。
*/
void inthandler2c(int *esp)
{
int data;
io_out8(PIC1_OCW2, 0x64);// 通知PIC1 IRQ-12受理完成
io_out8(PIC0_OCW2, 0x62);// 通知PIC0 IRQ-2受理完成
data = io_in8(PORT_KEYDAT);
fifo8_put(&mousefifo, data+mousedata0);
return;
}
#define KEYCMD_SENDTO_MOUSE 0xd4
#define MOUSECMD_ENABLE 0xf4
void enable_mouse(struct FIFO32 *fifo,int data0, struct MOUSE_DEC *mdec){
mousefifo=fifo;
mousedata0=data0;
// 激活鼠标
wait_KBC_sendready();
io_out8(PORT_KEYCMD,KEYCMD_SENDTO_MOUSE);
wait_KBC_sendready();
io_out8(PORT_KEYDAT,MOUSECMD_ENABLE);
// 顺利的话,键盘控制器会返回ACK 0xfa
mdec->phase=0; // 等待0xfa的阶段
return;
}
int mouse_decode(struct MOUSE_DEC *mdec,unsigned char dat){
if (mdec->phase == 0) {
// 等待0xfa阶段
if (dat == 0xfa) {
mdec->phase = 1;
}
return 0;
}
if (mdec->phase == 1) {
/* 鼠标第一字节,检验是否正确
判断第一字节对移动有反应的部分是否在0~3的范围内;同时还要判断第一字节对点击有反应的部分是否在8~F的范围内。
如果这个字节的数据不在以上范围内,它就会被舍去。
*/
if ((dat & 0xc8) == 0x08) {
mdec->buf[0] = dat;
mdec->phase = 2;
}
return 0;
}
if (mdec->phase == 2) {
/* 鼠标第二字节 */
mdec->buf[1] = dat;
mdec->phase = 3;
return 0;
}
if (mdec->phase == 3) {
mdec->buf[2] = dat;
mdec->phase = 1;
// 鼠标键的状态,放在buf[0]的低3位。0x07相当于00000111,通过&取出低3位的值。
mdec->btn = mdec->buf[0] & 0x07;
mdec->x = mdec->buf[1];
mdec->y = mdec->buf[2];
// 将x和y的第8位及第8位以后全部都设成1,或全部都保留为0。这样就能正确地解读x和y。
if ((mdec->buf[0] & 0x10) != 0) {
mdec->x |= 0xffffff00;
}
if ((mdec->buf[0] & 0x20) != 0) {
mdec->y |= 0xffffff00;
}
mdec->y=-mdec->y; // 鼠标y方向与画面符号相反
return 1;
}
// -1 一般不会执行
return -1;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/lwsh95/system.git
[email protected]:lwsh95/system.git
lwsh95
system
system
master

搜索帮助