苗 雨
摘要:短信的發(fā)送需要GSM模塊和處理器協(xié)作完成,GSM模塊與ARM處理器通過串口連接,處理器向串口發(fā)送接收AT命令與GSM模塊形成通信回路。中文短信的發(fā)送采用PDU模式,根據(jù)PDU模式標準形成PDU發(fā)送包,實現(xiàn)短信發(fā)送。本文根據(jù)無線電話項目的短信發(fā)送模塊的實際開發(fā)流程編寫,本文內容通過測試。
關鍵詞:GSM;SMS;AT命令;PDU
中圖分類號:TN929文獻標識碼:A文章編號:1009-3044(2008)18-2pppp-0c
Design of Message Sending with GSM Module
MIAO Yu
(Zhuhai College of Jilin University,Zhuhai 519041,China)
Abstract:Sending a message needs GSM module and processor to work together. GSM module and ARM processor are connected through the series. AT order set is the communication protocol between the module and controller. Processor receives and sends AT order through series and forms the loop with the GSM module, then realizes the message sending and receiving. Sending message uses PDU mode. This article introduces the flow of actual research on message sending module.
Key words:GSM;SMS;AT order;PDU
1 引言
2007年全國手機短信發(fā)送量達到5921億條,日均發(fā)送量超過16億條。短信的應用也擴展到各個領域,本文介紹了多媒體電話短消息發(fā)送模塊的實現(xiàn)原理和具體的實現(xiàn)方法。由短消息發(fā)送流程可以了解短信息發(fā)送過程的每一個環(huán)節(jié),對短信息安全,屏蔽垃圾短信有一定的作用。
2 GSM模塊及GSM模塊的短信功能
GSM(Global System for Mobile communication)系統(tǒng)是目前基于時分多址技術的移動通訊體制中比較成熟、完善、應用最廣泛的一種系統(tǒng)。目前已建成的覆蓋全國的GSM數(shù)字蜂窩移動通信網(wǎng),是我國公眾移動通信網(wǎng)的主要方式,主要提供話音、短信息、數(shù)據(jù)等多種業(yè)務?;贕SM短消息功能可以做成傳輸各種檢測、監(jiān)控數(shù)據(jù)信號和控制命令的數(shù)據(jù)通信系統(tǒng),能廣泛用于遠程監(jiān)控、定位導航、個人通信終端等。由于公眾GSM網(wǎng)絡在全球范圍內實現(xiàn)了聯(lián)網(wǎng)和漫游,建立上述系統(tǒng)不須再組建專用通信網(wǎng)絡,所以具有實時傳輸數(shù)據(jù)功能的短消息應用將得到迅速普及。
SMS是由Etsi所制定的一個規(guī)范(GSM 03.40 和 GSM 03.38)。它可以發(fā)送最多160個字符,當使用7-bits編碼的時候,8-bit編碼(最多140個字符)通常無法直接通過手機顯示,通常被用來作為數(shù)據(jù)消息。16-bit信息(最多70個字符)被用來顯示Unicode(UCS2)文本信息,可以被大多數(shù)的手機所顯示。一個以class 0 開頭的16-bit的文本信息將在某些手機上作為Flash SMS顯示。
有兩種方式來發(fā)送和接收SMS信息:使用文本模式或者使用PDU(protocol description unit) 模式。
3 實現(xiàn)中文短信發(fā)送
GSM模塊支持兩種方式來發(fā)送和接收SMS短信息,文本模式和PDU(protocol description unit)模式,文本模式只能發(fā)送普通的Ascill字符,要發(fā)送圖片,鈴聲,其他編碼的字符(如中文)就必須采用PDU模式。
PDU模式中,可以采用三種編碼方式來編碼要發(fā)送的內容,分別是7bit編碼,8bit編碼,16bit編碼,7bit編碼用于發(fā)送普通的Ascill字符,8bit編碼通常用于發(fā)送數(shù)據(jù)信息,如圖片和鈴聲,而16bit編碼用于發(fā)送Unicode字符。三種編碼可以發(fā)送的最大字符分別是160,140,70。
發(fā)送中文短信要采用PDU模式的Unicode編碼方式,具體步驟描述如下:
(1)GB2321編碼到Unicode編碼的轉換
操作系統(tǒng)提供函數(shù)(有些系統(tǒng)不提供,如deltaos)
手動查表
(2)Unicode編碼到16bit編碼的轉換
得到的Unicode編碼后,還需要轉換成PDU的16bit編碼才可以正確的發(fā)送,這個轉換過程中
Unicode編碼最開始的0xffff標志要去掉,在0xffff之后的內容才是真正的Unicode字符。
Unicode是雙字節(jié),根據(jù)系統(tǒng)如果是小端字節(jié)序(little-endian),也就是說,存儲的時候,先存低位再存高位,例如:“中”的Unicode編碼是0x4E2D,儲存的時候是2D4E,在轉換到16bit編碼的時候要轉換順序,如果是大端字節(jié)序(big-endian)如本系統(tǒng),就不需要轉換了。
正確計算16bit編碼的消息體長度,PDU規(guī)范中,包括消息體本身;
正確設置First-Octet,TP-MR,TP-PID,TP-VP在PDU格式中,依次設置為:11,00,00,08,A7(以上都為16進制數(shù))。
(3)形成標準的發(fā)送包。
3.1 短信發(fā)送過程分析
處理器通過向串口發(fā)送接收AT命令與GSM模塊形成通信回路,通過AT命令實現(xiàn)對GSM模塊的基本操作,用于發(fā)送短信的AT命令如表1所示:
表1 發(fā)送短信的AT命令
發(fā)送短信可用文本模式和協(xié)議數(shù)據(jù)單元模式(PDU,protocol data unit)。大多手機不支持文本模式,只支持PDU模式。PDU模式是把短信正文經(jīng)十六進制編碼后被傳送,其編碼總體上分為三個部分:服務中心號、接收方手機號、短信內容,如“你好”短信PDU編碼是這樣的(其中xyz是手機號具體數(shù)字):0891683110200005F011000B8131208698yxFz0008FF044F605970,其意義如表2所示:
表2 發(fā)送數(shù)據(jù)分析
3.2 發(fā)送短信程序流程及主要函數(shù)
(1)接口函數(shù)_SendMessage()
當調用接口函數(shù)_SentMessage(unsigned char *message, unsigned char *telephone, unsigned char telephonetype)時,程序開始進入短信發(fā)送模塊,流程如圖1所示。
圖1SendMessage()函數(shù)流程圖
(2)發(fā)送短信主體函數(shù)Send_SMS();
完成 _SMS_appUnit結構填寫以后,短信發(fā)送的內容及所需信息提取到結構_SMS_appUnit中,為下面對數(shù)據(jù)的處理提供了原始數(shù)據(jù),接下來就調用Send_SMS函數(shù),函數(shù)中的結構_SMS_SUBMIT按照發(fā)送格式定義的結構體,把轉換后的標準數(shù)據(jù)存在結構_SMS_SUBMIT中,形成發(fā)送包。程序流程如圖2所示:
圖2 Send_SMS()函數(shù)流程圖
(3)數(shù)據(jù)處理函數(shù)MakeSSP()
函數(shù)MakeSSP是短信發(fā)送部分重要函數(shù),把struct _SMS_appUnit結構中的數(shù)據(jù)轉換成struct _SMS_SUBMIT_PDU結構,形成發(fā)送包。
4總結
以上詳述了短信發(fā)送模塊實現(xiàn)的步驟,本文內容通過測試??梢詫崿F(xiàn)短信的發(fā)送,響應時間等參數(shù)符合要求。但如果要連續(xù)發(fā)送短信,或短信發(fā)送量要求比較高的情況還需要設計數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)的管理。
參考文獻:
[1]北京科銀京成.Delta System用戶使用手冊[M].北京:北京科銀京成,2003.
[2]愛賽德無線小組.GSM模塊使用文檔(短信部分)[M].杭州:愛賽德無線小組,2002.
[3]Wavecom公司.AT Commands Interface[S].2000.
[4]杜春雷.ARM體系結構與編程[M].北京:清華大學出版社,2003.
收稿日期:2008-04-14
作者簡介:苗雨,男,碩士,研究方向:嵌入式系統(tǒng)、數(shù)據(jù)庫。