您的位置:首页 > 移动开发 > Android开发

Android电话系统rild-response analysis

2012-10-31 16:45 651 查看
本文将详细分析rild处理response的流程,包括一般的resonse和unsolicited response。


一、与request对应的response





1、Atchannel.c
启动readerloop,调用readline(),循环读取modem发来的消息


2、如果读到数据,调用processline()进行处理,首先判断是否是unsolicited消息,如果不是,则调用handlerFinalResponse()进行处理

3、handlerFinalResponse()调用pthread_cond_signal(),唤醒正在等待response的主线程

4、主线程开始继续运行,at_send_commandxx()函数返回,最终调用RIL_onRequestComplete()函数,处理response

5、通过pRI->pCI->responseFunction(p, response, responselen);调用每条request命令对应的response函数,对response数据打包,如:



6、最后调用sendResponse()将打包好的数据写入socket,发送给上层ril-java


[edit]二、unsolicited
response流程



1、与一般的response不同之处在于processline()的处理,如果是unsolicited消息,调用handleUnsolicited(line)进行处理;

2、再调用Reference-ril.c的onUnsolicited()方法对unsolicited消息进行解析,如下所示:



3、RIL_onUnsolicitedResponse(int unsolResponse, void *data,size_t datalen),处理response所有的unsolicited response 命令也都在ril.h中有定义,RIL_UNSOL_RESPONSE_xxx,从1000开始:
#define RIL_UNSOL_RESPONSE_BASE 1000
#define RIL_UNSOL_RESPONSE_NEW_SMS 1003
#define RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT 1004


4、所有的unsolResponse对应的处理函数都按顺序定义在hardware\ril\libril\ ril_unsol_commands.h



5、如顺序图所示:RIL_onUnsolicitedSendResponse()函数将根据RIL_UNSOL_RESPONSE_xxx命令,调用其相应的responsexx()方法,对response处理,对数据进行打包

6、与一般response处理流程一样,调用sendResponse()将打包好的数据写入socket,发送给上层ril-java
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: