由前面鼠标设备驱动类的派生结构我们知道,添加驱动接口先要通过调用QmouseDriverFactory或QmouseDriverPlugin类根据相应的设备名生成相对应的QWSCustomMouseHandler对象,这些具体的设备驱动接口类都是由QWSMouseHandler类派生出来的,都继承了QWSMouseHandler类。然后再由系
统调用QWSCustomMouseHandler::readMouseData (),获取到触摸屏定位和状态信息,并都直接送到了鼠标设备驱动类的抽象层QWSMousetlandler类。Qt/Embedded 通过QWSMouseHandler类来实现对鼠标设备的操作。
添加设备驱动接口类主要有两种方式,一种是通过调用QmouseHriverFactory生成相应的QWSCustomMouseHandler,一种是由QmouseDriverPlugin添加生成相应的QWSCustomMouseHandler。我们选择相对简单的办法,在原有的接口qwsmouselinuxtp_qws.cpp上进行修改,以适合新的触摸屏设备驱动接口。
首先,我们对qwsmouselinuxtp_qws.cpp进行修改,先把TS_EVENT的结构改为我们相应的设备的数据结构,再把QWSLinuxTPMouseHandlerPrivate函数中打开的设备文件节点由/dev/ts改为自己的设备文件/dev/ttyS1。然后修改readMouseData()函数,按自己的数据结构读取设备文件,传递给QPoint类对鼠标进行定位或转换为鼠标按键状态。这个函数的操作可以参照windows下的鼠标驱动源代码,网上有大量的资源。其实这样修改以后,已经能正常使用触摸屏设备了,但是为了在该系统平台上可同时使用鼠标和触摸屏操作还必须完成两个步骤。免费论文参考网。一个是要正确的设置Qws_MOUSE_PROTO环境变量,阅读qwindowsystem_qws.cpp中QWSServer::openMouse()函数可知,该环境变量可同时设置多个设备 [:],多个设备之间以空格隔开,由此可设置QW S_MOUSE_PROTO=“Auto LinuxTP”,Qt/Embedded通过该环境变量生成相应的鼠标和触摸屏驱动接口,对设备进行操作。
然后再对Qt/Embedded的鼠标驱动接口类的源代码进行修改,由于触摸屏是采用了系统的串口,而Qt/Embedded自动搜索鼠标接口时发现串口正在工作中, 就会把他当作一个鼠标设备进行操作,这就发生了设备冲突。因此,我们要在qmousepe_qws.cpp文件中将串口鼠标的子驱动去掉,找到
函数QWSPcMouseHandlerPrivate::openDeviees()中的代码如下把它注释掉就行了。
else if(driver ==”Microsoft”){
QString dev= device. is Empty()?QString(“/dev/ttyS0”):
device;
fd=open(dev.1atinl(),O_RDWRIO_NDELAY);
if(fd> = 0 )
sub[nsub++]=newQWSPcMouseSubHandler_ms(fd);
}else if(driver ==”MouseSystems”) {
QString dev = device.isEmpty()? QString(”/dev/ttyS0”):
device;
fd=open(dev.1atinl(),O_RDWRIO_NDEI AY );
if(fd >=0 )
sub[nsub+ +]= newQWSPcMouseSubHandler_mousesystems(fd);
}
对于触摸屏的校准,阅读qwsmouselinuxtp_qws.h文件(代码如下),可知在QWSMouseLinuxTPHandler中已经实现了坐标的校准,一般直接读取坐标的位置和状态即可。
class QWSLinuxTPMouseHandler:public QWSCalibratedMouseHandler
最后,我们只需要在配置Qt/Embedded的安装configure加入选项-qt-mouse-
, 重新编译,该Qt/Embedded平台上的应用程序即能够按照定制的要求提供对触摸屏的支持。
结束语
本方案与QT下普通鼠标驱动使用一致的框架,该设计简洁,条理清楚。已经成功的运用于嵌入式数控系统触摸屏上,并且运行稳定,定位准确,反应灵敏。友好的GUI界面和便捷的人机接口,使应用设备更具亮点。同时,开放源代码的优势在此方案中得到充分的体现,通过大量地阅读源代码,可以充分的理解软件工作机制并按用户的要求进行定制,做出真正适合用户的产品。
参考文献:
[1]陈文智.嵌入式系统开发原理与实践.清华大学出版社,2005.
[2]孙天泽,袁文菊,张海峰.嵌入式设计及Linux驱动开发指南.电子工业出版社.2004.
[3]Blanchette J.c+ + GUIProgramming with Qt 3[z].Trolhech AS.2004.
2/2 首页 上一页 1 2 |