Skip to content

Latest commit

 

History

History
103 lines (74 loc) · 3.58 KB

VSS2DDSIDL.md

File metadata and controls

103 lines (74 loc) · 3.58 KB

VSS2DDSIDL converter is used to export VSS file data to DDS IDL file (4.2 version)

Acronyms used:

  • DDS : Data Distribution Service
  • IDL : Interface Definition Language
  • VSS : Vehicle Signal Specification

Reference to the specifications:

  • VSS description can be found at : link
  • DDS IDL specification can be found at : link

Various VSS elements considered for conversion:

  • Name
  • datatype (also single dimensional array is supported)
  • allowed

Special handling

Below elements are considered only if the switch --all-idl-features is supplied as a command line argument

  • type
  • min, max
  • unit
  • description

Datatypes mapping between VSS and DDS-IDL

VSS DDS-IDL
uint8 octet
int8 octet
uint16 unsigned short
int16 short
uint32 unsigned long
int32 long
uint64 unsigned long long
int64 long long
boolean boolean
float float
double double
string string

Examples of VSS data and converted DDS-IDL data

Input VSS block with "arraysize" attribute

VSS DDS-IDL
Safety.SpeedLimit:
datatype : float[]
arraysize: 5
type: actuator
unit: m/s
description: Maximum allowed speed of the vehicle
struct SpeedLimit{
string uuid;
sequence<float> value;
}

Input VSS block with "allowed" attribute

VSS DDS-IDL
Direction:
datatype:string
type: actuator
allowed: ['FORWARD','BACKWARD']
description: Driving direction of the vehicle
module Direction_M {
enum DirectionValues{FORWARD,BACKWARD};
};
struct Direction
{
string uuid;
DirectionValues value;
};

To comply with DDS-IDL rules and limitations in IDL compilers VSS string literals that start with a digit will get a d as prefix.

Example VSS:

allowed: ['FORWARD','BACKWARD', '123']

Resulting DDS-IDL::

enum DirectionValues{FORWARD,BACKWARD,d123}

Initially an underscore was used a prefix. That made the IDL correct according to tools, but could not be correctly handled by tools like "Eclipse Cyclone DDS idlc Python Backend" resulting in invalid Python code.

Checking generated DDS-IDL file and generating code stubs from it

IDL files can be supplied as input to one of the DDS implementation (e.g: CycloeDDS, FastDDS) and the data can be validated, and also stubs (python/c++/java code) can be generated from the contents in the IDL file.

Installation of CycloneDDS

$ git clone https://github.com/eclipse-cyclonedds/cyclonedds.git
$ pip3 install cyclonedds conan
$ cd cyclonedds/ \
      && mkdir build \
      && cd build \
      && conan install .. --build missing \
      && cmake .. \
      && cmake --build . --target install

Usage of CycloneDDS to take IDL file as input and generate Python file with types

idlc -l py ./results/res.idl

FastDDS

Installation of FastDDS

Follow the instructions mentioned in page : https://fast-dds.docs.eprosima.com/en/latest/installation/binaries/binaries_linux.html

Usage of FastDDS to take IDL file as input and generate Python file with types

./fastddsgen -replace ./results/res.idl