文档章节

关于RIL层一条命令的轮回转世

HouWeiGui
 HouWeiGui
发布于 2017/01/04 20:01
字数 383
阅读 26
收藏 0

1、RIL_commands.h中定义了许多命令ID,处理函数和响应函数的三列表项

{RIL_REQUEST_GET_SIM_STATUS, dispatchVoid, responseSimStatus},

首先RIL_commands.h被用来初始化RIL.cpp中的一个全局变量s_commands,其类型如下

typedef struct {
    int requestNumber;
    void (*dispatchFunction) (Parcel &p, struct RequestInfo *pRI);
    int(*responseFunction) (Parcel &p, void *response, size_t responselen);
} CommandInfo;

那么从监视到socket文件发生变化开始

ril_event_loop()->firePending()->遍历一个叫pendingList的链表,执行其中的ev的callback函数,对于

s_listen_event的回调函数为listenCallback(这个回调函数指向的赋值再startListen函数中)

listenCallback ->

processCommandsCallback->

processCommandBuffer->根据requestNumber匹配对应的处理函数

dispatchVoid ->CALL_ONREQUEST

看宏定义#define CALL_ONREQUEST(a, b, c, d, e) s_callbacks.onRequest((a), (b), (c), (d), (e))

而s_callbacks 再rild初始化中调用RIL_register时被赋值为reference-ril库中传递过来的用来回调结构指针func,所以至此一条消息从接到RILJ的请求到调用第三方库提供的发送接口完成。

我们知道libRIL与厂商第三方库reference-ril的数据交互是通过动态引入库实现的,两者间是基于函数调用进行通信的,那么基于异步消息的方式且出于维护第三方的权益的方式考虑,两者之间的必然会有许多的函数回调方式。其中两者的回调接口分别为funcs和static struct RIL_Env s_rilEnv = {
    RIL_onRequestComplete,
    RIL_onUnsolicitedResponse,
    RIL_requestTimedCallback
};,两者的类型依次为typedef struct {
    int version;        /* set to RIL_VERSION */
    RIL_RequestFunc onRequest;
    RIL_RadioStateRequest onStateRequest;
    RIL_Supports supports;
    RIL_Cancel onCancel;
    RIL_GetVersion getVersion;
} RIL_RadioFunctions; 和RIL_ENV

© 著作权归作者所有

HouWeiGui
粉丝 4
博文 42
码字总数 52381
作品 0
深圳
程序员
私信 提问
大话functional编程语言

大话functional编程语言 今天计算机已经被广泛应用于处理繁杂的商业事务和海量的用户数据。人们也许遗忘了,它最初是被用来帮助进行数值计算,简单说,用来求解数学问题的。 所以说functiona...

Zhe Hu
2018/11/26
0
0
Android的电话功能介绍

第一部分 电话功能概述   Android的Radio Interface Layer (RIL)提供了电话服务和的radio硬件之间的抽象层。   Radio Interface Layer RIL(Radio Interface Layer)负责数据的可靠传输、A...

JavaGG
2009/09/14
1K
0
RIL(Radio Interface Layer)

RIL(Radio Interface Layer)  目前的智能机在硬件上多采用双cpu的架构,一个是基带处理器,主要处理数字信号、语音信号的编码解码以及GSM通信协议,另一个是应用处理器,运行操作系统和各种...

whoisliang
2018/02/12
54
1
Android的电话功能介绍

第一部分 电话功能概述 Android的Radio Interface Layer (RIL)提供了电话服务和的radio硬件之间的抽象层。 Radio Interface Layer RIL(Radio Interface Layer)负责数据的可靠传输、AT命令的发...

caolibin
2010/02/21
517
0
Android的电话功能介绍

Android的电话功能介绍 第一部分 电话功能概述 Android的Radio Interface Layer (RIL)提供了电话服务和的radio硬件之间的抽象层。 Radio Interface Layer RIL(Radio Interface Layer)负责数据...

迷糊
2009/10/10
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud Sleuth 整合 feign 源码分析之修改span名称

org.springframework.cloud.sleuth.instrument.web.client.feign.TraceFeignClient 包括创建span一些参数 需求场景: 由于项目中有restful 风格的http请求,sleuth feign 的span名称默认是u...

xiaomin0322
27分钟前
4
0
Less 延伸

extend 是一个 Less 伪类,它通过使用 :extend 选择器在一个选择器中扩展其他选择器样式。 扩展语法 扩展可以是附加到选择器,也可以是集中放置在规则,看上去像是带有选择器参数的可选伪类,...

凌兮洛
27分钟前
4
0
RedHat 7.0系统中安装mysql 5.7.22

在安装之前,首先要查看的是,你的系统中有没有已经安装过的情况。键入rpm -qa|grep mysql,如果无任何显示,则表示没有安装过相关组件,如果有,则根据显示出来的名字,键入rpm -e --nodeps...

最菜最菜之小菜鸟
33分钟前
4
0
RPA:企业信息孤岛的“克星”

为了降本增效,近来世界范围内掀起一股流程优化的热潮,转型升级成为众多企业时刻挂在嘴边的热词。不过在企业数字化转型的过程中,信息孤岛的出现,往往成为了企业升级的绊脚石。 信息孤岛:...

UiBot
33分钟前
4
0
我的测试

我的测试

daiison
33分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部