1. 程式人生 > >android QMI機制---概論

android QMI機制---概論

前言:

Qualcomm MSM Interface,作用用於AP和BP側的互動,通俗說法就是讓裝置終端TE(可以是手機,PDA,計算機)

對高通BP側的AMSS系統進行操作,如呼叫函式,讀取資料,設定其中的NV項等。

QMI的核心稱之為QMI框架(QMI Framework),其主要功能包括以下3點:

1,連線MSM模組和裝置終端,提供一個正交的控制和資料通道。在QMI的訊息用有兩種定義,一種是

QMIControl Message,另一種是QMI DataMessage,支援這兩種訊息併發,不會互相干擾導致出錯。

2,列舉一系列的列舉邏輯裝置,提供給連線使用。QMI機制類似於一個伺服器機制,有相應的client端

和services端,對應於QMI的control point和service。在AP向BP傳送請求時,AP作為client端,當AP

接收BP側返回的響應時,AP作為services端。QMI包含了一系列的QMI Service,例如nas,voice,wds等,

這些不同的services相當於不同邏輯裝置,給不同的app呼叫。

3,QMI有相應的訊息和訊息的協議,裝置終端就是通過這些訊息來訪問AMSS。對於不同的qmi訊息,

訊息長度不一樣,可自己定義訊息長度,不同的qmi訊息,訊息格式是相同的。


上圖是QMIFramework的一個軟體結構圖。

從圖中可以看出,上層控制點打包對應型別的QMI訊息或通過其他作業系統的框架,將要發出的資料傳到AP

側底層的邏輯裝置,最後邏輯裝置通過內聯的匯流排介面,傳到BP側的AMSS。在程式碼中可以找到從控制點發

送到邏輯裝置的函式。


這個是控制點向BP側傳送同步訊息的函式,引數包括走的QMI_Service型別,Service裡面訊息的名稱,

請求訊息的初始地址,長度,返回相應的初始地址和長度。邏輯裝置和BP側內聯的匯流排也可以分很多種:

USB,SDIO,共享記憶體,無線協議802.11等都可以作為匯流排連線AP和BP。咱們現在開發的MSM平臺用

的是共享記憶體。程式碼中qmi_port_defs.h中的列舉qmi_connection_id_type定義了AP側QMI和BP側的

連線通道,包括整合modem的MSM平臺和獨立modem的MDM。


在程式碼中的vendor\qcom\proprietary\qmi\platform目錄,linux_qmi_qmux_if_client.c,定義了和BP側通訊

的邏輯裝置種類。


目前我們QMI支援的邏輯裝置有圖中四種,電話系統,音訊,藍芽,GPS。

TE和MSM通訊原理圖:


兩個特點:1.單一的物理連結匯流排,必須被多個邏輯裝置所複用。

              2.不同的邏輯裝置要求獨立的控制通道和資料通道。

QMI終端原理圖如下:


從圖中可看出,整個QMI架構中,主要是通過QMUX層完成軟體上的TE和MSM的互動。

1,一個服務可以對應多個控制點,一個控制點只能對應一個服務。

2,控制點與服務的關係就好比C/S模型中的客戶端與伺服器關係。

3,如果某程式使用幾種QMI服務,那麼它就要為每種服務構建一個控制點。

可以看出QMI並不是一個簡單的一對一傳輸通訊方式,而是一個服務可以同時接受幾個控制點發出的訊息,

其實現的原理也是對傳輸通道的複用。