基于CGI的無(wú)線(xiàn)路由中短信功能設計
摘要:移動(dòng)通信中的短消息是人們無(wú)線(xiàn)溝通的重要方式,更以其方便、可靠性得到廣泛應用。針對嵌入式無(wú)線(xiàn)路由的迅速普及,為實(shí)現良好人機交互,提出將短消息功能植入可使用上網(wǎng)卡的無(wú)線(xiàn)路由的動(dòng)態(tài)Web中。用C語(yǔ)言進(jìn)行CGI程序設計,采用PDU短信模式,實(shí)現無(wú)線(xiàn)路由設備中短信的收發(fā)。實(shí)驗結果也證實(shí)了此方案的正確性、實(shí)用性和可擴展性。
關(guān)鍵詞:無(wú)線(xiàn)路由;動(dòng)態(tài)Web;CGI;短信;PDU
為實(shí)現良好的人機交互及遠程控制功能,如今大部分嵌入式Linux設備均引入Web服務(wù)器技術(shù),無(wú)線(xiàn)路由的迅速普及更體現了這一點(diǎn)。Goa head是一款主要面向嵌入式系統的Web服務(wù)器,因其支持asp、cgi且兼容性良好備受無(wú)線(xiàn)路由等嵌入式設備的青睞。而通用網(wǎng)關(guān)接口(CGI)則是Web服務(wù)器與為添加功能編寫(xiě)的外部程序之間的一個(gè)接口。市面普及的無(wú)線(xiàn)路由器,管理界面鮮有收發(fā)短信的功能,這樣用戶(hù)可用功能受到限制。通過(guò)這個(gè)CGI接口實(shí)現從Web端編輯短信并發(fā)送,及上網(wǎng)卡接收短信并顯示與Web端等功能,實(shí)現了無(wú)線(xiàn)路由更智能的一面。
1 嵌入式無(wú)線(xiàn)路由中的CGI技術(shù)
1.1 CGI工作原理
通用網(wǎng)關(guān)接口是Web服務(wù)器和外部擴展程序之間的一個(gè)接口。CGI可以使編寫(xiě)的程序處理WWW上客戶(hù)端送來(lái)的表單和數據并對此做出相應反應。而且基于CGI的網(wǎng)頁(yè)應用程序可工作于不同的瀏覽器平臺,兼容性良好。
CGI程序的工作一般分為以下幾個(gè)步驟:
1)客戶(hù)端發(fā)出請求;
2)Web服務(wù)器激活相應的CGI程序;
3)CGI程序對客戶(hù)端的請求做出反應;
4)Web服務(wù)器將CGI程序的處理結果傳送給客戶(hù)端;
5)Web服務(wù)器中斷和客戶(hù)端瀏覽器的連接;
6)Web服務(wù)器將CGI程序的輸出顯示在瀏覽器的窗體上。
1.2 CGIC函數庫
CGIC是用來(lái)生成基于CGI的WWW應用程序的C語(yǔ)言函數庫,C語(yǔ)言編程是一項復雜且容易出錯的工作,選擇合適的庫CGIC成為必要。一般的Linux系統都支持ANSIC,增加相應的庫函數和相應的h文件就可以實(shí)現CGI;而CGIC是一個(gè)完全符合ANSIC標準的程序庫,在任何支持ANSIC標準的系統平臺上都可以使用。
它有以下功能:
1)對數據進(jìn)行語(yǔ)法分析;
2)接收以GET和POST兩種方式發(fā)送的數據;
3)把FORM中的不同域連接成連續的串;
4)為檢索FORM數據而提供字符串,整數,浮點(diǎn)以及單項和多項選擇功能;
5)為數字字段提供邊界檢測;
6)把CGI環(huán)境變量加載到非空的C串中;
7)為調試而捕捉CGI狀態(tài);
8)提供相對安全的系統調用功能。
CGIC本身提供了一個(gè)main()函數,CGIC的用戶(hù)編寫(xiě)的程序代碼應該放在函數cgiMain()中。CGIC的main()函數主要用來(lái)完成CGI程序的初始化工作、獲取客戶(hù)端用戶(hù)的輸入以及相應的解碼工作,最后main()函數會(huì )調用cgiMain()以執行用戶(hù)編寫(xiě)的程序代碼。
2 短信功能設計
短信息服務(wù)作為目前最方便快捷的交流方式,工作原理也變得越來(lái)越標準化。通常對短消息的控制有3種實(shí)現途徑:Block模式,基于A(yíng)T命令的Text模式和基于A(yíng)T命令的PDU模式。使用Text模式收發(fā)短信代碼簡(jiǎn)單,但最大的缺點(diǎn)是不能收發(fā)中文短信;而PDU模式不僅支持中文短信,也能發(fā)送英文短信。本文主要使用的是在Linux下用C語(yǔ)言來(lái)實(shí)現PDU模式的SMS收發(fā)。
2.1 PDU模式下短信發(fā)送原理
一個(gè)完整的SMS消息所包含的所有報頭信息被以二進(jìn)制字符串格式傳送。這個(gè)二進(jìn)制由十六進(jìn)制格式的IA5字符組合而成。一般的PDU碼由13項組成:1)短信息中心地址長(cháng)度,2位十六進(jìn)制數(1字節);2)短信息中心號碼類(lèi)型,2位十六進(jìn)制數;3)短信息中心號碼,2)和3)的長(cháng)度由1)中數據決定;4)文件頭字節,2位十六進(jìn)制數;5)信息類(lèi)型,2位十六進(jìn)制數;6)被叫號碼長(cháng)度,2位十六進(jìn)制數;7)被叫號碼類(lèi)型,2位十六進(jìn)制數,取值同短信息中心號碼類(lèi)型;8)被叫號碼,長(cháng)度由被叫號碼長(cháng)度中的數據決定;9)協(xié)議標識,2位十六進(jìn)制數;10)數據編碼方案,2位十六進(jìn)制數;11)有效期,2位十六進(jìn)制數;12)用戶(hù)數據長(cháng)度,2位十六進(jìn)制數。13)用戶(hù)數據,其長(cháng)度由用戶(hù)數據長(cháng)度中的數據決定。數據編碼方案中設定采用UCS2編碼,這里是中英文的Unicode字符。
常用AT命令如下表所示:
2.2 PDU模式編碼
用PDU模式收發(fā)短消息可以使用3種編碼:7-bit編碼、8-bit編碼和USC2編碼。7-bit編碼用于發(fā)送普通的ASCII字符;8-bit編碼通常用于發(fā)送數據消息,如圖片或鈴聲等;USC2編碼用于發(fā)送Unicode字符。由于短信需實(shí)現中文短信的發(fā)送,所以選擇用UCS2編碼,即中文Unico de碼。這些編碼均有標準算法。
3 軟件設計
3.1 串口通信
嵌入式無(wú)線(xiàn)路由是通過(guò)串口發(fā)送一系列AT命令實(shí)現與無(wú)線(xiàn)路由的各種通信,短消息的收發(fā)也是通過(guò)這種方式。串口通信是計算機與其他設備通信的常用方法,本系統采用libcsms這個(gè)基于Linux的串行通信函數庫,來(lái)實(shí)現串行接口的異步事件驅動(dòng)并發(fā)。采用該方法,只需要在cgi中編寫(xiě)數據處理函數,大大提高了工作效率。
3.2 短信發(fā)送頁(yè)面設計
Html代碼發(fā)送短信部分,為簡(jiǎn)化cgi程序工作,在web端通過(guò)腳本函數ucs2_code()將短信內容先做處理。ucs2_code()函數具體功能為:讀取短信內容,循環(huán)獲取短信的每一位并通過(guò)charCodeAt()和toString()方法結合轉換為單獨的Unicode碼,再根據長(cháng)度補齊;如此得到整個(gè)短信內容的Unicode碼及此編碼的長(cháng)度。
再通過(guò)form提交表單,提交內容有:手機號碼,手機內存寫(xiě)入狀態(tài),處理后的短信Unicode碼和長(cháng)度。部分代碼如下:
3.3 CGI發(fā)送短消息
Cgi發(fā)送短信主函數處理消息部分通過(guò)環(huán)境變量,讀取form表單提交的值;先讀取手機號碼,若成功則處理手機號碼后繼續讀取短信內容的Unicode碼,若成功則讀取短信長(cháng)度,若成功則將短消息參數結構中的SMSC地址的變量賦相應值。再讀取短信是發(fā)送還是保存的狀態(tài)。如此完成整個(gè)web頁(yè)面短消息的處理過(guò)程。
發(fā)送短信主函數部分代碼如下所示:
發(fā)送短消息在gsmSendMessage中實(shí)現,先根據PDU參數,編碼PDU串;再通過(guò)PDU串和其中SMSC信息的長(cháng)度,生成發(fā)送命令。向串口輸入命令,根據返回值ans判斷模塊是否準備就緒,是則繼續輸入PDU串,返回TRUE,則發(fā)送成功;否則返回FALSE。
發(fā)送短信流程圖如圖1所示。
4 結束語(yǔ)
設計的創(chuàng )新之處在于提供了基于CGI的嵌入式無(wú)線(xiàn)路由中上網(wǎng)卡模塊的短信收發(fā)功能的設計方法。短信收發(fā)采用PDU模式處理中文、英文短信;功能是通過(guò)用C語(yǔ)言編寫(xiě)的CGI實(shí)現。在web端與iavascript結合,實(shí)現動(dòng)態(tài)web的高效運行。對于基于Linux的無(wú)線(xiàn)路由設備已慢慢滲透人們日用的各個(gè)角落成為必需品,如果將短信收發(fā)功能添加其中,更能增加此設備智能的功能,為用戶(hù)提供更便利的服務(wù)。
評論