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