專利名稱:在前后臺(tái)方式設(shè)計(jì)中無(wú)線通訊模塊多種返回狀態(tài)處理方法
在前后臺(tái)方式設(shè)計(jì)中無(wú)線通訊模塊多種返回狀態(tài)處理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通訊技術(shù)領(lǐng)域,尤其涉及一種在前后臺(tái)方式設(shè)計(jì)中無(wú)線通訊模塊多種返回狀態(tài)處理方法。
背景技木近年來(lái),隨著M2M技術(shù)(增強(qiáng)機(jī)器設(shè)備通信和網(wǎng)絡(luò)能力的技術(shù)的總稱)的發(fā)展和應(yīng)用,無(wú)線通訊模塊(這里指通過(guò)移動(dòng)運(yùn)營(yíng)商網(wǎng)絡(luò)接入的模塊,包括GPRS/EDGE/CDMA2000/WCDMA等模塊)在嵌入式系統(tǒng)中的使用越來(lái)越頻繁。無(wú)線通訊模塊可以看作是ー個(gè)手機(jī)的縮影,集成了手機(jī)電話,短信,GPRS(即無(wú)線通訊),電話簿,網(wǎng)絡(luò)設(shè)置等功能。嵌入式系統(tǒng)可通過(guò)AT命令與無(wú)線通訊模塊進(jìn)行數(shù)據(jù)和狀態(tài)的交互。AT命令是ー種調(diào)制解調(diào)器命令語(yǔ)言,終端設(shè)備發(fā)送AT指令來(lái)控制移動(dòng)臺(tái)(Mobile Station,MS)的功能,與GSM或CDMA網(wǎng)絡(luò)業(yè)務(wù)進(jìn)行交互。用戶可以通過(guò)AT指令進(jìn)行呼叫、短信、電話本、數(shù)據(jù)業(yè)務(wù)、傳真等方面的控 制。通過(guò)無(wú)線通訊模塊,嵌入式系統(tǒng)具有了電話功能,短信功能,甚至可以通過(guò)Socket或其他方式連接進(jìn)入互聯(lián)網(wǎng)。通過(guò)運(yùn)營(yíng)商網(wǎng)絡(luò)將設(shè)備與其他設(shè)備有機(jī)的結(jié)合在一起,為實(shí)現(xiàn)了設(shè)備之間信息的交互,提供了物理基礎(chǔ)。目前,嵌入式系統(tǒng)多運(yùn)行于嵌入式操作系統(tǒng)之上,可以通過(guò)多個(gè)任務(wù)或者進(jìn)程來(lái)處理無(wú)線通訊模塊返回的各種信息和狀態(tài)。但是仍然有一定數(shù)量的設(shè)備,由于成本等其他因素的制約而無(wú)法使用嵌入式操作系統(tǒng),而使用了前后臺(tái)方式進(jìn)行程序開(kāi)發(fā)。而這ー類的終端設(shè)備要接入互聯(lián)網(wǎng)或者進(jìn)行短信等方式的交流,就意味著要在唯一的進(jìn)程中處理無(wú)線通訊模塊的多種返回狀態(tài)。一般來(lái)說(shuō),這種前后臺(tái)方式設(shè)計(jì)會(huì)采取ー問(wèn)ー答的方式進(jìn)行。但是由于無(wú)線通訊模塊會(huì)自動(dòng)上報(bào)ー些網(wǎng)絡(luò)信息,基站信息等信息,有可能出現(xiàn)“所問(wèn)非所答”的情況。例如當(dāng)我們需要向無(wú)線通訊模塊詢問(wèn)信號(hào)強(qiáng)度,在發(fā)獲取信號(hào)強(qiáng)度的AT命令過(guò)成中(命令發(fā)送一半)服務(wù)器下發(fā)了ー個(gè)數(shù)據(jù)信息,這時(shí)無(wú)線通訊模塊會(huì)先將數(shù)據(jù)信息返回給系統(tǒng),再返回信號(hào)強(qiáng)度,于是系統(tǒng)在判斷信號(hào)強(qiáng)度吋,實(shí)際上先獲取的是數(shù)據(jù)信息,這種情況下如果不加處理,可能會(huì)丟失ー些重要的狀態(tài)信息甚至引起通訊錯(cuò)誤。在本前后臺(tái)設(shè)計(jì)方案中,代碼為驅(qū)動(dòng)層和應(yīng)用層兩部分,驅(qū)動(dòng)層為應(yīng)用層提供功能API函數(shù),應(yīng)用層不再關(guān)心硬件和驅(qū)動(dòng)實(shí)現(xiàn),只關(guān)心API函數(shù)提供的功能接ロ。無(wú)線通訊模塊是通過(guò)UART接ロ與嵌入式系統(tǒng)的處理器進(jìn)行連接的。
發(fā)明內(nèi)容本發(fā)明要解決的技術(shù)問(wèn)題,在于提供一種在前后臺(tái)方式設(shè)計(jì)中無(wú)線通訊模塊多種返回狀態(tài)處理方法,解決了前后臺(tái)方式的單進(jìn)程中一問(wèn)ー答的工作模式帶來(lái)的所問(wèn)非所答的問(wèn)題。本發(fā)明是這樣實(shí)現(xiàn)的一種在前后臺(tái)方式設(shè)計(jì)中無(wú)線通訊模塊多種返回狀態(tài)處理方法,在前后臺(tái)方式中設(shè)計(jì)三個(gè)處理流程串口中斷服務(wù)程序處理、功能API函數(shù)中的AT緩存命令解析函數(shù)以及狀態(tài)查詢函數(shù)中的狀態(tài)信息處理;
所述狀態(tài)信息將存放于前后臺(tái)方式的驅(qū)動(dòng)層定義的狀態(tài)信息標(biāo)志結(jié)構(gòu)體中,所述結(jié)構(gòu)體中參數(shù)包括新短消息標(biāo)志、新GPRS消息標(biāo)志、新來(lái)電標(biāo)志、對(duì)方掛機(jī)標(biāo)志、主叫狀態(tài)信息標(biāo)志、對(duì)方斷開(kāi)連接標(biāo)志、SIM卡被拔出標(biāo)志、GPRS網(wǎng)絡(luò)錯(cuò)誤標(biāo)志以及SIM卡需要輸入PIN碼標(biāo)志;所述各參數(shù)賦值為O或I,初始值為O ;所述串口中斷服務(wù)程序處理過(guò)程為在所述無(wú)線通訊模塊軟件接ロ中將接收到的無(wú)線通訊模塊返回的信息數(shù)據(jù)進(jìn)行區(qū)分;所述信息數(shù)據(jù)包括無(wú)線通訊模塊返回的AT返回值和無(wú)線通訊模塊返回的GPRS數(shù)據(jù)返回值,所述無(wú)線通訊模塊返回的AT返回值包括AT命令返回值和狀態(tài)信息返回;將區(qū)分開(kāi)的無(wú)線通訊模塊返回的AT返回值和無(wú)線通訊模塊返回的GPRS數(shù)據(jù)返回值分別存入驅(qū)動(dòng)層中的AT緩存區(qū)和數(shù)據(jù)緩存區(qū);所述AT緩存命令解析函數(shù)是在功能API函數(shù)中被調(diào)用的,用于對(duì)AT返回值進(jìn)行處理,該處理的過(guò)程為在前后臺(tái)方式的應(yīng)用層調(diào)用驅(qū)動(dòng)層提供的功能API函數(shù)時(shí),在功能API函數(shù)中調(diào)用ー AT緩存命令解析函數(shù)對(duì)AT緩存區(qū)中的數(shù)據(jù)進(jìn)行解析,并判斷所述AT緩存區(qū)中的數(shù)據(jù)是狀態(tài)信息還是所需要的AT命令返回值;是狀態(tài)信息,則根據(jù)該狀態(tài)信息將所述狀態(tài)信息標(biāo)志結(jié)構(gòu)體中對(duì)應(yīng)的狀態(tài)信息標(biāo)志進(jìn)行置位成1,供所述功能API函數(shù)中的 狀態(tài)查詢功能API函數(shù)調(diào)用時(shí)使用;是AT命令返回值,則正常退出并返回AT返回值;所述狀態(tài)查詢函數(shù)中的狀態(tài)信息處理過(guò)程為驅(qū)動(dòng)層向應(yīng)用層提供所述狀態(tài)查詢函數(shù),狀態(tài)查詢函數(shù)從AT緩存區(qū)中讀取狀態(tài)信息或AT命令返回值并對(duì)該條狀態(tài)信息或AT命令返回值進(jìn)行解析,若是狀態(tài)信息,則根據(jù)該狀態(tài)信息將所述狀態(tài)信息標(biāo)志結(jié)構(gòu)體中對(duì)應(yīng)的狀態(tài)信息標(biāo)志進(jìn)行置位成1,且狀態(tài)查詢函數(shù)最終返回時(shí)將各狀態(tài)信息帶回給應(yīng)用層;若是AT命令返回值,則表示是錯(cuò)誤的AT命令返回值,進(jìn)行丟棄。本發(fā)明具有如下優(yōu)點(diǎn)本發(fā)明在前后臺(tái)方式設(shè)計(jì)中無(wú)線通訊模塊多種返回狀態(tài)處理方法,包括串口中斷服務(wù)程序處理、功能API函數(shù)中的AT緩存命令解析函數(shù)以及狀態(tài)查詢函數(shù)中的狀態(tài)信息處理三個(gè)處理流程;通過(guò)三個(gè)處理流程的組合使用;解決了前后臺(tái)方式的單進(jìn)程中一問(wèn)ー答的工作模式帶來(lái)的所問(wèn)非所答的問(wèn)題,這種機(jī)制使得在前后臺(tái)構(gòu)架中依然能具有復(fù)雜信息條件的處理能力,保證所有信息的準(zhǔn)確性和完整性。
圖I為本發(fā)明的串口中斷服務(wù)程序處理的流程示意圖。圖2為本發(fā)明的各種功能API函數(shù)工作的流程框架示意圖。圖3為本發(fā)明的AT命令解析函數(shù)工作流程示意圖。圖4為本發(fā)明的狀態(tài)查詢函數(shù)具體工作的流程示意圖。
具體實(shí)施方式本發(fā)明的一種在前后臺(tái)方式設(shè)計(jì)中無(wú)線通訊模塊多種返回狀態(tài)處理方法,在前后臺(tái)方式中設(shè)計(jì)三個(gè)處理流程串口中斷服務(wù)程序處理、功能API函數(shù)中的AT緩存命令解析函數(shù)以及狀態(tài)查詢函數(shù)中的狀態(tài)信息處理;所述狀態(tài)信息將存放于前后臺(tái)方式的驅(qū)動(dòng)層定義的狀態(tài)信息標(biāo)志結(jié)構(gòu)體中,所述結(jié)構(gòu)體中參數(shù)包括新短消息標(biāo)志、新GPRS消息標(biāo)志、新來(lái)電標(biāo)志、對(duì)方掛機(jī)標(biāo)志、主叫狀態(tài)信息標(biāo)志、對(duì)方斷開(kāi)連接標(biāo)志、SIM卡被拔出標(biāo)志、GPRS網(wǎng)絡(luò)錯(cuò)誤標(biāo)志以及SIM卡需要輸Λ PIN碼標(biāo)志;所述各參數(shù)賦值為O或1,初始值為O ;所述串口中斷服務(wù)程序處理過(guò)程為在所述無(wú)線通訊模塊軟件接ロ中將接收到的無(wú)線通訊模塊返回的信息數(shù)據(jù)進(jìn)行區(qū)分;所述信息數(shù)據(jù)包括無(wú)線通訊模塊返回的AT返回值和無(wú)線通訊模塊返回的GPRS數(shù)據(jù)返回值,所述無(wú)線通訊模塊返回的AT返回值包括AT命令返回值和狀態(tài)信息返回;將區(qū)分開(kāi)的無(wú)線通訊模塊返回的AT返回值和無(wú)線通訊模塊返回的GPRS數(shù)據(jù)返回值分別存入驅(qū)動(dòng)層中的AT緩存區(qū)和數(shù)據(jù)緩存區(qū);所述AT緩存命令解析函數(shù)是在功能API函數(shù)中被調(diào)用的,用于對(duì)AT返回值進(jìn)行處理,該處理的過(guò)程為在前后臺(tái)方式的應(yīng)用層調(diào)用驅(qū)動(dòng)層提供的功能API函數(shù)時(shí),在功能API函數(shù)中調(diào)用ー AT緩存命令解析函數(shù)對(duì)AT緩存區(qū)中的數(shù)據(jù)進(jìn)行解析,并判斷所述AT緩存區(qū)中的數(shù)據(jù)是狀態(tài)信息還是所需要的AT命令返回值;是狀態(tài)信息,則根據(jù)該狀態(tài)信息將所述狀態(tài)信息標(biāo)志結(jié)構(gòu)體中對(duì)應(yīng)的狀態(tài)信息標(biāo)志進(jìn)行置位成1,供所述功能API函數(shù)中的狀態(tài)查詢功能API函數(shù)調(diào)用時(shí)使用;是AT命令返回值,則正常退出并返回AT返回值;所述狀態(tài)查詢函數(shù)中的狀態(tài)信息處理過(guò)程為驅(qū)動(dòng)層向應(yīng)用層提供所述狀態(tài)查詢函數(shù),狀態(tài)查詢函數(shù)從AT緩存區(qū)中讀取狀態(tài)信息或AT命令返回值并對(duì)該條狀態(tài)信息或AT命令返回值進(jìn)行解析,若是狀態(tài)信息,則根據(jù)該狀態(tài)信息將所述狀態(tài)信息標(biāo)志結(jié)構(gòu)體中對(duì)應(yīng)的狀態(tài)信息標(biāo)志進(jìn)行置位成1,且狀態(tài)查詢函數(shù)最終返回時(shí)將各狀態(tài)信息帶回給應(yīng)用層;若是AT命令返回值,則表示是錯(cuò)誤的AT命令返回值,進(jìn)行丟棄。(因?yàn)樵跊](méi)有主動(dòng)發(fā)出AT命令時(shí),無(wú)線通訊模塊只返回狀態(tài)信息,如果在這里出現(xiàn)了 AT命令返回值就一定是錯(cuò)誤信息);因此狀態(tài)查詢函數(shù)中的狀態(tài)信息處理主要是處理AT緩沖區(qū)中的狀態(tài)信息,AT命令返回值在此流程中不做相應(yīng)處理。本發(fā)明的應(yīng)用層根據(jù)業(yè)務(wù)需要,在需要無(wú)線通訊模塊執(zhí)行某項(xiàng)功能時(shí)通過(guò)調(diào)用驅(qū)動(dòng)層提供的功能API函數(shù)執(zhí)行具體的功能操作;功能API函數(shù)中2次調(diào)用AT命令解析函數(shù),分別執(zhí)行清空AT緩存區(qū)和等待AT返回的操作,保證狀態(tài)信息和AT返回值都能正常的被處理到。其AT緩存命令解析函數(shù)毎次從所述AT緩存區(qū)中讀取一條AT命令返回值或狀態(tài)信息,并由AT緩存命令解析函數(shù)進(jìn)行解析;若AT緩存命令解析函數(shù)解析后判斷是狀態(tài)信息,則根據(jù)該狀態(tài)信息將所述狀態(tài)信息標(biāo)志結(jié)構(gòu)體中對(duì)應(yīng)的狀態(tài)信息標(biāo)志進(jìn)行置位成1,供所述功能API函數(shù)中的狀態(tài)查詢功能API函數(shù)調(diào)用時(shí)使用;若在判定是狀態(tài)信息并標(biāo)志結(jié)構(gòu)體中的狀態(tài)信息標(biāo)志之后,AT緩存命令解析函數(shù)將讀取AT緩存區(qū)中的下一條AT命令返回值或狀態(tài)信息,重復(fù)進(jìn)行處理,直到處理到AT命令返回值或處理超時(shí)時(shí)間到時(shí)為止才退出,AT緩存命令解析函數(shù)可通過(guò)參數(shù)配置為讀空緩存或等待AT返回功能,來(lái)分別執(zhí)行清空AT緩存區(qū)和等待AT返回的操作。。當(dāng)應(yīng)用層需要獲取無(wú)線通訊模塊狀態(tài)時(shí)調(diào)用驅(qū)動(dòng)層提供的所述狀態(tài)查詢函數(shù)進(jìn)行狀態(tài)查詢,可查詢的狀態(tài)信息有SIM卡是否被拔出、是否接收到新數(shù)據(jù)、是否接收到新短消息、是否有新來(lái)電、GPRS數(shù)據(jù)鏈路是否被服務(wù)器斷開(kāi)、電話通話中對(duì)方是否進(jìn)行掛機(jī)操作、以及主叫時(shí)的各種主叫狀態(tài);狀態(tài)查詢函數(shù)僅處理狀態(tài)信息,并將狀態(tài)信息組合成16bit數(shù)據(jù)返回給應(yīng)用層,應(yīng)用層根據(jù)16bit返回值做相應(yīng)的處理;狀態(tài)查詢函數(shù)處理到AT返回值直接視為錯(cuò)誤信息丟棄。
在本發(fā)明中無(wú)線通訊模塊返回的所有AT返回值和GPRS數(shù)據(jù)信息均由所述串ロ中斷服務(wù)程序進(jìn)行接收并分別存放到驅(qū)動(dòng)層所開(kāi)辟的AT緩存區(qū)與數(shù)據(jù)緩存區(qū)中,其中,所述AT緩存區(qū)和數(shù)據(jù)緩存區(qū)均為環(huán)形隊(duì)列形式的緩存區(qū),這樣的緩存區(qū)使得所有數(shù)據(jù)能按順序進(jìn)入,保證數(shù)據(jù)不會(huì)丟失;狀態(tài)查詢函數(shù)和AT緩存命令解析函數(shù)對(duì)同一個(gè)AT緩存區(qū)進(jìn)行操作,并都對(duì)狀態(tài)返回做相應(yīng)的處理,從而保證了所有數(shù)據(jù)不遺漏不被重復(fù)的被處理,且狀態(tài)信息被獨(dú)立的處理,不影響AT返回值的正常返回。其中,所述功能API函數(shù)為各種不同功能的功能API函數(shù),這些功能API函數(shù)在所述應(yīng)用層需要時(shí)被調(diào)用,該些功能API函數(shù)實(shí)現(xiàn)了 AT命令發(fā)送與接收AT命令返回值并進(jìn)行處理的功能函數(shù);所述功能API函數(shù)包括通話主叫功能API函數(shù)、來(lái)電接聽(tīng)功能API函數(shù)、來(lái)電掛斷功能API函數(shù)、短消息讀取功能API函數(shù)、GPRS鏈路建立功能API函數(shù)、GPRS數(shù)據(jù)發(fā)送功能API函數(shù)、GPRS數(shù)據(jù)讀取功能API函數(shù)、GPRS鏈路掛斷功能API函數(shù)、獲取信號(hào)強(qiáng)度的功能API函數(shù)、狀態(tài)查詢功能API函數(shù)。上述各部分組合使用方式如下I、如圖I所示,無(wú)線通訊模塊返回的所有AT返回值和GPRS數(shù)據(jù)信息均由串口中斷服務(wù)程序進(jìn)行接收并做初歩區(qū)分。在串ロ終端服務(wù)程序中定義一局部變量,用來(lái)標(biāo)識(shí)當(dāng) 前接收的數(shù)據(jù)是AT返回值還是GPRS數(shù)據(jù)信息,該變量可稱之為當(dāng)前包類型標(biāo)識(shí),默認(rèn)設(shè)置0,標(biāo)識(shí)為AT返回值;設(shè)置為I時(shí)表示當(dāng)前接收包為GPRS數(shù)據(jù)信息。由于無(wú)線通訊模塊返回的AT返回值有自己的數(shù)據(jù)包結(jié)構(gòu),數(shù)據(jù)包由0x0d,0x0a數(shù)據(jù)為起始,將包起始的OxOd,OxOa數(shù)據(jù)稱之為AT頭;GPRS數(shù)據(jù)信息也同樣有自己的包結(jié)構(gòu),且不同模塊的包結(jié)構(gòu)不同,可根據(jù)模塊實(shí)際的GPRS數(shù)據(jù)信息包的起始數(shù)據(jù)判斷當(dāng)前包為GPRS數(shù)據(jù)信息,將GPRS數(shù)據(jù)信息包起始數(shù)據(jù)稱之為數(shù)據(jù)頭;根據(jù)不同的數(shù)據(jù)包起始信息可將AT返回值與GPRS數(shù)據(jù)信息進(jìn)行區(qū)分,并標(biāo)志當(dāng)前包類型標(biāo)識(shí)為AT返回值或GPRS數(shù)據(jù)信息,在當(dāng)前包接收完成之后將當(dāng)前包類型標(biāo)識(shí)設(shè)置為AT返回值。串口中斷服務(wù)程序接收到完整的AT返回值或GPRS數(shù)據(jù)信息返回值后,將所接收到的AT返回值或GPRS數(shù)據(jù)信息分別存放到驅(qū)動(dòng)層所開(kāi)辟的AT緩存區(qū)與數(shù)據(jù)緩存區(qū)中,接收完成后,將變量重新初始化,其中,所述AT緩存區(qū)和數(shù)據(jù)緩存區(qū)均為環(huán)形隊(duì)列形式的緩存區(qū),這樣的緩存區(qū)使得所有數(shù)據(jù)能按順序進(jìn)入,保證數(shù)據(jù)不會(huì)丟失。2、如圖2所示,應(yīng)用層根據(jù)業(yè)務(wù)需要,在需要無(wú)線通訊模塊執(zhí)行某項(xiàng)具體功能時(shí)通過(guò)調(diào)用驅(qū)動(dòng)提供的功能API函數(shù)執(zhí)行具體的功能操作。功能API函數(shù)首先調(diào)用AT命令解析函數(shù),并設(shè)置AT命令解析函數(shù)的參數(shù)為讀空狀態(tài),以清除AT緩存中的狀態(tài)和無(wú)效的AT數(shù)據(jù)。清空后,根據(jù)不同的功能API函數(shù)的作用,發(fā)送不同的AT命令給無(wú)線通訊模塊,使無(wú)線通訊模塊完成相關(guān)的操作,在發(fā)送完成后,功能API函數(shù)再次調(diào)用AT命令解析函數(shù)并設(shè)置參數(shù)為等待AT返回狀態(tài)用于等待接收無(wú)線通訊模塊操作后的返回值。當(dāng)AT命令解析函數(shù)獲取到一條完成的AT命令返回值時(shí),將該返回值傳遞給功能API函數(shù),由功能API函數(shù)對(duì)返回值進(jìn)行處理,并將處理后的最終結(jié)果返回給應(yīng)用層,使應(yīng)用層獲取應(yīng)用所需的相關(guān)信息。3、功能API函數(shù)通過(guò)調(diào)用AT緩存命令解析函數(shù)毎次從所述AT緩存區(qū)中讀取一條AT命令返回值或狀態(tài)信息并由AT緩存命令解析函數(shù)進(jìn)行解析;若AT緩存命令解析函數(shù)解析后判斷是狀態(tài)信息,則根據(jù)該狀態(tài)信息將所述狀態(tài)信息標(biāo)志結(jié)構(gòu)體中對(duì)應(yīng)的狀態(tài)信息標(biāo)志進(jìn)行置位成1,供所述功能API函數(shù)中的狀態(tài)查詢功能API函數(shù)調(diào)用時(shí)使用;若讀取的信息為狀態(tài)信息,在判定是狀態(tài)信息并標(biāo)志結(jié)構(gòu)體中的狀態(tài)信息標(biāo)志之后,AT緩存命令解析函數(shù)將讀取AT緩存區(qū)中的下一條AT命令返回值或狀態(tài)信息,重復(fù)進(jìn)行處理,直到處理到AT命令返回值或處理超時(shí)時(shí)間到時(shí)退出;功能API函數(shù)提供ー個(gè)輸入?yún)?shù),用于設(shè)置工作狀態(tài),參數(shù)可設(shè)置為進(jìn)行讀空操作(數(shù)值O)或設(shè)置為等待AT返回操作(數(shù)值I)當(dāng)參數(shù)設(shè)置為讀空AT緩存區(qū),且AT緩存命令解析函數(shù)進(jìn)行解析吋,只有AT緩存區(qū)被讀空時(shí)才退出,讀空操作僅處理狀態(tài)信息,而自動(dòng)丟棄AT返回值信息。讀空操作結(jié)束后功能API函數(shù)可進(jìn)行AT命令的發(fā)送,然后功能API函數(shù)再次調(diào)用AT緩存命令解析函數(shù)等待AT命令的返回值,該AT命令的返回值存于所述AT緩存區(qū); 當(dāng)參數(shù)設(shè)置為等待AT命令返回,且AT緩存命令解析函數(shù)進(jìn)行解析吋,只有判斷到非狀態(tài)信息或返回超時(shí)時(shí),AT緩存命令解析函數(shù)將判斷的該條AT命令返回值給調(diào)用該條AT命令返回值的功能API函數(shù),由功能API函數(shù)進(jìn)行處理,并讀取處理后的結(jié)果或應(yīng)用層需 要的數(shù)據(jù)返回給應(yīng)用層。如圖3所示,所述AT命令解析函數(shù)具體工作方式如下首先進(jìn)入AT緩存命令解析函數(shù)入ロ,判斷參數(shù)設(shè)置是否為讀空AT緩存區(qū),是,則讀空AT緩存區(qū)操作,然后判斷是否已讀空,是已讀空則退出,未讀空則判斷是否超時(shí)操作,是超時(shí)操作,則超時(shí)退出并返回錯(cuò)誤,不是超時(shí)操作,則繼續(xù)返回判斷參數(shù)設(shè)置是否為讀空AT緩存區(qū);參數(shù)設(shè)置不是讀空AT緩存區(qū),則讀取一條AT返回值或者狀態(tài)信息,判斷讀取的是否為AT返回值,否,則表明為狀態(tài)信息,處理狀態(tài)信息并標(biāo)志數(shù)據(jù)結(jié)構(gòu)體中的參數(shù),然后繼續(xù)返回判斷參數(shù)設(shè)置是否為讀空AT緩存區(qū);是,則正常退出并返回AT返回值。4、如圖4所示,當(dāng)應(yīng)用層需要獲取無(wú)線通訊模塊狀態(tài)時(shí)調(diào)用驅(qū)動(dòng)層提供的狀態(tài)查詢函數(shù)進(jìn)行狀態(tài)查詢。可查詢的狀態(tài)有SIM卡是否被拔出、是否接收到新數(shù)據(jù)、是否接收到新短消息、是否有新來(lái)電、GPRS數(shù)據(jù)鏈路是否被服務(wù)器斷開(kāi)、電話通話中對(duì)方是否進(jìn)行掛機(jī)操作、以及主叫時(shí)的各種主叫狀態(tài)(詳細(xì)參見(jiàn)狀態(tài)信息組合成16bit的返回值定義)所述狀態(tài)查詢函數(shù)一次從AT緩存區(qū)中讀取一條狀態(tài)信息或AT命令返回值并對(duì)該條狀態(tài)信息或AT命令返回值進(jìn)行解析,解析后是狀態(tài)信息則根據(jù)該狀態(tài)信息將所述狀態(tài)信息標(biāo)志結(jié)構(gòu)體中對(duì)應(yīng)的狀態(tài)信息參數(shù)進(jìn)行置位成I ;如果AT緩存區(qū)中不存在狀態(tài)信息,則進(jìn)入所述狀態(tài)返回功能API函數(shù);在狀態(tài)返回功能API函數(shù)中,將所述結(jié)構(gòu)體中的狀態(tài)信息參數(shù)置位為I的狀態(tài)信息組合成16bit的返回值,其用位表示狀態(tài)標(biāo)志,將該組合成16bit的返回值 帶回給應(yīng)用層;同時(shí)將結(jié)構(gòu)體的各狀態(tài)信息參數(shù)賦值為O ;解析后是AT命令返回值,則表示是錯(cuò)誤的AT命令返回值,進(jìn)行丟棄(因?yàn)樵跊](méi)有主動(dòng)發(fā)出AT命令時(shí),無(wú)線通訊模塊只返回狀態(tài)信息,如果在這里出現(xiàn)了 AT命令返回值就一定是錯(cuò)誤信息);因此狀態(tài)查詢函數(shù)中的狀態(tài)信息處理主要是處理AT緩沖區(qū)中的狀態(tài)信息,AT命令返回值在此流程中不會(huì)做相應(yīng)處理。5、由于所述AT緩存區(qū)和數(shù)據(jù)緩存區(qū)均為環(huán)形隊(duì)列形式的緩存區(qū),這樣的緩存區(qū)使得所有數(shù)據(jù)能按順序進(jìn)入,保證數(shù)據(jù)不會(huì)丟失。狀態(tài)查詢函數(shù)和AT緩存命令解析函數(shù)對(duì)同一個(gè)AT緩存區(qū)進(jìn)行操作,并都對(duì)狀態(tài)返回做相應(yīng)的處理,從而保證了所有數(shù)據(jù)不遺漏不被重復(fù)的被處理,且狀態(tài)信息被獨(dú)立的處理,不影響AT返回值的正常返回。從根本上解決所問(wèn)非所答的問(wèn)題,又保證了所有狀態(tài)數(shù)據(jù)不會(huì)丟失。本發(fā)明的ー實(shí)施例,如應(yīng)用層定時(shí)調(diào)用狀態(tài)查詢函數(shù),處理各種無(wú)線通信模塊上報(bào)的信息,并根據(jù)信息做相應(yīng)的處理I、應(yīng)用層通過(guò)調(diào)用狀態(tài)查詢函數(shù)發(fā)現(xiàn)有新來(lái)電標(biāo)志置位時(shí),應(yīng)用層可調(diào)用來(lái)電接
聽(tīng)功能API函數(shù)或來(lái)電掛斷功能API函數(shù)進(jìn)行處理。2、當(dāng)檢測(cè)到新短消息標(biāo)志置位時(shí),應(yīng)用層可調(diào)用短消息讀取功能API函數(shù)進(jìn)行短
消息內(nèi)容讀取。3、當(dāng)檢測(cè)到新GPRS消息標(biāo)志時(shí),應(yīng)用可調(diào)用GPRS數(shù)據(jù)讀取功能API函數(shù),該函數(shù) 通過(guò)讀取數(shù)據(jù)緩存將數(shù)據(jù)緩存的內(nèi)容返回給應(yīng)用層。4、在數(shù)據(jù)通訊過(guò)程中,等待數(shù)據(jù)返回時(shí)調(diào)用狀態(tài)查詢函數(shù),進(jìn)行網(wǎng)絡(luò)狀態(tài)監(jiān)測(cè),當(dāng)
檢測(cè)到GPRS網(wǎng)絡(luò)錯(cuò)誤標(biāo)志置位是可進(jìn)行相應(yīng)的異常處理。這里值得一提的是結(jié)構(gòu)體定義與狀態(tài)返回接ロ 16bit數(shù)據(jù)結(jié)構(gòu)定義結(jié)構(gòu)體定義
權(quán)利要求
1.一種在前后臺(tái)方式設(shè)計(jì)中無(wú)線通訊模塊多種返回狀態(tài)處理方法,其特征在于在前后臺(tái)方式中設(shè)計(jì)三個(gè)處理流程串口中斷服務(wù)程序處理、功能API函數(shù)中的AT緩存命令解析函數(shù)以及狀態(tài)查詢函數(shù)中的狀態(tài)信息處理; 所述狀態(tài)信息將存放于前后臺(tái)方式的驅(qū)動(dòng)層定義的狀態(tài)信息標(biāo)志結(jié)構(gòu)體中,所述結(jié)構(gòu)體中參數(shù)包括新短消息標(biāo)志、新GPRS消息標(biāo)志、新來(lái)電標(biāo)志、對(duì)方掛機(jī)標(biāo)志、主叫狀態(tài)信息標(biāo)志、對(duì)方斷開(kāi)連接標(biāo)志、SM卡被拔出標(biāo)志、GPRS網(wǎng)絡(luò)錯(cuò)誤標(biāo)志以及SM卡需要輸入PIN碼標(biāo)志;所述各參數(shù)賦值為O或I,初始值為O ; 所述串口中斷服務(wù)程序處理過(guò)程為在所述無(wú)線通訊模塊軟件接ロ中將接收到的無(wú)線通訊模塊返回的信息數(shù)據(jù)進(jìn)行區(qū)分;所述信息數(shù)據(jù)包括無(wú)線通訊模塊返回的AT返回值和無(wú)線通訊模塊返回的GPRS數(shù)據(jù)返回值,所述無(wú)線通訊模塊返回的AT返回值包括AT命令返回值和狀態(tài)信息返回;將區(qū)分開(kāi)的無(wú)線通訊模塊返回的AT返回值和無(wú)線通訊模塊返回的GPRS數(shù)據(jù)返回值分別存入驅(qū)動(dòng)層中的AT緩存區(qū)和數(shù)據(jù)緩存區(qū); 所述AT緩存命令解析函數(shù)是在功能API函數(shù)中被調(diào)用的,用于對(duì)AT返回值進(jìn)行處理,該處理的過(guò)程為在前后臺(tái)方式的應(yīng)用層調(diào)用驅(qū)動(dòng)層提供的功能API函數(shù)時(shí),在功能API函數(shù)中調(diào)用ー AT緩存命令解析函數(shù)對(duì)AT緩存區(qū)中的數(shù)據(jù)進(jìn)行解析,并判斷所述AT緩存區(qū)中的數(shù)據(jù)是狀態(tài)信息還是所需要的AT命令返回值;是狀態(tài)信息,則根據(jù)該狀態(tài)信息將所述狀態(tài)信息標(biāo)志結(jié)構(gòu)體中對(duì)應(yīng)的狀態(tài)信息標(biāo)志進(jìn)行置位成1,供所述功能API函數(shù)中的狀態(tài)查詢功能API函數(shù)調(diào)用時(shí)使用;是AT命令返回值,則正常退出并返回AT返回值; 所述狀態(tài)查詢函數(shù)中的狀態(tài)信息處理過(guò)程為驅(qū)動(dòng)層向應(yīng)用層提供所述狀態(tài)查詢函數(shù),狀態(tài)查詢函數(shù)從AT緩存區(qū)中讀取狀態(tài)信息或AT命令返回值并對(duì)該條狀態(tài)信息或AT命令返回值進(jìn)行解析,若是狀態(tài)信息,則根據(jù)該狀態(tài)信息將所述狀態(tài)信息標(biāo)志結(jié)構(gòu)體中對(duì)應(yīng)的狀態(tài)信息標(biāo)志進(jìn)行置位成1,且狀態(tài)查詢函數(shù)最終返回時(shí)將各狀態(tài)信息帶回給應(yīng)用層;若是AT命令返回值,則表示是錯(cuò)誤的AT命令返回值,進(jìn)行丟棄。
2.根據(jù)權(quán)利要求I所述的在前后臺(tái)方式設(shè)計(jì)中無(wú)線通訊模塊多種返回狀態(tài)處理方法,其特征在于無(wú)線通訊模塊返回的所有AT返回值和GPRS數(shù)據(jù)信息均由所述串口中斷服務(wù)程序進(jìn)行接收并分別存放到驅(qū)動(dòng)層所開(kāi)辟的AT緩存區(qū)與數(shù)據(jù)緩存區(qū)中,其中,所述AT緩存區(qū)和數(shù)據(jù)緩存區(qū)均為環(huán)形隊(duì)列形式的緩存區(qū),這樣的緩存區(qū)使得所有數(shù)據(jù)能按順序進(jìn)入,保證數(shù)據(jù)不會(huì)丟失;狀態(tài)查詢函數(shù)和AT緩存命令解析函數(shù)對(duì)同一個(gè)AT緩存區(qū)進(jìn)行操作,并都對(duì)狀態(tài)返回做相應(yīng)的處理,從而保證了所有數(shù)據(jù)不遺漏不被重復(fù)的被處理,且狀態(tài)信息被獨(dú)立的處理,不影響AT返回值的正常返回。
3.根據(jù)權(quán)利要求I所述的在前后臺(tái)方式設(shè)計(jì)中GPRS模塊多種返回狀態(tài)處理方法,其特征在于所述功能API函數(shù)為各種不同功能的功能API函數(shù),這些功能API函數(shù)在所述應(yīng)用層需要時(shí)被調(diào)用,該些功能API函數(shù)實(shí)現(xiàn)了 AT命令發(fā)送與接收AT命令返回值并進(jìn)行處理的功能函數(shù);所述功能API函數(shù)包括通話主叫功能API函數(shù)、來(lái)電接聽(tīng)功能API函數(shù)、來(lái)電掛斷功能API函數(shù)、短消息讀取功能API函數(shù)、GPRS鏈路建立功能API函數(shù)、GPRS數(shù)據(jù)發(fā)送功能API函數(shù)、GPRS數(shù)據(jù)讀取功能API函數(shù)、GPRS鏈路掛斷功能API函數(shù)、獲取信號(hào)強(qiáng)度的功能API函數(shù)、狀態(tài)查詢功能API函數(shù)。
4.根據(jù)權(quán)利要求I所述的在前后臺(tái)方式設(shè)計(jì)中無(wú)線通訊模塊多種返回狀態(tài)處理方法,其特征在干應(yīng)用層根據(jù)業(yè)務(wù)需要,在需要無(wú)線通訊模塊執(zhí)行某項(xiàng)功能時(shí)通過(guò)調(diào)用驅(qū)動(dòng)層提供的功能API函數(shù)執(zhí)行具體的功能操作;功能API函數(shù)中2次調(diào)用AT命令解析函數(shù),分別執(zhí)行清空AT緩存區(qū)和等待AT返回的操作,保證狀態(tài)信息和AT返回值都能正常的被處理至IJ。
5.根據(jù)權(quán)利要求4所述的在前后臺(tái)方式設(shè)計(jì)中無(wú)線通訊模塊多種返回狀態(tài)處理方法,其特征在于AT緩存命令解析函數(shù)毎次從所述AT緩存區(qū)中讀取一條AT命令返回值或狀態(tài)信息,并由AT緩存命令解析函數(shù)進(jìn)行解析;若AT緩存命令解析函數(shù)解析后判斷是狀態(tài)信息,則根據(jù)該狀態(tài)信息將所述狀態(tài)信息標(biāo)志結(jié)構(gòu)體中對(duì)應(yīng)的狀態(tài)信息標(biāo)志進(jìn)行置位成1,供所述功能API函數(shù)中的狀態(tài)查詢功能API函數(shù)調(diào)用時(shí)使用;若在判定是狀態(tài)信息并標(biāo)志結(jié)構(gòu)體中的狀態(tài)信息標(biāo)志之后,AT緩存命令解析函數(shù)將讀取AT緩存區(qū)中的下一條AT命令返回值或狀態(tài)信息,重復(fù)進(jìn)行處理,直到處理到AT命令返回值或處理超時(shí)時(shí)間到時(shí)為止才退 出,AT緩存命令解析函數(shù)可通過(guò)ー參數(shù)配置為讀空緩存或等待AT返回功能,來(lái)分別執(zhí)行清空AT緩存區(qū)和等待AT返回的操作。
6.根據(jù)權(quán)利要求I所述的在前后臺(tái)方式設(shè)計(jì)中無(wú)線通訊模塊多種返回狀態(tài)處理方法,其特征在于當(dāng)應(yīng)用層需要獲取無(wú)線通訊模塊狀態(tài)時(shí)調(diào)用驅(qū)動(dòng)層提供的所述狀態(tài)查詢函數(shù)進(jìn)行狀態(tài)查詢,可查詢的狀態(tài)信息有SIM卡是否被拔出、是否接收到新數(shù)據(jù)、是否接收到新短消息、是否有新來(lái)電、GPRS數(shù)據(jù)鏈路是否被服務(wù)器斷開(kāi)、電話通話中對(duì)方是否進(jìn)行掛機(jī)操作、以及主叫時(shí)的各種主叫狀態(tài);狀態(tài)查詢函數(shù)僅處理狀態(tài)信息,并將狀態(tài)信息組合成16bit數(shù)據(jù)返回給應(yīng)用層,應(yīng)用層根據(jù)16bit返回值做相應(yīng)的處理;狀態(tài)查詢函數(shù)處理到AT返回值直接視為錯(cuò)誤信息丟棄。
全文摘要
本發(fā)明提供一種在前后臺(tái)方式設(shè)計(jì)中無(wú)線通訊模塊多種返回狀態(tài)處理方法,包括串口中斷服務(wù)程序處理、功能API函數(shù)中的AT緩存命令解析函數(shù)、狀態(tài)查詢函數(shù)中的狀態(tài)信息處理;所述串口中斷服務(wù)程序處理為在無(wú)線通訊模塊軟件接口中接收無(wú)線通訊模塊返回的信息數(shù)據(jù)并進(jìn)行區(qū)分,將區(qū)分開(kāi)的AT返回值和GPRS數(shù)據(jù)返回值分別存入驅(qū)動(dòng)層中的AT緩存區(qū)和數(shù)據(jù)緩存區(qū);然后通過(guò)功能API函數(shù)中的AT緩存命令解析函數(shù)和狀態(tài)查詢函數(shù)中的狀態(tài)信息處理的組合使用,對(duì)AT緩存區(qū)的AT返回值中的AT命令返回值和狀態(tài)信息返回進(jìn)行處理,解決了前后臺(tái)方式的單進(jìn)程中一問(wèn)一答的工作模式帶來(lái)的所問(wèn)非所答的問(wèn)題,保證所有信息都能被完整且正確的解析。
文檔編號(hào)H04W88/02GK102665298SQ201210025710
公開(kāi)日2012年9月12日 申請(qǐng)日期2012年2月6日 優(yōu)先權(quán)日2012年2月6日
發(fā)明者林晉偉, 黃海峰 申請(qǐng)人:福建三元達(dá)軟件有限公司