[Android6.0] Reference-RIL 運行框架

Reference-RIL
1. 負責將 Solicited Request 請求轉換成 AT 命令交給 Modem 執行。
2. 將執行結果以 Solicited Response 消息方式反饋給 LibRIL。
3. 負責接受 Modem 主動上報的消息。

Reference-RIL 運行機制

1. RIL_init 初始化

RIL_init 包括三個步驟:
1. 記錄 LibRIL 提供的 RIL_Env 指針,通過它可以調用 LibRIL 提供的相應函數。
2. 啓動基於 mainLoop 函數運行的子進程,mainLoop 主要負責監聽和接受 Modem 主動上報的 UnSolicited 消息。
3. 返回 Reference-RIL 提供的指向 RIL_RadioFunctions 的指針 s_callbacks。

2. onRequest 接受 LibRIL 請求調用

通過查找 Reference-RIL 提供的 onRequest 函數 僅在 LibRIL 中被調用。
LibRIL 接收到了 RILJ 發起的 RIL 請求後,通過 onRequest 函數調用,向 Reference-RIL 發起對應的 RIL 請求。
它完成了兩件事:
1. 將 RIL 請求轉化成 AT 命令,併發送給 Modem
2. 調用 LibRIL 的 RIL_onRequestComplete 函數,完成 RIL 請求處理結果的返回。

AT 命令

不同廠家的 AT 命令集不盡相同,我們這個案子採用的是 移遠的 EC20。
這個另開一帖單獨介紹。

RIL 層運行框架和機制小結

RIL 層分爲三個部分,RILJ、LibRIL 、Reference-RIL:
RILJ 以 RIL.java 代碼爲中心,負責接受 Telephony Frameworks 發起的 Telephony 相關查詢或控制請求,轉化成 RIL 請求發送給 LibRIL 進行處理。
負責接受 LibRIL 發出的 Solicited Response 和 UnSolicited Response 消息,並將消息分發給 Telephony Frameworks。
LibRIL 以 ril.cpp、ril_event.cpp 代碼爲中心,提供了 RILC 的 Runtime。
負責接受 RILJ 發起的 RIL 請求,將 RIL 請求轉化爲 Reference-RIL 提供的 onRequest 函數調用,並將 RIL 請求結果反饋給 RILJ。
同時,接受 Reference-RIL 發起的 Unsolicited 消息相關函數調用,並將 UnSolicited Response 消息發給 RILJ。
Reference-RIL 以 reference-ril.cpp 代碼爲中心,負責 Modem 進行 AT 命令的交互。
接受 LibRIL 的 onRequest 函數調用,根據 RIL 請求類型組合成 AT 命令,交給 Modem 執行; Modem 狀態有任何變化發出 AT 命令,Reference-RIL 接受並執行,並且將 AT 命令轉化爲 UnSolicited 消息,發送給 LibRIL。

發佈了129 篇原創文章 · 獲贊 166 · 訪問量 49萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章