新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 一種基于嵌入式系統(tǒng)的增值服務(wù)技術(shù)的設(shè)計(jì)與實(shí)現(xiàn)

一種基于嵌入式系統(tǒng)的增值服務(wù)技術(shù)的設(shè)計(jì)與實(shí)現(xiàn)

作者: 時(shí)間:2008-06-10 來源:網(wǎng)絡(luò) 收藏
摘 要:本文在近年來手機(jī)飛速發(fā)展的背景下,考慮到在人們?nèi)粘I钪袕V泛應(yīng)用的現(xiàn)狀與目前SP(ServiceProvider服務(wù)提供商)的的架構(gòu)體系的特點(diǎn),提出了一種的應(yīng)用解決方案。并且通過對系統(tǒng)的各個(gè)功能模塊的做出詳細(xì)的說明,闡明了整個(gè)增值服務(wù)系統(tǒng)的特點(diǎn)和思想。
關(guān)鍵詞系統(tǒng);增值服務(wù);短信息

1. 引言

近年來,隨著手機(jī)的迅猛發(fā)展,功能的不斷增多,人們對手機(jī)的使用已經(jīng)不再局限于傳統(tǒng)的語音通話上了,而是越來越多地用到了非語音的功能,比如SMS(Short Message Service短信息),彩信等等,也就是手機(jī)增值服務(wù)[1]。而能夠把手機(jī)增值服務(wù)應(yīng)用到嵌入式系統(tǒng)中,使得手機(jī)能夠與嵌入式系統(tǒng)進(jìn)行短信息的交互,那么這樣的一種增值服務(wù)技術(shù)的發(fā)展前景將會(huì)是非常有前途的。本文就是給出了這種增值服務(wù)系統(tǒng)的一個(gè)完整的解決方案。

開發(fā)中,嵌入式系統(tǒng)的程序部分使用的開發(fā)環(huán)境是Keil C,而其余所有的程序均使用Java來編寫,且已經(jīng)成功地移植到Linux平臺(tái)上。此外,下面所提到的SP使用的數(shù)據(jù)庫為SQL Server 2000。下面將對整個(gè)增值服務(wù)系統(tǒng)的進(jìn)行論述。

2. 增值服務(wù)系統(tǒng)的整體架構(gòu)

各大移動(dòng)運(yùn)營商提供給自己的SP的增值服務(wù)體系架構(gòu)和接口都是相似的[2],如中國移動(dòng)的體系架構(gòu),如圖1所示,整個(gè)嵌入式系統(tǒng)的增值服務(wù)系統(tǒng)是由嵌入式系統(tǒng)、增值服務(wù)系統(tǒng)網(wǎng)關(guān)和SP及其內(nèi)嵌的接入模塊組成的。SP負(fù)責(zé)向用戶提供豐富多彩的增值服務(wù),但如果由于資金不足等原因不能申請成為SP時(shí),可以在現(xiàn)有的SP中嵌入一個(gè)接入模塊,同樣可以達(dá)到提供增值服務(wù)的目的,本文介紹的就是這種解決方案。

當(dāng)MS(Mobile Subscriber手機(jī)用戶)想要發(fā)送一條短信息到嵌入式系統(tǒng)時(shí),短信息首先被發(fā)送到基站,基站再把它發(fā)到SMSC(Short Message Service Center短信中心),SMSC通過SMPP協(xié)議(Short Message Peer to Peer短消息點(diǎn)對點(diǎn)協(xié)議)再把短信息轉(zhuǎn)發(fā)到ISMG(Internet Short Message Gateway互聯(lián)網(wǎng)短信網(wǎng)關(guān))[3]。

ISMG是中國移動(dòng)與其SP進(jìn)行通信的門戶,ISMG與SP的通信的底層是TCP/IP協(xié)議,而應(yīng)用層是CMPP(China Mobile Peer to Peer中國移動(dòng)點(diǎn)對點(diǎn)協(xié)議)協(xié)議。


圖1 嵌入式系統(tǒng)的增值服務(wù)系統(tǒng)的整體架構(gòu)原理


然后,SP按照CMPP協(xié)議從ISMG接收到關(guān)于此短信息的所有必要信息(如MS的手機(jī)號(hào)碼,MS點(diǎn)播的服務(wù)代碼等等)后把該條短信息的相關(guān)數(shù)據(jù)傳給SP內(nèi)嵌的接入模塊,然后接入模塊通過TCP/IP發(fā)送到增值服務(wù)系統(tǒng)網(wǎng)關(guān),由網(wǎng)關(guān)解析這些信息并重新編碼,再發(fā)送到PSTN(Public Switched Telephone Network公共開關(guān)電話網(wǎng)絡(luò)),最后由嵌入式系統(tǒng)從PSTN接收到該條短信息的所有信息,并顯示在它的LCD上。至此完成了由MS到嵌入式系統(tǒng)的短信息通信,而由嵌入式系統(tǒng)到MS的短信息通信過程也是類似的[4]

下面,將針對系統(tǒng)各部分的每個(gè)功能模塊逐一地進(jìn)行介紹,并詳細(xì)地?cái)⑹鏊鼈內(nèi)绾?a class="contentlabel" href="http://m.butianyuan.cn/news/listbylabel/label/實(shí)現(xiàn)">實(shí)現(xiàn)的。

3. 嵌入式系統(tǒng)部分

3.1 嵌入式系統(tǒng)的特點(diǎn)和開發(fā)背景

許多嵌入式系統(tǒng)都有串口和LCD,這樣就能夠通過編程與外界通信并顯示信息,但由于嵌入式系統(tǒng)的存儲(chǔ)器容量比較小,在上面開發(fā)程序必須要注意節(jié)約存儲(chǔ)器的使用。此次所用的嵌入式系統(tǒng)是由臺(tái)灣研發(fā)的網(wǎng)絡(luò)信息電話,使用的是8051系列的芯片,擁有兩個(gè)串口,其中一個(gè)與內(nèi)置的Modem相連,可以與外界通信,此外還有一個(gè)128*64的LCD可以用來顯示接收到的短信息,一個(gè)鍵盤用來輸入要發(fā)送的短信息內(nèi)容。整個(gè)嵌入式系統(tǒng)部分的開發(fā)是建立在底層的串口,LCD以及鍵盤的API都已經(jīng)由這家臺(tái)灣公司提供了的基礎(chǔ)上。

3.2 Modem的AT指令簡介

AT指令為所有調(diào)制解調(diào)器制造商所使用的一個(gè)調(diào)制解調(diào)器命令語言。只要用連接線把串口和Modem連接起來,使得可以通過串口向Modem進(jìn)行輸入,就可以讓Modem與Modem之間通過使用AT指令經(jīng)PSTN進(jìn)行通信的。這是由于Modem有兩種工作模式:指令模式與數(shù)據(jù)傳輸模式。

3.3 Modem通訊模塊

表1 Modem通訊模塊的自定義幀

字段

所占字節(jié)

字段

所占字節(jié)

DLE

1

發(fā)送時(shí)間

20

STX

1

保留字段

20

類型

1

內(nèi) 容

160

幀序號(hào)

2

DLE

1

源號(hào)碼

20

ETX

1

目的號(hào)碼

20

Modem通訊模塊是嵌入式系統(tǒng)部分的主體,它負(fù)責(zé)與外界(其它的Modem)進(jìn)行通訊。由于Modem之間的傳輸是連續(xù)的字節(jié)流,因此必須要定義一些建立在數(shù)據(jù)鏈路層上的幀,才能夠把實(shí)際要傳輸?shù)拿總€(gè)數(shù)據(jù)包從連續(xù)的字節(jié)流中區(qū)分出來。如表1所示,DLE STX和DLE ETX都是自定義的常量,數(shù)值是十六進(jìn)制數(shù)的10 02和10 03,分別代表著一個(gè)幀的開始與結(jié)束。如果一個(gè)幀的內(nèi)容中有這兩個(gè)常量,那么可以在發(fā)送此幀時(shí)插入一個(gè)DLE,如10 02插入DLE后變?yōu)?0 10 02,接收此幀時(shí),遇到連續(xù)的10 10就檢查是否緊跟著02,如果是就刪除中間的10,這樣就既可以接收到正確的數(shù)據(jù),又避免了從字節(jié)流中不能正確地截取幀。類型字段有兩種可能值:一種是DATA,即數(shù)據(jù)幀,代表此幀傳輸?shù)氖菙?shù)據(jù);一種是ACK,即確認(rèn)幀,代表此幀是對已收到某一數(shù)據(jù)幀的確認(rèn)。幀序號(hào)是標(biāo)志該幀的唯一標(biāo)志,發(fā)送過程中不斷遞增,達(dá)到最大值后可以循環(huán)使用。由于手機(jī)短信息的英文長度可以長達(dá)160個(gè)字節(jié)(中文為140個(gè)字節(jié)),所以內(nèi)容字段規(guī)定為160個(gè)字節(jié)。對于數(shù)據(jù)幀,內(nèi)容字段存放短信息的內(nèi)容;對于確認(rèn)幀,內(nèi)容字段存放它所指明的已收到數(shù)據(jù)幀的幀序號(hào)。

當(dāng)Modem通訊模塊接收到從MS發(fā)來的短信息時(shí),只是簡單地發(fā)送確認(rèn)幀。當(dāng)Modem通訊模塊發(fā)送短信息到MS時(shí),它把一個(gè)數(shù)據(jù)幀發(fā)送到目的端Modem,然后等待對此數(shù)據(jù)幀的確認(rèn)幀的返回,如果超過一定的時(shí)間還沒有收到返回,Modem通訊模塊將會(huì)重發(fā)此數(shù)據(jù)幀,重發(fā)超過一定的次數(shù)就放棄發(fā)送此數(shù)據(jù)幀。如果在等待確認(rèn)幀的返回時(shí),有新的數(shù)據(jù)幀需要發(fā)送,那么將會(huì)允許發(fā)送一定數(shù)量的數(shù)據(jù)幀,超過這個(gè)數(shù)量以后就不再發(fā)送,直到有對之前發(fā)送幀的確認(rèn)幀返回。

4. 增值服務(wù)系統(tǒng)網(wǎng)關(guān)部分

4.1 功能簡述

圖2 增值服務(wù)系統(tǒng)網(wǎng)關(guān)

增值服務(wù)網(wǎng)關(guān)的主要作用是在PSTN和Internet(數(shù)據(jù)通過TCP/IP傳送)之間進(jìn)行數(shù)據(jù)的轉(zhuǎn)發(fā)。因此定義了兩種類:Frame與ShortMessage。在內(nèi)部,Modem通訊模塊與協(xié)議轉(zhuǎn)換模塊之間傳送的對象是Frame,TCP/IP通訊模塊與協(xié)議轉(zhuǎn)換模塊之間傳送的對象是ShortMessage,F(xiàn)rame與ShortMessage之間通過協(xié)議轉(zhuǎn)換模塊來互相轉(zhuǎn)換。所以網(wǎng)關(guān)的功能就是解析從PSTN收到的包含短信息內(nèi)容的Frame后重新編碼為ShortMessage再發(fā)送到TCP/IP,或者解析從TCP/IP收到的包含短信息內(nèi)容的ShortMessage后重新編碼為Frame再發(fā)送到PSTN。網(wǎng)關(guān)中所有模塊的活動(dòng)都通過調(diào)用日志模塊提供的接口來進(jìn)行日志的記錄。由于協(xié)議轉(zhuǎn)換模塊的實(shí)現(xiàn)比較簡單,而網(wǎng)關(guān)的Modem 通訊模塊跟嵌入式系統(tǒng)的Modem通訊模塊的設(shè)計(jì)思想是相似的,不同的只是網(wǎng)關(guān)的Modem 通訊模塊調(diào)用的是Sun提供的Java的串口API,屏蔽了很多底層的實(shí)現(xiàn)細(xì)節(jié),在開發(fā)中更加容易使用。因此下面只對TCP/IP通訊模塊和日志模塊進(jìn)行說明。

4.2 TCP/IP通訊模塊

本模塊中數(shù)據(jù)包的確認(rèn)/重發(fā)機(jī)制與Modem通訊模塊的策略類似。為了提高工作效率,可以在該模塊內(nèi)建立兩個(gè)隊(duì)列緩沖區(qū):發(fā)送隊(duì)列和接收隊(duì)列,用來存放暫時(shí)還沒有被發(fā)送出去或剛剛接收到的ShortMessage類對象。

發(fā)送時(shí)有兩種策略:長連接和短連接[5]。長連接即在與遠(yuǎn)程主機(jī)第一次建立連接后,就一直保持連接,這樣有數(shù)據(jù)要發(fā)送時(shí)可以隨時(shí)發(fā)送;短連接即有數(shù)據(jù)發(fā)送時(shí)才建立連接,發(fā)送完畢后馬上斷開連接,直到下次有數(shù)據(jù)來到再重新建立連接。長連接的不足之處在于當(dāng)網(wǎng)絡(luò)發(fā)生故障時(shí),之前建立的連接會(huì)被破壞導(dǎo)致無法發(fā)送數(shù)據(jù),還有就是長期占用網(wǎng)絡(luò)資源。短連接的最大缺點(diǎn)是當(dāng)要發(fā)送的數(shù)據(jù)量較多時(shí),建立連接過于頻繁,在建立連接上的開銷太大,但是每次使用新的連接對比起長連接來說較為可靠。本文所提到增值服務(wù)系統(tǒng)中的所有TCP/IP通訊模塊的發(fā)送均采用短連接的策略。

接收時(shí)的策略是生成一個(gè)主線程不斷監(jiān)聽端口上的數(shù)據(jù),如果有新的數(shù)據(jù)來到,則產(chǎn)生一個(gè)新的子線程來處理此次數(shù)據(jù),處理完后該子線程自動(dòng)終止,而主線程則繼續(xù)監(jiān)聽。具體實(shí)現(xiàn)框架如下:

while(true)//主線程run方法體內(nèi)

{

Socket sock = serverSocket.accept();//監(jiān)聽數(shù)據(jù)

Thread childThread = new Thread(sock);

childThread.start();//啟動(dòng)子線程處理此次數(shù)據(jù)

}

4.3 日志模塊

日志對于任何一個(gè)系統(tǒng)來說都是非常重要的,通過日志文件,我們可以查看系統(tǒng)中每一個(gè)細(xì)小的活動(dòng),而且往往可以通過日志來達(dá)到調(diào)試查錯(cuò)的目的。通常需要輸出到日志的信息有三種:1)正常活動(dòng)的信息,比如通訊模塊接收到一個(gè)數(shù)據(jù)包,協(xié)議的一次轉(zhuǎn)換等等;2)發(fā)生錯(cuò)誤的信息,比如由于網(wǎng)絡(luò)故障,接收的數(shù)據(jù)包格式不正確而解析失敗等等;3)調(diào)試的信息:系統(tǒng)處于開發(fā)階段時(shí),開發(fā)人員用來定位錯(cuò)誤的信息,這種信息在開發(fā)完成后則不應(yīng)再輸出到日志中,但是仍然應(yīng)該在程序中保留相關(guān)的語句,因?yàn)橄到y(tǒng)很有可能在未來被發(fā)現(xiàn)有問題,而不得不改進(jìn)程序和再次調(diào)試。

可以建立一個(gè)類LogManager來實(shí)現(xiàn)日志模塊的功能。該類需要提供三個(gè)靜態(tài)方法的接口,它們分別對應(yīng)著上述需要輸出到日志的信息的三種情況,分別是:1)LogManager.log(String info)對應(yīng)正常活動(dòng)的輸出;2)LogManager.error(String info)對應(yīng)發(fā)生錯(cuò)誤時(shí)的輸出;3)LogManager.debug(String info)對應(yīng)調(diào)試的輸出。三種接口輸出到日志文件時(shí)應(yīng)該帶有各自的標(biāo)記和輸出的時(shí)間,具體輸出效果如下:

[ LOG ][2003-08-11 11:41:56]正常活動(dòng)的輸出

[ERROR][2003-08-11 11:41:56]錯(cuò)誤信息的輸出。

[DEBUG][2003-08-11 11:41:56]調(diào)試信息的輸出。

此外可以使用XML文件來管理日志模塊以及整個(gè)增值服務(wù)系統(tǒng)的配置,比如控制調(diào)試信息是否被輸出只需在XML配置文件中增加一個(gè)數(shù)據(jù)項(xiàng),并在LogManager.debug(String info)方法的開頭讀取此數(shù)據(jù)項(xiàng)的值并進(jìn)行判斷,如果不需要輸出調(diào)試信息則直接退出該方法。

5. SP接入模塊部分

5.1 功能簡述

由于申請成為中國移動(dòng)的SP需要一筆為數(shù)不少的資金,所以在資金不充裕的情況下,在現(xiàn)有的SP的增值服務(wù)系統(tǒng)上嵌入一個(gè)接入模塊來提供增值服務(wù)是建立一個(gè)增值服務(wù)系統(tǒng)的理想的廉價(jià)的解決方案。

接入模塊與宿主SP共同完成短信息收發(fā)的整個(gè)過程是這樣的:1)當(dāng)TCP/IP通訊模塊接收到一個(gè)ShortMessage對象后,它就轉(zhuǎn)發(fā)給數(shù)據(jù)庫存取訪問模塊,數(shù)據(jù)庫存取訪問模塊再把該對象轉(zhuǎn)為一條記錄并插入到SQL Server數(shù)據(jù)庫中,然后由宿主SP讀取該條記錄,并與ISMG交互把短信息發(fā)給MS;2)當(dāng)ISMG把一條來自MS的短信息發(fā)給宿主SP后,宿主SP就把該條短信息轉(zhuǎn)為一條記錄插入到數(shù)據(jù)庫中,再由數(shù)據(jù)庫存取訪問模塊讀取出來,并轉(zhuǎn)為一個(gè)ShortMessage對象,傳給TCP/IP通訊模塊發(fā)送到增值服務(wù)系統(tǒng)網(wǎng)關(guān)。

圖3 SP接入模塊部分

SP接入模塊的存在使得我們可以不需要理會(huì)SP與ISMG之間的任何交互,使得復(fù)雜的CMPP協(xié)議對我們不可見。從而大大降低了開發(fā)的難度,并把該模塊內(nèi)的短信息的收發(fā)變?yōu)楹唵蔚膶?shù)據(jù)庫的訪問的過程[6]。

圖3中TCP/IP通訊模塊,日志模塊與增值服務(wù)系統(tǒng)網(wǎng)關(guān)的同名模塊的設(shè)計(jì)與實(shí)現(xiàn)類似,故不再重復(fù)說明。

5.2 數(shù)據(jù)庫存取訪問模塊

此模塊的功能就是使用JDBC來訪問SQL Server 2000數(shù)據(jù)庫,從而完成短信息的收發(fā)。JDBC有多種驅(qū)動(dòng),一般來說使用數(shù)據(jù)庫廠家提供的專用驅(qū)動(dòng)效率更高,這里使用的是通用的sun.jdbc.odbc.JdbcOdbcDriver[7]。主要的操作是對兩個(gè)表進(jìn)行訪問:存放已接收的短信息的表ReceiveSMS和存放要發(fā)送的短信息的表SendSMS。這兩個(gè)表包括了源號(hào)碼,目的號(hào)碼,信息內(nèi)容,接收或發(fā)送的時(shí)間等等重要的字段,其中表ReceiveSMS還有一個(gè)字段IsRead表示該條記錄是否已經(jīng)被讀取過,0表示沒有被讀取,1表示已被讀取過。該模塊的具體運(yùn)作流程過下:1)接收短信息時(shí)讀取表ReceiveSMS中IsRead字段為0的記錄,然后把此次所有被讀取的記錄的IsRead字段置為1,表示該記錄已被讀過,并把讀出的記錄的各個(gè)字段取出,做為新構(gòu)造的ShortMessage對象的屬性值,最后把它傳給TCP/IP通訊模塊;2)發(fā)送短信息時(shí)首先從TCP/IP通訊模塊接收到一個(gè)ShortMessage類對象,并用ShortMessage對象的屬性值作為新構(gòu)造的紀(jì)錄的字段值,最后往SendSMS表中插入該條新紀(jì)錄。

6. 總結(jié)

本文通過對各個(gè)功能模塊設(shè)計(jì)中的難點(diǎn)與重點(diǎn)進(jìn)行了論述,是一種實(shí)用而有前景的增值服務(wù)應(yīng)用。

本文作者創(chuàng)新點(diǎn):提出了一種基于嵌入式系統(tǒng)的增值服務(wù)技術(shù)的應(yīng)用的解決方案,把手機(jī)增值服務(wù)應(yīng)用到嵌入式系統(tǒng)中,使得手機(jī)能夠與嵌入式系統(tǒng)進(jìn)行短信息的交互,這樣的一種增值服務(wù)技術(shù)的發(fā)展前景將會(huì)是非常有前途的。在開發(fā)中,嵌入式系統(tǒng)的程序部分使用的開發(fā)環(huán)境是Keil C,并且已經(jīng)成功地移植到Linux平臺(tái)上。

參考文獻(xiàn)

[1] 徐愛鈞,彭秀華.單片機(jī)高級語言C51 Windows環(huán)境編程與應(yīng)用[M] .北京:電子工業(yè)出版社,2001,11-13.

[2] 胡大可,李培弘,方路平.嵌入式開發(fā)專家――基于單片機(jī)8051的嵌入式開發(fā)指南[M] . 北京:電子工業(yè)出版社,2003.25-26.

[3] 賴麒文.8051單片機(jī)嵌入式系統(tǒng)應(yīng)用[M]. 北京:科學(xué)出版社,2002.55-56.

[4] 徐迎曉.Java語法及網(wǎng)絡(luò)應(yīng)用設(shè)計(jì)[M],北京:清華大學(xué)出版社,2002.30-32.

[5] [美]多納休.美國計(jì)算機(jī)“寶典”叢書――Java數(shù)據(jù)庫編程寶典[M].北京:電子工業(yè)出版社,2003.88-89.

[6] [美]Timothy Budd.面向?qū)ο驤AVA編程思想(修訂版)[M].北京:清華大學(xué)出版社,2002.10-11.

[7] 冉春玉,翟向梅,谷川,面向多ISMG網(wǎng)關(guān)協(xié)議的SMS管理平臺(tái)的研究與設(shè)計(jì)[J]. 微計(jì)算機(jī)信息,2006 Vol.22 No.27:P.143-145

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉