Android RIL-Java

123.jpg (2.09 KB, 下载次数: 1)

下载附件  保存到相册

2012-3-21 10:47 上传

 

  RIL-Java在本质上就是一个RIL代理,起到一个转发的作用,是Android Java概念空间中的电话系统的起点。在RIL-D的分析中,我们知道RILD建立了一个侦听套接口,等待RIL-Java的连接。一旦连接成功,RIL-JAVA就可发起一个请求,并等待应答,并将结构发送到目标处理对象。在RIL-Java中,这个请求称为RILRequest。为了直观起见,我还是不厌其烦的给出RIL-Java的框架图。

456.jpg (9.81 KB, 下载次数: 0)

下载附件  保存到相册

2012-3-21 10:48 上传

 

  RIL-Java的大框架包含了四个方面:
  Receiver,Sender,CommandInterface,异步通知机制
  (1) Command Interface
  在ril.java源代码中,我们可以看到RIL-JAVA对象提供了如下的Command Interface:
  …
  getlccCardStatus
  getCurrrentCalls
  dial
  acceptCall
  rejectCall
  sendDTMF
  sendSMS
  setupDataCall
  setRadioPower
  …
  为什么要定义这些接口呢?这函数接口不是凭空捏造出来的,这些都是电话的基本功能的描述,是对Modem AT指令的提炼抽象。大多数Modem都是根据通讯协议提供接口,我们如果不熟悉通讯协议,请参阅3GPP的相关文档,以及自己使用的Modem的SPEC说明。
  V.25ter AT Commands
  3GPP 07.07 AT Comamnds-General commands
  3GPP 07.07 AT Comamnds-Call Control commans
  3GPP 07.07 AT Comamnds-Network Service related commands
  3GPP 07.07 AT Comamnds-MT control and status command
  3GPP 07.07 AT Comamnds-GPRS Commands
  3GPP 07.07 Mobile Termination Errors
  3GPP 07.05 SMS AT Commands
  (2)Receiver

789.jpg (12.57 KB, 下载次数: 0)

下载附件  保存到相册

2012-3-21 10:50 上传

 

aa.jpg (13.93 KB, 下载次数: 0)

下载附件  保存到相册

2012-3-21 10:50 上传

 

  Receiver连接到RILD的服务套接口,接收读取RILD传递过来的Response Parcel.Response分为两种类型,一种是URC,一种是命令应答。对于URC将会直接分发到通知注册表中的Handler。而命令应答则通过Receiver的异步通知机制传递到命令的发送者进行相应处理。
  (3)Sender
                    

147.jpg (29.17 KB, 下载次数: 0)

下载附件  保存到相册

2012-3-21 10:52 上传

 

  Sender应该分为两部分架构,
  上层函数调用Command Interface将请求消息发送到Sender的架构。
  Sender接收到EVENT_SEND消息后,将请求发送到RILD的架构。
  (4)异步应答框架
  对于异步应答来讲,命令的发起者发送后,并不等待应答就返回,应答的回应是异步的,处理结果通过消息的方式返回。站在设计者的角度思考如何设计合适的框架来完成异步通讯的功能呢?对于异步系统我们首先应该考虑的是如何标识命令和结果,让命令和结果有一个对应关系,还有命令没有响应了,如何管理命令超时?让我们来看看Android设计者如何完成这些工作。
  Android设计者利用了Result Message 和RILRequest对象来完成Request和Result的对应对于关系。在上层做调用的时候生成Result Message对象传递到ril_java,并在Modem有应答后,通过Result Message对象带回结果。如何保证该应答是该RILRequest的呢?Android设计者还提供了一个Token(令牌)的概念。在源代码中RILRequest的mSerail就用作了Token.Token用来唯一标识每次发送的请求,并且Token将被传递到RILD,RILD在组装应答是将Token写入,并传回到ril-java,ril-java根据该Token找到相应的Request对象。
                  

258jpg.gif (53.77 KB, 下载次数: 0)

下载附件  保存到相册

2012-3-21 10:53 上传

 

  (4.1)RIL命令的发送模式
  协议的真正实现是在rild中,RIL-JAVA更多的是一个抽象和代理,我们在研究源代码的过程中就会体会到到RIL-JAVA中的命令函数都有一个共同的框架。
  SendXxxCmd(传入参数Data,传出参数result){
  组合RILRequest(请求号,result,mSerail)
  Data->RR
  send(RILRequest): Message
  }
  1)RILRequest
                 

ff.jpg (1.58 KB, 下载次数: 0)

下载附件  保存到相册

2012-3-21 10:55 上传

 

  请求号:
  request将传递到RILD用以标识命令,request代表某个功能。例如拨叫的request号为:RIL_REQUEST_DIAL。在libs/telephony/ril_commands.h有定义。RILRequest.obtain@RILRequest根据命令请求号,传入参数Result Message,mSerail构造了一个RILRequest.Result Message将带回应答信息回到命令的发起者。
  mSerail:
  Android使用了一个RILRequest对象池来管理Andoird RILRequest.mSerail是一个递增的变量,用来唯一标识一个RILRequest。在发送时正是用了该变量为Token,在rild层看到的token就是该mSerail。
  EVENT_END:
  [url=mailto:EVENT_END@handleMessage@RILSender@RIL.java]
EVENT_END@handleMessage@RILSender@RIL.java[/url]
                            

321.jpg (1.78 KB, 下载次数: 0)

下载附件  保存到相册

2012-3-21 10:54 上传

 

vv.jpg (1.17 KB, 下载次数: 0)

下载附件  保存到相册

2012-3-21 10:58 上传

 

  2)发送步骤:
  第一步:
  生成RILRequest,此时将生成m_Serial(请求的Token)并将请求号,数据,及其Result Message 对象填入到RILRequest中
  第二步:
  使用send将RILRequest打包到EVENT_SEND消息中发送到到RIL Sender Handler,
  第三步:
  RilSender 接收到EVENT_SEND消息,将RILRequest通过套接口发送到RILD,同时将RILRequest保存在mRequest中以便应答消息的返回。
  (4.2) 接收模式
  第一步:分析接收到的Parcel,根据类型不同进行处理。
                       

gg.jpg (5.04 KB, 下载次数: 0)

下载附件  保存到相册

2012-3-21 10:59 上传

 

  第二步:根据数据中的Token(mSerail),反查mRequest,找到对应的请求信息。
  第三步:将是数据转换成结果数据。
  第四步:将结果放在RequestMessage中发回到请求的发起者。
                         

rr.jpg (110.71 KB, 下载次数: 0)

下载附件  保存到相册

2012-3-21 11:00 上传

 

ee.jpg (33.55 KB, 下载次数: 0)

下载附件  保存到相册

2012-3-21 11:00 上传

 

Android核心分析之十八Android电话系统之RIL-Java的更多相关文章

  1. Android核心分析之十六Android电话系统-概述篇

    Android电话系统之概述篇 首先抛开Android的一切概念来研究一下电话系统的最基本的描述.我们的手机首先用来打电话的,随后是需要一个电话本,随后是PIM,随后是网络应用,随后是云计算,随后是想 ...

  2. Android核心分析之十五Android输入系统之输入路径详解

       Android用户事件输入路径 1 输入路径的一般原理 按键,鼠标消息从收集到最终将发送到焦点窗口,要经历怎样的路径,是Android GWES设计方案中需要详细考虑的问题.按键,鼠标等用户消息 ...

  3. Android核心分析之十四Android GWES之输入系统

          Android输入系统 依照惯例,在研究Android输入系统之前给出输入系统的本质描述:从哲学的观点来看,输入系统就是解决从哪里来又将到哪里去问题.输入的本质上的工作就是收集用户输入信息 ...

  4. Android 核心分析之十二Android GEWS窗口管理之基本架构原理

    Android GWES之窗口管理之基本构架原理 Android的窗口管理是C/S模式的.Android中的Window是表示Top Level等顶级窗口的概念.DecorView是Window的To ...

  5. Android核心分析之二十一Android应用框架之AndroidApplication

    Android Application Android提供给开发程序员的概念空间中Application只是一个松散的表征概念,没有多少实质上的表征.在Android实际空间中看不到实际意义上的应用程 ...

  6. Android核心分析之十九电话系统之GSMCallTacker

    GSMCallTracker在本质上是一个Handler.<IGNORE_JS_OP> 1.jpg (1.52 KB, 下载次数: 1) 下载附件  保存到相册 2012-3-22 11: ...

  7. Android核心分析 之十Android GWES之基本原理篇

    Android GWES基本框架篇 我这里的GWES这个术语实际上从Microsoft 的Window上移植过来的,用GWES来表示Android的窗口事件系统不是那么准确,在Android中Wind ...

  8. Android核心分析之二十七Android GDI 之SurfaceFlinger之动态结构示

           SurfaceFlinger对象建立过程示意 1 SurfaceSession的建立 客户端请求建立Surface时,首先在要与SurfaceFlinger建立一个Session,然后再 ...

  9. Android基础笔记(十八)- Fragment

    博客的感悟终点-開始 什么是Fragment 加入fragment到Activity的两种方式 Fragment的生命周期 Fragment的向下兼容 Fragment之间的通信 博客的感悟,终点-開 ...

随机推荐

  1. com.Goods.ForEach

    com.Goods.ForEach(g => { g.TransactionPrice = getUnitPriceByProductId(g.ProductID); g.ExpressMone ...

  2. centos6.3编译安装Apache2.4.3+PHP5.4.8+Mysql5.5.8

    以虚拟机VirtualBox 版本是4.1.20(内存设置为512M,centos安装是文本模式下安装),全新以最小化包安装了32位的 CentOS6.3系统,作为本地web环境,上次讲了在windo ...

  3. StatusBar & StatusBarItem

    StatusBar & StatusBarItem StatusBar StatusBar class StatusBarItem StatusBarItem class Example &l ...

  4. ActiveX控件的基本操作方法以及如何在VS2010下使用控件

    在此,小编就介绍下ActiveX控件的基本操作方法以及如何在VS2010下使用控件,我们以一个程序为例, (1)      打开VS2010编译器(右键以管理员身份运行,因为ActiveX需要注册), ...

  5. ABAP自定义类的构造方法

    REPORT ytest_011. *----------------------------------------------------------------------* * CLASS z ...

  6. My mac cannot run 类相关的操作 , which is lower than 类相关的操作。

     首先你选择的项目是mac项目,    其次,你MAC的系统版本小于你当前项目部署环境的最低支持版本    要么升级你的MAC系统,要么再project—>target设置developerme ...

  7. IT安全的本质

    (1)信任:服务端信任客户端的请求参数. (2)可控:客户端的请求参数可以被控制,任意修改. 服务端信任+客户端可控 =不安全. 服务端信任+客户端不可控=安全. 服务端不信任+客户端可控=安全. 服 ...

  8. 20145129 《Java程序设计》第1周学习总结

    20145129 <Java程序设计>第1周学习总结 教材学习内容总结 在第一章学习后初步了解了Java历史及发展,以及JCP,JSR,JVM的相关知识了解.JCP是一个开放性国际组织,由 ...

  9. svg绘制蓝色星空,月亮,旋转灯塔

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  10. netty 入门

    先啰嗦两句,使用 netty 来搭建服务器程序,可以发现相比于传统的 nio 程序, netty 的代码更加简洁,开发难度更低,扩展性也很好,非常适合作为基础通信框架. 下面上代码: Server p ...