Framework中的Ril源码分析

Framework中的Ril源码分析

ID:38156283

大小:140.59 KB

页数:17页

时间:2019-06-06

Framework中的Ril源码分析_第1页
Framework中的Ril源码分析_第2页
Framework中的Ril源码分析_第3页
Framework中的Ril源码分析_第4页
Framework中的Ril源码分析_第5页
资源描述:

《Framework中的Ril源码分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Framework中的Ril源码分析目录(?)[-]·一概述·二RILRequest·三发送子线程如何把数据发送到mSenderThreadmSenderThread子线程把请求发送给RILC·四接收子线程接收数据的过程数据的处理流程URC消息处理流程非URC消息处理流程为了区别RIL层中的RIL.cpp,我们约定framework中的RIL.java文件描述为RILJ,而hardware中的RIL.cpp描述为RILC。一、概述所有上层对RIL层的请求,最终都需要在RILJ中转换为RIL层可识别的命令,然后通过Socket通道传输下去;同时,RIL层数据的上报

2、,也要通过RILJ进行解码,还原为上层容易识别的格式。因此,RILJ是framework与RIL层交互的通道。RILJ有两个主要特点:1、开启了两个独立线程分别负责发送数据和接收数据2、数据的发送和接收是异步的第一个特点很容易理解,而对于第二个特点有衍生出来了另一个问题:既然是异步的消息机制,也就是说发送者在发送完数据后就可以返回,那么当得到回应后,就要有一种方法去找到当初的请求者,并把结果返回给他。那么这个方法是什么呢?这个方法就是令牌系统,我们将在第二节介绍。有了以上简要的认识,我们从RILJ的入口开始展开我们的分析,也就是RILJ的构造函数:[java]v

3、iewplaincopy·@RIL.java·publicRIL(Contextcontext,intpreferredNetworkType,intcdmaSubscription){·super(context);·//发送子线程·mSenderThread=newHandlerThread("RILSender");·mSenderThread.start();·Looperlooper=mSenderThread.getLooper();·//mSender是发送子线程的Handler,通过他可以发送数据·mSender=newRILSender(loo

4、per);··//接收子线程·mReceiver=newRILReceiver();·mReceiverThread=newThread(mReceiver,"RILReceiver");·mReceiverThread.start();·}可以看到,在构造函数中开启了两个独立的子线程:mSenderThread用于给RILC发送数据,而mReceiverThread用于接收RILC上报的数据。下面我们分析两个子线程的处理流程。而在介绍他们之前,我们先来介绍以下在RIL层中传递的消息的格式:RILRequest。二、RILRequest我们单独拿出一小节来介绍R

5、ILRequest对象,是因为里面包含了我们在文章开始地方介绍的“消息异步传输”的秘密。首先来看他的属性:classRILRequest{},说明这是一个独立的类,没有继承任何的父类或接口。他也在RIL.java中,同时也是RIL.java中除了RIL外唯一的类。我们再来看一下RILRequest的构成:[java]viewplaincopy·classRILRequest{·//令牌·intmSerial;·intmRequest;·MessagemResult;·Parcelmp;·RILRequestmNext;··//生成一个RILRequest的消息对

6、象·staticRILRequestobtain(intrequest,Messageresult){·}·//释放资源·voidrelease(){·}·//构造函数,内容为空·privateRILRequest(){·}·//重置令牌·staticvoidresetSerial(){·sNextSerial.set(sRandom.nextInt());·}·//用于调试·StringserialString(){·}·//异常处理·voidonError(interror,Objectret){·}·}这个类并不复杂,主要的包括一些成员变量和两个重要的成员

7、函数:用于生成消息对象的obtain方法和用于释放对象的release方法。我们先来介绍他的成员变量:mSerial:这个变量就是一个令牌,每生成(obtain)一个新的请求,都将产生一个递增的、唯一的mSerial,当从RILC得到一个数据后,我们将通过mSerial找到当初发送这个请求的对象。这也就是异步通信最关键的联系点。我们在RIL层谈到的令牌(token)就是这个东西。mRequest:请求码,需要和RIL层中的ril_commands.h文件内定义的请求码一致。mResult:生成当前请求的请求者。从RILC中得到数据后,需要把数据处理后返回给mRe

8、sult指向的对象。mp

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。