基于ARM9和GSM/GPRS的無(wú)線可移動(dòng)紅外監(jiān)測(cè)報(bào)警系統(tǒng)
3.2 設(shè)備驅(qū)動(dòng)程序
設(shè)備驅(qū)動(dòng)程序可以被看作操作系統(tǒng)的一部分,對(duì)于某個(gè)特定的硬件設(shè)備來(lái)說(shuō),其對(duì)應(yīng)的設(shè)備驅(qū)動(dòng)程序是不同的。操作系統(tǒng)本身是沒(méi)有各種設(shè)備驅(qū)動(dòng)的,但是它留下了擴(kuò)展設(shè)備驅(qū)動(dòng)的接口。本終端系統(tǒng)中的設(shè)備驅(qū)動(dòng)程序主要包括GPIO驅(qū)動(dòng)、USB接口驅(qū)動(dòng)、視頻設(shè)備驅(qū)動(dòng)和GSM/GPRS串口驅(qū)動(dòng)。
GPIO驅(qū)動(dòng)是針對(duì)GPIO輸入/輸出端口進(jìn)行的驅(qū)動(dòng)程序開(kāi)發(fā),主要的部分是GPIO端口的初始化和配置,經(jīng)過(guò)測(cè)試終端采用GPIO總線中的GPG6口以輸入模式來(lái)接收紅外監(jiān)測(cè)模塊傳入的高電平信號(hào)。USB接口驅(qū)動(dòng)由三部分組成:主機(jī)控制器驅(qū)動(dòng)程序(HCD)、USB驅(qū)動(dòng)(USBD)、設(shè)備端驅(qū)動(dòng)程序(Slave Device Driver),它主要是為支持USB接口的圖像采集設(shè)備的使用。GSM/GPRS串口驅(qū)動(dòng)是字符設(shè)備驅(qū)動(dòng),系統(tǒng)中選用的串口2對(duì)應(yīng)的設(shè)備文件為/dev/tts/1,初始化串口2的波特率為115200 B/s,8位數(shù)據(jù)位,無(wú)奇偶校驗(yàn),1位停止位,實(shí)現(xiàn)了GSM/GPRS模塊的連接。
本系統(tǒng)中使用的視頻設(shè)備驅(qū)動(dòng)為SPCA5XX,它是面向該ZC301p芯片的,其實(shí)現(xiàn)是按照標(biāo)準(zhǔn)的USB VIDEO設(shè)備的驅(qū)動(dòng)框架編寫的,整個(gè)源程序由三個(gè)主體部分組成:設(shè)備的初始化模塊和卸載模塊、上層軟件接口模塊、數(shù)據(jù)傳輸模塊。此視頻設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì),能夠取到應(yīng)用程序所需要的jpeg流。在此不能不提到ioct1的作用。為了補(bǔ)充設(shè)備讀寫操作的功能,例如控制硬件等,最常用的通過(guò)設(shè)備驅(qū)動(dòng)程序完成控制動(dòng)作的方法就是實(shí)現(xiàn)ioct1方法。ioct1系統(tǒng)調(diào)用為驅(qū)動(dòng)程序執(zhí)行命令提供了一個(gè)設(shè)備相關(guān)的入口點(diǎn)。與read和其他方法不同,ioct1是設(shè)備相關(guān)的,它允許應(yīng)用程序訪問(wèn)被驅(qū)動(dòng)硬件的特殊功能一配置設(shè)備以及進(jìn)入或退出操作模式。在本設(shè)計(jì)中用到的,是通過(guò)ioct1截取jpeg流和配置圖像采集設(shè)備的參數(shù)。
3.3 PPP撥號(hào)腳本
本設(shè)計(jì)中,對(duì)于處理器而言,GPRS模塊就相當(dāng)于一個(gè)調(diào)制解調(diào)器,處理器通過(guò)串口發(fā)送AT命令控制GPRS模塊工作情況和得到GPRS模塊相關(guān)信息。中國(guó)移動(dòng)在GPRS網(wǎng)中建立了相當(dāng)于ISP的GGSN,以連接GPRS網(wǎng)與外部的Internet網(wǎng)絡(luò)。要使用GPRS功能首先要登錄GPRS網(wǎng)絡(luò)中的GGSN,這個(gè)工作可以通過(guò)相關(guān)AT命令完成。同時(shí),為了能夠進(jìn)行IP數(shù)據(jù)包的傳輸,就必須首先實(shí)現(xiàn)數(shù)據(jù)鏈路層PPP協(xié)議。
PPP是簡(jiǎn)單鏈路設(shè)計(jì)的鏈路層協(xié)議。設(shè)計(jì)目的主要是用來(lái)建立點(diǎn)對(duì)點(diǎn)連接,進(jìn)行數(shù)據(jù)收發(fā)。PPP協(xié)議中主要任務(wù)有鏈路建立、維護(hù)、拆除、上層協(xié)議協(xié)商和認(rèn)證等。在GPRS網(wǎng)絡(luò)中一般用到的有LCP(鏈路控制協(xié)議)、PAP(密碼驗(yàn)證協(xié)議)、CHAP(挑戰(zhàn)握手驗(yàn)證協(xié)議)和IPCP協(xié)議(PPP IP控制協(xié)議)。為了建立點(diǎn)到點(diǎn)連接,PPP連接時(shí)的兩端開(kāi)始都必須發(fā)送LCP數(shù)據(jù)包來(lái)配置和測(cè)試數(shù)據(jù)連接;在連接建立后,對(duì)等實(shí)體還有可能需要認(rèn)證;然后,PPP必須發(fā)送NCP數(shù)據(jù)包來(lái)選擇一種或多種網(wǎng)絡(luò)層協(xié)議來(lái)配置。一旦網(wǎng)絡(luò)層協(xié)議被配置好后,該網(wǎng)絡(luò)層的數(shù)據(jù)包就可以被封裝在ppp 幀中在鏈路上傳送了。PPP鏈路將保持可配置的狀態(tài),直到有LCP數(shù)據(jù)包和NCP數(shù)據(jù)包終止連接。在GPRS模塊撥號(hào)成功后,就要進(jìn)行LCP協(xié)商配置。交互過(guò)程完成后,終端將主動(dòng)進(jìn)行PAP認(rèn)證,發(fā)出PAP數(shù)據(jù)包,進(jìn)入認(rèn)證鑒權(quán)階段。
PAP認(rèn)證主要進(jìn)行用戶名和密碼認(rèn)證,其數(shù)據(jù)包仍然封裝在PPP6幀內(nèi),格式和LCP一致。進(jìn)入PAF認(rèn)證階段,終端主動(dòng)發(fā)出Authenticate-Request數(shù)據(jù)包,由于中國(guó)移動(dòng)使用的GPRS可以設(shè)置任意的用戶名和密碼,因此本設(shè)計(jì)中使用的用戶名和密碼都為lab。接下來(lái)進(jìn)入IPCP設(shè)置階段。
在IPCP配置過(guò)程中,可以設(shè)置網(wǎng)絡(luò)連接中的網(wǎng)絡(luò)環(huán)境,主要包括協(xié)商分配IP地址、IP壓縮協(xié)議和DNS服務(wù)器地址等。由于不需要進(jìn)行域名的解析和IP壓縮,因而只進(jìn)行IP地址的配置。
經(jīng)過(guò)上述PPP協(xié)議數(shù)據(jù)交換過(guò)程,數(shù)據(jù)鏈路已經(jīng)建立,但是要進(jìn)行數(shù)據(jù)的傳輸,還要進(jìn)行IP協(xié)議和TCP/UDP協(xié)議的實(shí)現(xiàn)。由于Linux內(nèi)核已經(jīng)支持TCP/IP協(xié)議,并且在內(nèi)核配置時(shí)選中支持PPP協(xié)議,就可以完成上述的協(xié)議支持。為了完成上述的PPP協(xié)議實(shí)現(xiàn)過(guò)程,需要在文件系統(tǒng)的/et c文件夾下添加撥號(hào)腳本文件,并且在/usr/bin文件夾下添加應(yīng)用程序pppd和chat。chat程序定義了計(jì)算機(jī)和modem之間的對(duì)話交互,完成撥號(hào)動(dòng)作。pppd后臺(tái)程序則同內(nèi)核ppp驅(qū)動(dòng)一起建立并維護(hù)與另一端的ppp連接,并確定連接兩端的IP地址。
3.4 應(yīng)用層程序
應(yīng)用層程序中包括紅外監(jiān)測(cè)模塊、圖像采集模塊、GPRS無(wú)線傳輸模塊及GSM短信息發(fā)送模塊。下面主要介紹圖像采集模塊與GPRS無(wú)線傳輸模塊的實(shí)現(xiàn)。
3.4.1 圖像采集模塊
在Linux環(huán)境下,編寫獲取視頻音頻的應(yīng)用程序,都使用V4L標(biāo)準(zhǔn),V4L(Video for Linux標(biāo)準(zhǔn)是Linux中通行的音頻視頻流采集標(biāo)準(zhǔn)。它為內(nèi)核、驅(qū)動(dòng)和應(yīng)用程序的交流提供了統(tǒng)一的接口。在應(yīng)用程序中利用V4LAPI獲取視頻圖像按以下幾個(gè)步驟進(jìn)行:打開(kāi)視頻設(shè)備、設(shè)置設(shè)備的屬性(圖像的亮度、對(duì)比度、設(shè)定傳輸格式和傳輸方式)、開(kāi)始傳輸數(shù)據(jù),最后關(guān)閉設(shè)備。
首先,定義與設(shè)備相關(guān)的結(jié)構(gòu)體如下:本文引用地址:http://m.butianyuan.cn/article/152312.htm
struct vldeo_capabil i ty capabi li ty; //視頻設(shè)備的屬性
struct video_window captureWindow; //包含獲取到的圖像的長(zhǎng)和寬
struct video_picture imageProperties; //包含獲取到的圖像屬性
結(jié)構(gòu)體struct video_capabi lity包含視頻設(shè)備的屬性有:視頻設(shè)備的規(guī)范名稱、接口類、所能獲取的最大圖像的寬和長(zhǎng)、所能獲取的最小圖像的寬和長(zhǎng)。其次,要使用ioctl系統(tǒng)調(diào)用,ioctl系統(tǒng)調(diào)用的功能是通過(guò)打開(kāi)的文件描述符對(duì)各種文件,尤其是字符設(shè)備文件進(jìn)行控制,完成特定的I/O操作。V4L支持的ioctl命令大約有二十多個(gè),在應(yīng)用中主要用的是下面幾個(gè)命令:
ioctl(fd,V IDIOCGCAP,&capability); //獲取視頻設(shè)備的基本功能信息
ioctl(fd,VIDIOCGPICT,&picture); //設(shè)置和獲取采集圖像的各種屬性
ioct l(fd,VIDIOCGMBUF,*mbuf); //獲取緩沖區(qū)信息
ioctl(fd,VIDIOCMCAPTURE,mmap); //捕捉圖像,獲取圖像信息
ioctl(fd,VIDIOCSYNC,&frame); //等待捕獲完成的圖像
本設(shè)計(jì)中主要設(shè)置的參數(shù)有:捕獲的圖像大小為320×240像素,圖像幀的調(diào)色板palette值為21,圖像色彩深度為8位。
最后,使用read方法實(shí)現(xiàn)圖像的獲取,read方法則可以直接讀取設(shè)備文件來(lái)獲取一幀數(shù)據(jù)保存到緩沖區(qū)中。通過(guò)convertframe()函數(shù)將pFramebuffer中的數(shù)據(jù)轉(zhuǎn)成完整的jpeg格式的數(shù)據(jù)保存到ptframe緩存中去,再調(diào)用fwrite()函數(shù)將pt-frame緩存中的jpeg式數(shù)據(jù)寫入到指定的文件中去,即得到一幅jpeg格式的圖像。另外要提到的是本設(shè)計(jì)中為了方便服務(wù)器端讀取上傳的圖片,將圖像文件重名為系統(tǒng)時(shí)間格式。這時(shí)需要調(diào)用Linux系統(tǒng)函數(shù)time和1ocaltime。綜上,圖像采集模塊已經(jīng)實(shí)現(xiàn)。
3.4.2 GPRS無(wú)線傳輸模塊
本設(shè)計(jì)中使用socket(套接字)編程技術(shù)來(lái)實(shí)現(xiàn)GPRS網(wǎng)絡(luò)中FTP文件的傳輸,它是網(wǎng)絡(luò)通信中應(yīng)用進(jìn)程和網(wǎng)絡(luò)協(xié)議之間的接口。在Linux操作系統(tǒng)中,socket屬于文件系統(tǒng)的一部分,網(wǎng)絡(luò)通信就像文件讀取一樣方便。并且socket用IP地址加上端口號(hào)來(lái)唯一地標(biāo)志一個(gè)進(jìn)程。利用socket實(shí)現(xiàn)通信就像網(wǎng)絡(luò)上大部分通信一樣,是在客戶機(jī)/服務(wù)器(client/server)模式下進(jìn)行的。這種模式下,將請(qǐng)求服務(wù)的一方稱為客戶端,將提供服務(wù)的一方稱為服務(wù)器端。和大多數(shù)的應(yīng)用程序一樣,客戶端和服務(wù)器端使用傳輸協(xié)議進(jìn)行通信。應(yīng)用程序通過(guò)傳輸協(xié)議進(jìn)行交互時(shí)所用的接口稱為應(yīng)用程序接口(Application Program Interface,API)。一個(gè)API定義了應(yīng)用程序與協(xié)議軟件進(jìn)行交互時(shí)可以使用的一組操作。本設(shè)計(jì)中使用了FTP協(xié)議來(lái)傳輸圖像數(shù)據(jù)文件。一次完整的FTP文件傳輸需要建立兩種類型的連接,一種為文件傳輸下命令,稱為控制連接,另一種實(shí)現(xiàn)真正的文件傳輸,稱為數(shù)據(jù)連接。
本系統(tǒng)中使用socket編程技術(shù)實(shí)現(xiàn)GRPS網(wǎng)絡(luò)中無(wú)線FTP傳輸圖像的具體步驟是這樣的;首先,建立socket客戶端的部分,用來(lái)發(fā)送FTP命令等參數(shù)。調(diào)用socket()創(chuàng)建了套接字,返回了該socket的描述符。接著,將服務(wù)端的IP地址、端口號(hào)和網(wǎng)絡(luò)地址類型(本設(shè)計(jì)中是PF INET,表明該socket在Internet域中進(jìn)行通信)填充到該socket結(jié)構(gòu)體中。然后建立剛創(chuàng)建的套接字的連接,通過(guò)此套接字發(fā)送登錄該FTP服務(wù)器的相關(guān)命令:發(fā)送登錄名和密碼;使用TYPE命令設(shè)置文件的傳輸類型為I。接著,建立作為socket服務(wù)器端的部分,用來(lái)發(fā)送數(shù)據(jù)文件。與socket客戶端不同的是需要先創(chuàng)建socket,然后綁定本地地址(也就是由GPRS系統(tǒng)DHCP分配的IP地址)到該socket上。接著是監(jiān)聽(tīng)這個(gè)socket,當(dāng)監(jiān)聽(tīng)到與socket客戶端(也是FTP服務(wù)器端)連接上時(shí),開(kāi)始請(qǐng)求發(fā)送圖像數(shù)據(jù)文件的命令。這部分實(shí)際也充當(dāng)了FTP的客戶端工作。在監(jiān)聽(tīng)到連接后,使用PORT命令監(jiān)聽(tīng)等待連接的端口,接著使用STOR命令發(fā)送上傳文件的請(qǐng)求。
評(píng)論