看下篇之前,请先读这三篇文章:

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 源码分析的更多相关文章

  1. Android call setting 源码分析 (上)

    Android 的 call setting 是用来设定与 simcard 相关的一些内容的应用程序,如网络,PIN等等,算是AP层.这里就选择其中一个项从源代码读下去直到底层,看看大概的结构和流程. ...

  2. Android网络框架源码分析一---Volley

    转载自 http://www.jianshu.com/p/9e17727f31a1?utm_campaign=maleskine&utm_content=note&utm_medium ...

  3. OpenGL—Android 开机动画源码分析一

    .1 Android开机动画实现方式目前实现Android开机动画的方式主要是逐帧动画和OpenGL动画. ?逐帧动画 逐帧动画是一种常见的动画形式(Frame By Frame),其原理是在“连续的 ...

  4. Android分包MultiDex源码分析

    转载请标明出处:http://blog.csdn.net/shensky711/article/details/52845661 本文出自: [HansChen的博客] 概述 Android开发者应该 ...

  5. Android Doze模式源码分析

    科技的仿生学无处不在,给予我们启发.为了延长电池是使用寿命,google从蛇的冬眠中得到体会,那就是在某种情况下也让手机进入类冬眠的情况,从而引入了今天的主题,Doze模式,Doze中文是打盹儿,打盹 ...

  6. Android消息机制源码分析

    本篇主要介绍Android中的消息机制,即Looper.Handler是如何协同工作的: Looper:主要用来管理当前线程的消息队列,每个线程只能有一个Looper Handler:用来将消息(Me ...

  7. Android 开机动画源码分析

    Android系统在启动SystemServer进程时,通过两个阶段来启动系统所有服务,在第一阶段启动本地服务,如SurfaceFlinger,SensorService等,在第二阶段则启动一系列的J ...

  8. Android开源框架源码分析:Okhttp

    一 请求与响应流程 1.1 请求的封装 1.2 请求的发送 1.3 请求的调度 二 拦截器 2.1 RetryAndFollowUpInterceptor 2.2 BridgeInterceptor ...

  9. android hardware.c 源码分析

    android的jni通过ID来找hal模块,使用了hw_get_module()函数,本文就通过这个函数的来分析一下hal层的模块是如何匹配的. 首先要了解三个结构体hw_module_t,hw_m ...

随机推荐

  1. SQL Server 2008 R2中,变表的右键弹出菜单中的“选择前1000行”为“选择所有行”

    原文:SQL Server 2008 R2中,变表的右键弹出菜单中的"选择前1000行"为"选择所有行" 从SQL Server 2008开始,微软为了提高查询 ...

  2. 算法课上机实验(一个简单的GUI排序算法比较程序)

    (在家里的电脑上Linux Deepin截的图,屏幕大一点的话,deepin用着还挺不错的说) 这个应该是大二的算法课程上机实验时做的一个小程序,也是我的第一个GUI小程序,实现什么的都记不清了,只记 ...

  3. HDInsight-Hadoop现实(两)传感器数据分析

    HDInsight-Hadoop现实(两)传感器数据分析 简要 现在,含传感器非常个人和商用设备收集来自物理世界的信息.例如.大多数手机都有 GPS.健身器材可以跟踪的步骤,你去数,恒温控制器可以监视 ...

  4. jQuery获取Radio选择的Value值||两个select之间option的互相添加操作(jquery实现)

    jQuery获取Radio选择的Value值: 1. $("input[name='radio_name'][checked]").val();  //选择被选中Radio的Val ...

  5. 体验SubSonic

    体验SubSonic SubSonic简介 SubSonic配置 利用sonic.exe来生成代码 通过Substage来生成代码 简单操作示例 1.SubSonic简介 一句讲完就是:SubSoni ...

  6. 开源Asp.Net MVC网上商城BrnShop

    开源Asp.Net MVC网上商城BrnShop正式发布,提供源码下载 BrnShop网上商城是以Asp.Net mvc3为基础开发的网上商城,源代码完全开源(企业版的源代码目前还没有完全整理完成,一 ...

  7. Visual Studio 2013 上使用 Github

    教你如何在 Visual Studio 2013 上使用 Github 介绍 我承认越是能将事情变简单的工具我越会更多地使用它.尽管我已经知道了足够的命令来使用Github,但我宁愿它被集成到IDE中 ...

  8. ASP.NET Web API中的JSON和XML序列化

    ASP.NET Web API中的JSON和XML序列化 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok ...

  9. A Free , Fast and Small Automatic Formatter for C , C++ , C# , Java Source Codes

    A Free , Fast and Small Automatic Formatterfor C , C++ , C# , Java Source Codes Indenting source cod ...

  10. Python多线程的创建,相关函数和守护线程的理解

    一:多线程的创建 threading库创建线程有两种方式,函数式和继承式    1)函数式 def func(): print 'Starting' print 'Ending' t=threadin ...