RIL 初始化流程:

F08B0B591417E55BCFE4A91062B4D9  


1.RILD 起動 RIL OBJ(ril.cpp) 中 RIL_StartLoop,其 New Thread 執行 RIL Event (ril_event.cpp) ::ril_event_loop() 為 for(;;) loop 等待處理 event list 中的訊息(event)
2.RIL daemon(RILD) 載入 Libreferece-ril.so
3.RILD 透過 Dynaminc Loader(DL) dlsym() 取得 Librerfernce-ril.so 中的 RIL_Init function address(*rilInit).
4.RILD 呼叫 (*rilInit) 取得 Reference-RIL callback function table[].

 

callback function table[] — .RIL_VERSION,

 

.onRequest(),

 

.currentState(),

 

.onSupport(),

 

.onCancel(),

 

.getVersion(),
1.RILD 透過 RIL OBJ :: RIL_Register() 將 callback function table[] 儲存在 RIL OBJ. 並且取得 RIL socket-s_fdListen,等待連線。

 

<<缺圖說明>>
RIL 事件處理流程:

 

1.RIL OBJ :: listenCallback 檢查是否有從 Phone process 的連線。
2.一旦確認為 Phone Process 連線,開取讀取 command,將其 Command Data 及 handle function (RIL :: processCommandsCallback) 設定至 RIL Event,並交至 Event Loop 處理。
3.RIL Event :: ril_event_loop() 檢查是否有訊息待處理。會觸發 RIL Event :: firePending() ,其中會呼叫 Event Element 中的 handle function。[該步驟會重複執行至所有訊息被處理結束。]
4.通 常 handle function 都被設定為 RIL :: processCommandsCallback(),結束 Stream data 後,即呼叫 RIL OBJ :: processCommandBuffer() 。
5.RIL OBJ :: processCommandBuffer() 將依上層的 Request Number 利用 s_command[] table 轉換成相對應之 Request data 。
6.並且呼叫 s_command[] command 已定義的 dispatchFunction()。

 

dispatchFunction() 大致分類為:void, string, strings, ints, smsWrite, Dail, SIM_IO, CallForward, Raw, CdmaSMS, CdmaSMSAck, GSMBrSmsCnf, CdmaBrSmsCnf, RilCdmaSMSWrite 這些類別。
1.dispatchFunction 最終都會呼叫 Ref-RIL(Reference-RIL) callback function table[].onRequest() 並且代入 Request Number。
2.Ref-RIL :: on Request() 會依 Requset Number 執行相對應之工作。
創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()