copyright © genivi alliance 2015

18
Dashboard image reproduced with the permission of Visteon and 3M Corporation GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countries Copyright © GENIVI Alliance 2015 5-Oct-15 1 CommonAPI C++ Update 21-Oct-15 Jürgen Gehring BMW Group

Upload: francis-craig

Post on 08-Jan-2018

257 views

Category:

Documents


4 download

DESCRIPTION

Copyright © GENIVI Alliance 2015 Content CommonAPI C++ 3 Introduction New Features / API Changes Roadmap yamaica Overview and Roadmap GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countries Copyright © GENIVI Alliance 2015 5-Oct-15

TRANSCRIPT

Page 1: Copyright © GENIVI Alliance 2015

Dashboard image reproduced with the permission of Visteon and 3M CorporationGENIVI is a registered trademark of the GENIVI Alliance in the USA and other countries

Copyright © GENIVI Alliance 2015 5-Oct-151

CommonAPI C++ Update21-Oct-15

Jürgen GehringBMW Group

Page 2: Copyright © GENIVI Alliance 2015

GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countriesCopyright © GENIVI Alliance 2015

• CommonAPI C++ 3– Introduction– New Features / API Changes– Roadmap

• yamaica– Overview and Roadmap

5-Oct-152

Content

Page 3: Copyright © GENIVI Alliance 2015

GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countriesCopyright © GENIVI Alliance 2015

• High-level, thread-safe C++ API for IPC • Adaption of application code to specific IPC by CommonAPI

bindings• Actual support for D-Bus (libdbus) and SOME/IP• Franca IDL base code generator (actual Franca 0.9.1)• High performant implementation using C++ templates

5-Oct-153

CommonAPI C++ Basic Features

Page 4: Copyright © GENIVI Alliance 2015

GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countriesCopyright © GENIVI Alliance 2015

• Wiki: https://genivi-ss.atlassian.net/wiki/display/COMMONAPICPP/CommonAPI-cpp

• Specification / UserGuides: http://docs.projects.genivi.org/ipc.common-api-tools/ (see binding specific tools projects for binding specific documentation)

• Source code: http://git.projects.genivi.org/ (note that the SOME/IP stack for CommonAPI C++ SOME/IP is vsomeip).

• Executable Code Generators: http://docs.projects.genivi.org/yamaica-update-site/CommonAPI/generator/

5-Oct-154

CommonAPI C++ Documentation / Links

Page 5: Copyright © GENIVI Alliance 2015

GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countriesCopyright © GENIVI Alliance 20155-Oct-15

5

CommonAPI C++ 3 and yamaica

CommonAPIRuntime

CommonAPIBindingRuntime

CommonAPIGenerated Code

CommonAPIBinding

Generated Code

User API

IPC Stack

Wire

IPC

CommonAPICode Generator

CommonAPIBinding

Code Generator

yamaica

yamaica-ea

CommonAPITools

CommonAPID-Bus Tools

Franca

Tool for editing and transforming interface descriptions based on Eclipse Modeling Tools, Xtext and Xtend.

CommonAPISOME/IP Tools

Page 6: Copyright © GENIVI Alliance 2015

GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countriesCopyright © GENIVI Alliance 2015

• New concept for generic integration of deployment parameters• CommonAPI C++ logging (supports integration with DLT)• Enhanced code generator features• New runtime loading concept• Multi-version support• Asynchronous stubs• New configuration parameters (e.g. timeouts)• SOME/IP binding

5-Oct-156

CommonAPI C++ 3 New Features

Page 7: Copyright © GENIVI Alliance 2015

GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countriesCopyright © GENIVI Alliance 2015

• Supported CommonAPI 3 deployment parameters specified in *_spec.fdepl• Deployment parameters cover serialization parameters (e.g. string encoding)

and deployment parameters like instance names• For SOME/IP a deployment specification is mandatory (the SOME/IP code

generator can only be started with a fdepl-file

5-Oct-157

CommonAPI C++ 3 Deployment Parameters

D-Bus Deployment Specification

SOME/IP Deployment Specification

Core Deployment Specification

importimport

/org.genivi.commonapi.core/deployment/CommonAPI_deployment_spec.fdepl

/org.genivi.commonapi.core/deployment/CommonAPI_deployment_spec.fdepl

/org.genivi.commonapi.core/deployment/CommonAPI_deployment_spec.fdepl

Page 8: Copyright © GENIVI Alliance 2015

GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countriesCopyright © GENIVI Alliance 2015

specification org.genivi.commonapi.core.deployment {

for interfaces {

DefaultEnumBackingType : {UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64} (default: UInt32);

}

for providers {

ClientInstanceReferences : Instance[] (optional);

}

for instances {

Domain : String (default: "local"); // the domain part of the CommonAPI address.

InstanceId : String; // the instance id of the CommonAPI address.

DefaultMethodTimeout : Integer (default:0);

PreregisteredProperties : String [] (optional);

}

for methods {

Timeout : Integer (default: 0);

}

for enumerations {

EnumBackingType : {UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64} (optional);

}

}

5-Oct-158

CommonAPI C++ 3 Core Deployment

Page 9: Copyright © GENIVI Alliance 2015

GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countriesCopyright © GENIVI Alliance 2015

specification org.genivi.commonapi.someip.deployment extends org.genivi.commonapi.core.deploymentfor instances {

SomeIpInstanceID: Integer ;SomeIpUnicastAddress: String (default: "");SomeIpReliableUnicastPort: Integer (default: 0);SomeIpUnreliableUnicastPort: Integer (default: 0);

... // Other parameters here

for interfaces {SomeIpServiceID: Integer ;SomeIpEventGroups: Integer[] (optional);

}

for attributes {SomeIpGetterID: Integer (optional);SomeIpGetterReliable: Boolean (default: false);SomeIpGetterPriority: Integer (optional);

... // Other parameters here

for strings {SomeIpStringLength: Integer (default: 0);SomeIpStringEncoding: {utf8, utf16le, utf16be} (default: utf8);

... // Other parameters here

5-Oct-159

CommonAPI C++ 3 SOME/IP Deployment

Page 10: Copyright © GENIVI Alliance 2015

GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countriesCopyright © GENIVI Alliance 20155-Oct-15

10

CommonAPI C++ 3 Loading Runtime

libCommonAPI-XX.soCommonAPI IPC Binding XX

Runtime

CommonAPIIPC Binding XXGen. Code E01

libCommonAPI.soCommonAPI

Runtime

Client MyClient (executable)

Proxy E01

CommonAPIGen. Code E01

Proxy E03

CommonAPIGen. Code E03 ...

CommonAPIIPC Binding XXGen. Code E02 ...

Generated Libraries (Binding Specific)

libcapigen1.so libcapigen2.so

other libraries (e.g. libdbus)

RuntimeLinker

RuntimeLinker

RuntimeLinker

loadLibrary (depending on configuration)

CommonAPIIPC Binding YYGen. Code E03

• The application implements against the CommonAPI C++ runtime API and the CommonAPI generated API.

• The executable application links against the CommonAPI runtime library and the generated CommonAPI C++.

• The binding dependent generated glue-code (D-Bus or SOME/IP) can be built in one or several glue-code libraries

• The CommonAPI configuration or the application itself defines which glue-code library is loaded for a certain instance of an interface.

• In order to build the glue-code libraries it is necessary to link against the binding specific runtime library.

Page 11: Copyright © GENIVI Alliance 2015

GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countriesCopyright © GENIVI Alliance 20155-Oct-15

11

CommonAPI C++ 3 Loading Runtime

Standard CommonAPI loading code:

/* DLT context ID, only necessary in case of DLT logging */CommonAPI::Runtime::setProperty("LogContext", "ABCD");

/* Optional: Load this library if there is no other library configured */CommonAPI::Runtime::setProperty("LibraryBase", "MyLibrary");

/* Get generic CommonAPI runtime object */std::shared_ptr<CommonAPI::Runtime> runtime = CommonAPI::Runtime::get();

/* The domain is always local */std::string domain = "local";

/* Instance name */std::string instance = "MyInstance";

/* Optional: Connection ID (= internal thread if no external mainloop is used, replaces old factory) */std::string id = "app01";

/* Get proxy; no factory is needed; necessary is only instance name */std::shared_ptr<MyProxy<>> myProxy = runtime->buildProxy<MyProxy>(domain, instance, id);

Page 12: Copyright © GENIVI Alliance 2015

GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countriesCopyright © GENIVI Alliance 20155-Oct-15

12

CommonAPI C++ 3 Parallel Versions

Parallel Versions:

• The version is part of the namespace; therefore different versions of the same service can exist in parallel.

• By default the code generator generates code in subdirectories with the name of the version.

• Different versions must be provided by different instances of the same service.

Client for ABC InterfaceVersion 2.0 + 1.0

Service with Interface ABC Version 2.0

Generated Proxy ABCVersion 1.0

Generated Stub ABCVersion 2.0

Generated Proxy ABCVersion 2.0

Service with Interface ABCVersion 1.0

Generated Stub ABCVersion 1.0

Application

FIDL Interface ABCVersion 1.0

FIDL Interface ABCVersion 2.0

Specific Code for 1.0 Specific Code for 2.0

buildProxy(...)

Use Cases:

• Support several versions of a service in one client in parallel (picture).

• Update service to new version but not all clients can be updated.

Page 13: Copyright © GENIVI Alliance 2015

GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countriesCopyright © GENIVI Alliance 20155-Oct-15

13

CommonAPI C++ 3 Asynchronous Stubs

void foo(x, fooReply_t r) { worker(x, r);}

void worker(x, r) { // calculate y r(y);}

foo(x, callback) callback(y)

y = foo(x) • It is not necessary anymore to calculate the return values in the stub implementation synchronously.

• Use Cases:• Applications which work as

intermediate layer that only passes messages.

• Swap out the calculation of big computationally intensive tasks to worker threads.

Client

Service

Page 14: Copyright © GENIVI Alliance 2015

GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countriesCopyright © GENIVI Alliance 20155-Oct-15

14

CommonAPI C++ 3 CallInfo

namespace CommonAPI {

struct COMMONAPI_EXPORT CallInfo {CallInfo()

: timeout_(DEFAULT_SEND_TIMEOUT_MS), sender_(0) {

}CallInfo(Timeout_t _timeout)

: timeout_(_timeout), sender_(0) {}CallInfo(Timeout_t _timeout, Sender_t _sender)

: timeout_(_timeout), sender_(_sender) {}

Timeout_t timeout_;Sender_t sender_;

};

} // namespace CommonAPI

• It is possible to pass an optional CallInfo argument to all function calls (also setter/getter of attributes).

• At the moment CallInfo contains the timeout parameter (when do I expect that the function returns) and a sender identifier. The timeout can also be defined in the deployment.

• The sender identifier is only used to log the correlation between this ID and IPC specific identifiers (like the D-Bus serial number).

Page 15: Copyright © GENIVI Alliance 2015

GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countriesCopyright © GENIVI Alliance 20155-Oct-15

15

CommonAPI C++ 3 SOME/IP

• SOME/IP: Scalable service-Oriented middlewarE over IP is an automotive/embedded RPC mechanism including the definition of the serialization / wire format.

• The specification defines datatypes, fields, messages, events, subscriptions, service discovery and so on (refer to http://some-ip.com/ for the details).

• CommonAPI SOME/IP provides a full implementation of this specification; the serialization is done by the CommonAPI SOME/IP binding; the implementation of the basic communication and the service discovery by vsomeip (see http://git.projects.genivi.org/?p=vSomeIP.git;a=summary).

• For CommonAPI SOME/IP see the git projects common-api/cpp-someip-runtime.git and common-api/cpp-someip-tools.git at GENIVI.

Page 16: Copyright © GENIVI Alliance 2015

GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countriesCopyright © GENIVI Alliance 20155-Oct-15

16

CommonAPI C++ 3 Roadmap

• Actual version CommonAPI 3.1.3• Mid of November 2015 CommonAPI 3.1.4: Bugfixing• January 2016 CommonAPI 3.2.0: Enhanced Service

Discovery features and version management.

Page 17: Copyright © GENIVI Alliance 2015

GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countriesCopyright © GENIVI Alliance 20155-Oct-15

17

yamaica

• yamaica is an acronym for yet another model and interface conversion application.

• It is a collection of Eclipse plugins which are integrated together in one tool for convenient use and to avoid version conflicts. At GENIVI it is available as Eclipse update-site (http://docs.projects.genivi.org/yamaica-update-site/yamaica/updatesite/).

• The main feature is the EnterpriseArchitect-to-Franca transformator which works in both directions (roundtrip).

• This feature allows it to use all the modeling features of EA to describe interfaces and to export then a Franca IDL description.

Page 18: Copyright © GENIVI Alliance 2015

GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countriesCopyright © GENIVI Alliance 20155-Oct-15

18

yamaica Roadmap

• The actual yamaica version 0.9.1 is very old. It is still based on Franca 0.8 and contains old code generators.

• The new version yamaica 15 will be published at the end of October 2015 (Franca 0.9.1, full roundtrip for the EA transformations, newest code generators integrated).

• yamaica 16 is planned at the end of the year (bugfixing).