基于S3C2440的WindML图形驱动设计
WindML通过事件机制完成对键盘输入的响应。它采用客户/服务器模式,其事件驱动的原理如图4所示。
WindML输入驱动是一个分层结构,包括一个底层的驱动,负责处理设备控制器和一个高层的驱动,还负责翻译从设备中接收到的原始数据。
底层输入驱动是作为I/O驱动来开发的,一般构建进入系统内核,底层驱动在初始化时就会被连接到操作系统的I/O系统中。底层驱动负责完成以下功能:
初始化设备控制器和输入设备;
处理由设备控制器产生的中断;
从输入设备中接收原始数据,把它们按序地排列在I/O系统的高端驱动队列中;
接收高层驱动的指令并做出相应的反应,如控制键盘上LED的亮灭。
此外,底层输入驱动必须支持输入服务任务用于检测输入数据的Select()机制。
高层输入驱动主要负责接收来自低层输入驱动的原始数据,处理这些数据,封装数据成为一个输入事件消息以及把这些消息放到消息队列中。在实现时需要完成以下例程:
(1)驱动打开例程。分配并初始化驱动控制结构,打开底层输入驱动,设置底层驱动到合适模式,以及当成功打开驱动后返回一个指向驱动结构的指针。
函数原型如下:

驱动打开例程有两个参数,第一个参数是用于接收原始输入数据,被驱动打开的底层输入驱动的名字;第二个参数是一个指向输入驱动结构(UGL_INPUT_DEV)的指针。
(2)驱动控制例程。
函数原型如下:

该函数有3个参数:第一个参数是由驱动打开例程创建和初始化的驱动控制结构;第二个参数是请求的类型;第三个参数依赖于第二个参数的请求类型。
(3)开发驱动关闭例程。该函数负责完成关闭底层输入驱动,释放由打开例程分配的系统资源以及设置底层设备回到它操作之前的原始状态。
最后需实现I2C总线接口驱动,将底端输入驱动及高端输入驱动连接起来,完成键盘驱动程序的编写。
图5所示是WindML绘图的一个例子。图中创建了2个窗口,左边的窗口通过键盘可以控制小球的运动,右边窗口可以在其中输入文字。本文引用地址:https://www.eepw.com.cn/article/151420.htm
4 结语
本文对嵌入式实时操作系统VxWorks的媒体库windML及其图形界面开发的方法做了详细的介绍,上面提到的图形界面开发的方法已经被作者成功地应用于实际工程开发,并取得了良好的效果。
评论