基于MTK平臺(tái)的短信控制遠(yuǎn)程終端實(shí)現(xiàn)方案
由圖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è)模塊組成??蛻舳耸侨魏我徊烤哂卸绦磐ㄐ殴δ艿氖謾C(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)容即不同)。
評(píng)論