SAT总结

SAT(sim application toolkit),也可以称为STK ,是一种增值服务,运营商利用SAT为用户提供更加丰富多彩的增值服务。

传统功能里,手机是主导,SIM卡是从属,手机主动去读取SIM卡里的文件;但是在SAT功能里,SIM卡是主导,手机是从属,SIM卡主动要求手机做一些事情,例如显示欢迎语,显示SAT菜单之类的;或者要求手机把SIM卡感兴趣的事情告知SIM卡。


一、SAT 常见命令

第一类:User Interfaces(这些命令可能需要用户在界面上互动)
1.SET UP MENU(卡上报一级菜单)
2.SELECT ITEM(卡上报子级菜单)
3.DISPLAY TEXT(卡上报一些文字,常见应用:欢迎语)
4.GET INKEY(卡上报命令,要求用户输入一个字符)
5.GET INPUT(卡上报命令,要求用户输入一串字符)
6.PLAY TONE(卡要求play一些Tone音)
7.SET UP IDLE MODE TEXT(卡上报在idle界面显示的文字)
8.LAUNCH BROWER(卡要求使用浏览器打开某网址)
9.OPEN CHANNEL(BIP命令:卡要求建立卡和网络交互的channel)
10.CLOSE CHANNEL (BIP命令:卡要求关闭卡和网络交互的channel)
11.GET CHANNEL STATUS(BIP命令,卡要求获取现在channel的状态)
12.SEND DATA(BIP命令,卡要求在打开的channel上发送数据)
13.RECEIVE DATA(BIP命令,卡要求在打开的channel上获取数据)
请注意:BIP相关信息,请参考MOL 上‘BIP测试快速入门’ .
 
第二类:SIM/Network Control(需要modem以及网络协同合作完成的主动式命令)
1.SET UP CALL(卡要求拨打电话)
2.SEND SHORT MESSAGE(卡要求发送短信)
3.SEND SS(卡要求发送SS)
4.SEND USSD(卡要求发送USSD)
 
第三类:SIM/ME Control/Information Collection(modem处理)
1.MORE TIME(卡要求手机给多点时间)
2.POLL INTERVAL(卡要求手机定时查询,里面携带timer)
3.POLLING OFF(卡要求手机去去掉前面的poll interval)
4.REFRESH(卡更新了卡内文件,要求手机去重新读取)
5.PROVIDE LOCAL INFO(卡要求手机提供local info)
6.SET UP EVENT LIST(卡上报卡关心的event list, 当后续有对应的event发生的时候,手机通过envelope告知卡)
 

 二、SAT 基本流程

 SAT需要用到四个基本命令:
1. TERMINAL PROFILE(在开机初始化的时候,手机告知SIM卡,这支手机支持那些SAT命令)
2. FETCH(卡返回91 **, 代表有命令,手机通过fetch指令去取命令)
3. TERMINAL RESPONSE(手机执行完SAT命令, 手机通过terminal response把 执行主动式命令的结果下发给 SIM卡
4. ENVELOPE(当卡感兴趣的事件发生的时候,手机通过Envelope 发送数据或者事件给SIM卡
 
SAT Session: 开始于 SIM 卡上报 91xx(通常在 terminal profile 之后), 结束于SIM卡上报 90xx(通常在手机回 terminal response 后);在一个 sat session 中,常见的是一个fetch, 回 terminal response 后就会结束;但是有时会出现一个 session 有多组 "fetch + terminal response".
在一个 SAT Session 周期中,不能执行其他SAT相关命令;例如,当fetch 到的命令正在执行,还没有回Terminal Response,如果打电话需要执行call control,此时call control不能执行,这时的拨号就会失败。 

三、Set Up Menu 介绍

Sim 通过上报set up menu 提供一个 menu(sat一级菜单)供user操作sim卡定制的功能,命令通常包含 item identifier, text string, icon(可选)。User 点击 menu item, 会通过 envelope 将选中的 item identifier 发给 sim, sim 会上报 select item 进入一个子菜单,或上报其他命令,也可能不上报sat 命令。
Set up menu命令详情:GSM11.14/TS102 223中6.4.8, GSM11.14 中 12.6 和 TS102 223中 8.6。

四、STK功能

  • 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:数据通道状态变化

五、STK命令流程

因为手机与SIM卡之间的交互,总是手机主动给SIM卡发出命令,这意味着SIM卡是无法主动向手机发出命令的。如下图所示: 
  SAT总结_第1张图片

因此,定义了一个名为Fetch的命令。当手机给SIM卡发送普通命令(如Status等)的时候,SIM卡的返回值可以是:我有一条主动式命令要发出(值为91XX)。当手机收到这个返回值时候,就立即发送Fetch命令给SIM卡,从而在SIM卡的返回值中获取到这条主动式命令。在手机执行完命令之后,需要发送返回值给SIM卡。如果没有后续命令,SIM卡返回结束消息(值为9000)如下图所示: 

SAT总结_第2张图片SAT总结_第3张图片

从上图还可以看出,手机对命令的执行结果,通过Terminal Response发送给SIM卡。 
Terminal Response可以是: 
• 成功 
• 失败,有临时性问题。如手机正在打电话,有些命令暂时不能执行。 
• 失败,有永久性问题。如命令无法解析,命令超出手机执行能力,或者和网络相关的命令被网络拒绝等。


六、STK流程实例

一个最常见的STK流程 
• 开机SIM卡初始化阶段,手机发送Terminal Profile给SIM卡,告知手机的支持能力。然后SIM卡将Menu菜单发送给手机,手机保存该菜单并生成CatApp。 
• 开机之后,用户点击CatApp,选择菜单中的某一项,开始用SIM卡的STK交互。 
• SIM卡根据用户选择的主菜单的菜单项,返回select item命令,内容是一个item 列表,用于生成子菜单 
• 在子菜单中,用户选择某一项,触发不同的行为。可能是显示一段文本,或者是发送SS给网络,或者输入一段文本,等等。

SAT总结_第4张图片


七、STK命令解析

STK命令为TLV结构,即Tag(标签),Length(长度),Value(值)。 
如下图所示 

SAT总结_第5张图片

命令的Tag在协议11.14的第13.1和13.2章节中定义,常用的有: 
• D0:Proactive SIM command tag 
• D3:Menu Selection tag 
• D6:Event download tag 
命令TLV结构的Value部分,由多个内容TLV组成。 

问题总结一、在手机开机时,会弹出欢迎界面,这个欢迎界面就是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(见TLV TAG里的TEXT_STRING(0x0d))
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]: !
执行结果就是:手机立即显示“尊敬的用户,欢迎您使用中国联通业务!”

问题总结二:TERMINAL RESPONSE 解析

处理在CommandParamsFactory,和CatService里

if (cmdDet.compRequired) {
    tag |= 0x80;
}
#TERMINAL RESPONSE
DEV_ID_KEYPAD      = 0x01;
DEV_ID_DISPLAY     = 0x02;
DEV_ID_UICC        = 0x81;
DEV_ID_TERMINAL    = 0x82;
DEV_ID_NETWORK     = 0x83;
public enum ComprehensionTlvTag {
    COMMAND_DETAILS(0x01),
    DEVICE_IDENTITIES(0x02),
    RESULT(0x03),
    DURATION(0x04),
    ALPHA_ID(0x05),
    ADDRESS(0x06),
    USSD_STRING(0x0a),
    SMS_TPDU(0x0b),
    TEXT_STRING(0x0d),
    TONE(0x0e),
    ITEM(0x0f),
    ITEM_ID(0x10),
    RESPONSE_LENGTH(0x11),
    FILE_LIST(0x12),
    HELP_REQUEST(0x15),
    DEFAULT_TEXT(0x17),
    EVENT_LIST(0x19),
    ICON_ID(0x1e),
    ITEM_ICON_ID_LIST(0x1f),
    IMMEDIATE_RESPONSE(0x2b),
    LANGUAGE(0x2d),
    URL(0x31),
    BROWSER_TERMINATION_CAUSE(0x34),
    TEXT_ATTRIBUTE(0x50),
    CAUSE(0x1a),
    TRANSACTION_ID(0x1c),
    BEARER_DESCRIPTION(0x35),
    CHANNEL_DATA(0x36),
    CHANNEL_DATA_LENGTH(0x37),
    CHANNEL_STATUS(0x38),
    BUFFER_SIZE(0x39),
    SIM_ME_INTERFACE_TRANSPORT_LEVEL(0x3C),
    OTHER_ADDRESS(0x3E),
    DNS_SERVER_ADDRESS(0x40),
    NETWORK_ACCESS_NAME(0x47),
    NEXT_ACTION_INDICATOR(0x18),
    DATE_TIME_AND_TIMEZONE(0x26),
    BATTERY_STATE(0x63),
    ACTIVATE_DESCRIPTOR(0x7B);
810301250082028281830100
81[Tlv COMMAND_DETAILS]03[length]01[commandNumber]25[typeOfCommand]00[commandQualifier]
82[Tlv DEVICE_IDENTITIES]02[length]82[source device id]81[destination device id]
83[Tlv RESULT]01[length]00[resultCode]
问题总结三:点击 STK Icon 没反应
点击 launcher 上的stk icon, 正常情况是进入 stk menu, 如果没有显示stk menu, 而是没反应,常见的两种情况是:
case 1. SIM卡没有上报 set up menu.
说明:首先请将同一张SIM卡放到对比机,看是否有 stk menu. 若是对比机没有stk menu,说明此卡就是没有上报 set up menu. 若是对比机有 stk menu, 可以抓一个包含开机log的复现问题log,从modem log 中,搜索是否有set up menu 指令,使用关键字“81 03 01 25”,若是有就再往上层分析。若是modem log中没有,请提供完整的log 提 eservice 来分析。具体请参考:[FAQ12054][SAT]无法进入一张卡的STK菜单时该怎么办

case 2. catservice 广播的 set up menu,过了很久 stk ap 才收到。
说明:只有stk ap收到 set up menu, 才能进入stk menu, 否则点击没反应或提示“STK未安装”. 从SIM卡上报set up menu, 到stk ap收到,中间经过的主要模块:modem sim task --> ril --> catservice --> stk ap, 如果某一个环节处理时间过长,就需要分析对应环节。常见的延时环节是从catservice广播set up menu, 到stk ap 收此广播;因为通常 sim 卡报 set up menu 时间点比较早,整个ap 正在初始化,如果广播很多,就会延时明显;这个时候,一方面要分析具体是哪些广播延时明显,另一方面可以将stk 广播从后台广播改为前台广播来加快处理速度。具体修改请参考:[FAQ18402][SAT]SIM Refresh后STK Name更新太慢, [FAQ18531]插入某种特定卡开机,点击STK Icon,显示STK未安装

类似如下情况的问题,若需要较早支持进入 SIM Toolkit, 也可以参考此说明修改:
例如:插入支持 STK SIM,重启手机,当开机弹出运营商提示框后,点击SIM Toolkit应用,提示“App isn't installed”, 过一段时间才能进入。
 
类似问题 log 情况,按时间顺序说明如下:
//开机或 refresh 后,sim 上报的 set up menu 指令,CatService 收到 set up menu.
12-31 18:08:01.844194 1490 1490 D CAT : CatService: handleMessage[10]
12-31 18:08:01.844357 1490 1490 D CAT : CatService: SET_UP_MENU
12-31 18:08:01.845522 1490 1490 D CAT : CAT: mSetUpMenuFromMD: true
12-31 18:08:01.846026 1490 1490 D CAT : CatService: SS-sendTR: command type is 37
12-31 18:08:01.846284 1490 1490 D CAT : CatService: encodeOptionalTags() Unsupported Cmd details=CmdDetails: compRequired=true commandNumber=1 typeOfCommand=37 commandQualifier=0
12-31 18:08:01.846435 1490 1490 D CAT : CatService: TERMINAL RESPONSE: 810301250082028281830100
12-31 18:08:01.849209 1490 1490 D CAT : CatService: Sending CmdMsg: com.android.internal.telephony.cat.CatCmdMessage@bf8cac0 on slotid:0

//catservice 发广播
12-31 18:08:01.851211 846 1664 V ActivityManager: Broadcast: Intent { act=android.intent.action.stk.command flg=0x10 (has extras) } ordered=false userid=0 callerApp=ProcessRecord{bdd92c0 1490:com.android.phone/1001}

//54秒后,STK AP 才收到广播。
12-31 18:08:55.672267 1490 1490 D ActivityThread: BDC-Calling onReceive: intent=Intent { act=android.intent.action.stk.command flg=0x10 cmp=com.android.stk/.StkCmdReceiver (has extras) }, receiver=com.android.stk.StkCmdReceiver@db84bac
12-31 18:08:55.685323 1490 1490 D ActivityThread: BDC-RECEIVER handled : 0 / ReceiverData{intent=Intent { act=android.intent.action.stk.command flg=0x10 cmp=com.android.stk/.StkCmdReceiver (has extras) } packageName=com.android.stk resultCode=-1 resultData=null resultExtras=null}
 
12-31 18:08:55.690877 1490 1490 D CAT : StkAppService: StkAppService onStart sim id: 0, op: 1, Bundle[{SLOT_ID=0, cmd message=com.android.internal.telephony.cat.CatCmdMessage@4dff87b, op=1}]
12-31 18:08:55.690980 1490 1490 D CAT : StkAppService: StkAppService onStart mPhone: Handler (com.android.internal.telephony.PhoneProxy) {41d633d}, mPhoneStateChangeReg: true
12-31 18:08:55.691419 1490 2387 D CAT : StkAppInstaller: Init thread
12-31 18:08:55.691523 1490 2387 D CAT : StkAppService: handleMessage opcode[1], sim id[0]
12-31 18:08:55.691643 1490 2387 D CAT : StkAppService: cmdName[SET_UP_MENU]

问题总结三:STK上报子级菜单

D0398103012400820281828F0E0180727960E0793C53058BA28D2D8F0E0280727960E0793C530590008BA28F0E0380727960E0793C53054ECB7ECD
D039
8103012400[36上报子级菜单]
82028182
8F0E[length28]
0180
727960E0793C53058BA28D2D
8F0E[length28]
0280
727960E0793C530590008BA2
8F0E[length28]
0380
727960E0793C53054ECB7ECD

问题总结四:STK上报一级菜单

D081 BA
8103 012500[37上报一级菜单]
8202 8182
850F 80005500530049004D53615E947528
8F0A 248073AF740365F662A5
8F0A 258053C280036D88606F
8F0A 37807CBE54C163A88350
8F0A 628059296C14988462A5
8F0A 6480822A73ED67E58BE2
8F0A 668051FA884C63075357
8F0A 68804F53575B5FEB8BAF
8F0C A28065B095FB65E9665A62A5
8F0A A480624B673A97F34E50
8F0A A680624B673A96058BFB
8F0A A880624B673A90AE7BB1
8F0A AA8077ED4FE152A97406
8F0C AC80624B673A84254E1A5385






你可能感兴趣的:(SAT总结)