Android 源码开发系列(一) STK 实现

1.Android 结构图

 

Android 源码开发系列(一) STK 实现_第1张图片

从图中可以得到,查看方向,由MODEM向JAVA查看,MODEM会使用两种方式给RIL.JAVA上报数据,分别是Unsolicited and Terminal response Solicited(request/response) . 在RIL.JAVA中常用的有

solicited response(向moden发起请求)

1.RIL_REQUEST_STK_GET_PROFILE    用来GET PROFILE

2.RIL_REQUEST_STK_SET_PROFILE   设置PROFILE

3.RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND  用于发送SELECT ITEM 等

4.RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE  发送STK TERMINAL RESPONSE 

5.RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM    能于从STK打CALL,通知JAVA界面,相关CALL的消息。

Unsolicited response (moden主动发起)

1.RIL_UNSOL_STK_SESSION_END     结束会话

2.RIL_UNSOL_STK_PROACTIVE_COMMAND   SETUP MENU 显示STK的主菜单

3.RIL_UNSOL_STK_EVENT_NOTIFY                  主要用于EVENT DOWNLOAD

4.RIL_UNSOL_STK_CALL_SETUP                      打CALL后的相关通知消息。

 

上图中的Baseband 一般由平台厂商进行开发,根据ANDROID的开源默认的机制,可以使用AT COMMAND 来操作MODEM,也有其它的厂商会进行自己的MODEM开发,来达到提高MODEM的速度和效率。但对于RIL.java这个抽象层来说,不管采用哪种 类型的MODEM,上层都是一样的,这样便于更好的Porting. 这大概也是ANDROID的魅力吧。

 

请求发到StkService.java,即telephony service,将二进制的流进行解析,得到对应的类的结构,并将请求发送给StkApplicationService.java.

Android 源码开发系列(一) STK 实现_第2张图片

最后,在上层应用界面对相关的消息进行响应,和用户进行交互。

 

通过上面的图可以知道,大部分STK的协议是在MODEM这边实现的,比如Termianl Profile, USSD,SS,而在ANDROID上层,只对部分的协议进行了支持,主要是和用户有交互的操作,比如DISPLAY TEXT。

 

在StkService.java主要进行了三项工作

1.Parsing binary stream from ril.java and packing the result to message, and then send the message to StkApplicationService.java.

2.Parsing the terminal response from UI(mainly means user side) to binary stream and send the stream to modem via ril.java.

3.Providing the service for StkApplicationService.java and Maintaining the status of STK.

 

在StkService.java中还用到了状态机,这个可以下次一起讲述状态机是怎么来解析BINARY STREAM.

 

PS:以上图是基于ANDROID2.2, 而ANDROID2.3在StkService.java这层变化较大,有兴趣的朋友可以自己去查看,StkService.java变成CatService.java.

STK protocol refer to 3GPP 11.14,11.11, 51.011,31.101.

OK,今天就到这里面,累了,图画了半天,休息去了。有问题可以M我,大家相互交流下。


你可能感兴趣的:(Android 源码开发系列(一) STK 实现)