CommonAPI使用例子-HelloWorld

参考: https://at.projects.genivi.org/wiki/pages/viewpage.action?pageId=5472316
CommonAPI使用例子-HelloWorld_第1张图片

目录结构 存放文件 解释说明
mkdir project 项目目录
mkdir cgen 存放代码生成器
commonapi-generator
commonapi_someip_generator
mkdir fidl 存放*.fidl+*.fdepl文件
vim HelloWorld.fidl
vim HelloWorld.fdepl
src-gen 执行代码生成器,自动生成的目录,存放代码生成器生成的代码
mkdir src 存放应用程序代码
vim HelloWorldClient.cpp
vim HelloWorldService.cpp
vim HelloWorldStubImpl.hpp
vim HelloWorldStubImpl.cpp
vim CMakeLists.txt 用于cmake编译
mkdir build 用于编译+存放最终生成的可执行文件
cd build
cmake
make

  1. 编写HelloWorld.fidl文件
    例如:
    CommonAPI使用例子-HelloWorld_第2张图片
    然后执行代码生成器的可执行文件,根据HelloWorld.fidl文件生成CommonAPI级别的代码;生成的代码的存放位置与HelloWorld.fidl此文件的放置位置无关,因为从该文件生成的代码将始终放置在自动创建的src-gen文件夹中。
    在选择版本时,可用通过执行uname -m来查看自己所使用的服务器的版本。
    在这里插入图片描述
    ./cgen/commonapi-generator/commonapi-generator-linux-x86_64 -sk ./fidl/HelloWorld.fidl
    在这里插入图片描述
    HelloWorld.hpp
    HelloWorldProxyBase.hpp
    HelloWorldProxy.hpp
    HelloWorldStub.hpp
    HelloWorldStubDefault.hpp
    HelloWorldStubDefault.cpp

2. 编写HelloWorld.fdepl文件
例如:
CommonAPI使用例子-HelloWorld_第3张图片

然后执行代码生成器的可执行文件,根据HelloWorld.fdepl文件生成所需的粘合代码。
同上,也是要根据自己的版本执行相应的可执行文件.
./cgen/commonapi_someip_generator/commonapi-someip-generator-linux-x86_64 -ll verbose ./fidl/HelloWorld.fdepl
在这里插入图片描述

HelloWorldSomeIPDeployment.hpp
HelloWorldSomeIPDeployment.cpp
HelloWorldSomeIPProxy.hpp
HelloWorldSomeIPProxy.cpp
HelloWorldSomeIPStubAdapter.hpp
HelloWorldSomeIPStubAdapter.cpp

3. 编写应用程序
在本教程中,我们将创建一个客户端和一个服务,以便能够看到正在进行的通信。
首先通过HelloWorldProxy.cpp在项目中创建新的源文件来实现客户端。确保有一个主要方法来启动客户端应用程序。
(1)在这里,将需要两个包含项才能访问CommonAPI客户端功能:
CommonAPI使用例子-HelloWorld_第4张图片
请注意,必须始终包含CommonAPI.hpp用于访问CommonAPI和生成的代理的运行时部分。如果定义的接口具有版本号,则可以在接口类的名称空间和目录结构中找到该版本。
每个CommonAPI应用程序要做的第一件事之一就是获取指向运行时对象的指针:
在这里插入图片描述
为了能够与特定服务进行通信,我们需要一个代理:
在这里插入图片描述
此代理将处理哪个存根,由域和实例名称与生成的代理类一起作为模板参数显示确定。
该连接是一个可选参数。此参数允许将多个代理归为一个所谓的连接。如果没有主循环集成,则内部连接对应一个接收器线程。
通过代理的实例化,客户端已建立并可以使用。在此示例中,我们等待服务可用,然后开始发出呼叫:

CommonAPI使用例子-HelloWorld_第5张图片
(2)服务的实现与客户端大致相同。所需的包括以下内容:
在这里插入图片描述
在服务的主要功能中,要做的第一件事就是获取运行时对象。
在这里插入图片描述
我们必须实例化存根实现(在此处HelloWorldStubImpl),然后注册它:
CommonAPI使用例子-HelloWorld_第6张图片
生成的存根方法的实现sayHello如下所示:
CommonAPI使用例子-HelloWorld_第7张图片

(3)完整的代码展示
HelloWorldClient.cpp
CommonAPI使用例子-HelloWorld_第8张图片
HelloWorldService.cpp
CommonAPI使用例子-HelloWorld_第9张图片
HelloWorldStruImpl.hpp
CommonAPI使用例子-HelloWorld_第10张图片
HelloWorldStruImpl.cpp
CommonAPI使用例子-HelloWorld_第11张图片

4. 编写CMakeLists.txt编译文件
CommonAPI使用例子-HelloWorld_第12张图片
5. 编写完所有的代码,最后进行编译

CommonAPI使用例子-HelloWorld_第13张图片
6. 编写vsomeip的.json配置文件
CommonAPI使用例子-HelloWorld_第14张图片
CommonAPI使用例子-HelloWorld_第15张图片
7. 设置环境变量并启动服务器与客户端

CommonAPI使用例子-HelloWorld_第16张图片

你可能感兴趣的:(工具)