Android通信机制及QCRIL原理介绍ppt课件_第1页
Android通信机制及QCRIL原理介绍ppt课件_第2页
Android通信机制及QCRIL原理介绍ppt课件_第3页
Android通信机制及QCRIL原理介绍ppt课件_第4页
Android通信机制及QCRIL原理介绍ppt课件_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2020/5/11,Android通信机制及QCRIL原理介绍,Page2,Android软件栈架构,Page3,Android应用运行环境,每个Android应用依赖于/system/framework文件夹下的一些核心库,这些核心库用是java编写的。这些应用还依赖于/system/lib文件夹下的动态链接库,这些动态链接库是C/C+编写的。这些库就是Android应用的环境,还有一些共享库和类库,是运行时动态加载的类库和本地调用(JNIInvoke)。传统JAVA应用,所有的JAVA应用都运行在同一个JVM中(默认是这样的)。而在Android上,每个应用都运行在自己专有的dalvik虚拟机实例里,这和传统JAVA应用有区别。Android使用Linux作为HAL(hardwareabstractionlayer),Page4,AndroidRILArchitecture,Page5,AndroidRIL,DalvikVM(shared):SharedcodeamongallAndroidVMSRIL.java:JavautilityforRILmessage/sockethandlingTelephonyManagerCommunicationbetweenJavaandRILDisviacommands(messages)oversocketsRIL.sohandlessocketanddispatchdetailsRIL.javaiscorrespondingcodeinJava,Page6,AndroidRIL,RILDRILD.soDaemonRIL.soUtilitylibraryforRILmessage/sockethandlingQCRIL.soQCRILimplementationcm.so,wms.so,xxx.soQCremoteAPIlibs(QC),Page7,RIL消息类型,有两种类型的RIL消息Solicitedcommands(请求消息)是由上层应用,例如DiIAL、HANGUP等通过RILlib发起的Unsolicitedcommands是由底层modem侧发起的,向上层报告状态的变化、新的消息等,例如CALL_STATE_CHANGED、SIM_STATE_CHANGED、NEW_SMS。TwosetsofRILcommands,Page8,通信机制,RILD和Modem侧的通讯是通过RPC和QMI实现的RPC用于多CPU之间的通讯,一侧的CPU应用在ONCRPC栈中通过XDR将消息编码成字节流,通过RPCrouter、共享内存对应传到另一侧CPU的RPCrouter、ONCRPC栈中,XDR解码后,得到数据。XDR即是用于在同平台间实现数据连续表示的编解码机制。QMI是高通自定义的一种数据接口,用于终端设备的操作系统应用和底层模块的数据通信。数据业务基本通过QCRIL、QMI与底层交互。,Page9,通信机制,Application是Android应用,是单独的linux进程。com.android.phone是AndroidService,类似于windows的Service,运行于单独的进程,给其他应用提供服务。所有的Service都可以通过IServiceManager接口访问。例如一次呼叫调用发生,情景大概是如下几步:Application调用android.telephony的接口;Telephony的类根据状态,将呼叫分解成若干个commands,通过IPC,调用PhoneService的接口;PhoneService通过sockets和RILD这个daemon通信;rild将来自PhoneService的命令通过RPC、共享内存,发送给Modem,并接收Modem的返回,打包返回给PhoneService;PhoneService也将返回打包给Application;呼叫调用完毕。,Page10,Application和PhoneService的通信,Application和PhoneService之间通过OpenBinder机制通信。但是我们并不需要懂得OpenBinder的原理,因为Android软件栈中的ApplicationFramework层已经提供便捷的接口去调用。ApplicationFramework层的android.telephony包为上层应用提供了调用phoneService的接口,封装、抽象得很好,一个打电话的调用只需要三行代码,IServiceManagersm=ServiceManagerNative.getDefault();IPhonephoneService=IPhone.Stub.asInterface(sm.getService(phone);phoneService.call(phoneNumber);,Page11,同步和异步调用,回调函数:Client注册一个回调函数,当条件满足时Server返回回调。回调函数本身是同步的。在同步调用中,调用者被blocked直到调用被ServerFunction处理并返回调用者。在异步调用中,调用请求发送到服务端,并立即返回,Client如果想知道结果必须注册一个监听相应状态返回的回调函数。另外回调是一次性的,如果想持续地接收server返回的回调,client需要在每一次回调返回后重新注册,或者用某种机制来保证一直接收回调(例如一个eventtable)。,Page12,同步调用,Page13,异步调用,Page14,QcrilRequest,Page15,QcrilEvent/Response,Page16,QCRILFunctions,RILD向QCRIL发起:onRequest():Qcril处理请求并立即返回onRequestComplete():操作完成时调用,可以在onRequest()中使用onStateRequest():Qcril同步返回radio状态onCancel(RIL_Tokent):Qcril尽力去取消队列中的RIL请求,立即返回,完成时调用onRequestComplete(),这个函数只能在不同于RIL请求的另一个线程中调用。,Page17,QCRILFunctions,QCRIL向RILD发起:onRequestComplete():请求完成或cancel时调用OnUnsolicitedRespon

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论