Android 中添加 AT 命令流程
2010-03-05 06:28:00 来源:WEB开发网3。 hardware/ril/libril/ril_commands.h
在该文件的最后添加函数映射表, 形如{MARK, dispatch
解释如下:
首先第1个参数即为我们之前所定义的标识,即MARK。
第2个参数是下层的从数据流中解出数据的函数,这里要和上层所传下来的类型对应,例如上层传下来的是int数组,这里也得是dispathInts, 否则数据会出错
第3个参数是该函数所要返回的值, 这里的
4。 hardware/ril/reference-ril/reference-ril.c
这里就是发AT命令的核心文件,在static void onRequest (int request, void *data, size_t datalen, RIL_Token t)里面添加我们所要处理的AT命令函数。
照着别人写的, 自己加以修改就可以了。这里对2个发送AT命令的函数进行说明下:
一般来说, 都是这样的,对只返回成功与否的AT命令,我们用at_send_command()。 而对于有返回值的命令,我们用at_send_command_singleline()。
最后回到上层的RIL.java中,在processUnsolicited()或者processSolicited()里面添加返回值即可。
这里我们只选择其中一个来处理,在processUnsolicited()是处理主动上报类型的命令的,即不需要你发送命令去查询的类型。 而processSolicited()则是需要通过发送命令才会返回结果的类型。
大家只要看看那函数里面的值是如何返回的即可, 注意我们选用的返回函数,得和我们在ril_command.h里面所添加的函数映射表里的返回函数对应。
到了这里,AT命令的过程就添加结束, 命令的返回值就在调用Phone里面的函数所传入的Message中。 返回的是一个AsyncResult, 就是Message的obj成员 。
这里我们可以处理异常,一般可通过如下代码处理(假设传入的Message为msg):
AsyncResult ar = (AsyncResult)msg.obj
if (ar.exception != null) 处理异常
处理结果,就对ar.result进行处理。
更多精彩
赞助商链接