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