当前位置:首页 > 单片机 > 单片机
[导读]嵌入式 Linux 以其开源性、内核的健壮性和稳定性、可裁减性,以及有着专业的商业公司和世界顶尖的自由软件开发者的支持和维护等各方面优势,吸引了嵌入式系统开发商的目光,成为嵌入式操作系统的新宠。触摸屏由于其友

嵌入式 Linux 以其开源性、内核的健壮性和稳定性、可裁减性,以及有着专业的商业公司和世界顶尖的自由软件开发者的支持和维护等各方面优势,吸引了嵌入式系统开发商的目光,成为嵌入式操作系统的新宠。触摸屏由于其友善的人机交互性、操作简单灵活、输入速度快,大大简化了嵌入式系统的输入而被广泛运用。本文介绍了基于嵌入式 Linux 系统平台上 Qt/Embedded 的触摸屏驱动的设计。该方案已成功运用于工程机械安全仪和电能质量监测仪项目,实现了 GUI(图形用户操作接口)界面对触摸屏的支持,并能根据触摸屏的不同进行定制。

1、Qt/Embedded 简介

Qt/Embedded 是著名的 Trolltech 公司发布的专门面向嵌入式系统的GUI 和应用开发的开发库。它是一种全面的 C++图形界面应用开发架构,继承了Qt 的全部标准 API,提供了比 Xlib 和 XWindows 系统更加紧凑的窗口生成系统,对 FrameBuffer 直接进行操作(见图 1)。完全模块化的设计和高效的编译系统减少了内存的消耗,这些使 Qt/Embedded 成为嵌入式环境中,功能强大而全面的GUI开发工具。由于Qt/Embedded 的强大功能,被广泛用于各种领域,从消费电子(移动电话、掌上电脑、机顶盒)到工业控制(医疗成像 设备、 移动信息系统)。

2 、Linux 下的设备驱动基础

Linux 系统主要将设备分成 3 种类型:字符设备、块设备和网络接口。每个模块通常实现其中一种类型,相应的模块可分为字符模块、块模块和网络模块 3 种。然而这种分类方式并不是非常严格,程序员可以构造一个大的模块,在其中实现不同类型的设备驱动程序。为了实现良好的伸缩性和扩展性,通常还要为每个功能创建一个不同的模块。

字符设备是能够像字节流一样被访问的设备,由字符设备驱动程序来实现这种特性。它通常至少 需要实现 open、close、read 和 write 系统调用。字 符设备可以通过文件系统节点来访问,比如字符终端(/dev/console)和串口(/dev/ttyS0)就是字符 设备的例子。块设备也是通过/dev 目录下的文件系统节点被访问的。块设备能够容纳文件系统。Linux 允许应用程序像字符设备那样读写块设备,可以一次传递任意多字节的数据。因此,块设备与字符设备的区别仅仅在于内核内部管理数据的方式。也就是内核和驱动程序的接口不同。另外,块设备的接口必须支持挂装文件系统。

网络接口是一个能够和其他主机交换数据的设备。 它由内核中的网络子系统驱动,负责发送和接收数据包,它无须了解每项事务是如何映射到实际传输的数据包的。

Linux 中还存在其他类型的驱动程序模块,这些模块利用内核提供的公共服务来处理特定类型的设备。 因此我们能够和通用串行总线(USB)模块、串口模块等通信。

在本系统中,控制器将触摸屏采集的原始电压信号通过专用 A/D 转换为坐标数据,经过 RS-232 总线传送给嵌入式系统(见图 2)。Linux 系统利用内核提供的串口模块来处理触摸屏设备,将该设备以文件/dev/ttyS0 的形式存放在/dev 目录下,提供了 open、read、write、close 等系统调用。我们只需像操作普通 数据文件一样对串口设备进行操作,将触摸屏的坐标 数据送往上层的 Qt/Embedded 应用层。

3 、Qt 下触摸屏的驱动

Qt/Embedded 中与用户输入事件相关的信号,是建立在对底层输入设备的接口调用之上的,一般通过 对设备文件的 I/O 读写来实现。大部分这样的驱动程序已经被封装进 Qt 库当中,形成了相应的设备驱动接口,如显示卡驱动、鼠标、键盘、串口和并口等。其中鼠标设备的抽象基类为 QWSMouse Handler,从该类又重新派生出一些具体的鼠标类设备的实现类。在 3.3.4 版本系列的 Qt/Embedded 中,鼠标类设备的派生结构如图 3 所示。

图 3 鼠标类设备的派生结构图(灰色线框表示可省略类结构)

鼠标类设备的加载方式与 KeyBoard 设备加载方 式是类似的,在系统构造 QWSServer 对象时,调用成 员函数 QWSServer:: openMouse,程序在QWSServer:: openMouse 函数中再调用QmouseDriverFactory::create () 或QmouseDriverPlugin:: create ()。该函数根据 Linux 系统的环境变量QWS_MOUSE_PROTO获得鼠标类设备的设备类型和设备节点。打开并返回相应设备的基类指针 QWSMouseHandler 给系统,系统通过操作该基类派生出的具体子类设备指针QWSCustomMouseHandler。

触摸屏和鼠标类设备在功能上基本是一致的,因 此,在 Qt 库中一般把触摸屏模拟成鼠标设备来实现对触摸屏设备的操作。但由于触摸屏和鼠标底层接口并不一样,会造成对上层接口的不一致。例如,从鼠 标驱动接口中几乎不会得到绝对位置信息,一般只会读到相对移动量。另外,鼠标的移动加速度也需要考虑在内,而触摸屏接口则几乎是清一色的绝对位置信息和压力信息。针对此类差别,Qt/Embedded 将同一类设备的接口部分也给予区别和抽象,具体实现在 QmouseDriverInterface 类中。

在本系统中,Linux 系统从 COM1 口读入触摸屏的坐标数据,但由于与触摸屏的底层接口并不一致,需通过添加 QWSCustomMouseHandler 程序接口类来实现对触摸屏的控制。查看Qt/Embedded源代码qwsmouselinuxtp_qws.cpp 和 qwsmousevr41xx_qws.cpp,可知 Qt 提供了 linuxtp 和 vr41xx 触摸屏的驱动接口类。如果使用的就是这两种触摸屏接口,可直接在执行 Qt 的 configure 配置时加入配置选项-qt-mouse-<driver>。由于我们的触摸屏并非以上两种,因此需添加驱动接口。

由前面鼠标设备驱动类的派生结构可知,添加驱 动接口先要通过调用QmouseDriverFactory或QmouseDriverPlugin 类根据相应的设备名生成相对应的 QWSCustomMouseHandler 对象,这些具体的设备驱动 接口类都是由 QWSMouseHandler 类派生出来的,都 继承了 QWSMouseHandler 类。然后再由系统调用QWSCustomMouseHandler:: readMouseData (),获取到的触摸屏定位和状态信息都直接送到鼠标设备驱动类的抽象层 QWSMouseHandler 类,Qt/Embedded 通过 QWSMouseHandler 类来实现对鼠标设备的操作。

可以通过两种方式添加设备驱动接口类,一种是 通过调用 QmouseDriverFactory 生成相应的 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 () 函数可知,该环 境变量可同时设置多个设备<Driver> [: <Device>],多个设备之间以空格隔开,由此可设置 QWS_MOUSE_PROTO="Auto LinuxTP", Qt/Embedded 通过该环境变量生成相应的鼠标和触摸屏驱动接口,对设备进行操作。然后再对Qt/Embedded的鼠标驱动接口类的源代码进行修改。由于触摸屏是采用了系统的串口,而Qt/Embedded 自动搜索鼠标接口时发现串口正在工作中,就会把它当作一个鼠标设备进行操作,这就发生了设备冲突。因此,我们要在 qmousepc_qws.cpp 文件中将串口鼠标的子驱动去掉,找到函数 QWSPcMouseHandlerPrivate:: openDevices () 中的代码如下,把它注释掉就行了。

else if (driver=="Microsoft") {

QString dev=device.isEmpty()? QString("/dev/ttyS0") : device;

fd = open ( dev.latin1 (), O_RDWR | O_NDELAY );

if ( fd >= 0 )

sub[nsub++] = newQWSPcMouseSubHandler_ms(fd);

} else if (driver=="MouseSystems"){

QStringdev=device.isEmpty()?QString("/dev/ttyS0"). : device;

fd = open ( dev.latin1 (), O_RDWR | O_NDELAY );

if ( fd >= 0 ) sub[nsub++] = new QWSPcMouseSubHandler_mous esystems (fd);

}

关于触摸屏的校准,阅读 qwsmouselinuxtp_qws.h 文件(代码如下),可知在QWSMouseLinuxTPHandler 中已经实现了坐标的校准,一般直接读取坐标的位置 和状态即可。

class QWSLinuxTPMouseHandler:

public QWSCalibratedMouseHandler

{

};

最后只需要在配置 Qt/Embedded 的安装configure 加入选项-qt-mouse-<linuxtp>,重新编译,该 Qt/Embedded平台上的应用程序即能够按照定制的要求提供对触摸屏的支持。

4、 结束语

本方案与 Qt 下普通鼠标驱动使用一致的框架,设计简洁,条理清楚。已经成功的运用于电能质量监测仪平台,并且运行稳定,定位准确,反应灵敏。友好的 GUI 界面和便捷的人机接口,使电能质量检测仪更具亮点。同时,开放源代码的优势在此方案中得到充分的体现,通过大量地阅读源代码,可以充分的理解软件工作机制并按用户的要求进行定制,做出真正适合用户的产品。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

基于ABB机器人生产线 ,设计了一种西门子PLC自保护智能控制系统 。该系统采用HK-FKGD40无线手持报警器 , 受机器人挤压时人员通过该报警器便可触发机器人智能判断 、自动回退运动实现自我解救 , 同时系统发出声光...

关键字: 无线手持报警器 自保护;智能 PLC ABB机器人 触摸屏

在科技飞速发展的当下,智能设备已深度融入人们的生活与工作。其中,PDA(Personal Digital Assistant,个人数字助理)作为一款集信息输入、存储、管理和传递于一体,且具备办公、娱乐、移动通信等多种功能...

关键字: 智能设备 触摸屏 微控制器

苏州 2025年5月27日 /美通社/ -- 5月24日-26日,第26届全国医院建设大会暨国际医院建设、装备及管理展览会(CHCC 2025)在武汉举行。艺卓(EIZO)携手术室视觉显示解决方案参展,以科技...

关键字: HC 医学影像 IO 触摸屏

随着手工酿造的普及和复杂程度的不断提高,许多酿酒师——尤其是小规模或独立的酿酒师——仍然依靠手工方法来记录和跟踪关键数据,如温度、pH值、体积和比重。这些读数通常使用手动仪器,记录在纸上或分散在电子表格和文档中,没有集中...

关键字: 触摸屏 物联网 DS18B20 传感器

随着嵌入式系统的广泛应用,触摸屏作为人机交互的重要接口,其驱动开发变得愈发重要。本文将详细介绍在嵌入式Linux环境下,触摸屏驱动的开发流程,从设备树的配置到校准算法的实现,为读者提供一个全面的开发指南。

关键字: 嵌入式Linux 触摸屏 校准算法 设备树

将您的树莓派Pico变成带有触摸屏界面的USB-HID设备!在这个项目中,我们将在Arduino IDE中设置编程环境,为3.5”Pico Touch LCD屏蔽配置库,测试基本功能,创建简单的按钮(用于复制和粘贴),显...

关键字: 树莓派 触摸屏 LCD Windows

ADS7846是美国Burr-Brown公司推出的新一代4线制触摸屏控制器,当与触摸屏连用,只要笔或手指点触摸在屏上时,即可迅速得到该点的位置信号以达到在触摸屏表面寻址的目的。

关键字: ADS7846 触摸屏

‌激光治疗仪触摸屏接口设计‌主要包括触摸屏的工作原理、控制器工作原理以及在激光治疗仪中的应用。

关键字: 触摸屏 激光治疗仪

中国深圳 – TITAN Haptics泰坦触觉宣布推出DRAKE LFi触觉马达,旨在满足中国电子市场不断增长的需求。DRAKE LFi专为需要触觉反馈的设备设计,例如触摸屏和触觉按钮。这款新型触觉马达能够提供精准的局...

关键字: 消费电子 触摸屏 可穿戴设备

虽然无数关于未来交通的文章都以四轮电动车作为讨论重点,但在印度、马来西亚、泰国和印度尼西亚等诸多国家,出行更依赖于经济的两轮电动车,包括踏板式摩托车、重型摩托车、电动摩托车、电动轻便摩托车和电动自行车。这些两轮电动车紧跟...

关键字: 电动车 触摸屏 触摸控制器
关闭