摘 要: 為了實現智能安防系統人機界面的友好性和提高人機交互效率,采用三星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.