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並不是一個簡單的一對一傳輸通訊方式,而是一個服務可以同時接受幾個控制點發出的訊息,
其實現的原理也是對傳輸通道的複用。