專(zhuān)利名稱(chēng):一種實(shí)現(xiàn)智能卡多任務(wù)處理的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及智能卡操作系統(tǒng)領(lǐng)域,特別涉及一種實(shí)現(xiàn)智能卡多任務(wù)處理的方法。
背景技術(shù):
目前,智能卡應(yīng)用已廣泛滲透到各個(gè)行業(yè),智能卡以其安全、方便、快捷、容量大、多功能等諸多特點(diǎn)越來(lái)越受到普遍重視,并被廣泛應(yīng)用。同時(shí)隨著半導(dǎo)體技術(shù)和電子技術(shù)的迅猛發(fā)展,使得一張卡片能同時(shí)存儲(chǔ)的數(shù)據(jù)量大大增加,這也使得一張卡片通過(guò)多接口實(shí)現(xiàn)同時(shí)支持多個(gè)應(yīng)用有了物理基礎(chǔ),同時(shí)在一張卡片具備多個(gè)接口實(shí)現(xiàn)多個(gè)應(yīng)用的時(shí),會(huì)遇到需要多個(gè)接口同時(shí)工作的情況,這些是目前智能卡操作系統(tǒng)的研發(fā)遇到的難題,現(xiàn)有的傳統(tǒng)的多界面智能卡無(wú)法保證在所有處理的數(shù)據(jù)都滿足各自的接口規(guī)范時(shí),各界面的數(shù)據(jù)能夠同時(shí)處理,無(wú)法滿足多接口同時(shí)工作的需求。
發(fā)明內(nèi)容
本發(fā)明的目的是解決現(xiàn)有技術(shù)中一張智能卡在一個(gè)時(shí)刻只有一個(gè)IO接口可以工作的問(wèn)題,提出了一種實(shí)現(xiàn)智能卡多任務(wù)處理的方法,即實(shí)現(xiàn)同一時(shí)刻智能卡的多個(gè)IO接口同時(shí)工作進(jìn)而實(shí)現(xiàn)同一時(shí)刻智能卡的多任務(wù)處理。
本發(fā)明采取的技術(shù)方案是
一種實(shí)現(xiàn)智能卡多任務(wù)處理的方法,包括步驟SI :智能卡上電,進(jìn)行卡片初始化;
步驟S2 :智能卡的底層操作系統(tǒng)對(duì)多任務(wù)環(huán)境進(jìn)行初始化;
步驟S3 :智能卡的底層操作系統(tǒng)創(chuàng)建多個(gè)任務(wù),并為創(chuàng)建的多個(gè)任務(wù)分配優(yōu)先
步驟S4 :智能卡的底層操作系統(tǒng)查找優(yōu)先級(jí)最高且當(dāng)前狀態(tài)為就緒狀態(tài)的任務(wù)
級(jí);
并切換到該任務(wù)運(yùn)行;
號(hào);
當(dāng)切換到SWP任務(wù)運(yùn)行時(shí),執(zhí)行步驟S5-S13 ;
當(dāng)切換到ISO任務(wù)運(yùn)行時(shí),執(zhí)行步驟S14-S20 ;
步驟S5 :所述SWP任務(wù)判斷是否有激活信號(hào),是則執(zhí)行下一步,否則等待激活信
步驟S6 :所述SWP任務(wù)檢測(cè)到激活信號(hào)后向上層發(fā)送SWP激活數(shù)據(jù)幀;
步驟S7 :所述SWP任務(wù)等待接收上層下發(fā)數(shù)據(jù);
步驟S8 :所述SWP任務(wù)判斷接收到的數(shù)據(jù)是否符合預(yù)設(shè)數(shù)據(jù)幀格式,是則執(zhí)行步驟S9,否則執(zhí)行SWP層協(xié)議處理返回相應(yīng)響應(yīng)數(shù)據(jù)給上層,然后返回步驟S7 ;步驟S9 :所述SWP任務(wù)判斷接收到的數(shù)據(jù)是否包含HCI數(shù)據(jù)包,是則執(zhí)行步驟S10,否則執(zhí)行SWP層協(xié)議處理返回相應(yīng)響應(yīng)數(shù)據(jù)給上層,然后返回步驟S7 ;步驟SlO :所述SWP任務(wù)判斷所述HCI數(shù)據(jù)包中是否包含預(yù)設(shè)事件指令,是則執(zhí)行步驟S11,否則執(zhí)行HCI協(xié)議層處理返回第一響應(yīng)數(shù)據(jù)給上層,然后返回步驟S7 ;
5
步驟Sll :所述SWP任務(wù)提取所述預(yù)設(shè)指令中包含的APDU數(shù)據(jù),并執(zhí)行APDU命令 處理得到處理結(jié)果;步驟S12 :所述SWP任務(wù)把處理結(jié)果打包成HCI數(shù)據(jù)包,再把所述HCI數(shù)據(jù)包打包 成符合預(yù)設(shè)數(shù)據(jù)幀格式的第二響應(yīng)數(shù)據(jù);步驟S13 :所述SWP任務(wù)將所述第二響應(yīng)數(shù)據(jù)返回給上層,返回步驟S7 ;步驟S14 :所述ISO任務(wù)判斷是否有激活信號(hào),是則執(zhí)行下一步,否則等待激活信 號(hào);步驟S15 :所述ISO任務(wù)檢測(cè)到激活信號(hào)后向上層發(fā)送ISO激活數(shù)據(jù)幀;步驟S16 :所述ISO任務(wù)等待接收上層下發(fā)數(shù)據(jù);步驟S17 :所述ISO任務(wù)判斷接收到的數(shù)據(jù)是否是PPS數(shù)據(jù),是則執(zhí)行PPS處理返 回PPS響應(yīng)數(shù)據(jù)給上層,否則執(zhí)行步驟S18 ;步驟S18 :所述ISO任務(wù)等待接收APDU數(shù)據(jù);步驟S19 :所述ISO任務(wù)對(duì)接收到的所述APDU數(shù)據(jù)執(zhí)行APDU命令處理得到處理
結(jié)果;步驟S20 :所述ISO任務(wù)將處理結(jié)果返回給上層,返回步驟S18。該方法還可以是當(dāng)切換到SWP任務(wù)運(yùn)行時(shí),執(zhí)行步驟S5’_S13’ ;當(dāng)切換到ISO任務(wù)運(yùn)行時(shí),執(zhí)行步驟S14’ -S20’ ;當(dāng)切換到APDUProcess任務(wù)時(shí)候,執(zhí)行步驟S21’ -S25’ ;步驟S5’ 所述SWP任務(wù)判斷是否有激活信號(hào),是則執(zhí)行下一步,否則等待激活信 號(hào);步驟S6’ 所述SWP任務(wù)檢測(cè)到激活信號(hào)后向上層發(fā)送SWP激活數(shù)據(jù)幀;步驟S7’ 所述SWP任務(wù)等待接收上層下發(fā)數(shù)據(jù);步驟S8’ 所述SWP任務(wù)判斷接收到的數(shù)據(jù)是否符合預(yù)設(shè)數(shù)據(jù)幀格式,是則執(zhí)行步 驟S9’,否則執(zhí)行SWP層協(xié)議處理返回相應(yīng)響應(yīng)數(shù)據(jù)給上層,然后返回步驟S7’ ;步驟S9’ 所述SWP任務(wù)判斷接收到的數(shù)據(jù)是否包含HCI數(shù)據(jù)包,是則執(zhí)行步驟 S10’,否則執(zhí)行SWP層協(xié)議處理返回相應(yīng)響應(yīng)數(shù)據(jù)給上層,然后返回步驟S7’ ;步驟S10’ 所述SWP任務(wù)判斷所述HCI數(shù)據(jù)包中是否包含預(yù)設(shè)事件指令,是則執(zhí) 行步驟S11’,否則執(zhí)行HCI協(xié)議層處理返回第一響應(yīng)數(shù)據(jù)給上層,然后返回步驟S7’ ;步驟S11’ 所述SWP任務(wù)提取所述預(yù)設(shè)指令中包含的APDU命令,并將所述APDU命 令加入APDU隊(duì)列,等待接收處理結(jié)果;步驟S12’ 所述SWP任務(wù)把接收到的所述處理結(jié)果打包成HCI數(shù)據(jù)包,再把所述 HCI數(shù)據(jù)包打包成符合預(yù)設(shè)數(shù)據(jù)幀格式的第二響應(yīng)數(shù)據(jù);步驟S13’ 所述SWP任務(wù)將所述第二響應(yīng)數(shù)據(jù)返回給上層,返回步驟S7’ ;步驟S14’ 所述ISO任務(wù)判斷是否有激活信號(hào),是則執(zhí)行下一步,否則等待激活信 號(hào);步驟S15’ 所述ISO任務(wù)檢測(cè)到激活信號(hào)后向上層發(fā)送ISO激活數(shù)據(jù)幀;步驟S16’ 所述ISO任務(wù)等待接收上層下發(fā)數(shù)據(jù);步驟S17,:所述ISO任務(wù)判斷接收到的數(shù)據(jù)是否是PPS數(shù)據(jù),是則執(zhí)行PPS處理返回PPS響應(yīng)數(shù)據(jù)給上層,否則執(zhí)行步驟S18’ ;步驟S18’:所述ISO任務(wù)等待接收APDU數(shù)據(jù);
步驟S19’:所述ISO任務(wù)將接收到的所述APDU數(shù)據(jù)加入APDU隊(duì)列,等待接收處理結(jié)果
步驟S20’:所述ISO任務(wù)將接收到的所述處理結(jié)果返回給上層,返回步驟S18’ ;
步驟S21’:所述APDUProcess任務(wù)進(jìn)行任務(wù)初始化;
步驟S22’所述APDUProcess任務(wù)等待APDU隊(duì)列有數(shù)據(jù)存入;
步驟S23’:所述APDUProcess任務(wù)按先進(jìn)先出的順序從所述APDU隊(duì)列中提取出數(shù)據(jù);
步驟S24’:所述APDUProcess任務(wù)對(duì)提取出的所述數(shù)據(jù)執(zhí)行APDU命令處理;
步驟S25’:所述APDUProcess任務(wù)將處理結(jié)果發(fā)送給與所述數(shù)據(jù)對(duì)應(yīng)的任務(wù),然
后返回步驟S22’。所述判斷是否有激活信號(hào)具體為,檢查IO接口是否有滿足條件的電流或電壓信號(hào),是則表示有激活信號(hào),否則表示沒(méi)有激活信號(hào)。所述SWP任務(wù)判斷接收到的數(shù)據(jù)是否符合預(yù)設(shè)數(shù)據(jù)幀格式具體包括A :所述SWP任務(wù)判斷接收到的數(shù)據(jù)是否是SHDLC數(shù)據(jù)幀類(lèi)型,是則執(zhí)行B,否則不符合預(yù)設(shè)數(shù)據(jù)幀格式;B :判斷所述數(shù)據(jù)是否是I幀,是則符合預(yù)設(shè)數(shù)據(jù)幀格式,否則不符合預(yù)設(shè)數(shù)據(jù)幀格式。所述SWP任務(wù)判斷接收到的數(shù)據(jù)是否包含HCI數(shù)據(jù)包,是則還包括,所述SWP任務(wù)判斷所述HCI數(shù)據(jù)包是否完整,是則執(zhí)行下一步,否則返回等待接收上層下發(fā)數(shù)據(jù)。所述ISO任務(wù)等待接收APDU數(shù)據(jù)之后還包括,所述ISO任務(wù)判斷接收到的所述APDU數(shù)據(jù)是否完整,是則執(zhí)行下一步,否則返回等待接收APDU數(shù)據(jù)。所述ISO任務(wù)等待接收APDU數(shù)據(jù)之后執(zhí)行還可以執(zhí)行以下步驟步驟Al :所述ISO任務(wù)判斷接收到的數(shù)據(jù)是否是I-block數(shù)據(jù)幀類(lèi)型,是則執(zhí)行下一步,否則執(zhí)行Tl層協(xié)議處理返回第四響應(yīng)數(shù)據(jù)給上層,然后返回等待接收上層下發(fā)數(shù)據(jù);步驟A2 :所述ISO任務(wù)從接收到的I-block數(shù)據(jù)幀中提取出APDU數(shù)據(jù);步驟A3 :所述ISO任務(wù)判斷接收到的所述I-block數(shù)據(jù)幀是否是最后一個(gè)分組,是則執(zhí)行下一步,否則返回等待接收APDU數(shù)據(jù);步驟A4 :所述ISO任務(wù)對(duì)提取到的APDU數(shù)據(jù)執(zhí)行APDU命令處理;步驟A5 :所述ISO任務(wù)把處理結(jié)果打包成I-block數(shù)據(jù)幀類(lèi)型的第三響應(yīng)數(shù)據(jù);步驟A6 :所述ISO任務(wù)將所述第三響應(yīng)數(shù)據(jù)返回給上層,然后返回等待接收APDU數(shù)據(jù)?;蛘呤撬鯥SO任務(wù)等待接收APDU數(shù)據(jù)之后執(zhí)行以下步驟步驟BI :所述ISO任務(wù)判斷接收到的數(shù)據(jù)是否是I-block數(shù)據(jù)幀類(lèi)型,是則執(zhí)行下一步,否則執(zhí)行Tl層協(xié)議處理返回第四響應(yīng)數(shù)據(jù)給上層,然后返回等待接收上層下發(fā)數(shù)據(jù);步驟B2 :所述ISO任務(wù)從接收到的I-block數(shù)據(jù)幀中提取出APDU數(shù)據(jù);
7
步驟B3 :所述ISO任務(wù)判斷接收到的所述I-block數(shù)據(jù)巾貞是否是最后一個(gè)分組,是則執(zhí)行下一步,否則返回等待接收APDU數(shù)據(jù);步驟B4 :所述ISO任務(wù)將提取到的APDU數(shù)據(jù)加入APDU隊(duì)列,,等待接收處理結(jié)果;;步驟B5 :所述ISO任務(wù)把接收到的所述處理結(jié)果打包成I-block數(shù)據(jù)巾貞類(lèi)型的第三響應(yīng)數(shù)據(jù);步驟B6 :所述ISO任務(wù)將所述第三響應(yīng)數(shù)據(jù)返回給上層,然后返回等待接收APDU數(shù)據(jù)。所述為創(chuàng)建的多個(gè)任務(wù)分配優(yōu)先級(jí)具體為根據(jù)時(shí)序?yàn)閯?chuàng)建的多個(gè)任務(wù)分配優(yōu)先級(jí)。本發(fā)明的有益效果是可以實(shí)現(xiàn)同一時(shí)刻智能卡的多個(gè)IO接口同時(shí)工作,使得智能卡的功能更加強(qiáng)大。
圖I圖2圖3圖4圖5圖6圖7圖8
是實(shí)施例I提供的一種實(shí)現(xiàn)智能卡多任務(wù)處理的方法流程圖是圖I中步驟108和109的細(xì)化是圖I中步驟113和114的一種細(xì)化是圖I中步驟113和114的另一種細(xì)化是實(shí)施例2提供的一種實(shí)現(xiàn)智能卡多任務(wù)處理的方法流程圖是圖2中步驟208-步驟213的細(xì)化是圖2中步驟222-步驟227的一種細(xì)化是圖2中步驟222-步驟227的另一種細(xì)化圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。實(shí)施例I本實(shí)施例提供的一種實(shí)現(xiàn)智能卡多任務(wù)處理的方法,以?xún)蓚€(gè)任務(wù)的處理為例進(jìn)行介紹,如圖I所示包括以下步驟步驟101 :智能卡上電,進(jìn)行卡片初始化;步驟102 :智能卡的底層操作系統(tǒng)(底層OS)對(duì)多任務(wù)環(huán)境進(jìn)行初始化;步驟103 :底層操作系統(tǒng)創(chuàng)建SWP任務(wù)和ISO任務(wù),并為創(chuàng)建的任務(wù)分配優(yōu)先級(jí);優(yōu)選的底層OS根據(jù)時(shí)序?yàn)槎嗳蝿?wù)分配優(yōu)先級(jí)。本實(shí)施例中,具體的按照優(yōu)先級(jí)從高到低的順序創(chuàng)建的兩個(gè)任務(wù)分別為SWP任務(wù)和ISO任務(wù)。其中高優(yōu)先級(jí)任務(wù)可以搶占低優(yōu)先級(jí)任務(wù),如當(dāng)高優(yōu)先級(jí)任務(wù)從等待狀態(tài)轉(zhuǎn)為就緒狀態(tài)時(shí),會(huì)搶占正在運(yùn)行的低優(yōu)先級(jí)任務(wù)而轉(zhuǎn)為運(yùn)行狀態(tài),被搶占的低優(yōu)先級(jí)任務(wù)則由運(yùn)行狀態(tài)變成就緒狀態(tài)。同時(shí),幾個(gè)任務(wù)之間有互斥特性,即當(dāng)幾個(gè)任務(wù)同時(shí)訪問(wèn)共享資源時(shí)(如執(zhí)行硬件加解密算法),只有一個(gè)任務(wù)可以得到共享資源,別的任務(wù)必須等待共享資源被釋放時(shí),才能訪問(wèn)此共享資源,即使它的優(yōu)先級(jí)更高。步驟104 :底層操作系統(tǒng)查找優(yōu)先級(jí)最高且當(dāng)前狀態(tài)為就緒狀態(tài)的任務(wù)并切換到該任務(wù)運(yùn)行;當(dāng)查找到的符合條件的任務(wù)為SWP任務(wù)時(shí),即當(dāng)切換到SWP任務(wù)運(yùn)行時(shí)執(zhí)行步驟105-109 ;當(dāng)查找到的符合條件的任務(wù)為ISO任務(wù)時(shí),即當(dāng)切換到ISO任務(wù)運(yùn)行時(shí)執(zhí)行步驟110-114 ;當(dāng)切換到SWP任務(wù)時(shí)或在ISO任務(wù)運(yùn)行前還包括底層OS將SWP任務(wù)或ISO任務(wù)的當(dāng)前狀態(tài)更改為運(yùn)行狀態(tài),并恢復(fù)SWP任務(wù)或ISO任務(wù)的運(yùn)行時(shí)環(huán)境。每個(gè)任務(wù)對(duì)應(yīng)有自己的堆棧和全局變量,用于存儲(chǔ)當(dāng)前任務(wù)的運(yùn)行時(shí)環(huán)境,如程序指針和堆棧指針,其他CPU寄存器等等,恢復(fù)該任務(wù)的運(yùn)行時(shí)環(huán)境具體為將該任務(wù)的運(yùn)行時(shí)環(huán)境存儲(chǔ)到CPU寄存器中。本實(shí)施例中具體地,根據(jù)步驟103中分配的優(yōu)先級(jí),本步驟中查找到的符合條件的任務(wù)是SWP任務(wù)。步驟105 =SffP任務(wù)判斷是否有SWP激活信號(hào),是則執(zhí)行步驟107,否則執(zhí)行步驟106 ;具體地,判斷SWP任務(wù)對(duì)應(yīng)的IO接口是否有滿足條件的電流或電壓信號(hào),是則表示有SWP激活信號(hào),否則沒(méi)有激活信號(hào)處于等待激活狀態(tài)。步驟106 =SffP任務(wù)等待SWP激活信號(hào);具體地,在等待SWP激活信號(hào)時(shí)還包括底層OS將SWP任務(wù)的當(dāng)前狀態(tài)由運(yùn)行狀態(tài)更改為等待狀態(tài),保存當(dāng)前任務(wù)的執(zhí)行環(huán)境。當(dāng)收到SWP激活信號(hào)時(shí)還包括底層OS將SWP任務(wù)的當(dāng)前狀態(tài)由等待狀態(tài)更改為就緒狀態(tài),當(dāng)處于就緒狀態(tài)且優(yōu)先級(jí)最高的任務(wù)是SWP任務(wù)時(shí),底層OS將SWP任務(wù)的當(dāng)前狀態(tài)更改為運(yùn)行狀態(tài),恢復(fù)該任務(wù)的運(yùn)行時(shí)環(huán)境。步驟107 =SffP任務(wù)接收到激活信號(hào)后向上層發(fā)送符合SWP協(xié)議的激活數(shù)據(jù)幀。具體地,向上層發(fā)送ACT_SYC_FRAME。步驟108 =SffP任務(wù)等待接收上層下發(fā)數(shù)據(jù);具體地,SffP任務(wù)在等待接收上層下發(fā)數(shù)據(jù)時(shí)還包括底層OS將SWP任務(wù)的當(dāng)前狀態(tài)由運(yùn)行狀態(tài)更改為等待狀態(tài),保存當(dāng)前任務(wù)的執(zhí)行環(huán)境。本實(shí)施例中具體地,當(dāng)執(zhí)行當(dāng)前任務(wù)過(guò)程中需要等待某些事件時(shí),將當(dāng)前任務(wù)的當(dāng)前狀態(tài)由運(yùn)行狀態(tài)更改為等待狀態(tài),保存當(dāng)前任務(wù)的執(zhí)行環(huán)境具體為將CPU寄存器中的執(zhí)行環(huán)境保持到當(dāng)前任務(wù)對(duì)應(yīng)的堆棧和全局變量中。具體地,當(dāng)接收到數(shù)據(jù)時(shí)還包括底層OS將SWP任務(wù)的當(dāng)前狀態(tài)由等待狀態(tài)更改為就緒狀態(tài),當(dāng)處于就緒狀態(tài)且優(yōu)先級(jí)最高的任務(wù)是SWP任務(wù)時(shí),底層OS將SWP任務(wù)的當(dāng)前狀態(tài)更改為運(yùn)行狀態(tài),恢復(fù)該任務(wù)的運(yùn)行時(shí)環(huán)境執(zhí)行步驟109。步驟109 :SWP任務(wù)對(duì)接收到的數(shù)據(jù)進(jìn)行處理并向上層返回符合SWP協(xié)議的相應(yīng)響應(yīng)數(shù)據(jù),然后返回步驟108。本實(shí)施例中具體地,當(dāng)SWP接收到的數(shù)據(jù)中含有APDU數(shù)據(jù)時(shí),則對(duì)APDU數(shù)據(jù)進(jìn)行處理并封裝成APDU響應(yīng)返回給上層。
9
所述對(duì)APDU數(shù)據(jù)進(jìn)行處理具體為根據(jù)APDU數(shù)據(jù)結(jié)構(gòu)中的CLS,INS,P1,P2及攜帶的數(shù)據(jù)執(zhí)行相應(yīng)的處理,所述APDU響應(yīng)包括向上層返回的處理結(jié)果及狀態(tài)字。本實(shí)施例中,上述步驟108和步驟109可以具體為如下內(nèi)容,如圖2所示步驟1-1 =SffP任務(wù)等待接收上層下發(fā)數(shù)據(jù);步驟1-2 :SWP任務(wù)判斷接收到的數(shù)據(jù)是否是SHDLC數(shù)據(jù)幀格式,是則執(zhí)行步驟
1-4,否則執(zhí)行步驟1-3;具體地,判斷接收到的數(shù)據(jù)第一個(gè)字節(jié)的最高位是否為I,是則符合SHDLC數(shù)據(jù)幀格式,否則不符合。例如接收到的上層下發(fā)的數(shù)據(jù)為80 8450 00A4040000,符合SHDLC數(shù)據(jù)幀格式。步驟1-3 =SffP任務(wù)執(zhí)行SWP層協(xié)議處理返回相應(yīng)響應(yīng)數(shù)據(jù)給上層;步驟1-4 :SWP任務(wù)判斷所述數(shù)據(jù)是否是I幀,是則執(zhí)行步驟1-5,否則執(zhí)行步驟
1-3 ;具體地,判斷所述數(shù)據(jù)的第一個(gè)字節(jié)次高位是否為0,是則表示是I幀,否則不是I幀。例如所述數(shù)據(jù)80 8450 00A4040000是I幀。步驟1-5 :SWP任務(wù)判斷I幀是否攜帶HCI數(shù)據(jù)包,是則執(zhí)行步驟1_6,否則執(zhí)行步驟 1-3 ;本實(shí)施例中具體地,I幀攜帶的HCI數(shù)據(jù)包為8450 00A4040000。步驟1-6 :SWP任務(wù)判斷攜帶的HCI數(shù)據(jù)包是否完整,是則執(zhí)行步驟1_7,否則執(zhí)行步驟1-1 ;具體地,若接收到的HCI數(shù)據(jù)包的第一個(gè)字節(jié)最高兩位是10,則表示完整的接收到了上層下發(fā)的數(shù)據(jù)8450 00A4040000。步驟1-7 SWP任務(wù)判斷HCI數(shù)據(jù)包是否包含evt_send_data事件指令,是則執(zhí)行步驟1-9,否則執(zhí)行步驟1-8;具體地,若接收到的HCI數(shù)據(jù)包的第二個(gè)字節(jié)是“50”,則表示包含有evt_send_data事件指令。步驟1-8 :SWP任務(wù)執(zhí)行HCI層協(xié)議處理返回第一響應(yīng)數(shù)據(jù)給上層,然后返回步驟
1-1 ;步驟1-9 SWP任務(wù)提取evt_send_data事件指令所包含的APDU數(shù)據(jù);具體地,提取到的APDU數(shù)據(jù)為00A4040000。步驟1-10 =SffP任務(wù)對(duì)所述APDU數(shù)據(jù)執(zhí)行APDU命令處理;具體地,對(duì)數(shù)據(jù)00A4040000執(zhí)行APDU命令處理后生成的處理結(jié)果為6F 10 8408 AO 00 00 00 03 00 00 00 A5 04 9F 65 01 FF 90 00。步驟1-11 :SWP任務(wù)把處理結(jié)果打包成包含evt_send_data事件指令的HCI數(shù)據(jù)包;具體地,將上述處理結(jié)果打包成的HCI數(shù)據(jù)包為84 50 6F 10 84 08 AO 00 00 00 03 00 00 00 A5 04 9F 65 01 FF 90 00。步驟1-12 :SWP任務(wù)將HCI數(shù)據(jù)包打包成符合SHDLC數(shù)據(jù)幀類(lèi)型的第二響應(yīng)數(shù)據(jù);具體地,將上述HCI數(shù)據(jù)包打包成的SHDLC數(shù)據(jù)幀類(lèi)型的第二響應(yīng)數(shù)據(jù)為81 8450 6F 10 84 08 AO 00 00 00 03 00 00 00 A5 04 9F 65 01 FF 90 00。
步驟1-13 :SWP任務(wù)將第二響應(yīng)數(shù)據(jù)返回給上層,返回執(zhí)行步驟1-1。步驟110 :IS0任務(wù)判斷是否有ISO激活信號(hào),是則執(zhí)行步驟112,否則執(zhí)行步驟111 ;具體地,判斷ISO任務(wù)對(duì)應(yīng)的IO接口激活是否有滿足條件的電流或電壓信號(hào),是則表示有ISO激活信號(hào),否則沒(méi)有激活信號(hào)處于等待激活狀態(tài)。步驟111 :IS0任務(wù)等待ISO激活信號(hào);具體地,在等待ISO激活信號(hào)時(shí)還包括底層OS將ISO任務(wù)的當(dāng)前狀態(tài)由運(yùn)行狀態(tài)更改為等待狀態(tài),保存當(dāng)前任務(wù)的執(zhí)行環(huán)境。當(dāng)接收到ISO激活信號(hào)時(shí)還包括底層OS將ISO任務(wù)的當(dāng)前狀態(tài)由等待狀態(tài)更改為就緒狀態(tài);當(dāng)處于就緒狀態(tài)且優(yōu)先級(jí)最高的任務(wù)是ISO任務(wù)時(shí),底層OS將ISO任務(wù)的當(dāng)前狀態(tài)更改為運(yùn)行狀態(tài),恢復(fù)該任務(wù)的運(yùn)行時(shí)環(huán)境執(zhí)行步驟112。步驟112 :IS0任務(wù)檢測(cè)到激活信號(hào)后向上層發(fā)送符合ISO協(xié)議的激活數(shù)據(jù)幀。具體地,向上層發(fā)送一個(gè)ATR。例如當(dāng)ISO任務(wù)支持TO類(lèi)型協(xié)議時(shí),向上層發(fā)送的ATR為3b 7b 96 00 00 46 54 43 4f 53 2e 45 31 31 52 20當(dāng)ISO任務(wù)支持Tl類(lèi)型協(xié)議時(shí),向上層發(fā)送的ATR為3b 9a 95 81 31 80 9f 48 31 30 43 52 2e 46 54 30 30 c4步驟113 :IS0任務(wù)等待接收上層下發(fā)數(shù)據(jù);具體地,ISO任務(wù)在等待接收上層下發(fā)數(shù)據(jù)時(shí)還包括底層OS將ISO任務(wù)的當(dāng)前狀態(tài)由運(yùn)行狀態(tài)更改為等待狀態(tài),保存當(dāng)前任務(wù)的執(zhí)行環(huán)境;本實(shí)施例中具體地,當(dāng)執(zhí)行當(dāng)前任務(wù)過(guò)程中需要等待某些事件時(shí),將當(dāng)前任務(wù)的當(dāng)前狀態(tài)由運(yùn)行狀態(tài)更改為等待狀態(tài),保存當(dāng)前任務(wù)的執(zhí)行環(huán)境具體為將CPU寄存器中的執(zhí)行環(huán)境保持到當(dāng)前任務(wù)對(duì)應(yīng)的堆棧和全局變量中。具體地,當(dāng)接收到數(shù)據(jù)時(shí)還包括底層OS將ISO任務(wù)的當(dāng)前狀態(tài)由等待狀態(tài)更改為就緒狀態(tài);當(dāng)處于就緒狀態(tài)且優(yōu)先級(jí)最高的任務(wù)是ISO任務(wù)時(shí),底層OS將ISO任務(wù)的當(dāng)前狀態(tài)更改為運(yùn)行狀態(tài),恢復(fù)該任務(wù)的運(yùn)行時(shí)環(huán)境執(zhí)行步驟114。步驟114 : ISO對(duì)接收到的數(shù)據(jù)進(jìn)行處理并向上層返回符合ISO協(xié)議的相應(yīng)響應(yīng)數(shù)據(jù),返回步驟113。本實(shí)施例中具體地,當(dāng)接收到的數(shù)據(jù)中含有APDU數(shù)據(jù),則對(duì)APDU數(shù)據(jù)進(jìn)行處理并封裝成APDU響應(yīng)返回給上層。所述對(duì)APDU數(shù)據(jù)進(jìn)行處理具體為根據(jù)APDU數(shù)據(jù)結(jié)構(gòu)中的CLS,INS,Pl,P2及攜帶的數(shù)據(jù)執(zhí)行相應(yīng)的處理,所述APDU響應(yīng)包括向上層返回的處理結(jié)果及狀態(tài)字。本實(shí)施例中,上述步驟113和步驟114可以具體為如下內(nèi)容,如圖3所示步驟2-1 : ISO任務(wù)等待接收上層下發(fā)數(shù)據(jù);步驟2-2 =ISO任務(wù)判斷接收到的數(shù)據(jù)是否是PPS數(shù)據(jù),是則執(zhí)行步驟2_3,否則執(zhí)行步驟2-4 ;具體地,ISO任務(wù)判斷接收到的數(shù)據(jù)的第一個(gè)字節(jié)是否為FF,是則是PPS數(shù)據(jù)執(zhí)行步驟2-3,否則執(zhí)行步驟2-4;例如,ISO任務(wù)接收到的PPS數(shù)據(jù)為FF 10 96 79。
步驟2-3 =ISO任務(wù)執(zhí)行PPS處理返回PPS響應(yīng)數(shù)據(jù)給上層,然后返回執(zhí)行步驟2-1 ;具體地,ISO任務(wù)返回給送上層的PPS響應(yīng)數(shù)據(jù)為FF 10 96 79。步驟2-4 :IS0任務(wù)判斷接收到的APDU數(shù)據(jù)是否完整,是則執(zhí)行步驟2-6,否則返回執(zhí)行步驟2-5 ;具體地,ISO任務(wù)判斷接收到的APDU數(shù)據(jù)是否為5個(gè)字節(jié),是則接收到了完整的數(shù)據(jù),執(zhí)行步驟2-6,否則返回執(zhí)行步驟2-5。例如IS0任務(wù)接收到上層下發(fā)的完整的APDU數(shù)據(jù)為00A4040000。步驟2-5 :IS0任務(wù)等待接收APDU數(shù)據(jù),返回步驟2-4 ;步驟2-6 : ISO任務(wù)對(duì)接收到的APDU數(shù)據(jù)執(zhí)行APDU命令處理;具體地,ISO任務(wù)對(duì)APDU數(shù)據(jù)執(zhí)行APDU命令處理后包括I)向上層返回一個(gè)狀態(tài)字SW ;具體地,向上層發(fā)送的狀態(tài)字SW為61 12。2)等待上層下發(fā)取數(shù)據(jù)命令;具體地,上層下發(fā)的提取數(shù)據(jù)命令為00 CO 00 00 12。3) ISO任務(wù)對(duì)所述提取數(shù)據(jù)命令執(zhí)行APDU命令處理生成處理結(jié)果;具體的,生成的處理結(jié)果為6F10 84 08 AO 00 00 00 03 00 00 00 A5 049F65 01 FF 90 00。步驟2-7 :IS0任務(wù)將處理結(jié)果返回給上層,然后返回步驟2-5。本實(shí)施例中,上述步驟113和步驟114還可以具體為如下內(nèi)容,如圖4所示步驟2-1’ IS0任務(wù)等待接收上層下發(fā)數(shù)據(jù);步驟2-2’ IS0任務(wù)判斷接收到的數(shù)據(jù)是否是PPS數(shù)據(jù),是則執(zhí)行步驟2-3’,否則執(zhí)行步驟2-5’ ;具體地IS0任務(wù)判斷接收到的數(shù)據(jù)的第一個(gè)字節(jié)是否為FF,是則所述數(shù)據(jù)是PPS數(shù)據(jù)執(zhí)行步驟2-3’,否則執(zhí)行步驟2-5’。例如,ISO任務(wù)接收到的PPS數(shù)據(jù)為FF 11 95 7B。步驟2-3’ IS0任務(wù)執(zhí)行PPS處理返回PPS響應(yīng)數(shù)據(jù)給上層,然后返回執(zhí)行步驟
2-1,;具體地,ISO任務(wù)返回給上層的PPS響應(yīng)數(shù)據(jù)為FF 11 95 7B。步驟2-4’ IS0任務(wù)等待接收數(shù)據(jù),然后進(jìn)入步驟2-5’ ;步驟2-5’ IS0任務(wù)判斷接收到的數(shù)據(jù)是否是I-block數(shù)據(jù)幀類(lèi)型,是則執(zhí)行步驟
2-7’,否則執(zhí)行步驟2-6’ ;具體地IS0任務(wù)判斷接收到的數(shù)據(jù)的第二字節(jié)的第八位是否為0,是則所述數(shù)據(jù)是I-block數(shù)據(jù)幀類(lèi)型執(zhí)行步驟2-7’,否則執(zhí)行步驟2-6’。例如,ISO任務(wù)接收到的I-block數(shù)據(jù)幀類(lèi)型的數(shù)據(jù)為00 00 05 00 A4 04 0000 A5 ;IS0任務(wù)接收到的非I-block數(shù)據(jù)幀類(lèi)型的數(shù)據(jù)為00 Cl 01 FE 3E。步驟2-6’ IS0任務(wù)執(zhí)行Tl層協(xié)議處理返回第四響應(yīng)數(shù)據(jù)給上層,然后返回步驟
2-1,;具體地,ISO任務(wù)向上層返回的第四響應(yīng)數(shù)據(jù)為00 El 01 FE IE0
12
步驟2-7’ =ISO任務(wù)從接收到的I-block數(shù)據(jù)幀中提取出APDU數(shù)據(jù);具體地,ISO任務(wù)從接收到的I-block數(shù)據(jù)幀00 00 05 00 A4 04 00 00 A5中提取出的APDU數(shù)據(jù)為00A4040000。步驟2-8’ IS0任務(wù)判斷接收到的I-block數(shù)據(jù)幀是否是最后一個(gè)分組,是則執(zhí)行步驟2-9’,否則返回執(zhí)行步驟2-4’ ;具體地,ISO任務(wù)判斷接收到的I-block數(shù)據(jù)幀的第二字節(jié)的第六位是否為0,是則接收到的I-block數(shù)據(jù)幀是最后一個(gè)分組執(zhí)行步驟2-9’,否則返回執(zhí)行步驟2-4’。 步驟2-9’ ISO任務(wù)對(duì)提取到的APDU數(shù)據(jù)執(zhí)行APDU命令處理;具體地,ISO任務(wù)對(duì)提取到的APDU數(shù)據(jù)執(zhí)行APDU命令處理得到的處理結(jié)果為6f10 84 08 a0 00 00 00 03 00 00 00 a5 04 9f 65 01 ff 90 00。步驟2-10’ IS0任務(wù)把處理結(jié)果打包成I-block數(shù)據(jù)幀類(lèi)型的第三響應(yīng)數(shù)據(jù);具體地IS0任務(wù)把處理結(jié)果打包成I-block數(shù)據(jù)幀類(lèi)型的第三響應(yīng)數(shù)據(jù)為0000 14 6f 10 84 08 a0 00 00 00 03 00 00 00 a5 04 9f 65 01 ff 90 00 71。步驟2-11’ IS0任務(wù)將第三響應(yīng)數(shù)據(jù)返回給送上層,然后返回執(zhí)行步驟2-4’。進(jìn)一步的,本實(shí)施例中步驟113和步驟114還可以具體為如下步驟步驟El : ISO任務(wù)等待接收上層下發(fā)數(shù)據(jù);步驟E2 IS0任務(wù)判斷接收到的數(shù)據(jù)是否是PPS數(shù)據(jù),是則執(zhí)行步驟E3,否則執(zhí)行步驟E4 ;步驟E3 :IS0任務(wù)執(zhí)行PPS處理返回PPS響應(yīng)數(shù)據(jù)給上層,然后返回執(zhí)行步驟El ;步驟E4 IS0任務(wù)判斷當(dāng)前的協(xié)議類(lèi)型,如果是TO類(lèi)型協(xié)議,則執(zhí)行圖3所示步驟2-4至步驟2-7,如果是Tl類(lèi)型協(xié)議,則執(zhí)行圖4所示步驟2-4’至步驟2_11’。實(shí)施例2本實(shí)施例提供的一種實(shí)現(xiàn)智能卡多任務(wù)處理的方法,以三個(gè)任務(wù)的處理為例進(jìn)行介紹,如圖5所示包括以下步驟步驟201 :智能卡上電,進(jìn)行卡片初始化;步驟202 :智能卡的底層操作系統(tǒng)(底層OS)對(duì)多任務(wù)環(huán)境進(jìn)行初始化;步驟203 :底層操作系統(tǒng)創(chuàng)建SWP任務(wù)、ISO任務(wù)和APDUProcess任務(wù),并為創(chuàng)建的任務(wù)分配優(yōu)先級(jí);優(yōu)選的底層OS根據(jù)時(shí)序?yàn)槎嗳蝿?wù)分配優(yōu)先級(jí)。本實(shí)施例中,具體的按照優(yōu)先級(jí)從高到低創(chuàng)建任務(wù)分別為SWP任務(wù)、ISO任務(wù)和APDUProcess 任務(wù)。其中高優(yōu)先級(jí)任務(wù)可以搶占低優(yōu)先級(jí)任務(wù),如當(dāng)高優(yōu)先級(jí)任務(wù)從等待狀態(tài)轉(zhuǎn)為就緒狀態(tài)時(shí),會(huì)搶占正在運(yùn)行的低優(yōu)先級(jí)任務(wù)而轉(zhuǎn)為運(yùn)行狀態(tài)。被搶占的任務(wù)則變成就緒狀態(tài)。同時(shí),幾個(gè)任務(wù)之間有互斥特性,即當(dāng)幾個(gè)任務(wù)同時(shí)訪問(wèn)共享資源時(shí)(如執(zhí)行硬件加解密算法),只有一個(gè)任務(wù)可以得到共享資源,別的任務(wù)必須等待共享資源被釋放時(shí),才能訪問(wèn)此共享資源,即使它的優(yōu)先級(jí)更高。步驟204 :底層操作系統(tǒng)查找優(yōu)先級(jí)最高且當(dāng)前狀態(tài)為就緒狀態(tài)的任務(wù)并切換到該任務(wù)運(yùn)行;當(dāng)查找到的符合條件的任務(wù)為SWP任務(wù)時(shí),即當(dāng)切換到SWP任務(wù)運(yùn)行時(shí)執(zhí)行步驟
13205-213 ;當(dāng)查找到的符合條件的任務(wù)為APDUProcess任務(wù)時(shí),即當(dāng)切換到APDUProcess任務(wù)運(yùn)行時(shí)執(zhí)行步驟214-218 ;當(dāng)查找到的符合條件的任務(wù)為ISO任務(wù)時(shí),即當(dāng)切換到ISO任務(wù)運(yùn)行時(shí)執(zhí)行步驟219-227 ;當(dāng)切換到查找到的符合條件的任務(wù)運(yùn)行前還包括底層OS將查找到的符合條件的任務(wù)的當(dāng)前狀態(tài)更改為運(yùn)行狀態(tài),并恢復(fù)任務(wù)的運(yùn)行時(shí)環(huán)境。每個(gè)任務(wù)對(duì)應(yīng)有自己的堆棧和全局變量,用于存儲(chǔ)當(dāng)前任務(wù)的運(yùn)行時(shí)環(huán)境,如程序指針和堆棧指針,其他CPU寄存器等等,所述恢復(fù)該任務(wù)的運(yùn)行時(shí)環(huán)境具體為將該任務(wù)的運(yùn)行時(shí)環(huán)境存儲(chǔ)到CPU寄存器中。本實(shí)施例中具體地,根據(jù)步驟203中分配的優(yōu)先級(jí),本步驟中查找到的符合條件的任務(wù)是SWP任務(wù)。當(dāng)前切換到SWP任務(wù)運(yùn)行前還包括底層OS將SWP任務(wù)的當(dāng)前狀態(tài)更改為運(yùn)行狀態(tài),并恢復(fù)SWP任務(wù)的運(yùn)行時(shí)環(huán)境。步驟205 =SffP任務(wù)判斷是否有SWP激活信號(hào),是則執(zhí)行步驟207,否則執(zhí)行步驟206 ;具體地,判斷SWP任務(wù)對(duì)應(yīng)的IO接口是否有滿足條件的電流或電壓信號(hào),是則表示有SWP激活信號(hào),否則沒(méi)有激活信號(hào)執(zhí)行步驟206即SWP任務(wù)處于等待激活狀態(tài)。步驟206 SffP任務(wù)等待SWP激活信號(hào);具體地,本步驟還包括底層OS將SWP任務(wù)的當(dāng)前狀態(tài)由運(yùn)行狀態(tài)更改為等待狀態(tài),保存當(dāng)前任務(wù)的執(zhí)行環(huán)境。具體地,當(dāng)接收到SWP激活信號(hào)時(shí)還包括底層OS將SWP任務(wù)的當(dāng)前狀態(tài)由等待狀態(tài)更改為就緒狀態(tài),當(dāng)處于就緒狀態(tài)且優(yōu)先級(jí)最高的任務(wù)是SWP任務(wù)時(shí),底層OS將SWP任務(wù)的當(dāng)前狀態(tài)更改為運(yùn)行狀態(tài),恢復(fù)該任務(wù)的運(yùn)行時(shí)環(huán)境執(zhí)行步驟207。步驟207 =SffP任務(wù)檢測(cè)到激活信號(hào)后向上層發(fā)送符合SWP協(xié)議的激活數(shù)據(jù)幀;具體地,向上層發(fā)送ACT_SYC_FRAME。步驟208 =SffP任務(wù)等待接收上層下發(fā)數(shù)據(jù);本實(shí)施例中具體地,當(dāng)執(zhí)行當(dāng)前任務(wù)過(guò)程中需要等待某些事件時(shí),將當(dāng)前任務(wù)的當(dāng)前狀態(tài)由運(yùn)行狀態(tài)更改為等待狀態(tài),保存當(dāng)前任務(wù)的執(zhí)行環(huán)境具體為將CPU寄存器中的執(zhí)行環(huán)境保持到當(dāng)前任務(wù)對(duì)應(yīng)的堆棧寄存器中。具體地,當(dāng)接收到數(shù)據(jù)時(shí)還包括底層OS將SWP任務(wù)的當(dāng)前狀態(tài)由等待狀態(tài)更改為就緒狀態(tài),當(dāng)處于就緒狀態(tài)且優(yōu)先級(jí)最高的任務(wù)是SWP任務(wù)時(shí),底層OS將SWP任務(wù)的當(dāng)前狀態(tài)更改為運(yùn)行狀態(tài),恢復(fù)該任務(wù)的運(yùn)行時(shí)環(huán)境執(zhí)行步驟209。步驟209 =SffP任務(wù)判斷接收到的數(shù)據(jù)是否含有APDU數(shù)據(jù),是則執(zhí)行步驟211,否則執(zhí)行步驟210 ;步驟210 :執(zhí)行底層協(xié)議處理并向上層返回相應(yīng)響應(yīng),返回步驟208 ;所述執(zhí)行底層協(xié)議處理具體為執(zhí)行對(duì)SWP和HCI底層協(xié)議指令的響應(yīng),組包,拆包,錯(cuò)誤處理,發(fā)送申請(qǐng)延時(shí)等。步驟211 :提取APDU數(shù)據(jù)放入卡片存儲(chǔ)器預(yù)定的APDU隊(duì)列中,通知APDUProecess任務(wù)處理APDU數(shù)據(jù);步驟212 =SffP任務(wù)等待APDU數(shù)據(jù)處理結(jié)果;
14
具體地,本步驟還包括底層OS將SWP任務(wù)的當(dāng)前狀態(tài)由運(yùn)行狀態(tài)更改為等待狀態(tài),保存當(dāng)前任務(wù)的執(zhí)行環(huán)境;當(dāng)接收到APDU數(shù)據(jù)處理結(jié)果時(shí),底層OS將SWP任務(wù)的當(dāng)前狀態(tài)由等待狀態(tài)更改為就緒狀態(tài),當(dāng)處于就緒狀態(tài)且優(yōu)先級(jí)最高的任務(wù)是SWP任務(wù)時(shí),底層OS將SWP任務(wù)的當(dāng)前狀態(tài)更改為運(yùn)行狀態(tài),恢復(fù)該任務(wù)的運(yùn)行時(shí)環(huán)境執(zhí)行步驟213。步驟213 =SffP任務(wù)向上層發(fā)送接收到的APDU數(shù)據(jù)處理結(jié)果,然后返回步驟208。本實(shí)施例中,上述步驟208至步驟213可以具體為如下內(nèi)容,如圖6所示步驟3-1 =SffP任務(wù)等待接收上層下發(fā)數(shù)據(jù);步驟3-2 =SffP任務(wù)判斷接收到的數(shù)據(jù)是否是SHDLC數(shù)據(jù)幀格式,是則執(zhí)行步驟
3-4,否則執(zhí)行步驟3-3 ;步驟3-3 =SffP任務(wù)執(zhí)行SWP層協(xié)議處理返回相應(yīng)響應(yīng)數(shù)據(jù)給上層;步驟3-4 =SffP任務(wù)判斷所述數(shù)據(jù)是否是I幀,是則執(zhí)行步驟3_5,否則執(zhí)行步驟
3-3 ;步驟3-5 =SffP任務(wù)判斷I幀是否攜帶HCI數(shù)據(jù)包,是則執(zhí)行步驟3_6,否則執(zhí)行步驟 3-3 ;步驟3-6 =SffP任務(wù)判斷攜帶的HCI數(shù)據(jù)包是否完整,是則執(zhí)行步驟3_7,否則執(zhí)行步驟3-1 ;步驟3-7 SWP任務(wù)判斷是否包含evt_send_data事件指令,是則執(zhí)行步驟3_9,否則執(zhí)行步驟3-8 ;3-1 ;的HCI
步驟3-8 =SffP任務(wù)執(zhí)行HCI層協(xié)議處理返回第一響應(yīng)數(shù)據(jù)給上層,然后返回步驟
步驟3-9 步驟3-10步驟3-11數(shù)據(jù)包;步驟3-12步驟3-13
SffP任務(wù)提取evt_send_data事件指令所包含的APDU數(shù)據(jù);
= SffP任務(wù)將提取到的APDU數(shù)據(jù)加入隊(duì)列,等待接收處理結(jié)果;
:SWP任務(wù)把接收到的處理結(jié)果打包成包含evt_send_data事件指令
= SffP任務(wù)將HCI數(shù)據(jù)包打包成符合SHDLC數(shù)據(jù)幀類(lèi)型的第二響應(yīng)數(shù)據(jù);= SffP任務(wù)將第二響應(yīng)數(shù)據(jù)返回給上層,返回執(zhí)行步驟3-1。
本實(shí)施例中具體地,當(dāng)切換到APDUProcess任務(wù)運(yùn)行前還包括底層OS將APDUProcess任務(wù)的當(dāng)前狀態(tài)更改為運(yùn)行狀態(tài),恢復(fù)該任務(wù)的運(yùn)行時(shí)環(huán)境,然后執(zhí)行步驟214。步驟214 :任務(wù)初始化;具體地,包括分配并初始化卡片存儲(chǔ)器的APDU隊(duì)列,分配并初始化處理結(jié)果存儲(chǔ)區(qū)。步驟215 APDUProcess任務(wù)等待APDU隊(duì)列有數(shù)據(jù)存入;具體地,本步驟還包括底層OS將APDUProcess任務(wù)的當(dāng)前狀態(tài)由運(yùn)行狀態(tài)更改為等待狀態(tài),保存當(dāng)前任務(wù)的執(zhí)行環(huán)境。當(dāng)APDU隊(duì)列有數(shù)據(jù)時(shí),底層OS將APDUProcess任務(wù)的當(dāng)前狀態(tài)由等待狀態(tài)更改為就緒狀態(tài),當(dāng)處于就緒狀態(tài)且優(yōu)先級(jí)最高的任務(wù)是APDUProcess任務(wù)時(shí),底層OS將APDUProcess任務(wù)的當(dāng)前狀態(tài)更改為運(yùn)行狀態(tài),恢復(fù)該任務(wù)的運(yùn)行時(shí)環(huán)境執(zhí)行步驟216。
步驟216 :APDUProcess任務(wù)按先進(jìn)先出順序從APDU隊(duì)列中提取出存入的APDU數(shù)據(jù);步驟217 :處理提取出的APDU數(shù)據(jù);具體為根據(jù)APDU數(shù)據(jù)結(jié)構(gòu)中的CLS,INS,P1,P2及攜帶的數(shù)據(jù)執(zhí)行相應(yīng)的處理,并將處理結(jié)果存儲(chǔ)到處理結(jié)果存儲(chǔ)區(qū)。步驟218 :APDUProcess任務(wù)把處理結(jié)果發(fā)送給APDU數(shù)據(jù)對(duì)應(yīng)的任務(wù),返回執(zhí)行步驟 215。本實(shí)施例中具體地,當(dāng)切換到ISO任務(wù)運(yùn)行前還包括底層OS將ISO任務(wù)的當(dāng)前狀態(tài)更改為運(yùn)行狀態(tài),恢復(fù)該任務(wù)的運(yùn)行時(shí)環(huán)境,然后執(zhí)行步驟219。步驟219 :IS0任務(wù)判斷是否有ISO激活信號(hào),是則執(zhí)行步驟221,否則執(zhí)行步驟220 ;具體地,判斷ISO任務(wù)對(duì)應(yīng)的IO接口是否有滿足條件的電流或電壓信號(hào),是則表示有ISO激活信號(hào),否則沒(méi)有激活信號(hào)執(zhí)行步驟220即ISO任務(wù)處于等待激活狀態(tài)。步驟220 =ISO任務(wù)等待ISO激活信號(hào);具體地,在等待ISO激活信號(hào)時(shí)還包括底層OS將ISO任務(wù)的當(dāng)前狀態(tài)由運(yùn)行狀態(tài)更改為等待狀態(tài),保存當(dāng)前任務(wù)的執(zhí)行環(huán)境。具體地,當(dāng)接收到ISO激活信號(hào)時(shí)還包括底層OS將ISO任務(wù)的當(dāng)前狀態(tài)由等待狀態(tài)更改為就緒狀態(tài);當(dāng)處于就緒狀態(tài)且優(yōu)先級(jí)最高的任務(wù)是ISO任務(wù)時(shí),底層OS將ISO任務(wù)的當(dāng)前狀態(tài)更改為運(yùn)行狀態(tài),恢復(fù)該任務(wù)的運(yùn)行時(shí)環(huán)境執(zhí)行步驟221。步驟221 =ISO任務(wù)檢測(cè)到激活信號(hào)后向上層發(fā)送符合ISO協(xié)議的激活數(shù)據(jù)幀。具體地,向上層發(fā)送一個(gè)ATR。步驟222 =ISO任務(wù)等待接收上層下發(fā)數(shù)據(jù);具體地,ISO任務(wù)在等待接收上層下發(fā)數(shù)據(jù)時(shí)還包括底層OS將ISO任務(wù)的當(dāng)前狀態(tài)由運(yùn)行狀態(tài)更改為等待狀態(tài),保存當(dāng)前任務(wù)的執(zhí)行環(huán)境;本實(shí)施例中具體地,當(dāng)執(zhí)行當(dāng)前任務(wù)過(guò)程中需要等待某些事件時(shí),將當(dāng)前任務(wù)的當(dāng)前狀態(tài)由運(yùn)行狀態(tài)更改為等待狀態(tài),保存當(dāng)前任務(wù)的執(zhí)行環(huán)境具體為將CPU寄存器中的執(zhí)行環(huán)境保持到當(dāng)前任務(wù)對(duì)應(yīng)的堆棧和全局變量中。具體地,當(dāng)接收到數(shù)據(jù)時(shí)還包括底層OS將ISO任務(wù)的當(dāng)前狀態(tài)由等待狀態(tài)更改為就緒狀態(tài);當(dāng)處于就緒狀態(tài)且優(yōu)先級(jí)最高的任務(wù)是ISO任務(wù)時(shí),底層OS將ISO任務(wù)的當(dāng)前狀態(tài)更改為運(yùn)行狀態(tài),恢復(fù)該任務(wù)的運(yùn)行時(shí)環(huán)境執(zhí)行步驟223。步驟223 =ISO任務(wù)判斷接收到的數(shù)據(jù)是否含有APDU數(shù)據(jù),是則執(zhí)行步驟225,否則執(zhí)行步驟224 ;步驟224 :執(zhí)行底層協(xié)議處理并向上層返回相應(yīng)響應(yīng)數(shù)據(jù),返回步驟222 ;所述執(zhí)行底層協(xié)議處理包括PPS處理,TO過(guò)程字節(jié)處理,Tl的塊處理等。步驟225 :提取APDU數(shù)據(jù)放入卡片存儲(chǔ)器預(yù)定的APDU隊(duì)列中,通知APDUProecess任務(wù)處理APDU數(shù)據(jù);步驟226 =ISO任務(wù)等待APDU數(shù)據(jù)處理結(jié)果;具體地,本步驟還包括底層OS將ISO任務(wù)的當(dāng)前狀態(tài)由運(yùn)行狀態(tài)更改為等待狀態(tài),保存當(dāng)前任務(wù)的執(zhí)行環(huán)境;
當(dāng)接收到APDU數(shù)據(jù)處理結(jié)果時(shí),底層OS將ISO任務(wù)的當(dāng)前狀態(tài)由等待狀態(tài)更改為就緒狀態(tài),當(dāng)處于就緒狀態(tài)且優(yōu)先級(jí)最高的任務(wù)是ISO任務(wù)時(shí),底層OS將ISO任務(wù)的當(dāng)前狀態(tài)更改為運(yùn)行狀態(tài),恢復(fù)該任務(wù)的運(yùn)行時(shí)環(huán)境執(zhí)行步驟227。步驟227 :1SO任務(wù)向上層發(fā)送接收到的APDU數(shù)據(jù)處理結(jié)果組成的響應(yīng)數(shù)據(jù),然后返回步驟222。本實(shí)施例中,上述步驟222至步驟227可以具體為如下內(nèi)容,如圖7所示步驟4-1 =ISO任務(wù)等待接收上層下發(fā)數(shù)據(jù);步驟4-2 =ISO任務(wù)判斷接收到的數(shù)據(jù)是否是PPS數(shù)據(jù),是則執(zhí)行步驟4_3,否則執(zhí)行步驟4-4 ;步驟4-3 =ISO任務(wù)執(zhí)行PPS處理返回PPS響應(yīng)數(shù)據(jù)給上層,然后返回執(zhí)行步驟4-1 ;步驟4-4 IS0任務(wù)判斷接收到的APDU數(shù)據(jù)是否完整,是則執(zhí)行步驟4_6,否則執(zhí)行步驟4-5 ;步驟4-5 =ISO任務(wù)等待接收APDU數(shù)據(jù),然后返回步驟4_4 ;步驟4-6 : ISO任務(wù)對(duì)接收到的APDU數(shù)據(jù)執(zhí)行APDU命令處理;步驟4-7 :IS0任務(wù)將處理結(jié)果返回給上層,然后返回步驟4-5。進(jìn)一步的本實(shí)施例中,上述步驟222至步驟227還可以具體為如下內(nèi)容,如圖8所示步驟4-1’ IS0任務(wù)等待接收上層下發(fā)數(shù)據(jù);步驟4-2’ =ISO任務(wù)判斷接收到的數(shù)據(jù)是否是PPS數(shù)據(jù),是則執(zhí)行步驟4_3’,否則執(zhí)行步驟4-5’ ;步驟4-3’ IS0任務(wù)執(zhí)行PPS處理返回PPS響應(yīng)數(shù)據(jù)給上層,然后返回執(zhí)行步驟4-1,;步驟4-4’ IS0任務(wù)等待接收數(shù)據(jù),然后進(jìn)入步驟4-5’ ;步驟4-5’ IS0任務(wù)判斷接收到的數(shù)據(jù)是否是I-block數(shù)據(jù)幀類(lèi)型,是則執(zhí)行步驟
4-7’,否則執(zhí)行步驟4-6’ ;步驟4-6’ IS0任務(wù)執(zhí)行Tl層協(xié)議處理返回第四響應(yīng)數(shù)據(jù)給上層,然后返回步驟
4-1,;步驟4-7’ =ISO任務(wù)從接收到的I-block數(shù)據(jù)幀中提取出APDU數(shù)據(jù);步驟4-8’ IS0任務(wù)判斷接收到的I-block數(shù)據(jù)幀是否是最后一個(gè)分組,是則執(zhí)行步驟4-9’,否則返回執(zhí)行步驟4-4’ ;
數(shù)據(jù);
步驟4-9’ ISO任務(wù)將提取到的APDU數(shù)據(jù)加入APDU隊(duì)列,等待接收處理結(jié)果;步驟4-10’ ISO任務(wù)將接收到的處理結(jié)果打包成I-block數(shù)據(jù)幀類(lèi)型的第三響應(yīng)
步驟4-11’ IS0任務(wù)將第三響應(yīng)數(shù)據(jù)返回給送上層,然后返回執(zhí)行步驟4-4’。
本發(fā)明提出的一種實(shí)現(xiàn)智能卡多任務(wù)處理的方法中,如果高優(yōu)先級(jí)任務(wù)正在執(zhí)行,這時(shí)處于等待狀態(tài)的低優(yōu)先級(jí)任務(wù)的等待條件滿足了,低優(yōu)先級(jí)任務(wù)并不能轉(zhuǎn)入運(yùn)行狀態(tài),而是轉(zhuǎn)入就緒狀態(tài),因?yàn)榈蛢?yōu)先級(jí)任務(wù)不能搶占高優(yōu)先級(jí)任務(wù)。例如在SWP任務(wù)執(zhí)行過(guò)程中,智能卡操作系統(tǒng)通過(guò)IO接口檢測(cè)到ISO激活信號(hào),智能卡操作系統(tǒng)執(zhí)行中斷處理向IOS任務(wù)發(fā)送收到激活信號(hào)的通知,將ISO任務(wù)的當(dāng)前狀態(tài)更改為就緒狀態(tài),將SWP任務(wù)的當(dāng)前狀態(tài)更改為就緒狀態(tài);查找當(dāng)前狀態(tài)為就緒狀態(tài)的高優(yōu)先級(jí)的任務(wù),切換到SWP任務(wù)繼續(xù)執(zhí)行,將SWP任務(wù)的當(dāng)前狀態(tài)更改為運(yùn)行狀態(tài),直到SWP任務(wù)進(jìn)入等待狀態(tài),才切換到ISO任務(wù)執(zhí)行。如果低優(yōu)先級(jí)任務(wù)執(zhí)行過(guò)程中,當(dāng)高優(yōu)先級(jí)任務(wù)的等待條件滿足時(shí),低優(yōu)先級(jí)任務(wù)將被高優(yōu)先級(jí)任務(wù)搶占,低優(yōu)先級(jí)任務(wù)的當(dāng)前狀態(tài)將轉(zhuǎn)為就緒狀態(tài),高優(yōu)先級(jí)任務(wù)的當(dāng)前狀態(tài)轉(zhuǎn)為運(yùn)行狀態(tài)。例如在APDU任務(wù)執(zhí)行過(guò)程中,智能卡操作系統(tǒng)監(jiān)測(cè)到SWP激活信號(hào),智能卡操作系統(tǒng)執(zhí)行中斷處理向SWP任務(wù)發(fā)送收到激活信號(hào)的通知,將SWP任務(wù)的當(dāng)前狀態(tài)更改為就緒狀態(tài),將APDU的當(dāng)前狀態(tài)更改為就緒狀態(tài);智能卡操作系統(tǒng)查找當(dāng)前狀態(tài)為就緒狀態(tài)的高優(yōu)先級(jí)的任務(wù),切換到SWP任務(wù)執(zhí)行,將SWP的當(dāng)前狀態(tài)更改為運(yùn)行狀態(tài),直到SWP任務(wù)進(jìn)入等待狀態(tài),智能卡操作系統(tǒng)再次查找當(dāng)前狀態(tài)為就緒狀態(tài)的高優(yōu)先級(jí)的任務(wù)時(shí)才可能切換到APDU任務(wù)執(zhí)行。以上所述,僅為本發(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)。
權(quán)利要求
1.一種實(shí)現(xiàn)智能卡多任務(wù)處理的方法,其特征是包括 步驟Si:智能卡上電,進(jìn)行卡片初始化; 步驟S2 :智能卡的底層操作系統(tǒng)對(duì)多任務(wù)環(huán)境進(jìn)行初始化; 步驟S3 :智能卡的底層操作系統(tǒng)創(chuàng)建多個(gè)任務(wù),并為創(chuàng)建的多個(gè)任務(wù)分配優(yōu)先級(jí);步驟S4 :智能卡的底層操作系統(tǒng)查找優(yōu)先級(jí)最高且當(dāng)前狀態(tài)為就緒狀態(tài)的任務(wù)并切換到該任務(wù)運(yùn)行; 當(dāng)切換到SWP任務(wù)運(yùn)行時(shí),執(zhí)行步驟S5-S13 ; 當(dāng)切換到ISO任務(wù)運(yùn)行時(shí),執(zhí)行步驟S14-S20 ; 步驟S5 :所述SWP任務(wù)判斷是否有激活信號(hào),是則執(zhí)行下一步,否則等待激活信號(hào); 步驟S6 :所述SWP任務(wù)檢測(cè)到激活信號(hào)后向上層發(fā)送SWP激活數(shù)據(jù)幀; 步驟S7 :所述SWP任務(wù)等待接收上層下發(fā)數(shù)據(jù); 步驟S8 :所述SWP任務(wù)判斷接收到的數(shù)據(jù)是否符合預(yù)設(shè)數(shù)據(jù)幀格式,是則執(zhí)行步驟S9,否則執(zhí)行SWP層協(xié)議處理返回相應(yīng)響應(yīng)數(shù)據(jù)給上層,然后返回步驟S7 ; 步驟S9 :所述SWP任務(wù)判斷接收到的數(shù)據(jù)是否包含HCI數(shù)據(jù)包,是則執(zhí)行步驟S10,否則執(zhí)行SWP層協(xié)議處理返回相應(yīng)響應(yīng)數(shù)據(jù)給上層,然后返回步驟S7 ; 步驟SlO :所述SWP任務(wù)判斷所述HCI數(shù)據(jù)包中是否包含預(yù)設(shè)事件指令,是則執(zhí)行步驟S11,否則執(zhí)行HCI協(xié)議層處理返回第一響應(yīng)數(shù)據(jù)給上層,然后返回步驟S7 ; 步驟Sll :所述SWP任務(wù)提取所述預(yù)設(shè)事件指令中包含的APDU數(shù)據(jù),并執(zhí)行APDU命令處理得到處理結(jié)果; 步驟S12 :所述SWP任務(wù)把所述處理結(jié)果打包成HCI數(shù)據(jù)包,再把所述HCI數(shù)據(jù)包打包成符合預(yù)設(shè)數(shù)據(jù)幀格式的第二響應(yīng)數(shù)據(jù); 步驟S13 :所述SWP任務(wù)將所述第二響應(yīng)數(shù)據(jù)返回給上層,返回步驟S7 ; 步驟S14 :所述ISO任務(wù)判斷是否有激活信號(hào),是則執(zhí)行下一步,否則等待激活信號(hào); 步驟S15 :所述ISO任務(wù)檢測(cè)到激活信號(hào)后向上層發(fā)送ISO激活數(shù)據(jù)幀; 步驟S16 :所述ISO任務(wù)等待接收上層下發(fā)數(shù)據(jù); 步驟S17 :所述ISO任務(wù)判斷接收到的數(shù)據(jù)是否是PPS數(shù)據(jù),是則執(zhí)行PPS處理返回PPS響應(yīng)數(shù)據(jù)給上層,否則執(zhí)行步驟S18 ; 步驟S18 :所述ISO任務(wù)等待接收APDU數(shù)據(jù); 步驟S19 :所述ISO任務(wù)對(duì)接收到的所述APDU數(shù)據(jù)執(zhí)行APDU命令處理得到處理結(jié)果; 步驟S20 :所述ISO任務(wù)將所述處理結(jié)果返回給上層,返回步驟S18。
2.如權(quán)利要求I所述的一種實(shí)現(xiàn)智能卡多任務(wù)處理的方法,其特征是 當(dāng)切換到SWP任務(wù)運(yùn)行時(shí),執(zhí)行步驟S5’ -S13’ ; 當(dāng)切換到ISO任務(wù)運(yùn)行時(shí),執(zhí)行步驟S14’ -S20’ ; 當(dāng)切換到APDUProcess任務(wù)時(shí)候,執(zhí)行步驟S21’ -S25’ ; 步驟S5’ 所述SWP任務(wù)判斷是否有激活信號(hào),是則執(zhí)行下一步,否則等待激活信號(hào); 步驟S6’ 所述SWP任務(wù)檢測(cè)到激活信號(hào)后向上層發(fā)送SWP激活數(shù)據(jù)幀; 步驟S7’ 所述SWP任務(wù)等待接收上層下發(fā)數(shù)據(jù); 步驟S8’ 所述SWP任務(wù)判斷接收到的數(shù)據(jù)是否符合預(yù)設(shè)數(shù)據(jù)幀格式,是則執(zhí)行步驟S9’,否則執(zhí)行SWP層協(xié)議處理返回相應(yīng)響應(yīng)數(shù)據(jù)給上層,然后返回步驟S7’ ;步驟S9’ 所述SWP任務(wù)判斷接收到的數(shù)據(jù)是否包含HCI數(shù)據(jù)包,是則執(zhí)行步驟S10’,否則執(zhí)行SWP層協(xié)議處理返回相應(yīng)響應(yīng)數(shù)據(jù)給上層,然后返回步驟S7’ ; 步驟S10’ 所述SWP任務(wù)判斷所述HCI數(shù)據(jù)包中是否包含預(yù)設(shè)事件指令,是則執(zhí)行步驟S11’,否則執(zhí)行HCI協(xié)議層處理返回第一響應(yīng)數(shù)據(jù)給上層,然后返回步驟S7’ ; 步驟S11’ 所述SWP任務(wù)提取所述預(yù)設(shè)指令中包含的APDU命令,并將所述APDU命令加入APDU隊(duì)列,等待接收處理結(jié)果; 步驟S12’ 所述SWP任務(wù)把接收到的所述處理結(jié)果打包成HCI數(shù)據(jù)包,再把所述HCI數(shù)據(jù)包打包成符合預(yù)設(shè)數(shù)據(jù)幀格式的第二響應(yīng)數(shù)據(jù); 步驟S13’ 所述SWP任務(wù)將所述第二響應(yīng)數(shù)據(jù)返回給上層,返回步驟S7’ ; 步驟S14’ 所述ISO任務(wù)判斷是否有激活信號(hào),是則執(zhí)行下一步,否則等待激活信號(hào); 步驟S15’ 所述ISO任務(wù)檢測(cè)到激活信號(hào)后向上層發(fā)送ISO激活數(shù)據(jù)幀; 步驟S16’ 所述ISO任務(wù)等待接收上層下發(fā)數(shù)據(jù); 步驟S17,:所述ISO任務(wù)判斷接收到的數(shù)據(jù)是否是PPS數(shù)據(jù),是則執(zhí)行PPS處理返回PPS響應(yīng)數(shù)據(jù)給上層,否則執(zhí)行步驟S18’ ; 步驟S18’ 所述ISO任務(wù)等待接收APDU數(shù)據(jù); 步驟S19’ 所述ISO任務(wù)將接收到的所述APDU數(shù)據(jù)加入APDU隊(duì)列,等待接收處理結(jié)果; 步驟S20’ 所述ISO任務(wù)將接收到的所述處理結(jié)果返回給上層,返回步驟S18’ ; 步驟S21’ 所述APDUProcess任務(wù)進(jìn)行任務(wù)初始化; 步驟S22’ 所述APDUProcess任務(wù)等待APDU隊(duì)列有數(shù)據(jù)存入; 步驟S23’ 所述APDUProcess任務(wù)按先進(jìn)先出的順序從所述APDU隊(duì)列中提取出數(shù)據(jù); 步驟S24’ 所述APDUProcess任務(wù)對(duì)提取出的所述數(shù)據(jù)執(zhí)行APDU命令處理; 步驟S25’ 所述AroUPiOcess任務(wù)將處理結(jié)果發(fā)送給與所述數(shù)據(jù)對(duì)應(yīng)的任務(wù),然后返回步驟S22’。
3.如權(quán)利要求I或2所述的一種實(shí)現(xiàn)智能卡多任務(wù)處理的方法,其特征是所述判斷是否有激活信號(hào)具體為,檢查IO接口是否有滿足條件的電流或電壓信號(hào),是則表示有激活信號(hào),否則表示沒(méi)有激活信號(hào)。
4.如權(quán)利要求I或2所述的一種實(shí)現(xiàn)智能卡多任務(wù)處理的方法,其特征是所述SWP任務(wù)判斷接收到的數(shù)據(jù)是否符合預(yù)設(shè)數(shù)據(jù)幀格式具體包括 A :所述SWP任務(wù)判斷接收到的數(shù)據(jù)是否是SHDLC數(shù)據(jù)幀類(lèi)型,是則執(zhí)行B,否則不符合預(yù)設(shè)數(shù)據(jù)幀格式; B :判斷所述數(shù)據(jù)是否是I幀,是則符合預(yù)設(shè)數(shù)據(jù)幀格式,否則不符合預(yù)設(shè)數(shù)據(jù)幀格式。
5.如權(quán)利要求I或2所述的一種實(shí)現(xiàn)智能卡多任務(wù)處理的方法,其特征是所述SWP任務(wù)判斷接收到的數(shù)據(jù)是否包含HCI數(shù)據(jù)包,是則還包括,所述SWP任務(wù)判斷所述HCI數(shù)據(jù)包是否完整,是則執(zhí)行下一步,否則返回等待接收上層下發(fā)數(shù)據(jù)。
6.如權(quán)利要求I或2所述的一種實(shí)現(xiàn)智能卡多任務(wù)處理的方法,其特征是所述ISO任務(wù)等待接收APDU數(shù)據(jù)之后還包括,所述ISO任務(wù)判斷接收到的所述APDU數(shù)據(jù)是否完整,是則執(zhí)行下一步,否則返回等待接收APDU數(shù)據(jù)。
7.如權(quán)利要求I所述的一種實(shí)現(xiàn)智能卡多任務(wù)處理的方法,其特征是所述ISO任務(wù)等待接收APDU數(shù)據(jù)之后執(zhí)行以下步驟 步驟Al :所述ISO任務(wù)判斷接收到的數(shù)據(jù)是否是I-block數(shù)據(jù)幀類(lèi)型,是則執(zhí)行下一步,否則執(zhí)行Tl層協(xié)議處理返回第四響應(yīng)數(shù)據(jù)給上層,然后返回等待接收上層下發(fā)數(shù)據(jù);步驟A2 :所述ISO任務(wù)從接收到的I-block數(shù)據(jù)幀中提取出APDU數(shù)據(jù); 步驟A3 :所述ISO任務(wù)判斷接收到的所述I-block數(shù)據(jù)幀是否是最后一個(gè)分組,是則執(zhí)行下一步,否則返回等待接收APDU數(shù)據(jù); 步驟A4 :所述ISO任務(wù)對(duì)提取到的APDU數(shù)據(jù)執(zhí)行APDU命令處理得到處理結(jié)果; 步驟A5 :所述ISO任務(wù)把所述處理結(jié)果打包成I-block數(shù)據(jù)幀類(lèi)型的第三響應(yīng)數(shù)據(jù); 步驟A6 :所述ISO任務(wù)將所述第三響應(yīng)數(shù)據(jù)返回給上層,然后返回等待接收APDU數(shù)據(jù)。
8.如權(quán)利要求2所述的一種實(shí)現(xiàn)智能卡多任務(wù)處理的方法,其特征是所述ISO任務(wù)等待接收APDU數(shù)據(jù)之后執(zhí)行以下步驟 步驟BI :所述ISO任務(wù)判斷接收到的數(shù)據(jù)是否是I-block數(shù)據(jù)幀類(lèi)型,是則執(zhí)行下一步,否則執(zhí)行Tl層協(xié)議處理返回第四響應(yīng)數(shù)據(jù)給上層,然后返回等待接收上層下發(fā)數(shù)據(jù);步驟B2 :所述ISO任務(wù)從接收到的I-block數(shù)據(jù)幀中提取出APDU數(shù)據(jù); 步驟B3 :所述ISO任務(wù)判斷接收到的所述I-block數(shù)據(jù)幀是否是最后一個(gè)分組,是則執(zhí)行下一步,否則返回等待接收APDU數(shù)據(jù); 步驟B4 :所述ISO任務(wù)將提取到的APDU數(shù)據(jù)加入APDU隊(duì)列,,等待接收處理結(jié)果;步驟B5 :所述ISO任務(wù)把接收到的所述處理結(jié)果打包成I-block數(shù)據(jù)幀類(lèi)型的第三響應(yīng)數(shù)據(jù); 步驟B6 :所述ISO任務(wù)將所述第三響應(yīng)數(shù)據(jù)返回給上層,然后返回等待接收APDU數(shù)據(jù)。
9.如權(quán)利要求I或2所述的一種實(shí)現(xiàn)智能卡多任務(wù)處理的方法,其特征是所述為創(chuàng)建的多個(gè)任務(wù)分配優(yōu)先級(jí)具體為根據(jù)時(shí)序?yàn)閯?chuàng)建的多個(gè)任務(wù)分配優(yōu)先級(jí)。
全文摘要
本發(fā)明公開(kāi)了一種實(shí)現(xiàn)智能卡多任務(wù)處理的方法,涉及智能卡操作系統(tǒng)領(lǐng)域。該方法包括智能卡的底層操作系統(tǒng)創(chuàng)建多個(gè)任務(wù),并為每個(gè)任務(wù)分配優(yōu)先級(jí),查找優(yōu)先級(jí)最高且當(dāng)前狀態(tài)為就緒狀態(tài)的任務(wù)并切換到該任務(wù)運(yùn)行,包括SWP任務(wù)和ISO任務(wù)接收上層下發(fā)的數(shù)據(jù),從中解析出APDU數(shù)據(jù)進(jìn)行APDU命令處理并將處理結(jié)果封包成響應(yīng)數(shù)據(jù)返回給上層,或者SWP任務(wù)和ISO任務(wù)將解析出APDU數(shù)據(jù)發(fā)送給APDUProcess任務(wù)執(zhí)行APDU命令處理,等待接收返回的處理結(jié)果,并將處理結(jié)果封包成響應(yīng)數(shù)據(jù)返回給上層。本發(fā)明實(shí)現(xiàn)了智能卡的多個(gè)IO接口同時(shí)工作,使得智能卡的功能更加強(qiáng)大。
文檔編號(hào)G06F9/46GK102929708SQ201210461469
公開(kāi)日2013年2月13日 申請(qǐng)日期2012年11月16日 優(yōu)先權(quán)日2012年11月16日
發(fā)明者陸舟, 于華章 申請(qǐng)人:飛天誠(chéng)信科技股份有限公司