已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
AndroidRil Elvis RIL简介 RIL RadioInterfaceLayer RIL是Android的无线接口层 负责提供电话服务 是上层应用和下层硬件modem之间的中间层 负责数据的可靠传输 AT命令的发送以及响应 response 的解析 Android的RIL驱动模块 在hardware ril目录下 一共分rild libril so以及librefrence ril so三个部分 RIL执行流程 rild main函数作为整个ril层的入口点 用dlopen打开libreference ril so库 RIL startEventLoop 创建客户端事件监听线程 RIL register 注册事件处理接口 并创建socket监听事件 libril so 组成部分为ril cpp ril event cpp 主要完成同Framework层通信的工作 接受ril请求并传递给librefrence ril so 同时把来自modem的response通过librefrence ril so的反馈回传给调用进程 librefrence ril so rild通过dlopen方式加载librefrence ril so 这是因为librefrence so主要负责跟Modem硬件通信 这样做方便替换或修改以适配更多的Modem种类 它转换来自libril so的请求为AT命令 同时监控Modem的反馈信息 并传递回libril so 在初始化时 rild通过符号RIL Init获取一组函数指针并以此与之建立联系 RIL startEventLoop RIL startEventLoop在ril cpp中实现 它的主要目的是通过pthread create s tid dispatch attr eventLoop NULL 建立一个dispatch线程 入口点在eventLoop 在eventLoop中 会调ril event cpp中的ril event loop 函数 建立起消息队列机制 具体步骤 进入RIL startEventLoop后首先创建一个eventloop线程 建立起消息队列机制 ril event init完成后 通过ril event set来设置一个新ril event 并通过ril event add加入队列之中 add会把队列里所有ril event的fd 放入一个fd集合readFds中 然后进入ril event loop 执行select 这样ril event loop能通过一个多路复用I O的机制 select 来等待这些fd 如果任何一个fd有数据写入 则进入分析流程processTimeouts processReadReadies rfds n firePending 在队列创建之前 利用pipe创建了一个无名管道 并且将管道的读端放入了select的队列中 将管道的写端放入了rilEventAddWakeup 中 rilEventAddWakeup 包含ril event add ev triggerEvLoop 两个函数 ril event add ev 就是将事件加入到队列中 而triggerEvLoop 的作用就是将select函数唤醒 因为在这个函数中会向管道的写端写入数据 这样被select监听的管道读端就可读 那么select函数就会解阻 所以当有一个新的事件加入到队列中 那么就会用pipe的机制将新事件的文件描述符加入到select监听中 所以pipe的作用就是刷新select监听的内容 当select监听到readFds中的某个文件描述符可读或者超时时 就会解除阻塞 执行processTimeouts processReadReadies RIL register 1 RIL register注册一组函数指针RIL RadioFunctions 2 打开接受上层命令的socket通道 在RIL register中 首先是打开与上层通信的socket 并且将它变成监听的套接字 等待上层的连接 s fdListen android get control socket SOCKET NAME RIL ret listen s fdListen 4 将这个套接字加入到消息队列里由select监听 当上层连接它时 就会调用它对应的回调函数listenCallback ril event set 在processCommandsCallback中会调用record stream get next将发过来的数据完全的读取出来 ret record stream get next p rs RILCore Init RIL Init被调用后首先通过参数获取硬件接口的设备文件 接下来是创建mainLoop线程 并跳入到线程内执行 mainLoop会建立起与硬件的通信 然后等待硬件的主动上报或响应 AT的response有两种 一是主动上报的 比如短信 来电等都不需要经过请求 有一unsolicited词语专门描述 另一种才是真正意义上的response 也就是命令的响应 通过sendResponse sendResponseRaw blockingWr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 园区内部交通安全制度
- 铜川职业技术学院《化工仪表及自动化》2024-2025学年第二学期期末试卷
- 中国石油大学(北京)《社会保险理论与实务》2024-2025学年第二学期期末试卷
- 机关内部牵制稽核制度
- 机关单位内部培训制度
- 机械设备内部控制制度
- 林业局内部管理制度范本
- 某集团公司内部审计制度
- 检验项目内部管理制度
- 民宿内部管理制度模板
- 父女三人分配财产协议书范本
- 思想道德与法治(2023版)学习通超星期末考试答案章节答案2024年
- 高级合伙人协议书范本
- DZ/T 0454.3-2023 钛铁矿化学分析方法 第3部分:铝、钙、镁、钾、钠、钛、锰、铬、锶、钒和锌含量的测定 混合酸分解-电感耦合等离子体原子发射光谱法(正式版)
- 新教科版四年级下册科学全册精编教案教学设计(新课标版)
- 民族文化介绍水族简介
- 初唐四杰之绝处人生课件
- 机械制图与典型零部件测绘习题集AR版第2版郑雪梅课后参考答案
- 水土保持单位工程验收鉴定书
- GB/T 2-2016紧固件外螺纹零件末端
- 北师大版八年级数学(下)每日一题(春季版)上(包含答案)
评论
0/150
提交评论