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