無線通訊模塊的數(shù)據(jù)上傳方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明主要涉及無線通信技術(shù),特別地,涉及一種無線通訊模塊的數(shù)據(jù)上傳方法。
【背景技術(shù)】
[0002]隨著無線通信技術(shù)的發(fā)展,無線通訊模塊在各個(gè)行業(yè)的應(yīng)用越來越廣泛,主要用來實(shí)現(xiàn)設(shè)備與外部設(shè)備之間無線通信。在某些情況下,無線通訊模塊可能需要向FTP(FileTransfer Protocol,文件傳輸協(xié)議)服務(wù)器上傳數(shù)據(jù),傳統(tǒng)的無線通訊模塊主要是通過AT命令,比如FTPST0R命令和FTPPUT命令,向FTP服務(wù)器上傳數(shù)據(jù)。由于無線通訊模塊上傳的速率限制,對(duì)于采用FTPST0R命令一次性發(fā)送大數(shù)據(jù)(比如2MB以上的大數(shù)據(jù))或者采用FTPPUT命令執(zhí)行大字節(jié)和高速率(比如3072字節(jié)每秒的上傳速率)的上傳操作時(shí),容易在數(shù)據(jù)上傳過程中出現(xiàn)數(shù)據(jù)丟失的情況,也即是數(shù)據(jù)無法正確地上傳到FTP服務(wù)器。
[0003]有鑒于此,有必要提供一種可以解決數(shù)據(jù)丟失的無線通訊模塊的數(shù)據(jù)上傳方法。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的主要目的在于為解決上述問題而提供了一種無線通訊模塊的數(shù)據(jù)上傳方法。
[0005]本發(fā)明提供的無線通訊模塊的數(shù)據(jù)上傳方法,包括:(A)無線通訊模塊跟FTP服務(wù)器建立FTP數(shù)據(jù)連接之后,動(dòng)態(tài)分配一個(gè)全局的發(fā)送緩存,并控制所述無線通訊模塊進(jìn)入ODM模式;(B)所述無線通訊模塊接收上層應(yīng)用程序發(fā)送的ODM數(shù)據(jù),并將所述ODM數(shù)據(jù)放入所述發(fā)送緩存;(C)所述無線通訊模塊將所述發(fā)送緩存的數(shù)據(jù)通過所述FTP數(shù)據(jù)連接上傳給所述FTP服務(wù)器。
[0006]作為本發(fā)明提供的無線通訊模塊的數(shù)據(jù)上傳方法的一種改進(jìn),在步驟(A)中,所述無線通訊模塊通過函數(shù)FTP_Enter_0DM來控制模塊進(jìn)入ODM模式,并且,所述函數(shù)FTP_Enter_0DM 定義有函數(shù)指針 FTP_Data_Push_ODM。
[0007]作為本發(fā)明提供的無線通訊模塊的數(shù)據(jù)上傳方法的一種改進(jìn),在步驟(B)中,所述無線通訊模塊在接收到來自上層應(yīng)用程序的ODM數(shù)據(jù)時(shí),調(diào)用所述函數(shù)指針FTP_Data_Push_0DM ;并且,如果在所述函數(shù)指針FTP_Data_Push_ODM中所述發(fā)送緩存的剩余長(zhǎng)度大于所述ODM數(shù)據(jù)的數(shù)據(jù)長(zhǎng)度,則所述無線通訊模塊將所述ODM數(shù)據(jù)放入所述發(fā)送緩存之中。
[0008]作為本發(fā)明提供的無線通訊模塊的數(shù)據(jù)上傳方法的一種改進(jìn),在步驟(C)中,所述無線通訊模塊通過調(diào)用函數(shù)FTP_Send_Data來執(zhí)行數(shù)據(jù)發(fā)送操作。
[0009]作為本發(fā)明提供的無線通訊模塊的數(shù)據(jù)上傳方法的一種改進(jìn),所述步驟(C)包括:判斷所述發(fā)送緩存中是否還存在未發(fā)送數(shù)據(jù),如果存在未發(fā)送數(shù)據(jù),則可以定義一個(gè)局部數(shù)據(jù)變量,然后從所述發(fā)送緩存中取預(yù)設(shè)長(zhǎng)度的數(shù)據(jù)放入到所述數(shù)據(jù)變量,并返回所述局部數(shù)據(jù)變量的長(zhǎng)度;如果所述局部數(shù)據(jù)變量的長(zhǎng)度大于0,則調(diào)用TCP/IP協(xié)議棧的發(fā)送函數(shù)來發(fā)送所述局部數(shù)據(jù)變量的數(shù)據(jù)。
[0010]作為本發(fā)明提供的無線通訊模塊的數(shù)據(jù)上傳方法的一種改進(jìn),所述步驟(C)還包括:如果此時(shí)調(diào)用所述發(fā)送函數(shù)出現(xiàn)數(shù)據(jù)發(fā)送失敗,則判斷TCP/IP層是否已經(jīng)開啟了 TCP流量控制;如果TCP流量控制開啟,則直接返回并轉(zhuǎn)至所述TCP流量控制,并在所述流量控制調(diào)用所述函數(shù)FTP_Send_Data,重新進(jìn)行數(shù)據(jù)發(fā)送操作。
[0011]作為本發(fā)明提供的無線通訊模塊的數(shù)據(jù)上傳方法的一種改進(jìn),還包括:(D)接收所述FTP服務(wù)器回復(fù)的確認(rèn)消息,并采用正面確認(rèn)機(jī)制確認(rèn)數(shù)據(jù)是否發(fā)送完成。
[0012]作為本發(fā)明提供的無線通訊模塊的數(shù)據(jù)上傳方法的一種改進(jìn),所述步驟(D)包括:在接收到所述FTP服務(wù)器回復(fù)的確認(rèn)(ACK)消息之后,所述無線通訊模塊可以判斷所述發(fā)送緩存是否為空;如果所述發(fā)送緩存不為空,則再判斷當(dāng)前是不是正在調(diào)用所述函數(shù)FTP_Send_Data進(jìn)行數(shù)據(jù)發(fā)送,如果是,則直接返回;如果當(dāng)前沒有進(jìn)行數(shù)據(jù)發(fā)送,則調(diào)用所述函數(shù)FTP_Send_Data進(jìn)行數(shù)據(jù)發(fā)送繼續(xù)進(jìn)行數(shù)據(jù)發(fā)送;如果所述發(fā)送緩存為空,向所述上層應(yīng)用程序請(qǐng)求繼續(xù)向所述無線通訊模塊提供ODM數(shù)據(jù),并跳轉(zhuǎn)到步驟(B)。
[0013]作為本發(fā)明提供的無線通訊模塊的數(shù)據(jù)上傳方法的一種改進(jìn),還包括:(E)在所述上層應(yīng)用程序需要結(jié)束數(shù)據(jù)發(fā)送時(shí),設(shè)置一個(gè)結(jié)束變量,所述結(jié)束變量在所述無線通訊模塊發(fā)送數(shù)據(jù)完成并且所述FTP服務(wù)器回復(fù)完最后一個(gè)確認(rèn)消息進(jìn)行判斷,以使所述無線通訊模塊的數(shù)據(jù)Socket關(guān)閉并釋放相關(guān)緩存和內(nèi)存,并且退出所述ODM模式。
[0014]作為本發(fā)明提供的無線通訊模塊的數(shù)據(jù)上傳方法的一種改進(jìn),在上述各個(gè)步驟中如果出現(xiàn)任何出錯(cuò)情況,所述無線通訊模塊進(jìn)行預(yù)先設(shè)定的出錯(cuò)處理,所述出錯(cuò)處理包括:關(guān)閉數(shù)據(jù)Socket、釋放相關(guān)的緩存和內(nèi)容、退出所述ODM模式以及向所述上層應(yīng)用程序上報(bào)出錯(cuò)信息。
[0015]相較于現(xiàn)有技術(shù),本發(fā)明提供無線通訊模塊的數(shù)據(jù)上傳方法采用發(fā)送緩存來進(jìn)行數(shù)據(jù)發(fā)送,并結(jié)合正面確認(rèn)機(jī)制,可以有效地保證無線通訊模塊利用AT命令向FTP服務(wù)器上傳大字節(jié)和高速率的數(shù)據(jù)的正確性,并且降低在上傳過程中出現(xiàn)數(shù)據(jù)丟失的可能,提高無線通訊模塊的數(shù)據(jù)上傳的可靠性。
【附圖說明】
[0016]為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其它的附圖,其中:
[0017]圖1是本發(fā)明提供的無線通訊模塊的數(shù)據(jù)上傳方法一種實(shí)施方式的流程示意圖。
【具體實(shí)施方式】
[0018]為了使本發(fā)明所解決的技術(shù)問題、技術(shù)方案及有益效果更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0019]請(qǐng)參閱圖1,其為本發(fā)明提供的無線通訊模塊的數(shù)據(jù)上傳方法一種實(shí)施方式的流程示意圖,所述無線通訊模塊的數(shù)據(jù)上傳方法主要包括以下步驟:
[0020]步驟SI,無線通訊模塊跟FTP服務(wù)器建立FTP數(shù)據(jù)連接;
[0021]所述無線通訊模塊可以為2G模塊,比如GSM模塊或GPRS模塊,或同時(shí)集成GSM和GPRS功能的GSM/GPRS模塊;或者,所述無線通訊模塊也可以為3G模塊或4G模塊,比如WCDMA模塊、TD-SCDMA模塊、TD-LTE模塊或FDD-LTE模塊;或者,所述無線通訊模塊也可以為上述模塊的任意組合等。所述無線通訊模塊在向所述FTP服務(wù)器進(jìn)行數(shù)據(jù)上傳之前,需要通過無線通訊網(wǎng)絡(luò)跟所述FTP服務(wù)器建立FTP數(shù)據(jù)連接,所述FTP數(shù)據(jù)連接主要用于供所述無線通信模塊進(jìn)行數(shù)據(jù)上傳。
[0022]步驟S2,動(dòng)態(tài)分配一個(gè)全局的發(fā)送緩存,并控制所述無線通訊模塊進(jìn)入ODM模式;
[0023]在所述數(shù)據(jù)連接建立成功之后,所述無線通訊模塊可以動(dòng)態(tài)分配一個(gè)全局的發(fā)送緩存(Buffer),所述發(fā)送緩存的長(zhǎng)度(SencLlen)可以通過FTPPUT命令的參數(shù)進(jìn)行指定,也可以專門定義預(yù)設(shè)長(zhǎng)度(比如2K到3K)給FTPST0R命令使用。并且,所述無線通訊模塊可以進(jìn)一步調(diào)用進(jìn)入ODM模式函數(shù)(FTP_Enter_0DM)來控制模塊進(jìn)入ODM模式,并在所述進(jìn)入ODM模式函數(shù)(FTP_Enter_0DM)中定義一個(gè)FTP數(shù)據(jù)推送函數(shù)指針(FTP_Data_Push_0DM),其中,所述FTP數(shù)據(jù)推送函數(shù)指針(FTP_Data_Push_ODM)可以在所述無線通訊模塊接收到ODM數(shù)據(jù)的時(shí)候被調(diào)用。
[0024]步驟S3,所述無線通訊模塊接收上層應(yīng)用程序發(fā)送的ODM數(shù)據(jù),并將所述ODM數(shù)據(jù)放入所述發(fā)送緩存;
[0025]具體地,上層應(yīng)用程序可以通過AT命令向所述無線通訊模塊發(fā)送ODM數(shù)據(jù),所述ODM數(shù)據(jù)的數(shù)據(jù)長(zhǎng)度可以記為ReCV_len ;如果所述無線通訊模塊接收到來自上層應(yīng)用程序的ODM數(shù)據(jù)時(shí),可以調(diào)用所述FTP數(shù)據(jù)推送函數(shù)指針(FTP_Data_Push_ODM)。并且,在所述FTP數(shù)據(jù)推送函數(shù)指針(FTP_Data_Push_ODM)中,如果所述發(fā)送緩存的剩余長(zhǎng)度(Left_Length_In_Send_Buffer)大于所述ODM數(shù)據(jù)的數(shù)據(jù)長(zhǎng)度(Recv_len),則可以將所述ODM數(shù)據(jù)放入所述發(fā)送緩存之中。
[0026]步驟S4,將所述發(fā)送緩存的數(shù)據(jù)通過所述FTP數(shù)據(jù)連接發(fā)送給所述FTP服務(wù)器;
[0027]在將所述ODM數(shù)據(jù)放入所述發(fā)送緩存之后,所述無線通訊模塊可以進(jìn)一步調(diào)用FTP數(shù)據(jù)發(fā)送函數(shù)(FTP_Send_Data)來執(zhí)行數(shù)據(jù)發(fā)送操作,即是將所述發(fā)送緩存中的數(shù)據(jù)通過所述FTP數(shù)據(jù)連接上傳給所述FTP服務(wù)器。應(yīng)當(dāng)注意的是,在本實(shí)施例中,如果所述發(fā)送緩存的數(shù)據(jù)沒有完成發(fā)送,即當(dāng)前所述發(fā)送緩存不為空,則此時(shí)所述上層應(yīng)用程序不