Ril分析四——来自网络端事件流程

news/2024/7/4 1:38:47

从modem传递来的网络端事件,通过readLoop线程处理:

readLoop读取数据过程:

static void *readerLoop(void *arg)
{
    for (;;) {
        //从与modem通信设备端口读取数据
        line = readline();
        if (line == NULL) {
            break;
        }
        //处理数据
        processLine(line);
    }
    onReaderClosed();
    return NULL;
}

static void processLine(const char *line)
{
    if (sp_response == NULL) {
       //来自网络端事件
        handleUnsolicited(line);
    } else if (isFinalResponseSuccess(line)) {
        //客户端请求处理返回
        sp_response->success = 1;
        handleFinalResponse(line);
    } 
}

网络端事件处理过程:

static void handleUnsolicited(const char *line)
{
    //onUnsolicited
    if (s_unsolHandler != NULL) {
        s_unsolHandler(line, NULL);
    }
}

static void onUnsolicited (const char *s, const char *sms_pdu)
{
    //初始化传入的ril.cpp中RIL_onUnsolicitedResponse函数
    RIL_onUnsolicitedResponse (
            RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED,
            NULL, 0);
}


Void RIL_onUnsolicitedSendResponse(int unsolResponse, void *data,
                                size_t datalen, int client_id)
{
    unsolResponseIndex = unsolResponse - RIL_UNSOL_RESPONSE_BASE;
    appendPrintBuf("[UNSL]< %s", requestToString(unsolResponse));
    Parcel p;
    p.writeInt32 (RESPONSE_UNSOLICITED);
    p.writeInt32 (unsolResponse);
    //调用ril中网络端请求的响应函数 
    ret = s_unsolResponses[unsolResponseIndex]
                .responseFunction(p, data, datalen);

    //将数据传递给响应的设备
    ret = sendResponse(p, client_id);
    return;
}

同样以数组映射表形式存储网络端事件响应请求接口:

typedef struct {
        int requestNumber;
        int (*responseFunction) (Parcel &p, void *response, 
                    size_t responselen);
        WakeType wakeType;
    } UnsolResponseInfo;

static UnsolResponseInfo s_unsolResponses[] = {
  #include "ril_unsol_commands.h"
};
ril_unsol_commands.h:
{RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED, responseVoid, WAKE_PARTIAL},
    {RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED, responseVoid, WAKE_PARTIAL},
    {RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED, responseVoid, WAKE_PARTIAL},
    {RIL_UNSOL_RESPONSE_NEW_SMS, responseString, WAKE_PARTIAL},
……

http://www.niftyadmin.cn/n/4778818.html

相关文章

最欠扁的脑筋急转弯

最欠扁的脑筋急转弯 提问&#xff1a;茉莉花、太阳花、玫瑰花哪一朵花最没力&#xff1f;       回答&#xff1a;茉莉花。       原因&#xff1a;好一朵美丽(没力)的茉莉花。       提问&#xff1a;猩猩最讨厌什么线&#xff1f;       回答&#x…

微软BI 之SSRS 系列 - 使用文档结构导航报表元素 Document Map

在 SSRS 中也有类似于 Word 文档中的那种导航的效果 - 左侧部分&#xff0c;可以通过导航地图快速的定位到国家下的省份或者城市&#xff0c;并且这种层次结构是由在创建行分组时定义的。 比如说下面的这个例子中&#xff0c;我分了3个行组 - 第一层是 Country, 第二层和第三层…

如何设置select下拉列表框的跳转超级链接

如何设置select下拉列表框的跳转超级链接 今天在制作网站的时候&#xff0c;选择下拉列表进行典型客户的超级链接&#xff0c;我的代码如下&#xff1a; <SELECT size"1"> <OPTION selected>&#xff0d;请选择站点&#xff0d;</OPTION>…

window bbl 开发环境搭建

一&#xff1a;安装maven 1、 下载地址 &#xff1a;http://maven.apache.org/download.html 2、 解压缩后&#xff0c;设置环境变量 系统变量M2_HOMED:\java\apache-maven-2.2.1 ,path 加变量%M2_HOME%\bin 。 备注&#xff1a;千万记得版本用 2.2.1的&#xff0c;用 3.0.4的会…

第28周四

晚上在家&#xff0c;不想去别人家吃饭就在自己屋里将就吃点&#xff0c;今天提前下班&#xff0c;感觉自己效率还可以&#xff0c;一个是调试解决了Delphi相关的问题&#xff0c;一个是协调验证了一个JAVA方面的问题&#xff0c;由于数据库环境问题导致我今天的在测试验证时走…

#HTTP协议学习# (十一)理解HTTP幂等性

在httpcomponent 文档中看到如下段落&#xff1a; 1.4.1. HTTP transport safety It is important to understand that the HTTP protocol is not well suited to all types of applications. HTTP is a simple request/response oriented protocol which was initially design…

iPhone 和Android应用,特殊的链接:打电话,短信,email;

http://ice-k.iteye.com/blog/1426526 下面的这篇文章主要是说&#xff0c;网页中的链接如何写&#xff0c;可以激活电话的功能。 例如&#xff0c;页面中展示的是一个电话号码&#xff0c;当用户在手机浏览器里面点击这个电话号码的时候&#xff0c;手机会弹出拨号的面板&…

cocos2dx之粒子系统

粒子系统一、介绍粒子系统指的是一个使用大量很小的精灵或者其他的一些绘制对象模拟一些模糊效果。使用传统的绘制技术很难实现。它们经常被用到一些混乱系统&#xff0c;自然现象以及一些化学反应动画效果中。二、点跟矩形在之前版本的cocos2dx中&#xff0c;有两种类型的粒子…