基于MTK平臺的短信控制遠(yuǎn)程終端實現(xiàn)方案
隨著信息社會的快速發(fā)展,手機已經(jīng)成為現(xiàn)代生活中人們不可缺少的工具。與此同時,手機的快速普及和手機功能的豐富使得僅將其運用于生活和工作中似乎并不能充分發(fā)揮它的全部功能。比如,現(xiàn)階段大部分手機都具有的拍照功能,完全可以將其應(yīng)用于監(jiān)控系統(tǒng)等工業(yè)控制領(lǐng)域;同樣,目前手機都具有的短信通信功能,充分發(fā)揮其廉價和方便的特性,將其運用于智能家居領(lǐng)域,只需要發(fā)送一條對應(yīng)的短信指令便能控制家中對應(yīng)的家用電器。本文結(jié)合手機和短信的各自特性,通過手機發(fā)送短信控制基于MTK平臺的遠(yuǎn)程終端,在遠(yuǎn)程終端接上負(fù)載(比如電飯煲、攝像頭),遠(yuǎn)程終端在接收到固定指令的短信后控制外接負(fù)載的開斷,便可實現(xiàn)短信控制基于MTK平臺的遠(yuǎn)程終端。在本文所介紹的系統(tǒng)中,只需要發(fā)送一條短信內(nèi)容為“on”的指令,便可打開遠(yuǎn)程終端的外接負(fù)載,操作完成后MTK遠(yuǎn)程終端根據(jù)控制情況自動回復(fù)一條操作是否成功的信息;發(fā)送一條短信內(nèi)容為“off”的指令便可關(guān)斷遠(yuǎn)程終端的外接負(fù)載,操作完成后MTK遠(yuǎn)程終端根據(jù)控制情況自動回復(fù)一條操作是否成功的信息;若接收到其他指令,則不對遠(yuǎn)程終端的外接負(fù)載采取任何操作,也不回復(fù)信息給客戶。
1 MTK平臺介紹
1.1 MTK硬件平臺
MTK(MediaTek)是臺灣聯(lián)發(fā)科技多媒體芯片提供商的簡稱,其生產(chǎn)的手機基帶芯片有MT6205、MT6217、MT6218、MT6219、MT6235等。在MTK手機方案家族中,內(nèi)部集成了ARM7核和DSP核的MT6225以其優(yōu)越的無線通信特性成為目前使用最廣泛、最穩(wěn)定、最成熟的手機開發(fā)平臺,從2005年推出到現(xiàn)在,出貨芯片數(shù)量可以億來計算。
1.2 MTK軟件架構(gòu)
MTK軟件架構(gòu)和硬件相結(jié)合作為遠(yuǎn)程終端的開發(fā)平臺,軟件架構(gòu)對于開發(fā)尤為重要。圖1所示為MTK平臺軟件整體架構(gòu)。
圖1 MTK平臺軟件構(gòu)架
MTK的軟件架構(gòu)用到了層的概念,它將各功能模塊分為不同的層,每個層實現(xiàn)其各自的功能特性。整個軟件構(gòu)架主要由Remote MMI、MMI、L4、Drivers和PS/L1幾個部分構(gòu)成。Remote MMI即RMI,如PC端,可使用AT命令通過串口與協(xié)議棧通信;L4為MMI/AT與協(xié)議棧之間的適配層;Drivers包含設(shè)備及外圍設(shè)備的各種驅(qū)動;PS/L1中的L1(Layer1)為協(xié)議棧的最底層,它是GSM的物理層,直接處理信號數(shù)據(jù);另外,協(xié)議棧里面的L2和L3包含大量的GSM/GPRS需求,而且提供一個優(yōu)秀的GGSM/GPRS平臺給應(yīng)用程序;MMI即Man Machine Interface,通常稱為人機界面,它分為文字界面和圖形界面兩種。MMI包括用戶的接口構(gòu)架、應(yīng)用以及與協(xié)議棧的通信,MMI的構(gòu)架如圖2所示。
圖2 MMI架構(gòu)圖
由圖2可知,MMI主要由Application Layer、Framework和UI Layer三個部分組成。
?、?Application Layer: 主要包括用戶自己定義的程序,用來實現(xiàn)各種功能。如果用戶需要在MTK的平臺上添加一些功能,這些功能的程序就是在這個地方添加。
?、?Framework:由事件處理、歷史機制、OSL、文件系統(tǒng)和NVRAM組成,它接收來自所有任務(wù)的時間,幫助應(yīng)用程序控制屏幕,并提供給應(yīng)用程序各種系統(tǒng)調(diào)用接口。
?、?UI Layer:包含Category Screens、UI Elements、Themes、Fonts、Image和Graphics Library,它為應(yīng)用程序提供界面顯示的相關(guān)功能。
本系統(tǒng)的遠(yuǎn)程終端的實現(xiàn)選用的手機基帶芯片為MTK6225,選用它的主要原因是其具有成熟的硬件基礎(chǔ)和軟件架構(gòu)以及高性價比。
2 系統(tǒng)框架
圖3為基于MTK平臺的短信控制遠(yuǎn)程終端的總體框架。系統(tǒng)由客戶端、遠(yuǎn)程終端、負(fù)載3個模塊組成??蛻舳耸侨魏我徊烤哂卸绦磐ㄐ殴δ艿氖謾C;遠(yuǎn)程終端為以MTK6225為主控芯片的MTK平臺,利用MTK平臺的短信模塊功能及其閑置的GPIO口實現(xiàn)對負(fù)載(需要遠(yuǎn)程控制的對象)的控制。
圖3 基于MTK平臺的短信控制遠(yuǎn)程終端的總體框架
3 系統(tǒng)實現(xiàn)
3.1 MTK6225 GPIO口的驅(qū)動
GPIO[3](General Purpose Input Output,通用輸入輸出端口)。MTK6225提供了53個通用輸入/輸出口和4個通用輸出口。MTK通過對I/O口的復(fù)用來減少I/O端口的個數(shù),每個GPIO口有4種工作模式,即模式0~3。每個GPIO口都可通過軟件配置為輸入、輸出或特定用途的雙向口。其被用作輸入使用時,GPIO口可作為中斷源。本文選擇GPIO口GPIO45的模式0,即配置端口為輸入/輸出模式。在MTK6225的平臺中,對GPIO的操作有以下3步:
?、?確定要操作的引腳是在GPIO模式。通過函數(shù)GPIO_ModeSetup(kal_uint16 pin,kal_uint16 conf_data)設(shè)置。其中pin為端口號,conf_data為模式的選擇。本文試驗中對GPIO模式的設(shè)置如下。GPIO_ModeSetup((kal_uint16)GPIO_port_45, (kal_uint16)0)
?、?配置該引腳為輸入/輸出。通過函數(shù)void GPIO_InitIO(char direction,char port)設(shè)置。其中direction為輸入INPUT(0)或者輸出OUTPUT(1),port為端口號。本文試驗中對GPIO口的輸入/輸出設(shè)置如下,設(shè)置GPIO45為輸出,即可通過它的輸出信息來控制外接負(fù)載。GPIO_InitIO((char)1, (char)GPIO_PORT_45)
?、?讀寫數(shù)據(jù)。通過函數(shù)void GPIO_WriteIO(kal_char data,kal_char port)設(shè)置,其中data為1(高電平)或者0(低電平),port為端口號。本文試驗中對GPIO口引腳寫數(shù)據(jù)操作如下。GPIO45輸出高電平,即可打開外接負(fù)載;GPIO34輸出低電平,即可關(guān)斷外接負(fù)載。GPIO_WriteIO((char)1,(char)GPIO_PORT_45)GPIO_WriteIO((char)0,(char)GPIO_PORT_34)
在本文所做試驗中,對GPIO初始化成功并對GPIO端口讀寫數(shù)據(jù)完成后,需要通過函數(shù)GPIO_ReadIO(char port)來讀取GPIO端口的狀態(tài),通過讀取其端口狀態(tài)來和寫到GPIO口的數(shù)據(jù)相比較,若匹配則說明控制成功,反之則失敗,其中port為端口號。
3.2 MTK的短信模塊
3.2.1 MTK短信接收的流程
從函數(shù)InitializeAll()中初始化開始,到信息顯示在MTK的手機界面,提示用戶讀取信息的過程中經(jīng)歷中斷、協(xié)議處理、MMI層收到新短信,更新短信計數(shù)器,轉(zhuǎn)換短信數(shù)據(jù),并壓入未讀短信隊列等操作。
3.2.2 MTK發(fā)送短信息的核心函數(shù)
相比于日常生活中短信通信不同的是此平臺是根據(jù)對遠(yuǎn)程終端的控制情況而自動回復(fù)的。自動回復(fù)信息需要知道發(fā)送短信到MTK遠(yuǎn)程終端的手機的號碼,還需要自填充自動回復(fù)的短信內(nèi)容。void mmi_frm_sms_send_sms_seg(void)為MTK6225發(fā)送短信的核心函數(shù),自動回復(fù)是在此函數(shù)的基礎(chǔ)上將發(fā)送短信到MTK終端的手機號碼作為該函數(shù)的形參,對發(fā)送內(nèi)容的自填充也在該函數(shù)中定義:char * content="the bulb turn on successfully";(此處即為根據(jù)接收到的指令對外接負(fù)載采取操作后,自動回復(fù)信息的內(nèi)容,根據(jù)操作結(jié)果不同自填充短信內(nèi)容即不同)。
3.2.3MTK接收短信息數(shù)據(jù)結(jié)構(gòu)體
MTK將收到的短信息的相關(guān)參數(shù)打包成結(jié)構(gòu)體,以下為MTK關(guān)于接收到短信內(nèi)容相關(guān)信息的結(jié)構(gòu)體。MTK平臺每一條短信的內(nèi)容分成若干段,一個字節(jié)為一段。其中no_msg_data為接收到的段數(shù),數(shù)組msg_data[1]接收到的信息的第一段數(shù)據(jù),以接收到的第一段的數(shù)據(jù)為索引,解析接收到內(nèi)容后通過判斷遠(yuǎn)程終端接收到的短信內(nèi)容來對遠(yuǎn)程終端外接負(fù)載采取相應(yīng)操作。
typedef struct{
……
U16 no_msg_data;
U8 msg_data[1];
} mmi_frm_sms_deliver_msg_struct;
3.3 MTK遠(yuǎn)程終端的控制程序流程
基于MTK平臺的遠(yuǎn)程控制終端在接收到控制信息后,MTK自動回復(fù)和對負(fù)載采取操作的代碼在函數(shù)void mmi_frm_sms_new_sms_ind(void *inMsg)中被調(diào)用。此函數(shù)的功能是將L4層的數(shù)據(jù)轉(zhuǎn)換成MMI層的數(shù)據(jù),并對接收到的數(shù)據(jù)進(jìn)行處理,直至顯示到遠(yuǎn)程終端界面上。將MTK作為遠(yuǎn)程終端,不需要將接收到的控制負(fù)載的信息顯示在界面上,所以為了屏蔽發(fā)送來的信息顯示在終端界面,應(yīng)把接收到的短信添加到短信記錄中的函數(shù)CHISTIncRecvdSMS注釋掉。裝有SIM卡的遠(yuǎn)程終端經(jīng)常收到如10086之類的服務(wù)信息,為了屏蔽這些不必要的信息,對發(fā)送信息進(jìn)來的號碼長度進(jìn)行判斷,加上中國的電話區(qū)位號86,則若為手機發(fā)送一共為13位。由于MTK的代碼是分模塊的,當(dāng)在短信模塊中調(diào)用其他模塊的函數(shù)時,就需要在這個函數(shù)被調(diào)用的文件里面加上相應(yīng)的頭文件。圖4為條件判斷和對打開/關(guān)斷負(fù)載的函數(shù)的調(diào)用以及對短信自動回復(fù)的函數(shù)的調(diào)用情況。
圖4 遠(yuǎn)程終端控制負(fù)載及自動回復(fù)流程
3.4 試驗結(jié)果
將一支發(fā)光二極管作為遠(yuǎn)程控制終端的外接負(fù)載,正極接MTK6225的GPIO45,負(fù)極接MTK6225的GND,GPIO45默認(rèn)為低電平,剛接上時發(fā)光二極管處于熄滅狀態(tài)。用手機發(fā)送短信內(nèi)容為“on”的指令到基于MTK平臺的遠(yuǎn)程控制終端時,發(fā)光二極管亮,遠(yuǎn)程控制終端返回信息“ the bulb turn on successfully”;用手機發(fā)送短信內(nèi)容為“off”的指令到基于MTK平臺的遠(yuǎn)程控制終端時,發(fā)光二極管熄滅,遠(yuǎn)程控制終端返回信息“ the bulb turn off successfully”。發(fā)送其他內(nèi)容的短信指令到遠(yuǎn)程控制終端時,發(fā)光二極管沒有響應(yīng)且不返回任何信息。試驗結(jié)果表明,基于MTK的短信控制遠(yuǎn)程終端的方案切實可行。
結(jié)語
充分發(fā)揮MTK平臺高性價比的優(yōu)勢, 提出將MTK手機平臺應(yīng)用于控制領(lǐng)域,設(shè)計了基于MTK平臺的短信控制遠(yuǎn)程終端的實現(xiàn)方案,并通過試驗驗證了該方案的可行性。該方案具有成本低、開發(fā)周期短、組網(wǎng)方便、易于擴展等優(yōu)點,為通信和控制相關(guān)領(lǐng)域的研究和開發(fā)人員提供了參考。