WEB开发网
开发学院手机开发Android 开发 Android GSM 驱动模块详细分析 阅读

Android GSM 驱动模块详细分析

 2010-03-01 16:07:00 来源:WEB开发网   
核心提示:|isFinalResponseError--->handleFinalResponse //失败,标准响应|get '>'--->send sms pdu //收到>符号,Android GSM 驱动模块详细分析(8),发送sms数据再继续等待响应|switch s_type-

|----isFinalResponseError--->handleFinalResponse //失败,标准响应

|----get '>'--->send sms pdu //收到>符号,发送sms数据再继续等待响应

|----switch s_type--->具体响应 //命令有具体的响应信息需要对应分析

我们这里主要关注handleUnsolicited自动上报(会调用到前面smsUnsolicite也调用的onUnsolicite),以及 switch s_type具体响应信息,另外具体响应需要handleFinalResponse这样的标准响应来最终完成。

1. onUnsolicite(主动上报响应)

static void onUnsolicited (const char *s, const char *sms_pdu);

短信的AT设计真是麻烦的主,以致这个函数的第二个参数完全就是为它准备的。

response 的主要的解析过程,由at_tok.c中的函数完成,其实就是字符串按块解析,具体的解析方式由每条命令或上报信息自行决定。这里不再详述,onUnsolicited只解析出头部(一般是+XXXX的形式),然后按类型决定下一步操作,操作为 RIL_onUnsolicitedResponse和RIL_requestTimedCallback两种。

a)RIL_onUnsolicitedResponse:

将 unsolicited的信息直接返回给上层。通过Parcel传递,将 RESPONSE_UNSOLICITED,unsolResponse(request号)写入Parcel先,然后通过 s_unsolResponses数组,查找到对应的responseFunction完成进一步的的解析,存入Parcel中。最终通过 sendResponse将其传递回原进程。流程:

sendResponse-->sendResponseRaw-->blockingWrite-->write to s_fdCommand(前面建立起来的和上层框架的socket连接)

这些步骤之后有一些唤醒系统等其他操作。不再详述。

b)RIL_requestTimedCallback:

通过event机制(参考文章二)实现的timer机制,回调对应的内部处理函数。通过internalRequestTimedCallback将回调添加到event循环,最终完成callback上挂的函数的回调。比如pollSIMState,onPDPContextListChanged等回调, 不用返回上层, 内部处理就可以。

2. switch s_type(命令的具体响应)及handleFinalResponse(标准响应)

命令的类型(s_type)在send command的时候设置(参考文章二),有NO_RESULT,NUMERIC,SINGLELINE,MULTILINE几种,供不同的AT使用。比如AT+CSQ是singleline, 返回at+csq=xx,xx,再加一行OK,比如一些设置命令,就是no_result, 只有一行OK或ERROR。

上一页  3 4 5 6 7 8 9  下一页

Tags:Android GSM 驱动

编辑录入:coldstar [复制链接] [打 印]
赞助商链接