frameworks/base/telephony/java/com/android/internal/telephony/Phone.java中添加所要发AT命令的上层函数.
  
    Phone是个接口,因此,添加完后,得在实现Phone接口的java类里面实现这个方法,实现Phone的类即GSMPhone.java
  
    位于
    frameworks/base/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java
    在这里,调用CommandInterface里面的方法, 因此, 我们还得在CommandInterface里面把我们要增加的方法添加进去
  
    同样的,CommandInterface也是个接口,而实现这个接口的类有2个:
    1. frameworks/base/telephony/java/com/android/internal/telephony/gsm/RIL.java
    2. frameworks/base/telephony/java/com/android/internal/telephony/test/SimulatedCommands.java
    其中第2个是在模拟器里面测试用的, 我们只需要在里面把方法添加进去,然后调用个resultSuccess或者umimplement都可以.
  
    而第1个才是真正到达GSM驱动的类.
    所以,我们得在RIL.java中,实现上层与下层的通信.
    在RIL.java的方法里面,只需要定义好你所需要发送AT命令的一个标识MARK(下面还会提到), 再把RilRequest类里面的Parcel成员mp赋值, 然后发送出去即可.
    赋给mp的值,即为我们需要发送到下层去处理的值, 例如传个数组下去, 一般都先把长度写进去, 其次再把成员依次写入.
  
    接下来,便是下层的添加过程.
  
    1. hardware/ril/include/telephony/ril.h
    在此文件中,添加一个标识你所要处理的AT命令的宏, 即上面所说到的MARK, 注意不要和别的宏发生冲突.
    注意: 这里的MARK必须定义在最后面, 不然会带来不必要的麻烦, 理由如下:
    在ril.h中定义了每个关键字对应的值,同时在ril_command.h有张映射表
    而且是按ril.h中的顺序映射的,大家可以看作是数组的下标.
    这里要一一对应,如果从中间插入,将会导致后面的字段映射不对.
    除非把ril.h中关键字对应的值修改,但这样会浪费比较多的时间.
  
    2. hardware/ril/libril/ril.cpp
    在该文件的const char *requestToString(int request)函数里面添加消息映射字符串.
    3. hardware/ril/libril/ril_commands.h
  
    在该文件的最后添加函数映射表, 形如{MARK, dispatch, response}
    解释如下:
    首先第1个参数即为我们之前所定义的标识,即MARK.
    第2个参数是下层的从数据流中解出数据的函数,这里要和上层所传下来的类型对应,例如上层传下来的是int数组,这里也得是dispathInts, 否则数据会出错
    第3个参数是该函数所要返回的值, 这里的和第2个参数的一样.
  
    4. hardware/ril/reference-ril/reference-ril.c
    这里就是发AT命令的核心文件,在static void onRequest (int request, void *data, size_t datalen, RIL_Token t)里面添加我们所要处理的

更多相关文章

  1. 如何添加Android返回键的退出功能
  2. Android(安卓)init.rc BOOTCLASSPATH
  3. 通过AndroidTestCase来进行android 单元测试
  4. android APP 获得system权限
  5. Android,View设置margin
  6. 2011.09.13(3)——— android 添加快捷方式并且图标上添加数字
  7. 去掉所有Activity界面标题栏、强制横屏竖屏
  8. android 完美退出所有Activity的demo
  9. Android(安卓)实现首次开机启动wizardsetup程序

随机推荐

  1. FileProvider
  2. [置顶] Android(安卓)SimpleAdapter,Simpl
  3. Android(安卓)IBinder机制简单介绍
  4. android真机调试 INSTALL_FAILED_MEDIA_U
  5. mac下启动adb并安装apk
  6. 转:iPhone Android(安卓)Web开发(概要)
  7. 录音权限(Android(安卓)8.0)
  8. Android(安卓)程式开发:(十一)选择控件 ——
  9. Mms模块ConversationList流程分析(1)
  10. 解决Intellij Idea,Android(安卓)Stuido的