基于嵌入式Linux IP電話_第1頁
基于嵌入式Linux IP電話_第2頁
基于嵌入式Linux IP電話_第3頁
基于嵌入式Linux IP電話_第4頁
基于嵌入式Linux IP電話_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、基于嵌入式Linux IP電話福建師范大學(xué)協(xié)和學(xué)院 信息技術(shù)系 電子信息科學(xué)與技術(shù)【摘 要】21世紀(jì)是信息高速發(fā)展的時(shí)代,隨著集成技術(shù)的提高,電子元件做得越來越小,便攜式電子設(shè)備已成為當(dāng)前信息技術(shù)產(chǎn)業(yè)的潮流。嵌入式系統(tǒng)此時(shí)就擁有了用戶之地,在我們的周圍MP3、手機(jī)、電冰箱等等隨處課件的小電器,都可以稱之為嵌入式產(chǎn)品。Linux是由芬蘭赫爾辛基大學(xué)學(xué)生Linus發(fā)布的一款開源的操作系統(tǒng)內(nèi)核,憑借網(wǎng)絡(luò)的力量,越來越多的人參與內(nèi)核的建設(shè),使用它只需遵循GNU計(jì)劃。嵌入式Linux是Linux在嵌入式系統(tǒng)方向的應(yīng)用本論文中使用嵌入式Linux作為軟件平臺(tái),作為硬件的管理中介,使我們能更專注與軟件的開發(fā)

2、上。Qt是諾基亞開發(fā)的c+為編程語言的圖形界面框架,同時(shí)Qt也是為數(shù)不多的跨多種平臺(tái)的軟件。本論文通過Qt的嵌入式版本,即QT/E進(jìn)行頁面的設(shè)計(jì),通過NFS技術(shù)掛載到開發(fā)板上,運(yùn)行所編的圖形界面程序。Linphone是國外一家開源軟件公司開發(fā)的IP電話項(xiàng)目,這里通過對Linphone提供的API去進(jìn)行網(wǎng)絡(luò)語音通信,并且還有視頻、短信等擴(kuò)展功能。【關(guān)鍵詞】: 嵌入式系統(tǒng) Linux QT Linphone目 錄1. 目 錄22. 緒論22.1. 背景22.2. 國內(nèi)外研究現(xiàn)狀32.2. 本人的工作32.2. 文章內(nèi)容結(jié)構(gòu)33. 嵌入式軟硬件平臺(tái)簡介33.1. 嵌入式硬件平臺(tái)33.2. 嵌入式軟件

3、平臺(tái)44. 嵌入式開發(fā)平臺(tái)搭建54.1. 硬件平臺(tái)搭建54.2. 軟件平臺(tái)搭建54.2.1. 安裝交叉編譯工具鏈54.2.2. vivi移植64.2.3. Linux內(nèi)核剪裁與移植64.2.4. yaffs文件系統(tǒng)制作84.2.5. QT/E庫使用84.2.6. NFS掛載介紹105. IP電話系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)125.1. 系統(tǒng)實(shí)現(xiàn)的功能和特點(diǎn)125.2. 通信功能的設(shè)計(jì)與實(shí)現(xiàn)135.2.1. Linphone庫的移植135.2.2. 通信功能實(shí)現(xiàn)155.3. 圖形界面的設(shè)計(jì)與實(shí)現(xiàn)176. 用戶使用手冊217. 結(jié)束語24致謝25參考文獻(xiàn)261. 緒論1.1. 背景根據(jù)IEEE的定義,嵌入式系統(tǒng)

4、是“控制、監(jiān)視或者輔助裝置、機(jī)器和設(shè)備運(yùn)行的裝置”。目前國內(nèi)一個(gè)普遍被認(rèn)同的定義:以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)1。嵌入式系統(tǒng)的出現(xiàn)至今,多媒體技術(shù)與Internet的應(yīng)用迅速普及,消費(fèi)電子,計(jì)算機(jī),通信,3C一體化趨勢日趨明顯,嵌入式技術(shù)再度成為研究的重點(diǎn)。傳統(tǒng)的通過模擬傳輸方式進(jìn)行通信,這種方式已經(jīng)有100多年的歷史,隨著Internet的迅速普及以及國內(nèi)3G網(wǎng)絡(luò)的不斷完善,通過網(wǎng)絡(luò)語音通信將成為潮流,對我國網(wǎng)絡(luò)的發(fā)展,具有十分重大的意義。1.2. 國內(nèi)外研究現(xiàn)狀目前國內(nèi)外對于IP電話正在如火如荼的普及

5、中,尤其是在中國,隨著“三網(wǎng)合一”的進(jìn)程,把聲音、圖像和數(shù)據(jù)等多重信息同時(shí)傳到遠(yuǎn)方,或者說通信雙方可以聽到對方的聲音,同時(shí)也可以看到對方逼真的活動(dòng)畫面,成為了人們強(qiáng)烈的需求。IP電話從信道或帶寬上、費(fèi)用上、話音質(zhì)量上與傳統(tǒng)電話相比都具有無可比擬的優(yōu)勢。1.3. 本人的工作本論文采用在嵌入式系統(tǒng)上通過移植國外IP電話開源軟件Linphone庫,利用Linphone的API與QT圖形界面結(jié)合,實(shí)現(xiàn)網(wǎng)絡(luò)上的通話。本人的工作有:1、 選擇S3C2410嵌入式系統(tǒng)平臺(tái),在熟悉Linux內(nèi)核體系結(jié)構(gòu)和驅(qū)動(dòng)程序結(jié)構(gòu)的基礎(chǔ)上,實(shí)現(xiàn)使用接電話、撥打電話等功能。2、 選擇Linphone的API實(shí)現(xiàn)底層網(wǎng)絡(luò)通信。

6、1.4. 文章內(nèi)容結(jié)構(gòu)本論文在以S3C2410處理器為主體的開發(fā)板上設(shè)計(jì)出基于Linux系統(tǒng)的IP通話系統(tǒng)。第1章 ,緒論。主要介紹了IP電話的背景、國內(nèi)外研究現(xiàn)狀等等。第2章 ,嵌入式硬件平臺(tái)簡介。主要介紹了開發(fā)板的一些信息。第3章 ,嵌入式軟件平臺(tái)搭建。主要是在開發(fā)板上搭建程序運(yùn)行的環(huán)境和安裝交叉編譯工具。第4章 ,IP電話系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)。主要從通信功能實(shí)現(xiàn)和圖形界面實(shí)現(xiàn)兩個(gè)方面介紹嵌入式Linux IP電話的具體設(shè)計(jì)與實(shí)現(xiàn)。第5章 ,用戶使用手冊。介紹如何操作IP電話。第6章 ,結(jié)束語。說明個(gè)人本次畢業(yè)設(shè)計(jì)的心得以及該設(shè)計(jì)未來的展望。2. 嵌入式軟硬件平臺(tái)簡介2.1. 嵌入式硬件平臺(tái)系統(tǒng)

7、的硬件平臺(tái)是采用恒豐瑞科的S3C2410開發(fā)板,采用三星S3C2410AL高速ARM9處理器,主頻達(dá)到203MHz、音頻接口、視頻接口、10/100Mb網(wǎng)絡(luò)接口、2個(gè)LCD接口、兩個(gè)串口等等,外觀如圖2-1:圖 2-1 S3C2410開發(fā)板2.2. 嵌入式軟件平臺(tái)開發(fā)平臺(tái)采用的嵌入式Linux。嵌入式Linux的優(yōu)勢,首先,Linux是開放源代碼的,不存在黑箱技術(shù),遍布全球的眾多Linux愛好者又是Linux開發(fā)者的強(qiáng)大技術(shù)支持;其次,Linux的內(nèi)核小、效率高,內(nèi)核的更新,嵌入式linux速度很快,linux是可以定制的,其系統(tǒng)內(nèi)核最小只有約134KB;第三,Linux是免費(fèi)的OS,在價(jià)格上

8、極具競爭力(參看 3. 嵌入式開發(fā)平臺(tái)搭建3.1. 硬件平臺(tái)搭建圖 3-1 開發(fā)板連線圖3.2. 軟件平臺(tái)搭建3.2.1. 安裝交叉編譯工具鏈交叉編譯器通常采用PC(X86)平臺(tái)作為主機(jī)開發(fā)進(jìn)行編譯,但是編譯出的軟件能夠在特定的體系架構(gòu)的目標(biāo)設(shè)備上運(yùn)行的一套編譯工具,通過構(gòu)建ARM交叉編譯器可以在Ubuntu下編譯出在ARM開發(fā)板上運(yùn)行的程序。開發(fā)板的光盤中自帶了用于編譯應(yīng)用程序的交叉編譯工具:解壓:# tar zxvf opt.tar.gz# cp opt/* /opt/toolchain修改全局路徑:# gedit /etc/environment添加如下內(nèi)容:3.2.2. vivi移植v

9、ivi是韓國mizi 公司開發(fā)的bootloader, 適用于ARM9處理器。Vivi有兩種工作模式:啟動(dòng)加載模式和下載模式。開發(fā)板的光盤中自帶了vivi源程序(參看 # make menuconfig導(dǎo)入hf_2410c配置文件# make3.2.3. Linux內(nèi)核剪裁與移植Linux內(nèi)核采用版本,從處下載內(nèi)核源代碼,解壓縮后進(jìn)入該目錄。# make menucofig進(jìn)入Device Drivers ->,確保Sound card support選中,這樣開發(fā)板的聲卡就可以使用了。同時(shí),選中Network device support,這

10、樣網(wǎng)卡就可以使用了。圖3-2 配置聲卡支持圖 3-3 配置網(wǎng)卡支持退出,保存。# make3.2.4. yaffs文件系統(tǒng)制作嵌入式系統(tǒng)的文件系統(tǒng)主要是:yaffs2、yaffs、ramfs、romfs、cramfs、nfs等,比較常用的是使用yaffs2。YAFFS 是基于日志的文件系統(tǒng),提供磨損平衡和掉電恢復(fù)的健壯性。它還為大容量的Flash 芯片做了很好的調(diào)整,針對啟動(dòng)時(shí)間和RAM 的使用做了優(yōu)化。它適用于大容量的存儲(chǔ)設(shè)備,已經(jīng)在Linux 和WinCE 商業(yè)產(chǎn)品中使用(參看 在開發(fā)板光盤中帶有制作工具mkyaffsimage,和已經(jīng)制作好的文件系統(tǒng)rootfs# ./mkyaffsim

11、age -r rootfs -o rootfs.yaffs這樣就得到了文件系統(tǒng)鏡像。3.2.5. QT/E庫使用. QT/E簡介Qt是諾基亞開發(fā)的一個(gè)跨平臺(tái)的C+圖形用戶界面應(yīng)用程序框架。它提供給應(yīng)用程序開發(fā)者建立藝術(shù)級(jí)的圖形用戶界面所需的所用功能。Qt是完全面向?qū)ο蟮?,很容易擴(kuò)展,并且允許真正地組件編程。QT/E是Qt的一個(gè)版本,是Qt在向嵌入式方向提供圖形界面的解決方案。它通過Qt API與Linuc I/O以及Framebuffer直接交互,擁有較高的運(yùn)行效率,而且整體采用面向?qū)ο缶幊?,擁有良好地體系架構(gòu)和編程模式,QT/E和Qt一樣,在4.5版本之后提供了三種不同的授權(quán)協(xié)

12、議GPL, LGPL和Commercial(參看 . QT/E庫的移植1. 下載源碼包qt版本:qt-embedded-linux-opensource-src-4.5.3下載地址:ftp:/2. 檢查內(nèi)核是否支持LCD驅(qū)動(dòng)和FrameBuffer如果支持LCD驅(qū)動(dòng),那么直接使用該內(nèi)核就可以了,否則,還需要重新編譯內(nèi)核。cd /kernel/linux-*make menuconfig在界面中找到Graphics support,進(jìn)入查看Support for framebuffer devices 和 S3C2410 LCD framebuffer support兩個(gè)選項(xiàng)是否被

13、選中,選中代表內(nèi)核已支持。3. 解壓源壓縮包tar zxvf qt-embedded-linux-opsource-src-4.5.3.tar.gzcd qt-embedded-linux-opsource-src-4.5.34. 配置使用的配置命令是如下:./configure -prefix /home/lhembed/qt-arm/build -release -shared -fast -pch -no-qt3support -qt-sql-sqlite -no-libtiff -no-libmng -qt-libjpeg -qt-zlib -qt-libpng -qt-freetyp

14、e -no-openssl -nomake examples -nomake demos -nomake tools -optimized-qmake -no-phonon -no-nis -no-opengl -no-cups -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm -no-xinerama -no-xshape -no-separate-debug-info -xplatform qws/linux-arm-g+ -embedded arm -depths 16 -no-qvfb -qt-gfx-linuxf

15、b -no-gfx-qvfb -no-kbd-qvfb -no-mouse-qvfb -qt-kbd-usb -confirm-license -no-armfpa -I /opt/toolchains/arm-angstrom-linux-gnueabi/include/c+ -I /opt/toolchains/arm-angstrom-linux-gnueabi/include/c+/arm-angstrom-linux-gnueabi這里解釋幾個(gè)屬性含義:-prefix /home/lhembed/qt-arm/build 意思是安裝目錄,也就是執(zhí)行make install后會(huì)存放的地

16、方。-xplatform qws/linux-arm-g+ 這個(gè)是選擇交叉編譯平臺(tái),這是源碼包里面的程序,是經(jīng)過官方測試過的。-embedded arm 這是選擇我們編譯的平臺(tái)-I /opt/toolchains/arm-angstrom-linux-gnueabi/include/c+ -I /opt/toolchains/arm-angstrom-linux-gnueabi/include/c+/arm-angstrom-linux-gnueabi上面兩個(gè)的含義是編譯的時(shí)候讓編譯器去指定的目錄中尋找頭文件,如果不加的話,就會(huì)出現(xiàn)這樣找不到New頭文件(#include <new>

17、;)的錯(cuò)誤。*/opt/toolchains/arm-angstrom-linux-gnueabi這個(gè)路徑是我pc機(jī)上安裝開發(fā)板的交叉編譯器的路徑。5. make6. make install3.2.6. NFS掛載介紹. NFS介紹NFS即net file system網(wǎng)絡(luò)文件系統(tǒng),是Linux支持文件系統(tǒng)中的一種,主要是用來解決網(wǎng)絡(luò)上與他人共享目錄與文件。通過NFS,我們可以通過網(wǎng)絡(luò)很輕松地訪問到遠(yuǎn)端的文件。在此系統(tǒng)的應(yīng)用中,主要是將QT/E的庫掛載到開發(fā)板上,提供給開發(fā)板上的應(yīng)用程序調(diào)用。. NFS掛載實(shí)現(xiàn)PC端:1.運(yùn)行程序Tera Term超級(jí)終端,要選擇

18、串口COM12.設(shè)置波特率,選擇Serial Port 圖 4-1 波特率設(shè)置在這里把Baud Rate設(shè)置為1152003.設(shè)置顯示行數(shù),Scroll buffer設(shè)置為10000行: 圖 4-2 行設(shè)置虛擬機(jī)端:1. 進(jìn)入虛擬機(jī)中的Ubuntu,打開終端中輸入:sudo apt-get install nfs-kernel-server portmap 2. 修改配置文件:gedit /etc/exports增加一行:/home/lhembed/share2410 *(rw)/設(shè)置共享目錄3. 修改目錄權(quán)限chomd -R /home/lhembed/share2410 7774.重啟nf

19、ssudo /etc/init.d/nfs-kernel-server restart4. IP電話系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)4.1. 系統(tǒng)實(shí)現(xiàn)的功能和特點(diǎn)IP電話系統(tǒng)是通過國外開源軟件Linphone提供的底層庫接口來實(shí)現(xiàn)通信的功能,具體包括撥打、接聽、拒聽、掛斷等功能。通過該系統(tǒng)可以與局域網(wǎng)或者Internet的好友進(jìn)行語音聊天,利用友好的界面可以進(jìn)行通話相關(guān)操作。該系統(tǒng)是基于嵌入式Linux操作系統(tǒng)平臺(tái),可移植性好,利用QT的跨平臺(tái)等特性,可以在不同的操作系統(tǒng)下進(jìn)行應(yīng)用。下面介紹系統(tǒng)的功能以及流程:呼入圖 5-1 呼入流程圖呼出圖 5-2 呼出流程圖4.2. 通信功能的設(shè)計(jì)與實(shí)現(xiàn)4.2.1. Lin

20、phone庫的移植Linphone庫提供了操作的API,Linpone的核心數(shù)據(jù)結(jié)構(gòu)是struct _LinphoneCore。通過Linphone提供的API,就能夠?qū)崿F(xiàn)通信的功能,下面介紹主要的API:LinphoneCore* linphone_core_new( const LinphoneCoreVTable*,Const char*Const char*,Void*):新建一個(gè)linphonecore實(shí)例。void linphone_core_destroy(LinphoneCore *lc):銷毀linphone實(shí)體。int linphone_core_invite(Linpho

21、neCore *lc, const char *url):邀請對話。int linphone_core_accept_call(LinphoneCore *lc, const char *url):接受一個(gè)對話請求。int linphone_core_terminate_call(LinphoneCore *lc, const char *url):終止對話。1. 準(zhǔn)備所需要的庫文件圖 4-1 文件列表2. 解壓縮各自目錄,然后執(zhí)行如下命令進(jìn)行編譯和安裝庫文件進(jìn)入ncurses-5.7./configure -prefix=/install -host=arm-angstrom-linux-g

22、nueabi -with-gnu-ld -with-sharedmakemake install DESTDIR=/home/lhembed/linphone-arm/build/進(jìn)入readline-6.1./configure -prefix=/install -host=arm-angstrom-linux-gnueabi -with-gnu-ld -disable-staticmakemake install DESTDIR=/home/lhembed/linphone-arm/build/進(jìn)入libosip2-3.3.0./configure -prefix=/install -ho

23、st=arm-angstrom-linux-gnueabi -with-gnu-ld -disable-staticmakemake install DESTDIR=/home/lhembed/linphone-arm/build/進(jìn)入libogg-1.2.0./configure -prefix=/install -host=arm-angstrom-linux-gnueabimakemake install DESTDIR=/home/lhembed/linphone-arm/build/進(jìn)入speex-1.2rc1./configure -prefix=/install -host=ar

24、m-angstrom-linux-gnueabi -disable-static -enable-fixed-point -enable-arm-asm -with-ogg-libraries=/home/lhembed/linphone-arm/build/install/lib/ -with-ogg-includes=/home/lhembed/linphone-arm/build/install/includemakemake install DESTDIR=/home/lhembed/linphone-arm/build/進(jìn)入libeXosip2-3.1.0./configure OS

25、IP_CFLAGS=-I/home/lhembed/linphone-arm/build/install/include/ OSIP_LIBS="-L/home/lhembed/linphone-arm/build/install/lib -losip2 -losipparser2" -prefix=/install -host=arm-angstrom-linux-gnueabimakemake -k install DESTDIR=/home/lhembed/linphone-arm/build/進(jìn)入linphone-3.3.0export ARM_INSTALL_TR

26、EE=/home/lhembed/linphone-arm/build/./configure -prefix=/install -host=arm-angstrom-linux-gnueabi -with-gnu-ld -disable-static -disable-glib -with-osip=$ARM_INSTALL_TREE/install -with-readline=$ARM_INSTALL_TREE/install SPEEX_CFLAGS="-I$ARM_INSTALL_TREE/install/include" SPEEX_LIBS="-L$

27、ARM_INSTALL_TREE/install/lib -lspeex -lspeexdsp" OSIP_CFLAGS="-I$ARM_INSTALL_TREE/install/include" OSIP_LIBS="-L$ARM_INSTALL_TREE/install/lib -losip2 -leXosip2 -losipparser2" -disable-video -disable-gtk_uimakecp ./libosip2-3.3.0/src/osipparser2/.libs/libosipparser2.la /home/

28、lhembed/linphone-arm/build/install/lib/makemake -k install DESTDIR=/home/lhembed/linphone-arm/build/這樣就把所需要的庫文件和linphone文件都打包在了/home/lhembed/linphone-arm/build/目錄里了。3. 把build目錄拷貝到共享文件夾,設(shè)置build文件夾屬性為777。4.2.2. 通信功能實(shí)現(xiàn)通信功能包含撥打電話、接聽電話、拒接電話、掛斷電話等。因?yàn)長inphone需要循環(huán)執(zhí)行l(wèi)inphone_core_iterate函數(shù),來維護(hù)Linphone底層協(xié)議的運(yùn)行

29、,所以在這里我使用Qt多線程技術(shù)。在Qt線程中的run()函數(shù)內(nèi)容,添加一個(gè)while死循環(huán),進(jìn)行每個(gè)一秒執(zhí)行該函數(shù)。do. linphone_core_iterate(lc); sleep(1); while(i<10);同樣在線程的run()函數(shù)中,通過linphone_core_get_state函數(shù)獲取到當(dāng)前Linphone所處在的狀態(tài),根據(jù)狀態(tài)的不同來獲知當(dāng)前圖形界面應(yīng)該卻換到相應(yīng)界面。這里所用到的狀態(tài)有如下幾種:GSTATE_CALL_OUT_INVITE:向外呼出請求標(biāo)志GSTATE_CALL_IDLE:當(dāng)前處于空閑狀態(tài)GSTATE_CALL_OUT_CONNECTED:向

30、外呼出成功,處于通話狀態(tài)GSTATE_CALL_IN_CONNECTED:呼入成功,處于接聽狀態(tài)GSTATE_CALL_IN_INVITE:當(dāng)前有人請求呼入GSTATE_CALL_END:通話結(jié)束標(biāo)志GSTATE_CALL_ERROR:出錯(cuò)標(biāo)志GSTATE_INVALID:無效標(biāo)志GSTATE_CALL_OUT_RINGING:呼出響鈴狀態(tài)圖 5-3 通信功能流程圖使用case語句判定當(dāng)前信號(hào),如果為GSTATE_CALL_IN_INVITE,那么還要獲取對方的用戶名和域,提供給圖形界面顯示來電信息。 case GSTATE_CALL_IN_INVITE: if(count = 0) coun

31、t=1;/防止來電一次多次獲取對方信息,造成圖形界面的閃動(dòng) . ctt=linphone_address_new(getFromsip(); . displayusername=linphone_address_get_username(ctt);/獲取用戶名信息 displaydomain=linphone_address_get_domain(ctt);/獲取域信息 . emit threadstatechanged("ininvite"); break;因?yàn)榻缑婀δ苄枰艚胁僮?、掛斷操作、接聽操作,都要調(diào)用到Linphone的API,所以在Qt線程中使用三個(gè)槽函數(shù)對待

32、圖形界面的不同信號(hào),進(jìn)行不同的反應(yīng):void threadclass:cmdoutinvite(char *sip) linphone_core_invite(lc,sip);/呼出,void threadclass:cmdacceptinvite(char *sip) linphone_core_accept_call(lc, sip);/接聽.void threadclass:cmdterminatecall(char *sip) linphone_core_terminate_call(lc, sip);/掛斷.4.3. 圖形界面的設(shè)計(jì)與實(shí)現(xiàn)圖形界面與通信功能的集合是通過Qt的多線程技術(shù)

33、.。各個(gè)界面的通信是通過信號(hào)槽機(jī)制與Linphone所返回的狀態(tài)進(jìn)行同步。圖形界面使用QLabel的方法來對圖片布局,QLabel中的setPixmap()方法加載png格式的圖片,再通過setGeometry(x,y,w,h)的方法來對圖片進(jìn)行絕對布局。信號(hào)槽機(jī)制是一個(gè)事件到來后觸發(fā)某個(gè)動(dòng)作,QPushButton類創(chuàng)建一個(gè)按鈕后,點(diǎn)擊事件到來后激活一個(gè)槽函數(shù),比如connect(acceptButton, SIGNAL(clicked(), this, SLOT(accclick();acceptButton按鈕觸發(fā)clicked事件,然后程序執(zhí)行accclick函數(shù)。在信號(hào)槽的使用中需要

34、在類的申明中,即在.h文件類申明頂部標(biāo)識(shí)Q_OBJECT,如此才能夠接收觸發(fā)的信號(hào)。下面我結(jié)合每個(gè)界面的特點(diǎn)分別介紹每個(gè)界面中的設(shè)計(jì)與實(shí)現(xiàn)方法。1. 撥打界面撥打界面也是系統(tǒng)啟動(dòng)后執(zhí)行的第一個(gè)界面,所以在界面后臺(tái)維護(hù)類(back)中,首先執(zhí)行調(diào)用撥打界面界面。back:back(). startbh();/執(zhí)行撥號(hào)界面 this->hide();在撥號(hào)面板輸入對方的Ip地址或者域名后,點(diǎn)擊撥號(hào)按鈕就會(huì)出發(fā)一個(gè)信號(hào)槽:connect(callbutton, SIGNAL(clicked(), this, SLOT(callbuttonClicked();系統(tǒng)就會(huì)執(zhí)行callbuttonCl

35、icked()函數(shù),發(fā)出信號(hào)由Qt的線程接收去執(zhí)行呼出操作。emit CallOperate(1,telnum,"","");2. 來電界面在來電界面中有三個(gè)操作,第一,獲取對方來電的用戶名和域的信息,這個(gè)已經(jīng)在Qt線程中實(shí)現(xiàn)了,在來電界面中只需要對這些信息進(jìn)行接收顯示,第二,拒絕來電操作,第三,接受來電操作。這里介紹拒絕來電操作和接受來電操作。拒絕來電和接受來電都是通過按鈕出發(fā)對應(yīng)的槽函數(shù),然后執(zhí)行不同的操作。void incall:accclick() this->close(); emit CallOperate(2,TelNum,TelNa

36、me,"accept");/接受來電void incall:igoclick() this->close(); emit CallOperate(2,TelNum,TelName,"ignor");/拒絕來電3. 通話中界面通話中的界面有三個(gè)操作,第一,顯示來電信息,這個(gè)從來電界面?zhèn)鬟f過來,在這里只需要顯示即可,第二,對通話時(shí)間計(jì)時(shí),第三,掛斷操作。這里介紹對通話時(shí)間的計(jì)時(shí)。首先需要捕獲當(dāng)前界面開始執(zhí)行的事件,界面執(zhí)行就開始計(jì)時(shí)。bool thzclass:event(QEvent *ev) if(ev->type() = QEvent:Wi

37、ndowActivate)/捕獲當(dāng)前界面已經(jīng)被激活 timerTid = startTimer(1000);/創(chuàng)建定時(shí)器.void thzclass:timerEvent(QTimerEvent *e) if (e->timerId() = timerTid) sumSecond+; /當(dāng)前總秒數(shù)+1 SetTimeLabel(sumSecond);/通過這個(gè)函數(shù)進(jìn)行顯示出當(dāng)前的通話時(shí)間.4. 通話結(jié)束界面通話結(jié)束界面是當(dāng)對方掛斷或者自己主動(dòng)掛斷后跳轉(zhuǎn)到的頁面,主要的功能就是顯示通話的總時(shí)長和對方的相關(guān)信息,這些信息都是通過通話中界面?zhèn)鬟f過來的,這個(gè)界面只是實(shí)現(xiàn)顯示出來。5. 用戶使用手

38、冊在window下使用Linphone官網(wǎng)下載的安裝程序,安裝后打開: 圖 6-1 window下Linphone界面在地址欄中輸入sip地址,點(diǎn)擊綠色按鈕,撥打電話。紅色按鈕是掛斷電話。在開發(fā)板上來電:撥號(hào)界面轉(zhuǎn)到來電界面接聽電話跳轉(zhuǎn)到通話中界面通話結(jié)束后跳轉(zhuǎn)到結(jié)束界面在開發(fā)板上去電:在開發(fā)板的數(shù)字列輸入ip數(shù)字,是輸入域名或者“.”字符。撥號(hào)界面轉(zhuǎn)到呼叫界面接聽電話跳轉(zhuǎn)到通話中界面通話結(jié)束后跳轉(zhuǎn)到結(jié)束界面6. 結(jié)束語本論文是在恒豐銳科的S3C2410a的硬件平臺(tái)上,對Linux內(nèi)核移植、文件系統(tǒng)的制作、Bootloader的移植、QT/E庫的移植,利用國外IP電話開源軟件Linphone,

39、自己利用QT制作圖形界面,實(shí)現(xiàn)了在開發(fā)板上運(yùn)行友好的圖形界面在局域網(wǎng)上進(jìn)行語音聊天的功能。IP電話系統(tǒng)已經(jīng)實(shí)現(xiàn)了撥打、拒接、接聽、掛斷的語音功能,還有通信記錄功能,視頻功能,短信功能等等可以擴(kuò)展,希望以后能夠完善。致謝畢業(yè)設(shè)計(jì)耗時(shí)三個(gè)月終于完成了。在此特別感謝林鴻老師對我的畢業(yè)設(shè)計(jì)的指導(dǎo),在這個(gè)三個(gè)月間,利用課間時(shí)間或者QQ等通訊方式對我畢業(yè)設(shè)計(jì)遇到的問題解答。在畢業(yè)答辯前對論文的寫作指導(dǎo),一直給我與極大的支持,傳授了我許多平時(shí)開發(fā)的經(jīng)驗(yàn),糾正了我的許多不好習(xí)慣,提出寶貴的意見。他的崇高精神讓我記憶深刻,時(shí)常鼓勵(lì)給予我強(qiáng)大的精神動(dòng)力和遇事解決問題的信心。同時(shí),還需要感謝周圍的同學(xué)協(xié)助我解決難題

40、,得到他們的熱心幫助,感謝他們。參考文獻(xiàn)1 韋東山.嵌入式Linux應(yīng)用開發(fā)完全手冊M.北京:人民郵電出版社2 W.Richard Stevens Stephen A.Rago.UNIX環(huán)境高級(jí)編程(第2版)M.北京:人民郵電出版社3 Jonathan Corbet, Alessandro Rubini & Greg Kroah-Hartman.Linux設(shè)備驅(qū)動(dòng)程序M.北京:中國電力出版社4 華清遠(yuǎn)見嵌入式培訓(xùn)中心.嵌入式Linux系統(tǒng)開發(fā)標(biāo)準(zhǔn)教程(第2版)M.北京:人民郵電出版社5 卡莫爾(Raj Kamal).嵌入式系統(tǒng):體系結(jié)構(gòu)、編程與設(shè)計(jì) M.北京:清華大學(xué)出版社6 薩莉(Gene Sally).Linux嵌入式系統(tǒng)高級(jí)程序設(shè)計(jì) M.北京:人民郵電出版社【Abstract】 The 21st century is the information with the high-speed development of The Times, with the improvement of integration technology,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論