摘 要:为了实现智能安防系统人机界面的友好性和提高人机交互效率,采用三星S3C6410为核心的硬件平台和以嵌入式Linux系统为核心的软件平台,并在此基础上使用开放源代码的图形界面库Qt和处理视频模块的Linphone库,开发了智能安防系统的应用系统。经测试,基本上达到了设计要求,并在跨平台性、可扩展性等方面得到了显著提高。
关键词:Linux;Qt;Linphone;家居安防系统
电子信息技术、集成电路技术、通信技术、软件开发技术的发展,带动了一系列现有电子产品的更新换代。家居安防系统终端由最简单的点击按键到集成模块的出现,由普通的液晶显示到触摸显示的实现,极大地方便了用户的使用。在当前的安防系统中,为了使用户更好地实现与系统的交互,达到系统控制的现代化、智能化、人性化,需要一个操作简单、运行可靠、占用资源少的人机交互界面。
从20世纪90年代开始,嵌入式系统就开始引入图形化的用户设计系统。目前在嵌入式界面设计中,比较流行的有MiniGUI[1]、Qt\Embedded[2]、OpenGUI[3]等。但相比较而言,Qt[4]是一个跨平台的C++图形界面应用程序框架,它实际上是一个类库,里面包括了大量的重要类,完全面向对象,拥有良好的扩展性与稳定性,并支持模块化编程。在设计界面的过程中,可以充分利用Qt高度面向对象和模块化的特征,从繁琐的X编程中解脱出来,专注于程序本身的内容,这样使在Linux系统下界面设计成为一件非常轻松的事。且现在广泛应用的4.7版本支持界面设计与编写代码分开的设计模式,可以极大地方便开发人员设计相对性能更高的界面,大大地提高了开发周期。更重要的是,这样的设计理念,可以为产品的后期维护提供极大地保障。
本文基于此提出了在嵌入式Linux系统下,基于Qt和Linphone[5]库的安防系统的开发,其中Qt主要要求设计界面简单的通信,Linphone主要用来对视频的处理,而把三星S3C6410作为该系统的控件器兼处理器。
1 硬件组成及工作原理
本方案的硬件开发平台主要由终端机、摄像头、电话机、管理中心、大堂主机、路由器、智能家居模块、防区模块等组成,具体如图1所示。
其中终端机采用ARM11架构的S3C6410作为处理器,其上的显示屏采用彩色数字TFT-LCD,触摸屏为数字电阻式,且它们的大小为10寸、分辨率为1 000×600。摄像头通过USB接口与终端机连接,完成视频图像的采集,实现可视功能。电话机通过RVVP6X0.5屏蔽线与终端机连接,完成音频的采集,实现对讲功能;防区模块主要获取用户比较感兴趣的信息,如门禁信息、报警信息、烟雾信息等;智能家居模块主要包含灯光、电视、窗帘、电源、煤气等模块。最后终端机通过交换机分别与大堂主机、管理中心连接,前者可以实现呼叫室内终端机、管理中心、门禁开锁等功能,后者主要用来统一管理各终端机、大堂主机等。智能家居模块和防区模块是终端机主要处理的信息模块,也是终端机界面将要显示与交互的数据内容,本文分别设计了与其连接的无线接收与有线接收。无线采用WiFi协议进行连接,有线采用RVV3X0.5屏蔽线进行连接。
由于终端机直接与用户接触,它的好坏直接影响到安防系统的接受度,所以本文主要介绍终端机的界面显示与通信模块。
2 软件设计与实现
2.1 功能模块
整个终端系统的软件部分如图2所示,采用3层模型的设计思想,主要利用Qt提供的信号与槽机制来实现,在显示部分,采用Qt的Model/View[6]模型,它类似于Smalltalk的MCV模型,即数据、控制、显示分开处理。View是Model对象的屏幕显示,即用来显示数据,Model是应用程序对象,它对外部数据和View对象进行沟通,引入的Delegate用来定制数据项的渲染和编程。
第1层为主控层:主控层包含1个主界面。它是一个管理程序,负责对其他各个功能部分的管理协调以及和外部通信。在主界面,除了包含第2层的功能图标外,还包含时间显示功能,方便用户查看实时时间,另外,还设计一个报警信息图标,显示当前新产生的防区信息数。
第2层为功能层:该层主要有5个功能界面组成,呼叫、报警、设置、门禁和对讲界面。(1)呼叫界面主要用于呼通对讲,除了具有一般的呼叫功能外,还设计了群呼的功能,当群呼成功后,整幢楼的所有分机均响铃;(2)门禁信息界面主要显示一些与门禁相关的信息,如刷卡开锁、无效刷卡、控制开锁(分机或管理机)等;(3)报警信息界面,主要用来显示一些报警信息,如报警时间、报警设备号、报警类型等;(4)对讲信息界面,主要用来显示一些呼叫相关的信息,如呼叫时间、呼叫方、是否接听等;(5)设置界面,主要用来设置一些与系统的控制显示信息,具体有7项相关内容。
第3层为细节层:该层主要是设置界面的子界面,主要分为7个部分,分别是功能设置、时间设置、视频调节、铃声设置、触摸校准、铃声设置、密码设置,默认显示的是系统功能设置界面。
2.2 主要模块设计
2.2.1 视频模块
视频模块主要完成对视频的捕获和对视频的播放两部分功能。
视频捕获流程如图3所示,首先打开摄像头设备,然后设置视频信道,初始化设备信息,接着调用Linphone库中的viewCam_start()开始捕获视频,当捕获完成后,关闭设备。当需要停止捕获视频时,调用库中的viewCam_stop()来完成。
视频的播放主要通过调用自定义的Video_Play来实现,具体的流程如图4所示。首先进行相关变量的初始化,然后调用Qt库中QFile变量avi_file的open()方法获取播放文件,接着调用Linphone库中的ms_snd_card_manager_get_card()初始化播放管理器,然后再分别调用avi_start()和avi_set_audio_level()播放文件和设置音量。另外,在需要停止的时候,调用库中的avi_stop()即可实现。
2.2.2 通信模块
该模块主要接收来自防区设备的实时信息。但在Qt中并没有特定的串口控制类,现在大部分使用的是第三方写的QExtserialport类,在此采用Qt提供的线程控制类和其特有的信号与槽机制并结合SELECT[7]机制来完成通信功能。
Select机制可以使进程检测同时等待的多个I/O设备,当没有设备准备好时,Select阻塞,其中任一设备准备好时,Select就返回,Select的原型为:
int select(int nfds,
fd_set*readfds,fd_set*writefds,fd_set*exceptfds,
const struct timeval*timeout)
在本系统中,首先调用Select的FD_SET、FD_CLR和FD_ERROR 3个宏设置描述符屏蔽位,然后再调用Select后,使用FD_ISSET检测文件描述符fdset中对应于文件描述符fd的位置是否被设置。如果被设置,则开始接收数据。
由于数据来自不同的I/O设备,定义通信协议如图5所示。
2.3.2 终端通信测试
为了测试通信的运行效果,在此输入如下的报警命令:f8 0c 07 01 0c 01 0d 06 0a 01 02 39。其中,f8表示接收信息的数据头,0c表示该数据的长度为12字长,07表示从防区接收报警信息,01 0c 01 0d 06 0a 01 02表示接收来自防区号为12的分机1306A向1201的主机发出的报警命令,39表示检验码。最后的效果图如图8所示,即表示终端接收到了一条报警信息。
本文针对当前安防系统中界面人机互动的需要,设计了嵌入式硬件平台,并利用目前比较流行的Qt库设计了界面,在此基础上,采用Select通信机制实现了串口数据通信,采用第三方库Linphone实现了视频模块的开发。该系统在实现用户的界面需要、节省系统开发周期、提高系统可维护性、界面友好性、可移植性等方面,与传统的界面设计方法相比,都具有明显的优势。并对在嵌入式Linux系统下使用Qt/Embedded开发其他嵌入式GUI程序具有一定的指导意义。
参考文献
[1] 安成锦,孙茂阳.基于嵌入式Linux系统的MiniGUI图形界面开发[J].现代电子技术,2005(20):108-110,113.
[2] 于帮伟,邓华秋.基于Qt/Embedded的嵌入式数字监控系统控制界面的实现[J].电视技术,2011,35(24):25-28.
[3] 赵辛晨,吴仲光.基于Qt/Embedded的数码一体化图形界面设计与实现[J].微型机与应用,2011,30(7):9-12,15.
[4] 闫锋欣,曾泉人.C++ GUI Qt4编程[M].第2版.北京:电子工业出版社,2012.
[5] 叶林辉.张春红.基于嵌入式平台SIP终端的设计与实现[J].测控技术,2006(25):361-364.
[6] 蔡志明,卢传富.精通Qt4编程[M].第2版.北京:电子工业出版社,2011.
[7] 李梅.嵌入式Linux下的串口通信程序设计[J].可编程控制器与工厂自动化,2009(10):68-71.