模組基礎介紹與android RIL 介紹

來源:互聯網
上載者:User

原文地址::http://blog.csdn.net/wswupeng/article/details/6069927

 

 

在公司內部做了一個與自己模組相關的主題講解。

把講稿放上來,但沒時間整理, 所以相關的圖片之類的細節以後再補上吧。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

0. 鋪墊。

俺不用ppt。

能讓大家建立模組相關的一點感性認識,知道ril大概是個什麼東西,我就心滿意足了。

 

1. 什麼是模組?

首先, 它是一塊晶片,裡面一般也跑了一個作業系統, 這套軟硬體系統主要完成通訊、sim卡管理相關的功能。 

我們一般通過串口與它進行互動,你可以通過串口發送一些指令到模組,讓它完成相應的功能。 它收到移動網路發來的新訊息時,也會發送一些指令來通知你。

 

舉個從串口抓到的資料的例子, 介紹AT命令。

adb logcat -b radio查詢當前正在收發的AT命令, 更進一步介紹AT命令。

 

2. 為什麼有那麼多模組? evdo, gsm模組是什麼東西?

我們有的項目是基於gsm網路的,比如A1, 有的是基於cdma網路的,比如A1E。實現不同網路功能自然可以有不同的模組來實現。

對我們使用模組的人來說, 不同模組的區別主要體現在AT命令集和命令的格式略有不同。

 

現在知道了,evdo和gsm模組分別是實現這兩種網路通訊功能的模組。

 

另外,我們還經常聽到mtk模組, 信可模組等等的名詞, 這些表示模組的生產廠商。

 

3. AT命令的種類

AT命令的種類, 我總結了一下, 主要有以下這麼幾類:

1. 常見查詢與設定命令。 比如查詢模組的版本號碼, 查詢sim卡的IMSI號,等等。

2. 呼叫相關。    比如打電話, 掛斷電話,呼叫保持,插撥,等等。

3. 簡訊相關。    比如簡訊發送報告,閱讀報告的設定, 收發簡訊,等等。

4. 電話本相關。  主要就是從sim讀寫電話本。

5. sim卡相關。  

6. 網路相關      gprs上網啊,之類的。

7. 主動上報。    主動上報當前的網路訊號強度, 收到新簡訊或者新來電後,

 

4. 已經大體瞭解了模組, 那它是如何融入我們android系統中的呢?

首先, 我們已經知道,與模組之間的通訊都是通過串口進行的。

這裡就有兩個問題了: 

A. 模組發往串口的資料誰來接收、處理、上報?

B. 使用者想執行一個打電話的操作, 怎麼把請求轉化為實際的AT命令,並通過串口發送給模組?

 

這些工作就是通過ril模組來做的。

剛才說的ril這個名詞,是由幾個單詞的英文縮寫, radio interface layer, 中文翻譯就是無線介面適配層, 意思是手機通過這個適配層就能與整個移動網路進行聯絡了。

 

針對剛才提出來的兩個問題,簡單看一下,ril都做了什麼:

第一個問題, 模組將資料放到串口中, ril接收到後開始解析資料, 同時把資料封裝成上層需要的格式, 以訊息的形式轉寄至上層進行處理。 

第二個問題, 而當使用者有打電話或發簡訊之類的操作時, 上層會產生訊息, ril收到訊息後將其轉化為相應的AT命令,通過串口發送至模組。

 

所以這麼看來, ril基本上就可以理解為一個訊息中轉層,一個是負責把模組上報到串口的資料上報至上層, 還有一個是把上層產生的請求轉寄至模組。

 

//那為什麼不直接把這個功能通過上層來做呢?為什麼要多這麼一套東西呢?我想,這就是一個比較微妙的設計問題了。我覺得主要是為了減少底層和上層之間的耦合吧。

 

接下來介紹一下 ril相關的架構。

(畫圖, 正式拿出訊息的概念)

和剛才說的一樣, 整個系統基於訊息機制。 上層是telephony, 它通過通訊端與ril互相收發訊息, ril這一層在手機裡實際是以一個叫做rild的進程存在的, 它向下通過串口與模組互相收發AT命令。

模組從網路端收到新訊息後, 以AT命令形式發送至串口, ril收到後將其封裝成訊息通過通訊端轉寄至上層。

使用者有打電話操作時, 上層產生一個訊息通過通訊端轉寄至ril, ril收到後將其轉化為AT命令發送至模組。

 

rild裡面有一個很重要的概念是外掛程式。 

我們知道rild向下要模組互動, A1用的是gsm模組, A1E用的是evdo模組。這兩種模組的AT命令集合、命令格式是不同的,有相當的差異。 是不是每一個模組我都要重寫一套ril呢? 在物件導向設計裡面有一個很重要的思想就是隔離變化, 在這裡變化的東西是什嗎? 主要就是模組之間有差異。那麼好, ril的設計者,在rild中提供了一套外掛程式介面,一個模組要想被使用,首先要實現這套外掛程式介面。 每個外掛程式要實現的最主要的一個介面函數的名稱是onRequest, 通過調用這個回呼函數,把訊息ID(例如打電話對應的ID),
訊息資料(例如要呼出的電話號碼)作為形參傳入, 每個外掛程式內部將訊息轉化為適應於相應模組的AT命令, 發送給模組。 這樣ril架構只需要調用外掛程式提供的回呼函數, 不需要知道其內部實現,很好的隔離了變化。 從而我們可以看到一套ril代碼,可以適配不同的模組, 我們可以做gsm網路的A1, cdma網路的A1E, 3G網路的N802. 這就是外掛程式的好處。

 

大概的實際介紹ril的內部運行機制。 

可能講的與實際的代碼有一定的出入, 但基本的思考模型是一樣的。

首先rild啟動時, 會先根據命令列參數獲得外掛程式資訊, 我們這裡的外掛程式的具體形式就是動態庫, 獲得外掛程式路徑, 載入並初始化外掛程式。然後啟動事件迴圈。

它內部的實現基於事件機制,裡面有若干個事件來源,通過一個事件迴圈(event loop)不斷輪詢每個事件來源是否有新事件請求, 然後逐一把每個事件進行分發處理。

其中主要的事件來源:

1. 與上層的UNIX通訊端。

2. 模組外掛程式的主動上報請求。

 

雖然代碼初看起來有點亂, 但思路還是很清楚的。

 

實際看一看代碼結構。 供有研究興趣的同學參考。

 

最後簡單介紹一下做雙卡雙待時, ril層的一些改動, 其中的變化可以這麼理解,以前ril只需要面對一個外掛程式, 在分發訊息時,直接往下分發就可以了。 現在呢, 就相當於有兩個外掛程式了, 在分發訊息時需要一個ClientID。 。。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.