Android_中添加_AT_命令流程.doc
### Android中添加AT命令流程详解 #### 一、概述 在Android系统中,AT命令(AT Commands)是一种用于控制调制解调器(Modem)的标准命令集,它被广泛应用于移动通信领域,如拨打电话、发送短信等。本文将详细介绍如何在Android系统中添加自定义的AT命令,并实现其功能。 #### 二、准备工作 为了更好地理解本文内容,读者需具备以下基础知识: 1. **RIL(Radio Interface Layer)**:RIL是Android系统中连接高层应用程序与底层硬件设备(如基带处理器)的关键组件。它负责处理来自应用层的命令请求,并将其传递给底层硬件,同时也负责接收硬件返回的结果或状态信息。 2. **Java编程基础**:大部分Android应用层代码都是用Java编写的,因此熟悉Java编程对于理解本文内容至关重要。 #### 三、上层实现步骤 1. **添加上层函数**: - 在`frameworks/base/telephony/java/com/android/internal/telephony/Phone.java`文件中,添加一个发送自定义AT命令的函数。 - `Phone`是一个接口,因此需要在实现此接口的具体类中实现上述函数。具体来说,可以在`frameworks/base/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java`文件中实现该方法。 2. **实现方法**: - 在`GSMPhone.java`文件中,通过调用`CommandInterface`接口中的方法来实现自定义AT命令的功能。 - 需要在`CommandInterface`接口中添加相应的抽象方法声明,然后在实现该接口的类中实现这些方法。 - `frameworks/base/telephony/java/com/android/internal/telephony/gsm/RIL.java`:这是真正实现AT命令与硬件通信的地方。 - `frameworks/base/telephony/java/com/android/internal/telephony/test/SimulatedCommands.java`:仅用于模拟器环境下的测试,无需深入关注。 3. **实现上下层通信**: - 在`RIL.java`中实现具体的AT命令逻辑。关键步骤包括: - 定义一个唯一的标识符(MARK)来表示新添加的AT命令。 - 使用`RilRequest`类的成员变量`mp`来封装需要发送的数据,例如将整型数组打包成`Parcel`对象。 - 调用相应的方法发送封装好的数据到硬件层。 #### 四、下层实现步骤 1. **添加宏定义**: - 在`hardware/ril/include/telephony/ril.h`文件中添加一个新的宏定义,用于标识自定义的AT命令。确保该宏定义与其他宏不冲突。 - 注意:为了保持映射关系正确,新的宏定义应该放在所有现有宏定义的末尾。 2. **消息映射字符串**: - 在`hardware/ril/libril/ril.cpp`文件中的`const char* requestToString(int request)`函数里,添加对应的新命令的字符串映射。 3. **函数映射表**: - 在`hardware/ril/libril/ril_commands.h`文件中添加一个新的条目到函数映射表中。格式为:`{MARK, dispatch<type>, response<type>}`。 - 第一个参数是之前定义的标识符(MARK)。 - 第二个参数是指定的解析数据的函数。 - 第三个参数是指定的响应数据的函数。 4. **核心实现**: - 在`hardware/ril/reference-ril/reference-ril.c`文件中,根据新命令的需求编写具体的逻辑处理代码。这通常涉及编写或修改`static void onRequest(int request, void *data, size_t datalen, RIL_Token *token)`函数。 - 对于只返回成功与否的命令,可以使用`at_send_command()`函数。 - 对于有返回值的命令,应使用`at_send_command_singleline()`函数。 #### 五、处理返回值 - 在上层的`RIL.java`文件中,需要在`processUnsolicited()`或`processSolicited()`方法中处理硬件返回的数据。根据实际需求选择其中一个方法来处理。 #### 六、总结 通过以上步骤,我们可以成功地在Android系统中添加并实现自定义的AT命令。需要注意的是,整个过程中涉及到多个层次的代码实现,从上层的Java代码到底层的C/C++代码,每一个步骤都需要仔细考虑和实现。此外,为了保证系统的稳定性和兼容性,还需要对新增加的功能进行充分的测试。
- 粉丝: 20
- 资源: 10
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助