無線界面層

無線界面層

無線界面層(英語:Radio Interface Layer,縮寫為RIL),是作業系統的一層界面,它負責提供界面,來控制行動電話數據機(Modem)與無線電。

基本介紹

  • 中文名:無線層界面
  • 外文名:Radio Interface Layer
  • 縮寫:RIL
  • 本質:是作業系統的一層界面
簡介,RIL結構,上層如何得知RILJ狀態變化,RILJ與RILD如何通信,RILD與CP如何進行通信,Android RIL與Windows Mobile RIL,Windows Mobile RIL,Android RIL,Android RIL與Windows Mobile RIL對比,

簡介

簡單的說,RIL(Radio Interface Layer),就是將應用程式的通信請求傳送給CP的中間層,其包括兩個部分,一個是Java層RILJ,一個是C++層(不妨看作是CP對應的HAL層)RILD。
RILJ屬於系統Phone進程的一部分,隨Phone進程啟動而載入;而RILD守護進程是通過Android的Init進程進行載入的。

RIL結構

下圖是一個Android RIL的一個結構圖。整個通信過程有四個層:
  • 最上層的是應用程式,如通話,簡訊以及SIM卡管理,它們主要負責將用戶的指令傳送到RIL Framework(以後統稱RILJ);
  • RILJ為上層提供了通用的API,如TelephonyManager(包括通話,網路狀態; SubscriptionManager(卡狀態)以及SmsManager等,同時RILJ還負責維持與RILD的通信,並將上層的請求傳送給RILD;
  • RILD是系統的守護進程,對於支持通話功能的移動平台是必不可少的。RILD的功能主要功能是將RILJ傳送過來的請求繼續傳遞給CP,同時會及時將CP的狀態變化傳送給RILJ;
  • Linux驅動層:kernel驅動層接受到數據後,將指令傳給CP,最後由CP傳送給網路端,等網路返回結果後,CP將傳回給RILD;
RILJ與RILD(RILD與CP的通信)都是通過一個個訊息進行數據傳遞。訊息主要分兩種:一種是RILJ主動傳送的請求(solicited),常見的有RIL_REQUEST_GET_SIM_STATUS(獲取SIM卡狀態),RIL_REQUEST_DIAL(撥打電話),RIL_REQUEST_SEND_SMS(傳送簡訊),RIL_REQUEST_GET_CURRENT_CALLS(獲取當前通話狀態),RIL_REQUEST_VOICE_REGISTRATION_STATE(獲取網路狀態); 另一種則是從CP主動上報給RIL的訊息(unsolicited),如網路狀態發生變化時,CP會上報RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED,有新簡訊時,會上報RIL_UNSOL_RESPONSE_NEW_SMS,有來電時會上報RIL_UNSOL_CALL_RING。
圖一圖一

上層如何得知RILJ狀態變化

為方便上層實時監聽網路狀態、通話狀態以及CP的狀態變化,RIL提供了一個專門的監聽接口IPhoneStateListener.aidl,上層需要監聽上述狀態變化時,只需要實現上述接口,並在Android系統服務TelephonyRegistry中對上述接口實現進行註冊。另外,也可以在TelephonyManager中對RIL狀態進行監聽。

RILJ與RILD如何通信

RILJ在創建過程中,會啟動兩個執行緒:RILSender和RILReceiver,RILSender負責將指令傳送給RILD,而RILReceiver則負責從讀取從RILD傳送過來的數據。RILJ與RILD的通信通道就是在RILReceiver中建立起來的。

RILD與CP如何進行通信

RILD與CP(可以看做是兩個運行在不同CPU上的進程通信)交換數據方式一般有兩種情況。如果AP與CP集中在一個晶片上,如高通的平台就是將AP與CP集中在一塊晶片上,這時通常採用共享記憶體的方式實現跨進程通信;而如果不是在同一塊晶片,而是AP與CP分別採用不同廠商的平台,則一般採用字元設備(character devices) 進行通信。總的說來,共享記憶體的方式在速度上要優於字元設備。

Android RIL與Windows Mobile RIL

Android RIL被實現為HAL,相對於windows mobile中被實現為驅動的方式,Android RIL模組的內聚性更為理想,可維護性也將更強,你也可以把Android Ril看做一個中間件。Android RIL部分的開發工作,只需要拿到相應的radio檔案描述符,就可以進行操作,無需關注radio的I/O驅動實現。

Windows Mobile RIL

RIL在微軟推出的移動作業系統Windows Mobile中占有重要的地位。在Windows Mobile裝置中,RIL讓上層控制語音電話或資料傳輸的應用程式能夠與控制GSM/GPRSCDMA20001X的數據機溝通。RIL提供系統界面,讓Windows Mobile作業系統中的CellCore層,能與與無線數據機硬體使用的無線通訊堆疊溝通。RIL也提供了抽象界面,容許OEM廠商將不同的數據機整合進他們的系統中。通過RIL,系統容許所有不同的無線電裝置都能夠在單一的CellCore元件下運作。

Android RIL

Android的RIL層主要分成兩個部分:RIL Daemon和Vendor RIL。
RIL Daemon由C/C++寫成,負責透過socket承接來自於電話框架(Telephony frameworks)的請求,並且將請求找到對應的函式後轉往Vendor RIL。另外也負責將來自Vendor RIL的回應回報給電話框架。
Vendor RIL為各數據晶片的供應商所提供。在RIL Daemon定義了各種不同的函式,而各晶片開發商(如:高通公司)則實做RIL Daemon定義的各種函式,再修改RIL Daemon匯入的函式庫以驅動自己的硬體。簡單來說,Vendor RIL負責承接來自於RIL Daemon的指令,將之做基本處理後傳遞給數據晶片做其他的控制。另外,Vendor RIL 也會同步監聽數據機以獲得數據機“主動回報”、或“處理完後回報”的指令,並將之做初步解析後經由RIL Daemon回傳到電話框架。
RIL可分成兩大指令:之一為RIL傳遞訊息給數據晶片並接收數據晶片執行完後的結果的指令(Solicited commands),之二為數據晶片主動回報的指令(Unsolicited commands)。

Android RIL與Windows Mobile RIL對比

兩者在與套用通信上的實現對比
WindowsMobile RIL在實現與套用的通信時提供了RIL Proxy,在這個層面中它定義了大量的RIL_***()函式來作為電話服務請求。這一點與Android RIL的實現比較相似,Android RIL中在ril.h內提供了一系列的宏來定義電話服務請求。
在Android中的rild功能類似於windows mobile RIL的RIL proxy。它同樣也是起到一個中介的作用,為上層接口向下傳遞請求,並上傳迴響應。在windows mobile RIL中要為每一個應用程式客戶提供一份Ril Proxy實例。
對於這兩種作業系統平台,RIL所定義的所有請求是不可更改的。
兩者線上程結構與回調機制上的對比
在windows mobile的設計中,request與response被設計為異步執行的,他們分別使用兩個佇列來對它們的異步行為進行管理,執行命令下發和上報命令處理的過程也互不影響,下發命令與命令的相應回響之間的依賴關係由應用程式來捏合。
在android ril中的request與response設計與windows mobile不同,它的命令與回響之間是同步的過程。也就是說一條命令被下發後,將等待執行結果,並進行處理,再上向上層發。而不是直接異步的進行處理和向上傳送。

相關詞條

熱門詞條

聯絡我們