论文导读:触摸屏因方便灵活、节省空间、直观等特点,作为嵌入式系统的输入设备,已取代键盘,越来越受各种终端产品生产商的重视。嵌入式Linux操作系统因开放源代码、便于裁减,是当前嵌入式操作系统的主要选择。然而这种分类方式并不是非常严格,程序员可以构造一个大的模块,在其中实现不同类型的设备驱动程序。在本系统中触摸屏所完成的功能是感测触点坐标,将坐标值A/D转换后传给CPU。
关键词:嵌入式系统,Linux,Qt/Embedded,触摸屏,设备驱动
引言
传统的人机交流是通过键盘或鼠标来实现的。信息交换的速度比较慢,而且要求操作者具有一定的专业知识。这将使信息交流的目的大打折扣。触摸屏因方便灵活、节省空间、直观等特点,作为嵌入式系统的输入设备,已取代键盘,越来越受各种终端产品生产商的重视。嵌入式Linux操作系统因开放源代码、便于裁减,是当前嵌入式操作系统的主要选择。
1 Linux下的设备驱动简介[1]
Linux系统主要将设备分成三种类型:字符设备、块设备和网络接口。每个模块通常实现其中一种类型,相应的模块分为字符模块(char module)、块模块(block module)和网络模块(networkmodule)三种。然而这种分类方式并不是非常严格,程序员可以构造一个大的模块,在其中实现不同类型的设备驱动程序。为了实现良好的伸缩性和扩展性,通常还是为每个功能创建一个不同的模块。
字符设备(char device)是能够像字节流一样被访问的设备,由字符设备驱动程序来实现这种特性。它通常至少需要实现open、close、read和write系统调用。字符设备可以通文件系统节点来访问,比如字符终端(/dev/console)和串口(/dev/ttyS0)就是字符设备的例子。
块设备(block device)也是通过/dev目录下的文件系统节点被访问的。块设备能够容纳文件系统。Linux允许应用程序像字符设备那样读写块设备,可以一次传递任意多字节的数据。因此,块设备与字符设备的区别仅仅在于内核内部管理数据的方式。也就是内核和驱动程序的接口不同。另外,块设备的接口必须支持挂装(mount)文件系统。
网络接口(network interface)是一个能够和其他主机交换数据的设备。它由内核中的网络子系统驱动,负责发送和接收数据包,它无须了解每项事务是如何映射到实际传输的数据包的。可Linux中还存在其他类型的驱动程序模块,这些模块利用内核提供的公共服务来处理特定类型的设备。因此我们能够和通用串行总线(USB)模块、串口模块等通信。
Linux设备驱动都在内核中实现,实现方式有两种,一种将相关设备驱动程序直接编译到内核中;另一种是将具体的设备驱动程序独立编译,成为可安装的模块,需要时由应用程序通过系统调用动态地进行安装和卸载。
Qt/Embedded下触摸屏驱动的研究
2.1 Qt/Embedded简介[2]
Qt/Embedded是著名的Trollech公司发布的专门面向嵌入式系统的GUI和应用开发的开发库。免费论文参考网。它是一种全面的C++图形界面应用开发架构。它继承了Qt的全部标准API,提供了比Xlib和XWindows系统更加紧凑的窗口生成系统,对FrameBuffer直接进行操作。完全模块化的设计和高效的编译系统减少了内存的消耗,这些使Qt/Embedded成为嵌入式环境中,功能强大而全面的GUI开发工具。由于Qt/Embedded的强大功能,它被嵌入式系统开发者广泛应用于各种领域,从消费电子(移动电话、掌上电脑、机到工业控制(医疗成像设备、移动信息系统)。
2.2 Qt/Embedded下鼠标类设备驱动的研究
在Linux操作系统中,所有的设备都被当作文件来对待,这些文件称为设备文件。由于Qt/Embed -ded 中与用户输入事件相关的信号,是建立在对底层输入设备的接口调用之上的,所以一般通过对设备文件的I/O读写来实现。Qt库封装一些常用设备的访问操作,并形成了相应的设备驱动接口,如显示卡驱动、鼠标、键盘、串口和并口等。其中鼠标设备的抽象基类为QWS-Mouse Handler,从该类又重新派生出一些具体的鼠标类设备的实现类。在3.3.4版本系列的Qt/Embedded中,鼠标类设备的派生结构如图1所示[3]。
图1 鼠标类设备的派生结构图图2 软件流程图
(虚线框表示可省略类结构)
鼠标类设备的加载方式与KeyBoard设备加载方式是类似的,在系统构造QWSServer对象时,调用成员函数QWSServer::openMouse函数中调用QmouseDriverFactory::create()或QmouseDriver- Plugin::create()。该函数根据Linux系统的环境变量QWSMOUSE_ PROTO获得鼠标类设备的设备类型和设备节点。打开并返回相应设备的基类指针QWSMouseHandler给系统,系统通过操作该基类派生出的具体子类设备指针QWSCustomMouseHandler,获得对具体鼠标类设备的调用操作(如图2所示)
2.3 Qt/Embedded下触摸屏驱动的研究
在本系统中触摸屏所完成的功能是感测触点坐标,将坐标值A/D转换后传给CPU。驱动程序需要控制设备采集数据并把数据送往上层的应用程序,以后的处理由应用程序来完成 设备驱动程序要为设备提供通用的系统调用,如open、read、write、close等。图3是设备驱动程序和其他部分的关系结构。
图3 设备驱动程序及其相关结构
由于Qt库中没有特别针对触摸屏的设备接口,而且触摸屏和鼠标类设备在功能上基本是一致的,因此,我们可以把触摸屏模拟成鼠标设备来实现对触摸屏设备的操作。但由于触摸屏和鼠标底层接口并不一样,会造成对上层接口的不一致。举例来讲,从鼠标驱动接口中几乎不会得到绝对位置信息,一般只会读到相对移动量。另外,鼠标的移动加速度也需要考虑在内,而触摸屏接口则几乎是清一色的绝对位置信息和压力信息。针对此类差别,Qt/Embedded将同一类设备的接口部分也给予区别和抽象,具体实现在QmouseDriverlnterface类中。
在本系统中,Linux系统从COM1口读人触摸屏的坐标数据,但是由于与触摸屏的底层接口并不一致,需通过添加QWSCustomMouseHandler程序接口类来实现对触摸屏的控制。查看Qt/Embedded源代码qwsmouselinuxtp_qws.cpp和qwsmousevr41XX_qws.cpp,可知Qt提供了linuxtp和vr41XX触摸屏的驱动接口类。如果使用的恰好是这两种触摸屏接口,那么直接在执行Qt的configure配置时加入配置选项-qt-mouse-<driver)即可 。免费论文参考网。由于我们的触摸屏并非以上两种, 因此我们需自己添加驱动接口。
1/2 1 2 下一页 尾页 |