LibRIL 運行機制

RILJ 與 LibRIL 建立socket連接過程

1、Android 手機啓動過程加載 Phone 應用, 同時構造 RILJ 對象,在RILJ 的構造方法中,主動發起 rild 的socket連接;

2、LibRIL 在ril_event_loop 函數中的 select 響應 s_listen_event 的RIL 請求;

3、通過ril_event->func 函數發起Callback 回調操作,而 s_listen_event->func 爲 listenCallback 函數,該函數響應 RILJ 發起 rild 端口的 socket 請求操作;

4、listenCallback 函數主要邏輯:

      接受socket連接請求,建立與RILJ 的socket 連接;

      增加s_command_event 監聽;


Solicited 消息的交互流程和處理機制

1、RILJ 與 LibRIL建立socket連接後,LibRIL 的watch_table 數組增加了一個事件監聽: s_commands_event ;

2、RILJ 基於 rild 端口的socket 向 LibRIL 發起Solicited Request 消息請求時,s_commands_event通過 func 發起 RILJ 事件的Callback函數調用;

3、即調用 processCommandsCallback 函數處理RILJ 發起的 request請求;

       在ril_commands.h頭文件中定義了107個RIL請求的處理函數和回調函數;

4、RILJ在發起RIL請求後,在這裏通過RIL請求類型獲取請求處理和返回處理的函數;

       比如發起撥號請求,LibRIL匹配CommandInfo的請求調用函數爲dispatchDial,返回調用函數爲responseVoid;當LibRIL發起pRI->pCI->dispatchFunction函數調用時,實際調用的是dispatchDial函數;

5、LibRIL請求調用函數,最終是通過Reference-RIL提供的s_callbacks發起onRequest函數的調用;

6、Reference-RIL接收到LibRIL的請求,根據請求類型轉換成對應的AT命令,向modem發起AT指令;接着便會調用LibRIL提供的RIL_onRequestComplete函數,完成RIL請求處理完成後的回調;

7、RIL_onRequestComplete函數邏輯:

       responseFunction函數調用,完成不用返回的Parcel數據設置;

       sendResponse函數調用,通過socket連接發生Parcel數據,即RILJ接收此數據;

       同樣發起撥號請求後,pRI->pCI->responseFunction函數調用,實際是responseCallList函數調用;




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章