CommonAPI 介紹

CommonAPI

CommonAPI C++是用於開發分佈式應用程序的標準C++ API規範,該分佈式應用程序通過中間件進行進程間通信。

CommonAPI C++依靠FrancaIDL來描述靜態接口,根據通信協議部署參數,一起組建完整的實例依賴關係模型。目的是封裝通信協議和相鄰的中間件,使應用程序的C++接口獨立於底層IPC堆棧。

IPC Common API允許針對開發的應用程序(即使用C++的客戶端和服務器)可以與不同的IPC後端鏈接(someip,或D-Bus),而無需更改應用程序代碼。

因此,爲使用特定IPC X(例如someip)的系統開發的組件可以輕鬆地部署到另一個使用IPC Y(例如D-Bus)的系統,只需要交換IPC Common API後端(someip或D-Bus),而無需重新編譯應用程序代碼。

文件介紹

實際的接口定義將使用Franca IDL創建(.fild文件)。
各項部署根據部署文件定義(
.fdepl文件)。

CommonAPI C++ 在通訊層分爲Core和Binding兩個部分。其中Core部分負責和Application交互而Binding部分負責和系統底層的IPC服務棧交互。其中的Binding即IPC的具體實現方式。目前GENIVI支持的Binding分爲兩種,分別是SOME/IP和DBus。

CommonAPI C++的IPC接口使用的是通用的“服務端、客戶端”模式。
對於客戶端主動發起的通訊,採取的是方法(Methods)調用的方式來實現。
Method分爲兩種類型:

  1. 標準的帶有返回值的Method(Basic Method)
  2. 不需要返回值的Method(Fire-and-forgot Method)

服務端主動發起的通訊通過廣播(Broadcasts)的方式實現。
CommonAPI C++提供的廣播模式也有兩種:

  1. 標準的廣播方式(Basic Broadcasts),即廣播內容發送給所有的客戶端
  2. 選擇性廣播方式(Selective Broadcasts),即廣播內容可以發送給某一個或一組客戶端。

CommonAPI的組成原理

CommonAPI C++分爲獨立於中間件的部分(CommonAPI Core,僅僅指CommonAPI
接口)和特定於中間件的部分(CommonAPI Binding,用於選擇使用的IPC協議的代碼)。

CommonAPI將接口描述語言Franca IDL用於接口規範(邏輯接口規範,*.fidl文件)。

Franca IDL的代碼生成的是CommonAPI的組合部分。主要指邏輯接口的變量部分,那是接口的一部分,它取決於Franca IDL文件中的規範(數據類型,數組,枚舉和就基礎知識,包括屬性,方法,回調,錯誤處理,廣播)。

CommonAPI C++ binding的代碼生成器需要特定於中間件的參數(部署參數,例如String數據類型的編碼/解碼格式)。

這些參數在Franca部署文件(*.fdepl)中定義。主要獨立於接口規範。

CommonAPI基本的工作流程

構建CommonAPI項目庫

CommonAPI可執行文件通常由6部分組成:

  1. 應用程序代碼本身是由開發人員手動編寫的;
  2. 生成的CommonAPI(綁定獨立)代碼。根據*.fidl文件生成的代碼。 在客戶端,這段代碼包含proxy函數,由應用程序調用;在服務中,它包含生成的函數,這些函數必須由開發人員手動實現(也可以生成默認實現)。
  3. CommonAPI運行時庫。
  4. 生成的綁定特定代碼(所謂的粘合代碼)。根據*.fdepl文件生成的代碼。
  5. 綁定的運行時庫。
  6. 使用的中間件的通用庫(例如libdbus/vsomeip)。


現在將在創建proxy的確切時間加載粘合代碼庫。
通過CommonAPI配置文件可以找到正確的庫,該配置文件包含CommonAPI地址和粘合代碼庫之間的關聯。如果配置文件中沒有條目,則使用默認設置。

膠水代碼庫是binding特定的;這意味着所需的運行庫由運行時鏈接程序自動加載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章