Android call setting 源码分析 从顶层到底层(下)
来源:互联网 发布:购买淘宝皇冠店铺 编辑:程序博客网 时间:2024/05/29 07:20
看下篇之前,请先读这三篇文章:
Android GSM驱动模块(rild)详细分析(一)基本架构及初始化
Android GSM驱动模块(rild)详细分析(二)request流程
Android GSM驱动模块(rild)详细分析(三)response流程
这几篇分析了android 的 GSM 也就是 RIL 部分的驱动。我这篇文章也就是建立在这个基础上的。
上篇最后说到 framework 最后通过 socket 给底层发信息来沟通,有一个守护进程来接收信息,这个进程就是 rild。具体的代码在/hardware/ril 下面。代码结构和流程的介绍上面3篇文章都已说明,这里只是通过call setting 中 caller ID 的设置来追踪代码的完整流程。
request:
framework 发送信息后, rild 进程先select 到,然后进入 ril.cpp中的 listenCallback,有数据就进入 processCommandsCallback 回调函数,再调用 processCommandBuffer,这里调用pRI->pCI->dispatchFunction 来最终处理数据。
pRI是一个CommandInfo结构,初始化的内容在 /hardware/ril/libril/ril_commands.h 中。上篇说到要处理的是 RIL_REQUEST_SET_CLIR,从{RIL_REQUEST_SET_CLIR, dispatchInts, responseVoid} 可知要调用的dispatchFunction 就是dispatchInts。在ril.cpp 中的 dispatchInts 函数最终是调用 s_callbacks.onRequest 来处理请求。s_callbacks 是一个RIL_RadioFunctions,它的初始化是在/hardware/ril/reference-ril/reference-ril.c:
static const RIL_RadioFunctions s_callbacks = { RIL_VERSION, onRequest, currentState, onSupports, onCancel, getVersion};
同一文件中的 onRequest 处理上层发来的信息,简单点的指令就直接调用at_send_command 发指令给 simcard,复杂点的就分发
到requestXXX函数来处理,不过最终还是调用at_send_command来写入 AT 指令。
at_send_command 相关的函数都在/hardware/ril/reference-ril/atchannel.c 中。at_send_command ->
at_send_command_full -> at_send_command_full_nolock -> writeline,这个writeline 最终调用 write 来把信息写到设备中。
对了,onRequest中是如何处理RIL_REQUEST_SET_CLIR的?
case RIL_REQUEST_SET_CLIR: //TO DO break;
...饿滴神,怎么来个TO DO...看样子是要等咱自己来写了(我说android手机咋那么少)。
指令写进去后要把结果传出来,这就是response的流程了。开头提到的文章写的很不错,这里也不赘述了(反正我要的代码又
没写...)。
- Android call setting 源码分析 从顶层到底层(下)
- Android call setting 源码分析 从顶层到底层(下)
- Android call setting 源码分析 从顶层到底层
- 【收藏】Android call setting 源码分析 从顶层到底层
- Android call setting 源码分析 从顶层到底层(上)
- Android call setting 源码分析 从顶层到底层(上)
- Android call setting 源码分析 (上)
- Android call setting 源码分析
- android 从顶层到底层 学习笔记--- framework架构
- android 从顶层到底层 学习笔记--- View树
- Android手动卸载usb从上层到底层源码分析
- 电池电量分析 从上层到底层
- Camera从上层APP到底层分析
- Camera从上层APP到底层分析
- Altium Designer批量把一些元件从顶层换到底层
- 从Android源码层分析acticity的启动顺序
- 从概念到底层技术,区块链一站式分析和汇总
- Android4.42-Setting源码分析之蓝牙模块Bluetooth(下)
- How To Generate An XML File As A Target Datastore Using ODI In An Integration Interface ? [ID 454268
- 发现Set<String> set = hashMap.keySet()的奥秘
- thinkphp model 命名注意
- Android call setting 源码分析 从顶层到底层(上)
- win7下安装SQL Server 2005 Express(收集整理)
- Android call setting 源码分析 从顶层到底层(下)
- VOS2009/VOS3000软交换系统的安装步骤
- Linux-2.6.32.2内核在mini2440上的移植(十七)---移植PWM控制蜂鸣器驱动
- pushviewctroller nil
- ACM进阶指南
- 计算器修正版
- 罗马数字 in wiki
- How does VCS support parameterized virtual interface?
- 同一进程中的线程可以共享哪些资源