配置Modem的命令radiooptions

来源:互联网 发布:广州电脑数据恢复 编辑:程序博客网 时间:2024/05/17 21:06
手机运行中,上层通过Ril.java的接口封装,借助RILD建立与Modem的通信,Ril.java也称为RILJ。Modem和RILD之间通信的信息分两种:unsolicited和solicited(solicited是征求的意思),前者是由modem主动上报的,诸如时区更新、通话状态、网络状态等消息,后者是RILJ端发请求并需要modem反馈的信息。 
另外,Android系统还提供了一个命令接口radiooptiongs,通过获取启动参数,利用socket与rild通信,可供调试时配置Modem参数。 

使用radiooptions来切换Radio状态, 它把传递过来的参数写入UNIX本地socket("/dev/socket/rild-debug"),不做其他操作。rild守护进程会监听该socket,当有数据到达时,会调用相应的回调函数,解析发送过来的命令,并转换为相应的AT命令写入AT接口设备。具体过程是:在radiooptions这一侧,先判断参数个数,然后逐个将它们写入socket。在守护进程侧,守护进程注册回调函数RIL_RadioFunctions时,会监听该套接字,当套接字上有连接请求时,就调用ril.cpp文件中的回调函数debugCallback,接受连接请求,获取得到的数据,然后调用issueLocalRequest函数发送请求,即向AT接口设备发送AT命令。

Radiooptiongs的源代码目录为hardware\ril\rild,该目录中包含了radiooptions和rild两个bin文件的源代码。这里的hardware\ril\rild\rild.rc定义了系统启动时rild自动运行的过程。

service ril-daemon /system/bin/rild
    class main
    socket rild stream 660 root radio
    socket sap_uim_socket1 stream 660 bluetooth bluetooth
    socket rild-debug stream 660 radio system
    user root
    group radio cache inet misc audio log readproc wakelock qcom_diag

上述socket rild stream 660 root radio会创建一个socket文件/dev/socket/rild,CS两端就通过这些socket建立通信。

radiooptions.c中描述该命令的使用方法

static void print_usage() {
    perror("Usage: radiooptions [option] [extra_socket_args]\n\
           0 - RADIO_RESET, \n\
           1 - RADIO_OFF, \n\
           2 - UNSOL_NETWORK_STATE_CHANGE, \n\
           3 - QXDM_ENABLE, \n\
           4 - QXDM_DISABLE, \n\
           5 - RADIO_ON, \n\
           6 apn- SETUP_PDP apn, \n\
           7 - DEACTIVE_PDP, \n\
           8 number - DIAL_CALL number, \n\
           9 - ANSWER_CALL, \n\
           10 - END_CALL \n\
          The argument before the last one must be SIM slot \n\
           0 - SIM1, \n\
           1 - SIM2, \n\
           2 - SIM3, \n\
           3 - SIM4, \n\
          The last argument must be modem-socket style \n\
           0 - one modem for one debug-socket, \n\
           1 - one modem for multiple debug socket \n");
}

比如ratiooptions 10 1 0为挂断SIM2的电话。