参考: https://at.projects.genivi.org/wiki/pages/viewpage.action?pageId=5472316
目录结构 存放文件 解释说明
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
- 编写HelloWorld.fidl文件
例如:
然后执行代码生成器的可执行文件,根据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文件
例如:
然后执行代码生成器的可执行文件,根据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.hpp用于访问CommonAPI和生成的代理的运行时部分。如果定义的接口具有版本号,则可以在接口类的名称空间和目录结构中找到该版本。
每个CommonAPI应用程序要做的第一件事之一就是获取指向运行时对象的指针:
为了能够与特定服务进行通信,我们需要一个代理:
此代理将处理哪个存根,由域和实例名称与生成的代理类一起作为模板参数显示确定。
该连接是一个可选参数。此参数允许将多个代理归为一个所谓的连接。如果没有主循环集成,则内部连接对应一个接收器线程。
通过代理的实例化,客户端已建立并可以使用。在此示例中,我们等待服务可用,然后开始发出呼叫:
(2)服务的实现与客户端大致相同。所需的包括以下内容:
在服务的主要功能中,要做的第一件事就是获取运行时对象。
我们必须实例化存根实现(在此处HelloWorldStubImpl),然后注册它:
生成的存根方法的实现sayHello如下所示:
(3)完整的代码展示
HelloWorldClient.cpp
HelloWorldService.cpp
HelloWorldStruImpl.hpp
HelloWorldStruImpl.cpp
4. 编写CMakeLists.txt编译文件
5. 编写完所有的代码,最后进行编译
6. 编写vsomeip的.json配置文件
7. 设置环境变量并启动服务器与客户端