Android 源码开发系列(一) STK 实现
2014-11-27 15:47
302 查看
1.Android 结构图
![](http://static.oschina.net/uploads/img/201411/27154705_VRMb.gif)
从图中可以得到,查看方向,由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.
![](http://static.oschina.net/uploads/img/201411/27154705_q2pn.gif)
最后,在上层应用界面对相关的消息进行响应,和用户进行交互。
通过上面的图可以知道,大部分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我,大家相互交流下。
![](http://static.oschina.net/uploads/img/201411/27154705_VRMb.gif)
从图中可以得到,查看方向,由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.
![](http://static.oschina.net/uploads/img/201411/27154705_q2pn.gif)
最后,在上层应用界面对相关的消息进行响应,和用户进行交互。
通过上面的图可以知道,大部分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 实现
- [置顶]▁▂▃ 【2011-9-22日前Himi所有博文锦集-CHM文档】+【Android游戏开发系列源码】+【免费提供打包下载】▃▂▁
- android widget 开发实例 : 桌面便签程序的实现详解和源码 (上)
- Android 源码开发系列 (四) Android 4.2中与SIM/USIM 管理流程
- Android+struts2实现文件图片上传,附源码(侧重服务端开发)
- android widget 开发实例 : 桌面便签程序的实现详解和源码 (上)
- Android 3D游戏开发(基础篇)——Opengl ES游戏引擎实现(送源码)
- 基于Android客户端的人人网开放平台开发系列教程 (有源码哦)
- 【Android应用开发】-(19)Android 串口编程原理和实现方式(附源码)
- 【Android应用开发】-(11)使用JPCT-AE 3D框架实现旋转的立方体(附效果图及源码)
- 图片处理系列二Android瀑布流照片墙实现(含源码)
- 【Android应用开发】-(19)Android 串口编程原理和实现方式(附源码)
- javascript开发系列---仿android gallery实现div左右滑动
- 【Android Native Code开发系列】三 Android源码的编译环境配置、下载及编译
- Android 源码开发系列(二)Android SIM/USIM
- Android 3D游戏开发(基础篇)——Opengl ES游戏引擎实现(送源码)
- Android开发之拍照功能实现(附源码)
- Android程序开发学习笔记系列——基础篇(附源码)
- Android开发之拍照功能实现(附源码)
- Android开发(10)使用SQLiteDatabase操作SQLite数据库实现增删改查(源码)