第3章 RILJ运行机制
3.1 rilj运行机制
RILJ的java对象也称为RILJ,包括RILSender和RILReceiver。
Socilited:对之前RILJ发出的request进行回应的消息;
Unsolicited:modem主动上报的消息。(单方向:RILC--->RILJ)
RILJ运行机制,如下图:
总体流程:
Request请求消息类(solicited request)通过RILSender发送到RILC,底层处理完成后RILC将结果以请求类response返回类型消息(solicited response)发送给RILReceiver;
底层主动上报非请求类response消息(unSolicited response),RILC发送给RILReceiver,RILJ处理完成后,通过Tracker继续发起request请求类查询相关消息。
RILSender响应handleMessage消息,保存并发送solicited请求类RILRequest消息;
RILReceiver监听socket消息,处理RILD上报的消息,包括solicited请求类和unsolicited非请求类response返回消息。
3.1.1 RILJ接收Response消息处理流程
1)RILReceiver负责监听socket消息接收并处理RILC上报消息,现在RILReceiver的处理逻辑被封装在了jar包里面,其处理逻辑可以分为两大部分:
a. socket连接的维护过程;
b. 阻塞socket输入流,接收并处理RILC Response。
2)接收并处理RILC发出的Response消息
我看的处理消息是processResponse中进行处理的。
processResponse:
if (type == RadioResponseType.SOLICITED_ACK) {//判断消息的类型;
rr = mRequestList.get(serial):读取solicited response消息的序列号;
findAndRemoveRequestFromList(serial):根据序列号从mRequestList列表中获取RILRequest对象,获取到RILRequest对象后会将此对象从mRequestList列表移除。
3.1.2 总述
RILJ发起solicited消息请求时,将RILRequest请求对象保存到mRequestList列表;而RILC处理完成返回消息后,将此消息从mRequestList列表移除。说明:solicited request和solicited response消息在正常情况下是处于一一对应的关系的。也说明在发起ril请求时需要保存RILRequest对象。