本發(fā)明涉及通信領域,尤其涉及一種終端設備高效率數(shù)據處理方法及其終端設備。
背景技術:
數(shù)據處理是對數(shù)據的采集、存儲、檢索、加工、變換和傳輸,數(shù)據是對事實、概念或指令的一種表達形式,可由人工或自動化裝置進行處理;數(shù)據處理是上位機工程和自動控制的基本環(huán)節(jié),數(shù)據處理貫穿于社會生產和社會生活的各個領域,數(shù)據處理技術的發(fā)展及其應用的廣度和深度,極大的影響著人類社會發(fā)展的進程。
現(xiàn)有技術中,在終端設備與上位機構成的數(shù)據交互體系中,其數(shù)據處理過程通常是一次交互完成一條指令的處理,對于復雜的數(shù)據處理過程而言,則需要進行多次交互,耗用較多的時間,數(shù)據處理效率偏低。
技術實現(xiàn)要素:
本發(fā)明為了解決現(xiàn)有技術的不足,提供了一種終端設備高效率數(shù)據處理方法及其終端設備。
一方面,本發(fā)明提供了一種終端設備高效率數(shù)據處理方法,包括:
步驟S1:終端設備接收上位機發(fā)送來的命令報文;
步驟S2:所述終端設備讀取所述命令報文中的指令序列,根據所述指令序列依次執(zhí)行相應操作得到一系列操作結果;或者所述終端設備讀取所述命令報文中的指令序列,將所述指令序列依次發(fā)送給卡片,接收所述卡片返回的一系列操作結果;
步驟S3:當所述命令報文中的指令序列全部處理完成時,所述終端設備將所述操作結果返回給所述上位機。
可選地,所述步驟S2之前,還包括:所述終端設備判斷所述命令報文是否正確,是則執(zhí)行步驟S2;否則返回錯誤碼給上位機,結束。
所述終端設備判斷所述命令報文是否正確,具體為:
所述終端設備判斷所述命令報文中第一預設字節(jié)上的數(shù)據所示的長度與所述命令報文中的指令序列對應的各數(shù)據元的總長度是否相等,是則確認所述命令報文正確,否則確認所述命令報文不正確;
或者,
所述終端設備判斷所述命令報文中第一預設字節(jié)上的數(shù)據所示的長度與所述命令報文中的指令序列及各分隔標識的總長度是否相等,是則確認所述命令報文正確,否則確認所述命令報文不正確。
可選地,所述步驟S2中,所述終端設備讀取所述命令報文中的指令序列,具體為:
所述終端設備解析所述命令報文得到各數(shù)據元,讀取所述各數(shù)據元中的指令得到指令序列;
或者,
所述終端設備解析所述命令報文得到各分隔標識,根據得到的各分隔標識讀取指令得到指令序列。
可選地,所述步驟S2,具體包括:
步驟W1:所述終端設備將所述命令報文中的指令序列中未讀取到的指令作為當前待處理數(shù)據,讀取所述當前待處理數(shù)據中的第一條指令,將其作為當前指令;
步驟W2:所述終端設備根據所述當前指令執(zhí)行相應操作得到操作結果;或者將所述當前指令發(fā)送給卡片,接收所述卡片返回的操作結果;
所述步驟S3,具體為:所述終端設備判斷所述當前指令是否為所述當前待處理數(shù)據中的最后一條指令,是則確認所述命令報文中的指令序列全部處理完成,將所述操作結果返回給所述上位機;否則,返回步驟W1。
可選地,所述步驟S2,具體包括:
步驟Q1:所述終端設備將所述命令報文中的指令序列中未讀取到的指令作為當前待解析數(shù)據,讀取所述當前待解析數(shù)據中的第一條指令,并將讀取到的指令順序保存到預設存儲區(qū)中;
步驟Q2:所述終端設備判斷所述讀取到的指令是否為所述當前待解析數(shù)據中的最后一條指令,是則執(zhí)行步驟Q3,否則返回步驟Q1;
步驟Q3:所述終端設備將所述預設存儲區(qū)中的指令作為當前待處理數(shù)據,讀取所述當前待處理數(shù)據中的第一條指令作為當前指令,根據所述當前指令執(zhí)行相應操作得到操作結果;或者將所述當前指令發(fā)送給卡片,接收所述卡片返回的操作結果;
步驟Q4:所述終端設備將所述當前指令從所述預設存儲區(qū)中移除;
所述步驟S3,具體為:所述終端設備判斷所述預設存儲區(qū)中是否還有指令,是則返回步驟Q3;否則確認所述命令報文中的指令序列全部處理完成,將所述操作結果返回給所述上位機。
可選地,所述終端設備中同時運行第一線程和第二線程,所述步驟S2,具體包括:
所述終端設備運行所述第一線程,執(zhí)行以下操作:
步驟H1:所述終端設備將所述命令報文中的指令序列中未讀取到的指令作為當前待解析數(shù)據,讀取所述當前待解析數(shù)據中的第一條指令,并將讀取到的指令順序保存到預設存儲區(qū)中;
步驟H2:所述終端設備判斷所述讀取到的指令是否為所述當前待解析數(shù)據中的最后一條指令,是則結束,否則返回步驟H1;
所述終端設備運行所述第二線程,執(zhí)行以下操作:
步驟R1:所述終端設備訪問所述預設存儲區(qū),當檢測到所述預設存儲區(qū)中有指令時,執(zhí)行步驟R2;
步驟R2:所述終端設備將所述預設存儲區(qū)中的指令作為當前待處理數(shù)據,讀取所述當前待處理數(shù)據中的第一條指令作為當前指令;根據所述當前指令執(zhí)行相應操作得到操作結果;或者將所述當前指令發(fā)送給卡片,接收所述卡片返回的操作結果;
步驟R3:所述終端設備將所述當前指令從所述預設存儲區(qū)中移除;
所述步驟S3,具體為:所述終端設備判斷所述預設存儲區(qū)中是否還有指令,是則返回步驟R2;否則確認所述命令報文中的指令序列全部處理完成,將所述操作結果返回給所述上位機。
可選地,所述步驟S2中,所述將所述指令序列依次發(fā)送給卡片之前,還包括:
步驟D1:所述終端設備判斷當前待發(fā)送指令對應的數(shù)據元中第一個字節(jié)上的數(shù)據是否為第一預設值,是則執(zhí)行卡片復位操作,接收所述卡片返回的操作結果,否則將當前待發(fā)送指令發(fā)送給卡片,接收所述卡片返回的操作結果。
可選地,所述步驟S2中,當所述卡片返回的操作結果為操作失敗時,還包括:
步驟F1:所述終端設備判斷與所述操作失敗結果對應的指令是否為所述指令序列中的最后一條指令,是則確認所述命令報文中的指令序列全部處理完成,執(zhí)行步驟S3;否則執(zhí)行步驟F2;
步驟F2:所述終端設備判斷是否繼續(xù)讀取所述指令序列中未讀取到的指令,是則繼續(xù)執(zhí)行步驟S2,否則將已接收到的操作結果返回給所述上位機,結束。
可選地,所述終端設備判斷是否繼續(xù)讀取所述指令序列中未讀取到的指令,具體為:
所述終端設備將與所述操作失敗結果對應的指令所對應的數(shù)據元中第三預設字節(jié)上的數(shù)據與第二預設值做與運算得到運算結果,將所述運算結果轉換為二進制表示,判斷二進制表示的所述運算結果中最高位上的數(shù)據是否為第一預設數(shù)據,是則確認繼續(xù)讀取所述指令序列中未讀取到的指令,否則確認不繼續(xù)讀取所述指令序列中未讀取到的指令;
或者,
所述終端設備判斷與所述操作失敗結果對應的指令所對應的數(shù)據元中第四預設字節(jié)上的數(shù)據是否為第三預設值,是則確認繼續(xù)讀取所述指令序列中未讀取到的指令,否則確認不繼續(xù)讀取所述指令序列中未讀取到的指令。
可選地,所述步驟S2,還包括:當所述指令序列的其中一條指令處理失敗時,執(zhí)行步驟M;
步驟M:所述終端設備將當前已得到的操作結果或者當前已接收到的操作結果順序拼接,并與所述指令序列中未處理的指令的個數(shù)對應,在拼接后的操作結果之后填充相同個數(shù)的第二預設數(shù)據得到響應報文,將所述響應報文返回給所述上位機。
可選地,所述步驟S2,還包括:當所述指令序列的其中一條指令處理失敗時,執(zhí)行步驟N;
步驟N:所述終端設備返回錯誤碼給所述上位機,結束。
可選地,所述步驟S2中,所述終端設備讀取所述命令報文中的指令序列之后,還包括:
所述終端設備根據預設方式更新計數(shù)標識;
當所述指令序列的其中一條指令處理失敗時,執(zhí)行步驟L;
步驟L:所述終端設備將失敗操作結果同所述計數(shù)標識的當前計數(shù)值一同返回給所述上位機,結束。
可選地,所述步驟S2中,還包括:當所述終端設備接收到的操作結果小于第四預設值時,將所述接收到的操作結果返回給所述上位機,結束。
可選地,所述步驟S2中,當所述終端設備讀取所述指令序列中第一條指令時,將讀取到的指令發(fā)送給卡片之前,還包括:
步驟P:所述終端設備判斷卡片類型,并根據所述卡片類型執(zhí)行選卡操作,如果操作成功,則將讀取到的指令發(fā)送給卡片;如果操作失敗,則返回錯誤碼給所述上位機,結束。
可選地,所述步驟S3中,所述終端設備將所述操作結果返回給所述上位機,具體為:
所述終端設備將所述一系列數(shù)據元結構的操作結果順序拼接得到響應報文,將所述響應報文返回給所述上位機;
或者,
所述終端設備將所述一系列操作結果順序拼接,并在每相鄰的兩個操作結果之間添加預設分隔標識得到響應報文,將所述響應報文返回給所述上位機;
或者,
所述終端設備所述一系列操作結果中最后一個操作結果返回給所述上位機。
另一方面,本發(fā)明提供了一種高效率數(shù)據處理終端設備,包括:
第一接收模塊、第一讀取模塊、執(zhí)行模塊和第一發(fā)送模塊;
或者,
所述第一接收模塊、所述第一讀取模塊、所述第一發(fā)送模塊、第二發(fā)送模塊和第二接收模塊;
所述第一接收模塊,用于接收上位機發(fā)送來的命令報文;
所述第一讀取模塊,用于讀取所述第一接收模塊接收到的命令報文中的指令序列;
所述執(zhí)行模塊,用于根據所述第一讀取模塊讀取到的指令序列依次執(zhí)行相應操作得到一系列操作結果;
所述第二發(fā)送模塊,用于將所述第一讀取模塊讀取到的指令序列依次發(fā)送給卡片;
所述第二接收模塊,用于接收所述卡片返回的操作結果;
所述第一發(fā)送模塊,用于當所述命令報文中的指令序列全部處理完成時,將操作結果返回給所述上位機。
可選地,所述終端設備,還包括:第一判斷模塊;
所述第一判斷模塊,用于所述第一讀取模塊讀取所述第一接收模塊接收到的命令報文中的指令序列之前,判斷所述第一接收模塊接收到的命令報文是否正確;
所述第一讀取模塊,具體用于:當所述第一判斷模塊判斷出所述第一接收模塊接收到的命令報文正確時,讀取所述第一接收模塊接收到的命令報文中的指令序列;
所述第一發(fā)送模塊,還用于當所述第一判斷模塊判斷出所述第一接收模塊接收到的命令報文不正確時,返回錯誤碼給上位機,結束。
可選地,所述第一判斷模塊,具體用于:
判斷所述命令報文中第一預設字節(jié)上的數(shù)據所示的長度與所述命令報文中的指令序列對應的各數(shù)據元的總長度是否相等,是則確認所述命令報文正確,否則確認所述命令報文不正確;
或者,
判斷所述命令報文中第一預設字節(jié)上的數(shù)據所示的長度與所述命令報文中的指令序列及各分隔標識的總長度是否相等,是則確認所述命令報文正確,否則確認所述命令報文不正確。
可選地,所述第一讀取模塊,具體用于:
解析所述命令報文得到各數(shù)據元,讀取所述各數(shù)據元中的指令得到指令序列;
或者,
解析所述命令報文得到各分隔標識,根據得到的各分隔標識讀取指令得到指令序列。
可選地,所述終端設備,還包括:第二判斷模塊;
所述第一讀取模塊,具體用于:將所述命令報文中的指令序列中未讀取到的指令作為當前待處理數(shù)據,讀取所述當前待處理數(shù)據中的第一條指令,將其作為當前指令;
所述執(zhí)行模塊,具體用于:根據所述當前指令執(zhí)行相應操作得到操作結果;
所述第二發(fā)送模塊,具體用于:將所述當前指令發(fā)送給卡片;
所述第二判斷模塊,具體用于:判斷所述當前指令是否為所述當前待處理數(shù)據中的最后一條指令;
所述第一發(fā)送模塊,具體用于:當所述第二判斷模塊判斷出所述當前指令是所述當前待處理數(shù)據中的最后一條指令時,確認所述命令報文中的指令序列全部處理完成,將操作結果返回給所述上位機;
所述第一讀取模塊,還用于當所述第二判斷模塊判斷出所述當前指令不是所述當前待處理數(shù)據中的最后一條指令時,將所述命令報文中的指令序列中未讀取到的指令作為當前待處理數(shù)據,并讀取所述當前待處理數(shù)據中的第一條指令,將其作為當前指令。
可選地,所述終端設備,還包括:第一保存模塊、第二判斷模塊、第二讀取模塊、第一移除模塊和第三判斷模塊;
所述第一讀取模塊,用于將所述命令報文中的指令序列中未讀取到的指令作為當前待解析數(shù)據,讀取所述當前待解析數(shù)據中的第一條指令;
所述第一保存模塊,用于將所述第一讀取模塊讀取到的指令順序保存到預設存儲區(qū)中;
所述第二判斷模塊,用于判斷所述第一讀取模塊讀取到的指令是否為所述當前待解析數(shù)據中的最后一條指令;
所述第一讀取模塊,還用于當所述第二判斷模塊判斷出所述第一讀取模塊讀取到的指令不是所述當前待解析數(shù)據中的最后一條指令時,將所述命令報文中的指令序列中未讀取到的指令作為當前待解析數(shù)據,讀取所述當前待解析數(shù)據中的第一條指令;
所述第二讀取模塊,用于當所述第二判斷模塊判斷出所述第一讀取模塊讀取到的指令是所述當前待解析數(shù)據中的最后一條指令時,將所述預設存儲區(qū)中的指令作為當前待處理數(shù)據,讀取所述當前待處理數(shù)據中的第一條指令作為當前指令;
所述執(zhí)行模塊,用于根據所述第二讀取模塊讀取到的當前指令執(zhí)行相應操作得到操作結果;
所述第二發(fā)送模塊,具體用于:將所述第二讀取模塊讀取到的當前指令發(fā)送給卡片;
所述第一移除模塊,用于當所述執(zhí)行模塊根據所述當前指令執(zhí)行相應操作得到操作結果之后,將所述當前指令從所述預設存儲區(qū)中移除;還用于當所述第二接收模塊接收到卡片返回的操作結果之后,將所述當前指令從所述預設存儲區(qū)中移除;
所述第三判斷模塊,用于所述第一移除模塊將所述當前指令從所述預設存儲區(qū)中移除之后,判斷所述預設存儲區(qū)中是否還有指令;
所述第二讀取模塊,還用于當所述第三判斷模塊判斷出所述預設存儲區(qū)中有指令時,將所述預設存儲區(qū)中的指令作為當前待處理數(shù)據,讀取所述當前待處理數(shù)據中的第一條指令作為當前指令;
所述第一發(fā)送模塊,具體用于:當所述第三判斷模塊判斷出所述預設存儲區(qū)中沒有指令時,確認所述命令報文中的指令序列全部處理完成,將操作結果返回給上位機。
可選地,所述終端設備,還包括:第二保存模塊、第四判斷模塊、檢測模塊、第三讀取模塊、第二移除模塊和第五判斷模塊;
所述第一讀取模塊,用于將所述命令報文中的指令序列中未讀取到的指令作為當前待解析數(shù)據,讀取所述當前待解析數(shù)據中的第一條指令;
所述第二保存模塊,還用于將所述第一讀取模塊讀取到的指令順序保存到預設存儲區(qū)中;
所述第四判斷模塊,用于判斷所述第一讀取模塊讀取到的指令是否為所述當前待解析數(shù)據中的最后一條指令;
所述第一讀取模塊,還用于當所述第四判斷模塊判斷出所述第一讀取模塊讀取到的指令不是所述當前待解析數(shù)據中的最后一條指令時,將所述指令序列中未讀取到的指令作為當前待解析數(shù)據,讀取所述當前待解析數(shù)據中的第一條指令;
所述終端設備中運行所述第一讀取模塊、所述第二保存模塊和所述第四判斷模塊的同時,還運行所述檢測模塊、所述第三讀取模塊、所述執(zhí)行模塊、所述第二移除模塊和所述第五判斷模塊;或者,還運行所述檢測模塊、所述第三讀取模塊、所述第二發(fā)送模塊、所述第二移除模塊和所述第五判斷模塊;
所述檢測模塊,用于訪問所述預設存儲區(qū),檢測所述預設存儲區(qū)中是否有指令;
所述第三讀取模塊,用于當所述檢測模塊檢測到所述預設存儲區(qū)中有指令時,將所述預設存儲區(qū)中的指令作為當前待處理數(shù)據,讀取所述當前待處理數(shù)據中的第一條指令作為當前指令;
所述執(zhí)行模塊,具體用于:根據所述第三讀取模塊讀取到的當前指令執(zhí)行相應操作得到操作結果;
所述第二發(fā)送模塊,具體用于:將所述第三讀取模塊讀取到的當前指令發(fā)送給卡片;
所述第二移除模塊,用于當所述執(zhí)行模塊根據所述當前指令執(zhí)行相應操作得到操作結果之后,將所述當前指令從所述預設存儲區(qū)中移除;還用于當所述第二接收模塊接收到卡片返回的操作結果之后,將所述當前指令從所述預設存儲區(qū)中移除;
所述第五判斷模塊,用于所述第二移除模塊將所述當前指令從所述預設存儲區(qū)中移除之后,判斷所述預設存儲區(qū)中是否還有指令;
所述第三讀取模塊,還用于當所述第五判斷模塊判斷出所述預設存儲區(qū)中還有指令時,將所述預設存儲區(qū)中的指令作為當前待處理數(shù)據,讀取所述當前待處理數(shù)據中的第一條指令作為當前指令;
所述第一發(fā)送模塊,具體用于:當所述第五判斷模塊判斷出所述預設存儲區(qū)中沒有指令時,確認所述命令報文中的指令序列全部處理完成,將操作結果返回給上位機。
可選地,所述終端設備,還包括:第六判斷模塊和第二執(zhí)行模塊;
所述第六判斷模塊,用于所述第二發(fā)送模塊將所述指令序列依次發(fā)送給卡片之前,判斷當前待發(fā)送指令對應的數(shù)據元中第一個字節(jié)上的數(shù)據是否為第一預設值;
所述第二執(zhí)行模塊,用于當所述第六判斷模塊判斷出當前待發(fā)送指令對應的數(shù)據元中第一個字節(jié)上的數(shù)據是第一預設值時,執(zhí)行卡片復位操作;
所述第二發(fā)送模塊,具體用于:當所述第六判斷模塊判斷出當前待發(fā)送指令對應的數(shù)據元中第一個字節(jié)上的數(shù)據不是第一預設值時,將所述當前待發(fā)送指令發(fā)送給卡片。
可選地,所述終端設備,還包括:第七判斷模塊和第八判斷模塊;
所述第七判斷模塊,用于當所述卡片返回的操作結果為操作失敗時,判斷與所述操作失敗結果對應的指令是否為所述指令序列中的最后一條指令;
所述第一發(fā)送模塊,還用于:當所述第七判斷模塊判斷出與所述操作失敗結果對應的指令是所述指令序列中的最后一條指令時,確認所述命令報文中的指令序列全部處理完成,將操作結果返回給上位機;
所述第八判斷模塊,用于當所述第七判斷模塊判斷出與所述操作失敗結果對應的指令不是所述指令序列中的最后一條指令時,判斷是否繼續(xù)讀取所述指令序列中未讀取到的指令;
所述第一讀取模塊,還用于當所述第八判斷模塊判斷出繼續(xù)讀取所述指令序列中未讀取到的指令時,讀取所述命令報文中的指令序列;
所述第一發(fā)送模塊,還用于當所述第八判斷模塊判斷出不繼續(xù)讀取所述指令序列中未讀取到的指令時,將已接收到的操作結果返回給所述上位機,結束。
可選地,所述第八判斷模塊,具體用于:
將與所述操作失敗結果對應的指令所對應的數(shù)據元中第三預設字節(jié)上的數(shù)據與第二預設值做與運算得到運算結果,將所述運算結果轉換為二進制表示,判斷二進制表示的所述運算結果中最高位上的數(shù)據是否為第一預設數(shù)據,是則確認繼續(xù)讀取所述指令序列中未讀取到的指令,否則確認不繼續(xù)讀取所述指令報文中未讀取到的指令;
或者,
判斷與所述操作失敗結果對應的指令所對應的數(shù)據元中第四預設字節(jié)上的數(shù)據是否為第三預設值,是則確認繼續(xù)讀取所述指令序列中未讀取到的指令,否則確認不繼續(xù)讀取所述指令序列中未讀取到的指令。
可選地,所述第一發(fā)送模塊,還用于當所述指令序列的其中一條指令處理失敗時,將當前已得到的操作結果或者當前已接收到的操作結果順序拼接,并與所述指令序列中未處理的指令的個數(shù)對應,在拼接后的操作結果之后填充相同個數(shù)的第二預設數(shù)據得到響應報文,將所述響應報文返回給所述上位機。
所述第一發(fā)送模塊,還用于當所述指令序列的其中一條指令處理失敗時,返回錯誤碼給所述上位機。
可選地,所述終端設備,還包括:更新模塊;
所述更新模塊,用于所述第一讀取模塊讀取所述命令報文中的指令序列之后,根據預設方式更新計數(shù)標識;
可選地,所述第一發(fā)送模塊,還用于當所述指令序列的其中一條指令處理失敗時,將所述失敗操作結果同所述計數(shù)標識的當前計數(shù)值一同返回給所述上位機。
可選地,所述第一發(fā)送模塊,還用于當所述第二接收模塊接收到的操作結果小于第四預設值時,將所述接收到的操作結果返回給所述上位機。
可選地,所述終端設備,還包括:第九判斷模塊和選卡模塊;
所述第九判斷模塊,用于當所述第一讀取模塊讀取所述指令序列中的第一條指令時,所述第二發(fā)送模塊將所述第一讀取模塊讀取到的指令發(fā)送給卡片之前,判斷卡片類型;
所述選卡模塊,用于根據所述第九判斷模塊判斷出的卡片類型執(zhí)行選卡操作;
所述第二發(fā)送模塊,具體用于:當所述選卡模塊操作成功時,將所述第一讀取模塊讀取到的指令發(fā)送給卡片;
所述第一發(fā)送模塊,還用于當所述選卡模塊操作失敗時,返回錯誤碼給所述上位機。
可選地,所述第一發(fā)送模塊,具體用于:
將所述一系列數(shù)據元結構的操作結果順序拼接得到響應報文,將所述響應報文返回給所述上位機;
或者,
將所述一系列操作結果順序拼接,并在每相鄰的兩個操作結果之間添加分隔標識得到響應報文,將所述響應報文返回給所述上位機;
或者,
將所述一系列操作結果中最后一個操作結果返回給所述上位機。
本發(fā)明與現(xiàn)有技術相比,具有以下優(yōu)點:
在終端設備與上位機進行數(shù)據交互的過程中,一條命令報文中含有多條指令,實現(xiàn)了一次交換完成多條指令的處理,提升了終端設備的數(shù)據處理效率。
附圖說明
圖1為本發(fā)明實施例一提供的一種終端設備高效率數(shù)據處理方法流程圖;
圖2為本發(fā)明實施例二提供的一種終端設備高效率數(shù)據處理方法流程圖;
圖3和圖4為本發(fā)明實施例三提供的一種終端設備高效率數(shù)據處理方法流程圖;
圖5為本發(fā)明實施例四提供的一種終端設備高效率數(shù)據處理方法流程圖;
圖6為本發(fā)明實施例五提供的一種終端設備高效率數(shù)據處理方法流程圖;
圖7為本發(fā)明實施例六提供的一種高效率數(shù)據處理終端設備的模塊組成框圖;
圖8為本發(fā)明實施例七提供的一種高效率數(shù)據處理終端設備的模塊組成框圖。
具體實施方式
下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
實施例一
本發(fā)明實施例一提供一種終端設備高效率數(shù)據處理方法,如圖1所示,包括:
步驟101:終端設備接收上位機發(fā)送來的命令報文;
步驟102:終端設備讀取命令報文中的指令序列,根據指令序列依次執(zhí)行相應操作得到一系列操作結果;或者終端設備讀取命令報文中的指令序列,將指令序列依次發(fā)送給卡片,接收卡片返回的一系列操作結果;
步驟103:當命令報文中的指令序列全部處理完成時,終端設備將操作結果返回給上位機。
在本實施例中,步驟102之前,還包括:終端設備判斷接收到的命令報文是否正確,是則執(zhí)行步驟102,否則返回錯誤碼給上位機,結束。
其中,終端設備判斷接收到的命令報文是否正確,具體為:
終端設備判斷接收到的命令報文中第一預設字節(jié)上的數(shù)據所示的長度與命令報文中的指令序列對應的各數(shù)據元的總長度是否相等,是則確認接收到的命令報文正確,否則確認接收到的命令報文不正確;
或者,
終端設備判斷接收到的命令報文中第一預設字節(jié)上的數(shù)據所示的長度與命令報文中的指令序列及各分隔標識的總長度是否相等,是則確認命令報文正確,否則確認命令報文不正確。
可選地,在本實施例中,終端設備讀取命令報文中的指令序列,具體為:
終端設備解析命令報文得到各數(shù)據元,讀取各數(shù)據元中的指令得到指令序列;
或者,
終端設備解析命令報文得到各分隔標識,根據得到的各分隔標識讀取指令得到指令序列。
進一步地,在本實施例中,步驟102具體包括:
步驟W1:終端設備將命令報文中的指令序列中未讀取到的指令作為當前待處理數(shù)據,讀取當前待處理數(shù)據中的第一條指令,將其作為當前指令;
步驟W2:終端設備根據當前指令執(zhí)行相應操作得到操作結果;或者將當前指令發(fā)送給卡片,接收卡片返回的操作結果;
相應地,步驟103,具體為:終端設備判斷當前指令是否為當前待處理數(shù)據中的最后一條指令,是則確認命令報文中的指令序列全部處理完成,將操作結果返回給上位機;否則,返回步驟W1。
在本實施例中,步驟102還可以具體包括:
步驟Q1:終端設備將命令報文中的指令序列中未讀取到的指令作為當前待解析數(shù)據,讀取當前待解析數(shù)據中的第一條指令,并將讀取到的指令順序保存到預設存儲區(qū)中;
步驟Q2:終端設備判斷讀取到的指令是否為當前待解析數(shù)據中的最后一條指令,是則執(zhí)行步驟Q3,否則返回步驟Q1;
步驟Q3:終端設備將預設存儲區(qū)中的指令作為當前待處理數(shù)據,讀取當前待處理數(shù)據中的第一條指令作為當前指令,根據當前指令執(zhí)行相應操作得到操作結果;或者將當前指令發(fā)送給卡片,接收卡片返回的操作結果;
步驟Q4:終端設備將當前指令從預設存儲區(qū)中移除;
相應地,步驟103,具體為:終端設備判斷預設存儲區(qū)中是否還有指令,是則返回步驟Q3;否則確認命令報文中的指令序列全部處理完成,將操作結果返回給上位機。
在本實施例中,終端設備中還可以同時運行第一線程和第二線程,相應地,步驟102具體包括:
終端設備運行第一線程,執(zhí)行以下操作:
步驟H1:終端設備將命令報文中的指令序列中未讀取到的指令作為當前待解析數(shù)據,讀取當前待解析數(shù)據中的第一條指令,并將讀取到的指令順序保存到預設存儲區(qū)中;
步驟H2:終端設備判斷讀取到的指令是否為當前待解析數(shù)據中的最后一條指令,是則結束,否則返回步驟H1;
終端設備運行第二線程,執(zhí)行以下操作:
步驟R1:終端設備訪問預設存儲區(qū),當檢測到預設存儲區(qū)中有指令時,執(zhí)行步驟R2;
步驟R2:終端設備將預設存儲區(qū)中的指令作為當前待處理數(shù)據,讀取當前待處理數(shù)據中的第一條指令作為當前指令;根據當前指令執(zhí)行相應操作得到操作結果;或者將當前指令發(fā)送給卡片,接收卡片返回的操作結果;
步驟R3:終端設備將當前指令從預設存儲區(qū)中移除;
相應地,步驟103,具體為:終端設備判斷預設存儲區(qū)中是否還有指令,是則返回步驟R2;否則確認命令報文中的指令序列全部處理完成,將操作結果返回給上位機。
可選地,本實施例步驟102中,將指令序列依次發(fā)送給卡片之前,還包括:
步驟D1:終端設備判斷當前待發(fā)送指令對應的數(shù)據元中第一個字節(jié)上的數(shù)據是否為第一預設值,是則執(zhí)行卡片復位操作,接收卡片返回的操作結果,否則將當前待發(fā)送指令發(fā)送給卡片,接收卡片返回的操作結果。
優(yōu)選地,在本實施例中,第一預設值為CC。
可選地,本實施例步驟102中,當卡片返回的操作結果為操作失敗時,還包括:
步驟F1:終端設備判斷與操作失敗結果對應的指令是否為指令序列中的最后一條指令,是則確認命令報文中的指令序列全部處理完成,執(zhí)行步驟103;否則執(zhí)行步驟F2;
步驟F2:終端設備判斷是否繼續(xù)讀取指令序列中未讀取到的指令,是則繼續(xù)執(zhí)行步驟102,否則將已接收到的操作結果返回給上位機,結束。
其中,終端設備判斷是否繼續(xù)讀取指令序列未讀取到的指令,具體為:
終端設備將與操作失敗結果對應的指令所對應的數(shù)據元中第三預設字節(jié)上的數(shù)據與第二預設值做與運算得到運算結果,將運算結果轉換為二進制表示,判斷二進制表示的運算結果中最高位上的數(shù)據是否為第一預設數(shù)據,是則確認繼續(xù)讀取指令序列中未讀取到的指令,否則確認不繼續(xù)讀取指令序列中未讀取到的指令;
或者,
判斷與操作失敗結果對應的指令所對應的數(shù)據元中第四預設字節(jié)上的數(shù)據是否為第三預設值,是則確認繼續(xù)讀取所述指令序列中未讀取到的指令,否則確認不繼續(xù)讀取所述指令序列中未讀取到的指令。
優(yōu)選地,在本實施例中,第三預設字節(jié)為操作失敗結果對應的指令所對應的數(shù)據元的第1個字節(jié),第二預設值為0x80,第一預設數(shù)據為1;第四預設字節(jié)為操作失敗結果對應的指令所對應的數(shù)據元的第3個字節(jié),第三預設值為0x01。
可選地,在本實施例中,步驟102還包括:當指令序列的其中一條指令處理失敗時,執(zhí)行步驟M;
步驟M:終端設備將當前已得到的操作結果或者當前已接收到的操作結果順序拼接,并與指令序列中未處理的指令的個數(shù)對應,在拼接后的操作結果之后填充相同個數(shù)的第二預設數(shù)據得到響應報文,將響應報文返回給上位機。
可選地,在本實施例中,步驟102還包括:當指令序列的其中一條指令處理失敗時,執(zhí)行步驟N;
步驟N:終端設備返回錯誤碼給上位機,結束。
可選地,本實施例步驟102中,終端設備讀取命令報文中的指令序列之后,還包括:
終端設備根據預設方式更新計數(shù)標識;
當指令序列的其中一條指令處理失敗時,執(zhí)行步驟L;
步驟L:終端設備將失敗操作結果同計數(shù)標識的當前計數(shù)值一同返回給上位機,結束。
可選地,本實施例步驟102中,還包括:當終端設備接收到的操作結果小于第四預設值時,將接收到的操作結果返回給上位機,結束。
優(yōu)選地,在本實施例中,第四預設值為0x1000。
可選地,本實施例步驟102中,當終端設備讀取指令序列中第一條指令時,將讀取到的指令發(fā)送給卡片之前,還包括:
步驟P:終端設備判斷卡片類型,并根據卡片類型執(zhí)行選卡操作,如果操作成功,則將讀取到的指令發(fā)送給卡片;如果操作失敗,則返回錯誤碼給上位機,結束。
可選地,步驟103中,終端設備將操作結果返回給上位機,具體為:
終端設備將一系列數(shù)據元結構的操作結果順序拼接得到響應報文,將響應報文返回給上位機;
或者,
終端設備將一系列操作結果順序拼接,并在每相鄰的兩個操作結果之間添加預設分隔標識得到響應報文,將響應報文返回給上位機;
或者,
終端設備一系列操作結果中最后一個操作結果返回給上位機。
實施例二
本發(fā)明實施例二提供一種終端設備高效率數(shù)據處理方法,如圖2所示,包括:
步驟201:終端設備接收上位機發(fā)送來的命令報文;
在本實施例中,命令報文中含有指令序列,且指令序列中每條指令對應一個TLV(Type-Length-Value)結構的數(shù)據元,即“標簽(1個字節(jié))+數(shù)據長度(一個字節(jié))+數(shù)據(若干字節(jié))”的結構;其中,V結構上的所有數(shù)據為指令,或者V結構中第二個字節(jié)之后的所有數(shù)據為指令;優(yōu)選地,在本實施例中,V結構上的所有數(shù)據為指令。
特別地,當T結構上的數(shù)據為第一預設值時,其對應的數(shù)據元中L結構為00,故對應的指令為空指令,終端設備根據卡片的類型執(zhí)行卡片復位操作;優(yōu)選地,第一預設值為CC;
例如,終端設備接收到的命令報文為7E50000017810C00A4040007A0000003330101CC0002050084000008;
其中,包含的指令序列為指令00A4040007A0000003330101、空指令和指令0084000008,且分別對應于TLV結構的數(shù)據元810C00A4040007A0000003330101、CC00和02050084000008。
步驟202:終端設備判斷接收到的命令報文是否正確,是則執(zhí)行步驟203,否則返回錯誤碼給上位機,結束;
具體地,終端設備判斷命令報文中第一預設字節(jié)上的數(shù)據所示的長度與命令報文中的指令序列對應的各TLV結構的數(shù)據元的總長度是否相等,是則確認接收到的命令報文正確,否則確認接收到的命令報文錯誤;優(yōu)選地,第一預設字節(jié)為第五個字節(jié);
更加具體地,終端設備讀取命令報文的第五個字節(jié)上的數(shù)據得到各數(shù)據元的總長度,并從命令報文的第六個字節(jié)起,依次讀取各數(shù)據元中L結構上的數(shù)據得到各數(shù)據元的V結構的長度,將各數(shù)據元的V結構的長度加兩個字節(jié)得到各數(shù)據元的長度,將各數(shù)據元的長度相加求和,判斷相加求得的和與得到的各數(shù)據元的總長度是否相等,是則確認接收到的命令報文正確,否則確認接收到的命令報文錯誤;
例如,在上述命令報文中,讀取第五個字節(jié)上的數(shù)據為17,轉換成十進制為23,即第五個字節(jié)上的數(shù)據所示的長度為23個字節(jié);從第六個字節(jié)起,依次讀取各數(shù)據元中L結構上的數(shù)據得到各數(shù)據元的V結構的長度分別為0C、00、05,可知各數(shù)據元的長度分別為0E、02、07,轉換成十進制后可得各數(shù)據元的長度分別為14個字節(jié)、2個字節(jié)、7個字節(jié),將各數(shù)據元的長度相加求得的和為23個字節(jié),確認命令報文正確。
步驟203:終端設備將命令報文中的指令序列中未讀取到的指令作為當前待處理數(shù)據,并讀取當前待處理數(shù)據中的第一條指令,將其作為當前指令;
具體地,在本實施例中,終端設備將命令報文的指令序列中未讀取到的指令對應的數(shù)據元作為當前待處理數(shù)據,并讀取當前待處理數(shù)據中的第一個數(shù)據元作為當前數(shù)據元,將當前數(shù)據元中的指令作為當前指令;
更加具體地,終端設備讀取命令報文中當前待處理數(shù)據中第一個字節(jié)上的數(shù)據,即T結構,得到當前待處理數(shù)據中第一個數(shù)據元的標簽,讀取當前待解析數(shù)據中第二字節(jié)上的數(shù)據,即L結構,得到當前待處理數(shù)據中第一個數(shù)據元的V結構的長度,根據讀取到的長度繼續(xù)讀取第二個字節(jié)之后的相應數(shù)據得到當前待處理數(shù)據中第一個數(shù)據元的V結構,讀取到的所有數(shù)據為當前待處理數(shù)據中的第一個數(shù)據元,將其作為當前數(shù)據元,并將當前數(shù)據元的V結構上的數(shù)據作為當前指令。
例如,在上述指令中,讀取到的當前數(shù)據元為810C00A4040007A0000003330101,當前指令為00A4040007A0000003330101。
步驟204:終端設備將當前指令對應的數(shù)據元的標簽作為當前標簽,并判斷當前標簽是否為第一預設值,是則執(zhí)行步驟210,否則執(zhí)行步驟205;
優(yōu)選地,在本實施例中,第一預設值為CC。
進一步地,在本實施例中,當當前指令為指令序列中的第一條指令時,由步驟204執(zhí)行步驟205和步驟210之前,還包括:
步驟P:終端設備判斷卡片的類型,并根據卡片的類型執(zhí)行選卡操作,如果操作成功,則繼續(xù);如果操作失敗,則返回錯誤碼給上位機,結束;
具體地,終端設備判斷當前操作的卡片是接觸卡還是非接觸卡,包括:
步驟A1:終端設備將卡片作為接觸卡,并發(fā)送當前指令給卡片,判斷是否接收到卡片返回的應答,是則確認卡片是接觸卡,否則執(zhí)行步驟A2:
具體地,終端設備假設卡片是接觸卡,并發(fā)送當前指令給卡片,特別地,當當前標簽為第一預設值時,終端設備發(fā)送上電指令給卡片,當未接收到卡片返回的應答時,判定卡片可能是接觸卡但處于下電狀態(tài),卡片還可能是非接觸卡,還可能是無卡片,因而繼續(xù)執(zhí)行步驟A2。
步驟A2:終端設備獲取其內部的第一狀態(tài)標識,根據第一狀態(tài)標識判斷卡片是否為接觸卡,是則確認選卡成功,否則執(zhí)行步驟A3;
在本實施例中,第一狀態(tài)標識用于標識接觸卡的狀態(tài);
具體地,當?shù)谝粻顟B(tài)標識的值為0時,表示卡片不是接觸卡;當?shù)谝粻顟B(tài)標識的值為1時,表示卡片是接觸卡,且卡片處于上電狀態(tài);當?shù)谝粻顟B(tài)標識的值為2時,表示卡片是接觸卡,且卡片處于下電狀態(tài)。
步驟A3:終端設備獲取其內部的第二狀態(tài)標識,根據第二狀態(tài)標識判斷卡片是否為非接觸卡,是則確認選卡成功,否則確認無卡片,返回相應狀態(tài)碼給上位機。
在本實施例中,第二狀態(tài)標識用于標識非接觸卡的狀態(tài);
具體地,當?shù)诙顟B(tài)標識的值為1時,表示卡片是非接觸卡;當?shù)诙顟B(tài)標識的值為0時,表示無卡。
步驟205:終端設備發(fā)送當前指令給卡片;
例如,在本實施例中,將上述讀取到的當前指令00A4040007A0000003330101發(fā)送給卡片,卡片執(zhí)行選擇應用操作。
步驟206:終端設備接收操作結果,并判斷卡片是否操作成功,是則將接收到的操作結果對應保存到第一存儲區(qū)中,執(zhí)行步驟211;否則執(zhí)行步驟207;
具體地,終端設備接收操作結果,并判斷接收到的操作結果是否為第三預設值,是則確認卡片操作成功;否則確認卡片操作失敗;
優(yōu)選地,在本實施例中,第三預設值為0x9000;
進一步地,在本實施例中,將接收到的操作結果對應保存到第一存儲區(qū)中,優(yōu)選為:將操作結果組織成對應的TLV結構的數(shù)據元并保存到第一存儲區(qū)中,且組織的數(shù)據元的T結構與當前指令對應的當前數(shù)據元的T結構相同;
例如,在本實施例中,卡片根據上述當前指令執(zhí)行選擇應用操作成功,返回操作結果0x9000,則將其保存為01029000,其中,T結構,即第一個字節(jié)上的數(shù)據01表示該操作結果為命令報文的指令序列中第一條指令的操作結果,L結構,即第二個字節(jié)上的數(shù)據02表示V結構的長度為2個字節(jié),V結構,即第三個字節(jié)和第四個字節(jié)上的數(shù)據9000為操作結果。
更進一步地,在本實施例中,將接收到的操作結果對應保存到第一存儲區(qū)中,還可以為:將接收到的操作結果直接保存到第一存儲區(qū)中;或者,將接收到的操作結果組織成LV結構的數(shù)據元并保存到第一存儲區(qū)中。
例如,將接收到的操作結果0x9000直接保存到第一存儲區(qū)中,或者,根據接收到的操作結果0x9000,將029000保存到第一存儲區(qū)中。
步驟207:終端設備判斷接收到的操作結果是否小于第四預設值,是則將接收到的操作結果返回給上位機,結束,否則將接收到的操作結果對應保存到第一存儲區(qū)中,執(zhí)行步驟208;
優(yōu)選地,在本實施例中,第四預設值為0x1000;
具體地,當終端設備接收到的操作結果小于0x1000時,該操作結果為終端設備自身返回的錯誤碼,判定終端設備自身出現(xiàn)錯誤,則退出數(shù)據處理流程,并將自身返回的錯誤碼發(fā)送給上位機,結束;當終端設備接收到的操作結果不小于0x1000時,確認該操作結果為卡片返回的操作失敗結果,執(zhí)行步驟208。
步驟208:終端設備判斷當前指令是否為當前待處理數(shù)據中的最后一條指令,是則執(zhí)行步驟212;否則,執(zhí)行步驟209;
在本實施例中,終端設備判斷當前指令是否為當前待處理數(shù)據中的最后一條指令,具體為:終端設備判斷當前指令對應的當前數(shù)據元之后是否還有數(shù)據,是則確認當前指令不是當前待處理數(shù)據中的最后一條指令,否則確認當前指令是當前待處理數(shù)據中的最后一條指令。
步驟209:終端設備判斷是否繼續(xù)讀取命令報文中的指令序列中未讀取到的指令,是則返回步驟203,否則執(zhí)行步驟212;
在本實施例中,終端設備判斷是否繼續(xù)讀取命令報文中的指令序列中未讀取到的指令,具體為:終端設備將當前指令對應的數(shù)據元中第三預設字節(jié)上的數(shù)據與第二預設值做與運算得到運算結果,將運算結果轉換為二進制表示,判斷二進制表示的運算結果中最高位上的數(shù)據是否為第二預設數(shù)據,是則確認繼續(xù)讀取命令報文的指令序列中未讀取到的指令,否則確認不繼續(xù)讀取命令報文的指令序列中未讀取到的指令;
優(yōu)選地,第三預設字節(jié)為當前指令對應的數(shù)據元的第1個字節(jié),即T結構,第二預設值為0x80,第二預設數(shù)據為1;
例如,在本實施例中,將當前指令對應的數(shù)據元的第1個字節(jié)上的數(shù)據0x81與0x80做與運算得到運算結果0x80,將其轉換為二進制表示為10000000,其最高位上的數(shù)據為1,確認繼續(xù)讀取命令報文的指令序列中未讀取到的指令。
在本實施例中,當數(shù)據元的V結構中第二個字節(jié)之后的所有數(shù)據為指令時,相應地,終端設備判斷是否繼續(xù)讀取命令報文的指令序列中未讀取到的指令,具體為:終端設備判斷當前指令對應的數(shù)據元中第四預設字節(jié)上的數(shù)據是否為第三預設值,是則確認繼續(xù)讀取命令報文的指令序列中未讀取到的指令,否則確認不繼續(xù)讀取命令報文的指令序列中未讀取到的指令;
優(yōu)選地,第四預設字節(jié)為當前指令對應的數(shù)據元的第3個字節(jié),即V結構中的第1個字節(jié);第三預設值為0x01。
例如,終端設備接收到的命令報文為7E1601001C010D0100A4040007A000000333010102060100840000040306010084000008,當前指令為00A4040007A0000003330101,對應的數(shù)據元為010D0100A4040007A0000003330101,其第3個字節(jié)上的數(shù)據為01,確認繼續(xù)讀取命令報文的指令序列中未讀取到的指令。
步驟210:終端設備執(zhí)行卡片復位操作,接收卡片返回的操作結果并判斷復位操作是否成功,是則將接收到的操作結果對應保存到第一存儲區(qū)中,執(zhí)行步驟211,否則返回錯誤應答數(shù)據給上位機,結束;
具體地,當卡片為非接觸卡時,終端設備通過硬件對外部場強的控制對卡片執(zhí)行下電和上電操作,完成卡片的復位;
當卡片為接觸卡時,終端設備根據卡片的芯片類型發(fā)送相應的下電指令和上電指令給卡片,完成卡片的復位操作;
例如,當卡片的芯片為9541芯片時,終端設備發(fā)送給卡片的下電指令為63000000000000000000,上電指令為62000000000000000000。
步驟211:終端設備判斷當前指令是否為當前待處理數(shù)據中的最后一條指令,是則執(zhí)行步驟212;否則,返回步驟203;
在本實施例中,本步驟中終端設備判斷當前指令是否為當前待處理數(shù)據中的最后一條指令的方法同步驟208中所述的方法相同,在此不再贅述。
步驟212:終端設備將第一存儲區(qū)中的操作結果返回給上位機,結束。
具體地,終端設備將第一存儲區(qū)中數(shù)據元結構的操作結果順序拼接后得到響應報文,將響應報文返回給上位機;
例如,第一存儲區(qū)中的TLV結構的操作結果為0103009000、02029000、03029000,拼接后的響應報文為01030090000202900003029000;或者第一存儲區(qū)中的LV結構的操作結果為03009000、029000、029000,拼接后的響應報文為03009000029000029000。
更進一步地,當終端設備將操作結果直接保存到第一存儲區(qū)中時,對應地,將第一存儲區(qū)中的操作結果返回給上位機,具體為:終端設備將第一存儲區(qū)中的操作結果順序拼接,并在每相鄰的兩個操作結果之間添加預設分隔標識得到響應報文,將響應報文返回給上位機;
優(yōu)選地,預設分隔標識為0x2C;
例如,第一存儲區(qū)中的操作結果為009000、9000、9000,拼接后的響應報文為:0090002C90002C9000。
在本實施例中,將第一存儲區(qū)中的操作結果返回給上位機,還可以為:終端設備將第一存儲區(qū)中的操作結果中,最后一個操作結果返回給上位機;
例如,第一存儲區(qū)中的操作結果為0103009000、02029000、03029000,將03029000返回給上位機;
或者,
第一存儲區(qū)中的操作結果為009000、9000、9000,將9000返回給上位機。
更進一步地,當由步驟209執(zhí)行步驟212時,在步驟212中將第一存儲區(qū)中的操作結果返回給上位機,還可以為:將第一存儲區(qū)中的操作結果順序拼接,并與指令序列中未讀取到的指令的個數(shù)對應,在拼接后的操作結果之后填充相同個數(shù)的第二預設數(shù)據得到響應報文,將得到的響應報文返回給上位機;優(yōu)選地,第二預設數(shù)據為6D00;
需要說明地,每個第二預設數(shù)據對應一個TLV結構的數(shù)據元,且對應的數(shù)據元的T結構與指令序列中未讀取到的指令對應的數(shù)據元的T結構相同;
例如,命令報文中的指令序列含有五條指令,第三條指令時卡片操作失敗,且不再繼續(xù)讀取命令報文中的指令序列中未讀取到的指令,則與第四條指令和第五條指令對應,填充的第一個第二預設數(shù)據對應的數(shù)據元為04026D00,填充的第二個第二預設數(shù)據對應的數(shù)據元為05026D00。
可選地,在本實施例中,當指令序列中的其中一條指令操作失敗時,終端設備還可以直接返回錯誤碼給上位機,結束;
可選地,在步驟202中,當終端設備判斷出接收到的命令報文正確時,還可以包括:
步驟a1:終端設備將命令報文中的指令序列中未讀取到的指令作為當前待解析數(shù)據,讀取當前待解析數(shù)據中的第一條指令,并將讀取到的指令順序保存到第二存儲區(qū)中;
步驟a2:終端設備判斷讀取到的指令是否為當前待解析數(shù)據中的最后一條指令,是則執(zhí)行步驟203,否則返回步驟a1;
相應地,步驟203,具體為:
步驟203’:終端設備將第二存儲區(qū)中的指令作為當前待處理數(shù)據,讀取當前待處理數(shù)據中的第一條指令作為當前指令,讀取當前指令對應的數(shù)據元的標簽作為當前標簽;
步驟208,具體為:
步驟208’:終端設備判斷第二存儲區(qū)中是否還有指令,是則執(zhí)行步驟209;否則,將第一存儲區(qū)中的操作結果返回給上位機,結束;
步驟209,具體為:
步驟209’:終端設備判斷是否繼續(xù)讀取第二存儲區(qū)中的指令,是則返回步驟203;否則,將第一存儲區(qū)中的操作結果返回給上位機,結束;
步驟210,具體為:
步驟210’:終端設備判斷第二存儲區(qū)中是否還有指令,是則返回步驟203;否則,將第一存儲區(qū)中的操作結果返回給上位機,結束;
本實施例中的方法,終端設備接收到的命令報文中含有指令序列,且指令序列中每條指令對應一個TLV結構的數(shù)據元,終端設備可以解析命令報文,每得到一個TLV結構的數(shù)據元處理一條對應的指令,也可以解析命令報文得到各TLV結構的數(shù)據元,并依次處理各TLV結構的數(shù)據元對應的指令,實現(xiàn)了一次交互完成多條指令的處理,提升了數(shù)據的處理效率。
實施例三
本發(fā)明實施例三提供一種終端設備高效率數(shù)據處理方法,當終端設備接收到上位機發(fā)送的命令報文時,終端設備中同時開啟并運行第一線程和第二線程;
如圖3所示,終端設備運行第一線程執(zhí)行以下操作:
步驟301:終端設備判斷接收到的命令報文是否正確,是則執(zhí)行步驟302,否則返回錯誤碼給上位機,結束;
在本實施例中,命令報文中含有指令序列,且指令序列中每條指令對應一個TLV(Type-Length-Value)結構的數(shù)據元,即“標簽(1個字節(jié))+數(shù)據長度(一個字節(jié))+數(shù)據(若干字節(jié))”的結構,其中,V結構上的所有數(shù)據為指令,或者V結構中第二個字節(jié)之后的所有數(shù)據為指令;優(yōu)選地,在本實施例中,V結構上的所有數(shù)據為指令;
特別地,當T結構上的數(shù)據為第一預設值時,其對應的數(shù)據元中L結構為00,故對應的指令為空指令,終端設備根據卡片的類型執(zhí)行卡片復位操作;優(yōu)選地,第一預設值為CC;
在本實施例中,步驟301的實現(xiàn)方法同實施例二的步驟202中所述的方法相同,在此不再贅述。
步驟302:終端設備將命令報文中的指令序列中未讀取到的指令作為當前待解析數(shù)據,讀取當前待解析數(shù)據中的第一條指令,并將讀取到的指令順序保存到第三存儲區(qū)中;
具體地,終端設備將命令報文中的指令序列中未讀取到的指令對應的數(shù)據元作為當前待處理數(shù)據,讀取當前待處理數(shù)據中的第一個數(shù)據元,將讀取到的數(shù)據元順序保存到第三存儲區(qū)中;
更加具體地,終端設備讀取命令報文中當前待解析數(shù)據中第一個字節(jié)上的數(shù)據,即T結構,得到當前待處理數(shù)據中第一個數(shù)據元的標簽,讀取當前待解析數(shù)據中第二字節(jié)上的數(shù)據,即L結構,得到當前待處理數(shù)據中第一個數(shù)據元的V結構的長度,根據讀取到的長度繼續(xù)讀取第二個字節(jié)之后的相應數(shù)據得到當前待處理數(shù)據中第一個數(shù)據元的V結構,讀取到的所有數(shù)據為當前待處理數(shù)據中的第一個數(shù)據元,將讀取到的數(shù)據元順序保存到第三存儲區(qū)中;
例如,接收到的命令報文為7E50000017810C00A4040007A0000003330101CC0002050084000008,當前待處理數(shù)據為810C00A4040007A0000003330101CC0002050084000008,讀取到的第一個數(shù)據元為810C00A4040007A0000003330101。
步驟303:終端設備判斷讀取到的指令是否為當前待解析數(shù)據中的最后一條指令,是則結束;否則,返回步驟302;
在本實施例中,終端設備判斷讀取到的指令是否為當前待解析數(shù)據中的最后一條指令,具體為:終端設備判斷讀取到的指令對應的數(shù)據元之后是否還有數(shù)據,是則確認讀取到的指令不是當前待解析數(shù)據中的最后一條指令,否則確認讀取到的指令是當前待解析數(shù)據中的最后一條指令。
在本實施例中,如圖4所示,終端設備運行第二線程執(zhí)行以下操作:
步驟401:終端設備訪問第三存儲區(qū),當檢測到第三存儲區(qū)中有指令時,執(zhí)行步驟402;
具體地,當檢測到第三存儲區(qū)中有數(shù)據元時,執(zhí)行步驟402。
步驟402:終端設備將第三存儲區(qū)中的指令作為當前待處理數(shù)據,讀取當前待處理數(shù)據中的第一條指令,并將其作為當前指令;
具體地,終端設備將第三存儲區(qū)中的數(shù)據元作為當前待處理數(shù)據,讀取當前待處理數(shù)據中的第一個數(shù)據元將其作為當前數(shù)據元,將當前數(shù)據元中的指令作為當前指令。
例如,讀取到的當前數(shù)據元為810C00A4040007A0000003330101,當前指令為00A4040007A0000003330101。
步驟403:終端設備將當前指令對應的數(shù)據元的標簽作為當前標簽,并判斷當前標簽是否為第一預設值,是則執(zhí)行步驟409,否則執(zhí)行步驟404;
優(yōu)選地,在本實施例中,第一預設值為CC。
進一步地,在本實施例中,當當前指令為三存儲區(qū)中的第一條指令時,由步驟403執(zhí)行步驟404和步驟410之前,還包括:
終端設備判斷卡片的類型,并根據卡片的類型執(zhí)行選卡操作,如果選卡操作成功,則繼續(xù);如果選卡操作失敗,則返回錯誤應答數(shù)據給上位機,結束;
在本實施例中,終端設備判斷卡片的類型的實現(xiàn)方法同實施例二的步驟P中所述的終端設備判斷卡片的類型的方法相同,在此不再贅述。
步驟404:終端設備發(fā)送當前指令給卡片;
步驟405:終端設備接收操作結果,并判斷卡片是否操作成功,是則將接收到的操作結果保存到第四存儲區(qū)中,將當前指令從第三存儲區(qū)中移除,執(zhí)行步驟410;否則,執(zhí)行步驟406;
具體地,終端設備接收操作結果,并判斷接收到的操作結果是為第三預設值,是則確認卡片操作成功,否則確認卡片操作失?。?/p>
優(yōu)選地,在本實施例中,第三預設值為0x9000。
進一步地,在本實施例中,將接收到的操作結果保存到第四存儲區(qū)中的方法,同實施例二步驟206中所述的將接收到的操作結果對應保存到第一存儲區(qū)中的方法相同,在此不再贅述。
步驟406:終端設備判斷接收到的操作結果是否小于第四預設值,是則將接收到的操作結果返回給上位機,結束,否則將接收到的操作結果對應保存到第四存儲區(qū)中,并將當前指令從第三存儲區(qū)中移除,執(zhí)行步驟407;
優(yōu)選地,在本實施例中,第四預設值為0x1000;
具體地,當終端設備接收到的操作結果小于0x1000時,該操作結果為終端設備自身返回的錯誤碼,判定終端設備自身出現(xiàn)錯誤,則退出數(shù)據處理流程,并將自身返回的錯誤碼發(fā)送給上位機,結束;當?shù)诙€程接收到的操作結果不小于0x1000時,確認該操作結果為卡片返回的操作失敗結果,執(zhí)行步驟407。
步驟407:終端設備判斷第三存儲區(qū)中是否還有指令,是則執(zhí)行步驟408,否則執(zhí)行步驟411;
步驟408:終端設備判斷是否繼續(xù)讀取第三存儲區(qū)中的指令,是則返回步驟402,否則執(zhí)行步驟411;
在本實施例中,步驟408的實現(xiàn)方法同實施例二的步驟209中所述的終端設備判斷是否繼續(xù)讀取命令報文中的指令序列中未讀取到的指令的方法相同,在此不再贅述。
步驟409:終端設備執(zhí)行卡片復位操作,接收卡片返回的操作結果并判斷復位操作是否成功,是則將接收到的操作結果對應保存到第四存儲區(qū)中,將當前指令從第三存儲區(qū)中清除,執(zhí)行步驟410,否則返回錯誤碼給上位機,結束;
具體地,當卡片為非接觸卡時,第二線程通過終端設備硬件對外部場強的控制對卡片執(zhí)行下電和上電操作,完成卡片的復位;
當卡片為接觸卡時,第二線程根據卡片的芯片類型發(fā)送相應的下電指令和上電指令給卡片,完成卡片的復位操作;
例如,當卡片的芯片為9541芯片時,第二線程發(fā)送給卡片的下電指令為63000000000000000000,上電指令為62000000000000000000。
步驟410:終端設備判斷第三存儲區(qū)中是否還有指令,是則返回步驟402;否則執(zhí)行步驟411:
步驟411:終端設備將第四存儲區(qū)中的操作結果返回給上位機,結束。
在本實施例中,步驟411的具體實現(xiàn)方法同實施例二的步驟212中所述的終端設備將第一存儲區(qū)中的操作結果返回給上位機的方法相同,在此不再贅述。
可選地,在本實施例中,當指令序列中的其中一條指令操作失敗時,終端設備還可以直接返回錯誤碼給上位機,結束;
本實施例中的方法,終端設備接收到的命令報文中含有指令序列,且指令序列中的每條指令對應一個TLV結構的數(shù)據元;終端設備中同時運行第一線程和第二線程;其中,終端設備運行第一線程來解析命令報文得到指令序列對應的各TLV結構的數(shù)據元,終端設備運行第二線程來處理運行第一線程得到的TLV結構的各數(shù)據元;第一線程和第二線程同時工作,進一步提升了數(shù)據處理效率。
實施例四
本發(fā)明實施例四提供一種終端設備高效率數(shù)據處理方法,如圖5所示,包括:
步驟501:終端設備接收上位機發(fā)送來的命令報文;
在本實施例中,命令報文中含有指令序列,且指令序列中各指令順序拼接,每相鄰的兩條指令之間以預設分隔標識分隔;優(yōu)選地,預設分隔標識為0x2C。
例如,終端設備接收到的上位機發(fā)送來的命令報文為7E1600001800A4040007A00000033301012C00840000042C0084000008;其中包含的指令序列為00A4040007A0000003330101、0084000004和0084000008。
步驟502:終端設備判斷接收到的命令報文是否正確,是則執(zhí)行步驟503,否則返回錯誤碼給上位,結束;
具體地,終端設備判斷命令報文中第一預設字節(jié)上的數(shù)據所示的長度與命令報文中的指令序列及各分隔標識的總長度是否相等,是則確認命令報文正確,否則確認命令報文不正確;優(yōu)選地,第一預設字節(jié)為第五個字節(jié);
例如,在上述命令報文中,讀取到第五個字節(jié)上的數(shù)據為18,轉換為十進制為24,即第五個字節(jié)上的數(shù)據所示的長度為24個字節(jié),從第六個字節(jié)起,讀取指令序列中各指令的長度為12個字節(jié)、5個字節(jié)和5個字節(jié),各分隔標識的長度為1個字節(jié)和1個字節(jié),將各指令的長度與各分隔標識的長度相加為24個字節(jié),確認接收到的命令報文正確;
步驟503:終端設備將命令報文中的指令序列中未讀取到的指令作為當前待處理數(shù)據,讀取當前待處理數(shù)據中的第一條指令;
具體地,在本實施例中,終端設備將命令報文中未讀取到的指令和分隔標識作為當前待處理數(shù)據,查找到當前待處理數(shù)據中的第一個分隔標識,讀取當前待處理數(shù)據中第一個字節(jié)至查找到的分隔標識的前一字節(jié)上的數(shù)據,得到第一條指令;
例如,在本實施例中,終端設備讀取命令報文中的第一條指令,則將第六個字節(jié)至最后一個字節(jié)上的數(shù)據00A4040007A00000033301012C00840000042C0084000008作為當前待處理數(shù)據,讀取到的第一條指令為00A4040007A0000003330101。
步驟504:終端設備根據預設方式更新計數(shù)器的計數(shù)值;
優(yōu)選地,在本實施例中,計數(shù)器的初始計數(shù)值為00,當終端設備讀取到一條指令時,終端設備將計數(shù)器的計數(shù)值增加預設步長,且預設步長為1。
例如,當讀取到命令報文的指令序列中的第一條指令時,將計時器的計數(shù)值更新為01。
步驟505:終端設備將讀取到的指令發(fā)送給卡片,并接收卡片返回的操作結果,如操作結果為操作成功,則將接收到的操作結果保存到第五存儲區(qū)中,執(zhí)行步驟506;如操作結果為操作失敗,則將接收到的操作結果和計數(shù)器的當前計數(shù)值一同返回給上位機,結束;
優(yōu)選地,在本實施例中,當接收到的操作結果為9000時,表示操作結果為操作成功,否則表示操作結果為操作失敗;
例如,在本實施例中,當讀取到的指令為第三條指令時,計數(shù)器的當前計時值為03,如接收到的操作結果為操作失敗,則將操作結果和03一同返回給上位機,結束。
在本實施例中,將接收到的操作結果保存到第五存儲區(qū)中,優(yōu)選為:將接收到的操作結果直接保存到第五存儲區(qū)中;
進一步地,在本實施例中,將接收到的操作結果保存到第五存儲區(qū)中,還可以為:將接收到的操作結果組織成TLV結構或者LV結構的數(shù)據元并保存至第五存儲區(qū)中;其中,TLV結構的數(shù)據元中,T結構上的數(shù)據與計數(shù)器的當前計數(shù)值相同;
例如,計數(shù)器的當前計數(shù)值為03,接收到的操作結果為9000,則將接收到的操作結果保存為03029000。
更進一步地,將接收到的操作結果和計數(shù)器的當前計數(shù)值一同返回給上位機,還可以替換為將接收到的操作結果組織成TLV結構的數(shù)據元,并返回給上位機;或者替換為將接收到的操作結果組織成LV結構的數(shù)據元并和計數(shù)器的當前計數(shù)值一同返回給上位機。
步驟506:終端設備判斷讀取到的指令是否為當前待處理數(shù)據中的最后一條指令,是則將第五存儲區(qū)中的最后一個操作結果返回給上位機,結束,否則返回步驟504。
其中,終端設備判斷讀取到的指令是否為當前待處理數(shù)據中的最后一條指令,具體為:終端設備判斷讀取到的指令之后是否還有數(shù)據,是則確認讀取到的指令不是當前待處理數(shù)據中的最后一條指令,否則確認讀取到的指令是當前待處理數(shù)據中的最后一條指令。
在本實施例中,將第五存儲區(qū)中的最后一個操作結果返回給上位機,即將指令序列中最后一條指令的操作結果返回給上位機。
進一步地,在本實施例中,將第五存儲區(qū)中的最后一個操作結果返回給上位機,還可以替換為:將第五存儲區(qū)中的所有操作結果返回給上位機;
具體地,將第五存儲區(qū)中的所有操作結果順序拼接,并在每相鄰的兩個操作結果之間添加預設分隔標識得到響應報文,將響應報文返回給上位機;優(yōu)選地,預設分隔標識為0x2C;
或者,當將接收到的操作結果保存到第五存儲區(qū)中具體為:將接收到的操作結果組織成TLV結構或者LV結構的數(shù)據元,并將數(shù)據元保存至第五存儲區(qū)中時,相應地,將第五存儲區(qū)中的所有操作結果返回給上位機,具體為:將第五存儲區(qū)中數(shù)據元結構的操作結果順序拼接得到響應報文,將響應報文返回給上位機。
實施例五
本發(fā)明實施例五提供一種終端設備高效率數(shù)據處理方法,如圖6所示,包括:
步驟601:終端設備接收上位機發(fā)送來的命令報文;
在本實施例中,命令報文中含有指令序列,且指令序列中每條指令對應一個LV(Length-Value)結構的數(shù)據元,即“數(shù)據長度(二個字節(jié))+數(shù)據(若干字節(jié))”的結構,其中,V結構上的數(shù)據為指令;
例如,在本實施例中,終端設備接收到的命令報文為0X0400002F000580EA000008000680FC19000104000780FC1800020001000700A40000022001000580FC04110100050084000008;其中,指令序列為指令80EA000008、80FC19000104、80FC1800020001、00A40000022001、580FC041101和0084000008,對應的LV結構的數(shù)據元分別為:000580EA000008、000680FC19000104、000780FC1800020001、000700A40000022001、1000580FC041101、00050084000008。
進一步地,在本實施例中,指令序列中每條指令還可以對應一個TLV(Type-Length-Value)結構的數(shù)據元。
步驟602:終端設備判斷接收到的命令報文是否正確,是則執(zhí)行步驟603,否則返回錯誤碼給上位機,結束;
具體地,終端設備判斷命令報文中第一預設字節(jié)上的數(shù)據所示的長度與命令報文中的指令序列對應的各LV結構的數(shù)據元的總長度是否相等,是則確認接收到的命令報文正確,否則確認接收到的命令報文不正確;優(yōu)選地,第一預設字節(jié)為第五個字節(jié);
更加具體地,終端設備讀取命令報文的第五個字節(jié)上的數(shù)據得到各數(shù)據元的總長度,并從命令報文的第六個字節(jié)起,依次讀取各數(shù)據元中L結構上的數(shù)據得到各數(shù)據元的V結構的長度,將各數(shù)據元的V結構的長度加2個字節(jié)得到各數(shù)據元的長度,將各數(shù)據元的長度相加求和,判斷相加求得的和與得到的各數(shù)據元的總長度是否相等,是則確認接收到的命令報文正確,否則確認接收到的命令報文不正確;
例如,在上述命令報文中,讀取第五個字節(jié)上的數(shù)據為2F,轉換成十進制為47,即第五個字節(jié)上的數(shù)據所示的長度為47個字節(jié);從第六個字節(jié)起,依次讀取各數(shù)據元中L結構上的數(shù)據得到各數(shù)據元的V結構的長度分別為0005、0006、0007、0007、0005、0005,可得各LV結構的數(shù)據元的長度分別為7個字節(jié)、8個字節(jié)、9個字節(jié)、9個字節(jié)、7個字節(jié)、7個字節(jié),將各LV結構的數(shù)據元的長度相加求得的和為47個字節(jié),確認接收到的命令報文正確。
步驟603:終端設備將命令報文中的指令序列中未讀取到的指令作為當前待處理數(shù)據,并讀取當前待處理數(shù)據中的第一條指令,將其作為當前指令;
具體地,在本實施例中,終端設備將命令報文中的指令序列中未讀取到的指令對應的數(shù)據元作為當前待處理數(shù)據,并讀取當前待處理數(shù)據中的第一個數(shù)據元作為當前數(shù)據元,將當前數(shù)據元中的指令作為當前指令。
更加具體地,終端設備將命令報文中的指令序列中未讀取到的指令對應的數(shù)據元作為當前待處理數(shù)據,讀取當前待處理數(shù)據的前兩個字節(jié)上的數(shù)據,即L結構,得到當前待處理數(shù)據中的第一個數(shù)據元的V結構的長度,根據得到的長度讀取第二個字節(jié)之后的相應數(shù)據得到當前待處理數(shù)據中第一個數(shù)據元的V結構,讀取到的所有數(shù)據為當前待處理數(shù)據中的第一個數(shù)據元,并將其作為當前數(shù)據元,并將當前數(shù)據元的V結構上的數(shù)據作為當前指令;
例如,在上述命令報文中,讀取到當前待處理數(shù)據中的第一個數(shù)據元為000580EA000008,并將其作為當前數(shù)據元。
步驟604:終端設備根據當前指令執(zhí)行相應操作,得到操作結果,并將操作結果對應保存到第六存儲區(qū)中;
優(yōu)選地,在本實施例中,將操作結果對應保存到第六存儲區(qū)中,具體為:將操作結果組織成LV結構的數(shù)據元并保存到第六存儲區(qū)中;
例如,終端設備根據當前數(shù)據元000580EA000008執(zhí)行獲取序列號操作,優(yōu)選地,獲取成功,得到操作結果為000000570000025900009000,則將操作結果保存為000C000000570000025900009000。
進一步地,在本實施例中,終端設備還可以將操作結果直接保存到第六存儲區(qū)中,或者將操作結果組織成TLV結構的數(shù)據元,并保存到第六存儲區(qū)中;
例如,將上述操作結果000000570000025900009000保存到第六存儲區(qū)中,或者將010C000000570000025900009000保存到第六存儲區(qū)中。
步驟605:終端設備判斷當前指令是否為當前待處理數(shù)據中的最后一條指令,是則將第六存儲區(qū)中的操作結果返回給上位機,結束;否則,返回步驟603。
在本實施例中,終端設備判斷當前指令是否為當前待處理數(shù)據中的最后一條指令,具體為:終端設備判斷當前指令之后是否還有數(shù)據,是則確認當前指令不是當前待處理數(shù)據中的最后一條指令,否則確認當前指令是當前待處理數(shù)據中的最后一條指令;
在本實施例中,將第六存儲區(qū)中的操作結果返回給上位機,具體為:終端設備將第六存儲區(qū)中的操作結果順序拼接后得到響應報文,將響應報文返回給上位機。
進一步地,當終端設備將操作結果直接保存到第六存儲區(qū)中時,對應地,將第六存儲區(qū)中的操作結果返回給上位機,具體為:終端設備將第六存儲區(qū)中的操作結果順序拼接,并在每相鄰的兩個操作結果之間添加預設分隔標識得到響應報文,將響應報文返回給上位機;
優(yōu)選地,預設分隔標識為0x2C;
在本實施例中,將第六存儲區(qū)中的操作結果返回給上位機,還可以為:終端設備將第六存儲區(qū)中的操作結果中,最后一個操作結果返回給上位機。
可選地,在本實施例中,當指令序列中的其中一條指令操作失敗時,終端設備還可以直接返回錯誤碼給上位機,結束;
更進一步地,在本實施例中,終端設備接收到的命令報文中含有指令序列,且指令序列中每條指令對應一個LV結構的數(shù)據元,終端設備解析命令報文,每得到一個LV結構的數(shù)據元處理一條對應的指令;終端設備還可以解析命令報文得到各LV結構的數(shù)據元,并依次處理各LV結構的數(shù)據元對應的指令;終端設備還可以同時運行第一線程和第二線程,其中,終端設備運行第一線程來解析命令報文得到指令序列對應的各LV結構的數(shù)據元,終端設備運行第二線程來處理第一線程得到的各數(shù)據元對應的指令。
實施例六
本發(fā)明提供一種高效率數(shù)據處理終端設備,如圖7所示,包括:
第一接收模塊701、第一讀取模塊702、執(zhí)行模塊703和第一發(fā)送模塊704;
其中,第一接收模塊701,用于接收上位機發(fā)送來的命令報文;
第一讀取模塊702,用于讀取第一接收模塊701接收到的命令報文中的指令序列;
執(zhí)行模塊703,用于根據第一讀取模塊702讀取到的指令序列依次執(zhí)行相應操作得到一系列操作結果;
第一發(fā)送模塊704,用于當命令報文中的指令序列全部處理完成時,將操作結果返回給上位機。
本實施例中的終端設備,還包括:第一判斷模塊;
第一判斷模塊,用于第一讀取模塊702讀取第一接收模塊701接收到的命令報文中的指令序列之前,判斷第一接收模塊701接收到的命令報文是否正確;
第一讀取模塊702,具體用于:當?shù)谝慌袛嗄K判斷出第一接收模塊701接收到的命令報文正確時,讀取第一接收模塊701接收到的命令報文中的指令序列;
第一發(fā)送模塊704,還用于當?shù)谝慌袛嗄K判斷出第一接收模塊701接收到的命令報文不正確時,返回錯誤碼給上位機,結束。
在本實施例中,第一判斷模塊,具體用于:
判斷命令報文中第一預設字節(jié)上的數(shù)據所示的長度與命令報文的指令序列對應的各數(shù)據元的總長度是否相等,是則確認命令報文正確,否則確認命令報文不正確;
或者,
判斷命令報文中第一預設字節(jié)上的數(shù)據所示的長度與命令報文中的指令序列及各分隔標識的總長度是否相等,是則確認命令報文正確,否則確認命令報文不正確。
在本實施例中,第一讀取模塊702,具體用于:
解析命令報文得到各數(shù)據元,讀取各數(shù)據元中的指令得到指令序列;
或者,
解析命令報文得到各分隔標識,根據得到的各分隔標識讀取指令得到指令序列。
本實施例中的終端設備,還包括:第二判斷模塊;
第一讀取模塊702,具體用于:將命令報文中的指令序列中未讀取到的指令作為當前待處理數(shù)據,讀取當前待處理數(shù)據中的第一條指令,將其作為當前指令;
執(zhí)行模塊703,具體用于:根據當前指令執(zhí)行相應操作得到操作結果;
第二判斷模塊,具體用于:判斷當前指令是否為當前待處理數(shù)據中的最后一條指令;
第一發(fā)送模塊704,具體用于:當?shù)诙袛嗄K判斷出當前指令是當前待處理數(shù)據中的最后一條指令時,確認指令序列全部處理完成,將操作結果返回給上位機;
第一讀取模塊702,還用于當?shù)诙袛嗄K判斷出當前指令不是當前待處理數(shù)據中的最后一條指令時,將命令報文中的指令序列中未讀取到的指令作為當前待處理數(shù)據,并讀取當前待處理數(shù)據中的第一條指令,將其作為當前指令。
可選地,本實施例中的終端設備,還包括:第一保存模塊、第二判斷模塊、第二讀取模塊、第一移除模塊和第三判斷模塊;
相應地,第一讀取模塊702,用于將命令報文中的指令序列中未讀取到的指令作為當前待解析數(shù)據,讀取當前待解析數(shù)據中的第一條指令;
第一保存模塊,用于將第一讀取模塊讀取到的指令順序保存到預設存儲區(qū)中;
第二判斷模塊,用于判斷第一讀取模塊702讀取到的指令是否為當前待解析數(shù)據中的最后一條指令;
第一讀取模塊702,還用于當?shù)诙袛嗄K判斷出第一讀取模塊702讀取到的指令不是當前待解析數(shù)據中的最后一條指令時,將命令報文中的指令序列中未讀取到的指令作為當前待解析數(shù)據,讀取當前待解析數(shù)據中的第一條指令;
第二讀取模塊,用于當?shù)诙袛嗄K判斷出第一讀取模塊702讀取到的指令是當前待解析數(shù)據中的最后一條指令時,將預設存儲區(qū)中的指令作為當前待處理數(shù)據,讀取當前待處理數(shù)據中的第一條指令作為當前指令;
執(zhí)行模塊703,用于根據第二讀取模塊讀取到的當前指令執(zhí)行相應操作得到操作結果;
第一移除模塊,用于當執(zhí)行模塊703根據當前指令執(zhí)行相應操作得到操作結果之后,將當前指令從預設存儲區(qū)中移除;
第三判斷模塊,用于第一移除模塊將當前指令從預設存儲區(qū)中移除之后,判斷預設存儲區(qū)中是否還有指令;
第二讀取模塊,還用于當?shù)谌袛嗄K判斷出預設存儲區(qū)中有指令時,將預設存儲區(qū)中的指令作為當前待處理數(shù)據,讀取當前待處理數(shù)據中的第一條指令作為當前指令;
第一發(fā)送模塊704,具體用于:當?shù)谌袛嗄K判斷出預設存儲區(qū)中沒有指令時,確認命令報文中的指令序列全部處理完成,將操作結果返回給上位機。
可選地,本實施例中的終端設備,還包括:第二保存模塊、第四判斷模塊、檢測模塊、第三讀取模塊、第二移除模塊和第五判斷模塊;
相應地,第一讀取模塊702,用于將指令序列中未讀取到的指令作為當前待解析數(shù)據,讀取當前待解析數(shù)據中的第一條指令;
第二保存模塊,還用于將第一讀取模塊702讀取到的指令順序保存到預設存儲區(qū)中;
第四判斷模塊,用于判斷第一讀取模塊702讀取到的指令是否為當前待解析數(shù)據中的最后一條指令;
第一讀取模塊702,還用于當?shù)谒呐袛嗄K判斷出第一讀取模塊702讀取到的指令不是當前待解析數(shù)據中的最后一條指令時,將命令報文中的指令序列中未讀取到的指令作為當前待解析數(shù)據,讀取當前待解析數(shù)據中的第一條指令;
在本實施例中,終端設備中運行上述第一讀取模塊702、第二保存模塊和第四判斷模塊的同時,還運行上述檢測模塊、第三讀取模塊、執(zhí)行模塊703、第二移除模塊和第五判斷模塊;
其中,檢測模塊,用于訪問預設存儲區(qū),檢測預設存儲區(qū)中是否有指令;
第三讀取模塊,用于當檢測模塊檢測到預設存儲區(qū)中有指令時,將預設存儲區(qū)中的指令作為當前待處理數(shù)據,讀取當前待處理數(shù)據中的第一條指令作為當前指令;
執(zhí)行模塊703,具體用于:根據第三讀取模塊讀取到的當前指令執(zhí)行相應操作得到操作結果;
第二移除模塊,用于當執(zhí)行模塊703根據當前指令執(zhí)行相應操作得到操作結果之后,將當前指令從所述預設存儲區(qū)中移除;
第五判斷模塊,用于第二移除模塊將當前指令從預設存儲區(qū)中移除之后,判斷預設存儲區(qū)中是否還有指令;
第三讀取模塊,還用于當?shù)谖迮袛嗄K判斷出預設存儲區(qū)中還有指令時,將預設存儲區(qū)中的指令作為當前待處理數(shù)據,讀取當前待處理數(shù)據中的第一條指令作為當前指令;
第一發(fā)送模塊704,具體用于:當?shù)谖迮袛嗄K判斷出預設存儲區(qū)中沒有指令時,確認指令序列全部處理完成,將操作結果返回給上位機。
可選地,在本實施例中,第一發(fā)送模塊704,還用于當指令序列的其中一條指令處理失敗時,將當前已得到的操作結果順序拼接,并與指令序列中未處理的指令的個數(shù)對應,在拼接后的操作結果之后填充相同個數(shù)的第二預設數(shù)據得到響應報文,將響應報文返回給上位機。
可選地,第一發(fā)送模塊704,還用于當指令序列的其中一條指令處理失敗時,返回錯誤碼給上位機。
本實施例中的終端設備,還包括:更新模塊;
更新模塊,用于第一讀取模塊702讀取命令報文中的指令序列之后,根據預設方式更新計數(shù)標識;
第一發(fā)送模塊704,還用于當指令序列的其中一條指令處理失敗時,將失敗操作結果同計數(shù)標識的當前計數(shù)值一同返回給上位機。
可選地,在本實施例中,第一發(fā)送模塊704,具體用于:
將一系列數(shù)據元結構的操作結果順序拼接得到響應報文,將響應報文返回給上位機;
或者,
將一系列操作結果順序拼接,并在每相鄰的兩個操作結果之間添加分隔標識得到響應報文,將響應報文返回給上位機;
或者,
將一系列操作結果中最后一個操作結果返回給上位機。
實施例七
本發(fā)明實施例七提供一種高效率數(shù)據處理終端設備,如圖8所示,包括:
第一接收模塊801、第一讀取模塊802、第二發(fā)送模塊803、第二接收模塊804和第一發(fā)送模塊805;
其中,第一接收模塊801,用于接收上位機發(fā)送來的命令報文;
第一讀取模塊802:用于讀取第一接收模塊801接收到的命令報文中的指令序列;
第二發(fā)送模塊803,用于將第一讀取模塊802讀取到的指令序列依次發(fā)送給卡片;
第二接收模塊804,用于接收卡片返回的操作結果;
第一發(fā)送模塊805,用于當命令報文中的指令序列全部處理完成時,將操作結果返回給上位機。
本實施例中的終端設備,還包括:第一判斷模塊;
第一判斷模塊,用于第一讀取模塊802讀取第一接收模塊801接收到的命令報文中的指令序列之前,判斷第一接收模塊801接收到的命令報文是否正確;
第一讀取模塊802,具體用于:當?shù)谝慌袛嗄K判斷出第一接收模塊801接收到的命令報文正確時,讀取第一接收模塊801接收到的命令報文中的指令序列;
第一發(fā)送模塊805,還用于當?shù)谝慌袛嗄K判斷出第一接收模塊801接收到的命令報文不正確時,返回錯誤碼給上位機,結束。
在本實施例中,第一判斷模塊,具體用于:
判斷命令報文中第一預設字節(jié)上的數(shù)據所示的長度與命令報文的指令序列對應的各數(shù)據元的總長度是否相等,是則確認命令報文正確,否則確認命令報文不正確;
或者,
判斷命令報文中第一預設字節(jié)上的數(shù)據所示的長度與命令報文中的指令序列及各分隔標識的總長度是否相等,是則確認命令報文正確,否則確認命令報文不正確。
在本實施例中,第一讀取模塊802,具體用于:
解析命令報文得到各數(shù)據元,讀取各數(shù)據元中的指令得到指令序列;
或者,
解析命令報文得到各分隔標識,根據得到的各分隔標識讀取指令得到指令序列。
可選地,本實施例中的終端設備,還包括:第二判斷模塊;
第一讀取模塊802,具體用于:將指令序列中未讀取到的指令作為當前待處理數(shù)據,讀取當前待處理數(shù)據中的第一條指令,將其作為當前指令;
第二發(fā)送模塊803,具體用于:將當前指令發(fā)送給卡片;
第二判斷模塊,具體用于:判斷當前指令是否為當前待處理數(shù)據中的最后一條指令;
第一發(fā)送模塊805,具體用于:當?shù)诙袛嗄K判斷出當前指令是當前待處理數(shù)據中的最后一條指令時,確認命令報文中的指令序列全部處理完成,將操作結果返回給上位機;
第一讀取模塊802,還用于當?shù)诙袛嗄K判斷出當前指令不是當前待處理數(shù)據中的最后一條指令時,將命令報文中的指令序列中未讀取到的指令作為當前待處理數(shù)據,并讀取當前待處理數(shù)據中的第一條指令,將其作為當前指令。
可選地,本實施例中的終端設備,還包括:第一保存模塊、第二判斷模塊、第二讀取模塊、第一移除模塊和第三判斷模塊;
相應地,第一讀取模塊802,用于將命令報文中的指令序列中未讀取到的指令作為當前待解析數(shù)據,讀取當前待解析數(shù)據中的第一條指令;
第一保存模塊,用于將第一讀取模塊802讀取到的指令順序保存到預設存儲區(qū)中;
第二判斷模塊,用于判斷第一讀取模塊802讀取到的指令是否為當前待解析數(shù)據中的最后一條指令;
第一讀取模塊802,還用于當?shù)诙袛嗄K判斷出第一讀取模塊讀取到的指令不是當前待解析數(shù)據中的最后一條指令時,將命令報文中的指令序列中未讀取到的指令作為當前待解析數(shù)據,讀取當前待解析數(shù)據中的第一條指令;
第二讀取模塊,用于當?shù)诙袛嗄K判斷出第一讀取模塊802讀取到的指令是當前待解析數(shù)據中的最后一條指令時,將預設存儲區(qū)中的指令作為當前待處理數(shù)據,讀取當前待處理數(shù)據中的第一條指令作為當前指令;
第二發(fā)送模塊803,具體用于:將第二讀取模塊讀取到的當前指令發(fā)送給卡片;
第一移除模塊,用于當?shù)诙邮漳K804接收到卡片返回的操作結果之后,將當前指令從預設存儲區(qū)中移除;
第三判斷模塊,用于第一移除模塊將當前指令從預設存儲區(qū)中移除之后,判斷預設存儲區(qū)中是否還有指令;
第二讀取模塊,還用于當?shù)谌袛嗄K判斷出預設存儲區(qū)中有指令時,將預設存儲區(qū)中的指令作為當前待處理數(shù)據,讀取當前待處理數(shù)據中的第一條指令作為當前指令;
第一發(fā)送模塊805,具體用于:當?shù)谌袛嗄K判斷出預設存儲區(qū)中沒有指令時,確認命令報文中的指令序列全部處理完成,將操作結果返回給上位機。
可選地,本實施例中的終端設備,還包括:第二保存模塊、第四判斷模塊、檢測模塊、第三讀取模塊、第二移除模塊和第五判斷模塊;
相應地,第一讀取模塊802,用于將命令報文中的指令序列中未讀取到的指令作為當前待解析數(shù)據,讀取當前待解析數(shù)據中的第一條指令;
第二保存模塊,還用于將第一讀取模塊802讀取到的指令順序保存到預設存儲區(qū)中;
第四判斷模塊,用于判斷第一讀取模塊802讀取到的指令是否為當前待解析數(shù)據中的最后一條指令;
第一讀取模塊802,還用于當?shù)谒呐袛嗄K判斷出第一讀取模塊802讀取到的指令不是當前待解析數(shù)據中的最后一條指令時,將命令報文中的指令序列中未讀取到的指令作為當前待解析數(shù)據,讀取當前待解析數(shù)據中的第一條指令;
在本實施例中,終端設備中運行上述第一讀取模塊802、第二保存模塊和第四判斷模塊的同時,還運行檢測模塊、第三讀取模塊、第二發(fā)送模塊803、第二移除模塊和第五判斷模塊;
其中,檢測模塊,用于訪問預設存儲區(qū),檢測預設存儲區(qū)中是否有指令;
第三讀取模塊,用于當檢測模塊檢測到預設存儲區(qū)中有指令時,將預設存儲區(qū)中的指令作為當前待處理數(shù)據,讀取當前待處理數(shù)據中的第一條指令作為當前指令;
第二發(fā)送模塊803,具體用于:將第三讀取模塊讀取到的當前指令發(fā)送給卡片;
第二移除模塊,用于當?shù)诙邮漳K804接收到卡片返回的操作結果之后,將當前指令從預設存儲區(qū)中移除;
第五判斷模塊,用于第二移除模塊將當前指令從預設存儲區(qū)中移除之后,判斷預設存儲區(qū)中是否還有指令;
第三讀取模塊,還用于當?shù)谖迮袛嗄K判斷出預設存儲區(qū)中還有指令時,將預設存儲區(qū)中的指令作為當前待處理數(shù)據,讀取當前待處理數(shù)據中的第一條指令作為當前指令;
第一發(fā)送模塊805,具體用于:當?shù)谖迮袛嗄K判斷出預設存儲區(qū)中沒有指令時,確認命令報文中的指令序列全部處理完成,將操作結果返回給上位機。
本實施例中的終端設備,還包括:第六判斷模塊和第二執(zhí)行模塊;
其中,第六判斷模塊,用于第二發(fā)送模塊803將指令序列依次發(fā)送給卡片之前,判斷當前待發(fā)送指令對應的數(shù)據元中第一個字節(jié)上的數(shù)據是否為第一預設值;
第二執(zhí)行模塊,用于當?shù)诹袛嗄K判斷出當前待發(fā)送指令對應的數(shù)據元中第一個字節(jié)上的數(shù)據是第一預設值時,執(zhí)行卡片復位操作;
第二發(fā)送模塊803,具體用于:當?shù)诹袛嗄K判斷出當前待發(fā)送指令對應的數(shù)據元中第一個字節(jié)上的數(shù)據不是第一預設值時,將當前待發(fā)送指令發(fā)送給卡片。
本實施例中的終端設備,還包括:第七判斷模塊和第八判斷模塊;
其中,第七判斷模塊,用于當卡片返回的操作結果為操作失敗時,判斷與操作結果對應的指令是否為指令序列中的最后一條指令;
第一發(fā)送模塊805,還用于:當?shù)谄吲袛嗄K判斷出與操作結果對應的指令是指令序列中的最后一條指令時,確認命令報文中的指令序列全部處理完成,將操作結果返回給上位機;
第八判斷模塊,用于當?shù)谄吲袛嗄K判斷出與操作結果對應的指令不是指令序列中的最后一條指令時,判斷是否繼續(xù)讀取指令序列中未讀取到的指令;
第一讀取模塊802,還用于當?shù)诎伺袛嗄K判斷出繼續(xù)讀取指令序列中未讀取到的指令時,讀取命令報文中的指令序列;
第一發(fā)送模塊805,還用于當?shù)诎伺袛嗄K判斷出不繼續(xù)讀取指令序列中未讀取到的指令時,將已接收到的操作結果返回給上位機,結束。
在本實施例中,上述第八判斷模塊,具體用于:
將與操作失敗結果對應的指令所對應的數(shù)據元中第三預設字節(jié)上的數(shù)據與第二預設值做與運算得到運算結果,將運算結果轉換為二進制表示,判斷二進制表示的運算結果中最高位上的數(shù)據是否為第一預設數(shù)據,是則確認繼續(xù)讀取指令序列中未讀取到的指令,否則確認不繼續(xù)讀取指令報文中未讀取到的指令;
或者,
判斷與操作失敗結果對應的指令所對應的數(shù)據元中第四預設字節(jié)上的數(shù)據是否為第三預設數(shù)據,是則確認繼續(xù)讀取指令序列中未讀取到的指令,否則確認不繼續(xù)讀取指令序列中未讀取到的指令。
可選地,在本實施例中,第一發(fā)送模塊805,還用于當指令序列的其中一條指令處理失敗時,將當前已接收到的操作結果順序拼接,并與指令序列中未處理的指令的個數(shù)對應,在拼接后的操作結果之后填充相同個數(shù)的第二預設數(shù)據得到響應報文,將響應報文返回給上位機。
可選地,第一發(fā)送模塊805,還用于當指令序列的其中一條指令處理失敗時,返回錯誤碼給上位機。
可選地,本實施例中的終端設備,還包括:更新模塊;
更新模塊,用于第一讀取模塊802讀取命令報文中的指令序列之后,根據預設方式更新計數(shù)標識;
相應地,第一發(fā)送模塊805,還用于當指令序列的其中一條指令處理失敗時,將失敗操作結果同計數(shù)標識的當前計數(shù)值一同返回給上位機。
可選地,第一發(fā)送模塊805,還用于當?shù)诙邮漳K804接收到的操作結果小于第四預設值時,將接收到的操作結果返回給上位機。
本實施例中的終端設備,還包括:第九判斷模塊和選卡模塊;
其中,第九判斷模塊,用于當?shù)谝蛔x取模塊802讀取指令序列中的第一條指令時,第二發(fā)送模塊803將第一讀取模塊802讀取到的指令發(fā)送給卡片之前,判斷卡片類型;
選卡模塊,用于根據第九判斷模塊判斷出的卡片類型執(zhí)行選卡操作;
第二發(fā)送模塊803,具體用于:當選卡模塊操作成功時,將第一讀取模塊讀取到的指令發(fā)送給卡片;
第一發(fā)送模塊805,還用于當選卡模塊操作失敗時,返回錯誤碼給上位機。
在本實施例中,第一發(fā)送模塊805,具體用于:
將一系列數(shù)據元結構的操作結果順序拼接得到響應報文,將響應報文返回給上位機;
或者,
將一系列操作結果順序拼接,并在每相鄰的兩個操作結果之間添加分隔標識得到響應報文,將響應報文返回給上位機;
或者,
將一系列操作結果中最后一個操作結果返回給上位機。
本發(fā)明中,在終端設備與上位機進行數(shù)據交互的過程中,一個命令報文中含有多條指令,實現(xiàn)了一次交互完成多條指令的處理,提升了終端設備的數(shù)據處理速率。
以上所述,僅為本發(fā)明較佳的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術領域的技術人員在本發(fā)明揭露的技術范圍內,可輕易想到變化或替換,都應涵蓋在本發(fā)明的保護范圍之內。因此,本發(fā)明的保護范圍應以權利要求的保護范圍為準。