Radio开发新功能

来源:互联网 发布:网络运维绩效考核 编辑:程序博客网 时间:2024/06/05 09:20

        对于Vendor,系统方案提供商,有时候会需要增加AT指令,实现新功能,这时候需要对Ril层增加对底层Modem进行适配(仅对需要消息上报的类型),本人知识有限,只了解到了Ril.java,未对往下的底层有涉及,理解有误请指出。

        1、首先要在frameworks/base/telephony/java/com/android/internal/telephony/RILConstants.java里面增加对于的消息上报类型如:int RIL_REQUEST_GSM_BROADCAST_ACTIVATION = 91;

         2、当需要对功能进行开关功能设置时,需要在frameworks/opt/telephony/src/java/com/android/internal/telephony/CommandsInterface.java增加相应的注册与取消注册的方法,如:setOn......(), unSetOn.....(),或者registerFor.....(),unRegisterFor......()抽象方法来实现

         3、在Ril.java中实现CommandsInterface.java的定义抽象方法;

         4、这时候分为两个流程:一个是对数据上报的流程,一个是上层调用注册下发指令;


          数据流上报:

          1/  对Ril.java中的processResponse (Parcel p)分类进行处理(processUnsolicited是处理返回的response,processSolicited是处理向下底层发送的Request),如对Case:RIL_REQUEST_GSM_BROADCAST_ACTIVATION进行读取底层的上报数据,并通过notifyRegistrant()通知注册者;

          2/  src/java/com/android/internal/telephony/WakeLockStateMachine.java进行事件类型定义,增加WaitingState extends State进行等候消息,同时在processMessage()方法里进行处理;

3/ 在上一步的调用具体的handler方法时就开始进行到了相应的Handler中去处理,

比如CB中的frameworks/opt/telephony/src/java/com/android/internal/telephony/gsm/

GsmCellBroadcastHandler.java中进行相应的处理,对于比较复杂的交互情况如短彩信,

这时候在这一层会有比较多的Tracker进行记录,比较繁琐;


  指令下发:

1/对于短彩信方面的,在Ril.java之上的一层是IccSmsInterfaceManager.java,再往上是UiccSmsController.java

(这作为一个服务,通过AIDL向上层进行提供接口,它的代理接口为SmsManager.java,一般通过这个类向上提供,

APP也可以直接使用AIDL桥接到Uicc去),就是由此上层一层一层调用到地下去进行发送指令。


所以对于这种类是的开发功能比较复杂,需要Modem,RIL,Framework和APP层多层的交互,

一般厂商没有这么大的实力进行修改,只有系统方案提供商有能力进行修改,只能作为知识的扩展。

0 0
原创粉丝点击