Internal
Vehicle Service Catalog
ALL MEMBER MEETING
APRIL 26-28, 2022
Internal
Mission Statement
Create a standardized, extensible vehicle service catalog, and associated
tools, to enable protocol-, language-and specification-agnostic
interoperability between ECUs, infotainment, and cloud.
• Standardized – Version managed service specification with regular releases
• Extensible – Proprietary extensions can be added to an open-standard catalog
• Tools – Auto-generate network code and APIs from service specifications
• Specification agnostic – Translation to and from multiple specification formats
• Interoperability – Enable seamless communication in the vehicle and over the air
28 March 2024 | ALL MEMBER MEETING • Leipzig, Germany • Copyright ©2022 COVESA |2
Internal
VSC – Working Session 1 (Tue 26.04)
topic start time
VSC Intro 15:00 20 min
Initial Services 15:20 25 min
VSC-VSS relationship (prep. Thursday) 15:45 25 min
Wrap up 16:10 20 min
Wrap Up:
- Identify a set of service that make sense for VSC, 3 nice example services
- Code generator on top of the VCS services
- Idl conversion
Questions:
- Verisoning on Interfaces / APIs?
28 March 2024 | Copyright ©2021 COVESA |3
Internal
VSC – Working Session 2 (Wed 27.04)
topic start time
Intro 10:30 10 min
Initial Services for VSC, 3-5 nice examples 10:40 20 min
Sample POC Vehicle Abstraction Layer 11:00 20 min
Tooling / Generators, etc. 11:20 20 min
Container, Access Control 11:40 10 min
Wrap up 11:50 10 min
28 March 2024 | Copyright ©2021 COVESA |4
Internal
Initial Objectives
Create service catalog
• Create catalog for commodity in-vehicle services using YAML
• Collaborate between OEMs and Tier-1s to ensure commonality
Create tooling
• Create VSC YAML translators for FrancaIDL and ARXML
• Create code generators for C++, DBUS, and SOME/IP
Create sample vehicle abstraction layer service
• Route ARXML-based SOME/IP traffic to DBUS
28 March 2024 | ALL MEMBER MEETING • Leipzig, Germany • Copyright ©2022 COVESA |5
Internal
TECHNICAL OVERVIEW
28 March 2024 | ALL MEMBER MEETING • Leipzig, Germany • Copyright ©2022 COVESA |6
Internal
VSC YAML File Structure
Namespaces
• Can be nested
• Major & minor versions enables versioned APIs
namespaces:
name: ... Typedefs
major-version: ... • Type defines native, defined, struct, or enumeration types
minor-version: ... • Supports array definitions
typedefs: Enumerations
... • Supports optional value specification for each element
enumerations: Structs
... • Can be nested
• Elements can be of any native or defined datatype
structs:
... Methods
• Arbitrary number of input and output parameters
methods: • Can return stream of output parameters
...
Events
events: • Pub/sub
... • Events can contain arbitrary number of elements
See full specification at: https://github.com/COVESA/vehicle_service_catalog
28 March 2024 | ALL MEMBER MEETING • Leipzig, Germany • Copyright ©2022 COVESA |7
Internal
VSC Deployment Files
Namespaces
• Mapped to corresponding namespaces in VSC file
• Nested namespaces used to traverse tree to specific elements
namespaces:
- name: seats
dbus_interface: com.genivi.seat
Extensions
methods:
• Adds additional data elements to the VSC specification
- name: move_seat
in:
- name: position
datatype: float
Overrides
• Redefines an existing element defined in VSC specification
• Can redefine complete trees (namespaces, methods, etc)
28 March 2024 | ALL MEMBER MEETING • Leipzig, Germany • Copyright ©2022 COVESA |8
Internal
Code Generation
Code generator combines VSC specification with deployment
files to customize code generation for specific protocol / language targets
vsc-generate -l cpp –l dbus -s comfort.yml –d comfort_dbus_deploy.yml –o comfort_dbus.cpp
Language to generate Protocol to generate Service specification Deployment file Output file for
stub code for stub code for (see above) generated code
• Specify if synchronous, event-driven, or callback-based API are to be generated
• Define listening ports, service discovery mechanisms, and other network configurations
• Map network identifiers to language symbols (SOME/IP Request ID to method names)
28 March 2024 | ALL MEMBER MEETING • Leipzig, Germany • Copyright ©2022 COVESA |9
Internal
Integrating external specification formats
hvac.arxml vsc_convert -f arxml hvac.yml vsc_generate -p vsomeip hvac-vsomeip.cpp
HVAC ECU IVI
Adaptive SOME/IP hvac-service
Autosar
• Example: Generate SOME/IP interface code from ARXML
• Auto-generated VSOMEIP code provides Adaptive Autosar interoperability
• Extensible tools support multiple input formats and output protocols & languages
28 March 2024 | ALL MEMBER MEETING • Leipzig, Germany • Copyright ©2022 COVESA | 10
Internal
Where is Franca IDL in all this?
hvac.fidl vsc_convert -i hvac.fidl -o hvac.yml
hvac.arxml vsc_convert -i hvac.arxml -o hvac.yml hvac.yml
hvac.proto vsc_convert -i hvac.proto -o hvac.yml
• Existing Franca IDL specifications can be used as ground truth format
• Bidirectional translation between Franca IDL and Vehicle Service Catalog formats fully supported
VSC could be seen as a YAML variant of Franca IDL with no loss of information
VSC drives improvements to Franca IDL → next step in Franca evolution?
28 March 2024 | ALL MEMBER MEETING • Leipzig, Germany • Copyright ©2022 COVESA | 11
Internal
OBJECTIVES
28 March 2024 | ALL MEMBER MEETING • Leipzig, Germany • Copyright ©2022 COVESA | 12
Internal
Objective: Create Service Catalog
• Define overall catalog structure with namespaces, naming conventions, etc
• Define global error codes, defined types, structs, etc.
• Define commodity services such as comfort, tuner, media, sota(?), etc
• Create placeholders for future services
28 March 2024 | ALL MEMBER MEETING • Leipzig, Germany • Copyright ©2022 COVESA | 13
Internal
Objective: Sample Vehicle Abstraction Layer
Vehicle Abstraction Layer
• Simplifying integration of VSC defined services
• Enabling project to migrate step-by-step to VSC
• Supporting unchangeable legacy development while keeping a clean API
Sample
• Demonstrating E2E use case for a VSC defined service
• Demonstrating collaborative work and interoperability
28 March 2024 | ALL MEMBER MEETING • Leipzig, Germany • Copyright ©2022 COVESA | 14
Internal
Sample Vehicle Abstraction Layer (SOME/IP-2-DBUS)
IVI
Comfort Application
DBUS
vsc-hvac.yml VSC Tooling vsc-hvac-dbus.cpp
Manual
translation-layer.cpp
coding
network.arxml VSC Tooling network-vsomeip.cpp
SOME/IP
Comfort ECU
28 March 2024 | ALL MEMBER MEETING • Leipzig, Germany • Copyright ©2022 COVESA | 15
Internal
Sample Vehicle Abstraction Layer (SOME/IP-2-SOME/IP)
Gateway
ECU SOME/IP translation-layer.cpp SOME/IP ECU
network-vsomeip.cpp
Manual
VSC Tooling VSC Tooling
coding
network.arxml vsc-hvac.yml
28 March 2024 | ALL MEMBER MEETING • Leipzig, Germany • Copyright ©2022 COVESA | 16
Internal
Open Questions
28 March 2024 | ALL MEMBER MEETING • Leipzig, Germany • Copyright ©2022 COVESA | 17
Internal
Open Questions
• VSS – VSC Integration
• Boundaries between specifications, tooling, etc
• Use both signals and services to actuate?
• Choose a code integration option
• Structure of service catalog
• Namespace structuring
• Best practices for actuation, status updates, and failure management
28 March 2024 | ALL MEMBER MEETING • Leipzig, Germany • Copyright ©2022 COVESA | 18
Internal
VSS-VSC Integration Option 1
Vehicle Signal VSS-to-VSC VSC Events &
Specification generator Properties
Application
Vehicle Service
VSC Tooling vsc-stub.cpp
Specification
• Signal Specification is translated to a VSC YAML file with events and properties
• Tooling generates code from both service specification and translated events and properties
28 March 2024 | ALL MEMBER MEETING • Leipzig, Germany • Copyright ©2022 COVESA | 19
Internal
VSS-VSC Integration Option 2
Vehicle Signal VSS
Specification Tooling Application
vss-stub.cpp
Vehicle Service VSC vsc-stub.cpp
Specification Tooling
• Toolchains are kept separate
• Application uses code generated from booth toolchains
28 March 2024 | ALL MEMBER MEETING • Leipzig, Germany • Copyright ©2022 COVESA | 20
Internal
Q: Best Practices
• Use RPCs to actuate and command
• Set radio station, move seats, set destination, …
• Can initiate transaction that triggers one or more events for transactional status update
• Returns ok/fail/in_progress(transaction_id)
• Use properties to report property changes (from RPC or otherwise)
• Current radio station changed, Seat position changed, Location changed, …
• Has getters and setters
• Has pub-sub
• Use events to track transactional progress (Needs to be specified by VSC RPC call)
• Window 10% up, 20% up, aborted (hand in window) (last update)
• Deployment file specifies if sync/async interface should be generated.
28 March 2024 | ALL MEMBER MEETING • Leipzig, Germany • Copyright ©2022 COVESA | 21
Internal
Q: Service Catalog Structure
• How do we organize nested namespaces?
• How do we enable private / proprietary extensions?
• How do we namespace globals (error codes, enums, etc)?
• Service and argument styles (camel case, underscore, prefix, etc)?
• Versioning of Services?
28 March 2024 | ALL MEMBER MEETING • Leipzig, Germany • Copyright ©2022 COVESA | 22
Internal
Q: Additional Features
• Mechanism to instrument calls in generated code
• Track latency, resource usage, etc
• How do we integrate Renesas AoS service specs?
• Can we use well-defined deployment file elements to specify containers?
• Refer to VSC spec + version from AoS service spec. Consume – provide.
28 March 2024 | ALL MEMBER MEETING • Leipzig, Germany • Copyright ©2022 COVESA | 23
Internal