Android电话系统之-rild.doc

Android电话系统之-rild

Rild是Init进程启动的一个本地服务,这个本地服务并没有使用Binder之类的通讯手段,而是采用了socket通讯这种方式。RIL(Radio Interface Layer)

Android 给出了一个ril实现框架。由于Android开发者使用的Modem是不一样的,各种指令格式,初始化序列都可能不一样,GSM和CDMA就差别更大 了,所以为了消除这些差别,Android设计者将ril做了一个抽象,使用一个虚拟电话的概念。这个虚拟电话对象就是 GSMPhone(CDMAPhone),Phon对象所提供的功能协议,以及要求下层的支撑环境都有一个统一的描述,这个底层描述的实现就是靠RIL来 完成适配。

Andoid将RIL层分为两个代码空间:RILD管理 框架,AT相关的xxxril.so动态链接库。将RIL独立成一个动态链接库的好处就是Android系统适应不同的Modem,不同的Mode可以有 一个独立的Ril与之对应。从这个层面上看,Rild更多是一个管理框架。

而ril是具体的AT指令合成者和应答解析者。从最基本的功能来讲,ril建立了一个侦听Socket,等待客户端的连接,然后从该连接上读取RIL- Java成传递来的命令并转化成AT指令发送到Modem。并等待Modem的回应,然后将结果通过套接口传回到Ril-Java层。下图是Ril-D的 基本框架:

下面的数据流传递描述图表描述了RIL-JAVA层发出一个电话指令的5 步曲。

在 AT通讯的过程中有两类响应:一种是请求后给出应答,一种是通知类,即为不请自来的,例如短信通知达到,我们称该类通知为URC。在Rild中URC和一 般的Response是分开处理的,概念上URC由handleUnsolicited@Atchannel.c处理,而Response由 handleFinalResponse来处理。

1 Event Loop

Rild 管理的真正精髓在ril.cpp,ril_event.cpp中,在研究的过程中,可以看到设计者在抽象上所下的功夫,设计得很优美。Event Loop的基本工作就是等待在事件端口(串口,Socket),一旦有数据到达就根据登记的Event回调函数进行处理。现在来看Ril设计者是如何建立 一套管理框架来完成这些工作的?

1.1 Event对象

Event对象构成:(fd,index,persist,func,param)

fd事件相关设备句柄。例如对于串口数据事件,fd就是相关串口的设备句柄index persist如果是保持的,则不从watch_list中删除。func回调事件处理函数param回调时参数 为了统一管理事件,Android使用了三个队列:watch_list,timer_list,pending_list,并使用了一个设备句柄池readFDS。

readFDS:是Linux的fd_set,readFDS保存了Rild中所有的设备文件句柄,以便利用select函数统一的完成事件的侦听。

watch_list:监测时间队列。需要检测的事件都放入到该队列中。

timer_list:timer队列

pending_list:待处理事件队列,事件已经触发,需要所回调处理的事件。

事件队列队列的操作:ril_event_add,ril_event_del, ril_timer_add

在添加操作中,有两个动作:

(1) 加入到watch_list

(2) 将句柄加入到readFDS事件句柄池。

1.2 ril_event_loop()

我们知道对于Linux设备来讲,我们可以使用select函数等待在FDS上,只要FDS中记录的设备有数据到来,select就会设置相应的标志位并 返回。readFDS记录了所有的事件相关设备句柄。readFDS中句柄是在在AddEvent加入的。所有的事件侦听都是建立在linux的 select readFDS基础上。

ril_event_loop 利用select等待在readFDS(fd_set)上,当select设备有数据时,ril_event_loop会从select返回,在 watch_list中相应的Event放置到pend_list,如果Event是持久性的则不从watch_list中删除。然后 ril_event_loop遍历pengding_list处理Event事件,发起事件回调函数。

1.3 几个重要的Event

上面分析了ril-d的框架,在该框架上跑的事件有什么

(1)s_listen_event- (s_fdListen,listenCallback)

android电话系统,Android电话系统之-rild.doc相关推荐

  1. android程序设计期末试题b,《Android程序设计》期末试题B.doc

    <Android程序设计>期末试题B.doc 一.判断题(每小题2分,共10分) 1.Android是J2ME的一个实现.( ) 2.View是ViewGroup的子类.( ) 3.一个I ...

  2. android应用程序的生命周期,Android应用程序的生命周期.doc

    Android应用程序的生命周期.doc Android应用程序的生命周期 描述:程序的生命周期是在Android系统中进程从启动到终止的所有阶段,也就是Android从启动到停止的全过程.==程序的 ...

  3. android 屏幕旋转流程,android自动屏幕旋转流程分析.doc

    android自动屏幕旋转流程分析.doc android自动屏幕旋转流程分析 在android设置(Settings)中我们可以看到显示(display)下有一个自动屏幕旋转的checkbox, 如 ...

  4. android 按键映射文件,《android 的按键映射表》.doc

    <android 的按键映射表>.doc Keymaps and Keyboard Input This document describes how keyboard input get ...

  5. Android 在线预览ppt、doc、xls、txt等文件

    说明:使用TBS(腾讯浏览服务)打开,目前不支持在线预览,只能先下载下来,在打开 下载SDK 第一步: 加载jar.so tbs_sdk_thirdapp_v4.3.0.1072_43646_shar ...

  6. libusb android 编译,Android如何对libusb进行编译和使用

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 最近项目中对usb进行使用的场景比较多,了解到libusb是比较出名的usb跨平台方案,学习libusb可以对andro ...

  7. 腾讯android web,Android 使用腾讯TBS

    接入 SDK接入 1.jar包:https://x5.tencent.com/tbs/sdk.html 2.Gradle:api 'com.tencent.tbs.tbssdk:sdk:43903' ...

  8. Android 7.1.2(Android N) Android系统启动流程

    Android 7.1.2(Android N) Android系统启动流程 源码: system/core/rootdir/ init.rc init.zygote64.rc system/core ...

  9. android之android.intent.category.DEFAULT的用途和使用

    1.要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent. Explicit Intent明确的指定了要启动的Acitivity , ...

最新文章

  1. oracle 开窗子句,分析函数和开窗函数
  2. 比特币现金压力测试结果:处理210万笔交易 费用不增反降
  3. IT兄弟连 JavaWeb教程 监听器3
  4. face key point with 7 points
  5. php实现解压功能的函数
  6. json字符串转换成json对象
  7. QT中的滚动条QScrollArea
  8. 2021高考 丽水成绩查询,2021年丽水中考成绩公布查询时间 丽水中考成绩查询方式入口...
  9. (五)可重入锁ReentrantLock的底层原理实现?
  10. win7安装.Net Framework 4,出现错误码(1603,0x80070643)
  11. Java开发买低压本还是标压本_别看游戏本不用低压CPU,其实低压CPU成本比标压CPU更高!...
  12. 01:行业介绍、虚拟化技术、Win系统安装
  13. android微信支付毁掉,android微信支付 需要注意的坑
  14. 绘画基础学习之两点透视原理
  15. 智象科技一体化运维平台的价值
  16. Ansys Speos | 进行智能手机镜头杂散光分析
  17. 新书推荐:《福格行为模型》
  18. 谈古论津丨谦德庄有今天,一要谢郭美美,二要谢郭德纲
  19. maven打包java项目为可执行jar文件,资源文件放在外面
  20. mysql备份文件的有效性,MySQL备份和还原总结

热门文章

  1. C语言2020年作业,2020年c语言上机报告范文【四篇】
  2. make *** 没有指明目标并且找不到 makefile。 停止。_Makefile目标文件搜索(VPATH和vpath)...
  3. pythonmulti函数_python – 用于使用MultiIndex创建pandas系列的语法糖
  4. Java并发编程实战————并发技巧小结
  5. LeetCode算法入门- Valid Parentheses -day11
  6. iPhone清理喇叭灰尘_iphone正确清理扬声器灰尘的方法
  7. html红色星号怎么做_码农的插花艺术:HTML(一)
  8. priority_queuey用法
  9. windows搭建tftp服务器_Ubuntu中搭建TFTP服务器
  10. python dict hash_【python-dict】dict的使用及实现原理