LibRIL 运行机制

RILJ 与 LibRIL 建立socket连接过程

1、Android 手机启动过程加载 Phone 应用, 同时构造 RILJ 对象,在RILJ 的构造方法中,主动发起 rild 的socket连接;

2、LibRIL 在ril_event_loop 函数中的 select 响应 s_listen_event 的RIL 请求;

3、通过ril_event->func 函数发起Callback 回调操作,而 s_listen_event->func 为 listenCallback 函数,该函数响应 RILJ 发起 rild 端口的 socket 请求操作;

4、listenCallback 函数主要逻辑:

      接受socket连接请求,建立与RILJ 的socket 连接;

      增加s_command_event 监听;


Solicited 消息的交互流程和处理机制

1、RILJ 与 LibRIL建立socket连接后,LibRIL 的watch_table 数组增加了一个事件监听: s_commands_event ;

2、RILJ 基于 rild 端口的socket 向 LibRIL 发起Solicited Request 消息请求时,s_commands_event通过 func 发起 RILJ 事件的Callback函数调用;

3、即调用 processCommandsCallback 函数处理RILJ 发起的 request请求;

       在ril_commands.h头文件中定义了107个RIL请求的处理函数和回调函数;

4、RILJ在发起RIL请求后,在这里通过RIL请求类型获取请求处理和返回处理的函数;

       比如发起拨号请求,LibRIL匹配CommandInfo的请求调用函数为dispatchDial,返回调用函数为responseVoid;当LibRIL发起pRI->pCI->dispatchFunction函数调用时,实际调用的是dispatchDial函数;

5、LibRIL请求调用函数,最终是通过Reference-RIL提供的s_callbacks发起onRequest函数的调用;

6、Reference-RIL接收到LibRIL的请求,根据请求类型转换成对应的AT命令,向modem发起AT指令;接着便会调用LibRIL提供的RIL_onRequestComplete函数,完成RIL请求处理完成后的回调;

7、RIL_onRequestComplete函数逻辑:

       responseFunction函数调用,完成不用返回的Parcel数据设置;

       sendResponse函数调用,通过socket连接发生Parcel数据,即RILJ接收此数据;

       同样发起拨号请求后,pRI->pCI->responseFunction函数调用,实际是responseCallList函数调用;




你可能感兴趣的:(android开发,LibRIL)