Skip to content

Latest commit

 

History

History
142 lines (109 loc) · 3.93 KB

covesa_someip.md

File metadata and controls

142 lines (109 loc) · 3.93 KB

CommonAPI C++ with SOME/IP

前提准备

  1. CommonAPI 3.2.0
  2. Ubuntu 16
  3. Installed git and (CMake >=2.8)
  4. Java 8 runtime
  5. CommonAPI Runtime库 - 参见 CommonAPI C++ with D-Bus

构建CommonAPI SOME/IP Runtime库

cd ~/workspace
git clone --b 3.2.0 https://github.com/GENIVI/capicxx-someip-runtime.git

CommonAPI SOME/IP Runtime库依赖vsomeip库.

cd ~/workspace
git clone --b 3.1.20.3 https://github.com/COVESA/vsomeip.git
cd ~/workspace/vsomeip
mkdir build
cd build
cmake -DENABLE_SIGNAL_HANDLING=1 -DDIAGNOSIS_ADDRESS=0x10 ..
make

最终在build目录下构建出libsomeip3打头的库.

开始构建CommonAPI SOME/IP Runtime

cd ~/workspace/capicxx-someip-runtime && mkdir build && cd build
cmake -DUSE_INSTALLED_COMMONAPI=OFF ..
make

定义Franca接口文件和生成代码

cd ~/workspace && mkdir -p COVESA_prjs/someip/fidl
# 直接拷贝 CommonAPI C++ with D-Bus中定义的HelloWorld.fidl
cp ./COVESA_prjs/dbus/fidl/HelloWorld.fidl ./COVESA_prjs/someip/fidl

SOME/IP规范需要额外的定义关于service和method. FrancaIDL 提供 .fdepl (deployment specification file) 部署定义文件.

cd ./COVESA_prjs/someip/fidl
vi HelloWorld.fdepl
import "platform:/plugin/org.genivi.commonapi.someip/deployment/CommonAPI-SOMEIP_deployment_spec.fdepl"
import "HelloWorld.fidl"

define org.genivi.commonapi.someip.deployment for interface commonapi.HelloWorld {
	SomeIpServiceID = 4660

	method sayHello {
		SomeIpMethodID = 123
	}
}

define org.genivi.commonapi.someip.deployment for provider as MyService {
	instance commonapi.HelloWorld {
		InstanceId = "test"
		SomeIpInstanceID = 22136
	}
}

下载 commonapi_core_generator & commonapi_someip_generator 后解压至 ~/workspace

cd ~/workspace/COVESA_prjs/someip
.~/workspace/commonapi_core_generator/commonapi-core-generator-windows-x86_64 -sk ./fidl/HelloWorld.fidl

.~/workspace/commonapi_someip_generator/commonapi-someip-generator-linux-x86_64 ./fidl/HelloWorld.fdepl

一切顺利后会在 fidl的同级目录下生成 src-gen目录及目录里的文件

编写client和service程序

HelloWorldClient.cpp

HelloWorldService.cpp

然后再编写service的实现

HelloWorldStubImpl.hpp

HelloWorldStubImpl.cpp

编译运行

cmake_minimum_required(VERSION 2.8)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -std=c++0x")
set(RUNTIME_PATH "/home/xxx/workspace")
include_directories(
    src-gen
    ${RUNTIME_PATH}/capicxx-core-runtime/include
    ${RUNTIME_PATH}/capicxx-someip-runtime/include
    ${RUNTIME_PATH}/vsomeip/interface
)
link_directories(
    ${RUNTIME_PATH}/capicxx-core-runtime/build
    ${RUNTIME_PATH}/capicxx-someip-runtime/build
    ${RUNTIME_PATH}/vsomeip/build
)
add_executable(HelloWorldClient
	src/HelloWorldClient.cpp
	src-gen/v1/commonapi/HelloWorldSomeIPProxy.cpp
	src-gen/v1/commonapi/HelloWorldSomeIPDeployment
)
target_link_libraries(HelloWorldClient CommonAPI CommonAPI-SomeIP vsomeip3)
add_executable(HelloWorldService
	src/HelloWorldService.cpp
	src/HelloWorldStubImpl.cpp
	src-gen/v1/commonapi/HelloWorldSomeIPStubAdapter.cpp
	src-gen/v1/commonapi/HelloWorldStubDefault
	src-gen/v1/commonapi/HelloWorldSomeIPDeployment
)
target_link_libraries(HelloWorldService CommonAPI CommonAPI-SomeIP vsomeip3)
cd ~/workspace/COVESA_prjs/someip && mkdir build && cd build
cmake ..
make
./HelloWorldService &
./HelloWorldClient

详见 someip sample