微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于QTE的嵌入式Linux下可视化打印设计

基于QTE的嵌入式Linux下可视化打印设计

时间:07-30 来源:微计算机信息 点击:

摘要:本文主要介绍了利用QTE|0">QTE在嵌入式Linux下通过USB接口开发图像采集和打印,详细给出了在Samsung公司ARM9处理器S3C2410开发板上硬件、软件的设计和构建过程,并对如何控制摄像头和处理打印机信息,以及图形界面的编写、开发和移植进行了具体讨论。
关键词:Qt/Embedded;嵌入式Linux;图像采集;打印机

1引言

随着计算机与信息技术迅猛发展,嵌入式系统产品已经成为现在市场的热点。而在嵌入式操作系统方面,Linux同目前广泛的嵌入式系统如Vxwork、UC/OS、Palm OS和Windows CE等相比,具有可移植性好、网络性强、编译工具多、开放源码等优点,逐渐成为嵌入式系统的研究热点和广泛使用的平台。

Qt/Embedded 是著名的Qt 库开发商 Trolltech公司开发的面向嵌入式系统的Qt 版本,开发人员多为K D E 项目的核心开发人员。许多基于Qt 的X Window 程序可以非常方便地移植到Qt/Embedded 上,延续了在X 上的强大功能,在底层摒弃了X lib而采用了framebuffer 作为底层图形接口。Qt/Embedded 类库完全采用C++ 封装。丰富的控件资源和良好的可移植性是Qt/Embedded的优势,使用X 下的开发工具Qt Designer可以直接开发基于Qt/Embedded 的UI(用户操作接口)界面。本文便是在嵌入式Linux系统的s3c2410平台上,主要是基于QTE而通过控制USB设备,实现可视化图像图片处理和打印。

2 可视化打印的硬件系统

硬件结构原理图如图1所示:

图1硬件结构原理图

本系统采用的嵌入式微处理器是Samsung公司的S3C2410是一种集成了ARM公司ARM920T处理器核的16/32位微控制器。Flash存储器采用Samsung公司的K9F1208U0M Nand Flash存储器,存储容量为64MB;SDRAM存储器采用HY57V561620CT,大小为32MB;USB集线器芯片采用ALCOR MICRO公司AU9254A21型号的USB集线器芯片;触摸屏采用Sharp公司的3.5寸LCD液晶屏, 320×240的分辨率。

3 可视化打印的具体实现

3.1 可视化打印的图像采集实现

在可视化视频采集QTE编程中,需要对内存进行读写,过程如下:首先打开视频设备,摄像头在系统中对应的设备文件为/dev/video0,采用系统调用函数video_fd =open("/dev/ov51l/video0", O_RDWR),video_fd是设备打开后返回的文件描述符(打开错误返回-1),以后的系统调用函数就可使用它来对设备文件进行操作了。利用ioctl (video_fd, VIDIOCGMBUF, &vid_buf)函数读取有关摄像头的信息,该函数成功返回后,这些信息从内核空间拷贝到用户程序空间vid_buf各成员分量中。在这里我们采用mmap()系统调用使得进程之间通过映射同一文件实现共享内存,各进程可以像访问普通内存一样对文件进行访问,访问时只需要使用指针而不用调用文件操作函数。最后通过使用QTE的时间函数QTimerEvent()和点操作函数QPoint()来进行实时显示,相关代码如下:

Void Video::timerEvent( QTimerEvent * ){

. . . . . . . . . . .

int X_off;//定义屏幕上的横坐标

int Y_off;//定义屏幕上的纵坐标

FrameBuffer *fb;Video *v;QFrame frame;//定义需要的参数

QPoint p = frame->mapToGlobal(QPoint(X_off, Y_off));//找到屏幕的相应点

unsigned char *Map = v->Getmap24(width, height); //获得视频信息

fb->Drawmap(Map, p.x(), p.y(), width, height);//视频显示

. . . . . . . . . . .}

打印请求

这样在我们的LCD显示器的相应位置便可以看到摄像头的显示了,如果想要对图片进行存储,同样地可直接对内存数据进行读取。

3.2 可视化的打印实现

首先给出控制打印机的流程图,如图2所示框图这里我们使用的是HP Deskjet系列喷墨打印机,此打印机驱动程序具有良好的通用性和可移植性,源代码可从惠普公司官方网站获得,我们选用的是GNU Ghostscript7.05版本,与打印相关的具体实现可参见我们前期的工作[1]。

判断文件格式

有了相应的打印机系统,下面需里主要解决的是用QTE控制并且传递打印的信息,即打印需要的参数,主要包括图片的宽,高,纸张大小,图片位置和名字。用QTE直接与外面进行传递比较困难,这里我们可采用环境变量的方式来进行信息传递。由于在上面我们已经获得了想要的图片,我们可以用QPixmap()这个类来获取图片的信息,用QDir()和QString()两个类来获得图片位置和名字,打印机的执行我们可以通过QTE中的系统执行程序来执行shell脚本来对打印机具体操作,相关代码如下:

Void Widget::PictureAndPrint(){

图2打印任务管理程序流图[1]

int w,h;//定义图片的长和高

QDir dir;//定义文件位置

QString string1;//保存文件位置

QString string2;//定义文件名

QPixmap Picture1=QPixmap("图片位置");//取图片

w= Picture1.width();//获取宽度

h= Picture1.height();//获取长度

string1=dir.currentDirPath ();//获取图片地址

string2=fn;

. . . . . . . .

char m11[8];//存放传送所需要的参数

char *can="W";

setenv(can,m11,2);//把参数传给环境变量

. . . . . . . .

system("./print.sh");} //执行打印命令脚本

纸张的大小系统默认是A4,但可由用户直接在下面开发的图形界面里进行可视化调整,比如选择图片,对图片放大缩小,确定打印位置等等。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top