RSS

Qt/Embedded在嵌入式Linux系统中的应用

来源:网络 作者:匿名 时间:2007-01-05 Tag: 点击:

1.2 Qt/Embedded的事件驱动基础

Qt/Embedded中与用户输入事件相关的信号,是建立在对底层输入设备的接口调用之上的。Qt/Embedded中的输入设备,分为鼠标类与键盘类。以3.x版本系列为例,其中鼠标设备的抽象基类为QWSMouse Handler,从该类又重新派生出一些具体的鼠标类设备的实现类。该版本系列的Qt/Embedded中,鼠标类设备的派生结构如图3所示。

与图形发生引擎加载方式类似的,在系统加载构造QWSServer时,调用QWSServer::openMouse与QWSServer::openKeyboard函数。这两个函数分别调用QmouseDriverFactory::create()与QkbdDriverFactory::create()函数。这时会根据Linux系统的环境变量QWS_MOUSE_PROTO与QWS_KEYBOARD获得鼠标类设备和键盘类设备的设备类型和设备节点。打开相应设备并返回相应设备的基类句柄指针给系统,系统通过将该基类指令强制转换为对应的具体子类设备指针,获得对具体鼠标类设备和键盘类设备的调用操作。

值得注意的是,虽然几乎鼠标类设备的功能上基本一致,但由于触摸屏和鼠标底层接口并不一样,会造成对上层接口的不一致。举例来讲,从鼠标驱动接口中几乎不会得到绝对位置信息,一般只会读到相对移动量。另外,鼠标的移动速度也需要考虑在内,而触摸屏接口则几乎是清一色的绝对位置信息和压力信息。针对此类差别,Qt/Embedded将同一类设备的接口部分也给予区别和抽象,具体实现在QmouseDriverInterface类中。键盘类设备也存在类似问题,同样引入了QkbdDriver Inteface来解决。具体实现此处暂不多述。

2 Qt/Embedded的移植与应用

针对Qt/Embedded的实现特点,移植该嵌入式GUI系统一般分为以下几个步骤:

①设计硬件开发平台,并移植Linux操作系统;

②采用静态链接进Linux内核的方式,根据该平台显示设备的显示能力,开发framebuffer驱动程序;

③开发针对该平台的鼠标类设备驱动程序,一般为触摸屏或USB鼠标;

④开发针对该平台的键盘类设备驱动程序,一般为板载按钮或USB键盘(该部分可选);

⑤根据framebuffer驱动程序接口,选择并修改Qt/Embedded中的QlinuxFbScreen和QgfxRaster类;

⑥根据鼠标类设备驱动程序,实现该类设备在Qt/Embedded中的操作接口;

⑦根据键盘类设备驱动程序,实现该类设备在Qt/Embedded中的操作接口(该部分可选);

⑧根据需要选择Qt/Embedded的配置选项,交叉编译Qt/Embedded的动态库;

⑨交叉编译Qt/Embedded中的Example测试程序,在目标平台上运行测试。

Framebuffer设备驱动程序提供出的接口是标准的,除了注意endian问题外,配置Qt/Embedded时选择相应的色彩深度支持即可,因此该部分的移植难点就在于framebuffer驱动程序的实现。Qt/Embedded部分的QWSServer打开/dev/中的framebuffer设备后读出相应的显示能力(屏幕尺寸、显示色彩深度),模板QgfxRaster<depth.type>将根据色彩深度在用户空间设备创建出与显示缓存同样大小的缓冲作为双缓冲,并采用正确方式进行显示。

    2.1 在PXA255平台上移植和应用

在笔者参与设计的某Smart-Phone开发平台中,GUI系统实现方案采用了Qt/Embedded 2.3.7和Qtopia 1.7.0(基于Qt/Embedded 2.x系列的手持套件),硬件平台采用了基于Intel XScale PXA255处理器的嵌入式开发系统。该开发系统采用640×480分辨率的TFT LCD和PXA255内部LCD控制模块作为显示设备,ADS7846N作为外部电阻式触摸屏控制器;另外,采用了五方向按键作为板载键盘。由于该系统采用了ISP1161作为USB Host控制器,较好地支持了USB接口的键盘和鼠标,操作系统为ARM Linux 2.4.19。参考Linux 2.4.19内核目录drivers/input部分,可以按照标准内核中input device接口设计实现触摸屏和键盘,在实现了基于ISP1161的EHCI驱动程序后,移植标准的USB接口的人机界面设备驱动HID和USB键盘、鼠标的驱动程序后,可以获得对于该类设备的调用接口。此过程不属本文讨论范畴,此处暂不多述。

Qt/Embedded 2.x系列对于输入设备的底层接口与3.x系列不同,触摸屏设备和键盘设备需要根据具体的驱动程序接口在Qt/Embedded中设备实现对应的设备操作类。其中对应于鼠标类设备的实现位于src/kernel/qmouse_qws.cpp中。由于触摸屏在实现原理上存在着A/D量化误差的问题,因此所有的触摸屏接口实现类需要从特殊的QcalibratedMouseHandler继承,并获得校正功能。

Qt/Embedded 2.x中对于键盘响应的实现函数位于src/kernel/qkeyboard_qws.cpp中。在qkeyboard_qws.h中,定义了键盘类设备接口的基类QWSKeyboardHandler,移植时需要根据键盘驱动程序从该类派生出实现类,实现键盘事件处理函数processKeyEvent(),并在QWSServer::newKeyboardHandler函数中注册自己的键盘类设备即可。其中对于点击键的键码定义在Qt/Embedded的命名空间??src/kernel/qnamespace.h中。

图4为笔者在该Smart-Phone开发平台上移植Qt/Embedded 2.3.7和Qtopia 1.7.0后显示的截图。

2.2 在MC9328平台上移植和应用

在某车载导航辅助系统的开发平台设计中,采用了Qt/Embedded 3.3.2版本作为其GUI系统的实现方案。硬件平台采用自行设计的以Motorola MC9328 MX1为核心的开发系统。该系统采用CPU内部LCD控制器和240×320分辨率的16 bpp TFT LCD作为显示设备,采用I2C总线扩展出16按键以及MX1集成的ASP模块和电阻触摸屏。操作系统为ARM Linux 2.4.18。
1.部分资源来自网络,经ET电子归类整理,旨在服务电子爱好者并无商业目的,不保证正确性与完整性.
2.如果您觉得本站资源对您有用,请告知您的好友,用搜索引擎搜"ET电子"即可.


最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
教程下载