|
|
@ -3,16 +3,15 @@
|
|
|
|
核心:将鼠标输入放入一个缓冲队列,再由事件(消息)驱动子系统从队列中取出鼠标事件并处理:
|
|
|
|
核心:将鼠标输入放入一个缓冲队列,再由事件(消息)驱动子系统从队列中取出鼠标事件并处理:
|
|
|
|
如果是鼠标移动,则在新的位置上重新绘制光标;
|
|
|
|
如果是鼠标移动,则在新的位置上重新绘制光标;
|
|
|
|
如果是鼠标点击,则根据当前进程注册的鼠标点击函数来响应点击事件。
|
|
|
|
如果是鼠标点击,则根据当前进程注册的鼠标点击函数来响应点击事件。
|
|
|
|
1.驱动鼠标
|
|
|
|
1.完整编写一个外设驱动
|
|
|
|
2.让显示器在图形模式下工作
|
|
|
|
2.编写程序完成对图形模式显示器的驱动和管理
|
|
|
|
3.设计并实现一个事件(消息)驱动系统
|
|
|
|
3.设计并实现一个事件(消息)驱动系统
|
|
|
|
4.实现一个可视化应用程序(bird)
|
|
|
|
4.实现一个可视化应用程序(bird)
|
|
|
|
|
|
|
|
|
|
|
|
### 编写鼠标中断处理函数
|
|
|
|
### 鼠标的驱动
|
|
|
|
1.模仿键盘中断初始化设置语句(鼠标也是控制台设备),也将鼠标中断设置语句放在函数con_init(); (console.c)
|
|
|
|
1.模仿键盘中断初始化设置语句(鼠标也是控制台设备),也将鼠标中断设置语句放在函数con_init(); (console.c)
|
|
|
|
2.编写mouse.s(实际上应该是mouse.S),在其中实现mouse_interrupt
|
|
|
|
2.设置键盘控制器i8042和中断控制器8259A
|
|
|
|
【由于给操作系统源码增加了一个新文件,所以还要修改Makefile文件】--模仿键盘修改
|
|
|
|
3.鼠标输入数据的编码.因为是调用readmouse进行细致处理,所以还要编写readmouse(tty_io.c)--对信号处理--需要下面知识
|
|
|
|
3.因为是调用readmouse进行细致处理,所以还要编写readmouse(tty_io.c)--对信号处理--需要下面知识
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
在获取鼠标操作码时使用了端口地址0x60,这个端口对应的数据寄存器在键盘控制器上,因此需了解键盘控制器原理。
|
|
|
|
在获取鼠标操作码时使用了端口地址0x60,这个端口对应的数据寄存器在键盘控制器上,因此需了解键盘控制器原理。
|
|
|
|
详细看 李治军pdf 12.2.2
|
|
|
|
详细看 李治军pdf 12.2.2
|
|
|
@ -33,7 +32,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
4.设置屏幕分辨率
|
|
|
|
4.设置屏幕分辨率
|
|
|
|
|
|
|
|
|
|
|
|
### 开始绘制屏幕
|
|
|
|
5.开始绘制屏幕
|
|
|
|
参考此处的图形模式下绘制鼠标的核心代码,为后面图的绘制作参考
|
|
|
|
参考此处的图形模式下绘制鼠标的核心代码,为后面图的绘制作参考
|
|
|
|
|
|
|
|
|
|
|
|
## 消息驱动框架
|
|
|
|
## 消息驱动框架
|
|
|
|