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. 读《JavaScript语言精粹》的一些感言

    最近看了<JavaScript语言精粹>,并且连着看了两遍,如果非要用言语形容的话,那我只能用4个字来形容:相见恨晚.其中的一些经验经过这么多年的摸索其实也了然,但是作者用这么浅薄的书把有 ...

  2. Iphone5s 通话质量差 问题解决

    从某段时间开始,我的手机出现通话质差的情况.而且与信号电平有密切关系,只要覆盖稍差的地方,通话就劣化. 具体症状是我时常听不清对方说话,但对方能够清晰听到我说话. 因为本人也是从事无线网络优化软件产品 ...

  3. VMM学习-vmm_log

    功能类似verilog里的$display函数,在vmm里做了强化,可以在仿真过程中看到整个平台的运行信息,用来调试仿真平台. 函数原型在vmm.sv里(class vmm_log;),其构造函数为e ...

  4. Python python 基本语法

    程序1 def buildConnectionString(params): """Build a connection string from a dictionary ...

  5. 【BZOJ】【3007】拯救小云公主

    思路题 我的naive的做法是二分答案+判定是否有路径可走……但是没有正确理解[走的方向任意]这句话…… 其实就是说想咋走咋走= =360°无死角乱走…… 所以其实是个平面上的问题…… 我们可以换个方 ...

  6. MongoDB 基础

    1. 安装 mongodb-win32-x86_64-2008plus-2.6.12-signed.msi,下载地址 https://www.mongodb.com/download-center#c ...

  7. [错误代码:0x80070002]IIS7及以上伪静态报错404

    故障现象:DTCMS开启伪静态功能,VS2010预览正常,发布到IIS后报错404.0错误 (WIN7,WIN8,SERVER2008).模块IISWebCore通知MapRequestHandler ...

  8. 各大公司广泛使用的在线学习算法FTRL详解

    各大公司广泛使用的在线学习算法FTRL详解 现在做在线学习和CTR常常会用到逻辑回归( Logistic Regression),而传统的批量(batch)算法无法有效地处理超大规模的数据集和在线数据 ...

  9. win8 获取管理员权限

    Win8 下动不动 就弹出要管理员权限什么.......   网上找到很多方法.  什么注册表什么..... 不行..   以下这个方法可行. 按WIN+R,运行对话框中输入gpedit.msc,开启 ...

  10. ASP.NET为图片加上水印

    为我们发布的图片加上一个水印,也是我们经常要做的事情,那怎么样来做呢,下面就一步步开始吧 首先是一个制作水印的类:ImageHandler,代码如下: using System; using Syst ...