八、AT命令
不同手机厂家的AT命令集都不一样,而在Android源代码中只实现了GSM27.007标准定义的Telephony基本功能。因此,在Android手机平台的定制过程中,免不了要修改或是增加AT指令。
8.1 AT LOG
不单是RILC可以向Modem发起AT命令,在ReferenceRIL中也会接收到Modem发出的AT命令,如何区分是谁给谁发送的命令,可以通过Radio Log来看出来。
如:
AT > ATE0Q0V1 //RIL发送给Modem的AT命令
AT < OK //Modem发送给RIL的AT命令,这里可以理解为SOL请求返回。
AT < RING //Modem主动发送给RIL的AT命令,接收来电请求,可理解为UNSOL的消息。
即”>”是RIL发给Modem,”<”是Modem发给RIL
8.2 新增AT命令的步骤
一条AT命令,是自上而下都需要支持的,包括RILJ,RILD,Modem。
此处只说明了在RILJ和RILD的修改,对于在Modem中的相应修改,后续在Modem的笔记中再讨论。
新增AT命令要修改的内容较多,按照步骤来可以减少失误。
Step1:确认Modem中对AT命令的支持情况,明确AT命令的格式,参数以及执行方向。
Step2:根据AT命令的执行方向,定义RIL中Solicited或UnSolicited消息类型,可在以及定义的最大消息类型后足部增加其RIL消息定义,主要修改RILJ层的RILConstants.java和RILC层的ril.h(MTK平台为mtk_ril.h)。
Step3: 修改framework
- 对于Solicited消息:
主要集中在修改processSolicited()方法的逻辑以及增加发起Solicited请求的方法。可参考getIMSI()。 - 对于UnSolicited消息:
修改processUnsolicited()方法的逻辑,可参考SimStateChange的UNSOL消息。
- 对于Solicited消息:
Step4:修改RILC
- 对于Solicited消息:
在ril_commands.h(data_to_parcel_ril_commands.h, rfx_ril_commands.h)中添加CommandInfo信息,并实现对于函数的逻辑处理。 - 对于UnSolicited消息:
在ril_unsol_command.h中增加UnSolicited消息低Response处理函数和电源管理策略定义,并实现对于函数的逻辑处理。
- 对于Solicited消息:
Step5:修改ReferenceRIL
- 对于Solicited消息:
新增RIL请求的处理逻辑分支,将RIL请求转换成已修改或新定义的AT命令发给Modem。
- 对于Solicited消息: