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

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. 第4章1节《MonkeyRunner源码剖析》ADB协议及服务: ADB协议概览OVERVIEW.TXT翻译参考(原创)

    天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...

  2. 第1章2节《MonkeyRunner源码剖析》概述:边界(原创)

    天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...

  3. ios背景更新和下载

    ios背景更新和下载 by 吴雪莹 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NS ...

  4. Codeforces#277 C,E

    C. Palindrome Transformation time limit per test 1 second memory limit per test 256 megabytes input ...

  5. 在标记的HREF属性中javascript:alert(this.innerHTML)会怎么样?

    原文:在标记的HREF属性中javascript:alert(this.innerHTML)会怎么样? <a href="javascript:alert(this.innerHTML ...

  6. OpenSUSE 13.2安装Texlive2014+Texmaker+Lyx

    (1)首先下载安装Texlive2014 地址:http://mirrors.ustc.edu.cn/CTAN/systems/texlive/Images/ 或直接下载: wget http://m ...

  7. 使用jQuery热门功能实现

    非常多站点上都有返回顶部的效果,本文阐述怎样使用jquery实现返回顶部button. 首先须要在顶部加入例如以下html元素: <p id="back-to-top"> ...

  8. jQuery弹出窗口完整代码

    jQuery弹出窗口完整代码 效果体验:http://keleyi.com/keleyi/phtml/jqtexiao/1.htm 1 <!DOCTYPE html PUBLIC "- ...

  9. php中session和cookie

    cookie 每次请求页面的时候进行验证,如果用户信息存储在数据库中,每次都要执行一次数据库查询,给数据库造成多余的负担.cookie可以被修改的,所以安全系数太低. session是存储在服务器端面 ...

  10. Docker 01 Introduction

    Docker的组成: Docker Engine,一个轻量级.强大的开源容器虚拟化平台,使用包含了工作流的虚拟化技术,帮助用户建立.并容器化一个应用. Docker Hub,提供的一个SaaS服务,用 ...