STK
(SIM Application Toolkit),中文名为SIM卡应用工具包。它包含一系列手机与SIM卡的交互指令,SIM卡可以运行卡内的小应用程序与手机以及用户进行交互,从而实现增值服务的目的。
别名:
CAT:Card Application Toolkit,另一个常用名,Android的STK应用就被命名为CatAppUSAT:USIM Application Toolkit ,3G SIM卡的STK功能。但是一般不会特别指出是3G的STK,所以这个命令不常用。
协议
2G协议:3GPP TS 11.143G协议:
3GPP TS 31.1112G测试协议:
3GPP TS 51.010-43G测试协议: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卡是无法主动向手机发出命令的。如下图所示:
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(值)。如下图所示
- 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]: !
执行结果就是:手机立即显示“尊敬的用户,欢迎您使用中国联通业务!”,并且显示一会儿后会自动消失