发明内容
本发明所要解决的技术问题是提供一种在智能卡上集成多电信应用的方法,以解决现有技术中,单一Native卡片不能动态下载和删除业务应用,单一Java卡指令速度和执行效率较慢的技术问题。
为了解决上述问题,本发明公开了一种在智能卡上集成多电信应用的方法,包括:
当接收到应用协议数据单元指令时,判断是否是电信应用专有指令;
若是,则进行电信应用专有指令的分类处理;
若否,则执行所述指令;解析所述指令中的当前事件,并依据事件注册表触发并执行与当前事件对应的不同应用类型的各个电信应用;
其中,所述进行电信应用专有指令的分类处理包括:
判断所述电信应用专有指令的类别;
如果是主动式命令应答指令,则判断被悬挂的电信应用的应用类型;当为电信Java应用时,在Java运行环境下继续执行所述电信应用;当为电信Native应用时,在Native运行环境下继续执行所述电信应用;所述被悬挂的电信应用为在智能卡与终端进行主动式命令交互过程中,发送主动式命令的电信应用;
如果是取主动式命令数据指令,则拷贝主动式命令数据到应答缓冲区;
如果是功能概要指令或数据下载指令,则解析所述指令中的当前事件,并依据事件注册表触发并执行与当前事件对应的不同应用类型的各个电信应用。
优选的,所述事件注册表包括:事件ID、应用ID、应用类型和触发优先级;其中,所述应用类型包括:电信Native应用和电信Java应用。
优选的,依据事件注册表触发并执行与当前事件对应的不同应用类型的各个电信应用,包括:
查找事件注册表中与当前事件对应的各个电信应用;
针对查找到的各个电信应用按照触发优先级依次选取各个电信应用;
依据事件注册表判断所选取的电信应用的应用类型;
根据各个电信应用的应用类型在各自相应的运行环境下触发并执行所述电信应用。
相应的,本发明还公开了一种集成多电信应用的智能卡,包括:
指令判断模块,用于当接收到应用协议数据单元指令时,判断是否是电信应用专有指令;
第一指令处理模块,用于当指令判断模块判断为电信应用专有指令时,进行电信应用专有指令的分类处理;
第二指令处理模块,用于当指令判断模块判断为非电信应用专有指令时,执行所述指令;
应用触发执行模块,用于解析所述指令中的当前事件,并依据事件注册表触发并执行与当前事件对应的不同应用类型的各个电信应用;
其中,所述第一指令处理模块包括:
专有指令判断子模块,用于判断所述电信应用专有指令的类别;如果是主动式命令应答指令,则触发第一处理子模块;如果是取主动式命令数据指令,则触发第二处理子模块;如果是功能概要指令或数据下载指令,则触发所述应用触发执行模块;
第一处理子模块,用于判断被悬挂的电信应用的应用类型;当为电信Java应用时,在Java运行环境下继续执行所述电信应用;当为电信Native应用时,在Native运行环境下继续执行所述电信应用;所述被悬挂的电信应用为在智能卡与终端进行主动式命令交互过程中,发送主动式命令的电信应用;
第二处理子模块,用于拷贝主动式命令数据到应答缓冲区。
优选的,所述事件注册表包括:事件ID、应用ID、应用类型和触发优先级;其中,所述应用类型包括:电信Native应用和电信Java应用。
优选的,所述应用触发执行模块包括:
查找子模块,用于查找事件注册表中与当前事件对应的各个电信应用;
选取子模块,用于按照触发优先级依次选取各个电信应用;
判断子模块,用于依据事件注册表判断所选取的电信应用的应用类型;
触发子模块,用于根据各个电信应用的应用类型在各自相应的运行环境下触发并执行所述电信应用。
与现有技术相比,本发明具有以下优点:
通过本发明所述的一种在智能卡上集成多电信应用的方法,对电信应用专有指令,进行电信应用专有指令的分类处理;对于非电信应用专有指令,执行所述指令后,解析所述指令中的当前事件,并依据事件注册表触发并执行与当前事件对应的不同应用类型的各个电信应用。本发明基于电信Java应用的事件触发机制,建立一张应用的事件注册表,实现电信卡上Native应用和Java应用的共存,并保证多电信应用运行的独立性。其中,基于电信Native应用,兼顾了智能卡的指令速度和执行效率;基于电信Java应用,实现了硬件无关性和应用可增删的灵活性。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本发明主要应用于同时支持Java功能和Native功能的电信智能卡,电信Java应用可以支持优选漫游、一卡多号、ST等,以及可下载的Java Toolkit Applet,各方面条件满足Java USIM的标准。电信Native应用可以支持各种应用,尤其是对时间要求比较高的应用场合,如中国联通OTA、WIB1.3等。
参照图1,示出了本发明一种在智能卡上集成多电信应用的方法实施例的流程图,包括:
步骤101,当接收到应用协议数据单元指令时,判断是否是电信应用专有指令;若是,则执行步骤102;若否,则执行步骤103;
应用协议数据单元(APDU,Application Protocol Data Unit)指令是终端和智能片之间交互的一种指令。当智能卡接收到一条APDU指令时,需要判断该指令是否是电信应用专有指令,根据不同的判断结果执行不同的操作。其中,所述电信应用专有指令包括四种指令:
1、Terminal Response指令:卡应用工具包(CAT,Card Application Toolkit)指令中,终端发送的主动式命令应答指令;
2、Fetch指令:CAT指令中,取主动式命令数据指令;
3、Terminal Profile指令:终端功能概要指令;
4、Envelope指令:终端封装的数据下载指令,数据来自于网络或终端。
步骤102,进行电信应用专有指令的分类处理;
当判断所述指令为电信专有指令时,进行上述四种指令的分类判断,对Terminal Response指令、Fetch指令、Terminal Profile指令或Envelope指令进行不同处理。在后面实施例中再对分类处理进行具体说明,此处从略。
步骤103,执行所述指令;解析所述指令中的当前事件,并依据事件注册表触发并执行与当前事件对应的不同应用类型的各个电信应用;
当判断所述指令不为电信专有指令时,执行所述指令。此外,由于执行 完该指令后可能会需要进行二次处理,即有与该指令相对应的后续事件需要执行。例如,执行该指令时进行“写文件操作”,之后还需要执行与该指令对应的“更新文件”事件等,则依据事件注册表触发并执行与当前事件对应的不同应用类型的各个电信应用。
本发明实施例中,在智能卡中需要维护一个事件注册表,每条注册信息包含的内容为:事件ID,应用ID,应用类型,触发优先级,等等。“事件ID”为Java卡规范中定义的标准事件;“应用ID”用于标识某个应用,其对每个电信应用取值唯一;“应用类型”用于区分是电信Java应用还是电信Native应用;“触发优先级”,用于多个电信应用同时注册某一事件的情况下,事件到来后各个电信应用被触发的先后顺序。
可以理解的是,对于电信Java应用和电信Native应用,系统维护统一的事件注册表。电信Native应用是预置在智能卡内的,相应的事件注册信息也需要在智能卡片初始化时进行预置,不能进行安装和删除,在应用执行过程中可以通过系统提供的Native API进行更新。对于电信Java应用,可以通过标准的GP指令或者RAM(Remote Application Management)对其进行增删。电信Java应用使用标准的Java API注册事件,应用注册信息是在应用安装时写入的,在应用执行的过程中,可以调用标准的Java UICC/USIMAPI进行更新和删除(相应的,Java UICC/USIM API也是通过调用系统提供的Native API实现的。)
通常的,所述方法还包括步骤104,将应答结果发送至终端。
在电信应用专有指令的分类处理完成之后,或者非电信应用专有指令的电信应用触发并执行完成后,将应答结果发送至终端。
需要说明的是,在上述步骤103中,执行所述指令之后,所述方法还包括:判断当前指令是否有事件相对应;若是,则解析所述指令中的当前事件;若否,则直接执行步骤104,将指令执行的应答结果发送至终端。
本发明提出了一种在智能卡上集成多电信应用的方法,基于电信Java应用的事件触发机制,建立一张应用的事件注册表,解析出指令中的当前事件后,依据所述事件注册表触发并执行与当前事件对应的不同应用类型的各 个电信应用,可以实现智能卡上电信Native应用和电信Java应用的共存、并保证多电信应用运行的独立性。其中,基于电信Native应用,兼顾了智能卡的指令速度和执行效率;基于电信Native应用,实现了硬件无关性和应用可增删的灵活性。
本发明涉及多电信应用处理的设计模式,由于电信应用的激活为事件触发模式,而不是非电信的应用选择模式,当处理如电信Native应用和电信Java应用等多电信应用共存的问题时,就需要用到事件触发运行模式。
如图2所示,为本发明依据事件注册表触发并执行与当前事件对应的不同应用类型的各个电信应用的流程图,包括:
步骤201,查找事件注册表中与当前事件对应的各个电信应用;
步骤202,按照触发优先级依次选取各个电信应用;
在具体实施时,可以对查找到的各个电信应用按照触发优先级进行排序,然后依据所述排序按照触发优先级由高到低依次选取各个电信应用。
其中,在步骤201之后,所述方法还可以包括:判断是否查找到与当前事件对应的电信应用;若是,则执行步骤202;若否,则直接将指令执行的应答结果发送至终端。
步骤203,依据事件注册表判断所选取的电信应用的应用类型;如果是电信Java应用,则执行子步骤204;如果是电信Native应用,则执行步骤205;
步骤204,在Java运行环境下,触发并执行所述电信应用;
步骤205,在Native运行环境下,触发并执行所述电信应用。
需要说明的是,依据事件注册表触发与当前事件对应的电信应用后,在电信应用的执行过程中,电信应用一般需要发送主动式命令。则智能卡与终端进行主动式命令交互过程中,发送主动式命令的电信应用被悬挂;电信应用与终端进行主动式命令交互结束后,所述电信应用继续执行。
如图3所示,为本发明所述智能卡与终端进行主动式命令交互的流程图,包括:
步骤301,智能卡设置状态字信息,通知终端有主动式命令要发送;
通常的,智能卡片将返回的状态字设置为“0x91XX”的形式。
步骤302,终端发送取主动式命令数据指令获取数据,智能卡将主动式命令发送给终端;
步骤303,终端根据用户的响应发送主动式命令应答指令给智能卡,反馈主动式命令的执行结果。
下面,以中国电信的优选漫游列表(PRL,Preferred Roaming List)更新应用(该应用更新卡片的优选漫游列表文件,用于手机在漫游时选择网络)为例,对电信应用与终端进行主动式命令交互时,所述电信应用的悬挂和执行过程进行具体说明。
步骤A1,智能卡收到Envelope指令下载的SMS PP短信,PRL更新应用被触发,执行更新优选漫游列表文件的操作;
步骤A2,PRL更新应用发送文本显示主动式命令,智能卡与终端进行文本显示主动式命令交互,此时,PRL更新应用被悬挂;
其中,所述文本显示主动式命令交互包括如下子步骤:
a1、智能卡返状态字0x91XX,通知手机有主动式命令要发送;
a2、手机发送Fetch指令,智能卡将主动式命令数据发送给手机;
a3、手机将文本信息“1/3处理中的PRL更新”显示给用户;
a4、用户按确认按键;
a5、根据用户的响应,手机发送Terminal Response指令给智能卡,将用户的应答结果给智能卡;
步骤A3,智能卡收到Terminal Response指令,所述文本显示主动式命令交互过程结束,PRL更新应用继续执行,记录文件更新相关信息,PRL更新应用执行完毕后退出。
对于电信应用专有指令,由于主动式命令的忙状态会跨越多个APDU指令。也就是说,一个主动式命令的交互流程有三个步骤(步骤301~步骤303),每一个步骤对应一条APDU指令。而在这三条APDU指令之间(即,步骤 301和步骤303的执行过程),发送主动式命令的电信应用被悬挂,称为主动式命令的“忙状态”。在这三条APDU指令的执行过程中,终端又可能向智能卡发送其他APDU指令。因此,主动式命令的忙状态会跨越多条APDU指令。其中,在“忙状态”下,发送主动式命令的电信应用被悬挂,智能卡需要保存被悬挂的电信应用的应用ID和应用类型,用于收到主动式命令应答指令后,继续执行被悬挂的电信应用。
参照图4,为本发明所述电信应用专有指令的分类处理的流程图,包括如下步骤:
步骤401,判断所述电信应用专有指令的类别;如果是主动式命令应答指令,则执行步骤402;如果是取主动式命令数据指令,则执行步骤405;如果是功能概要指令或数据下载指令,则执行步骤406;
步骤402,判断被悬挂的电信应用的应用类型;当为电信Java应用时,执行步骤403;当为电信Native应用时,执行步骤404;
步骤403,在Java运行环境下继续执行所述电信应用;
步骤404,在Native运行环境下继续执行所述电信应用;
步骤405,拷贝主动式命令数据到应答缓冲区;
步骤406,解析所述指令中的当前事件,并执行步骤407;
步骤407,依据事件注册表中触发并执行与当前事件对应的不同应用类型的各个电信应用。
需要说明的是,在步骤401判断所述电信应用专有指令的类别中,判断结果既不是主动式命令应答指令,也不是取主动式命令数据指令时,对于此类的电信应用专有指令,均执行步骤406解析所述指令中的当前事件。
其中,在电信应用专有指令的分类处理中,针对功能概要指令或数据下载指令,所述步骤407(依据事件注册表中触发并执行与当前事件对应的不同应用类型的各个电信应用的具体执行过程),与非电信应用专有指令的电信应用的触发过程相同,具体可参见步骤201~步骤206,此处从略。
下面,以一个具体实施例对本发明一种在智能卡上集成多电信应用的方 法进行具体说明。如表1所示,为本发明实施例所述的一种事件注册表,所述事件注册表中,除了事件ID、应用ID、应用类型和触发优先级以外,还包括附加信息长度、附加信息等属性。可以理解的是,在智能卡上,事件注册表记录有有大量的注册信息,本发明实施例的事件注册表仅以举例的形式列出了其中某几条注册信息。
表1:
依据上述事件注册表,所述方法包括如下步骤:
步骤B1,智能卡接收到一条APDU指令,为“terminal profile”指令,判断是否是电信应用专有指令;
步骤B2,判断是电信应用专有指令,进行电信应用专有指令的分类处理,其包括如下子步骤:
b1,判断所述电信应用专有指令的类别;
b2,判断为功能概要指令,解析所述指令中的当前事件;
解析出该指令对应的事件为:EVENT_PROFILE_DOWNLOAD。
b3,查找事件注册表中与当前事件对应的各个电信应用;
其中,注册了EVENT_PROFILE_DOWNLOAD事件的电信应用为:电信应用1和电信应用2。
b4,对查找到的各个电信应用按照触发优先级进行排序;
具体的排序为:电信应用、电信应用2。
b5,依据所述排序选取电信应用1,并依据事件注册表判断电信应用1的应用类型;
b6,判断电信应用1为电信Native应用,初始化Native运行环境,触发并执行电信应用1;
b7,依据所述排序选取电信应用2,并依据事件注册表判断电信应用2的应用类型;
b8,判断电信应用2为电信Java应用,初始化Java运行环境,触发并执行电信应用2;
步骤B3,将应答结果发送至终端。
参照图5,示出了本发明一种集成多电信应用的智能卡实施例的结构图,包括:
指令判断模块501,用于当接收到应用协议数据单元指令时,判断是否是电信应用专有指令;
第一指令处理模块502,用于指令判断模块判断为电信应用专有指令时,进行电信应用专有指令的分类处理;
第二指令处理模块503,用于指令判断模块判断为非电信应用专有指令时,执行所述指令;
应用触发执行模块504,用于解析所述指令中的当前事件,并依据事件注册表触发并执行与当前事件对应的不同应用类型的各个电信应用。
具体的,所述事件注册表包括:事件ID、应用ID、应用类型和触发优先级;其中,所述应用类型包括:电信Native应用和电信Java应用。
进一步,所述电信应用专有指令包括:主动式命令应答指令、取主动式命令数据指令、功能概要指令和数据下载指令。
在本发明的一个实施例中,所述智能卡还包括:
主动式命令交互模块,用于与终端进行主动式命令交互;
其中,主动式命令交互模块与终端进行主动式命令交互过程中,发送主动式命令的电信应用被悬挂;主动式命令交互模块与终端进行主动式命令交互结束后,所述电信应用继续执行。
进一步,所述主动式命令交互模块包括:
命令通知子模块,用于设置状态字信息,通知终端有主动式命令要发送;
命令发送子模块,用于在终端发送取主动式命令数据指令获取数据后,将主动式命令发送给终端;
指令接收子模块,用于接收终端根据用户的响应发送的主动式命令应答指令,获取主动式命令的执行结果。
在本发明的一个优选实施例中,所述第一指令处理模块502包括:
专有指令判断子模块,用于判断所述电信应用专有指令的类别;如果是主动式命令应答指令,则触发第一处理子模块;如果是取主动式命令数据指令,则触发第二处理子模块;如果是功能概要指令或数据下载指令,则触发所述应用触发执行模块;
第一处理子模块,用于判断被悬挂的电信应用的应用类型;当为电信Java应用时,在Java运行环境下继续执行所述电信应用;当为电信Native应用时,在Native运行环境下继续执行所述电信应用;
第二处理子模块,用于拷贝主动式命令数据到应答缓冲区。
在本发明的另一个优选实施例中,所述应用触发执行模块504包括:
查找子模块,用于查找事件注册表中与当前事件对应的各个电信应用;
选取子模块,用于按照触发优先级依次选取各个电信应用;
判断子模块,用于依据事件注册表判断所选取的电信应用的应用类型;
触发子模块,用于依据判断子模块的判断结果,根据各个电信应用的应用类型在各自相应的运行环境下触发并执行所述电信应用。也就是说,如果是电信Java应用,则在Java运行环境下触发并执行所述电信应用;如果是电信Native应用,则在Native运行环境下触发并执行所述电信应用。
本发明实施例所述的一种集成多电信应用的智能卡,可以兼顾Native卡和Java卡的优势,既保证了智能卡的执行速度,同时实现了硬件无关性,具备应用可增删的灵活性。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见 即可。对于智能卡实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上对本发明所提供的一种在智能卡上集成多电信应用的方法及其智能卡,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。