CommonAPI使用例子-HelloWorld
参考: 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. 设置环境变量并启动服务器与客户端
CommonAPI使用例子-HelloWorld相关推荐
- 【ROS】学习笔记一 ubuntu16.04下vs code配置ros环境并编写helloworld程序
[ROS]ubuntu16.04下vs code配置ros环境并编写helloworld程序 一.vs code下载 1.相关配置要求: (1)系统为ubuntu16.04 (2)已安装好kineti ...
- java中HelloWorld原来还可以这样玩
大家可能看到HelloWorld例子是不是都觉得博主脑子是不是有问题,怎么拿这么一个弱智的问题和例子拿来讲.实际上并不是这样的,如果是这样的我相信我就没有写这篇博客意思了.因为当我第一次看到java中 ...
- 让我们一起认识一下Nodejs
Nodejs Nodejs是一个运行在chrome Javascript运行环境下(俗称GoogleV8引擎)的开发平台,用来方便快捷的创建服务器端网络应用程序.可以把它理解为一个轻量级的JSP或PH ...
- tornado源码分析
tornado源码分析 本源码为tornado1.0版本 源码附带例子helloworld import tornado.httpserver import tornado.ioloop import ...
- java- ASM 字节码操控框架
我们知道Java是静态语言,而python.ruby是动态语言,Java程序一旦写好很难在运行时更改类的行为,而python.ruby可以. 不过基于bytecode层面上我们可以做一些手脚,来使Ja ...
- Google Ajax Search 参考
Google AJAX Search API参考 Google AJAX Search API是一种允许您设置Google查寻到您的网页和其他 Web应用程序上的Javascript类库.要使用API ...
- node.js(npm)|bower(bootstrap)|git
为什么80%的码农都做不了架构师?>>> node.js 安装步骤:http://www.runoob.com/nodejs/nodejs-install-setup.htm ...
- 在Struts 2.0中国际化(i18n)您的应用程序
国际化是商业系统中不可或缺的一部分,所以无论您学习的是什么Web框架,它都是必须掌握的技能. 其实,Struts 1.x在此部分已经做得相当不错了.它极大地简化了我们程序员在做国际化时所需的工作,例如 ...
- java获取小数位数_Java获取小数位数
最近搞Struts2弄得有点头昏脑胀,第一个例子"HelloWorld"总不成功,有点郁闷. 想起前几天上cpld/fpga课时老师说得判断小数位数的例子,闲来无事用Java实现一 ...
最新文章
- python 解码json数据并在一个OrderdDict中保留其顺序
- redhat7防火墙关闭_Linux7关闭防火墙
- Oracle数据库入门——常用的数据字典
- 可编辑的表格:jQuery+PHP实现实时编辑表格字段内容
- 应用程序_构建应用程序12 条参考准则
- ubuntu20.10下mysql8数据库的安装(亲测)
- 什么样性格的人最有可能成为领导者?
- php数组如何插入,PHP如何在数组指定位置插入单元
- 抓取html的地址怎么写,跪求一个获取URL地址html代码的写法
- 室内定位发展趋势分析
- Linux就这个范儿 第10章 生死与共的兄弟
- ICM20602互补滤波
- 计算机内部复制粘贴文件速度慢,电脑复制粘贴速度慢为什么
- java POI为excel添加水印
- 怎么给PDF插入一个文本框写注释?PDF添加注释文本框教程
- Crout分解法 | matlab
- GNU 和 UNIX 命令
- ffmpeg源码精读1,音视频处理概述
- [转]用Eclipse进行可视化Java界面设计
- x-admin前端模板左侧菜单栏消除记忆功能(清除缓存)