RILD - 第六章 - 其他比较重要的结构体

六、几个重要结构体

6.1 RILChannelCtx

封装了AT通道的上下文信息

typedef struct RILChannelCtx {
    const char* myName;
    RILChannelId id;
    pthread_t tid_reader;
    pthread_t tid_myProxy;
    int fd;
    ATUnsolHandler unsolHandler;
    int readCount;

    pthread_mutex_t commandmutex;
    pthread_cond_t commandcond;//EventLoop中阻塞的线程

    pthread_mutex_t* p_channelMutex;

    ATCommandType type;
    const char *responsePrefix;
    const char *smsPDU;
    ATResponse *p_response;//封装返回信息的结构体

    int readerClosed;

    char *ATBufferCur;
    char ATBuffer[MAX_AT_RESPONSE+1];
    int pendingRequest;
} RILChannelCtx;

6.2 SocketListenParam

SocketListenParam是一个比较重要的结构体,从它的名字知道,其封装了RILJ与RILC的连接信息。

关于SocketListenParam的结构定义:

static SocketListenParam s_ril_param_socket[SIM_COUNT];
typedef struct SocketListenParam {
    RIL_SOCKET_ID socket_id;
    int fdListen;//监听RILJ信息的Socket句柄
    int fdCommand;// accept返回的进行流操作的套接字
    char* processName;
    struct ril_event* commands_event;//fdListen对应Event
    struct ril_event* listen_event;//fdCommand对应Event
    void (*processCommandsCallback)(int fd, short flags, void *param);//Event 回调函数
    RecordStream *p_rs;//回调函数参数,这里是SocketListenParam变量
    RIL_SOCKET_TYPE type;
} SocketListenParam;

6.3 CommandInfo

CommandInfo结构体定义为:

struct CommandInfo {
    int requestNumber;//int类型的请求码
    void (*dispatchFunction) (Parcel &p, struct RequestInfo *pRI);//分发函数函数指针
    int(*responseFunction) (Parcel &p, void *response, size_t responselen);//返回函数函数指针
} ;

既然include了那么ril_commands.h文件,那么看看此文件:

//@ril_commands.h
{RIL_REQUEST_GET_SIM_STATUS, dispatchVoid, responseSimStatus},
{RIL_REQUEST_ENTER_SIM_PIN, dispatchStrings, responseInts},
...
{RIL_REQUEST_HANGUP, dispatchInts, responseVoid},

主要使用CommandInfo 的s_commands变量定义:

CommandInfo s_commands[] = {
#include "telephony/ril_commands.h"
};

其中定义了不同请求的请求码及其对应的dispatchFunction和responseFunction。
比如,获取Sim Status的请求吗为RIL_REQUEST_GET_SIM_STATUS,其宏定义为1,使用dispatchVoid分发,使用responseSimStatus返回结果。

6.4 RequestInfo

RequestInfo顾名思义,其包含了当前请求的所有信息,结构体如下:

typedef struct RequestInfo {
    RIL_Client_Type *client; //MUST in the beginning
    int32_t token;      //this is not RIL_Token //令牌
    CommandInfo *pCI; //请求处理方式信息
    struct RequestInfo *p_next;//链表的下一个节点
    char cancelled;
    char local;         // responses to local commands do not go back to command process
    RIL_SOCKET_ID socket_id;
    int wasAckSent;    // Indicates whether an ack was sent earlier
    RILChannelId cid;    // For command dispatch after onRequest()
} RequestInfo;

6.5 UnsolResponseInfo

UnsolResponseInfo定义了针对于UNSOL消息的处理方式
例如:
{RIL_LOCAL_GSM_UNSOL_CARD_TYPE_NOTIFY, responseString, WAKE_PARTIAL}

其结构体定义为:

typedef struct {
    int requestNumber;//内容标识符
    int (*responseFunction) (Parcel &p, void *response, size_t responselen);//处理函数
    WakeType wakeType;//类型
} UnsolResponseInfo;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值