關於RIL層一條命令的輪迴轉世

一、RIL_commands.h中定義了許多命令ID,處理函數和響應函數的三列表項異步

{RIL_REQUEST_GET_SIM_STATUS, dispatchVoid, responseSimStatus},socket

首先RIL_commands.h被用來初始化RIL.cpp中的一個全局變量s_commands,其類型以下函數

typedef struct {
    int requestNumber;
    void (*dispatchFunction) (Parcel &p, struct RequestInfo *pRI);
    int(*responseFunction) (Parcel &p, void *response, size_t responselen);
} CommandInfo;oop

那麼從監視到socket文件發生變化開始spa

ril_event_loop()->firePending()->遍歷一個叫pendingList的鏈表,執行其中的ev的callback函數,對於指針

s_listen_event的回調函數爲listenCallback(這個回調函數指向的賦值再startListen函數中)接口

listenCallback ->ci

processCommandsCallback->get

processCommandBuffer->根據requestNumber匹配對應的處理函數回調函數

dispatchVoid ->CALL_ONREQUEST

看宏定義#define CALL_ONREQUEST(a, b, c, d, e) s_callbacks.onRequest((a), (b), (c), (d), (e))

而s_callbacks 再rild初始化中調用RIL_register時被賦值爲reference-ril庫中傳遞過來的用來回調結構指針func,因此至此一條消息從接到RILJ的請求到調用第三方庫提供的發送接口完成。

咱們知道libRIL與廠商第三方庫reference-ril的數據交互是經過動態引入庫實現的,二者間是基於函數調用進行通訊的,那麼基於異步消息的方式且出於維護第三方的權益的方式考慮,二者之間的必然會有許多的函數回調方式。其中二者的回調接口分別爲funcs和static struct RIL_Env s_rilEnv = {     RIL_onRequestComplete,     RIL_onUnsolicitedResponse,     RIL_requestTimedCallback };,二者的類型依次爲typedef struct {     int version;        /* set to RIL_VERSION */     RIL_RequestFunc onRequest;     RIL_RadioStateRequest onStateRequest;     RIL_Supports supports;     RIL_Cancel onCancel;     RIL_GetVersion getVersion; } RIL_RadioFunctions; 和RIL_ENV

相關文章
相關標籤/搜索