一種短信收發(fā)系統(tǒng)設計與實現(xiàn)
70 50 91 31 21 25H:短信息發(fā)送時間(SCTS),07年05月19日13時12分52秒;
23H:發(fā)送時間對應的時區(qū);
04H:短信長度(TP-UDL),實際長度4個字節(jié);
4F 60 59 7DH:用戶信息(TP-UD) ,“你好”的Unicode編碼。
4.系統(tǒng)組成
4.1硬件組成
系統(tǒng)由嵌入式Linux系統(tǒng)和西門子MC35模塊通過串行接口三線制連接而構成, MC35模塊通過串口1與嵌入式系統(tǒng)相連,嵌入式系統(tǒng)配置包括50MHz 主頻的MPC860 32位處理器,16M SDRAM內存,2個RS232,操作系統(tǒng)采用嵌入式Linux for PowerPC。MC35模塊由GSM基帶處理器、電源專用集成電路、射頻電路和閃速存儲器等部分組成,負責處理GSM蜂窩設備中的音頻、數(shù)據(jù)信號,內嵌的軟件部分執(zhí)行應用接口和所有GSM協(xié)議棧的功能。GSM 是Global SySTem of Mobile communication(全球移動通訊系統(tǒng))的英文縮寫,是當前應用最為廣泛的移動電話標準。全球超過200個國家和地區(qū)超過10億人正在使用GSM電話。所有用戶可以在簽署了漫游協(xié)定移動電話運營商之間自由漫游。 GSM 較之它以前的標準最大的不同是它的信令和語音信道都是數(shù)字式的,因此GSM被看作是 第二代 (2G)移動電話系統(tǒng)。 這說明數(shù)字通訊從很早就已經(jīng)構建到系統(tǒng)中。GSM是一個當前由3GPP開發(fā)的開放標準。
4.2libcssl函數(shù)庫
為了實現(xiàn)短信收發(fā),需要在嵌入式Linux下通過串口發(fā)送一系列的AT指令。串行通信是計算機與其它設備通信的常用方法,在本系統(tǒng)中采用一個基于Linux的串行通信函數(shù)庫libcssl,可實現(xiàn)串行接口的異步事件驅動并發(fā)。采用該方法,用戶只要在服務器和數(shù)據(jù)源之間建立異步連接,編寫數(shù)據(jù)處理函數(shù),而對數(shù)據(jù)源事件的監(jiān)測、數(shù)據(jù)讀取、多事件的處理等操作是由操作系統(tǒng)內部完成的,因而,很大程度上簡化了編程者的工作,同時保證了較高的資源利用率。
libcssl函數(shù)庫提供給用戶多種基于事件驅動方式的串行接口函數(shù)。其主要的函數(shù)有4類,分別進行串口初始化、收發(fā)數(shù)據(jù)、錯誤信息和結束串口操作。在使用某個串口之前,應調用初始化函數(shù),為其設定相應的參數(shù),使得收發(fā)雙方遵循相同的通信協(xié)議和數(shù)據(jù)格式,同時通過初始化操作,為串口數(shù)據(jù)源和采集服務器之間建立異步連接,分配采集句柄。當數(shù)據(jù)源通過串口向嵌入式系統(tǒng)發(fā)送數(shù)據(jù)時,該數(shù)據(jù)會被送入數(shù)據(jù)緩沖區(qū),并通過該數(shù)據(jù)源的采集句柄訪問該串口的事件回調函數(shù),在該函數(shù)中完成數(shù)據(jù)的處理。相關的函數(shù)如表2所示。
表2 libcssl函數(shù)庫中的主要函數(shù)
4.3軟件設計
使用了異步事件驅動函數(shù)庫,程序設計簡單而容易實現(xiàn),程序主要由2部分組成,即主程序設計和回調函數(shù)程序設計,主程序只需做初始化和發(fā)送短信,其余功能都放在回調函數(shù)中完成。
在主程序中,各變量賦初值,調用cssl_open函數(shù)打開串口,設定的參數(shù)為采用串口1,即嵌入式Linux的ttyS0設備,波特率9600bps,8位數(shù)據(jù)位,1位停止位,無奇偶校驗,無數(shù)據(jù)流控制,定義串口接收數(shù)據(jù)緩沖區(qū)有數(shù)據(jù)輸入時,回調函數(shù)為callback函數(shù),該函數(shù)對數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)進行分析處理。通過發(fā)送AT+CMGF=0指令定義短信模式為PDU模式,并判斷是否有短信需要發(fā)送。
回調函數(shù)中首先讀取輸入緩沖區(qū)內容,根據(jù)對標志和緩沖區(qū)內容的判斷,可以得知回調事件是由哪個事件引起,分別加以處理,由于每次向GSM模塊發(fā)送AT指令后,模塊會發(fā)送OK或ERROR等響應表示操作成功或失敗,所以在回調函數(shù)中一個很重要的功能就是判斷AT指令是否發(fā)送成功,為了區(qū)分不同AT指令的響應,程序中采用狀態(tài)標志,表征系統(tǒng)發(fā)送AT指令的類型。在收到新短信后,需要提取短信發(fā)送方電話號碼、短信發(fā)送時間和短信內容等相關信息,并加以存儲,提取的依據(jù)就是短信接收PDU字符串的編碼格式。相關的流程圖如圖2和圖3所示。
圖2 主程序流程圖
5.結論
本文的創(chuàng)新之處在于提供了嵌入式Linux下GSM模塊的短信收發(fā)系統(tǒng)設計方法,程序設計中利用串行接口驅動函數(shù)庫libcssl,以串口I/O事件驅動設備的數(shù)據(jù)采集。短信收發(fā)采用PDU模式,能夠處理中文、英文和中英文短信。異步事件驅動的架構可以提高系統(tǒng)并發(fā)處理性能,程序能夠執(zhí)行多個異步操作而不調用阻塞線程,降低系統(tǒng)開銷。嵌入式系統(tǒng)加GSM模塊的系統(tǒng)組成體積小巧,非常適合于偏遠地區(qū)或移動的數(shù)據(jù)采集系統(tǒng)。
評論