image.png
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分为两种类型:
服务端主动发起的通讯通过广播(Broadcasts)的方式实现。 CommonAPI C++提供的广播模式也有两种:
image.png
CommonAPI C++分为独立于中间件的部分(CommonAPI Core,仅仅指CommonAPI 接口)和特定于中间件的部分(CommonAPI Binding,用于选择使用的IPC协议的代码)。
CommonAPI将接口描述语言Franca IDL用于接口规范(逻辑接口规范,*.fidl文件)。
Franca IDL的代码生成的是CommonAPI的组合部分。主要指逻辑接口的变量部分,那是接口的一部分,它取决于Franca IDL文件中的规范(数据类型,数组,枚举和就基础知识,包括属性,方法,回调,错误处理,广播)。
CommonAPI C++ binding的代码生成器需要特定于中间件的参数(部署参数,例如String数据类型的编码/解码格式)。
这些参数在Franca部署文件(*.fdepl)中定义。主要独立于接口规范。
image.png
CommonAPI可执行文件通常由6部分组成:
image.png
现在将在创建proxy的确切时间加载粘合代码库。 通过CommonAPI配置文件可以找到正确的库,该配置文件包含CommonAPI地址和粘合代码库之间的关联。如果配置文件中没有条目,则使用默认设置。
胶水代码库是binding特定的;这意味着所需的运行库由运行时链接程序自动加载。