概述
STK(SIM Application Toolkit),中文名为SIM卡应用工具包。它包含一系列手机与SIM卡的交互指令,SIM卡可以运行卡内的小应用程序与手机以及用户进行交互,从而实现增值服务的目的。
别名:
CAT:Card Application Toolkit,另一个常用名,Android的STK应用就被命名为CatApp
USAT:USIM Application Toolkit ,3G SIM卡的STK功能。但是一般不会特别指出是3G的STK,所以这个命令不常用。
协议
2G协议:3GPP TS 11.14
3G协议:3GPP TS 31.111
2G测试协议:3GPP TS 51.010-4
3G测试协议:3GPP TS 31.124,里面有大量引用ETSI TS 102.384的case
对于测试协议,不论51.010-4,31.124还是102.384,测试项都是27.22.*。
功能
- Profile Download,配置下载
开机初始化SIM卡的过程中,手机告诉SIM卡手机支持哪些STK命令。
在STK中,Download指的是手机将数据发送给SIM卡。 - Proactive SIM,主动式命令
通过主动式命令,SIM卡可以指示手机执行一系列的行为,如:
○ 显示菜单
○ 显示文本
○ 发短信
○ 拨出电话
○ 发SS(辅助业务)或者USSD给网络
○ 发点声音
○ 重新初始化SIM卡或者更新手机缓存的SIM卡内容
○ 获取一些手机信息
○ 连接数据网络,上传/下载数据。
主动式命令可以认为是STK最重要的功能之一,很多其他的功能都需要有主动式命令来构成。 - Data download to SIM,数据下载
使用Envelope命令,下载点对点短消息或者小区广播给SIM卡。 - Menu selection,菜单选择
菜单选择功能。一般是刚开机的时候,SIM卡发送菜单给手机,手机缓存下来,生成STK应用(如Android的CatApp)的主菜单。当用户点击进入应用的时候,该菜单会显示给客户,由用户进行选择,从而进入二级菜单或者触发其他功能。 - Call control,呼叫控制
如果手机/SIM卡支持呼叫控制功能,则手机拨出电话的时候(以及发送SS/USSD),必须先将通话请求发送给SIM卡,SIM卡可以决定是否允许通话/拒绝通话/修改参数之后通话。 - MO Short Message control by SIM,短消息控制
类似于呼叫控制,SIM卡也可以对发出的短消息进行控制。 - Event download,事件下载
SIM卡可以向手机发送主动式命令(SET UP EVENT LIST),要求监听一些列事件。当这些事件发生时,手机需要使用ENVELOPE命令通知SIM卡详细的事件信息。这些事件包括:
○ 来电
○ 电话接通/挂断
○ 位置更新
○ 用户操作
○ 手机进入待机界面
○ 手机语言变化
○ 数据网络状态变化
○ 有数据到达 - BIP(Bearer Independent Protocol),承载无关业务
一般使用BIP来表示承载无关业务,其实就是数据网络相关功能,包括5个主动式命令和2个事件。
主动式命令包括:
○ OPEN CHANNEL:打开数据通道
○ CLOSE CHANNEL:关闭数据通道
○ SEND DATA:发送数据
○ RECEIVE DATA:接收数据
○ GET CHANNEL STATUS:获取数据通道状态
事件为:
○ Data Available:有数据到达
○ Channel Status Change:数据通道状态变化
命令流程
因为手机与SIM卡之间的交互,总是手机主动给SIM卡发出命令,这意味着SIM卡是无法主动向手机发出命令的。如下图所示:
为此,定义了一个名为Fetch的命令。当手机给SIM卡发送普通命令(如Status等)的时候,SIM卡的返回值可以是:我有一条主动式命令要发出(值为91XX)。当手机收到这个返回值时候,就立即发送Fetch命令给SIM卡,从而在SIM卡的返回值中获取到这条主动式命令。在手机执行完命令之后,需要发送返回值给SIM卡。如果没有后续命令,SIM卡返回结束消息(值为9000)如下图所示:
从上图还可以看出,手机对命令的执行结果,通过Terminal Response发送给SIM卡。
Terminal Response可以是:
• 成功
• 失败,有临时性问题。如手机正在打电话,有些命令暂时不能执行。
• 失败,有永久性问题。如命令无法解析,命令超出手机执行能力,或者和网络相关的命令被网络拒绝等。
命令
根据前面的描述,可以总结出来,STK功能通过如下4个命令实现
• TERMINAL PROFILE:告知SIM卡手机对STK的支持能力。初始化SIM卡的过程中发给SIM卡。
• FETCH:手机从SIM卡获取命令
• TERMINAL RESPONSE:手机返回SIM卡执行主动式命令的结果
• ENVELOPE:手机发送数据或者事件给SIM卡。
流程举例
下图是一个最常见的STK流程
• 开机SIM卡初始化阶段,手机发送Terminal Profile给SIM卡,告知手机的支持能力。然后SIM卡将Menu菜单发送给手机,手机保存该菜单并生成CatApp。
• 开机之后,用户点击CatApp,选择菜单中的某一项,开始用SIM卡的STK交互。
• SIM卡根据用户选择的主菜单的菜单项,返回select item命令,内容是一个item 列表,用于生成子菜单
• 在子菜单中,用户选择某一项,触发不同的行为。可能是显示一段文本,或者是发送SS给网络,或者输入一段文本,等等。
命令解析
STK命令为TLV结构,即Tag(标签),Length(长度),Value(值)。
如下图所示
命令的Tag在协议11.14的第13.1和13.2章节中定义,常用的有:
• D0:Proactive SIM command tag
• D3:Menu Selection tag
• D6:Event download tag
命令TLV结构的Value部分,由多个内容TLV组成。
内容的Tag在协议11.14的第13.2章节中定义,太多,不在这里一一列举。每一种内容的value结构定义都不同,在协议的第12章定义,每一种内容有一个小节详细说明。
举例
下面是一个显示文本命令的实例。在手机开机时,会弹出欢迎界面,这个欢迎界面就是STK的主动式命令“Display Text”发起的。
命令:
D0308103012101820281028D25085C0A656C768475286237FF0C6B228FCE60A84F7F75284E2D56FD8054901A4E1A52A1FF01
解析:
D0: TAG,表示主动式命令
30: LENGTH,0x30=48,表示命令的VALUE部分长度为48 byte。
以下是命令内容
81: Command details tag
03: Command details length
01: cmd.number
21: cmd.type -> DISPLAY TEXT
01: cmd.qual ->
high priority;
clear message after a delay;
82: Device identity tag
02: Device identity length
81: Devices.source -> SIM
02: Devices.dest -> Display
8D: Text string tag
25: Text string length
08: Data coding scheme,表示字串使用UCS2编码
5C0A: UCS2[0]: 尊
656C: UCS2[1]: 敬
7684: UCS2[2]: 的
7528: UCS2[3]: 用
6237: UCS2[4]: 户
FF0C: UCS2[5]: ,
6B22: UCS2[6]: 欢
8FCE: UCS2[7]: 迎
60A8: UCS2[8]: 您
4F7F: UCS2[9]: 使
7528: UCS2[10]: 用
4E2D: UCS2[11]: 中
56FD: UCS2[12]: 国
8054: UCS2[13]: 联
901A: UCS2[14]: 通
4E1A: UCS2[15]: 业
52A1: UCS2[16]: 务
FF01: UCS2[17]: !
执行结果就是:手机立即显示“尊敬的用户,欢迎您使用中国联通业务!”,并且显示一会儿后会自动消失
最后
以上就是畅快季节为你收集整理的STK入门的全部内容,希望文章能够帮你解决STK入门所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复