ifex

IFEX and VSS interoperability

Background

From the very beginning that the “VSC” project started discussing the interface description format that is now IFEX, there has been an obvious question on how that may relate to VSS.

Here we should answer specifically, how may we design systems using a combination of the technologies, or if that does not work, what would be the criteria for choosing one or the other.

One view that has been frequently proposed is the following:

With that view it seems obvious that analyzing and unifying the concepts is necessary to ensure that a system definition is coherent also when using both description formats. In particular, it may be very useful to refer to the VSS standard catalog and other VSS-formatted standard data sets from the IFEX-described interfaces.

For that reason, here are proposals for how to model systems and how to create tools that can work with both standards.

Historical note:

Some of the text was extended from “A proposal for how we can translate VSS signals to properties” by Magnus Feuer, originally stored at: https://github.com/COVESA/vehicle_service_catalog/blob/master/vss_integration_proposal.yml (the file might be removed from the master branch at this point since this document supersedes it).

Fundamentals

For modeling IFEX and VSS together there are several common characteristics, as well as some differences, that are worth considering:

Strategies

The similarity between these concepts is high enough that they can map to each other. A Property definition in IFEX ought to be able to describe the exact same data object in the system as the VSS Signal. This should be made clear by having the Property refer to a VSS-defined signal somehow.

The primary issues to review are:

Types

Namespace / branch mapping

Two different strategies are here proposed for branches and namespaces when describing a system with a combination of VSS and IFEX description formats:

1) The first is to treat the VSS tree made up of branches as identical to the nested namespace tree for IFEX interfaces. This means that property, when it is defined as a reference to an existing VSS signal, its sequence of nested parent namespaces in IFEX must be identical to the names of each branch in the hierarchy that leads to the VSS signal name. Since the VSS tree location is defined by Namespaces that are equal to branches, the IFEX property name needs only have the VSS signal name to be fully defined.

2) The second approach is to treat the independent namespace trees as completely independent. In that case, IFEX definitions would need to refer to the VSS signals by their fully qualified name that includes branches and leaves.

Example of strategy 1), copied from vss_integration_proposal.yml:

# From VSS :
#
# - Vehicle:
#   type: branch
#   description: High-level vehicle data.
#
# - Vehicle.VehicleIdentification:
#   type: branch
#   description: Attributes that identify a vehicle
#
# - Vehicle.VehicleIdentification.VIN:
#   datatype: string
#   type: attribute
#   description: 17-character Vehicle Identification Number (VIN) as defined by ISO 3779

namespaces:
  - name: Vehicle
    description: High-level vehicle data.

    namespaces:
      - name: VehicleIdentification
        description:  Attributes that identify a vehicle

        properties:
          - name: VIN  # The item's namespace+name equivalence entails that it is identical to the corresponding VSS signal
            description: 17-character Vehicle Identification Number (VIN) as defined by ISO 3779
            datatype: string

Examples of strategy 2:

2.1:

# From VSS :
#
# - Vehicle:
#   type: branch
#   description: High-level vehicle data.
#
# - Vehicle.VehicleIdentification:
#   type: branch
#   description: Attributes that identify a vehicle
#
# - Vehicle.VehicleIdentification.VIN:
#   datatype: string
#   type: attribute
#   description: 17-character Vehicle Identification Number (VIN) as defined by ISO 3779

# IFEX, with its own namespace hierarchy, and explicit VSS reference:
namespaces:
  - name: vehicle_platform
    description: Main namespace for the VehiclePlatform subsystem

    namespaces:
      - name: veh_attributes
        description: Attributes that identify a vehicle

        properties:
          - name: VSS:Vehicle.VehicleIdentification.VIN  # Needs explicit VSS-reference, using fully-qualified VSS name
            datatype: string
            description: 17-character Vehicle Identification Number (VIN) as defined by ISO 3779

TODO: This concept of referencing an external definition realm (VSS: above) ought to be generalized.

2.2 An alternative approach could be:

        properties:
          - name: MyPropertyName
            vss-alias: VSS:Vehicle.VehicleIdentification.VIN

To consider: Both the reference of an external realm (VSS:x.y.z) and the keyword vss-alias: are automotive-environment specific things that might bet better suited to be part of a Layer, not in the core IDL.

Other notes

IFEX does not specify if a property is readable, writeable, or constant on the IFEX Core IDL level. Such characteristics would be added through a Layer, that in turn get translated into an access-control mechanism on the running software.

Discussion

It could be very useful to match the Namespaces to the VSS branch hierarchy, especially if the IFEX interfaces are used mostly to augment the VSS signals to add a few methods and other features, in other words if the system modeling starts from a strong VSS basis.

But that strategy is also likely to be very limiting in some cases: Looking at the VSS Standard Catalog first, it is organized primarily to have reasonable groupings of data, and this has resulted in several branches mimicking the physical features of the the car design (Powertrain, Braking, Engine, etc.). Namespaces in software on the other hand, are often organized according to software system composition and software-features: (User Interface, Application Servers, Bootup, Storage, Networking, Communication, “Base Platform”, etc.) so when modeling a larger system (already existing or otherwise) the namespaces likely won’t match the VSS branch hierarchy very well.

Recommendation

STILL TODO: It is of course necessary to go through and understand if there are any semantic mismatches in for example the type definitions, and for namespaces it is necessary to choose between some of the alternatives (2.1 vs 2.2).

However, as a preliminary for the namespace concept the recommendation is to support both strategy 1) and 2) because of the reasons given in the Discussions chapter: Both strategies could be desirable, in different scenarios. We could therefore provide the flexibility.