對Android源碼分析總結

來源:互聯網
上載者:User

在Android中進行處理Android源碼中,hardware/ril目錄中包含著Android的telephony源碼,下面就由我向大家介紹這些目錄其中包含了三個子目錄,下面是對三個子目錄進行具體的分析說明。

一、目錄hardware/ril/include分析:

只有一個標頭檔ril.h包含在此目錄下。ril.h中定義了76個如下類型的宏:這些宏代表著客戶進程可以向Android源碼telephony發送的命令,包括SIM卡相關的功能,打電話,發簡訊,網路訊號查詢等。好像沒有操作地址本的功能?

二、目錄hardware/ril/libril分析。本目錄下代碼負責與客戶進程進行互動。在接收客戶進程命令後,調用相應函數進行處理,然後將命令響應結果傳回客戶進程。在收到來自網路端的事件後,也傳給客戶進程。

檔案ril_commands.h:列出了telephony可以接收的命令;每個命令對應的處理函數;以及命令響應的處理函數。 檔案ril_unsol_commands.h:列出了telephony可以接收的事件類型;對每個事件的處理函數;

以及WAKE Type??? 檔案ril_event.h/cpp:處理與事件來源(連接埠,modem等)相關的功能。ril_event_loop監視所有註冊的事件來源,當某事件來源有資料到來時,相應事件來源的回呼函數被觸發firePending -> ev->func())

listenCallback函數:當與客戶進程串連建立時,此函數被調用。此函數接著調用processCommandsCallback處理來自客戶進程的命令請求processCommandsCallback函數:具體處理來自客戶進程的命令請求。

對每一個命令,ril_commands.h中都規定了對應的命令處理函數dispatchXXX),processCommandsCallback會調用這個命令處理函數進行處理。dispatch系列函數:此函數接收來自客戶進程的命令己相應參數,並調用onRequest進行處理。

RIL_onUnsolicitedResponse函數:將來自網路端的事件封裝通過調用responseXXX)後傳給客戶進程,RIL_onRequestComplete函數:將命令的最終響應結構封裝通過調用responseXXX)後傳給客戶進程。

response系列函數:對每一個命令,都規定了一個對應的response函數來處理命令的最終響應;對每一個網路端的事件,也規定了一個對應的 response函數來處理此事件。response函數可被onUnsolicitedResponse或者onRequestComplete調用。

三、目錄hardware/ril/reference-ril分析。本目錄下代碼主要負責與modem進行互動。 檔案reference-ril.c:此檔案核心是兩個函數:onRequest和onUnsolicited 。

onRequest 函數:在這個函數裡,對每一個RIL_REQUEST_XXX請求,都轉化成相應的AT command,發送給modem,然後睡眠等待。當收到此AT command的最終響應後,線程被喚醒,將響應傳給客戶進程RIL_onRequestComplete -> sendResponse)。

onUnsolicited函數:這個函數處理modem從網路端收到的各種事件,如網路訊號變化,撥入的電話,收到簡訊等。然後將時間傳給客戶進程RIL_onUnsolicitedResponse -> sendResponse)檔案atchannel.c:負責向modem讀寫資料。其中,寫資料(主要是AT command)功能運行在主線程中,讀資料功能運行在一個單獨的讀線程中。

Android源碼at_send_command_full_nolock:運行在主線程裡面。將一個AT command命令寫入modem後進入睡眠狀態使用 pthread_cond_wait或類似函數),直到modem讀線程將其喚醒。喚醒後此函數獲得了AT command的最終響應並返回。

函數readerLoop運行在一個單獨的讀線程裡面,負責從modem中讀取資料。讀到的資料可分為三種類型:網路端傳入的事件;modem對當前AT command的部分響應;modem對當前AT command的全部響應。對第三種類型的資料AT command的全部響應),讀線程喚醒pthread_cond_signal)睡眠狀態的主線程。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.