RILD
来源:互联网 发布:六年级上册优化答案 编辑:程序博客网 时间:2024/05/21 10:45
四、LibRIL启动注册
联通RILJ与RILC
前面ReferenceRIL的init函数参数s_rilEnv是吧LibRIL的回调传入ReferenceRIL,这样ReferenceRIL就可以向LibRIL传递数据。
而init函数的返回值返回了自己的回调函数funcs,这样LibRIL就可以向ReferenceRIL传递数据。
这一步就是把funcs放入LibRIL中。
并且进行了一些端口参数的初始化操作。
4.1 RIL_register
从RIL_register(funcs)说起,看看它都干了什么.
前面说到funcs是ReferenceRIL的回调函数。
RIL_register的实现在ril.cpp中:
RIL_register (const RIL_RadioFunctions *callbacks) { ... //保存回调函数到本地 memcpy(&s_callbacks, callbacks, sizeof (RIL_RadioFunctions)); //初始化Socket参数,一张SIM卡对应一个参数,此结构体详细内容见4.3 for (i = 0; i < SIM_COUNT; i++) { s_ril_param_socket[i] = { (RIL_SOCKET_ID)(RIL_SOCKET_1+i), /* socket_id */ -1, /* Socket监听句柄*/ -1, /* Socket流句柄 */ PHONE_PROCESS, /* processName */ &s_commands_event[i], /* Socket流处理Event*/ &s_listen_event[i], /* Socket监听Event*/ processCommandsCallback, /* Socket流处理函数*/ NULL /* p_rs */ }; } //使用默认参数启动Socket监听 //注意这里RIL_SOCKET_1是一个枚举变量的首元素 for (i = 0; i < SIM_COUNT; i++) { startListen((RIL_SOCKET_ID)(RIL_SOCKET_1+i), &s_ril_param_socket[i]); }}static void startListen(RIL_SOCKET_ID socket_id, SocketListenParam* socket_listen_p) { //获取socket_name对应的RILJ与RILD连接Socket fdListen = android_get_control_socket(socket_name); //尝试连接此Socket,成功return 0 ret = listen(fdListen, 4); //连接失败则退出 if (ret < 0) { exit(-1); } //将可以连接成功的Socket FD放入Socket参数 socket_listen_p->fdListen = fdListen; //使用Socket FD构建Event //注意这里persist参数为false,此Event只能被激发一次,即使用它只能传递一次数据。 //在4.3.2可以看到,在读取完一次数据之后,又会重新添加Event ril_event_set (socket_listen_p->listen_event, fdListen, false, listenCallback, socket_listen_p); //将Event添加到EventLoop中 rilEventAddWakeup (socket_listen_p->listen_event);}
从以上代码得知,RIL_register函数主要干了两件事:
1. 将ReferenceRIL的回调函数保存。
2. 建立RILJ与RILC的Socket连接(通过fdListen),并将其放到了EventLoop中。
那么结合已经启动的EventLoop机制,此时RILJ和RILC的连接已经打通。
阅读全文
0 0
- rild
- rild
- RILD
- RILD
- RILD
- RILD
- RILD
- RILD
- RILD
- RILD
- rild 术语
- rild进程
- Introduction to Android RILD
- Rild层代码分析
- rild 源码分析
- Android RILD学习
- Android Rild 概述
- Android电话系统rild
- 暂存杂记
- 设计模式学习(一)之设计模式简介
- 【2017年中总结】——半饱
- 爬楼梯(递归)
- quartz学习2:quartz数据库集群-锁机制
- RILD
- 【PL/SQL】如何导出建表语句(不含数据)
- iOS 曾经上传照片到项目中,但是后面删除了,在真机调试中报错的解决办法
- 又一篇azkaban源码分析
- 一个按钮完成前台上传文件操作
- 关于HTML中input标签的新输入类型
- Postgresql常用命令
- 事务处理性能委员会TPC
- Visual Studio单元测试UnitTest