diff --git a/.github/workflows/bloom-release.yml b/.github/workflows/bloom-release.yml
index dabc541d9..2ba15b3cf 100644
--- a/.github/workflows/bloom-release.yml
+++ b/.github/workflows/bloom-release.yml
@@ -22,7 +22,7 @@ jobs:
- name: Release ROS 2
uses: at-wat/bloom-release-action@v0
with:
- ros_distro: humble iron jazzy
+ ros_distro: humble jazzy
github_token_bloom: ${{ secrets.GH_TOKEN_FOR_BLOOM_RELEASE }}
github_user: jpbusch
git_user: Jean-Pierre Busch
diff --git a/.github/workflows/codegen.yml b/.github/workflows/codegen.yml
index d700a26ff..3d0d60289 100644
--- a/.github/workflows/codegen.yml
+++ b/.github/workflows/codegen.yml
@@ -25,8 +25,8 @@ jobs:
- name: Build asn1c docker image
uses: docker/build-push-action@v6
with:
- context: utils/codegen/docker
- file: utils/codegen/docker/asn1c.Dockerfile
+ context: utils/codegen/asn1ToC/docker
+ file: utils/codegen/asn1ToC/docker/asn1c.Dockerfile
tags: asn1c:ci
outputs: type=docker,dest=/tmp/asn1c-image.tar
- name: Upload asn1c-image (artifact)
@@ -65,15 +65,19 @@ jobs:
matrix:
include:
- message: cam
- script: ./utils/codegen/asn1ToC.py asn1/raw/cam_en302637_2/CAM-PDU-Descriptions.asn asn1/raw/cam_en302637_2/cdd/ITS-Container.asn -t cam -o etsi_its_coding/etsi_its_cam_coding -di asn1c:ci
+ script: utils/codegen/asn1ToC/asn1ToC.py asn1/raw/cam_en302637_2/CAM-PDU-Descriptions.asn asn1/raw/cam_en302637_2/cdd/ITS-Container.asn -t cam -o etsi_its_coding/etsi_its_cam_coding -di asn1c:ci
- message: cam_ts
- script: ./utils/codegen/asn1ToC.py asn1/raw/cam_ts103900/CAM-PDU-Descriptions.asn asn1/patched/cam_ts103900/cdd/ETSI-ITS-CDD.asn -t cam_ts -o etsi_its_coding/etsi_its_cam_ts_coding -di asn1c:ci
+ script: utils/codegen/asn1ToC/asn1ToC.py asn1/raw/cam_ts103900/CAM-PDU-Descriptions.asn asn1/patched/cam_ts103900/cdd/ETSI-ITS-CDD.asn -t cam_ts -o etsi_its_coding/etsi_its_cam_ts_coding -di asn1c:ci
- message: denm
- script: ./utils/codegen/asn1ToC.py asn1/raw/denm_en302637_3/DENM-PDU-Descriptions.asn asn1/raw/denm_en302637_3/cdd/ITS-Container.asn -t denm -o etsi_its_coding/etsi_its_denm_coding -di asn1c:ci
+ script: utils/codegen/asn1ToC/asn1ToC.py asn1/raw/denm_en302637_3/DENM-PDU-Descriptions.asn asn1/raw/denm_en302637_3/cdd/ITS-Container.asn -t denm -o etsi_its_coding/etsi_its_denm_coding -di asn1c:ci
- message: cpm_ts
- script: ./utils/codegen/asn1ToC.py asn1/raw/cpm_ts103324/asn/CPM-PDU-Descriptions.asn asn1/raw/cpm_ts103324/asn/CPM-OriginatingStationContainers.asn asn1/raw/cpm_ts103324/asn/CPM-PerceivedObjectContainer.asn asn1/raw/cpm_ts103324/asn/CPM-PerceptionRegionContainer.asn asn1/raw/cpm_ts103324/asn/CPM-SensorInformationContainer.asn asn1/patched/cpm_ts103324/asn/cdd/ETSI-ITS-CDD.asn -t cpm_ts -o etsi_its_coding/etsi_its_cpm_ts_coding -di asn1c:ci
+ script: utils/codegen/asn1ToC/asn1ToC.py asn1/raw/cpm_ts103324/asn/CPM-PDU-Descriptions.asn asn1/raw/cpm_ts103324/asn/CPM-OriginatingStationContainers.asn asn1/raw/cpm_ts103324/asn/CPM-PerceivedObjectContainer.asn asn1/raw/cpm_ts103324/asn/CPM-PerceptionRegionContainer.asn asn1/raw/cpm_ts103324/asn/CPM-SensorInformationContainer.asn asn1/patched/cpm_ts103324/asn/cdd/ETSI-ITS-CDD.asn -t cpm_ts -o etsi_its_coding/etsi_its_cpm_ts_coding -di asn1c:ci
+ - message: mapem_ts
+ script: utils/codegen/asn1ToC/asn1ToC.py asn1/raw/is_ts103301/MAPEM-PDU-Descriptions.asn asn1/raw/is_ts103301/cdd/ITS-Container.asn asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn asn1/raw/is_ts103301/build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn asn1/patched/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn -t mapem_ts -o etsi_its_coding/etsi_its_mapem_ts_coding -di asn1c:ci
+ - message: spatem_ts
+ script: utils/codegen/asn1ToC/asn1ToC.py asn1/raw/is_ts103301/SPATEM-PDU-Descriptions.asn asn1/raw/is_ts103301/cdd/ITS-Container.asn asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn asn1/raw/is_ts103301/build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn asn1/patched/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn -t spatem_ts -o etsi_its_coding/etsi_its_spatem_ts_coding -di asn1c:ci
- message: vam_ts
- script: ./utils/codegen/asn1ToC.py asn1/raw/vam-ts103300_3/VAM-PDU-Descriptions.asn asn1/patched/vam-ts103300_3/cdd/ETSI-ITS-CDD.asn -t vam_ts -o etsi_its_coding/etsi_its_vam_ts_coding -di asn1c:ci
+ script: utils/codegen/asn1ToC/asn1ToC.py asn1/raw/vam-ts103300_3/VAM-PDU-Descriptions.asn asn1/patched/vam-ts103300_3/cdd/ETSI-ITS-CDD.asn -t vam_ts -o etsi_its_coding/etsi_its_vam_ts_coding -di asn1c:ci
steps:
- name: Checkout code
uses: actions/checkout@v3
@@ -82,7 +86,10 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v4
with:
- python-version: 3.9
+ python-version: "3.10"
+ cache: pip
+ - name: Install dependencies
+ run: pip install -r ./utils/codegen/asn1ToC/requirements.txt
- name: Download asn1c-image (artifact)
uses: actions/download-artifact@v4
with:
@@ -92,6 +99,7 @@ jobs:
run: docker load --input /tmp/asn1c-image.tar
- name: etsi_its_${{ matrix.message }}_coding
run: |
+ ./asn1/external/download.sh
./asn1/patches/patch.sh
${{ matrix.script }}
rm -rf ${{ github.workspace }}/tmp
@@ -110,15 +118,19 @@ jobs:
matrix:
include:
- message: cam
- script: ./utils/codegen/codegen-rust/asn1ToRosMsg.py asn1/raw/cam_en302637_2/CAM-PDU-Descriptions.asn asn1/raw/cam_en302637_2/cdd/ITS-Container.asn -t cam -o etsi_its_msgs/etsi_its_cam_msgs/msg -di rgen:ci
+ script: utils/codegen/codegen-py/asn1ToRosMsg.py asn1/raw/cam_en302637_2/CAM-PDU-Descriptions.asn asn1/raw/cam_en302637_2/cdd/ITS-Container.asn -t cam -o etsi_its_msgs/etsi_its_cam_msgs/msg
- message: cam_ts
- script: ./utils/codegen/codegen-rust/asn1ToRosMsg.py asn1/raw/cam_ts103900/CAM-PDU-Descriptions.asn asn1/patched/cam_ts103900/cdd/ETSI-ITS-CDD.asn -t cam_ts -o etsi_its_msgs/etsi_its_cam_ts_msgs/msg -di rgen:ci
+ script: utils/codegen/codegen-py/asn1ToRosMsg.py asn1/raw/cam_ts103900/CAM-PDU-Descriptions.asn asn1/patched/cam_ts103900/cdd/ETSI-ITS-CDD.asn -t cam_ts -o etsi_its_msgs/etsi_its_cam_ts_msgs/msg
- message: denm
- script: ./utils/codegen/codegen-rust/asn1ToRosMsg.py asn1/raw/denm_en302637_3/DENM-PDU-Descriptions.asn asn1/raw/denm_en302637_3/cdd/ITS-Container.asn -t denm -o etsi_its_msgs/etsi_its_denm_msgs/msg -di rgen:ci
+ script: utils/codegen/codegen-py/asn1ToRosMsg.py asn1/raw/denm_en302637_3/DENM-PDU-Descriptions.asn asn1/raw/denm_en302637_3/cdd/ITS-Container.asn -t denm -o etsi_its_msgs/etsi_its_denm_msgs/msg
- message: cpm_ts
- script: ./utils/codegen/codegen-rust/asn1ToRosMsg.py asn1/raw/cpm_ts103324/asn/CPM-PDU-Descriptions.asn asn1/raw/cpm_ts103324/asn/CPM-OriginatingStationContainers.asn asn1/raw/cpm_ts103324/asn/CPM-PerceivedObjectContainer.asn asn1/raw/cpm_ts103324/asn/CPM-PerceptionRegionContainer.asn asn1/raw/cpm_ts103324/asn/CPM-SensorInformationContainer.asn asn1/patched/cpm_ts103324/asn/cdd/ETSI-ITS-CDD.asn -t cpm_ts -o etsi_its_msgs/etsi_its_cpm_ts_msgs/msg -di rgen:ci
+ script: utils/codegen/codegen-py/asn1ToRosMsg.py asn1/raw/cpm_ts103324/asn/CPM-PDU-Descriptions.asn asn1/raw/cpm_ts103324/asn/CPM-OriginatingStationContainers.asn asn1/raw/cpm_ts103324/asn/CPM-PerceivedObjectContainer.asn asn1/raw/cpm_ts103324/asn/CPM-PerceptionRegionContainer.asn asn1/raw/cpm_ts103324/asn/CPM-SensorInformationContainer.asn asn1/patched/cpm_ts103324/asn/cdd/ETSI-ITS-CDD.asn -t cpm_ts -o etsi_its_msgs/etsi_its_cpm_ts_msgs/msg
+ - message: mapem_ts
+ script: utils/codegen/codegen-py/asn1ToRosMsg.py asn1/raw/is_ts103301/MAPEM-PDU-Descriptions.asn asn1/raw/is_ts103301/cdd/ITS-Container.asn asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn asn1/raw/is_ts103301/build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn asn1/patched/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn -t mapem_ts -o etsi_its_msgs/etsi_its_mapem_ts_msgs/msg
+ - message: spatem_ts
+ script: utils/codegen/codegen-py/asn1ToRosMsg.py asn1/raw/is_ts103301/SPATEM-PDU-Descriptions.asn asn1/raw/is_ts103301/cdd/ITS-Container.asn asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn asn1/raw/is_ts103301/build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn asn1/patched/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn -t spatem_ts -o etsi_its_msgs/etsi_its_spatem_ts_msgs/msg
- message: vam_ts
- script: ./utils/codegen/codegen-rust/asn1ToRosMsg.py asn1/raw/vam-ts103300_3/VAM-PDU-Descriptions.asn asn1/patched/vam-ts103300_3/cdd/ETSI-ITS-CDD.asn -t vam_ts -o etsi_its_msgs/etsi_its_vam_ts_msgs/msg -di rgen:ci
+ script: utils/codegen/codegen-py/asn1ToRosMsg.py asn1/raw/vam-ts103300_3/VAM-PDU-Descriptions.asn asn1/patched/vam-ts103300_3/cdd/ETSI-ITS-CDD.asn -t vam_ts -o etsi_its_msgs/etsi_its_vam_ts_msgs/msg
steps:
- name: Checkout code
uses: actions/checkout@v3
@@ -127,16 +139,13 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v4
with:
- python-version: 3.9
- - name: Download rgen-image (artifact)
- uses: actions/download-artifact@v4
- with:
- name: rgen-image
- path: /tmp
- - name: Load rgen-image
- run: docker load --input /tmp/rgen-image.tar
+ python-version: "3.10"
+ cache: pip
+ - name: Install dependencies
+ run: pip install -r ./utils/codegen/codegen-py/requirements.txt
- name: etsi_its_${{ matrix.message }}_msgs
run: |
+ ./asn1/external/download.sh
./asn1/patches/patch.sh
${{ matrix.script }}
if [[ ! -z "$(git status --porcelain)" ]]; then
@@ -154,15 +163,19 @@ jobs:
matrix:
include:
- message: cam
- script: ./utils/codegen/codegen-rust/asn1ToConversionHeader.py asn1/raw/cam_en302637_2/CAM-PDU-Descriptions.asn asn1/raw/cam_en302637_2/cdd/ITS-Container.asn -t cam -o etsi_its_conversion/etsi_its_cam_conversion/include/etsi_its_cam_conversion -di rgen:ci
+ script: utils/codegen/codegen-py/asn1ToConversionHeader.py asn1/raw/cam_en302637_2/CAM-PDU-Descriptions.asn asn1/raw/cam_en302637_2/cdd/ITS-Container.asn -t cam -o etsi_its_conversion/etsi_its_cam_conversion/include/etsi_its_cam_conversion
- message: cam_ts
- script: ./utils/codegen/codegen-rust/asn1ToConversionHeader.py asn1/raw/cam_ts103900/CAM-PDU-Descriptions.asn asn1/patched/cam_ts103900/cdd/ETSI-ITS-CDD.asn -t cam_ts -o etsi_its_conversion/etsi_its_cam_ts_conversion/include/etsi_its_cam_ts_conversion -di rgen:ci
+ script: utils/codegen/codegen-py/asn1ToConversionHeader.py asn1/raw/cam_ts103900/CAM-PDU-Descriptions.asn asn1/patched/cam_ts103900/cdd/ETSI-ITS-CDD.asn -t cam_ts -o etsi_its_conversion/etsi_its_cam_ts_conversion/include/etsi_its_cam_ts_conversion
- message: denm
- script: ./utils/codegen/codegen-rust/asn1ToConversionHeader.py asn1/raw/denm_en302637_3/DENM-PDU-Descriptions.asn asn1/raw/denm_en302637_3/cdd/ITS-Container.asn -t denm -o etsi_its_conversion/etsi_its_denm_conversion/include/etsi_its_denm_conversion -di rgen:ci
+ script: utils/codegen/codegen-py/asn1ToConversionHeader.py asn1/raw/denm_en302637_3/DENM-PDU-Descriptions.asn asn1/raw/denm_en302637_3/cdd/ITS-Container.asn -t denm -o etsi_its_conversion/etsi_its_denm_conversion/include/etsi_its_denm_conversion
- message: cpm_ts
- script: ./utils/codegen/codegen-rust/asn1ToConversionHeader.py asn1/raw/cpm_ts103324/asn/CPM-PDU-Descriptions.asn asn1/raw/cpm_ts103324/asn/CPM-OriginatingStationContainers.asn asn1/raw/cpm_ts103324/asn/CPM-PerceivedObjectContainer.asn asn1/raw/cpm_ts103324/asn/CPM-PerceptionRegionContainer.asn asn1/raw/cpm_ts103324/asn/CPM-SensorInformationContainer.asn asn1/patched/cpm_ts103324/asn/cdd/ETSI-ITS-CDD.asn -t cpm_ts -o etsi_its_conversion/etsi_its_cpm_ts_conversion/include/etsi_its_cpm_ts_conversion -di rgen:ci
+ script: utils/codegen/codegen-py/asn1ToConversionHeader.py asn1/raw/cpm_ts103324/asn/CPM-PDU-Descriptions.asn asn1/raw/cpm_ts103324/asn/CPM-OriginatingStationContainers.asn asn1/raw/cpm_ts103324/asn/CPM-PerceivedObjectContainer.asn asn1/raw/cpm_ts103324/asn/CPM-PerceptionRegionContainer.asn asn1/raw/cpm_ts103324/asn/CPM-SensorInformationContainer.asn asn1/patched/cpm_ts103324/asn/cdd/ETSI-ITS-CDD.asn -t cpm_ts -o etsi_its_conversion/etsi_its_cpm_ts_conversion/include/etsi_its_cpm_ts_conversion
+ - message: mapem_ts
+ script: utils/codegen/codegen-py/asn1ToConversionHeader.py asn1/raw/is_ts103301/MAPEM-PDU-Descriptions.asn asn1/raw/is_ts103301/cdd/ITS-Container.asn asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn asn1/raw/is_ts103301/build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn asn1/patched/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn -t mapem_ts -o etsi_its_conversion/etsi_its_mapem_ts_conversion/include/etsi_its_mapem_ts_conversion
+ - message: spatem_ts
+ script: utils/codegen/codegen-py/asn1ToConversionHeader.py asn1/raw/is_ts103301/SPATEM-PDU-Descriptions.asn asn1/raw/is_ts103301/cdd/ITS-Container.asn asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn asn1/raw/is_ts103301/build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn asn1/patched/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn -t spatem_ts -o etsi_its_conversion/etsi_its_spatem_ts_conversion/include/etsi_its_spatem_ts_conversion
- message: vam_ts
- script: ./utils/codegen/codegen-rust/asn1ToConversionHeader.py asn1/raw/vam-ts103300_3/VAM-PDU-Descriptions.asn asn1/patched/vam-ts103300_3/cdd/ETSI-ITS-CDD.asn -t vam_ts -o etsi_its_conversion/etsi_its_vam_ts_conversion/include/etsi_its_vam_ts_conversion -di rgen:ci
+ script: utils/codegen/codegen-py/asn1ToConversionHeader.py asn1/raw/vam-ts103300_3/VAM-PDU-Descriptions.asn asn1/patched/vam-ts103300_3/cdd/ETSI-ITS-CDD.asn -t vam_ts -o etsi_its_conversion/etsi_its_vam_ts_conversion/include/etsi_its_vam_ts_conversion
steps:
- name: Checkout code
uses: actions/checkout@v3
@@ -171,16 +184,13 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v4
with:
- python-version: 3.9
- - name: Download rgen-image (artifact)
- uses: actions/download-artifact@v4
- with:
- name: rgen-image
- path: /tmp
- - name: Load rgen-image
- run: docker load --input /tmp/rgen-image.tar
+ python-version: "3.10"
+ cache: pip
+ - name: Install dependencies
+ run: pip install -r ./utils/codegen/codegen-py/requirements.txt
- name: etsi_its_${{ matrix.message }}_conversion
run: |
+ ./asn1/external/download.sh
./asn1/patches/patch.sh
${{ matrix.script }}
if [[ ! -z "$(git status --porcelain)" ]]; then
diff --git a/.github/workflows/docker-ros.yml b/.github/workflows/docker-ros.yml
index fdda99b46..398c44a4f 100644
--- a/.github/workflows/docker-ros.yml
+++ b/.github/workflows/docker-ros.yml
@@ -30,19 +30,6 @@ jobs:
enable-industrial-ci: 'true'
enable-recursive-vcs-import: 'false'
- ros2-iron:
- runs-on: ubuntu-latest
- steps:
- - uses: ika-rwth-aachen/docker-ros@main
- with:
- platform: amd64
- target: dev,run
- image-tag: ros2-iron
- base-image: rwthika/ros2:iron
- command: ros2 launch etsi_its_conversion converter.launch.py
- enable-industrial-ci: 'true'
- enable-recursive-vcs-import: 'false'
-
ros2-jazzy:
runs-on: ubuntu-latest
steps:
diff --git a/.github/workflows/industrial_ci.yml b/.github/workflows/industrial_ci.yml
index 65660df0b..669c429c9 100644
--- a/.github/workflows/industrial_ci.yml
+++ b/.github/workflows/industrial_ci.yml
@@ -11,7 +11,6 @@ jobs:
ROS_DISTRO:
- noetic
- humble
- - iron
- jazzy
ROS_REPO:
- testing
diff --git a/.gitlab-ci.codegen.yml b/.gitlab-ci.codegen.yml
index ed8a7035d..4580757b4 100644
--- a/.gitlab-ci.codegen.yml
+++ b/.gitlab-ci.codegen.yml
@@ -4,8 +4,10 @@ default:
services: [docker:24.0.7-dind]
before_script:
- apk update
- - apk add bash python3
+ - apk add bash python3 py3-pip
+ - pip3 install -r ./utils/codegen/codegen-py/requirements.txt --break-system-packages
- docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
+ - ./asn1/external/download.sh
- ./asn1/patches/patch.sh
variables:
@@ -26,7 +28,7 @@ stages:
asn1c-docker:
stage: Build Docker Images
before_script:
- - cd utils/codegen/docker
+ - cd utils/codegen/asn1ToC/docker
- docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
script:
- docker build -t ${_ASN1C_CI_IMAGE} -f asn1c.Dockerfile .
@@ -56,7 +58,7 @@ etsi_its_cam_coding:
needs: ["asn1c-docker"]
script:
- >
- ./utils/codegen/asn1ToC.py
+ utils/codegen/asn1ToC/asn1ToC.py
asn1/raw/cam_en302637_2/CAM-PDU-Descriptions.asn
asn1/raw/cam_en302637_2/cdd/ITS-Container.asn
-t cam
@@ -71,7 +73,7 @@ etsi_its_cam_ts_coding:
needs: ["asn1c-docker"]
script:
- >
- ./utils/codegen/asn1ToC.py
+ utils/codegen/asn1ToC/asn1ToC.py
asn1/raw/cam_ts103900/CAM-PDU-Descriptions.asn
asn1/patched/cam_ts103900/cdd/ETSI-ITS-CDD.asn
-t cam_ts
@@ -86,7 +88,7 @@ etsi_its_denm_coding:
needs: ["asn1c-docker"]
script:
- >
- ./utils/codegen/asn1ToC.py
+ utils/codegen/asn1ToC/asn1ToC.py
asn1/raw/denm_en302637_3/DENM-PDU-Descriptions.asn
asn1/raw/denm_en302637_3/cdd/ITS-Container.asn
-t denm
@@ -101,7 +103,7 @@ etsi_its_cpm_ts_coding:
needs: ["asn1c-docker"]
script:
- >
- ./utils/codegen/asn1ToC.py
+ utils/codegen/asn1ToC/asn1ToC.py
asn1/raw/cpm_ts103324/asn/CPM-PDU-Descriptions.asn
asn1/raw/cpm_ts103324/asn/CPM-OriginatingStationContainers.asn
asn1/raw/cpm_ts103324/asn/CPM-PerceivedObjectContainer.asn
@@ -120,7 +122,7 @@ etsi_its_vam_ts_coding:
needs: ["asn1c-docker"]
script:
- >
- ./utils/codegen/asn1ToC.py
+ utils/codegen/asn1ToC/asn1ToC.py
asn1/raw/vam-ts103300_3/VAM-PDU-Descriptions.asn
asn1/patched/vam-ts103300_3/cdd/ETSI-ITS-CDD.asn
-t vam_ts
@@ -130,136 +132,167 @@ etsi_its_vam_ts_coding:
- rm -rf /builds/$CI_PROJECT_PATH/tmp
- if [[ ! -z "$(git status --porcelain)" ]]; then echo "Code generation script resulted in changes to the repository" && git diff; exit 1; fi
+etsi_its_mapem_ts_coding:
+ stage: asn1c
+ needs: ["asn1c-docker"]
+ script:
+ - >
+ utils/codegen/asn1ToC/asn1ToC.py
+ asn1/raw/is_ts103301/MAPEM-PDU-Descriptions.asn
+ asn1/raw/is_ts103301/cdd/ITS-Container.asn
+ asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn
+ asn1/raw/is_ts103301/build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn
+ asn1/patched/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn
+ -t mapem_ts
+ -o etsi_its_coding/etsi_its_mapem_ts_coding
+ -td /builds/$CI_PROJECT_PATH/tmp
+ -di ${_ASN1C_CI_IMAGE}
+ - rm -rf /builds/$CI_PROJECT_PATH/tmp
+ - if [[ ! -z "$(git status --porcelain)" ]]; then echo "Code generation script resulted in changes to the repository" && git diff; exit 1; fi
+
+etsi_its_spatem_ts_coding:
+ stage: asn1c
+ needs: ["asn1c-docker"]
+ script:
+ - >
+ utils/codegen/asn1ToC/asn1ToC.py
+ asn1/raw/is_ts103301/SPATEM-PDU-Descriptions.asn
+ asn1/raw/is_ts103301/cdd/ITS-Container.asn
+ asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn
+ asn1/raw/is_ts103301/build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn
+ asn1/patched/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn
+ -t spatem_ts
+ -o etsi_its_coding/etsi_its_spatem_ts_coding
+ -td /builds/$CI_PROJECT_PATH/tmp
+ -di ${_ASN1C_CI_IMAGE}
+ - rm -rf /builds/$CI_PROJECT_PATH/tmp
+ - if [[ ! -z "$(git status --porcelain)" ]]; then echo "Code generation script resulted in changes to the repository" && git diff; exit 1; fi
+
etsi_its_cam_msgs:
stage: ROS Messages
- needs: ["rgen-docker"]
script:
- >
- ./utils/codegen/codegen-rust/asn1ToRosMsg.py
+ utils/codegen/codegen-py/asn1ToRosMsg.py
asn1/raw/cam_en302637_2/CAM-PDU-Descriptions.asn
asn1/raw/cam_en302637_2/cdd/ITS-Container.asn
- -o etsi_its_msgs/etsi_its_cam_msgs/msg
- -td /builds/$CI_PROJECT_PATH/tmp
-t cam
- -di ${_RGEN_CI_IMAGE}
- - rm -rf /builds/$CI_PROJECT_PATH/tmp
+ -o etsi_its_msgs/etsi_its_cam_msgs/msg
- if [[ ! -z "$(git status --porcelain)" ]]; then echo "Code generation script resulted in changes to the repository" && git diff; exit 1; fi
etsi_its_cam_ts_msgs:
stage: ROS Messages
- needs: ["rgen-docker"]
script:
- >
- ./utils/codegen/codegen-rust/asn1ToRosMsg.py
+ utils/codegen/codegen-py/asn1ToRosMsg.py
asn1/raw/cam_ts103900/CAM-PDU-Descriptions.asn
asn1/patched/cam_ts103900/cdd/ETSI-ITS-CDD.asn
- -o etsi_its_msgs/etsi_its_cam_ts_msgs/msg
- -td /builds/$CI_PROJECT_PATH/tmp
-t cam_ts
- -di ${_RGEN_CI_IMAGE}
- - rm -rf /builds/$CI_PROJECT_PATH/tmp
+ -o etsi_its_msgs/etsi_its_cam_ts_msgs/msg
- if [[ ! -z "$(git status --porcelain)" ]]; then echo "Code generation script resulted in changes to the repository" && git diff; exit 1; fi
etsi_its_denm_msgs:
stage: ROS Messages
- needs: ["rgen-docker"]
script:
- >
- ./utils/codegen/codegen-rust/asn1ToRosMsg.py
+ utils/codegen/codegen-py/asn1ToRosMsg.py
asn1/raw/denm_en302637_3/DENM-PDU-Descriptions.asn
asn1/raw/denm_en302637_3/cdd/ITS-Container.asn
- -o etsi_its_msgs/etsi_its_denm_msgs/msg
- -td /builds/$CI_PROJECT_PATH/tmp
-t denm
- -di ${_RGEN_CI_IMAGE}
- - rm -rf /builds/$CI_PROJECT_PATH/tmp
+ -o etsi_its_msgs/etsi_its_denm_msgs/msg
- if [[ ! -z "$(git status --porcelain)" ]]; then echo "Code generation script resulted in changes to the repository" && git diff; exit 1; fi
etsi_its_cpm_ts_msgs:
stage: ROS Messages
- needs: ["rgen-docker"]
script:
- >
- ./utils/codegen/codegen-rust/asn1ToRosMsg.py
+ utils/codegen/codegen-py/asn1ToRosMsg.py
asn1/raw/cpm_ts103324/asn/CPM-PDU-Descriptions.asn
asn1/raw/cpm_ts103324/asn/CPM-OriginatingStationContainers.asn
asn1/raw/cpm_ts103324/asn/CPM-PerceivedObjectContainer.asn
asn1/raw/cpm_ts103324/asn/CPM-PerceptionRegionContainer.asn
asn1/raw/cpm_ts103324/asn/CPM-SensorInformationContainer.asn
asn1/patched/cpm_ts103324/asn/cdd/ETSI-ITS-CDD.asn
- -o etsi_its_msgs/etsi_its_cpm_ts_msgs/msg
- -td /builds/$CI_PROJECT_PATH/tmp
-t cpm_ts
- -di ${_RGEN_CI_IMAGE}
- - rm -rf /builds/$CI_PROJECT_PATH/tmp
+ -o etsi_its_msgs/etsi_its_cpm_ts_msgs/msg
- if [[ ! -z "$(git status --porcelain)" ]]; then echo "Code generation script resulted in changes to the repository" && git diff; exit 1; fi
etsi_its_vam_ts_msgs:
stage: ROS Messages
- needs: ["rgen-docker"]
script:
- >
- ./utils/codegen/codegen-rust/asn1ToRosMsg.py
+ utils/codegen/codegen-py/asn1ToRosMsg.py
asn1/raw/vam-ts103300_3/VAM-PDU-Descriptions.asn
asn1/patched/vam-ts103300_3/cdd/ETSI-ITS-CDD.asn
- -o etsi_its_msgs/etsi_its_vam_ts_msgs/msg
- -td /builds/$CI_PROJECT_PATH/tmp
-t vam_ts
- -di ${_RGEN_CI_IMAGE}
- - rm -rf /builds/$CI_PROJECT_PATH/tmp
+ -o etsi_its_msgs/etsi_its_vam_ts_msgs/msg
+ - if [[ ! -z "$(git status --porcelain)" ]]; then echo "Code generation script resulted in changes to the repository" && git diff; exit 1; fi
+
+etsi_its_mapem_ts_msgs:
+ stage: ROS Messages
+ script:
+ - >
+ utils/codegen/codegen-py/asn1ToRosMsg.py
+ asn1/raw/is_ts103301/MAPEM-PDU-Descriptions.asn
+ asn1/raw/is_ts103301/cdd/ITS-Container.asn
+ asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn
+ asn1/raw/is_ts103301/build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn
+ asn1/patched/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn
+ -t mapem_ts
+ -o etsi_its_msgs/etsi_its_mapem_ts_msgs/msg
+ - if [[ ! -z "$(git status --porcelain)" ]]; then echo "Code generation script resulted in changes to the repository" && git diff; exit 1; fi
+
+etsi_its_spatem_ts_msgs:
+ stage: ROS Messages
+ script:
+ - >
+ utils/codegen/codegen-py/asn1ToRosMsg.py
+ asn1/raw/is_ts103301/SPATEM-PDU-Descriptions.asn
+ asn1/raw/is_ts103301/cdd/ITS-Container.asn
+ asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn
+ asn1/raw/is_ts103301/build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn
+ asn1/patched/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn
+ -t spatem_ts
+ -o etsi_its_msgs/etsi_its_spatem_ts_msgs/msg
- if [[ ! -z "$(git status --porcelain)" ]]; then echo "Code generation script resulted in changes to the repository" && git diff; exit 1; fi
etsi_its_cam_conversion:
stage: Conversion Headers
- needs: ["rgen-docker"]
script:
- >
- ./utils/codegen/codegen-rust/asn1ToConversionHeader.py
+ utils/codegen/codegen-py/asn1ToConversionHeader.py
asn1/raw/cam_en302637_2/CAM-PDU-Descriptions.asn
asn1/raw/cam_en302637_2/cdd/ITS-Container.asn
-t cam
-o etsi_its_conversion/etsi_its_cam_conversion/include/etsi_its_cam_conversion
- -td /builds/$CI_PROJECT_PATH/tmp
- -di ${_RGEN_CI_IMAGE}
- - rm -rf /builds/$CI_PROJECT_PATH/tmp
- if [[ ! -z "$(git status --porcelain)" ]]; then echo "Code generation script resulted in changes to the repository" && git diff; exit 1; fi
etsi_its_cam_ts_conversion:
stage: Conversion Headers
- needs: ["rgen-docker"]
script:
- >
- ./utils/codegen/codegen-rust/asn1ToConversionHeader.py
+ utils/codegen/codegen-py/asn1ToConversionHeader.py
asn1/raw/cam_ts103900/CAM-PDU-Descriptions.asn
asn1/patched/cam_ts103900/cdd/ETSI-ITS-CDD.asn
-t cam_ts
-o etsi_its_conversion/etsi_its_cam_ts_conversion/include/etsi_its_cam_ts_conversion
- -td /builds/$CI_PROJECT_PATH/tmp
- -di ${_RGEN_CI_IMAGE}
- - rm -rf /builds/$CI_PROJECT_PATH/tmp
- if [[ ! -z "$(git status --porcelain)" ]]; then echo "Code generation script resulted in changes to the repository" && git diff; exit 1; fi
etsi_its_denm_conversion:
stage: Conversion Headers
- needs: ["rgen-docker"]
script:
- >
- ./utils/codegen/codegen-rust/asn1ToConversionHeader.py
+ utils/codegen/codegen-py/asn1ToConversionHeader.py
asn1/raw/denm_en302637_3/DENM-PDU-Descriptions.asn
asn1/raw/denm_en302637_3/cdd/ITS-Container.asn
-t denm
-o etsi_its_conversion/etsi_its_denm_conversion/include/etsi_its_denm_conversion
- -td /builds/$CI_PROJECT_PATH/tmp
- -di ${_RGEN_CI_IMAGE}
- - rm -rf /builds/$CI_PROJECT_PATH/tmp
- if [[ ! -z "$(git status --porcelain)" ]]; then echo "Code generation script resulted in changes to the repository" && git diff; exit 1; fi
etsi_its_cpm_ts_conversion:
stage: Conversion Headers
- needs: ["rgen-docker"]
script:
- >
- ./utils/codegen/codegen-rust/asn1ToConversionHeader.py
+ utils/codegen/codegen-py/asn1ToConversionHeader.py
asn1/raw/cpm_ts103324/asn/CPM-PDU-Descriptions.asn
asn1/raw/cpm_ts103324/asn/CPM-OriginatingStationContainers.asn
asn1/raw/cpm_ts103324/asn/CPM-PerceivedObjectContainer.asn
@@ -268,22 +301,43 @@ etsi_its_cpm_ts_conversion:
asn1/patched/cpm_ts103324/asn/cdd/ETSI-ITS-CDD.asn
-t cpm_ts
-o etsi_its_conversion/etsi_its_cpm_ts_conversion/include/etsi_its_cpm_ts_conversion
- -td /builds/$CI_PROJECT_PATH/tmp
- -di ${_RGEN_CI_IMAGE}
- - rm -rf /builds/$CI_PROJECT_PATH/tmp
- if [[ ! -z "$(git status --porcelain)" ]]; then echo "Code generation script resulted in changes to the repository" && git diff; exit 1; fi
etsi_its_vam_ts_conversion:
stage: Conversion Headers
- needs: ["rgen-docker"]
script:
- >
- ./utils/codegen/codegen-rust/asn1ToConversionHeader.py
+ utils/codegen/codegen-py/asn1ToConversionHeader.py
asn1/raw/vam-ts103300_3/VAM-PDU-Descriptions.asn
asn1/patched/vam-ts103300_3/cdd/ETSI-ITS-CDD.asn
-t vam_ts
-o etsi_its_conversion/etsi_its_vam_ts_conversion/include/etsi_its_vam_ts_conversion
- -td /builds/$CI_PROJECT_PATH/tmp
- -di ${_RGEN_CI_IMAGE}
- - rm -rf /builds/$CI_PROJECT_PATH/tmp
+ - if [[ ! -z "$(git status --porcelain)" ]]; then echo "Code generation script resulted in changes to the repository" && git diff; exit 1; fi
+
+etsi_its_mapem_ts_conversion:
+ stage: Conversion Headers
+ script:
+ - >
+ utils/codegen/codegen-py/asn1ToConversionHeader.py
+ asn1/raw/is_ts103301/MAPEM-PDU-Descriptions.asn
+ asn1/raw/is_ts103301/cdd/ITS-Container.asn
+ asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn
+ asn1/raw/is_ts103301/build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn
+ asn1/patched/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn
+ -t mapem_ts
+ -o etsi_its_conversion/etsi_its_mapem_ts_conversion/include/etsi_its_mapem_ts_conversion
+ - if [[ ! -z "$(git status --porcelain)" ]]; then echo "Code generation script resulted in changes to the repository" && git diff; exit 1; fi
+
+etsi_its_spatem_ts_conversion:
+ stage: Conversion Headers
+ script:
+ - >
+ utils/codegen/codegen-py/asn1ToConversionHeader.py
+ asn1/raw/is_ts103301/SPATEM-PDU-Descriptions.asn
+ asn1/raw/is_ts103301/cdd/ITS-Container.asn
+ asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn
+ asn1/raw/is_ts103301/build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn
+ asn1/patched/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn
+ -t spatem_ts
+ -o etsi_its_conversion/etsi_its_spatem_ts_conversion/include/etsi_its_spatem_ts_conversion
- if [[ ! -z "$(git status --porcelain)" ]]; then echo "Code generation script resulted in changes to the repository" && git diff; exit 1; fi
\ No newline at end of file
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 41f0de6db..63318edd9 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -33,20 +33,6 @@ ros2-humble:
ENABLE_INDUSTRIAL_CI: 'true'
ENABLE_RECURSIVE_VCS_IMPORT: 'false'
-ros2-iron:
- trigger:
- include:
- - remote: https://raw.githubusercontent.com/ika-rwth-aachen/docker-ros/main/.gitlab-ci/docker-ros.yml
- strategy: depend
- variables:
- PLATFORM: amd64,arm64
- TARGET: dev,run
- IMAGE_TAG: ros2-iron
- BASE_IMAGE: rwthika/ros2:iron
- COMMAND: ros2 launch etsi_its_conversion converter.launch.py
- ENABLE_INDUSTRIAL_CI: 'true'
- ENABLE_RECURSIVE_VCS_IMPORT: 'false'
-
ros2-jazzy:
trigger:
include:
diff --git a/.gitmodules b/.gitmodules
index 7d9d5f7d7..532c7b87b 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -16,3 +16,6 @@
[submodule "doc/doxygen-awesome-css"]
path = doc/doxygen-awesome-css
url = https://github.com/jothepro/doxygen-awesome-css.git
+[submodule "asn1/raw/is_ts103301"]
+ path = asn1/raw/is_ts103301
+ url = https://forge.etsi.org/rep/ITS/asn1/is_ts103301.git
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 79f5a2e24..cd5f85bf9 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -1,12 +1,29 @@
{
"version": "0.2.0",
+ "compounds": [
+ {
+ "name": "All (coding)",
+ "configurations": ["CAM (coding)", "CAM TS (coding)", "DENM (coding)", "CPM TS (coding)", "VAM TS (coding)", "MAPEM TS (coding)", "SPATEM TS (coding)"],
+ "stopAll": false
+ },
+ {
+ "name": "All (msgs)",
+ "configurations": ["CAM (msgs)", "CAM TS (msgs)", "DENM (msgs)", "CPM TS (msgs)", "VAM TS (msgs)", "MAPEM TS (msgs)", "SPATEM TS (msgs)"],
+ "stopAll": false
+ },
+ {
+ "name": "All (conversion)",
+ "configurations": ["CAM (conversion)", "CAM TS (conversion)", "DENM (conversion)", "CPM TS (conversion)", "VAM TS (conversion)", "MAPEM TS (conversion)", "SPATEM TS (conversion)"],
+ "stopAll": false
+ }
+ ],
"configurations": [
{
"name": "CAM (coding)",
"preLaunchTask": "Patch ASN.1 files",
"type": "debugpy",
"request": "launch",
- "program": "utils/codegen/asn1ToC.py",
+ "program": "utils/codegen/asn1ToC/asn1ToC.py",
"args": [
"asn1/raw/cam_en302637_2/CAM-PDU-Descriptions.asn",
"asn1/raw/cam_en302637_2/cdd/ITS-Container.asn",
@@ -23,7 +40,7 @@
"preLaunchTask": "Patch ASN.1 files",
"type": "debugpy",
"request": "launch",
- "program": "utils/codegen/codegen-rust/asn1ToRosMsg.py",
+ "program": "utils/codegen/codegen-py/asn1ToRosMsg.py",
"args": [
"asn1/raw/cam_en302637_2/CAM-PDU-Descriptions.asn",
"asn1/raw/cam_en302637_2/cdd/ITS-Container.asn",
@@ -40,7 +57,7 @@
"preLaunchTask": "Patch ASN.1 files",
"type": "debugpy",
"request": "launch",
- "program": "utils/codegen/codegen-rust/asn1ToConversionHeader.py",
+ "program": "utils/codegen/codegen-py/asn1ToConversionHeader.py",
"args": [
"asn1/raw/cam_en302637_2/CAM-PDU-Descriptions.asn",
"asn1/raw/cam_en302637_2/cdd/ITS-Container.asn",
@@ -57,7 +74,7 @@
"preLaunchTask": "Patch ASN.1 files",
"type": "debugpy",
"request": "launch",
- "program": "utils/codegen/asn1ToC.py",
+ "program": "utils/codegen/asn1ToC/asn1ToC.py",
"args": [
"asn1/raw/cam_ts103900/CAM-PDU-Descriptions.asn",
"asn1/patched/cam_ts103900/cdd/ETSI-ITS-CDD.asn",
@@ -74,7 +91,7 @@
"preLaunchTask": "Patch ASN.1 files",
"type": "debugpy",
"request": "launch",
- "program": "utils/codegen/codegen-rust/asn1ToRosMsg.py",
+ "program": "utils/codegen/codegen-py/asn1ToRosMsg.py",
"args": [
"asn1/raw/cam_ts103900/CAM-PDU-Descriptions.asn",
"asn1/patched/cam_ts103900/cdd/ETSI-ITS-CDD.asn",
@@ -91,7 +108,7 @@
"preLaunchTask": "Patch ASN.1 files",
"type": "debugpy",
"request": "launch",
- "program": "utils/codegen/codegen-rust/asn1ToConversionHeader.py",
+ "program": "utils/codegen/codegen-py/asn1ToConversionHeader.py",
"args": [
"asn1/raw/cam_ts103900/CAM-PDU-Descriptions.asn",
"asn1/patched/cam_ts103900/cdd/ETSI-ITS-CDD.asn",
@@ -108,7 +125,7 @@
"preLaunchTask": "Patch ASN.1 files",
"type": "debugpy",
"request": "launch",
- "program": "utils/codegen/asn1ToC.py",
+ "program": "utils/codegen/asn1ToC/asn1ToC.py",
"args": [
"asn1/raw/denm_en302637_3/DENM-PDU-Descriptions.asn",
"asn1/raw/denm_en302637_3/cdd/ITS-Container.asn",
@@ -125,7 +142,7 @@
"preLaunchTask": "Patch ASN.1 files",
"type": "debugpy",
"request": "launch",
- "program": "utils/codegen/codegen-rust/asn1ToRosMsg.py",
+ "program": "utils/codegen/codegen-py/asn1ToRosMsg.py",
"args": [
"asn1/raw/denm_en302637_3/DENM-PDU-Descriptions.asn",
"asn1/raw/denm_en302637_3/cdd/ITS-Container.asn",
@@ -142,7 +159,7 @@
"preLaunchTask": "Patch ASN.1 files",
"type": "debugpy",
"request": "launch",
- "program": "utils/codegen/codegen-rust/asn1ToConversionHeader.py",
+ "program": "utils/codegen/codegen-py/asn1ToConversionHeader.py",
"args": [
"asn1/raw/denm_en302637_3/DENM-PDU-Descriptions.asn",
"asn1/raw/denm_en302637_3/cdd/ITS-Container.asn",
@@ -159,7 +176,7 @@
"preLaunchTask": "Patch ASN.1 files",
"type": "debugpy",
"request": "launch",
- "program": "utils/codegen/asn1ToC.py",
+ "program": "utils/codegen/asn1ToC/asn1ToC.py",
"args": [
"asn1/raw/cpm_ts103324/asn/CPM-PDU-Descriptions.asn",
"asn1/raw/cpm_ts103324/asn/CPM-OriginatingStationContainers.asn",
@@ -180,7 +197,7 @@
"preLaunchTask": "Patch ASN.1 files",
"type": "debugpy",
"request": "launch",
- "program": "utils/codegen/codegen-rust/asn1ToRosMsg.py",
+ "program": "utils/codegen/codegen-py/asn1ToRosMsg.py",
"args": [
"asn1/raw/cpm_ts103324/asn/CPM-PDU-Descriptions.asn",
"asn1/raw/cpm_ts103324/asn/CPM-OriginatingStationContainers.asn",
@@ -201,7 +218,7 @@
"preLaunchTask": "Patch ASN.1 files",
"type": "debugpy",
"request": "launch",
- "program": "utils/codegen/codegen-rust/asn1ToConversionHeader.py",
+ "program": "utils/codegen/codegen-py/asn1ToConversionHeader.py",
"args": [
"asn1/raw/cpm_ts103324/asn/CPM-PDU-Descriptions.asn",
"asn1/raw/cpm_ts103324/asn/CPM-OriginatingStationContainers.asn",
@@ -222,7 +239,7 @@
"preLaunchTask": "Patch ASN.1 files",
"type": "debugpy",
"request": "launch",
- "program": "utils/codegen/asn1ToC.py",
+ "program": "utils/codegen/asn1ToC/asn1ToC.py",
"args": [
"asn1/raw/vam-ts103300_3/VAM-PDU-Descriptions.asn",
"asn1/patched/vam-ts103300_3/cdd/ETSI-ITS-CDD.asn",
@@ -239,7 +256,7 @@
"preLaunchTask": "Patch ASN.1 files",
"type": "debugpy",
"request": "launch",
- "program": "utils/codegen/codegen-rust/asn1ToRosMsg.py",
+ "program": "utils/codegen/codegen-py/asn1ToRosMsg.py",
"args": [
"asn1/raw/vam-ts103300_3/VAM-PDU-Descriptions.asn",
"asn1/patched/vam-ts103300_3/cdd/ETSI-ITS-CDD.asn",
@@ -256,7 +273,7 @@
"preLaunchTask": "Patch ASN.1 files",
"type": "debugpy",
"request": "launch",
- "program": "utils/codegen/codegen-rust/asn1ToConversionHeader.py",
+ "program": "utils/codegen/codegen-py/asn1ToConversionHeader.py",
"args": [
"asn1/raw/vam-ts103300_3/VAM-PDU-Descriptions.asn",
"asn1/patched/vam-ts103300_3/cdd/ETSI-ITS-CDD.asn",
@@ -268,5 +285,125 @@
"console": "integratedTerminal",
"justMyCode": true
},
+ {
+ "name": "MAPEM TS (coding)",
+ "preLaunchTask": "Patch ASN.1 files",
+ "type": "debugpy",
+ "request": "launch",
+ "program": "utils/codegen/asn1ToC/asn1ToC.py",
+ "args": [
+ "asn1/raw/is_ts103301/MAPEM-PDU-Descriptions.asn",
+ "asn1/raw/is_ts103301/cdd/ITS-Container.asn",
+ "asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn",
+ "asn1/raw/is_ts103301/build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn",
+ "asn1/patched/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn",
+ "-t",
+ "mapem_ts",
+ "-o",
+ "etsi_its_coding/etsi_its_mapem_ts_coding"
+ ],
+ "console": "integratedTerminal",
+ "justMyCode": true
+ },
+ {
+ "name": "MAPEM TS (msgs)",
+ "preLaunchTask": "Patch ASN.1 files",
+ "type": "debugpy",
+ "request": "launch",
+ "program": "utils/codegen/codegen-py/asn1ToRosMsg.py",
+ "args": [
+ "asn1/raw/is_ts103301/MAPEM-PDU-Descriptions.asn",
+ "asn1/raw/is_ts103301/cdd/ITS-Container.asn",
+ "asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn",
+ "asn1/raw/is_ts103301/build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn",
+ "asn1/patched/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn",
+ "-t",
+ "mapem_ts",
+ "-o",
+ "etsi_its_msgs/etsi_its_mapem_ts_msgs/msg"
+ ],
+ "console": "integratedTerminal",
+ "justMyCode": true
+ },
+ {
+ "name": "MAPEM TS (conversion)",
+ "preLaunchTask": "Patch ASN.1 files",
+ "type": "debugpy",
+ "request": "launch",
+ "program": "utils/codegen/codegen-py/asn1ToConversionHeader.py",
+ "args": [
+ "asn1/raw/is_ts103301/MAPEM-PDU-Descriptions.asn",
+ "asn1/raw/is_ts103301/cdd/ITS-Container.asn",
+ "asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn",
+ "asn1/raw/is_ts103301/build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn",
+ "asn1/patched/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn",
+ "-t",
+ "mapem_ts",
+ "-o",
+ "etsi_its_conversion/etsi_its_mapem_ts_conversion/include/etsi_its_mapem_ts_conversion"
+ ],
+ "console": "integratedTerminal",
+ "justMyCode": true
+ },
+ {
+ "name": "SPATEM TS (coding)",
+ "preLaunchTask": "Patch ASN.1 files",
+ "type": "debugpy",
+ "request": "launch",
+ "program": "utils/codegen/asn1ToC/asn1ToC.py",
+ "args": [
+ "asn1/raw/is_ts103301/SPATEM-PDU-Descriptions.asn",
+ "asn1/raw/is_ts103301/cdd/ITS-Container.asn",
+ "asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn",
+ "asn1/raw/is_ts103301/build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn",
+ "asn1/patched/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn",
+ "-t",
+ "spatem_ts",
+ "-o",
+ "etsi_its_coding/etsi_its_spatem_ts_coding"
+ ],
+ "console": "integratedTerminal",
+ "justMyCode": true
+ },
+ {
+ "name": "SPATEM TS (msgs)",
+ "preLaunchTask": "Patch ASN.1 files",
+ "type": "debugpy",
+ "request": "launch",
+ "program": "utils/codegen/codegen-py/asn1ToRosMsg.py",
+ "args": [
+ "asn1/raw/is_ts103301/SPATEM-PDU-Descriptions.asn",
+ "asn1/raw/is_ts103301/cdd/ITS-Container.asn",
+ "asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn",
+ "asn1/raw/is_ts103301/build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn",
+ "asn1/patched/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn",
+ "-t",
+ "spatem_ts",
+ "-o",
+ "etsi_its_msgs/etsi_its_spatem_ts_msgs/msg"
+ ],
+ "console": "integratedTerminal",
+ "justMyCode": true
+ },
+ {
+ "name": "SPATEM TS (conversion)",
+ "preLaunchTask": "Patch ASN.1 files",
+ "type": "debugpy",
+ "request": "launch",
+ "program": "utils/codegen/codegen-py/asn1ToConversionHeader.py",
+ "args": [
+ "asn1/raw/is_ts103301/SPATEM-PDU-Descriptions.asn",
+ "asn1/raw/is_ts103301/cdd/ITS-Container.asn",
+ "asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn",
+ "asn1/raw/is_ts103301/build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn",
+ "asn1/patched/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn",
+ "-t",
+ "spatem_ts",
+ "-o",
+ "etsi_its_conversion/etsi_its_spatem_ts_conversion/include/etsi_its_spatem_ts_conversion"
+ ],
+ "console": "integratedTerminal",
+ "justMyCode": true
+ },
]
}
\ No newline at end of file
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index fb85994ca..b4e77dc4e 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -1,10 +1,17 @@
{
"version": "2.0.0",
"tasks": [
+ {
+ "label": "Download external dependencies",
+ "type": "shell",
+ "command": "./asn1/external/download.sh",
+ "problemMatcher": []
+ },
{
"label": "Patch ASN.1 files",
"type": "shell",
"command": "./asn1/patches/patch.sh",
+ "dependsOn": ["Download external dependencies"],
"problemMatcher": []
}
]
diff --git a/README.md b/README.md
index bc6ef6740..1e528f63c 100644
--- a/README.md
+++ b/README.md
@@ -7,8 +7,8 @@
-
-
+
+
**ROS / ROS 2 Support for ETSI ITS Messages for V2X Communication**
@@ -54,15 +54,19 @@ During runtime, the `etsi_its_conversion` ROS node converts incoming UDP payload
| Status | Acronym | Name | EN Specification | TS Specification |
| --- | --- | --- | --- | --- |
| :white_check_mark: | CAM | Cooperative Awareness Message | [EN 302 637-2 V1.4.1](https://www.etsi.org/deliver/etsi_en/302600_302699/30263702/01.04.01_60/en_30263702v010401p.pdf) ([ASN.1](https://forge.etsi.org/rep/ITS/asn1/cam_en302637_2)) | [TS 103 900 V2.1.1](https://www.etsi.org/deliver/etsi_ts/103900_103999/103900/02.01.01_60/ts_103900v020101p.pdf) ([ASN.1](https://forge.etsi.org/rep/ITS/asn1/cam_ts103900)) |
-| :white_check_mark: | DENM | Decentralized Environmental Notification Message | [EN 302 637-3 V1.3.1](https://www.etsi.org/deliver/etsi_en/302600_302699/30263703/01.03.01_60/en_30263703v010301p.pdf) ([ASN.1](https://forge.etsi.org/rep/ITS/asn1/denm_en302637_3)) | - |
| :white_check_mark: | CPM | Collective Perception Message | - | [TS 103 324 V2.1.1](https://www.etsi.org/deliver/etsi_ts/103300_103399/103324/02.01.01_60/ts_103324v020101p.pdf) ([ASN.1](https://forge.etsi.org/rep/ITS/asn1/cpm_ts103324)) |
+| :white_check_mark: | DENM | Decentralized Environmental Notification Message | [EN 302 637-3 V1.3.1](https://www.etsi.org/deliver/etsi_en/302600_302699/30263703/01.03.01_60/en_30263703v010301p.pdf) ([ASN.1](https://forge.etsi.org/rep/ITS/asn1/denm_en302637_3)) | - |
+| :white_check_mark: | MAPEM | Map Extended Message | - | [TS 103 301 V2.1.1](https://www.etsi.org/deliver/etsi_ts/103300_103399/103301/02.01.01_60/ts_103301v020101p.pdf) ([ASN.1](https://forge.etsi.org/rep/ITS/asn1/is_ts103301/-/tree/v2.1.1?ref_type=tags)) |
+| :white_check_mark: | SPATEM | Signal Phase and Timing Extended Message | - | [TS 103 301 V2.1.1](https://www.etsi.org/deliver/etsi_ts/103300_103399/103301/02.01.01_60/ts_103301v020101p.pdf) ([ASN.1](https://forge.etsi.org/rep/ITS/asn1/is_ts103301/-/tree/v2.1.1?ref_type=tags)) |
| :white_check_mark: | VAM | VRU Awareness Message | - | [TS 103 300-3 V2.2.1](https://www.etsi.org/deliver/etsi_ts/103300_103399/10330003/02.02.01_60/ts_10330003v020201p.pdf) ([ASN.1](https://forge.etsi.org/rep/ITS/asn1/vam-ts103300_3)) |
-| :soon: | MAPEM | Map Extended Message | - | - | - |
-| :soon: | SPATEM | Signal Phase and Timing Extended Message | - | - | - |
> [!NOTE]
> Message types that are standardized as *European Norms (EN)* are available as, e.g., `etsi_its_cam_msgs`. New message types or revisions of existing message types that are only specified in *Technical Specifications (TS)* are available as, e.g., `etsi_its_cpm_ts_msgs`.
+> [!WARNING]
+> **Limitations**
+> - `RegionalExtension` (defined in [`ISO-TS-19091-addgrp-C-2018.asn`](https://standards.iso.org/iso/ts/19091/ed-2/en/ISO-TS-19091-addgrp-C-2018.asn)) is not covered in ROS-equivalents of MAPEM and SPATEM messages
+
## Packages
@@ -74,6 +78,8 @@ etsi_its_messages
│ ├── etsi_its_cam_ts_coding
│ ├── etsi_its_cpm_ts_coding
│ ├── etsi_its_denm_coding
+│ ├── etsi_its_mapem_ts_coding
+│ ├── etsi_its_spatem_ts_coding
│ └── etsi_its_vam_ts_coding
├── etsi_its_conversion
│ ├── etsi_its_conversion # conversion node depending on all conversion packages
@@ -81,7 +87,9 @@ etsi_its_messages
│ ├── etsi_its_cam_ts_conversion
│ ├── etsi_its_cpm_ts_conversion
│ ├── etsi_its_denm_conversion
+│ ├── etsi_its_mapem_ts_conversion
│ ├── etsi_its_primitives_conversion
+│ ├── etsi_its_spatem_ts_conversion
│ └── etsi_its_vam_ts_conversion
├── etsi_its_messages # metapackage including all others
├── etsi_its_msgs
@@ -90,6 +98,8 @@ etsi_its_messages
│ ├── etsi_its_cam_ts_msgs
│ ├── etsi_its_cpm_ts_msgs
│ ├── etsi_its_denm_msgs
+│ ├── etsi_its_mapem_ts_msgs
+│ ├── etsi_its_spatem_ts_msgs
│ └── etsi_its_vam_ts_msgs
├── etsi_its_msgs_utils
└── etsi_its_rviz_plugins
@@ -149,12 +159,12 @@ The conversion node bridges all ETSI ITS message types at the same time in both
# ROS 2
ros2 launch etsi_its_conversion converter.launch.py
# or
-ros2 run etsi_its_conversion etsi_its_conversion_node --ros-args -p etsi_types:=[cam,cpm_ts,denm] -p has_btp_destination_port:=true -p btp_destination_port_offset:=8 -p etsi_message_payload_offset:=78
+ros2 run etsi_its_conversion etsi_its_conversion_node --ros-args -p etsi_types:=[cam,cpm_ts,denm,mapem_ts,spatem_ts,vam_ts] -p has_btp_destination_port:=true -p btp_destination_port_offset:=8 -p etsi_message_payload_offset:=78
# ROS
roslaunch etsi_its_conversion converter.ros1.launch
# or
-rosrun nodelet nodelet standalone etsi_its_conversion/Converter _etsi_types:=[cam,cpm_ts,denm] _has_btp_destination_port:=true _btp_destination_port_offset:=8 _etsi_message_payload_offset:=78
+rosrun nodelet nodelet standalone etsi_its_conversion/Converter _etsi_types:=[cam,cpm_ts,denm,mapem_ts,spatem_ts,vam_ts] _has_btp_destination_port:=true _btp_destination_port_offset:=8 _etsi_message_payload_offset:=78
```
#### Subscribed Topics
@@ -166,6 +176,8 @@ rosrun nodelet nodelet standalone etsi_its_conversion/Converter _etsi_types:=[ca
| `~/cam_ts/in` | `etsi_its_cam_ts_msgs/msg/CAM` | CAM (TS) for conversion to UDP |
| `~/cpm_ts/in` | `etsi_its_cpm_ts_msgs/msg/CollectivePerceptionMessage` | CPM for conversion to UDP |
| `~/denm/in` | `etsi_its_denm_msgs/msg/DENM` | DENM for conversion to UDP |
+| `~/mapem_ts/in` | `etsi_its_mapem_ts_msgs/msg/MAPEM` | MAPEM (TS) for conversion to UDP |
+| `~/spatem_ts/in` | `etsi_its_spatem_ts_msgs/msg/SPATEM` | SPATEM (TS) for conversion to UDP |
| `~/vam_ts/in` | `etsi_its_vam_ts_msgs/msg/VAM` | VAM (TS) for conversion to UDP |
#### Published Topics
@@ -177,6 +189,8 @@ rosrun nodelet nodelet standalone etsi_its_conversion/Converter _etsi_types:=[ca
| `~/cam_ts/out` | `etsi_its_cam_ts_msgs/msg/CAM` | CAM (TS) converted from UDP payload |
| `~/cpm_ts/out` | `etsi_its_cpm_ts_msgs/msg/CollectivePerceptionMessage` | CPM converted from UDP payload |
| `~/denm/out` | `etsi_its_denm_msgs/msg/DENM` | DENM converted from UDP payload |
+| `~/mapem_ts/out` | `etsi_its_mapem_ts_msgs/msg/MAPEM` | MAPEM (TS) converted from UDP payload |
+| `~/spatem_ts/out` | `etsi_its_spatem_ts_msgs/msg/SPATEM` | SPATEM (TS) converted from UDP payload |
| `~/vam_ts/out` | `etsi_its_vam_ts_msgs/msg/VAM` | VAM (TS) converted from UDP payload |
#### Parameters
@@ -186,8 +200,8 @@ rosrun nodelet nodelet standalone etsi_its_conversion/Converter _etsi_types:=[ca
| `has_btp_destination_port` | `bool` | whether incoming/outgoing UDP messages include a [2-byte BTP destination port](https://www.etsi.org/deliver/etsi_en/302600_302699/3026360501/02.01.00_20/en_3026360501v020100a.pdf) |
| `btp_destination_port_offset` | `int` | number of bytes before an optional 2-byte BTP destination port, see `has_btp_destination_port` (always `0` in outgoing UDP payload) |
| `etsi_message_payload_offset` | `int` | number of bytes before actual ETSI message payload (always `0` or `4` (if `has_btp_destination_port`) in outgoing UDP payload) |
-| `ros2udp_etsi_types` | `string[]` | list of ETSI types to convert from `etsi_its_msgs` to `udp_msgs` (defaults to all norms and specifications of all possible ETSI types) | `cam`, `cam_ts`, `cpm_ts`, `denm`, `vam_ts` |
-| `udp2ros_etsi_types` | `string[]` | list of ETSI types to convert from `udp_msgs` to `etsi_its_msgs` (defaults only to the norm or specification of all possible ETSI types) | `cam`, `cam_ts`, `cpm_ts`, `denm`, `vam_ts` |
+| `ros2udp_etsi_types` | `string[]` | list of ETSI types to convert from `etsi_its_msgs` to `udp_msgs` (defaults to all norms and specifications of all possible ETSI types) | `cam`, `cam_ts`, `cpm_ts`, `denm`, `mapem_ts`, `spatem_ts`, `vam_ts` |
+| `udp2ros_etsi_types` | `string[]` | list of ETSI types to convert from `udp_msgs` to `etsi_its_msgs` (defaults only to the norm or specification of all possible ETSI types) | `cam`, `cam_ts`, `cpm_ts`, `denm`, `mapem_ts`, `spatem_ts`, `vam_ts` |
| `subscriber_queue_size` | `int` | queue size for incoming ROS messages |
| `publisher_queue_size` | `int` | queue size for outgoing ROS messages |
| `check_constraints_before_encoding` | `bool` | whether an asn constraint check should be performed before encoding using asn1c's `asn_check_constraints` function (setting to `true` could lead to segmentation faults because of infinite recursion; [known asn1c issue](https://github.com/vlm/asn1c/issues/410)) |
@@ -248,7 +262,9 @@ cam.cam.cam_parameters.high_frequency_container.basic_vehicle_container_high_fre
> [!NOTE]
> This section is only relevant if you would like to (re-)run the code generation for ROS support based on ASN.1 definitions. If you only wish to use the supported message types in ROS, see [Installation](#installation) and [Conversion Node](#conversion-node).
-A given ASN.1 definition is used to generate corresponding C-structures, ROS message definitions, as well as conversion functions between those two formats. The raw ASN.1 definitions of the supported message types are included as Git submodules in the [`asn1/raw` subdirectory](./asn1/raw/). Make sure to clone recursively or initialize the submodules after cloning (`git submodule update --init --recursive`). Note that some of these definitions need to be patched before code generation by running [`./asn1/patches/patch.sh`](./asn1/patches/patch.sh).
+A given ASN.1 definition is used to generate corresponding C-structures, ROS message definitions, as well as conversion functions between those two formats. The raw ASN.1 definitions of the supported message types are included as Git submodules in the [`asn1/raw` subdirectory](./asn1/raw/). Make sure to clone recursively or initialize the submodules after cloning (`git submodule update --init --recursive`). Note that some of these definitions need to be downloaded and patched before code generation by running [`./asn1/external/download.sh`](./asn1/external/download.sh) and [`./asn1/patches/patch.sh`](./asn1/patches/patch.sh).
+
+The [currently used code generation tool is Python-based](./utils/codegen/codegen-py/). There is also an [alternative Rust-based implementation](./utils/codegen/codegen-rust/) that is currently not maintained anymore (added in #17, replaced again in #28, #48), but kept for reference.
If you would like to re-run the generation of supported message types, we recommend to use the [*VS Code* debugging configurations](https://code.visualstudio.com/docs/editor/debugging) pre-configured in [`.vscode/launch.json`](./.vscode/launch.json). All script calls defined there can obviously also run outside of *VS Code*. Note that *Python* and *Docker* are required for code generation.
diff --git a/asn1/external/download.sh b/asn1/external/download.sh
new file mode 100755
index 000000000..df166a7fa
--- /dev/null
+++ b/asn1/external/download.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+patches_dir="$(dirname "$(readlink -f "$0")")"
+repos_dir="$(dirname "$patches_dir")/raw"
+
+# is_ts103301
+cd "$repos_dir/is_ts103301"
+sed "s/asn1c -D.*/exit 0/g" syntax_check.bash | bash
+cd -
diff --git a/asn1/patches/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn.patch b/asn1/patches/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn.patch
new file mode 100644
index 000000000..96f877d61
--- /dev/null
+++ b/asn1/patches/is_ts103301/build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn.patch
@@ -0,0 +1,22 @@
+diff --git a/ISO14816_AVIAEINumberingAndDataStructures.asn b/ISO14816_AVIAEINumberingAndDataStructures.asn
+index 88d0ad1..22f2e4c 100644
+--- a/ISO14816_AVIAEINumberingAndDataStructures.asn
++++ b/ISO14816_AVIAEINumberingAndDataStructures.asn
+@@ -79,8 +79,8 @@ ServiceNumber::= BIT STRING (SIZE(32))(CONTAINING INTEGER (0..4294967295))
+ TaxCode::= OCTET STRING
+
+ AlphabetIndicator::= INTEGER {
+- latinAlphabetNo1 (0), -- encoded as 00 00 00’B
+- latinAlphabetNo2 (1), -- encoded as 00 00 01’B etc
++ latinAlphabetNo1 (0), -- encoded as 00 00 00 B
++ latinAlphabetNo2 (1), -- encoded as 00 00 01 B etc
+ latinAlphabetNo3 (2),
+ latinAlphabetNo4 (3),
+ latinCyrillicAlphabet (4),
+@@ -127,4 +127,4 @@ END
+ /*
+ The ASN.1 specification has been checked for conformance to the ASN.1
+ standards by OSS ASN.1 Studio
+-*/
+\ No newline at end of file
++*/
diff --git a/asn1/patches/patch.sh b/asn1/patches/patch.sh
index 821761ef6..679f64162 100755
--- a/asn1/patches/patch.sh
+++ b/asn1/patches/patch.sh
@@ -8,17 +8,25 @@ echo "Finding .patch files in '$patches_dir' to apply to repositories in '$repos
# loop over all .patch files in the patches directory
find "$patches_dir" -type f -name "*.patch" | while read -r patch_file; do
- # find the original repository path and apply the patch
+ # find the original repository path
relative_path="$(dirname ${patch_file#$patches_dir/})"
repo_path="$repos_dir/$relative_path"
file_to_patch="$repo_path/$(basename ${patch_file%.patch})"
- git -C "$repo_path" apply "$patch_file"
- # copy the file to the patched directory and reverse the patch
+ # copy file to patch to temporary git repository
+ tmp_repo_path="$(mktemp -d)"
+ tmp_file_to_patch="$tmp_repo_path/$(basename ${patch_file%.patch})"
+ cp -r "$repo_path"/* "$tmp_repo_path"
+ git -C "$tmp_repo_path" init --quiet
+
+ # apply the patch
+ git -C "$tmp_repo_path" apply "$patch_file"
+
+ # move patched file to the patched directory
patched_path="$patched_dir/$relative_path"
patched_file="$patched_path/$(basename ${patch_file%.patch})"
mkdir -p "$patched_path"
- cp "$file_to_patch" "$patched_file"
- git -C "$repo_path" apply --reverse --whitespace=nowarn "$patch_file"
+ mv "$tmp_file_to_patch" "$patched_file"
+
echo " Patched '$file_to_patch' and saved to '$patched_file'"
done
diff --git a/asn1/raw/is_ts103301/.gitmodules b/asn1/raw/is_ts103301/.gitmodules
new file mode 100644
index 000000000..d6f28caa9
--- /dev/null
+++ b/asn1/raw/is_ts103301/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "cdd"]
+ path = cdd
+ url = https://forge.etsi.org/rep/ITS/asn1/cdd_ts102894_2.git
diff --git a/asn1/raw/is_ts103301/Dockerfile b/asn1/raw/is_ts103301/Dockerfile
new file mode 100644
index 000000000..a79646b88
--- /dev/null
+++ b/asn1/raw/is_ts103301/Dockerfile
@@ -0,0 +1,19 @@
+FROM ubuntu:bionic
+
+WORKDIR /home/etsi-its-asn1
+
+RUN apt update
+RUN apt install -y git build-essential automake libtool wget sed
+
+RUN git -C /home/etsi-its-asn1 clone https://github.com/brchiu/asn1c.git -n asn1c
+RUN git -C /home/etsi-its-asn1/asn1c checkout velichkov_s1ap_plus_option_group_plus_adding_trailing_ull
+RUN git -C /home/etsi-its-asn1/asn1c status -v
+
+RUN ( cd /home/etsi-its-asn1/asn1c ; autoreconf -iv ; ./configure --prefix=/usr )
+RUN make -C /home/etsi-its-asn1/asn1c
+RUN make -C /home/etsi-its-asn1/asn1c install
+RUN rm -rf /home/etsi-its-asn1/asn1c
+
+WORKDIR /home/etsi-its-asn1
+
+CMD ./syntax_check.bash
diff --git a/asn1/raw/is_ts103301/IVIM-PDU-Descriptions.asn b/asn1/raw/is_ts103301/IVIM-PDU-Descriptions.asn
new file mode 100755
index 000000000..fafdc1f82
--- /dev/null
+++ b/asn1/raw/is_ts103301/IVIM-PDU-Descriptions.asn
@@ -0,0 +1,40 @@
+-- @brief Specification of the In vehicle information Message ETSI TS 103 301
+-- Latest version available at @url https://forge.etsi.org/rep/ITS/asn1/is_ts103301.git
+
+IVIM-PDU-Descriptions {
+ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts103301 (103301) ivim (2) version2 (2)
+}
+
+DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+
+-- @brief Include ISO 19321
+-- Include references from @url https://standards.iso.org/iso/ts/19321/ed-2/en/ISO19321IVIv2.asn
+IviStructure
+FROM IVI { iso (1) standard (0) ivi (19321) version2 (2) }
+
+-- @brief Include ETSI TS 102 894-2
+-- Include references from @url https://forge.etsi.org/rep/ITS/ITS_ASN1/blob/master/CDD_TS102894-2/ITS-Container.asn
+ItsPduHeader
+FROM ITS-Container { itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (2)};
+
+-- In vehicle information Message Message
+
+-- @brief In vehicle information Message Root
+-- This DF includes DEs for the IVIM protocolVersion, the IVI message type identifier _messageID_,
+-- the station identifier _stationID_ of the originating ITS-S and the IVI data from ISO TS 19321.
+IVIM ::= SEQUENCE {
+ -- @details header
+ -- The DE _protocolVersion_ is used to select the appropriate protocol decoder at the receiving ITS-S.
+ -- It shall be set to 2.
+ -- The DE _messageID_ shall be ivim(6).
+ header ItsPduHeader,
+ -- @details ivi
+ -- The DE _ivi_ contains the IVI data as defined in ISO TS 19321.
+ ivi IviStructure
+}
+
+END
diff --git a/asn1/raw/is_ts103301/LICENSE b/asn1/raw/is_ts103301/LICENSE
new file mode 100755
index 000000000..4436d6da4
--- /dev/null
+++ b/asn1/raw/is_ts103301/LICENSE
@@ -0,0 +1,23 @@
+Copyright 2019 ETSI
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+3. Neither the name of the copyright holder nor the names of its contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff --git a/asn1/raw/is_ts103301/MAPEM-PDU-Descriptions.asn b/asn1/raw/is_ts103301/MAPEM-PDU-Descriptions.asn
new file mode 100755
index 000000000..9c5fdb304
--- /dev/null
+++ b/asn1/raw/is_ts103301/MAPEM-PDU-Descriptions.asn
@@ -0,0 +1,39 @@
+-- @brief Specification of the Map (lane topology) extended Message ETSI TS 103 301
+-- Latest version available at @url https://forge.etsi.org/rep/ITS/asn1/is_ts103301.git
+
+MAPEM-PDU-Descriptions {
+ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts103301 (103301) mapem (1) version2 (2)
+}
+
+DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+
+-- @brief Include ISO TS 19091
+-- Include references from @url https://standards.iso.org/iso/ts/19091/ed-2/en/ISO-TS-19091-addgrp-C-2018.asn
+MapData FROM DSRC { iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) version2 (2) }
+
+-- @brief Include ETSI TS 102 894-2
+-- Include references from @url https://forge.etsi.org/rep/ITS/ITS_ASN1/blob/master/CDD_TS102894-2/ITS-Container.asn
+ItsPduHeader
+FROM ITS-Container { itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (2)};
+
+-- Map (lane topology) extended Message
+
+-- @brief Map (lane topology) extended Message Root
+-- This DF includes DEs for the MAPEM: protocolVersion, the MAPEM message type identifier _messageID_,
+-- the station identifier _stationID_ of the originating ITS-S and the Map data from ISO TS 19091.
+MAPEM ::= SEQUENCE {
+ -- @details header
+ -- The DE _protocolVersion_ is used to select the appropriate protocol decoder at the receiving ITS-S.
+ -- It shall be set to 2.
+ -- The DE _messageID_ shall be mapem(5).
+ header ItsPduHeader,
+ -- @details map
+ -- The DE _map_ contains the MAP data as defined in ISO TS 19091.
+ map MapData
+}
+
+END
diff --git a/asn1/raw/is_ts103301/README.md b/asn1/raw/is_ts103301/README.md
new file mode 100644
index 000000000..686c771f4
--- /dev/null
+++ b/asn1/raw/is_ts103301/README.md
@@ -0,0 +1,30 @@
+# Abstract syntax notation module for ETSI TS 103 301
+
+These modules will be published as a part of delivery **[ETSI TS 103 301 v2.1.1](https://www.etsi.org/deliver/etsi_ts/103300_103399/103301/01.02.01_60/ts_103301v010201p.pdf) (2021-??)**
+
+## License
+
+The content of this repository and the files contained are released under the BSD-3-Clause license.
+
+See the attached LICENSE file or visit https://forge.etsi.org/legal-matters.
+
+## Dependencies
+
+* The **[ITS-Container](https://forge.etsi.org/rep/ITS/asn1/cdd_ts102894_2)** module from **[ETSI TS 102 894-2 v1.3.1](https://www.etsi.org/deliver/etsi_ts/102800_102899/10289402/01.03.01_60/ts_10289402v010301p.pdf)**: "Intelligent Transport Systems (ITS); Users and applications requirements; Part 2: Applications and facilities layer common data dictionary".
+* The **[DSRC](https://standards.iso.org/iso/ts/19091/ed-2/en)** module from **CEN ISO/TS 19091-2018**: "Intelligent transport systems - Cooperative ITS - Using V2I and I2V communications for applications related to signalized intersections".
+* The **[IVI](https://standards.iso.org/iso/ts/19321/ed-2/en/)** module from **CEN ISO/TS 19321-2020**: "Intelligent transport systems - Cooperative ITS - Dictionary of in-vehicle information (IVI) data structures".
+
+
+## Syntax check
+
+The correctness of these ASN.1 files can be verified using the bash script **syntax_check.bash**
+
+See the notes in this script for further details.
+
+For convenience a Dockerfile is available that might be useful for this.
+
+```
+Usage:
+ >docker build -t etsi-its-asn-is:2.1.1 .
+ >docker run -v `pwd`:/home/etsi-its-asn1 etsi-its-asn-is:2.1.1
+```
diff --git a/asn1/raw/is_ts103301/RTCMEM-PDU-Descriptions.asn b/asn1/raw/is_ts103301/RTCMEM-PDU-Descriptions.asn
new file mode 100755
index 000000000..ef2db78e2
--- /dev/null
+++ b/asn1/raw/is_ts103301/RTCMEM-PDU-Descriptions.asn
@@ -0,0 +1,40 @@
+-- @brief Specification of the RTCM corrections extended Message ETSI TS 103 301
+-- Latest version available at @url https://forge.etsi.org/rep/ITS/asn1/is_ts103301.git
+
+RTCMEM-PDU-Descriptions {
+ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts103301 (103301) rtcmem (5) version1 (1)
+}
+
+DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+
+-- @brief Include ISO 19091
+-- Include references from @url https://standards.iso.org/iso/ts/19091/ed-2/en/ISO-TS-19091-addgrp-C-2018.asn
+RTCMcorrections
+FROM DSRC { iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) version2 (2) }
+
+-- @brief Include ETSI TS 102 894-2
+-- Include references from @url https://forge.etsi.org/rep/ITS/ITS_ASN1/blob/master/CDD_TS102894-2/ITS-Container.asn
+ItsPduHeader
+FROM ITS-Container { itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (2)};
+
+-- RTCM corrections extended extended Message
+
+-- @brief RTCM corrections extended extended Message Root
+-- This DF includes DEs for the RTCMEM: protocolVersion, the RTCMEM message type identifier _messageID_,
+-- the station identifier _stationID_ of the originating ITS-S and the RTCM corrections as os ISO TS 19091.
+RTCMEM ::= SEQUENCE {
+ -- @details header
+ -- The DE _protocolVersion_ is used to select the appropriate protocol decoder at the receiving ITS-S.
+ -- It shall be set to 1.
+ -- The DE _messageID_ shall be rtcmem(13).
+ header ItsPduHeader,
+ -- @details rtcmc
+ -- The DE _rtcmc_ contains the RTCM corrections data as defined in ISO TS 19091.
+ rtcmc RTCMcorrections
+}
+
+END
diff --git a/asn1/raw/is_ts103301/SPATEM-PDU-Descriptions.asn b/asn1/raw/is_ts103301/SPATEM-PDU-Descriptions.asn
new file mode 100755
index 000000000..b933c5ecb
--- /dev/null
+++ b/asn1/raw/is_ts103301/SPATEM-PDU-Descriptions.asn
@@ -0,0 +1,40 @@
+-- @brief Specification of the Signal phase and timing extended Message ETSI TS 103 301
+-- Latest version available at @url https://forge.etsi.org/rep/ITS/asn1/is_ts103301.git
+
+SPATEM-PDU-Descriptions {
+ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts103301 (103301) spatem (0) version2 (2)
+}
+
+DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+
+-- @brief Include ISO TS 19091
+-- Include references from @url https://standards.iso.org/iso/ts/19091/ed-2/en/ISO-TS-19091-addgrp-C-2018.asn
+SPAT
+FROM DSRC { iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) version2 (2) }
+
+-- @brief Include ETSI TS 102 894-2
+-- Include references from @url https://forge.etsi.org/rep/ITS/ITS_ASN1/blob/master/CDD_TS102894-2/ITS-Container.asn
+ItsPduHeader
+FROM ITS-Container { itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (2) };
+
+-- Signal phase and timing extended Message
+
+-- @brief Signal phase and timing extended Message Root
+-- This DF includes DEs for the SPATEM: protocolVersion, the SPATEM message type identifier _messageID_,
+-- the station identifier _stationID_ of the originating ITS-S and the SPaT data from ISO TS 19091.
+SPATEM ::= SEQUENCE {
+ -- @details header
+ -- The DE _protocolVersion_ is used to select the appropriate protocol decoder at the receiving ITS-S.
+ -- It shall be set to 2.
+ -- The DE _messageID_ shall be spatem(4).
+ header ItsPduHeader,
+ -- @details spat
+ -- The DE _spat_ contains the SPaT data as defined in ISO TS 19091.
+ spat SPAT
+}
+
+END
diff --git a/asn1/raw/is_ts103301/SREM-PDU-Descriptions.asn b/asn1/raw/is_ts103301/SREM-PDU-Descriptions.asn
new file mode 100755
index 000000000..aa4570d95
--- /dev/null
+++ b/asn1/raw/is_ts103301/SREM-PDU-Descriptions.asn
@@ -0,0 +1,40 @@
+-- @brief Specification of the Signal request extended Message ETSI TS 103 301
+-- Latest version available at @url https://forge.etsi.org/rep/ITS/asn1/is_ts103301.git
+
+SREM-PDU-Descriptions {
+ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts103301 (103301) srem (3) version2 (2)
+}
+
+DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+
+-- @brief Include ISO 19091
+-- Include references from @url https://standards.iso.org/iso/ts/19091/ed-2/en/ISO-TS-19091-addgrp-C-2018.asn
+SignalRequestMessage
+FROM DSRC { iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) version2 (2) }
+
+-- @brief Include ETSI TS 102 894-2
+-- Include references from @url https://forge.etsi.org/rep/ITS/ITS_ASN1/blob/master/CDD_TS102894-2/ITS-Container.asn
+ItsPduHeader
+FROM ITS-Container { itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (2)};
+
+-- Signal request extended Message Message
+
+-- @brief Signal request extended Message Root
+-- This DF includes DEs for the SREM: protocolVersion, the SREM message type identifier _messageID_,
+-- the station identifier _stationID_ of the originating ITS-S and the signal request data ISO TS 19091.
+SREM ::= SEQUENCE {
+ -- @details header
+ -- The DE _protocolVersion_ is used to select the appropriate protocol decoder at the receiving ITS-S.
+ -- It shall be set to 2.
+ -- The DE _messageID_ shall be srem(9).
+ header ItsPduHeader,
+ -- @details srm
+ -- The DE _srm_ contains the Signal request data as defined in ISO TS 19091.
+ srm SignalRequestMessage
+}
+
+END
diff --git a/asn1/raw/is_ts103301/SSEM-PDU-Descriptions.asn b/asn1/raw/is_ts103301/SSEM-PDU-Descriptions.asn
new file mode 100755
index 000000000..f70cb18cb
--- /dev/null
+++ b/asn1/raw/is_ts103301/SSEM-PDU-Descriptions.asn
@@ -0,0 +1,40 @@
+-- @brief Specification of the Signal status extended Message ETSI TS 103 301
+-- Latest version available at @url https://forge.etsi.org/rep/ITS/asn1/is_ts103301.git
+
+SSEM-PDU-Descriptions {
+ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts103301 (103301) ssem (4) version2 (2)
+}
+
+DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+
+-- @brief Include ISO 19091
+-- Include references from @url https://standards.iso.org/iso/ts/19091/ed-2/en/ISO-TS-19091-addgrp-C-2018.asn
+SignalStatusMessage
+FROM DSRC { iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) version2 (2) }
+
+-- @brief Include ETSI TS 102 894-2
+-- Include references from @url https://forge.etsi.org/rep/ITS/ITS_ASN1/blob/master/CDD_TS102894-2/ITS-Container.asn
+ItsPduHeader
+FROM ITS-Container { itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (2)};
+
+-- Signal status extended Message
+
+-- @brief Signal status extended Message Root
+-- This DF includes DEs for the SSEM: protocolVersion, the SSEM message type identifier _messageID_ and
+-- the station identifier _stationID_ of the originating ITS-S and the signal status data ISO TS 19091.
+SSEM ::= SEQUENCE {
+ -- @details header
+ -- The DE _protocolVersion_ is used to select the appropriate protocol decoder at the receiving ITS-S.
+ -- It shall be set to 2.
+ -- The DE _messageID_ shall be ssem(10).
+ header ItsPduHeader,
+ -- @details ssm
+ -- The DE _ssm_ contains the Signal status data as defined in ISO TS 19091.
+ ssm SignalStatusMessage
+}
+
+END
diff --git a/asn1/raw/is_ts103301/cdd/ITS-Container.asn b/asn1/raw/is_ts103301/cdd/ITS-Container.asn
new file mode 100755
index 000000000..4cac5e5c9
--- /dev/null
+++ b/asn1/raw/is_ts103301/cdd/ITS-Container.asn
@@ -0,0 +1,511 @@
+ITS-Container {
+itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (2)
+}
+
+DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+ItsPduHeader ::= SEQUENCE {
+ protocolVersion INTEGER (0..255),
+ messageID INTEGER{ denm(1), cam(2), poi(3), spatem(4), mapem(5), ivim(6), ev-rsr(7), tistpgtransaction(8), srem(9), ssem(10), evcsn(11), saem(12), rtcmem(13) } (0..255), -- Mantis #7209, #7005
+ stationID StationID
+}
+
+StationID ::= INTEGER(0..4294967295)
+
+ReferencePosition ::= SEQUENCE {
+ latitude Latitude,
+ longitude Longitude,
+ positionConfidenceEllipse PosConfidenceEllipse ,
+ altitude Altitude
+}
+
+DeltaReferencePosition ::= SEQUENCE {
+ deltaLatitude DeltaLatitude,
+ deltaLongitude DeltaLongitude,
+ deltaAltitude DeltaAltitude
+}
+
+Longitude ::= INTEGER {oneMicrodegreeEast (10), oneMicrodegreeWest (-10), unavailable(1800000001)} (-1800000000..1800000001)
+
+Latitude ::= INTEGER {oneMicrodegreeNorth (10), oneMicrodegreeSouth (-10), unavailable(900000001)} (-900000000..900000001)
+
+Altitude ::= SEQUENCE {
+ altitudeValue AltitudeValue,
+ altitudeConfidence AltitudeConfidence
+}
+
+AltitudeValue ::= INTEGER {referenceEllipsoidSurface(0), oneCentimeter(1), unavailable(800001)} (-100000..800001)
+
+AltitudeConfidence ::= ENUMERATED {
+ alt-000-01 (0),
+ alt-000-02 (1),
+ alt-000-05 (2),
+ alt-000-10 (3),
+ alt-000-20 (4),
+ alt-000-50 (5),
+ alt-001-00 (6),
+ alt-002-00 (7),
+ alt-005-00 (8),
+ alt-010-00 (9),
+ alt-020-00 (10),
+ alt-050-00 (11),
+ alt-100-00 (12),
+ alt-200-00 (13),
+ outOfRange (14),
+ unavailable (15)
+}
+
+DeltaLongitude ::= INTEGER {oneMicrodegreeEast (10), oneMicrodegreeWest (-10), unavailable(131072)} (-131071..131072)
+
+DeltaLatitude ::= INTEGER {oneMicrodegreeNorth (10), oneMicrodegreeSouth (-10) , unavailable(131072)} (-131071..131072)
+
+DeltaAltitude ::= INTEGER {oneCentimeterUp (1), oneCentimeterDown (-1), unavailable(12800)} (-12700..12800)
+
+PosConfidenceEllipse ::= SEQUENCE {
+ semiMajorConfidence SemiAxisLength,
+ semiMinorConfidence SemiAxisLength,
+ semiMajorOrientation HeadingValue
+}
+
+PathPoint ::= SEQUENCE {
+ pathPosition DeltaReferencePosition,
+ pathDeltaTime PathDeltaTime OPTIONAL
+}
+
+PathDeltaTime ::= INTEGER {tenMilliSecondsInPast(1)} (1..65535, ...)
+
+PtActivation ::= SEQUENCE {
+ ptActivationType PtActivationType,
+ ptActivationData PtActivationData
+}
+
+PtActivationType ::= INTEGER {undefinedCodingType(0), r09-16CodingType(1), vdv-50149CodingType(2)} (0..255)
+
+PtActivationData ::= OCTET STRING (SIZE(1..20))
+
+AccelerationControl ::= BIT STRING {
+ brakePedalEngaged (0),
+ gasPedalEngaged (1),
+ emergencyBrakeEngaged (2),
+ collisionWarningEngaged (3),
+ accEngaged (4),
+ cruiseControlEngaged (5),
+ speedLimiterEngaged (6)
+} (SIZE(7))
+
+
+SemiAxisLength ::= INTEGER{oneCentimeter(1), outOfRange(4094), unavailable(4095)} (0..4095)
+
+CauseCode ::= SEQUENCE {
+ causeCode CauseCodeType,
+ subCauseCode SubCauseCodeType,
+ ...
+}
+
+CauseCodeType ::= INTEGER {
+ reserved (0),
+ trafficCondition (1),
+ accident (2),
+ roadworks (3),
+ impassability (5),
+ adverseWeatherCondition-Adhesion (6),
+ aquaplannning (7),
+ hazardousLocation-SurfaceCondition (9),
+ hazardousLocation-ObstacleOnTheRoad (10),
+ hazardousLocation-AnimalOnTheRoad (11),
+ humanPresenceOnTheRoad (12),
+ wrongWayDriving (14),
+ rescueAndRecoveryWorkInProgress (15),
+ adverseWeatherCondition-ExtremeWeatherCondition (17),
+ adverseWeatherCondition-Visibility (18),
+ adverseWeatherCondition-Precipitation (19),
+ slowVehicle (26),
+ dangerousEndOfQueue (27),
+ vehicleBreakdown (91),
+ postCrash (92),
+ humanProblem (93),
+ stationaryVehicle (94),
+ emergencyVehicleApproaching (95),
+ hazardousLocation-DangerousCurve (96),
+ collisionRisk (97),
+ signalViolation (98),
+ dangerousSituation (99)
+} (0..255)
+
+SubCauseCodeType ::= INTEGER (0..255)
+
+TrafficConditionSubCauseCode ::= INTEGER {unavailable(0), increasedVolumeOfTraffic(1), trafficJamSlowlyIncreasing(2), trafficJamIncreasing(3), trafficJamStronglyIncreasing(4), trafficStationary(5), trafficJamSlightlyDecreasing(6), trafficJamDecreasing(7), trafficJamStronglyDecreasing(8)} (0..255)
+
+AccidentSubCauseCode ::= INTEGER {unavailable(0), multiVehicleAccident(1), heavyAccident(2), accidentInvolvingLorry(3), accidentInvolvingBus(4), accidentInvolvingHazardousMaterials(5), accidentOnOppositeLane(6), unsecuredAccident(7), assistanceRequested(8)} (0..255)
+
+RoadworksSubCauseCode ::= INTEGER {unavailable(0), majorRoadworks(1), roadMarkingWork(2), slowMovingRoadMaintenance(3), shortTermStationaryRoadworks(4), streetCleaning(5), winterService(6)} (0..255)
+
+HumanPresenceOnTheRoadSubCauseCode ::= INTEGER {unavailable(0), childrenOnRoadway(1), cyclistOnRoadway(2), motorcyclistOnRoadway(3)} (0..255)
+
+WrongWayDrivingSubCauseCode ::= INTEGER {unavailable(0), wrongLane(1), wrongDirection(2)} (0..255)
+
+AdverseWeatherCondition-ExtremeWeatherConditionSubCauseCode ::= INTEGER {unavailable(0), strongWinds(1), damagingHail(2), hurricane(3), thunderstorm(4), tornado(5), blizzard(6)} (0..255)
+
+AdverseWeatherCondition-AdhesionSubCauseCode ::= INTEGER {unavailable(0), heavyFrostOnRoad(1), fuelOnRoad(2), mudOnRoad(3), snowOnRoad(4), iceOnRoad(5), blackIceOnRoad(6), oilOnRoad(7), looseChippings(8), instantBlackIce(9), roadsSalted(10)} (0..255)
+
+AdverseWeatherCondition-VisibilitySubCauseCode ::= INTEGER {unavailable(0), fog(1), smoke(2), heavySnowfall(3), heavyRain(4), heavyHail(5), lowSunGlare(6), sandstorms(7), swarmsOfInsects(8)} (0..255)
+
+AdverseWeatherCondition-PrecipitationSubCauseCode ::= INTEGER {unavailable(0), heavyRain(1), heavySnowfall(2), softHail(3)} (0..255)
+
+SlowVehicleSubCauseCode ::= INTEGER {unavailable(0), maintenanceVehicle(1), vehiclesSlowingToLookAtAccident(2), abnormalLoad(3), abnormalWideLoad(4), convoy(5), snowplough(6), deicing(7), saltingVehicles(8)} (0..255)
+
+StationaryVehicleSubCauseCode ::= INTEGER {unavailable(0), humanProblem(1), vehicleBreakdown(2), postCrash(3), publicTransportStop(4), carryingDangerousGoods(5)} (0..255)
+
+HumanProblemSubCauseCode ::= INTEGER {unavailable(0), glycemiaProblem(1), heartProblem(2)} (0..255)
+
+EmergencyVehicleApproachingSubCauseCode ::= INTEGER {unavailable(0), emergencyVehicleApproaching(1), prioritizedVehicleApproaching(2)} (0..255)
+
+HazardousLocation-DangerousCurveSubCauseCode ::= INTEGER {unavailable(0), dangerousLeftTurnCurve(1), dangerousRightTurnCurve(2), multipleCurvesStartingWithUnknownTurningDirection(3), multipleCurvesStartingWithLeftTurn(4), multipleCurvesStartingWithRightTurn(5)} (0..255)
+
+HazardousLocation-SurfaceConditionSubCauseCode ::= INTEGER {unavailable(0), rockfalls(1), earthquakeDamage(2), sewerCollapse(3), subsidence(4), snowDrifts(5), stormDamage(6), burstPipe(7), volcanoEruption(8), fallingIce(9)} (0..255)
+
+HazardousLocation-ObstacleOnTheRoadSubCauseCode ::= INTEGER {unavailable(0), shedLoad(1), partsOfVehicles(2), partsOfTyres(3), bigObjects(4), fallenTrees(5), hubCaps(6), waitingVehicles(7)} (0..255)
+
+HazardousLocation-AnimalOnTheRoadSubCauseCode ::= INTEGER {unavailable(0), wildAnimals(1), herdOfAnimals(2), smallAnimals(3), largeAnimals(4)} (0..255)
+
+CollisionRiskSubCauseCode ::= INTEGER {unavailable(0), longitudinalCollisionRisk(1), crossingCollisionRisk(2), lateralCollisionRisk(3), vulnerableRoadUser(4)} (0..255)
+
+SignalViolationSubCauseCode ::= INTEGER {unavailable(0), stopSignViolation(1), trafficLightViolation(2), turningRegulationViolation(3)} (0..255)
+
+RescueAndRecoveryWorkInProgressSubCauseCode ::= INTEGER {unavailable(0), emergencyVehicles(1), rescueHelicopterLanding(2), policeActivityOngoing(3), medicalEmergencyOngoing(4), childAbductionInProgress(5)} (0..255)
+
+DangerousEndOfQueueSubCauseCode ::= INTEGER {unavailable(0), suddenEndOfQueue(1), queueOverHill(2), queueAroundBend(3), queueInTunnel(4)} (0..255)
+
+DangerousSituationSubCauseCode ::= INTEGER {unavailable(0), emergencyElectronicBrakeEngaged(1), preCrashSystemEngaged(2), espEngaged(3), absEngaged(4), aebEngaged(5), brakeWarningEngaged(6), collisionRiskWarningEngaged(7)} (0..255)
+
+VehicleBreakdownSubCauseCode ::= INTEGER {unavailable(0), lackOfFuel (1), lackOfBatteryPower (2), engineProblem(3), transmissionProblem(4), engineCoolingProblem(5), brakingSystemProblem(6), steeringProblem(7), tyrePuncture(8), tyrePressureProblem(9)} (0..255)
+
+PostCrashSubCauseCode ::= INTEGER {unavailable(0), accidentWithoutECallTriggered (1), accidentWithECallManuallyTriggered (2), accidentWithECallAutomaticallyTriggered (3), accidentWithECallTriggeredWithoutAccessToCellularNetwork(4)} (0..255)
+
+Curvature ::= SEQUENCE {
+ curvatureValue CurvatureValue,
+ curvatureConfidence CurvatureConfidence
+}
+
+CurvatureValue ::= INTEGER {straight(0), unavailable(1023)} (-1023..1023)
+
+CurvatureConfidence ::= ENUMERATED {
+ onePerMeter-0-00002 (0),
+ onePerMeter-0-0001 (1),
+ onePerMeter-0-0005 (2),
+ onePerMeter-0-002 (3),
+ onePerMeter-0-01 (4),
+ onePerMeter-0-1 (5),
+ outOfRange (6),
+ unavailable (7)
+}
+
+CurvatureCalculationMode ::= ENUMERATED {yawRateUsed(0), yawRateNotUsed(1), unavailable(2), ...}
+
+Heading ::= SEQUENCE {
+ headingValue HeadingValue,
+ headingConfidence HeadingConfidence
+}
+
+HeadingValue ::= INTEGER {wgs84North(0), wgs84East(900), wgs84South(1800), wgs84West(2700), unavailable(3601)} (0..3601)
+
+HeadingConfidence ::= INTEGER {equalOrWithinZeroPointOneDegree (1), equalOrWithinOneDegree (10), outOfRange(126), unavailable(127)} (1..127)
+
+LanePosition::= INTEGER {offTheRoad(-1), hardShoulder(0),
+outermostDrivingLane(1), secondLaneFromOutside(2)} (-1..14)
+
+ClosedLanes ::= SEQUENCE {
+ innerhardShoulderStatus HardShoulderStatus OPTIONAL,
+ outerhardShoulderStatus HardShoulderStatus OPTIONAL,
+ drivingLaneStatus DrivingLaneStatus OPTIONAL,
+ ...
+}
+
+HardShoulderStatus ::= ENUMERATED {availableForStopping(0), closed(1), availableForDriving(2)}
+
+DrivingLaneStatus ::= BIT STRING (SIZE (1..13))
+
+
+PerformanceClass ::= INTEGER {unavailable(0), performanceClassA(1), performanceClassB(2)} (0..7)
+
+SpeedValue ::= INTEGER {standstill(0), oneCentimeterPerSec(1), unavailable(16383)} (0..16383)
+
+SpeedConfidence ::= INTEGER {equalOrWithinOneCentimeterPerSec(1), equalOrWithinOneMeterPerSec(100), outOfRange(126), unavailable(127)} (1..127)
+
+VehicleMass ::= INTEGER {hundredKg(1), unavailable(1024)} (1..1024)
+
+Speed ::= SEQUENCE {
+ speedValue SpeedValue,
+ speedConfidence SpeedConfidence
+}
+
+DriveDirection ::= ENUMERATED {forward (0), backward (1), unavailable (2)}
+
+EmbarkationStatus ::= BOOLEAN
+
+LongitudinalAcceleration ::= SEQUENCE {
+ longitudinalAccelerationValue LongitudinalAccelerationValue,
+ longitudinalAccelerationConfidence AccelerationConfidence
+}
+
+LongitudinalAccelerationValue ::= INTEGER {pointOneMeterPerSecSquaredForward(1), pointOneMeterPerSecSquaredBackward(-1), unavailable(161)} (-160 .. 161)
+
+AccelerationConfidence ::= INTEGER {pointOneMeterPerSecSquared(1), outOfRange(101), unavailable(102)} (0 .. 102)
+
+LateralAcceleration ::= SEQUENCE {
+ lateralAccelerationValue LateralAccelerationValue,
+ lateralAccelerationConfidence AccelerationConfidence
+}
+
+LateralAccelerationValue ::= INTEGER {pointOneMeterPerSecSquaredToRight(-1), pointOneMeterPerSecSquaredToLeft(1), unavailable(161)} (-160 .. 161)
+
+VerticalAcceleration ::= SEQUENCE {
+ verticalAccelerationValue VerticalAccelerationValue,
+ verticalAccelerationConfidence AccelerationConfidence
+}
+
+VerticalAccelerationValue ::= INTEGER {pointOneMeterPerSecSquaredUp(1), pointOneMeterPerSecSquaredDown(-1), unavailable(161)} (-160 .. 161)
+
+StationType ::= INTEGER {unknown(0), pedestrian(1), cyclist(2), moped(3), motorcycle(4), passengerCar(5), bus(6),
+lightTruck(7), heavyTruck(8), trailer(9), specialVehicles(10), tram(11), roadSideUnit(15)} (0..255)
+
+ExteriorLights ::= BIT STRING {
+ lowBeamHeadlightsOn (0),
+ highBeamHeadlightsOn (1),
+ leftTurnSignalOn (2),
+ rightTurnSignalOn (3),
+ daytimeRunningLightsOn (4),
+ reverseLightOn (5),
+ fogLightOn (6),
+ parkingLightsOn (7)
+} (SIZE(8))
+
+DangerousGoodsBasic::= ENUMERATED {
+ explosives1(0),
+ explosives2(1),
+ explosives3(2),
+ explosives4(3),
+ explosives5(4),
+ explosives6(5),
+ flammableGases(6),
+ nonFlammableGases(7),
+ toxicGases(8),
+ flammableLiquids(9),
+ flammableSolids(10),
+ substancesLiableToSpontaneousCombustion(11),
+ substancesEmittingFlammableGasesUponContactWithWater(12),
+ oxidizingSubstances(13),
+ organicPeroxides(14),
+ toxicSubstances(15),
+ infectiousSubstances(16),
+ radioactiveMaterial(17),
+ corrosiveSubstances(18),
+ miscellaneousDangerousSubstances(19)
+}
+
+DangerousGoodsExtended ::= SEQUENCE {
+ dangerousGoodsType DangerousGoodsBasic,
+ unNumber INTEGER (0..9999),
+ elevatedTemperature BOOLEAN,
+ tunnelsRestricted BOOLEAN,
+ limitedQuantity BOOLEAN,
+ emergencyActionCode IA5String (SIZE (1..24)) OPTIONAL,
+ phoneNumber PhoneNumber OPTIONAL,
+ companyName UTF8String (SIZE (1..24)) OPTIONAL,
+ ...
+}
+
+SpecialTransportType ::= BIT STRING {heavyLoad(0), excessWidth(1), excessLength(2), excessHeight(3)} (SIZE(4))
+
+LightBarSirenInUse ::= BIT STRING {
+ lightBarActivated (0),
+ sirenActivated (1)
+} (SIZE(2))
+
+HeightLonCarr ::= INTEGER {oneCentimeter(1), unavailable(100)} (1..100)
+
+PosLonCarr ::= INTEGER {oneCentimeter(1), unavailable(127)} (1..127)
+
+PosPillar ::= INTEGER {tenCentimeters(1), unavailable(30)} (1..30)
+
+PosCentMass ::= INTEGER {tenCentimeters(1), unavailable(63)} (1..63)
+
+RequestResponseIndication ::= ENUMERATED {request(0), response(1)}
+
+SpeedLimit ::= INTEGER {oneKmPerHour(1)} (1..255)
+
+StationarySince ::= ENUMERATED {lessThan1Minute(0), lessThan2Minutes(1), lessThan15Minutes(2), equalOrGreater15Minutes(3)}
+
+Temperature ::= INTEGER {equalOrSmallerThanMinus60Deg (-60), oneDegreeCelsius(1), equalOrGreaterThan67Deg(67)} (-60..67)
+
+TrafficRule ::= ENUMERATED {noPassing(0), noPassingForTrucks(1), passToRight(2), passToLeft(3), ...
+}
+
+WheelBaseVehicle ::= INTEGER {tenCentimeters(1), unavailable(127)} (1..127)
+
+TurningRadius ::= INTEGER {point4Meters(1), unavailable(255)} (1..255)
+
+PosFrontAx ::= INTEGER {tenCentimeters(1), unavailable(20)} (1..20)
+
+PositionOfOccupants ::= BIT STRING {
+ row1LeftOccupied (0),
+ row1RightOccupied (1),
+ row1MidOccupied (2),
+ row1NotDetectable (3),
+ row1NotPresent (4),
+ row2LeftOccupied (5),
+ row2RightOccupied (6),
+ row2MidOccupied (7),
+ row2NotDetectable (8),
+ row2NotPresent (9),
+ row3LeftOccupied (10),
+ row3RightOccupied (11),
+ row3MidOccupied (12),
+ row3NotDetectable (13),
+ row3NotPresent (14),
+ row4LeftOccupied (15),
+ row4RightOccupied (16),
+ row4MidOccupied (17),
+ row4NotDetectable (18),
+ row4NotPresent (19)} (SIZE(20))
+
+PositioningSolutionType ::= ENUMERATED {noPositioningSolution(0), sGNSS(1), dGNSS(2), sGNSSplusDR(3), dGNSSplusDR(4), dR(5), ...}
+
+VehicleIdentification ::= SEQUENCE {
+ wMInumber WMInumber OPTIONAL,
+ vDS VDS OPTIONAL,
+ ...
+}
+
+WMInumber ::= IA5String (SIZE(1..3))
+
+VDS ::= IA5String (SIZE(6))
+
+EnergyStorageType ::= BIT STRING {hydrogenStorage(0), electricEnergyStorage(1), liquidPropaneGas(2), compressedNaturalGas(3), diesel(4), gasoline(5), ammonia(6)} (SIZE(7))
+
+VehicleLength ::= SEQUENCE {
+ vehicleLengthValue VehicleLengthValue,
+ vehicleLengthConfidenceIndication VehicleLengthConfidenceIndication
+}
+
+VehicleLengthValue ::= INTEGER {tenCentimeters(1), outOfRange(1022), unavailable(1023)} (1..1023)
+
+VehicleLengthConfidenceIndication ::= ENUMERATED {noTrailerPresent(0), trailerPresentWithKnownLength(1), trailerPresentWithUnknownLength(2), trailerPresenceIsUnknown(3), unavailable(4)}
+
+VehicleWidth ::= INTEGER {tenCentimeters(1), outOfRange(61), unavailable(62)} (1..62)
+
+PathHistory::= SEQUENCE (SIZE(0..40)) OF PathPoint
+
+EmergencyPriority ::= BIT STRING {requestForRightOfWay(0), requestForFreeCrossingAtATrafficLight(1)} (SIZE(2))
+
+InformationQuality ::= INTEGER {unavailable(0), lowest(1), highest(7)} (0..7)
+
+RoadType ::= ENUMERATED {
+ urban-NoStructuralSeparationToOppositeLanes(0),
+ urban-WithStructuralSeparationToOppositeLanes(1),
+ nonUrban-NoStructuralSeparationToOppositeLanes(2),
+ nonUrban-WithStructuralSeparationToOppositeLanes(3)}
+
+SteeringWheelAngle ::= SEQUENCE {
+ steeringWheelAngleValue SteeringWheelAngleValue,
+ steeringWheelAngleConfidence SteeringWheelAngleConfidence
+}
+
+SteeringWheelAngleValue ::= INTEGER {straight(0), onePointFiveDegreesToRight(-1), onePointFiveDegreesToLeft(1), unavailable(512)} (-511..512)
+
+SteeringWheelAngleConfidence ::= INTEGER {equalOrWithinOnePointFiveDegree (1), outOfRange(126), unavailable(127)} (1..127)
+
+TimestampIts ::= INTEGER {utcStartOf2004(0), oneMillisecAfterUTCStartOf2004(1)} (0..4398046511103)
+
+VehicleRole ::= ENUMERATED {default(0), publicTransport(1), specialTransport(2), dangerousGoods(3), roadWork(4), rescue(5), emergency(6), safetyCar(7), agriculture(8), commercial(9), military(10), roadOperator(11), taxi(12), reserved1(13), reserved2(14), reserved3(15)}
+
+YawRate::= SEQUENCE {
+ yawRateValue YawRateValue,
+ yawRateConfidence YawRateConfidence
+}
+
+YawRateValue ::= INTEGER {straight(0), degSec-000-01ToRight(-1), degSec-000-01ToLeft(1), unavailable(32767)} (-32766..32767)
+
+YawRateConfidence ::= ENUMERATED {
+ degSec-000-01 (0),
+ degSec-000-05 (1),
+ degSec-000-10 (2),
+ degSec-001-00 (3),
+ degSec-005-00 (4),
+ degSec-010-00 (5),
+ degSec-100-00 (6),
+ outOfRange (7),
+ unavailable (8)
+}
+
+ProtectedZoneType::= ENUMERATED { permanentCenDsrcTolling (0), ..., temporaryCenDsrcTolling (1) }
+
+RelevanceDistance ::= ENUMERATED {lessThan50m(0), lessThan100m(1), lessThan200m(2), lessThan500m(3), lessThan1000m(4), lessThan5km(5), lessThan10km(6), over10km(7)}
+
+RelevanceTrafficDirection ::= ENUMERATED {allTrafficDirections(0), upstreamTraffic(1), downstreamTraffic(2), oppositeTraffic(3)}
+
+TransmissionInterval ::= INTEGER {oneMilliSecond(1), tenSeconds(10000)} (1..10000)
+
+ValidityDuration ::= INTEGER {timeOfDetection(0), oneSecondAfterDetection(1)} (0..86400)
+
+ActionID ::= SEQUENCE {
+ originatingStationID StationID,
+ sequenceNumber SequenceNumber
+}
+
+ItineraryPath ::= SEQUENCE SIZE(1..40) OF ReferencePosition
+
+ProtectedCommunicationZone ::= SEQUENCE {
+ protectedZoneType ProtectedZoneType,
+ expiryTime TimestampIts OPTIONAL,
+ protectedZoneLatitude Latitude,
+ protectedZoneLongitude Longitude,
+ protectedZoneRadius ProtectedZoneRadius OPTIONAL,
+ protectedZoneID ProtectedZoneID OPTIONAL,
+ ...
+}
+
+Traces ::= SEQUENCE SIZE(1..7) OF PathHistory
+
+NumberOfOccupants ::= INTEGER {oneOccupant (1), unavailable(127)} (0 .. 127)
+
+SequenceNumber ::= INTEGER (0..65535)
+
+PositionOfPillars ::= SEQUENCE (SIZE(1..3, ...)) OF PosPillar
+
+RestrictedTypes ::= SEQUENCE (SIZE(1..3, ...)) OF StationType
+
+EventHistory::= SEQUENCE (SIZE(1..23)) OF EventPoint
+
+EventPoint ::= SEQUENCE {
+ eventPosition DeltaReferencePosition,
+ eventDeltaTime PathDeltaTime OPTIONAL,
+ informationQuality InformationQuality
+}
+
+ProtectedCommunicationZonesRSU ::= SEQUENCE (SIZE(1..16)) OF ProtectedCommunicationZone
+
+
+
+CenDsrcTollingZone ::= SEQUENCE {
+ protectedZoneLatitude Latitude,
+ protectedZoneLongitude Longitude,
+ cenDsrcTollingZoneID CenDsrcTollingZoneID OPTIONAL,
+ ...
+}
+
+ProtectedZoneRadius ::= INTEGER {oneMeter(1)} (1..255,...)
+
+ProtectedZoneID ::= INTEGER (0.. 134217727)
+
+CenDsrcTollingZoneID ::= ProtectedZoneID
+
+DigitalMap ::= SEQUENCE (SIZE(1..256)) OF ReferencePosition
+
+OpeningDaysHours ::= UTF8String
+
+PhoneNumber ::= NumericString (SIZE(1..16))
+
+END
diff --git a/asn1/raw/is_ts103301/cdd/LICENSE b/asn1/raw/is_ts103301/cdd/LICENSE
new file mode 100755
index 000000000..4436d6da4
--- /dev/null
+++ b/asn1/raw/is_ts103301/cdd/LICENSE
@@ -0,0 +1,23 @@
+Copyright 2019 ETSI
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+3. Neither the name of the copyright holder nor the names of its contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff --git a/asn1/raw/is_ts103301/cdd/README.md b/asn1/raw/is_ts103301/cdd/README.md
new file mode 100644
index 000000000..9596ff54f
--- /dev/null
+++ b/asn1/raw/is_ts103301/cdd/README.md
@@ -0,0 +1,14 @@
+# ASN.1 modules for ETSI ITS Common Data Dictionary (ETSI TS 102 894-2)
+
+The ASN.1 module for ETSI ITS Common Data Dictionary (CDD) is contained in the **ITS-Container.asn** file.
+* The module is published in the **[ETSI TS 102 894-2 v1.3.1](https://www.etsi.org/deliver/etsi_ts/102800_102899/10289402/01.03.01_60/ts_10289402v010301p.pdf)** (2018-08).
+
+## License
+
+The content of this repository and the files contained are released under the BSD-3-Clause license.
+
+See the attached LICENSE file or visit https://forge.etsi.org/legal-matters.
+
+## Dependencies
+
+The module doesn't have any dependencies.
diff --git a/asn1/raw/is_ts103301/iso-patched/ISO14823-missing.asn b/asn1/raw/is_ts103301/iso-patched/ISO14823-missing.asn
new file mode 100644
index 000000000..60db2d491
--- /dev/null
+++ b/asn1/raw/is_ts103301/iso-patched/ISO14823-missing.asn
@@ -0,0 +1,232 @@
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-- ISO TS 14823
+--
+-- This ASN.1 was generated: 30.08.2016
+--
+-- This document contains only the data element needed for the encoding of an IVI message
+-- as defined in ISO TS 19321(2020)
+--
+-- Published version location (yet missing there):
+-- https://standards.iso.org/iso/ts/14823/
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+GDD {iso (1) standard (0) gdd(14823) version1 (0)}
+
+DEFINITIONS AUTOMATIC TAGS::=
+BEGIN
+
+--Definition of GDD Structure
+
+GddStructure::= SEQUENCE{
+ pictogramCode SEQUENCE {
+ countryCode OCTET STRING (SIZE (2)) OPTIONAL,
+ serviceCategoryCode CHOICE {
+ trafficSignPictogram ENUMERATED {dangerWarning, regulatory, informative,...},
+ publicFacilitiesPictogram ENUMERATED {publicFacilities, ...},
+ ambientOrRoadConditionPictogram ENUMERATED {ambientCondition, roadCondition,...},
+ ...},
+ pictogramCategoryCode SEQUENCE {
+ nature INTEGER (1..9),
+ serialNumber INTEGER (0..99)
+}},
+ attributes GddAttributes OPTIONAL
+}
+
+-- Definition of the single ISO 14823 Attributes
+GddAttributes::= SEQUENCE (SIZE(1..8),...) OF GddAttribute
+
+GddAttribute::= CHOICE{
+ dtm InternationalSign-applicablePeriod, -- Date/Time/Period
+ edt InternationalSign-exemptedApplicablePeriod,-- Exemption status of Date/Time/Period
+ dfl InternationalSign-directionalFlowOfLane,-- Directional Flow of Lane
+ ved InternationalSign-applicableVehicleDimensions,-- Vehicle Dimensions
+ spe InternationalSign-speedLimits,-- Speed
+ roi InternationalSign-rateOfIncline,-- Rate of Incline
+ dbv InternationalSign-distanceBetweenVehicles,-- Distance Between Vehicles
+ ddd InternationalSign-destinationInformation,-- Destination/Direction/Distance
+ set InternationalSign-section, -- Section
+ nol InternationalSign-numberOfLane -- Number of Lanes
+ }
+
+InternationalSign-applicablePeriod::= SEQUENCE {
+ year SEQUENCE { -- contains yearRangeStartYear and yearRangeEndYear
+ yearRangeStartYear INTEGER(2000..2127,...),
+ yearRangeEndYear INTEGER(2000..2127,...)
+ } OPTIONAL,
+ month-day SEQUENCE { -- contains dateRangeStartMonth&Date and dateRangeEndMonth&Date
+ dateRangeStartMonthDay MonthDay,
+ dateRangeEndMonthDay MonthDay
+ } OPTIONAL,
+ repeatingPeriodDayTypes RepeatingPeriodDayTypes OPTIONAL,
+ hourMinutes SEQUENCE { -- contains timeRangeStartTime and timeRangeEndTime
+ timeRangeStartTime HoursMinutes,
+ timeRangeEndTime HoursMinutes
+ } OPTIONAL,
+ dateRangeOfWeek DayOfWeek OPTIONAL,
+ durationHourMinute HoursMinutes OPTIONAL
+}
+
+InternationalSign-exemptedApplicablePeriod::= InternationalSign-applicablePeriod
+
+InternationalSign-directionalFlowOfLane::= INTEGER {
+ sDL (1),-- Straight Direction Only
+ sLT (2),-- Straight and Left Turn Only
+ sRT (3),-- Straight and Right Turn Only
+ lTO (4),-- Left Turn Only
+ rTO (5),-- Right Turn Only
+ cLL (6),-- Convergence from the Left Lane
+ cRI (7),-- Convergence from the Right Lane
+ oVL (8) -- Oncoming Vehicles Lane
+ } (1..8)
+
+InternationalSign-applicableVehicleDimensions::= SEQUENCE{
+ vehicleHeight Distance OPTIONAL,
+ vehicleWidth Distance OPTIONAL,
+ vehicleLength Distance OPTIONAL,
+ vehicleWeight Weight OPTIONAL
+ }
+
+InternationalSign-speedLimits::= SEQUENCE{
+ speedLimitMax INTEGER(0..250) OPTIONAL,
+ speedLimitMin INTEGER(0..250) OPTIONAL,
+ unit Code-Units (0..1)
+ }
+
+InternationalSign-rateOfIncline::= INTEGER(1..32)
+
+InternationalSign-distanceBetweenVehicles::= Distance
+
+InternationalSign-destinationInformation::= SEQUENCE{
+ junctionDirection INTEGER(1..128) OPTIONAL,
+ roundaboutCwDirection INTEGER(1..128)OPTIONAL,
+ roundaboutCcwDirection INTEGER(1..128)OPTIONAL,
+ ioList DDD-IO-LIST
+ }
+
+InternationalSign-section::= SEQUENCE{
+ startingPointLength Distance OPTIONAL,
+ continuityLength Distance OPTIONAL
+ }
+
+InternationalSign-numberOfLane::= INTEGER(0..99)
+
+-- Definition of data elements used in ISO 14823 attributes
+
+Code-Units::= INTEGER {
+ kmperh (0),
+ milesperh (1),
+ kilometre (2),
+ metre (3),
+ decimetre (4),
+ centimetre (5),
+ mile (6),
+ yard (7),
+ foot (8),
+ minutesOfTime (9),
+ tonnes (10),--1000 kg, not Ton!
+ hundredkg (11),
+ pound (12),--lbs
+ rateOfIncline (13),
+ durationinminutes (14)
+ -- value 15 reserved for future use
+ } (0..15)
+
+DayOfWeek::= BIT STRING {unused(0), monday(1), tuesday(2), wednesday(3), thursday(4), friday(5), saturday(6), sunday(7)} (SIZE (8))
+
+DDD-IO-LIST ::= SEQUENCE (SIZE (1..8,...)) OF DDD-IO
+
+DDD-IO::= SEQUENCE{
+ arrowDirection INTEGER(0..7),
+ destPlace DestinationPlaces OPTIONAL,
+ destRoad DestinationRoads OPTIONAL,
+ roadNumberIdentifier INTEGER(1..999) OPTIONAL,
+ streetName INTEGER(1..999) OPTIONAL,
+ streetNameText UTF8String OPTIONAL,
+ distanceToDivergingPoint DistanceOrDuration OPTIONAL,
+ distanceToDestinationPlace DistanceOrDuration OPTIONAL
+ }
+
+DestinationPlace::= SEQUENCE{
+ destType DestinationType,
+ destRSCode GddStructure (WITH COMPONENTS {..., attributes ABSENT}) OPTIONAL,
+ destBlob OCTET STRING OPTIONAL,
+ placeNameIdentification INTEGER(1..999) OPTIONAL,
+ placeNameText UTF8String OPTIONAL
+ }
+
+DestinationPlaces ::= SEQUENCE (SIZE (1..4,...)) OF DestinationPlace
+
+DestinationRoad::= SEQUENCE{
+ derType DestinationRoadType,
+ roadNumberIdentifier INTEGER(1..999) OPTIONAL,
+ roadNumberText UTF8String OPTIONAL
+ }
+
+DestinationRoads ::= SEQUENCE (SIZE (1..4,...)) OF DestinationRoad
+
+DestinationRoadType::= INTEGER {
+ none (0),
+ nationalHighway (1),
+ localHighway (2),
+ tollExpresswayMotorway (3),
+ internationalHighway (4),
+ highway (5),
+ expressway (6),
+ nationalRoad (7),
+ regionalProvincialRoad (8),
+ localRoad (9),
+ motorwayJunction (10),
+ diversion (11),
+ rfu1 (12),
+ rfu2 (13),
+ rfu3 (14),
+ rfu4 (15)
+ } (0..15, ...)
+
+DestinationType::= INTEGER {
+ none (0),
+ importantArea (1),
+ principalArea (2),
+ generalArea (3),
+ wellKnownPoint (4),
+ country (5),
+ city (6),
+ street (7),
+ industrialArea (8),
+ historicArea (9),
+ touristicArea (10),
+ culturalArea (11),
+ touristicRoute (12),
+ recommendedRoute (13),
+ touristicAttraction (14),
+ geographicArea (15)
+ } (0..15, ...)
+
+Distance::= SEQUENCE{
+ value INTEGER(1..16384),
+ unit Code-Units(2..4|6..8)
+ }
+
+DistanceOrDuration::= SEQUENCE {
+ value INTEGER(1..16384),
+ unit Code-Units (2..9)
+ }
+
+HoursMinutes::= SEQUENCE {
+ hours INTEGER (0..23),-- number of hours after midnight
+ mins INTEGER (0..59) -- number of minutes after the hour
+ }
+
+MonthDay::= SEQUENCE {
+ month INTEGER (1..12),
+ day INTEGER (1..31)
+ }
+
+RepeatingPeriodDayTypes::= BIT STRING {national-holiday (0), even-days(1), odd-days(2), market-day(3) } (SIZE (4))
+
+Weight::= SEQUENCE {
+ value INTEGER(1..16384),
+ unit Code-Units (10..12)
+ }
+
+END
diff --git a/asn1/raw/is_ts103301/iso-patched/ISO14906(2018)EfcDsrcApplicationv6-patched.asn b/asn1/raw/is_ts103301/iso-patched/ISO14906(2018)EfcDsrcApplicationv6-patched.asn
new file mode 100644
index 000000000..49049c58e
--- /dev/null
+++ b/asn1/raw/is_ts103301/iso-patched/ISO14906(2018)EfcDsrcApplicationv6-patched.asn
@@ -0,0 +1,630 @@
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-- ISO TS 14906 App
+--
+-- This ASN.1 was generated: 30.08.2016
+--
+-- This document contains a compile clean version of EfcDsrcApplication module
+--
+-- Published version location:
+-- https://standards.iso.org/iso/14906/ed-3/en/ISO14906(2018)EfcDsrcApplicationv6.asn
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+EfcDsrcApplication {iso(1) standard(0) 14906 application(0) version6(6)}
+DEFINITIONS AUTOMATIC TAGS ::= BEGIN
+EXPORTS ALL;
+IMPORTS
+CountryCode, CS5, IssuerIdentifier
+FROM AVIAEINumberingAndDataStructures {iso(1) standard(0) iso14816(14816) asnm1(1) version1(1) }
+-- defined in ISO 14816 --
+AttributeIdList, Attributes{}, AttributeList{}
+FROM EfcDsrcGeneric {iso(1) standard(0) 14906 generic(1) version7(7)};
+-- NOTE: The following are the definitions of the action and response
+-- parameters
+ActualNumberOfPassengers ::= Int1
+AxleWeightLimits ::= SEQUENCE{
+maxLadenweightOnAxle1 Int2,
+maxLadenweightOnAxle2 Int2,
+maxLadenweightOnAxle3 Int2,
+maxLadenweightOnAxle4 Int2,
+maxLadenweightOnAxle5 Int2
+}
+AddRq::= SEQUENCE {
+attributeId INTEGER(0..127,...),
+value INTEGER
+}
+ChannelId::= INTEGER {
+obu (0),
+sam1 (1), -- secure application module
+sam2 (2),
+icc (3), -- integrated circuit(s) card
+display (4),
+buzzer (5),
+printer (6),
+serialInterface (7), -- serial interface: eg. RS232 and RS485
+parallelInterface (8),
+gPS (9),
+tachograph (10),
+privateUse1 (11), -- free for proprietary use
+privateUse2 (12), -- free for proprietary use
+privateUse3 (13), -- free for proprietary use
+privateUse4 (14), -- free for proprietary use
+privateUse5 (15), -- free for proprietary use
+bluetooth (16)
+-- (17-255) are reserved for future CEN use
+} (0..255)
+ChannelRq::= SEQUENCE{
+channelId ChannelId,
+apdu OCTET STRING
+-- format according to the interface
+-- of the channelId
+}
+ChannelRs::= SEQUENCE{
+channelId ChannelId,
+apdu OCTET STRING
+-- format according to the interface
+-- of the channelId
+}
+CopyRq::= SEQUENCE {
+destinationEID INTEGER(0..127,...),
+attributeIdList AttributeIdList
+}
+CreditRq::= SEQUENCE {
+refund PaymentFee,
+nonce OCTET STRING,
+key INTEGER(0..255)
+}
+CreditRs ::= SEQUENCE {
+creditResult ResultFin,
+creditAuthenticator OCTET STRING
+}
+DebitRq::= SEQUENCE {
+debitPaymentFee PaymentFee,
+nonce OCTET STRING,
+keyRef INTEGER(0..255)
+}
+DebitRs ::= SEQUENCE {
+debitResult ResultFin,
+debitAuthenticator OCTET STRING
+}
+GetInstanceRq ::= SEQUENCE {
+posOfFirstInstance INTEGER(0..255), -- position of first instance to be retrieved
+posOfLastInstance INTEGER(0..255), -- position last instance to be retrieved
+attributeIdList AttributeIdList -- Ids of attributes to be retrieved
+}
+GetInstanceRs{Container}::= SEQUENCE (SIZE (0..127,...)) OF SEQUENCE {
+attributeId INTEGER(0..127,...),
+-- number of instances retrieved
+attributeValues Container (WITH COMPONENTS {octetstring PRESENT})
+-- The octetstring shall contain the contatenation of
+-- the unaligned PER encodings of the values of the
+-- instances, with each encoding padded to an integral
+-- of octets as specified for a top-level type in
+-- ISO/IEC 8825-2
+}
+GetStampedRq::= SEQUENCE {
+attributeIdList AttributeIdList,
+nonce OCTET STRING, -- e.g. a random number
+keyRef INTEGER(0..255)
+}
+GetStampedRs{Container}::= SEQUENCE {
+attributeList AttributeList{Container},
+authenticator OCTET STRING
+}
+SetInstanceRq{Container} ::= SEQUENCE {
+posOfInstance INTEGER(0..255),
+attribute Attributes{Container}
+}
+SetMMIRq::= INTEGER {
+ok (0), -- operation / transaction successfully completed
+nok (1), -- operation / transaction not successfully completed
+contactOperator (2), -- e.g. due to low balance or battery
+noSignalling (255) -- no signalling
+-- (3-127) are reserved for future CEN use
+-- (128-254) are reserved for private use
+} (0..255)
+SetStampedRq{Container}::= SEQUENCE {
+attributeList AttributeList{Container},
+nonce OCTET STRING,
+keyRef INTEGER(0..255)
+}
+SubRq::= SEQUENCE {
+attributeId INTEGER(0..127,...),
+value INTEGER
+}
+-- NOTE: The following are the definitions of EFC attributes
+CO2EmissionValue ::= Int2
+ContractSerialNumber ::= Int4
+ContractAuthenticator ::= OCTET STRING
+ContractValidity ::= SEQUENCE {
+contractRestrictions OCTET STRING (SIZE(4)),
+contractExpiryDate DateCompact
+} -- intended to support ISO/TR 1998 implemented systems
+ContractVehicle ::= LPN
+DateCompact::= SEQUENCE {
+year INTEGER (1990..2117),
+month INTEGER (0..12), -- Value zero shall not be used
+-- except with 1990 - see below.
+day INTEGER (0..31) -- Value zero shall not be used
+-- except with 1990 � see below.
+}
+-- The value "{year 1990, month 0, day 0}" is a 16-bit all-zero
+-- encoding, and is used to represent "no date".
+DescriptiveCharacteristics ::= INTEGER {
+noEntry (0),
+vehicleShape1 (1),
+vehicleShape2 (2),
+vehicleShape3 (3),
+vehicleShape4 (4),
+vehicleShape5 (5),
+vehicleShape6 (6),
+vehicleShape7 (7),
+vehicleShape8 (8),
+vehicleShape9 (9),
+vehicleShape10 (10),
+vehicleShape11 (11),
+vehicleShape12 (12),
+vehicleShape13 (13),
+vehicleShape14 (14),
+vehicleShape15 (15),
+vehicleShape16 (16),
+vehicleShape17 (17),
+vehicleShape18 (18),
+vehicleShape19 (19),
+vehicleShape20 (20),
+vehicleShape21 (21),
+vehicleShape22 (22),
+vehicleShape23 (23),
+vehicleShape24 (24),
+vehicleShape25 (25),
+vehicleShape26 (26),
+vehicleShape27 (27),
+vehicleShape28 (28),
+vehicleShape29 (29),
+vehicleShape30 (30),
+vehicleShape31 (31),
+vehicleShape32 (32),
+vehicleShape33 (33),
+vehicleShape34 (34),
+vehicleShape35 (35),
+vehicleShape36 (36),
+vehicleShape37 (37),
+vehicleShape38 (38),
+vehicleShape39 (39),
+vehicleShape40 (40),
+vehicleShape41 (41),
+vehicleShape42 (42),
+vehicleShape43 (43),
+vehicleShape44 (44),
+vehicleShape45 (45),
+vehicleShape46 (46),
+vehicleShape47 (47),
+vehicleShape48 (48),
+vehicleShape49 (49),
+vehicleShape50 (50)
+-- (1..50) are reserved for future CEN use
+-- (51..255) are reserved for private use
+} (0..255)
+DieselEmissionValues::= SEQUENCE {
+particulate SEQUENCE {
+unitType UnitType,
+value INTEGER (0..32767)
+},
+absorptionCoeff Int2 }
+DriverCharacteristics ::= SEQUENCE {
+driverClass Int1,
+tripPurpose Int1
+}
+EFC-ContextMark ::= SEQUENCE {
+contractProvider Provider,
+typeOfContract OCTET STRING (SIZE(2)),
+contextVersion INTEGER(0..127,...)
+}
+EnvironmentalCharacteristics::= SEQUENCE {
+euroValue EuroValue,
+copValue CopValue
+}
+EuroValue::= ENUMERATED {
+noEntry (0),
+euro-1 (1),
+euro-2 (2),
+euro-3 (3),
+euro-4 (4),
+euro-5 (5),
+euro-6 (6),
+reservedForUse1 (7),
+reservedForUse2 (8),
+reservedForUse3 (9),
+reservedForUse4 (10),
+reservedForUse5 (11),
+reservedForUse6 (12),
+reservedForUse7 (13),
+reservedForUse8 (14),
+eev (15)
+} -- 4 bits, EURO-Classes as defined in EC directive 88/77/EEC, annex 1
+-- and in 91/542/EEC, 96/1/EC, 1999/96/EC, 2001/27/EC, regulation No 595/2009
+-- and for EEV in Section 6.2.1 of Annex I in EC directive 2005/55/EC
+-- EUR-Class VI as defined in Regulation (EC) No 595/2009
+CopValue::= ENUMERATED {
+noEntry (0),
+co2class1 (1), -- below 101 g/km
+co2class2 (2), -- 101 to 120 g/km
+co2class3 (3), -- 121 to 140 g/km
+co2class4 (4), -- 141 to 160 g/km
+co2class5 (5), -- 161 to 200 g/km
+co2class6 (6), -- 201 to 250 g/km
+co2class7 (7), -- above 250 g/km
+reservedforUse (8) -- reserved for future CEN and ISO use
+} -- 4 bits, reserved for carbon dioxide pollution values as defined in
+-- EC directive 2003/127/EC'
+EngineCharacteristics::= INTEGER {
+noEntry (0),
+noEngine (1),
+petrolUnleaded (2),
+petrolLeaded (3),
+diesel (4),
+lPG (5),
+battery (6),
+solar (7),
+hybrid (8),
+hydrogen (9)
+-- (10-255) are reserved for future CEN use
+} (0..255)
+Engine ::= SEQUENCE{
+engineCapacity Int2,
+enginePower Int2
+}
+EquipmentOBUId ::= OCTET STRING
+EquipmentStatus ::= BIT STRING (SIZE(16))
+ExhaustEmissionValues ::= SEQUENCE {
+unitType UnitType,
+emissionCO INTEGER (0..32767),
+emissionHC Int2,
+emissionNOX Int2,
+emissionHCNOX Int2
+}
+FutureCharacteristics ::= INTEGER {
+noEntry (0),
+airSuspension (1)
+-- (2..255) are reserved for future CEN use
+} (0..255)
+ICC-Id ::= OCTET STRING
+Int1 ::= INTEGER(0..255)
+Int2 ::= INTEGER(0..65535)
+Int3 ::= INTEGER(0..16777215)
+Int4 ::= INTEGER(0..4294967295)
+LPN::= SEQUENCE {
+countryCode CountryCode,
+alphabetIndicator ENUMERATED {
+latinAlphabetNo1 (1), -- encoded as 00 00 00'B
+latinAlphabetNo2 (2), -- encoded as 00 00 01'B etc
+latinAlphabetNo3 (3),
+latinAlphabetNo4 (4),
+latinCyrillicAlphabet (5),
+latinArabicAlphabet (6),
+latinGreekAlphabet (7),
+latinHebrewAlphabet (8),
+latinAlphabetNo5 (9),
+latinAlphabetNo6 (10),
+twoOctetBMP (11),
+fourOctetCanonical (12),
+reservedForUse1 (13),
+reservedForUse2 (14),
+reservedForUse3 (15),
+reservedForUse4 (16),
+reservedForUse5 (17),
+reservedForUse6 (18),
+reservedForUse7 (19),
+reservedForUse8 (20),
+reservedForUse9 (21),
+reservedForUse10 (22),
+reservedForUse11 (23),
+reservedForUse12 (24),
+reservedForUse13 (25),
+reservedForUse14 (26),
+reservedForUse15 (27),
+reservedForUse16 (28),
+reservedForUse17 (29),
+reservedForUse18 (30),
+reservedForUse19 (31),
+reservedForUse20 (32),
+reservedForUse21 (33)
+} -- 6 bits, latinAlphabetNo1 recommended -- ,
+-- refer to Annex E for conversion from LatinAlphabetNo 2
+-- and 5 to Latin AlphabetNo1
+licencePlateNumber OCTET STRING
+}
+PassengerCapacity ::= SEQUENCE{
+numberOfSeats Int1,
+numberOfStandingPlaces Int1
+}
+PaymentFee ::= SEQUENCE {
+-- The fee (toll, charge or fare) which is requested by the
+-- service provider for the service provided or to be provided.
+paymentFeeAmount Int2,
+-- paymentFeeAmount is the value of the fee being charged for the
+-- service. If no unit (payment fee unit) is specified, then
+-- it is known by default.
+paymentFeeUnit PayUnit
+-- paymentFeeUnit is the unit in which the fee is expressed.
+}
+PaymentMeans ::= SEQUENCE {
+personalAccountNumber PersonalAccountNumber,
+paymentMeansExpiryDate DateCompact,
+pamentMeansUsageControl OCTET STRING(SIZE(2))
+-- issuer's specified restrictions, on the geographic usage
+-- and services allowed for the applications
+}
+PaymentMeansBalance ::= SignedValue
+SignedValue ::= CHOICE {
+positive INTEGER (0..8388607),
+negative INTEGER (-8388608..-1)
+}
+-- corresponds to a �3 octets Signed Integer�, associated with the following
+-- examples of line codes:
+-- -8'388'608 : 80 00 00'H
+-- -1 : FF FF FF'H
+-- 0 : 00 00 00'H
+-- 1 : 00 00 01�H
+-- 8'388'607 : 7F FF FF'H
+PaymentMeansUnit ::= PayUnit
+PaymentSecurityData ::= OCTET STRING
+PayUnit ::= OCTET STRING (SIZE(2))
+-- The unique designation of a Currency as defined in ISO 4217
+-- using the ISO numeric binary coded decimal representation.
+-- The code can also express a company specific token or a
+-- "charging unit code" as used in the freight.unit in which
+-- the fee is expressed.
+-- Value Assignment :
+-- '0xxx'H Currency in main units
+-- '1xxx'H Currency in minor units of 10 :1 ('dime')
+-- '2xxx'H Currency in minor units of 100 :1 ('cents')
+-- '3xxx'H Currency in minor units of 1000 :1
+-- '4xxx'H Currency in 'major' units / 10
+-- (e.g. 10 Belgian Francs)
+-- '5xxx'H Currency in 'major' units / 100
+-- (e.g. 100 Italian Lire)
+-- '6xxx'H Currency in 'major' units / 1000
+-- '7xxx'H Currency in 'major' units / 10000
+-- '8xxx'H Currency in 'major' units / 100000
+-- where xxx is the BCD representation of "Currency"
+-- as defined in ISO 4217
+-- '9xxx'H Tokens
+-- where xxx is Purse Provider specific coding.
+-- 'Axxx'H Charging Unit Codes,
+-- denoting quantification of the service provided
+-- (e.g. man-hours)
+PersonalAccountNumber ::= OCTET STRING (SIZE(10))
+-- Personal account number structure � according to ISO/IEC 7812-1
+-- Issuer identifier number (�BIN�)
+-- Major industry identifier (MII, 1 binary coded decimal, BCD)
+-- 0 : reserved for future use by ISO/TC68
+-- 1 : airline sector
+-- 2 : extended airline sector
+-- 3 : travel and tourism sector
+-- 4 : financial banking sector
+-- 5 : financial banking sector
+-- 6 : commerce and banking sector
+-- 7 : petrol industry sector
+-- 8 : telecommunication sector
+-- 9 : reserved for national use
+-- Issuer identifier (5 BCD in the second edition of ISO/IEC 7812-1)
+-- Account number (max 12 BCD)
+-- Control digit (1 BCD)
+-- Padding bits, set to 1'B, in order to accomplish a
+-- total length of 10 octets.
+
+Provider ::= SEQUENCE {
+countryCode CountryCode,
+providerIdentifier IssuerIdentifier
+}
+PurseBalance ::= SEQUENCE {
+-- The balance on the (electronic) purse, consisting of
+-- the value and the unit in which it is expressed.
+purseValue SignedValue,
+-- The size of a balance expressed in a currency.
+-- This may be positive or negative.
+purseUnit PayUnit
+}
+ReceiptContract ::= SEQUENCE {
+sessionContractProvider Provider,
+sessionTypeOfContract OCTET STRING(SIZE(2)),
+sessionContractSerialNumber Int4
+}
+ReceiptData1 ::= ReceiptData
+ReceiptData2 ::= ReceiptData
+ReceiptData ::= SEQUENCE {
+sessionTime DateAndTime,
+sessionServiceProvider Provider,
+locationOfStation Int2,
+sessionLocation SessionLocation,
+sessionType Int1,
+sessionResult ResultOp,
+sessionTariffClass Int1,
+sessionClaimedClass Int1,
+sessionFee PaymentFee,
+sessionContractProvider Provider,
+sessionTypeOfContract OCTET STRING (SIZE(2)),
+sessionContextVersion INTEGER (0..127,...),
+receiptDataAuthenticator OCTET STRING(SIZE(4))
+}
+ReceiptDistance ::= Int3
+ReceiptFinancialPart ::= SEQUENCE {
+personalAccountNumber PersonalAccountNumber,
+sessionPaymentFee PaymentFee,
+sessionCurrentBalance PurseBalance,
+receiptFinancialSerialNumber Int4
+}
+ReceiptICC-Id ::= ICC-Id
+ReceiptOBUId ::= OCTET STRING
+ReceiptServicePart ::= SEQUENCE {
+sessionTime DateAndTime,
+sessionServiceProvider Provider,
+stationLocation INTEGER(0..1048575),
+sessionLocation BIT STRING (SIZE(8)),
+typeOfSession StationType,
+sessionResultOperational ResultOp,
+sessionResultFinancial ResultFin
+}
+ReceiptServiceSerialNumber ::= Int3
+ReceiptAuthenticator ::= OCTET STRING
+ReceiptText ::= OCTET STRING
+ResultFin ::= OCTET STRING (SIZE(1))
+-- A code designating whether a card transaction was completed successfully
+-- or not. Value Assignment : Hexadecimal
+-- Most significant 4 bits: 0 OK :
+-- '0x'H OK
+-- Most significant 4 bits > 0 Not OK :
+-- '1x'H Not OK, not specified further
+-- '2x'H Not OK, Abnormal (First or Previous) Event
+-- '3x'H Not OK, Contract not accepted
+-- '4x'H Not OK, Account or Purse not accepted
+-- 'x0'H not specified further
+-- 'x1'H Balance close to zero
+-- 'x2'H Balance now negative
+-- 'x3'H Balance Overflow
+-- 'x4'H Provider not accepted
+-- 'x5'H Authentication failure
+-- x6'H Vehicle Class incorrect
+ResultOp ::= INTEGER {
+correctTransaction (0), -- transaction correct
+obeStatusNotAccepted (1),
+equipmentStatusNotAccepted (2),
+contractNotInWhiteList (3),
+-- VST contract data not in white list
+contractIdentifierInBlackList (4),
+contractIdentifierNotCorrect (5),
+-- Luhn algorithm verification failure
+expiredContract (6), -- contract expired
+contractRestrictionsNotFulfilled (7),
+claimedVehicleCharacteristicsNotValid (8),
+vehicleClassAuthenticationFailed (9),
+entryVehicleClassDifferentFromExitVehicleClass (10),
+entryReceiptMissing (11),
+entryReceiptNotValid (12),
+entryTollStationNotValid (13),
+equipmentNotCertified (14),
+-- manufacturer or EquipClass not recognised
+timeDifference (15),
+-- problem with the time diff of the two latest receipts
+accessCredentialsNotAccepted (16),
+contractAuthenticatorNotAccepted (17),
+receiptAuthenticatorNotAccepted (18),
+claimedVehicleCharacteristicsMissing (19),
+paymentMeansNotAccepted (20),
+paymentAuthenticatorNotAccepted (21),
+paymentMeansInBlackList (22),
+paymentMeansNotCorrect (23),
+-- Luhn algorithm verification failure
+expiredPaymentMeans (24),
+-- PaymentMeans expired
+paymentMeansRestrictionsNotFulfilled (25)
+-- (26-255) are reserved for future CEN use
+} (0..255)
+SessionClass ::= SEQUENCE {
+sessionTariffClass Int1,
+sessionClaimedClass Int1
+}
+SessionLocation ::= SEQUENCE {
+ascendingKilometrage BOOLEAN, -- travel direction indicator
+laneCodeNumber INTEGER(0..127) -- lane code number
+}
+StationType ::= ENUMERATED {
+unspecified (0),
+closedEntryWithPayment (1),
+closedEntryWithoutPayment (2),
+closedTransit (3),
+closedExit (4),
+closedCredit (5),
+mixed (6),
+passage (7), -- open exit
+checkpoint (8),
+reload (9),
+reservedForFutureCENUse1 (10),
+reservedForFutureCENUse2 (11),
+reservedForFutureCENUse3 (12),
+reservedForFutureCENUse4 (13),
+privateUse5 (14),
+privateUse6 (15)
+}
+DateAndTime ::= SEQUENCE {
+timeDate DateCompact,
+timeCompact SEQUENCE { -- expresses time of the day in hours, min, and sec
+hours INTEGER (0..23), -- number of hours after midnight
+mins INTEGER (0..59), -- number of minutes after the hour
+double-secs INTEGER (0..30) -- number of two-seconds after the minute
+}
+-- Midnight at the start of a day cannot be represented.
+-- Midnight at the end of a day is represented by
+-- {hours 23, mins 59, double-secs 30}
+-- The 16 bit zero value {hours 0, mins 0, double-secs 0}
+-- denotes "no time"
+}
+SoundLevel ::= SEQUENCE{
+soundstationary Int1,
+sounddriveby Int1
+}
+TrailerCharacteristics ::= SEQUENCE {
+trailerDetails TrailerDetails,
+trailerMaxLadenWeight Int2,
+trailerWeightUnladen Int2
+}
+TrailerDetails::= SEQUENCE {
+trailerType INTEGER{
+notPresent (0), -- trailer not attached or only one trailer attached, see
+-- VehicleAxlesNumber for more information
+trailer (1), -- also known as pull-bar trailer
+semitrailer (2) -- also known as articulate trailer
+-- (3..31) reserved for future CEN/ISO use
+} (0..31),
+trailerAxles TrailerAxles
+}
+TrailerLicencePlateNumber ::= LPN
+UnitType::= ENUMERATED {
+mg-km (0),
+mg-kWh (1)
+}
+ValidityOfContract ::= SEQUENCE {
+issuerRestrictions OCTET STRING (SIZE(2)),
+contractExpiryDate DateCompact
+}
+VehicleAuthenticator ::= OCTET STRING
+VehicleAxles ::= SEQUENCE {
+vehicleFirstAxleHeight Int1,
+vehicleAxlesNumber SEQUENCE {
+tyreType ENUMERATED{
+notSpecified (0),
+singleTyre (1), -- single tyre on all axles
+dualTyres (2), -- dual tyres on at least one axle
+reservedForUse (3) -- reserved for future CEN use
+},
+numberOfAxles SEQUENCE {
+trailerAxles TrailerAxles,
+tractorAxles TractorAxles
+}
+}
+}
+TrailerAxles ::= INTEGER (0..7) -- number of axles of the trailer when available
+TractorAxles ::= INTEGER (0..7) -- number of axles of the tractor
+VehicleClass ::= Int1
+VehicleDimensions ::= SEQUENCE {
+vehicleLengthOverall Int1,
+vehicleHeigthOverall Int1,
+vehicleWidthOverall Int1
+}
+VehicleLicencePlateNumber ::= LPN
+VehicleIdentificationNumber ::= CS5
+VehicleSpecificCharacteristics ::= SEQUENCE {
+environmentalCharacteristics EnvironmentalCharacteristics,
+engineCharacteristics EngineCharacteristics,
+descriptiveCharacteristics DescriptiveCharacteristics,
+futureCharacteristics FutureCharacteristics
+}
+VehicleTotalDistance ::= Int4
+VehicleWeightLaden ::= Int2
+VehicleCurrentMaxTrainWeight ::= Int2
+VehicleWeightLimits ::= SEQUENCE {
+vehicleMaxLadenWeight Int2,
+vehicleTrainMaximumWeight Int2,
+vehicleWeightUnladen Int2
+}
+END
diff --git a/asn1/raw/is_ts103301/iso-patched/ISO14906(2018)EfcDsrcGenericv7-patched.asn b/asn1/raw/is_ts103301/iso-patched/ISO14906(2018)EfcDsrcGenericv7-patched.asn
new file mode 100644
index 000000000..1415d25de
--- /dev/null
+++ b/asn1/raw/is_ts103301/iso-patched/ISO14906(2018)EfcDsrcGenericv7-patched.asn
@@ -0,0 +1,37 @@
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-- ISO TS 14906 Generic
+--
+-- This ASN.1 was generated: 30.08.2016
+--
+-- This document contains only the data element needed for the encoding of an IVI message
+-- as defined in ISO TS 19321(2020)
+--
+-- Published version location:
+-- https://standards.iso.org/iso/14906/ed-3/en/ISO14906(2018)EfcDsrcGenericv7.asn
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+EfcDsrcGeneric {iso(1) standard(0) 14906 generic(1) version7(7)}
+DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+AttributeIdList ::= SEQUENCE (SIZE(0.. 127,...)) OF INTEGER(0..127,...)
+
+AttributeList{Container} ::= SEQUENCE (SIZE(0..127,...)) OF Attributes{Container}
+
+Attributes{Container} ::= SEQUENCE {
+ attributeId INTEGER (0..127,...),
+ attributeValue Container
+}
+
+END
+-- Below imported data from ISO 14816's ASN.1 module
+-- AVIAEINumberingAndDataStructures {iso(1) standard(0) 14816 }
+-- DEFINITIONS AUTOMATIC TAGS ::= BEGIN
+-- EXPORTS ALL;
+-- CS5 ::= VisibleString
+-- CountryCode ::= BIT STRING(SIZE(10))
+-- Value assignment is done in accordance with ISO 3166-1 and by
+-- using the ITA.2 alphabet.
+-- IssuerIdentifier ::= INTEGER(0 .. 16383)
+-- See Annex A of ISO 14816 for registration
+-- END
\ No newline at end of file
diff --git a/asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn b/asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn
new file mode 100644
index 000000000..3f93794fb
--- /dev/null
+++ b/asn1/raw/is_ts103301/iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn
@@ -0,0 +1,85 @@
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-- ISO TS 24534-3:2015
+--
+-- This ASN.1 was generateds: 30.08.2016
+--
+-- This document contains only the data element needed for the encoding of an IVI message
+-- as defined in ISO TS 19321(2020)
+--
+-- Published version location:
+-- https://standards.iso.org/iso/24534/-3/ISO%2024534-3%20ASN.1%20repository/
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+-- ISO 24534-3:2015
+-- Version 29.4.2015
+
+
+ElectronicRegistrationIdentificationVehicleDataModule {iso(1) standard(0) iso24534 (24534) vehicleData (1) version1 (1)}
+
+
+DEFINITIONS AUTOMATIC TAGS ::= BEGIN
+
+-- Electronic Registration Identification (ERI)- Vehicle Data
+
+EuVehicleCategoryCode ::= CHOICE {
+ euVehicleCategoryL EuVehicleCategoryL, -- conforms to EU 2002/24 and UNECE 1999
+ euVehicleCategoryM EuVehicleCategoryM, -- conforms to EU 2001/116 and UNECE 1999
+ euVehicleCategoryN EuVehicleCategoryN, -- conforms to EU 2001/116 and UNECE 1999
+ euVehicleCategoryO EuVehicleCategoryO, -- conforms to EU 2001/116 and UNECE 1999
+ euVehilcleCategoryT NULL, -- conforms to UNECE 1999
+ euVehilcleCategoryG NULL -- conforms to EU 2001/116 and UNECE 1999
+}
+
+EuVehicleCategoryL ::= ENUMERATED { l1, l2, l3, l4, l5, l6, l7 }
+
+EuVehicleCategoryM ::= ENUMERATED {m1, m2, m3}
+
+EuVehicleCategoryN ::= ENUMERATED {n1, n2, n3}
+
+EuVehicleCategoryO ::= ENUMERATED {o1, o2, o3, o4}
+
+Iso3833VehicleType ::= INTEGER {
+ passengerCar (0), -- term No 3.1.1
+ saloon (1), -- term No 3.1.1.1 (sedan)
+ convertibleSaloon (2), -- term No 3.1.1.2
+ pullmanSaloon (3), -- term No 3.1.1.3
+ stationWagon (4), -- term No 3.1.1.4
+ truckStationWagon (5), -- term No 3.1.1.4.1
+ coupe (6), -- term No 3.1.1.5 (coup�)
+ convertible (7), -- term No 3.1.1.6 (open tourer, roadstar, spider)
+ multipurposePassengerCar (8), -- term No 3.1.1.7
+ forwardControlPassengerCar (9), -- term No 3.1.1.8
+ specialPassengerCar (10), -- term No 3.1.1.9
+ bus (11), -- term No 3.1.2
+ minibus (12), -- term No 3.1.2.1
+ urbanBus (13), -- term No 3.1.2.2
+ interurbanCoach (14), -- term No 3.1.2.3
+ longDistanceCoach (15), -- term No 3.1.2.4
+ articulatedBus (16), -- term No 3.1.2.5
+ trolleyBus (17), -- term No 3.1.2.6
+ specialBus (18), -- term No 3.1.2.7
+ commercialVehicle (19), -- term No 3.1.3
+ specialCommercialVehicle (20), -- term No 3.1.3.1
+ specialVehicle (21), -- term No 3.1.4
+ trailingTowingVehicle (22), -- term No 3.1.5 (draw-bar tractor)
+ semiTrailerTowingVehicle (23), -- term No 3.1.6 (fifth wheel tractor)
+ trailer (24), -- term No 3.2.1
+ busTrailer (25), -- term No 3.2.1.1
+ generalPurposeTrailer (26), -- term No 3.2.1.2
+ caravan (27), -- term No 3.2.1.3
+ specialTrailer (28), -- term No 3.2.1.4
+ semiTrailer (29), -- term No 3.2.2
+ busSemiTrailer (30), -- term No 3.2.2.1
+ generalPurposeSemiTrailer (31), -- term No 3.2.2.2
+ specialSemiTrailer (32), -- term No 3.2.2.3
+ roadTrain (33), -- term No 3.3.1
+ passengerRoadTrain (34), -- term No 3.3.2
+ articulatedRoadTrain (35), -- term No 3.3.3
+ doubleRoadTrain (36), -- term No 3.3.4
+ compositeRoadTrain (37), -- term No 3.3.5
+ specialRoadTrain (38), -- term No 3.3.6
+ moped (39), -- term No 3.4
+ motorCycle (40) -- term No 3.5
+ } (0..255)
+
+END
diff --git a/asn1/raw/is_ts103301/syntax_check.bash b/asn1/raw/is_ts103301/syntax_check.bash
new file mode 100755
index 000000000..3361c80b7
--- /dev/null
+++ b/asn1/raw/is_ts103301/syntax_check.bash
@@ -0,0 +1,106 @@
+#!/bin/bash -e
+# ----------------------------------------------------
+# This script uses the Open Source asn1c to check all used ASN.1 modules
+# are compile clean (no guarantee the generated code is valid).
+#
+# The used compile binary was built from here:
+# https://github.com/brchiu/asn1c/commits/velichkov_s1ap_plus_option_group_plus_adding_trailing_ull
+#
+# The referenced ISO ASN.1 modules are pulled from the ISO Standards Maintenance Portal
+# Yet not all are compile clean, thus minor fixed need to be done.
+# All these changes are irrelevant for the resulting encoding.
+# - Fixing duplicate DE tags
+# - Fixing OID typo
+# - Removing unused types (which bloat the IMPORTS)
+# ----------------------------------------------------
+
+# set -x
+
+install -d build/asn1 build/spatem build/ivim
+
+if [ ! -f build/asn1/ISO-TS-19091-addgrp-C-2018.asn ]; then
+ wget -P build/asn1 https://standards.iso.org/iso/ts/19091/ed-2/en/ISO-TS-19091-addgrp-C-2018.asn
+ sed -e 's/\bHeadingConfidence\b/HeadingConfidenceDSRC/g' \
+ -e 's/\bSpeedConfidence\b/SpeedConfidenceDSRC/g' \
+ -e 's/\bHeading\b/HeadingDSRC/g' \
+ build/asn1/ISO-TS-19091-addgrp-C-2018.asn > build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn
+fi
+if [ ! -f 'build/asn1/ISO19321(2019)IVIv2.asn' ]; then
+ wget -P build/asn1 'https://standards.iso.org/iso/ts/19321/ed-2/en/ISO19321IVIv2.asn'
+fi
+if [ ! -f build/asn1/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule_ForBallot.asn ]; then
+ wget -P build/asn1 'https://standards.iso.org/iso/24534/-3/ISO%2024534-3%20ASN.1%20repository/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule_ForBallot.asn'
+fi
+if [ ! -f build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn ]; then
+ wget -P build/asn1 https://standards.iso.org/iso/14816/ISO14816%20ASN.1%20repository/ISO14816_AVIAEINumberingAndDataStructures.asn
+fi
+if [ ! -f 'build/asn1/ISO14906(2018)EfcDsrcApplicationv6.asn' ]; then
+ wget -P build/asn1 'https://standards.iso.org/iso/14906/ed-3/en/ISO14906(2018)EfcDsrcApplicationv6.asn'
+fi
+if [ ! -f 'build/asn1/ISO14906(2018)EfcDsrcGenericv7.asn' ]; then
+ wget -P build/asn1 'https://standards.iso.org/iso/14906/ed-3/en/ISO14906(2018)EfcDsrcGenericv7.asn'
+fi
+if [ ! -f 'build/asn1/TS17419_2014_CITSapplMgmtIDs.asn' ]; then
+ wget -P build/asn1 'https://standards.iso.org/iso/ts/17419/TS%2017419%20ASN.1%20repository/TS17419_2014_CITSapplMgmtIDs.asn'
+fi
+if [ ! -f 'build/asn1/ISO14906(2018)EfcDsrcGenericv7.asn' ]; then
+ wget -P build/asn1 'https://standards.iso.org/iso/14906/ed-3/en/ISO14906(2018)EfcDsrcGenericv7.asn'
+fi
+
+install -d build/ivim
+asn1c -D build/ivim -R -no-gen-example -fcompound-names \
+ 'IVIM-PDU-Descriptions.asn' \
+ 'cdd/ITS-Container.asn' \
+ 'iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn' \
+ 'iso-patched/ISO14823-missing.asn' \
+ 'build/asn1/TS17419_2014_CITSapplMgmtIDs.asn' \
+ 'iso-patched/ISO14906(2018)EfcDsrcGenericv7-patched.asn' \
+ 'iso-patched/ISO14906(2018)EfcDsrcApplicationv6-patched.asn' \
+ 'build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn' \
+ 'build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn' \
+ 'build/asn1/ISO19321IVIv2.asn' \
+
+install -d build/spatem
+asn1c -D build/spatem -R -no-gen-example -fcompound-names \
+ SPATEM-PDU-Descriptions.asn \
+ cdd/ITS-Container.asn \
+ iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn \
+ build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn \
+ build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn \
+
+install -d build/mapem
+asn1c -D build/mapem -R -no-gen-example -fcompound-names \
+ MAPEM-PDU-Descriptions.asn \
+ cdd/ITS-Container.asn \
+ iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn \
+ build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn \
+ build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn \
+
+install -d build/srem
+asn1c -D build/srem -R -no-gen-example -fcompound-names \
+ SREM-PDU-Descriptions.asn \
+ cdd/ITS-Container.asn \
+ iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn \
+ build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn \
+ build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn \
+
+install -d build/ssem
+asn1c -D build/ssem -R -no-gen-example -fcompound-names \
+ SSEM-PDU-Descriptions.asn \
+ cdd/ITS-Container.asn \
+ iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn \
+ build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn \
+ build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn \
+
+install -d build/rtcmem
+asn1c -D build/rtcmem -R -no-gen-example -fcompound-names \
+ RTCMEM-PDU-Descriptions.asn \
+ cdd/ITS-Container.asn \
+ iso-patched/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule-patched.asn \
+ build/asn1/ISO-TS-19091-addgrp-C-2018-patched.asn \
+ build/asn1/ISO14816_AVIAEINumberingAndDataStructures.asn \
+
+echo "++++++++++++++++++++++++"
+echo "+++ SUCCESS"
+echo "+++ All modules compiled"
+echo "++++++++++++++++++++++++"
diff --git a/doc/Doxyfile b/doc/Doxyfile
index bbfba2bb4..22c293f5d 100644
--- a/doc/Doxyfile
+++ b/doc/Doxyfile
@@ -5,7 +5,7 @@
#---------------------------------------------------------------------------
# DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "etsi_its_messages"
-PROJECT_NUMBER = 1.0.0
+PROJECT_NUMBER = 2.4.0
# PROJECT_BRIEF =
# PROJECT_LOGO =
# OUTPUT_DIRECTORY =
@@ -382,4 +382,4 @@ GENERATE_LATEX = NO
# DOT_TRANSPARENT = NO
# DOT_MULTI_TARGETS = NO
# GENERATE_LEGEND = YES
-# DOT_CLEANUP = YES
\ No newline at end of file
+# DOT_CLEANUP = YES
diff --git a/etsi_its_coding/etsi_its_cam_coding/CHANGELOG.rst b/etsi_its_coding/etsi_its_cam_coding/CHANGELOG.rst
index d0bb2d822..d1f9b240d 100644
--- a/etsi_its_coding/etsi_its_cam_coding/CHANGELOG.rst
+++ b/etsi_its_coding/etsi_its_cam_coding/CHANGELOG.rst
@@ -2,6 +2,9 @@
Changelog for package etsi_its_cam_coding
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+3.0.0 (2024-12-10)
+------------------
+
2.4.0 (2024-11-19)
------------------
* Merge branch 'main' into feature/denm-launchfile-transformation
diff --git a/etsi_its_coding/etsi_its_cam_coding/package.xml b/etsi_its_coding/etsi_its_cam_coding/package.xml
index 5ed27957a..16dd21c4b 100644
--- a/etsi_its_coding/etsi_its_cam_coding/package.xml
+++ b/etsi_its_coding/etsi_its_cam_coding/package.xml
@@ -2,7 +2,7 @@
etsi_its_cam_coding
- 2.4.0
+ 3.0.0
C++ compatible C source code for ETSI ITS CAMs generated from ASN.1 using asn1c
Jean-Pierre Busch
diff --git a/etsi_its_coding/etsi_its_cam_ts_coding/CHANGELOG.rst b/etsi_its_coding/etsi_its_cam_ts_coding/CHANGELOG.rst
index ec9c99583..e597617b6 100644
--- a/etsi_its_coding/etsi_its_cam_ts_coding/CHANGELOG.rst
+++ b/etsi_its_coding/etsi_its_cam_ts_coding/CHANGELOG.rst
@@ -2,6 +2,9 @@
Changelog for package etsi_its_cam_ts_coding
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+3.0.0 (2024-12-10)
+------------------
+
2.4.0 (2024-11-19)
------------------
* Merge branch 'main' into feature/denm-launchfile-transformation
diff --git a/etsi_its_coding/etsi_its_cam_ts_coding/package.xml b/etsi_its_coding/etsi_its_cam_ts_coding/package.xml
index 89833a561..99b2becab 100644
--- a/etsi_its_coding/etsi_its_cam_ts_coding/package.xml
+++ b/etsi_its_coding/etsi_its_cam_ts_coding/package.xml
@@ -2,7 +2,7 @@
etsi_its_cam_ts_coding
- 2.4.0
+ 3.0.0
C++ compatible C source code for ETSI ITS CAMs (TS) generated from ASN.1 using asn1c
Jean-Pierre Busch
diff --git a/etsi_its_coding/etsi_its_coding/CHANGELOG.rst b/etsi_its_coding/etsi_its_coding/CHANGELOG.rst
index a60764b1a..e581df18c 100644
--- a/etsi_its_coding/etsi_its_coding/CHANGELOG.rst
+++ b/etsi_its_coding/etsi_its_coding/CHANGELOG.rst
@@ -2,6 +2,12 @@
Changelog for package etsi_its_coding
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+3.0.0 (2024-12-10)
+------------------
+* Merge pull request `#28 `_ from ika-rwth-aachen/feature/spatem-mapem
+ SPATEM/MAPEM Support
+* Contributors: Jean-Pierre Busch, Lennart Reiher
+
2.4.0 (2024-11-19)
------------------
* Merge branch 'main' into feature/denm-launchfile-transformation
diff --git a/etsi_its_coding/etsi_its_coding/package.xml b/etsi_its_coding/etsi_its_coding/package.xml
index 43f66faf2..0cd4d9484 100644
--- a/etsi_its_coding/etsi_its_coding/package.xml
+++ b/etsi_its_coding/etsi_its_coding/package.xml
@@ -2,7 +2,7 @@
etsi_its_coding
- 2.4.0
+ 3.0.0
C++ compatible C source code for ETSI ITS messages generated from ASN.1 using asn1c
Jean-Pierre Busch
@@ -17,8 +17,10 @@
etsi_its_cam_coding
etsi_its_cam_ts_coding
- etsi_its_denm_coding
etsi_its_cpm_ts_coding
+ etsi_its_denm_coding
+ etsi_its_mapem_ts_coding
+ etsi_its_spatem_ts_coding
etsi_its_vam_ts_coding
ros_environment
diff --git a/etsi_its_coding/etsi_its_cpm_ts_coding/CHANGELOG.rst b/etsi_its_coding/etsi_its_cpm_ts_coding/CHANGELOG.rst
index a564008e3..297727e44 100644
--- a/etsi_its_coding/etsi_its_cpm_ts_coding/CHANGELOG.rst
+++ b/etsi_its_coding/etsi_its_cpm_ts_coding/CHANGELOG.rst
@@ -2,6 +2,9 @@
Changelog for package etsi_its_cpm_ts_coding
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+3.0.0 (2024-12-10)
+------------------
+
2.4.0 (2024-11-19)
------------------
* Merge branch 'main' into feature/denm-launchfile-transformation
diff --git a/etsi_its_coding/etsi_its_cpm_ts_coding/package.xml b/etsi_its_coding/etsi_its_cpm_ts_coding/package.xml
index 9ce52f34b..e0d976052 100644
--- a/etsi_its_coding/etsi_its_cpm_ts_coding/package.xml
+++ b/etsi_its_coding/etsi_its_cpm_ts_coding/package.xml
@@ -2,7 +2,7 @@
etsi_its_cpm_ts_coding
- 2.4.0
+ 3.0.0
C++ compatible C source code for ETSI ITS CPMs (TS) generated from ASN.1 using asn1c
Jean-Pierre Busch
diff --git a/etsi_its_coding/etsi_its_denm_coding/CHANGELOG.rst b/etsi_its_coding/etsi_its_denm_coding/CHANGELOG.rst
index 17ce250a0..4a4dc1a71 100644
--- a/etsi_its_coding/etsi_its_denm_coding/CHANGELOG.rst
+++ b/etsi_its_coding/etsi_its_denm_coding/CHANGELOG.rst
@@ -2,6 +2,9 @@
Changelog for package etsi_its_denm_coding
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+3.0.0 (2024-12-10)
+------------------
+
2.4.0 (2024-11-19)
------------------
* Merge branch 'main' into feature/denm-launchfile-transformation
diff --git a/etsi_its_coding/etsi_its_denm_coding/package.xml b/etsi_its_coding/etsi_its_denm_coding/package.xml
index b86e66780..deb86891d 100644
--- a/etsi_its_coding/etsi_its_denm_coding/package.xml
+++ b/etsi_its_coding/etsi_its_denm_coding/package.xml
@@ -2,7 +2,7 @@
etsi_its_denm_coding
- 2.4.0
+ 3.0.0
C++ compatible C source code for ETSI ITS DENMs generated from ASN.1 using asn1c
Jean-Pierre Busch
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/CHANGELOG.rst b/etsi_its_coding/etsi_its_mapem_ts_coding/CHANGELOG.rst
new file mode 100644
index 000000000..d83b857cc
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/CHANGELOG.rst
@@ -0,0 +1,9 @@
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Changelog for package etsi_its_mapem_ts_coding
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+3.0.0 (2024-12-10)
+------------------
+* Merge pull request `#28 `_ from ika-rwth-aachen/feature/spatem-mapem
+ SPATEM/MAPEM Support
+* Contributors: Jean-Pierre Busch, Lennart Reiher
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/CMakeLists.txt b/etsi_its_coding/etsi_its_mapem_ts_coding/CMakeLists.txt
new file mode 100644
index 000000000..80f0855ef
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/CMakeLists.txt
@@ -0,0 +1,69 @@
+cmake_minimum_required(VERSION 3.5)
+project(etsi_its_mapem_ts_coding)
+
+find_package(ros_environment REQUIRED QUIET)
+set(ROS_VERSION $ENV{ROS_VERSION})
+
+AUX_SOURCE_DIRECTORY(src SRC_FILES)
+
+# === ROS 2 (AMENT) ============================================================
+if(${ROS_VERSION} EQUAL 2)
+
+ find_package(ament_cmake REQUIRED)
+
+ add_library(${PROJECT_NAME} SHARED
+ ${SRC_FILES}
+ )
+
+ target_include_directories(${PROJECT_NAME} PUBLIC
+ $
+ $
+ )
+
+ ament_export_targets(${PROJECT_NAME}Targets HAS_LIBRARY_TARGET)
+
+ install(DIRECTORY include/
+ DESTINATION include
+ )
+
+ install(TARGETS ${PROJECT_NAME}
+ EXPORT ${PROJECT_NAME}Targets
+ ARCHIVE DESTINATION lib
+ LIBRARY DESTINATION lib
+ RUNTIME DESTINATION lib
+ INCLUDES DESTINATION include
+ )
+
+ ament_package()
+
+# === ROS (CATKIN) =============================================================
+elseif(${ROS_VERSION} EQUAL 1)
+
+ find_package(catkin REQUIRED)
+
+ catkin_package(
+ INCLUDE_DIRS include
+ LIBRARIES ${PROJECT_NAME}
+ )
+
+ include_directories(
+ include
+ ${catkin_INCLUDE_DIRS}
+ )
+
+ add_library(${PROJECT_NAME} SHARED
+ ${SRC_FILES}
+ )
+
+ install(TARGETS ${PROJECT_NAME}
+ ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
+ LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
+ RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
+ )
+
+ install(DIRECTORY include/${PROJECT_NAME}/
+ DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
+ FILES_MATCHING PATTERN "*.h"
+ )
+
+endif()
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/ANY.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/ANY.h
new file mode 100644
index 000000000..b1c86a26c
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/ANY.h
@@ -0,0 +1,86 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_TYPE_ANY_H
+#define ASN_TYPE_ANY_H
+
+#include /* Implemented via OCTET STRING type */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct ANY {
+ uint8_t *buf; /* BER-encoded ANY contents */
+ int size; /* Size of the above buffer */
+
+ asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */
+} ANY_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_ANY;
+extern asn_TYPE_operation_t asn_OP_ANY;
+extern asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs;
+
+#define ANY_free OCTET_STRING_free
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+#define ANY_print OCTET_STRING_print
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+#define ANY_compare OCTET_STRING_compare
+#define ANY_copy OCTET_STRING_copy
+
+#define ANY_constraint asn_generic_no_constraint
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+#define ANY_decode_ber OCTET_STRING_decode_ber
+#define ANY_encode_der OCTET_STRING_encode_der
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+#define ANY_decode_xer OCTET_STRING_decode_xer_hex
+xer_type_encoder_f ANY_encode_xer;
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+jer_type_decoder_f ANY_decode_jer;
+jer_type_encoder_f ANY_encode_jer;
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+per_type_decoder_f ANY_decode_uper;
+per_type_encoder_f ANY_encode_uper;
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+per_type_decoder_f ANY_decode_aper;
+per_type_encoder_f ANY_encode_aper;
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+/******************************
+ * Handy conversion routines. *
+ ******************************/
+
+/* Convert another ASN.1 type into the ANY. This implies DER encoding. */
+int ANY_fromType(ANY_t *, asn_TYPE_descriptor_t *td, void *struct_ptr);
+ANY_t *ANY_new_fromType(asn_TYPE_descriptor_t *td, void *struct_ptr);
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+int ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr);
+ANY_t *ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr);
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+/* Convert the contents of the ANY type into the specified type. */
+int ANY_to_type(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr);
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+int ANY_to_type_aper(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr);
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#define ANY_fromBuf(s, buf, size) OCTET_STRING_fromBuf((s), (buf), (size))
+#define ANY_new_fromBuf(buf, size) OCTET_STRING_new_fromBuf( \
+ &asn_DEF_ANY, (buf), (size))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN_TYPE_ANY_H */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/BIT_STRING.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/BIT_STRING.h
new file mode 100644
index 000000000..f03c88067
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/BIT_STRING.h
@@ -0,0 +1,77 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _BIT_STRING_H_
+#define _BIT_STRING_H_
+
+#include /* Some help from OCTET STRING */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct BIT_STRING_s {
+ uint8_t *buf; /* BIT STRING body */
+ size_t size; /* Size of the above buffer */
+
+ int bits_unused;/* Unused trailing bits in the last octet (0..7) */
+
+ asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */
+} BIT_STRING_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_BIT_STRING;
+extern asn_TYPE_operation_t asn_OP_BIT_STRING;
+extern asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs;
+
+#define BIT_STRING_free OCTET_STRING_free
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+asn_struct_print_f BIT_STRING_print; /* Human-readable output */
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+asn_struct_compare_f BIT_STRING_compare;
+asn_struct_copy_f BIT_STRING_copy;
+
+asn_constr_check_f BIT_STRING_constraint;
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+#define BIT_STRING_decode_ber OCTET_STRING_decode_ber
+#define BIT_STRING_encode_der OCTET_STRING_encode_der
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+#define BIT_STRING_decode_xer OCTET_STRING_decode_xer_binary
+xer_type_encoder_f BIT_STRING_encode_xer;
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+jer_type_decoder_f BIT_STRING_decode_jer;
+jer_type_encoder_f BIT_STRING_encode_jer;
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_OER_SUPPORT)
+oer_type_decoder_f BIT_STRING_decode_oer;
+oer_type_encoder_f BIT_STRING_encode_oer;
+#endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+per_type_decoder_f BIT_STRING_decode_uper;
+per_type_encoder_f BIT_STRING_encode_uper;
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+#define BIT_STRING_decode_aper OCTET_STRING_decode_aper
+#define BIT_STRING_encode_aper OCTET_STRING_encode_aper
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_RFILL_SUPPORT)
+asn_random_fill_f BIT_STRING_random_fill;
+#endif /* !defined(ASN_DISABLE_RFILL_SUPPORT) */
+
+const BIT_STRING_t *BIT_STRING__compactify(const BIT_STRING_t *st, BIT_STRING_t *tmp);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _BIT_STRING_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/BOOLEAN.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/BOOLEAN.h
new file mode 100644
index 000000000..e4f6c3ba3
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/BOOLEAN.h
@@ -0,0 +1,72 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _BOOLEAN_H_
+#define _BOOLEAN_H_
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The underlying integer may contain various values, but everything
+ * non-zero is capped to 0xff by the DER encoder. The BER decoder may
+ * yield non-zero values different from 1, beware.
+ */
+typedef unsigned BOOLEAN_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_BOOLEAN;
+extern asn_TYPE_operation_t asn_OP_BOOLEAN;
+
+asn_struct_free_f BOOLEAN_free;
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+asn_struct_print_f BOOLEAN_print;
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+asn_struct_compare_f BOOLEAN_compare;
+asn_struct_copy_f BOOLEAN_copy;
+
+#define BOOLEAN_constraint asn_generic_no_constraint
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+ber_type_decoder_f BOOLEAN_decode_ber;
+der_type_encoder_f BOOLEAN_encode_der;
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+xer_type_decoder_f BOOLEAN_decode_xer;
+xer_type_encoder_f BOOLEAN_encode_xer;
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+jer_type_decoder_f BOOLEAN_decode_jer;
+jer_type_encoder_f BOOLEAN_encode_jer;
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_OER_SUPPORT)
+oer_type_decoder_f BOOLEAN_decode_oer;
+oer_type_encoder_f BOOLEAN_encode_oer;
+#endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+per_type_decoder_f BOOLEAN_decode_uper;
+per_type_encoder_f BOOLEAN_encode_uper;
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+per_type_decoder_f BOOLEAN_decode_aper;
+per_type_encoder_f BOOLEAN_encode_aper;
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_RFILL_SUPPORT)
+asn_random_fill_f BOOLEAN_random_fill;
+#endif /* !defined(ASN_DISABLE_RFILL_SUPPORT) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _BOOLEAN_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/ENUMERATED.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/ENUMERATED.h
new file mode 100644
index 000000000..42e25ea5d
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/ENUMERATED.h
@@ -0,0 +1,67 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _ENUMERATED_H_
+#define _ENUMERATED_H_
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef INTEGER_t ENUMERATED_t; /* Implemented via INTEGER */
+
+extern asn_TYPE_descriptor_t asn_DEF_ENUMERATED;
+extern asn_TYPE_operation_t asn_OP_ENUMERATED;
+
+#define ENUMERATED_free ASN__PRIMITIVE_TYPE_free
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+#define ENUMERATED_print INTEGER_print
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+#define ENUMERATED_compare INTEGER_compare
+#define ENUMERATED_copy INTEGER_copy
+
+#define ENUMERATED_constraint asn_generic_no_constraint
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+#define ENUMERATED_decode_ber ber_decode_primitive
+#define ENUMERATED_encode_der INTEGER_encode_der
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+#define ENUMERATED_decode_xer INTEGER_decode_xer
+#define ENUMERATED_encode_xer INTEGER_encode_xer
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+jer_type_decoder_f ENUMERATED_decode_jer;
+#define ENUMERATED_encode_jer INTEGER_encode_jer
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_OER_SUPPORT)
+oer_type_decoder_f ENUMERATED_decode_oer;
+oer_type_encoder_f ENUMERATED_encode_oer;
+#endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+per_type_decoder_f ENUMERATED_decode_uper;
+per_type_encoder_f ENUMERATED_encode_uper;
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+per_type_decoder_f ENUMERATED_decode_aper;
+per_type_encoder_f ENUMERATED_encode_aper;
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_RFILL_SUPPORT)
+#define ENUMERATED_random_fill INTEGER_random_fill
+#endif /* !defined(ASN_DISABLE_RFILL_SUPPORT) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ENUMERATED_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/GraphicString.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/GraphicString.h
new file mode 100644
index 000000000..13408a1b2
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/GraphicString.h
@@ -0,0 +1,58 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _GraphicString_H_
+#define _GraphicString_H_
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t GraphicString_t; /* Implemented via OCTET STRING */
+
+extern asn_TYPE_descriptor_t asn_DEF_GraphicString;
+extern asn_TYPE_operation_t asn_OP_GraphicString;
+
+#define GraphicString_free OCTET_STRING_free
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+#define GraphicString_print OCTET_STRING_print
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+#define GraphicString_compare OCTET_STRING_compare
+#define GraphicString_copy OCTET_STRING_copy
+
+#define GraphicString_constraint asn_generic_unknown_constraint
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+#define GraphicString_decode_ber OCTET_STRING_decode_ber
+#define GraphicString_encode_der OCTET_STRING_encode_der
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+#define GraphicString_decode_xer OCTET_STRING_decode_xer_hex
+#define GraphicString_encode_xer OCTET_STRING_encode_xer
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+#define GraphicString_decode_jer OCTET_STRING_decode_jer
+#define GraphicString_encode_jer OCTET_STRING_encode_jer
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+#define GraphicString_decode_uper OCTET_STRING_decode_uper
+#define GraphicString_encode_uper OCTET_STRING_encode_uper
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+#define GraphicString_decode_aper OCTET_STRING_decode_aper
+#define GraphicString_encode_aper OCTET_STRING_encode_aper
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _GraphicString_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/IA5String.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/IA5String.h
new file mode 100644
index 000000000..7220e01e5
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/IA5String.h
@@ -0,0 +1,61 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _IA5String_H_
+#define _IA5String_H_
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t IA5String_t; /* Implemented via OCTET STRING */
+
+/*
+ * IA5String ASN.1 type definition.
+ */
+extern asn_TYPE_descriptor_t asn_DEF_IA5String;
+extern asn_TYPE_operation_t asn_OP_IA5String;
+
+#define IA5String_free OCTET_STRING_free
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+#define IA5String_print OCTET_STRING_print_utf8
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+#define IA5String_compare OCTET_STRING_compare
+#define IA5String_copy OCTET_STRING_copy
+
+asn_constr_check_f IA5String_constraint;
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+#define IA5String_decode_ber OCTET_STRING_decode_ber
+#define IA5String_encode_der OCTET_STRING_encode_der
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+#define IA5String_decode_xer OCTET_STRING_decode_xer_utf8
+#define IA5String_encode_xer OCTET_STRING_encode_xer_utf8
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+#define IA5String_decode_jer OCTET_STRING_decode_jer_utf8
+#define IA5String_encode_jer OCTET_STRING_encode_jer_utf8
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+#define IA5String_decode_uper OCTET_STRING_decode_uper
+#define IA5String_encode_uper OCTET_STRING_encode_uper
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+#define IA5String_decode_aper OCTET_STRING_decode_aper
+#define IA5String_encode_aper OCTET_STRING_encode_aper
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _IA5String_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/INTEGER.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/INTEGER.h
new file mode 100644
index 000000000..1246f2a71
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/INTEGER.h
@@ -0,0 +1,143 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _INTEGER_H_
+#define _INTEGER_H_
+
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef ASN__PRIMITIVE_TYPE_t INTEGER_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_INTEGER;
+extern asn_TYPE_operation_t asn_OP_INTEGER;
+
+/* Map with to integer value association */
+typedef struct asn_INTEGER_enum_map_s {
+ long nat_value; /* associated native integer value */
+ size_t enum_len; /* strlen("tag") */
+ const char *enum_name; /* "tag" */
+} asn_INTEGER_enum_map_t;
+
+/* This type describes an enumeration for INTEGER and ENUMERATED types */
+typedef struct asn_INTEGER_specifics_s {
+ const asn_INTEGER_enum_map_t *value2enum; /* N -> "tag"; sorted by N */
+ const unsigned int *enum2value; /* "tag" => N; sorted by tag */
+ int map_count; /* Elements in either map */
+ int extension; /* This map is extensible */
+ int strict_enumeration; /* Enumeration set is fixed */
+ int field_width; /* Size of native integer */
+ int field_unsigned; /* Signed=0, unsigned=1 */
+} asn_INTEGER_specifics_t;
+
+ssize_t INTEGER__dump(const asn_TYPE_descriptor_t *td,
+ const INTEGER_t *st,
+ asn_app_consume_bytes_f *cb,
+ void *app_key, int plainOrXER);
+
+#define INTEGER_free ASN__PRIMITIVE_TYPE_free
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+asn_struct_print_f INTEGER_print;
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+asn_struct_compare_f INTEGER_compare;
+asn_struct_copy_f INTEGER_copy;
+
+#define INTEGER_constraint asn_generic_no_constraint
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+#define INTEGER_decode_ber ber_decode_primitive
+der_type_encoder_f INTEGER_encode_der;
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+xer_type_decoder_f INTEGER_decode_xer;
+xer_type_encoder_f INTEGER_encode_xer;
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+jer_type_decoder_f INTEGER_decode_jer;
+jer_type_encoder_f INTEGER_encode_jer;
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_OER_SUPPORT)
+oer_type_decoder_f INTEGER_decode_oer;
+oer_type_encoder_f INTEGER_encode_oer;
+#endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+per_type_decoder_f INTEGER_decode_uper;
+per_type_encoder_f INTEGER_encode_uper;
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+per_type_decoder_f INTEGER_decode_aper;
+per_type_encoder_f INTEGER_encode_aper;
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_RFILL_SUPPORT)
+asn_random_fill_f INTEGER_random_fill;
+#endif /* !defined(ASN_DISABLE_RFILL_SUPPORT) */
+
+/***********************************
+ * Some handy conversion routines. *
+ ***********************************/
+
+/*
+ * Natiwe size-independent conversion of native integers to/from INTEGER.
+ * (l_size) is in bytes.
+ * Returns 0 if it was possible to convert, -1 otherwise.
+ * -1/EINVAL: Mandatory argument missing
+ * -1/ERANGE: Value encoded is out of range for long representation
+ * -1/ENOMEM: Memory allocation failed (in asn_*2INTEGER()).
+ */
+int asn_INTEGER2imax(const INTEGER_t *i, intmax_t *l);
+int asn_INTEGER2umax(const INTEGER_t *i, uintmax_t *l);
+int asn_imax2INTEGER(INTEGER_t *i, intmax_t l);
+int asn_umax2INTEGER(INTEGER_t *i, uintmax_t l);
+
+/*
+ * Size-specific conversion helpers.
+ */
+int asn_INTEGER2long(const INTEGER_t *i, long *l);
+int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l);
+int asn_long2INTEGER(INTEGER_t *i, long l);
+int asn_ulong2INTEGER(INTEGER_t *i, unsigned long l);
+int asn_INTEGER2int64(const INTEGER_t *i, int64_t *l);
+int asn_INTEGER2uint64(const INTEGER_t *i, uint64_t *l);
+int asn_int642INTEGER(INTEGER_t *i, int64_t l);
+int asn_uint642INTEGER(INTEGER_t *i, uint64_t l);
+
+/* A version of strtol/strtoimax(3) with nicer error reporting. */
+enum asn_strtox_result_e {
+ ASN_STRTOX_ERROR_RANGE = -3, /* Input outside of supported numeric range */
+ ASN_STRTOX_ERROR_INVAL = -2, /* Invalid data encountered (e.g., "+-") */
+ ASN_STRTOX_EXPECT_MORE = -1, /* More data expected (e.g. "+") */
+ ASN_STRTOX_OK = 0, /* Conversion succeeded, number ends at (*end) */
+ ASN_STRTOX_EXTRA_DATA = 1 /* Conversion succeeded, but the string has extra stuff */
+};
+enum asn_strtox_result_e asn_strtol_lim(const char *str, const char **end,
+ long *l);
+enum asn_strtox_result_e asn_strtoul_lim(const char *str, const char **end,
+ unsigned long *l);
+enum asn_strtox_result_e asn_strtoimax_lim(const char *str, const char **end,
+ intmax_t *l);
+enum asn_strtox_result_e asn_strtoumax_lim(const char *str, const char **end,
+ uintmax_t *l);
+
+/*
+ * Convert the integer value into the corresponding enumeration map entry.
+ */
+const asn_INTEGER_enum_map_t *INTEGER_map_value2enum(
+ const asn_INTEGER_specifics_t *specs, long value);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _INTEGER_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/NULL.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/NULL.h
new file mode 100644
index 000000000..eac965340
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/NULL.h
@@ -0,0 +1,71 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_TYPE_NULL_H
+#define ASN_TYPE_NULL_H
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The value of the NULL type is meaningless.
+ * Use the BOOLEAN type if you need to carry true/false semantics.
+ */
+typedef int NULL_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_NULL;
+extern asn_TYPE_operation_t asn_OP_NULL;
+
+asn_struct_free_f NULL_free;
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+asn_struct_print_f NULL_print;
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+asn_struct_compare_f NULL_compare;
+asn_struct_copy_f NULL_copy;
+
+#define NULL_constraint asn_generic_no_constraint
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+ber_type_decoder_f NULL_decode_ber;
+der_type_encoder_f NULL_encode_der;
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+xer_type_decoder_f NULL_decode_xer;
+xer_type_encoder_f NULL_encode_xer;
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+jer_type_decoder_f NULL_decode_jer;
+jer_type_encoder_f NULL_encode_jer;
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_OER_SUPPORT)
+oer_type_decoder_f NULL_decode_oer;
+oer_type_encoder_f NULL_encode_oer;
+#endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+per_type_decoder_f NULL_decode_uper;
+per_type_encoder_f NULL_encode_uper;
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+per_type_decoder_f NULL_decode_aper;
+per_type_encoder_f NULL_encode_aper;
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_RFILL_SUPPORT)
+asn_random_fill_f NULL_random_fill;
+#endif /* !defined(ASN_DISABLE_RFILL_SUPPORT) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NULL_H */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/NativeEnumerated.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/NativeEnumerated.h
new file mode 100644
index 000000000..aed08cb28
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/NativeEnumerated.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2004-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * This type differs from the standard ENUMERATED in that it is modelled using
+ * the fixed machine type (long, int, short), so it can hold only values of
+ * limited length. There is no type (i.e., NativeEnumerated_t, any integer type
+ * will do).
+ * This type may be used when integer range is limited by subtype constraints.
+ */
+#ifndef _NativeEnumerated_H_
+#define _NativeEnumerated_H_
+
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern asn_TYPE_descriptor_t asn_DEF_NativeEnumerated;
+extern asn_TYPE_operation_t asn_OP_NativeEnumerated;
+
+#define NativeEnumerated_free NativeInteger_free
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+#define NativeEnumerated_print NativeInteger_print
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+#define NativeEnumerated_compare NativeInteger_compare
+#define NativeEnumerated_copy NativeInteger_copy
+
+#define NativeEnumerated_constraint asn_generic_no_constraint
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+#define NativeEnumerated_decode_ber NativeInteger_decode_ber
+#define NativeEnumerated_encode_der NativeInteger_encode_der
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+#define NativeEnumerated_decode_xer NativeInteger_decode_xer
+xer_type_encoder_f NativeEnumerated_encode_xer;
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+jer_type_decoder_f NativeEnumerated_decode_jer;
+jer_type_encoder_f NativeEnumerated_encode_jer;
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_OER_SUPPORT)
+oer_type_decoder_f NativeEnumerated_decode_oer;
+oer_type_encoder_f NativeEnumerated_encode_oer;
+#endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+per_type_decoder_f NativeEnumerated_decode_uper;
+per_type_encoder_f NativeEnumerated_encode_uper;
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+per_type_decoder_f NativeEnumerated_decode_aper;
+per_type_encoder_f NativeEnumerated_encode_aper;
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_RFILL_SUPPORT)
+#define NativeEnumerated_random_fill NativeInteger_random_fill
+#endif /* !defined(ASN_DISABLE_RFILL_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT) || !defined(ASN_DISABLE_APER_SUPPORT)
+int NativeEnumerated__compar_value2enum(
+ const void *ap,
+ const void *bp);
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) || !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NativeEnumerated_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/NativeInteger.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/NativeInteger.h
new file mode 100644
index 000000000..1e7880930
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/NativeInteger.h
@@ -0,0 +1,73 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * This type differs from the standard INTEGER in that it is modelled using
+ * the fixed machine type (long, int, short), so it can hold only values of
+ * limited length. There is no type (i.e., NativeInteger_t, any integer type
+ * will do).
+ * This type may be used when integer range is limited by subtype constraints.
+ */
+#ifndef _NativeInteger_H_
+#define _NativeInteger_H_
+
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern asn_TYPE_descriptor_t asn_DEF_NativeInteger;
+extern asn_TYPE_operation_t asn_OP_NativeInteger;
+
+asn_struct_free_f NativeInteger_free;
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+asn_struct_print_f NativeInteger_print;
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+asn_struct_compare_f NativeInteger_compare;
+asn_struct_copy_f NativeInteger_copy;
+
+#define NativeInteger_constraint asn_generic_no_constraint
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+ber_type_decoder_f NativeInteger_decode_ber;
+der_type_encoder_f NativeInteger_encode_der;
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+xer_type_decoder_f NativeInteger_decode_xer;
+xer_type_encoder_f NativeInteger_encode_xer;
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+jer_type_decoder_f NativeInteger_decode_jer;
+jer_type_encoder_f NativeInteger_encode_jer;
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_OER_SUPPORT)
+oer_type_decoder_f NativeInteger_decode_oer;
+oer_type_encoder_f NativeInteger_encode_oer;
+#endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+per_type_decoder_f NativeInteger_decode_uper;
+per_type_encoder_f NativeInteger_encode_uper;
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+per_type_decoder_f NativeInteger_decode_aper;
+per_type_encoder_f NativeInteger_encode_aper;
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_RFILL_SUPPORT)
+asn_random_fill_f NativeInteger_random_fill;
+#endif /* !defined(ASN_DISABLE_RFILL_SUPPORT) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NativeInteger_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/NumericString.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/NumericString.h
new file mode 100644
index 000000000..d9a3ccad6
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/NumericString.h
@@ -0,0 +1,67 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _NumericString_H_
+#define _NumericString_H_
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t NumericString_t; /* Implemented via OCTET STRING */
+
+extern asn_TYPE_descriptor_t asn_DEF_NumericString;
+extern asn_TYPE_operation_t asn_OP_NumericString;
+
+#define NumericString_free OCTET_STRING_free
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+#define NumericString_print OCTET_STRING_print_utf8
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+#define NumericString_compare OCTET_STRING_compare
+#define NumericString_copy OCTET_STRING_copy
+
+asn_constr_check_f NumericString_constraint;
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+#define NumericString_decode_ber OCTET_STRING_decode_ber
+#define NumericString_encode_der OCTET_STRING_encode_der
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+#define NumericString_decode_xer OCTET_STRING_decode_xer_utf8
+#define NumericString_encode_xer OCTET_STRING_encode_xer_utf8
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+#define NumericString_decode_jer OCTET_STRING_decode_jer_utf8
+#define NumericString_encode_jer OCTET_STRING_encode_jer_utf8
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_OER_SUPPORT)
+#define NumericString_decode_oer OCTET_STRING_decode_oer
+#define NumericString_encode_oer OCTET_STRING_encode_oer
+#endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+#define NumericString_decode_uper OCTET_STRING_decode_uper
+#define NumericString_encode_uper OCTET_STRING_encode_uper
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+#define NumericString_decode_aper OCTET_STRING_decode_aper
+#define NumericString_encode_aper OCTET_STRING_encode_aper
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_RFILL_SUPPORT)
+#define NumericString_random_fill OCTET_STRING_random_fill
+#endif /* !defined(ASN_DISABLE_RFILL_SUPPORT) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NumericString_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/OBJECT_IDENTIFIER.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/OBJECT_IDENTIFIER.h
new file mode 100644
index 000000000..c77a1bf6c
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/OBJECT_IDENTIFIER.h
@@ -0,0 +1,186 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _OBJECT_IDENTIFIER_H_
+#define _OBJECT_IDENTIFIER_H_
+
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef uint32_t asn_oid_arc_t;
+#define ASN_OID_ARC_MAX (~((asn_oid_arc_t)0))
+
+typedef ASN__PRIMITIVE_TYPE_t OBJECT_IDENTIFIER_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_OBJECT_IDENTIFIER;
+extern asn_TYPE_operation_t asn_OP_OBJECT_IDENTIFIER;
+
+ssize_t OBJECT_IDENTIFIER__dump_body(const OBJECT_IDENTIFIER_t *st,
+ asn_app_consume_bytes_f *cb,
+ void *app_key);
+
+#define OBJECT_IDENTIFIER_free ASN__PRIMITIVE_TYPE_free
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+asn_struct_print_f OBJECT_IDENTIFIER_print;
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+#define OBJECT_IDENTIFIER_compare OCTET_STRING_compare
+#define OBJECT_IDENTIFIER_copy OCTET_STRING_copy
+
+asn_constr_check_f OBJECT_IDENTIFIER_constraint;
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+#define OBJECT_IDENTIFIER_decode_ber ber_decode_primitive
+#define OBJECT_IDENTIFIER_encode_der der_encode_primitive
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+xer_type_decoder_f OBJECT_IDENTIFIER_decode_xer;
+xer_type_encoder_f OBJECT_IDENTIFIER_encode_xer;
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+jer_type_decoder_f OBJECT_IDENTIFIER_decode_jer;
+jer_type_encoder_f OBJECT_IDENTIFIER_encode_jer;
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_OER_SUPPORT)
+#define OBJECT_IDENTIFIER_decode_oer oer_decode_primitive
+#define OBJECT_IDENTIFIER_encode_oer oer_encode_primitive
+#endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+#define OBJECT_IDENTIFIER_decode_uper OCTET_STRING_decode_uper
+#define OBJECT_IDENTIFIER_encode_uper OCTET_STRING_encode_uper
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+#define OBJECT_IDENTIFIER_decode_aper OCTET_STRING_decode_aper
+#define OBJECT_IDENTIFIER_encode_aper OCTET_STRING_encode_aper
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_RFILL_SUPPORT)
+asn_random_fill_f OBJECT_IDENTIFIER_random_fill;
+#endif /* !defined(ASN_DISABLE_RFILL_SUPPORT) */
+
+/**********************************
+ * Some handy conversion routines *
+ **********************************/
+
+/*
+ * This function fills an (arcs) array with OBJECT IDENTIFIER arcs
+ * up to specified (arc_slots) elements.
+ *
+ * EXAMPLE:
+ * void print_arcs(OBJECT_IDENTIFIER_t *oid) {
+ * asn_oid_arc_t fixed_arcs[10]; // Try with fixed space first
+ * asn_oid_arc_t *arcs = fixed_arcs;
+ * size_t arc_slots = sizeof(fixed_arcs)/sizeof(fixed_arcs[0]); // 10
+ * ssize_t count; // Real number of arcs.
+ * int i;
+ *
+ * count = OBJECT_IDENTIFIER_get_arcs(oid, arcs, arc_slots);
+ * // If necessary, reallocate arcs array and try again.
+ * if(count > arc_slots) {
+ * arc_slots = count;
+ * arcs = malloc(sizeof(asn_oid_arc_t) * arc_slots);
+ * if(!arcs) return;
+ * count = OBJECT_IDENTIFIER_get_arcs(oid, arcs, arc_slots);
+ * assert(count == arc_slots);
+ * }
+ *
+ * // Print the contents of the arcs array.
+ * for(i = 0; i < count; i++)
+ * printf("%"PRIu32"\n", arcs[i]);
+ *
+ * // Avoid memory leak.
+ * if(arcs != fixed_arcs) free(arcs);
+ * }
+ *
+ * RETURN VALUES:
+ * -1/EINVAL: Invalid arguments (oid is missing)
+ * -1/ERANGE: One or more arcs have value out of array cell type range.
+ * >=0: Number of arcs contained in the OBJECT IDENTIFIER
+ *
+ * WARNING: The function always returns the actual number of arcs,
+ * even if there is no sufficient (arc_slots) provided.
+ */
+ssize_t OBJECT_IDENTIFIER_get_arcs(const OBJECT_IDENTIFIER_t *oid,
+ asn_oid_arc_t *arcs, size_t arc_slots);
+
+/*
+ * This functions initializes the OBJECT IDENTIFIER object with
+ * the given set of arcs.
+ * The minimum of two arcs must be present; some restrictions apply.
+ * RETURN VALUES:
+ * -1/EINVAL: Invalid arguments
+ * -1/ERANGE: The first two arcs do not conform to ASN.1 restrictions.
+ * -1/ENOMEM: Memory allocation failed
+ * 0: The object was initialized with new arcs.
+ */
+int OBJECT_IDENTIFIER_set_arcs(OBJECT_IDENTIFIER_t *oid,
+ const asn_oid_arc_t *arcs, size_t arcs_count);
+
+
+/*
+ * Parse the OBJECT IDENTIFIER textual representation ("1.3.6.1.4.1.9363").
+ * No arc can exceed the (0..ASN_OID_ARC_MAX, which is the same as UINT32_MAX).
+ * This function is not specific to OBJECT IDENTIFIER, it may be used to parse
+ * the RELATIVE-OID data, or any other data consisting of dot-separated
+ * series of numeric values.
+ *
+ * If (oid_txt_length == -1), the strlen() will be invoked to determine the
+ * size of the (oid_text) string.
+ *
+ * After return, the optional (opt_oid_text_end) is set to the character after
+ * the last parsed one. (opt_oid_text_end) is never less than (oid_text).
+ *
+ * RETURN VALUES:
+ * -1: Parse error.
+ * >= 0: Number of arcs contained in the OBJECT IDENTIFIER.
+ *
+ * WARNING: The function always returns the real number of arcs,
+ * even if there is no sufficient (arc_slots) provided.
+ * This is useful for (arc_slots) value estimation.
+ */
+ssize_t OBJECT_IDENTIFIER_parse_arcs(const char *oid_text,
+ ssize_t oid_txt_length,
+ asn_oid_arc_t *arcs, size_t arcs_count,
+ const char **opt_oid_text_end);
+
+/*
+ * Internal functions.
+ * Used by RELATIVE-OID implementation in particular.
+ */
+
+/*
+ * Retrieve a single arc of size from the (arcbuf) buffer.
+ * RETURN VALUES:
+ * -1: Failed to retrieve the value from the (arcbuf).
+ * >0: Number of bytes consumed from the (arcbuf), <= (arcbuf_len).
+ */
+ssize_t OBJECT_IDENTIFIER_get_single_arc(const uint8_t *arcbuf,
+ size_t arcbuf_len,
+ asn_oid_arc_t *ret_value);
+
+/*
+ * Write the unterminated arc value into the (arcbuf) which has the size at
+ * least (arcbuf_len).
+ * RETURN VALUES:
+ * -1: (arcbuf_len) size is not sufficient to write the value.
+ * : Number of bytes appended to the arcbuf (<= arcbuf_len).
+ */
+ssize_t OBJECT_IDENTIFIER_set_single_arc(uint8_t *arcbuf, size_t arcbuf_len,
+ asn_oid_arc_t arc_value);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _OBJECT_IDENTIFIER_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/OCTET_STRING.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/OCTET_STRING.h
new file mode 100644
index 000000000..fd48d8703
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/OCTET_STRING.h
@@ -0,0 +1,168 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _OCTET_STRING_H_
+#define _OCTET_STRING_H_
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct OCTET_STRING {
+ uint8_t *buf; /* Buffer with consecutive OCTET_STRING bits */
+ size_t size; /* Size of the buffer */
+
+ asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */
+} OCTET_STRING_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_OCTET_STRING;
+extern asn_TYPE_operation_t asn_OP_OCTET_STRING;
+
+asn_struct_free_f OCTET_STRING_free;
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+asn_struct_print_f OCTET_STRING_print;
+asn_struct_print_f OCTET_STRING_print_utf8;
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+asn_struct_compare_f OCTET_STRING_compare;
+asn_struct_copy_f OCTET_STRING_copy;
+
+#define OCTET_STRING_constraint asn_generic_no_constraint
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+ber_type_decoder_f OCTET_STRING_decode_ber;
+der_type_encoder_f OCTET_STRING_encode_der;
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+xer_type_decoder_f OCTET_STRING_decode_xer_hex; /* Hexadecimal */
+xer_type_decoder_f OCTET_STRING_decode_xer_binary; /* 01010111010 */
+xer_type_decoder_f OCTET_STRING_decode_xer_utf8; /* ASCII/UTF-8 */
+xer_type_encoder_f OCTET_STRING_encode_xer;
+xer_type_encoder_f OCTET_STRING_encode_xer_utf8;
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+jer_type_decoder_f OCTET_STRING_decode_jer_hex; /* Hexadecimal */
+jer_type_decoder_f OCTET_STRING_decode_jer_utf8; /* ASCII/UTF-8 */
+jer_type_encoder_f OCTET_STRING_encode_jer;
+jer_type_encoder_f OCTET_STRING_encode_jer_utf8;
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_OER_SUPPORT)
+oer_type_decoder_f OCTET_STRING_decode_oer;
+oer_type_encoder_f OCTET_STRING_encode_oer;
+#endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+per_type_decoder_f OCTET_STRING_decode_uper;
+per_type_encoder_f OCTET_STRING_encode_uper;
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+per_type_decoder_f OCTET_STRING_decode_aper;
+per_type_encoder_f OCTET_STRING_encode_aper;
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_RFILL_SUPPORT)
+asn_random_fill_f OCTET_STRING_random_fill;
+#endif /* !defined(ASN_DISABLE_RFILL_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT) || !defined(ASN_DISABLE_APER_SUPPORT)
+int OCTET_STRING_per_get_characters(
+ asn_per_data_t *po,
+ uint8_t *buf,
+ size_t units,
+ unsigned int bpc,
+ unsigned int unit_bits,
+ long lb,
+ long ub,
+ const asn_per_constraints_t *pc);
+
+int OCTET_STRING_per_put_characters(
+ asn_per_outp_t *po,
+ const uint8_t *buf,
+ size_t units,
+ unsigned int bpc,
+ unsigned int unit_bits,
+ long lb,
+ long ub,
+ const asn_per_constraints_t *pc);
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) || !defined(ASN_DISABLE_APER_SUPPORT) */
+/******************************
+ * Handy conversion routines. *
+ ******************************/
+
+/*
+ * This function clears the previous value of the OCTET STRING (if any)
+ * and then allocates a new memory with the specified content (str/size).
+ * If size = -1, the size of the original string will be determined
+ * using strlen(str).
+ * If str equals to NULL, the function will silently clear the
+ * current contents of the OCTET STRING.
+ * Returns 0 if it was possible to perform operation, -1 otherwise.
+ */
+int OCTET_STRING_fromBuf(OCTET_STRING_t *s, const char *str, int size);
+
+/* Handy conversion from the C string into the OCTET STRING. */
+#define OCTET_STRING_fromString(s, str) OCTET_STRING_fromBuf(s, str, -1)
+
+/*
+ * Allocate and fill the new OCTET STRING and return a pointer to the newly
+ * allocated object. NULL is permitted in str: the function will just allocate
+ * empty OCTET STRING.
+ */
+OCTET_STRING_t *OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td,
+ const char *str, int size);
+
+/****************************
+ * Internally useful stuff. *
+ ****************************/
+
+typedef struct asn_OCTET_STRING_specifics_s {
+ /*
+ * Target structure description.
+ */
+ unsigned struct_size; /* Size of the structure */
+ unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */
+
+ enum asn_OS_Subvariant {
+ ASN_OSUBV_ANY, /* The open type (ANY) */
+ ASN_OSUBV_BIT, /* BIT STRING */
+ ASN_OSUBV_STR, /* String types, not {BMP,Universal}String */
+ ASN_OSUBV_U16, /* 16-bit character (BMPString) */
+ ASN_OSUBV_U32 /* 32-bit character (UniversalString) */
+ } subvariant;
+} asn_OCTET_STRING_specifics_t;
+
+extern asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs;
+
+size_t OCTET_STRING_random_length_constrained(
+ const asn_TYPE_descriptor_t *, const asn_encoding_constraints_t *,
+ size_t max_length);
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+struct _stack_el {
+ ber_tlv_len_t left; /* What's left to read (or -1) */
+ ber_tlv_len_t got; /* What was actually processed */
+ unsigned cont_level; /* Depth of subcontainment */
+ int want_nulls; /* Want null "end of content" octets? */
+ int bits_chopped; /* Flag in BIT STRING mode */
+ ber_tlv_tag_t tag; /* For debugging purposes */
+ struct _stack_el *prev;
+ struct _stack_el *next;
+};
+struct _stack {
+ struct _stack_el *tail;
+ struct _stack_el *cur_ptr;
+};
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _OCTET_STRING_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/OPEN_TYPE.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/OPEN_TYPE.h
new file mode 100644
index 000000000..936b38c0e
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/OPEN_TYPE.h
@@ -0,0 +1,128 @@
+/*-
+ * Copyright (c) 2017-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_OPEN_TYPE_H
+#define ASN_OPEN_TYPE_H
+
+#include
+///////////#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Decode an Open Type which is potentially constraiend
+ * by the other members of the parent structure.
+ */
+
+#undef ADVANCE
+#define ADVANCE(num_bytes) \
+ do { \
+ size_t num = num_bytes; \
+ ptr = ((const char *)ptr) + num; \
+ size -= num; \
+ consumed_myself += num; \
+ } while(0)
+
+#define OPEN_TYPE_free CHOICE_free
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+#define OPEN_TYPE_print CHOICE_print
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+#define OPEN_TYPE_compare CHOICE_compare
+#define OPEN_TYPE_copy CHOICE_copy
+
+#define OPEN_TYPE_constraint CHOICE_constraint
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+asn_dec_rval_t OPEN_TYPE_ber_get(
+ const asn_codec_ctx_t *opt_codec_ctx,
+ const asn_TYPE_descriptor_t *parent_type,
+ void *parent_structure,
+ const asn_TYPE_member_t *element,
+ const void *ptr, size_t size);
+#define OPEN_TYPE_decode_ber NULL
+#define OPEN_TYPE_encode_der CHOICE_encode_der
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+asn_dec_rval_t OPEN_TYPE_xer_get(
+ const asn_codec_ctx_t *opt_codec_ctx,
+ const asn_TYPE_descriptor_t *parent_type,
+ void *parent_structure,
+ const asn_TYPE_member_t *element,
+ const void *ptr, size_t size);
+#define OPEN_TYPE_decode_xer NULL
+#define OPEN_TYPE_encode_xer CHOICE_encode_xer
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+asn_dec_rval_t OPEN_TYPE_jer_get(
+ const asn_codec_ctx_t *opt_codec_ctx,
+ const asn_TYPE_descriptor_t *parent_type,
+ void *parent_structure,
+ const asn_TYPE_member_t *element,
+ const void *ptr, size_t size);
+#define OPEN_TYPE_decode_jer NULL
+#define OPEN_TYPE_encode_jer CHOICE_encode_jer
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_OER_SUPPORT)
+asn_dec_rval_t OPEN_TYPE_oer_get(
+ const asn_codec_ctx_t *opt_codec_ctx,
+ const asn_TYPE_descriptor_t *parent_type,
+ void *parent_structure,
+ asn_TYPE_member_t *element, const void *ptr,
+ size_t size);
+#define OPEN_TYPE_decode_oer NULL
+asn_enc_rval_t OPEN_TYPE_encode_oer(
+ const asn_TYPE_descriptor_t *type_descriptor,
+ const asn_oer_constraints_t *constraints, const void *struct_ptr,
+ asn_app_consume_bytes_f *consume_bytes_cb, void *app_key);
+#endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+asn_dec_rval_t OPEN_TYPE_uper_get(
+ const asn_codec_ctx_t *opt_codec_ctx,
+ const asn_TYPE_descriptor_t *parent_type,
+ void *parent_structure,
+ const asn_TYPE_member_t *element,
+ asn_per_data_t *pd);
+#define OPEN_TYPE_decode_uper NULL
+asn_enc_rval_t OPEN_TYPE_encode_uper(
+ const asn_TYPE_descriptor_t *type_descriptor,
+ const asn_per_constraints_t *constraints, const void *struct_ptr,
+ asn_per_outp_t *per_output);
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+asn_dec_rval_t OPEN_TYPE_aper_get(
+ const asn_codec_ctx_t *opt_codec_ctx,
+ const asn_TYPE_descriptor_t *parent_type,
+ void *parent_structure,
+ const asn_TYPE_member_t *element,
+ asn_per_data_t *pd);
+#define OPEN_TYPE_decode_aper NULL
+asn_enc_rval_t OPEN_TYPE_encode_aper(
+ const asn_TYPE_descriptor_t *type_descriptor,
+ const asn_per_constraints_t *constraints, const void *struct_ptr,
+ asn_per_outp_t *per_output);
+
+int OPEN_TYPE_aper_is_unknown_type(
+ const asn_TYPE_descriptor_t *td,
+ void *sptr,
+ const asn_TYPE_member_t *elm);
+
+asn_dec_rval_t OPEN_TYPE_aper_unknown_type_discard_bytes(
+ asn_per_data_t *pd);
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+extern asn_TYPE_operation_t asn_OP_OPEN_TYPE;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN_OPEN_TYPE_H */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/ObjectDescriptor.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/ObjectDescriptor.h
new file mode 100644
index 000000000..ddc69499f
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/ObjectDescriptor.h
@@ -0,0 +1,55 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _ObjectDescriptor_H_
+#define _ObjectDescriptor_H_
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef GraphicString_t ObjectDescriptor_t; /* Implemented via GraphicString */
+
+extern asn_TYPE_descriptor_t asn_DEF_ObjectDescriptor;
+extern asn_TYPE_operation_t asn_OP_ObjectDescriptor;
+
+#define ObjectDescriptor_free OCTET_STRING_free
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+#define ObjectDescriptor_print OCTET_STRING_print_utf8
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+#define ObjectDescriptor_constraint asn_generic_unknown_constraint
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+#define ObjectDescriptor_decode_ber OCTET_STRING_decode_ber
+#define ObjectDescriptor_encode_der OCTET_STRING_encode_der
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+#define ObjectDescriptor_decode_xer OCTET_STRING_decode_xer_utf8
+#define ObjectDescriptor_encode_xer OCTET_STRING_encode_xer_utf8
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+#define ObjectDescriptor_decode_jer OCTET_STRING_decode_jer_utf8
+#define ObjectDescriptor_encode_jer OCTET_STRING_encode_jer_utf8
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+#define ObjectDescriptor_decode_uper OCTET_STRING_decode_uper
+#define ObjectDescriptor_encode_uper OCTET_STRING_encode_uper
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+#define ObjectDescriptor_decode_aper OCTET_STRING_decode_aper
+#define ObjectDescriptor_encode_aper OCTET_STRING_encode_aper
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ObjectDescriptor_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/UTF8String.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/UTF8String.h
new file mode 100644
index 000000000..d26e241b9
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/UTF8String.h
@@ -0,0 +1,86 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _UTF8String_H_
+#define _UTF8String_H_
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t UTF8String_t; /* Implemented via OCTET STRING */
+
+extern asn_TYPE_descriptor_t asn_DEF_UTF8String;
+extern asn_TYPE_operation_t asn_OP_UTF8String;
+
+#define UTF8String_free OCTET_STRING_free
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+asn_struct_print_f UTF8String_print;
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+#define UTF8String_compare OCTET_STRING_compare
+#define UTF8String_copy OCTET_STRING_copy
+
+asn_constr_check_f UTF8String_constraint;
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+#define UTF8String_decode_ber OCTET_STRING_decode_ber
+#define UTF8String_encode_der OCTET_STRING_encode_der
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+#define UTF8String_decode_xer OCTET_STRING_decode_xer_utf8
+#define UTF8String_encode_xer OCTET_STRING_encode_xer_utf8
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+#define UTF8String_decode_jer OCTET_STRING_decode_jer_utf8
+#define UTF8String_encode_jer OCTET_STRING_encode_jer_utf8
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+#define UTF8String_decode_uper OCTET_STRING_decode_uper
+#define UTF8String_encode_uper OCTET_STRING_encode_uper
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+#define UTF8String_decode_aper OCTET_STRING_decode_aper
+#define UTF8String_encode_aper OCTET_STRING_encode_aper
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_RFILL_SUPPORT)
+asn_random_fill_f UTF8String_random_fill;
+#endif /* !defined(ASN_DISABLE_RFILL_SUPPORT) */
+
+/*
+ * Returns length of the given UTF-8 string in characters,
+ * or a negative error code:
+ * -1: UTF-8 sequence truncated
+ * -2: Illegal UTF-8 sequence start
+ * -3: Continuation expectation failed
+ * -4: Not minimal length encoding
+ * -5: Invalid arguments
+ */
+ssize_t UTF8String_length(const UTF8String_t *st);
+
+/*
+ * Convert the UTF-8 string into a sequence of wide characters.
+ * Returns the number of characters necessary.
+ * Returned value might be greater than dstlen.
+ * In case of conversion error, 0 is returned.
+ *
+ * If st points to a valid UTF-8 string, calling
+ * UTF8String_to_wcs(st, 0, 0);
+ * is equivalent to
+ * UTF8String_length(const UTF8String_t *st);
+ */
+size_t UTF8String_to_wcs(const UTF8String_t *st, uint32_t *dst, size_t dstlen);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _UTF8String_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/VisibleString.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/VisibleString.h
new file mode 100644
index 000000000..dd7343550
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/VisibleString.h
@@ -0,0 +1,58 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _VisibleString_H_
+#define _VisibleString_H_
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t VisibleString_t; /* Implemented via OCTET STRING */
+
+extern asn_TYPE_descriptor_t asn_DEF_VisibleString;
+extern asn_TYPE_operation_t asn_OP_VisibleString;
+
+#define VisibleString_free OCTET_STRING_free
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+#define VisibleString_print OCTET_STRING_print
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+#define VisibleString_compare OCTET_STRING_compare
+#define VisibleString_copy OCTET_STRING_copy
+
+asn_constr_check_f VisibleString_constraint;
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+#define VisibleString_decode_ber OCTET_STRING_decode_ber
+#define VisibleString_encode_der OCTET_STRING_encode_der
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+#define VisibleString_decode_xer OCTET_STRING_decode_xer_hex
+#define VisibleString_encode_xer OCTET_STRING_encode_xer
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+#define VisibleString_decode_jer OCTET_STRING_decode_jer_hex
+#define VisibleString_encode_jer OCTET_STRING_encode_jer
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+#define VisibleString_decode_uper OCTET_STRING_decode_uper
+#define VisibleString_encode_uper OCTET_STRING_encode_uper
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+#define VisibleString_decode_aper OCTET_STRING_decode_aper
+#define VisibleString_encode_aper OCTET_STRING_encode_aper
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _VisibleString_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/aper_decoder.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/aper_decoder.h
new file mode 100644
index 000000000..abafbf88d
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/aper_decoder.h
@@ -0,0 +1,47 @@
+/*-
+ * Copyright (c) 2005-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _APER_DECODER_H_
+#define _APER_DECODER_H_
+
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s; /* Forward declaration */
+
+/*
+ * Aligned PER decoder of a "complete encoding" as per X.691#10.1.
+ * On success, this call always returns (.consumed >= 1), in BITS, as per X.691#10.1.3.
+ */
+asn_dec_rval_t aper_decode_complete(
+ const struct asn_codec_ctx_s *opt_codec_ctx,
+ const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */
+ void **struct_ptr, /* Pointer to a target structure's pointer */
+ const void *buffer, /* Data to be decoded */
+ size_t size /* Size of data buffer */
+ );
+
+/*
+ * Aligned PER decoder of any ASN.1 type. May be invoked by the application.
+ * WARNING: This call returns the number of BITS read from the stream. Beware.
+ */
+asn_dec_rval_t aper_decode(
+ const struct asn_codec_ctx_s *opt_codec_ctx,
+ const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */
+ void **struct_ptr, /* Pointer to a target structure's pointer */
+ const void *buffer, /* Data to be decoded */
+ size_t size, /* Size of data buffer */
+ int skip_bits, /* Number of unused leading bits, 0..7 */
+ int unused_bits /* Number of unused tailing bits, 0..7 */
+ );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _APER_DECODER_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/aper_encoder.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/aper_encoder.h
new file mode 100644
index 000000000..7b8cc019c
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/aper_encoder.h
@@ -0,0 +1,63 @@
+/*-
+ * Copyright (c) 2006-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _APER_ENCODER_H_
+#define _APER_ENCODER_H_
+
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s; /* Forward declaration */
+
+/*
+ * Aligned PER encoder of any ASN.1 type. May be invoked by the application.
+ * WARNING: This function returns the number of encoded bits in the .encoded
+ * field of the return value. Use the following formula to convert to bytes:
+ * bytes = ((.encoded + 7) / 8)
+ */
+asn_enc_rval_t aper_encode(
+ const struct asn_TYPE_descriptor_s *type_descriptor,
+ const asn_per_constraints_t *constraints,
+ const void *struct_ptr, /* Structure to be encoded */
+ asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */
+ void *app_key /* Arbitrary callback argument */
+);
+
+/*
+ * A variant of aper_encode() which encodes data into the existing buffer
+ * WARNING: This function returns the number of encoded bits in the .encoded
+ * field of the return value.
+ */
+asn_enc_rval_t aper_encode_to_buffer(
+ const struct asn_TYPE_descriptor_s *type_descriptor,
+ const asn_per_constraints_t *constraints,
+ const void *struct_ptr, /* Structure to be encoded */
+ void *buffer, /* Pre-allocated buffer */
+ size_t buffer_size /* Initial buffer size (max) */
+);
+
+/*
+ * A variant of aper_encode_to_buffer() which allocates buffer itself.
+ * Returns the number of bytes in the buffer or -1 in case of failure.
+ * WARNING: This function produces a "Production of the complete encoding",
+ * with length of at least one octet. Contrast this to precise bit-packing
+ * encoding of aper_encode() and aper_encode_to_buffer().
+ */
+ssize_t
+aper_encode_to_new_buffer(
+ const struct asn_TYPE_descriptor_s *td,
+ const asn_per_constraints_t *constraints,
+ const void *sptr,
+ void **buffer_r
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _APER_ENCODER_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/aper_opentype.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/aper_opentype.h
new file mode 100644
index 000000000..ed948dfcb
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/aper_opentype.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2007-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _APER_OPENTYPE_H_
+#define _APER_OPENTYPE_H_
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+asn_dec_rval_t aper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx,
+ const asn_TYPE_descriptor_t *td,
+ const asn_per_constraints_t *constraints,
+ void **sptr, asn_per_data_t *pd);
+
+
+int aper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx, asn_per_data_t *pd);
+
+int aper_open_type_put(const asn_TYPE_descriptor_t *td,
+ const asn_per_constraints_t *constraints,
+ const void *sptr, asn_per_outp_t *po);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _APER_OPENTYPE_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/aper_support.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/aper_support.h
new file mode 100644
index 000000000..9ad0eba06
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/aper_support.h
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2005-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _APER_SUPPORT_H_
+#define _APER_SUPPORT_H_
+
+#include /* Platform-specific types */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * X.691 (08/2015) #11.9 "General rules for encoding a length determinant"
+ * Get the length "n" from the Aligned PER stream.
+ */
+ssize_t aper_get_length(asn_per_data_t *pd, ssize_t lb, ssize_t ub,
+ int effective_bound_bits, int *repeat);
+
+/*
+ * Get the normally small length "n".
+ */
+ssize_t aper_get_nslength(asn_per_data_t *pd);
+
+/*
+ * Get the normally small non-negative whole number.
+ */
+ssize_t aper_get_nsnnwn(asn_per_data_t *pd);
+
+/*
+ * Get the constrained whole number.
+ */
+long aper_get_constrained_whole_number(asn_per_data_t *po, long lb, long ub);
+
+/*
+ * X.691 (08/2015) #11.9 "General rules for encoding a length determinant"
+ * Put the length "n" to the Aligned PER stream.
+ * If (opt_need_eom) is given, it will be set to 1 if final 0-n is needed.
+ * In that case, invoke aper_put_length(po, -1, -1, 0, NULL) after encoding the
+ * last block.
+ * This function returns the number of units which may be flushed
+ * in the next units saving iteration.
+ */
+ssize_t aper_put_length(asn_per_outp_t *po, ssize_t lb, ssize_t ub, size_t n,
+ int *opt_need_eom);
+
+/* Align the current bit position to octet bundary */
+int aper_put_align(asn_per_outp_t *po);
+int32_t aper_get_align(asn_per_data_t *pd);
+
+/*
+ * Put the normally small length "n" to the Unaligned PER stream.
+ * Returns 0 or -1.
+ */
+int aper_put_nslength(asn_per_outp_t *po, size_t length);
+
+/*
+ * Put the normally small non-negative whole number.
+ */
+int aper_put_nsnnwn(asn_per_outp_t *po, int number);
+
+/*
+ * Put the constrained whole number.
+ */
+int aper_put_constrained_whole_number(asn_per_outp_t *po, long lb, long ub, long number);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _APER_SUPPORT_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_SEQUENCE_OF.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_SEQUENCE_OF.h
new file mode 100644
index 000000000..80e5fc3f7
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_SEQUENCE_OF.h
@@ -0,0 +1,52 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_SEQUENCE_OF_H
+#define ASN_SEQUENCE_OF_H
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * SEQUENCE OF is the same as SET OF with a tiny difference:
+ * the delete operation preserves the initial order of elements
+ * and thus MAY operate in non-constant time.
+ */
+#define A_SEQUENCE_OF(type) A_SET_OF(type)
+
+#define ASN_SEQUENCE_ADD(headptr, ptr) \
+ asn_sequence_add((headptr), (ptr))
+
+/***********************************************
+ * Implementation of the SEQUENCE OF structure.
+ */
+
+#define asn_sequence_add asn_set_add
+#define asn_sequence_empty asn_set_empty
+
+/*
+ * Delete the element from the set by its number (base 0).
+ * This is NOT a constant-time operation.
+ * The order of elements is preserved.
+ * If _do_free is given AND the (*free) is initialized, the element
+ * will be freed using the custom (*free) function as well.
+ */
+void asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free);
+
+/*
+ * Cope with different conversions requirements to/from void in C and C++.
+ * This is mostly useful for support library.
+ */
+typedef A_SEQUENCE_OF(void) asn_anonymous_sequence_;
+#define _A_SEQUENCE_FROM_VOID(ptr) ((asn_anonymous_sequence_ *)(ptr))
+#define _A_CSEQUENCE_FROM_VOID(ptr) ((const asn_anonymous_sequence_ *)(ptr))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN_SEQUENCE_OF_H */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_SET_OF.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_SET_OF.h
new file mode 100644
index 000000000..882e1a47d
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_SET_OF.h
@@ -0,0 +1,72 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_SET_OF_H
+#define ASN_SET_OF_H
+
+#ifdef __cplusplus
+#define A_SET_OF(type) \
+ struct { \
+ type **array; \
+ int count; /* Meaningful size */ \
+ int size; /* Allocated size */ \
+ void (*free)(decltype(*array)); \
+ }
+#else /* C */
+#define A_SET_OF(type) \
+ struct { \
+ type **array; \
+ int count; /* Meaningful size */ \
+ int size; /* Allocated size */ \
+ void (*free)(type *); \
+ }
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ASN_SET_ADD(headptr, ptr) \
+ asn_set_add((headptr), (ptr))
+
+/*******************************************
+ * Implementation of the SET OF structure.
+ */
+
+/*
+ * Add another structure into the set by its pointer.
+ * RETURN VALUES:
+ * 0 for success and -1/errno for failure.
+ */
+int asn_set_add(void *asn_set_of_x, void *ptr);
+
+/*
+ * Delete the element from the set by its number (base 0).
+ * This is a constant-time operation. The order of elements before the
+ * deleted ones is guaranteed, the order of elements after the deleted
+ * one is NOT guaranteed.
+ * If _do_free is given AND the (*free) is initialized, the element
+ * will be freed using the custom (*free) function as well.
+ */
+void asn_set_del(void *asn_set_of_x, int number, int _do_free);
+
+/*
+ * Empty the contents of the set. Will free the elements, if (*free) is given.
+ * Will NOT free the set itself.
+ */
+void asn_set_empty(void *asn_set_of_x);
+
+/*
+ * Cope with different conversions requirements to/from void in C and C++.
+ * This is mostly useful for support library.
+ */
+typedef A_SET_OF(void) asn_anonymous_set_;
+#define _A_SET_FROM_VOID(ptr) ((asn_anonymous_set_ *)(ptr))
+#define _A_CSET_FROM_VOID(ptr) ((const asn_anonymous_set_ *)(ptr))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN_SET_OF_H */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_application.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_application.h
new file mode 100644
index 000000000..39cee9769
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_application.h
@@ -0,0 +1,179 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * Application-level ASN.1 callbacks.
+ */
+#ifndef ASN_APPLICATION_H
+#define ASN_APPLICATION_H
+
+#include "etsi_its_mapem_ts_coding/asn_system.h" /* for platform-dependent types */
+#include "etsi_its_mapem_ts_coding/asn_codecs.h" /* for ASN.1 codecs specifics */
+#include "etsi_its_mapem_ts_coding/asn_config.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * A selection of ASN.1 Transfer Syntaxes to use with generalized
+ * encoders and decoders declared further in this .h file.
+ */
+enum asn_transfer_syntax {
+ /* Avoid appearance of a default transfer syntax. */
+ ATS_INVALID = 0,
+ /* Plaintext output (not conforming to any standard), for debugging. */
+ ATS_NONSTANDARD_PLAINTEXT,
+ /* Returns a randomly generated structure. */
+ ATS_RANDOM,
+ /*
+ * X.690:
+ * BER: Basic Encoding Rules.
+ * DER: Distinguished Encoding Rules.
+ * CER: Canonical Encoding Rules.
+ * DER and CER are more strict variants of BER.
+ */
+ ATS_BER,
+ ATS_DER,
+ ATS_CER, /* Only decoding is supported */
+ /*
+ * X.696:
+ * OER: Octet Encoding Rules.
+ * CANONICAL-OER is a more strict variant of BASIC-OER.
+ */
+ ATS_BASIC_OER,
+ ATS_CANONICAL_OER,
+ /*
+ * X.691:
+ * PER: Packed Encoding Rules.
+ * CANONICAL-PER is a more strict variant of BASIC-PER.
+ * NOTE: Produces or consumes a complete encoding (X.691 (08/2015) #11.1).
+ */
+ ATS_UNALIGNED_BASIC_PER,
+ ATS_UNALIGNED_CANONICAL_PER,
+ ATS_ALIGNED_BASIC_PER,
+ ATS_ALIGNED_CANONICAL_PER,
+ /*
+ * X.693:
+ * XER: XML Encoding Rules.
+ * CANONICAL-XER is a more strict variant of BASIC-XER.
+ */
+ ATS_BASIC_XER,
+ ATS_CANONICAL_XER,
+ /*
+ * X.697:
+ * JER: JSON Encoding Rules.
+ * MINIFIED produces a whitespace-free JSON.
+ */
+ ATS_JER,
+ ATS_JER_MINIFIED,
+};
+
+/*
+ * A generic encoder for any supported transfer syntax.
+ * RETURN VALUES:
+ * The (.encoded) field of the return value is REDEFINED to mean the following:
+ * >=0: The computed size of the encoded data. Can exceed the (buffer_size).
+ * -1: Error encoding the structure. See the error code in (errno):
+ * EINVAL: Incorrect parameters to the function, such as NULLs.
+ * ENOENT: Encoding transfer syntax is not defined (for this type).
+ * EBADF: The structure has invalid form or content constraint failed.
+ * The (.failed_type) and (.structure_ptr) MIGHT be set to the appropriate
+ * values at the place of failure, if at all possible.
+ * WARNING: The (.encoded) field of the return value can exceed the buffer_size.
+ * This is similar to snprintf(3) contract which might return values
+ * greater than the buffer size.
+ */
+asn_enc_rval_t asn_encode_to_buffer(
+ const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */
+ enum asn_transfer_syntax,
+ const struct asn_TYPE_descriptor_s *type_to_encode,
+ const void *structure_to_encode, void *buffer, size_t buffer_size);
+
+/*
+ * A variant of asn_encode_to_buffer() with automatically allocated buffer.
+ * RETURN VALUES:
+ * On success, returns a newly allocated (.buffer) containing the whole message.
+ * The message size is returned in (.result.encoded).
+ * On failure:
+ * (.buffer) is NULL,
+ * (.result.encoded) as in asn_encode_to_buffer(),
+ * The errno codes as in asn_encode_to_buffer(), plus the following:
+ * ENOMEM: Memory allocation failed due to system or internal limits.
+ * The user is responsible for freeing the (.buffer).
+ */
+typedef struct asn_encode_to_new_buffer_result_s {
+ void *buffer; /* NULL if failed to encode. */
+ asn_enc_rval_t result;
+} asn_encode_to_new_buffer_result_t;
+asn_encode_to_new_buffer_result_t asn_encode_to_new_buffer(
+ const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */
+ enum asn_transfer_syntax,
+ const struct asn_TYPE_descriptor_s *type_to_encode,
+ const void *structure_to_encode);
+
+
+/*
+ * Generic type of an application-defined callback to return various
+ * types of data to the application.
+ * EXPECTED RETURN VALUES:
+ * -1: Failed to consume bytes. Abort the mission.
+ * Non-negative return values indicate success, and ignored.
+ */
+typedef int(asn_app_consume_bytes_f)(const void *buffer, size_t size,
+ void *application_specific_key);
+
+
+/*
+ * A generic encoder for any supported transfer syntax.
+ * Returns the comprehensive encoding result descriptor (see asn_codecs.h).
+ * RETURN VALUES:
+ * The negative (.encoded) field of the return values is accompanied with the
+ * following error codes (errno):
+ * EINVAL: Incorrect parameters to the function, such as NULLs.
+ * ENOENT: Encoding transfer syntax is not defined (for this type).
+ * EBADF: The structure has invalid form or content constraint failed.
+ * EIO: The (callback) has returned negative value during encoding.
+ */
+asn_enc_rval_t asn_encode(
+ const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */
+ enum asn_transfer_syntax,
+ const struct asn_TYPE_descriptor_s *type_to_encode,
+ const void *structure_to_encode,
+ asn_app_consume_bytes_f *callback, void *callback_key);
+
+
+/*
+ * A generic decoder for any supported transfer syntax.
+ */
+asn_dec_rval_t asn_decode(
+ const asn_codec_ctx_t *opt_codec_parameters, enum asn_transfer_syntax,
+ const struct asn_TYPE_descriptor_s *type_to_decode,
+ void **structure_ptr, /* Pointer to a target structure's pointer */
+ const void *buffer, /* Data to be decoded */
+ size_t size /* Size of that buffer */
+);
+
+
+/*
+ * A callback of this type is called whenever constraint validation fails
+ * on some ASN.1 type. See "constraints.h" for more details on constraint
+ * validation.
+ * This callback specifies a descriptor of the ASN.1 type which failed
+ * the constraint check, as well as human readable message on what
+ * particular constraint has failed.
+ */
+typedef void (asn_app_constraint_failed_f)(void *application_specific_key,
+ const struct asn_TYPE_descriptor_s *type_descriptor_which_failed,
+ const void *structure_which_failed_ptr,
+ const char *error_message_format, ...) CC_PRINTFLIKE(4, 5);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#include "etsi_its_mapem_ts_coding/constr_TYPE.h" /* for asn_TYPE_descriptor_t */
+
+#endif /* ASN_APPLICATION_H */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_bit_data.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_bit_data.h
new file mode 100644
index 000000000..450297f8e
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_bit_data.h
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2005-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_BIT_DATA
+#define ASN_BIT_DATA
+
+#include /* Platform-specific types */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * This structure describes a position inside an incoming PER bit stream.
+ */
+typedef struct asn_bit_data_s {
+ const uint8_t *buffer; /* Pointer to the octet stream */
+ size_t nboff; /* Bit offset to the meaningful bit */
+ size_t nbits; /* Number of bits in the stream */
+ size_t moved; /* Number of bits moved through this bit stream */
+ int (*refill)(struct asn_bit_data_s *);
+ void *refill_key;
+} asn_bit_data_t;
+
+/*
+ * Create a contiguous non-refillable bit data structure.
+ * Can be freed by FREEMEM().
+ */
+asn_bit_data_t *asn_bit_data_new_contiguous(const void *data, size_t size_bits);
+
+/*
+ * Extract a small number of bits (<= 31) from the specified PER data pointer.
+ * This function returns -1 if the specified number of bits could not be
+ * extracted due to EOD or other conditions.
+ */
+int32_t asn_get_few_bits(asn_bit_data_t *, int get_nbits);
+
+/* Undo the immediately preceding "get_few_bits" operation */
+void asn_get_undo(asn_bit_data_t *, int get_nbits);
+
+/*
+ * Extract a large number of bits from the specified PER data pointer.
+ * This function returns -1 if the specified number of bits could not be
+ * extracted due to EOD or other conditions.
+ */
+int asn_get_many_bits(asn_bit_data_t *, uint8_t *dst, int right_align,
+ int get_nbits);
+
+/* Non-thread-safe debugging function, don't use it */
+char *asn_bit_data_string(asn_bit_data_t *);
+
+/*
+ * This structure supports forming bit output.
+ */
+typedef struct asn_bit_outp_s {
+ uint8_t *buffer; /* Pointer into the (tmpspace) */
+ size_t nboff; /* Bit offset to the meaningful bit */
+ size_t nbits; /* Number of bits left in (tmpspace) */
+ uint8_t tmpspace[32]; /* Preliminary storage to hold data */
+ int (*output)(const void *data, size_t size, void *op_key);
+ void *op_key; /* Key for (output) data callback */
+ size_t flushed_bytes; /* Bytes already flushed through (output) */
+} asn_bit_outp_t;
+
+/* Output a small number of bits (<= 31) */
+int asn_put_few_bits(asn_bit_outp_t *, uint32_t bits, int obits);
+
+/* Output a large number of bits */
+int asn_put_many_bits(asn_bit_outp_t *, const uint8_t *src, int put_nbits);
+
+/*
+ * Flush whole bytes (0 or more) through (outper) member.
+ * The least significant bits which are not used are guaranteed to be set to 0.
+ * Returns -1 if callback returns -1. Otherwise, 0.
+ */
+int asn_put_aligned_flush(asn_bit_outp_t *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN_BIT_DATA */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_codecs.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_codecs.h
new file mode 100644
index 000000000..e75c2709c
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_codecs.h
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_CODECS_H
+#define ASN_CODECS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s; /* Forward declaration */
+
+/*
+ * This structure defines a set of parameters that may be passed
+ * to every ASN.1 encoder or decoder function.
+ * WARNING: if max_stack_size member is set, and you are calling the
+ * function pointers of the asn_TYPE_descriptor_t directly,
+ * this structure must be ALLOCATED ON THE STACK!
+ * If you can't always satisfy this requirement, use ber_decode(),
+ * xer_decode() and uper_decode() functions instead.
+ */
+typedef struct asn_codec_ctx_s {
+ /*
+ * Limit the decoder routines to use no (much) more stack than a given
+ * number of bytes. Most of decoders are stack-based, and this
+ * would protect against stack overflows if the number of nested
+ * encodings is high.
+ * The OCTET STRING, BIT STRING and ANY BER decoders are heap-based,
+ * and are safe from this kind of overflow.
+ * A value from getrlimit(RLIMIT_STACK) may be used to initialize
+ * this variable. Be careful in multithreaded environments, as the
+ * stack size is rather limited.
+ */
+ size_t max_stack_size; /* 0 disables stack bounds checking */
+} asn_codec_ctx_t;
+
+/*
+ * Type of the return value of the encoding functions (der_encode, xer_encode).
+ */
+typedef struct asn_enc_rval_s {
+ /*
+ * Number of bytes encoded.
+ * -1 indicates failure to encode the structure.
+ * In this case, the members below this one are meaningful.
+ */
+ ssize_t encoded;
+
+ /*
+ * Members meaningful when (encoded == -1), for post mortem analysis.
+ */
+
+ /* Type which cannot be encoded */
+ const struct asn_TYPE_descriptor_s *failed_type;
+
+ /* Pointer to the structure of that type */
+ const void *structure_ptr;
+} asn_enc_rval_t;
+#define ASN__ENCODE_FAILED do { \
+ asn_enc_rval_t tmp_error; \
+ tmp_error.encoded = -1; \
+ tmp_error.failed_type = td; \
+ tmp_error.structure_ptr = sptr; \
+ ASN_DEBUG("Failed to encode element %s", td ? td->name : ""); \
+ return tmp_error; \
+} while(0)
+#define ASN__ENCODED_OK(rval) do { \
+ rval.structure_ptr = 0; \
+ rval.failed_type = 0; \
+ return rval; \
+} while(0)
+
+/*
+ * Type of the return value of the decoding functions (ber_decode, xer_decode)
+ *
+ * Please note that the number of consumed bytes is ALWAYS meaningful,
+ * even if code==RC_FAIL. This is to indicate the number of successfully
+ * decoded bytes, hence providing a possibility to fail with more diagnostics
+ * (i.e., print the offending remainder of the buffer).
+ */
+enum asn_dec_rval_code_e {
+ RC_OK, /* Decoded successfully */
+ RC_WMORE, /* More data expected, call again */
+ RC_FAIL /* Failure to decode data */
+};
+typedef struct asn_dec_rval_s {
+ enum asn_dec_rval_code_e code; /* Result code */
+ size_t consumed; /* Number of bytes consumed */
+} asn_dec_rval_t;
+#define ASN__DECODE_FAILED do { \
+ asn_dec_rval_t tmp_error; \
+ tmp_error.code = RC_FAIL; \
+ tmp_error.consumed = 0; \
+ ASN_DEBUG("Failed to decode element %s", td ? td->name : ""); \
+ return tmp_error; \
+} while(0)
+#define ASN__DECODE_STARVED do { \
+ asn_dec_rval_t tmp_error; \
+ tmp_error.code = RC_WMORE; \
+ tmp_error.consumed = 0; \
+ return tmp_error; \
+} while(0)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN_CODECS_H */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_codecs_prim.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_codecs_prim.h
new file mode 100644
index 000000000..ced4c55c8
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_codecs_prim.h
@@ -0,0 +1,82 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_CODECS_PRIM_H
+#define ASN_CODECS_PRIM_H
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct ASN__PRIMITIVE_TYPE_s {
+ uint8_t *buf; /* Buffer with consecutive primitive encoding bytes */
+ size_t size; /* Size of the buffer */
+} ASN__PRIMITIVE_TYPE_t; /* Do not use this type directly! */
+
+asn_struct_free_f ASN__PRIMITIVE_TYPE_free;
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+ber_type_decoder_f ber_decode_primitive;
+der_type_encoder_f der_encode_primitive;
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+/*
+ * A callback specification for the xer_decode_primitive() function below.
+ */
+enum xer_pbd_rval {
+ XPBD_SYSTEM_FAILURE, /* System failure (memory shortage, etc) */
+ XPBD_DECODER_LIMIT, /* Hit some decoder limitation or deficiency */
+ XPBD_BROKEN_ENCODING, /* Encoding of a primitive body is broken */
+ XPBD_NOT_BODY_IGNORE, /* Not a body format, but safe to ignore */
+ XPBD_BODY_CONSUMED /* Body is recognized and consumed */
+};
+typedef enum xer_pbd_rval(xer_primitive_body_decoder_f)(
+ const asn_TYPE_descriptor_t *td, void *struct_ptr, const void *chunk_buf,
+ size_t chunk_size);
+
+/*
+ * Specific function to decode simple primitive types.
+ * Also see xer_decode_general() in xer_decoder.h
+ */
+asn_dec_rval_t xer_decode_primitive(
+ const asn_codec_ctx_t *opt_codec_ctx,
+ const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr,
+ size_t struct_size, const char *opt_mname, const void *buf_ptr, size_t size,
+ xer_primitive_body_decoder_f *prim_body_decoder);
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+/*
+ * A callback specification for the jer_decode_primitive() function below.
+ */
+enum jer_pbd_rval {
+ JPBD_SYSTEM_FAILURE, /* System failure (memory shortage, etc) */
+ JPBD_DECODER_LIMIT, /* Hit some decoder limitation or deficiency */
+ JPBD_BROKEN_ENCODING, /* Encoding of a primitive body is broken */
+ JPBD_NOT_BODY_IGNORE, /* Not a body format, but safe to ignore */
+ JPBD_BODY_CONSUMED /* Body is recognized and consumed */
+};
+typedef enum jer_pbd_rval(jer_primitive_body_decoder_f)(
+ const asn_TYPE_descriptor_t *td, void *struct_ptr, const void *chunk_buf,
+ size_t chunk_size);
+
+/*
+ * Specific function to decode simple primitive types.
+ * Also see jer_decode_general() in jer_decoder.h
+ */
+asn_dec_rval_t jer_decode_primitive(
+ const asn_codec_ctx_t *opt_codec_ctx,
+ const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr,
+ size_t struct_size, const void *buf_ptr, size_t size,
+ jer_primitive_body_decoder_f *prim_body_decoder);
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN_CODECS_PRIM_H */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_config.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_config.h
new file mode 100644
index 000000000..ddcac9026
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_config.h
@@ -0,0 +1,6 @@
+// Generated automatically. Don't edit manually!
+
+#define ASN_DISABLE_BER_SUPPORT 1
+#define ASN_DISABLE_XER_SUPPORT 1
+#define ASN_DISABLE_OER_SUPPORT 1
+#define ASN_DISABLE_JER_SUPPORT 1
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_internal.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_internal.h
new file mode 100644
index 000000000..dfebc5bc7
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_internal.h
@@ -0,0 +1,187 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * Declarations internally useful for the ASN.1 support code.
+ */
+#ifndef ASN_INTERNAL_H
+#define ASN_INTERNAL_H
+#ifndef __EXTENSIONS__
+#define __EXTENSIONS__ /* for Sun */
+#endif
+
+#include "etsi_its_mapem_ts_coding/asn_application.h" /* Application-visible API */
+
+#ifndef __NO_ASSERT_H__ /* Include assert.h only for internal use. */
+#include /* for assert() macro */
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+#include
+#include
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+#include
+#include
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+/* Environment version might be used to avoid running with the old library */
+#define ASN1C_ENVIRONMENT_VERSION 923 /* Compile-time version */
+int get_asn1c_environment_version(void); /* Run-time version */
+
+#define CALLOC(nmemb, size) calloc(nmemb, size)
+#define MALLOC(size) malloc(size)
+#define REALLOC(oldptr, size) realloc(oldptr, size)
+#define FREEMEM(ptr) free(ptr)
+
+#define asn_debug_indent 0
+#define ASN_DEBUG_INDENT_ADD(i) do{}while(0)
+
+#ifdef EMIT_ASN_DEBUG
+#warning "Use ASN_EMIT_DEBUG instead of EMIT_ASN_DEBUG"
+#define ASN_EMIT_DEBUG EMIT_ASN_DEBUG
+#endif
+
+/*
+ * A macro for debugging the ASN.1 internals.
+ * You may enable or override it.
+ */
+#ifndef ASN_DEBUG /* If debugging code is not defined elsewhere... */
+#if ASN_EMIT_DEBUG == 1 /* And it was asked to emit this code... */
+#if __STDC_VERSION__ >= 199901L
+#ifdef ASN_THREAD_SAFE
+/* Thread safety requires sacrifice in output indentation:
+ * Retain empty definition of ASN_DEBUG_INDENT_ADD. */
+#else /* !ASN_THREAD_SAFE */
+#undef ASN_DEBUG_INDENT_ADD
+#undef asn_debug_indent
+int asn_debug_indent;
+#define ASN_DEBUG_INDENT_ADD(i) do { asn_debug_indent += i; } while(0)
+#endif /* ASN_THREAD_SAFE */
+#define ASN_DEBUG(fmt, args...) do { \
+ int adi = asn_debug_indent; \
+ while(adi--) fprintf(stderr, " "); \
+ fprintf(stderr, fmt, ##args); \
+ fprintf(stderr, " (%s:%d)\n", \
+ __FILE__, __LINE__); \
+ } while(0)
+#else /* !C99 */
+void CC_PRINTFLIKE(1, 2) ASN_DEBUG_f(const char *fmt, ...);
+#define ASN_DEBUG ASN_DEBUG_f
+#endif /* C99 */
+#else /* ASN_EMIT_DEBUG != 1 */
+#if __STDC_VERSION__ >= 199901L
+#define ASN_DEBUG(...) do{}while(0)
+#else /* not C99 */
+static void CC_PRINTFLIKE(1, 2) ASN_DEBUG(const char *fmt, ...) { (void)fmt; }
+#endif /* C99 or better */
+#endif /* ASN_EMIT_DEBUG */
+#endif /* ASN_DEBUG */
+
+/*
+ * Print to a callback.
+ * The callback is expected to return negative values on error.
+ * 0 and positive values are treated as success.
+ * RETURN VALUES:
+ * -1: Failed to format or invoke the callback.
+ * >0: Size of the data that got delivered to the callback.
+ */
+ssize_t CC_PRINTFLIKE(3, 4)
+asn__format_to_callback(
+ int (*callback)(const void *, size_t, void *key), void *key,
+ const char *fmt, ...);
+
+/*
+ * Invoke the application-supplied callback and fail, if something is wrong.
+ */
+#define ASN__E_cbc(buf, size) (cb((buf), (size), app_key) < 0)
+#define ASN__E_CALLBACK(size, foo) \
+ do { \
+ if(foo) goto cb_failed; \
+ er.encoded += (size); \
+ } while(0)
+#define ASN__CALLBACK(buf, size) ASN__E_CALLBACK(size, ASN__E_cbc(buf, size))
+#define ASN__CALLBACK2(buf1, size1, buf2, size2) \
+ ASN__E_CALLBACK((size1) + (size2), \
+ ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2))
+#define ASN__CALLBACK3(buf1, size1, buf2, size2, buf3, size3) \
+ ASN__E_CALLBACK((size1) + (size2) + (size3), \
+ ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2) \
+ || ASN__E_cbc(buf3, size3))
+
+#define ASN__TEXT_INDENT(nl, level) \
+ do { \
+ int tmp_level = (level); \
+ int tmp_nl = ((nl) != 0); \
+ int tmp_i; \
+ if(tmp_nl) ASN__CALLBACK("\n", 1); \
+ if(tmp_level < 0) tmp_level = 0; \
+ for(tmp_i = 0; tmp_i < tmp_level; tmp_i++) ASN__CALLBACK(" ", 4); \
+ } while(0)
+
+#define _i_INDENT(nl) do { \
+ int tmp_i; \
+ if((nl) && cb("\n", 1, app_key) < 0) \
+ return -1; \
+ for(tmp_i = 0; tmp_i < ilevel; tmp_i++) \
+ if(cb(" ", 4, app_key) < 0) \
+ return -1; \
+ } while(0)
+
+/*
+ * Check stack against overflow, if limit is set.
+ */
+
+/* Since GCC 13, AddressSanitizer started defaulting to
+* ASAN_OPTIONS="detect_stack_use_after_return=1", which makes this check
+* fail due to apparently jumping stack pointers.
+* Hence, disable this check if building with ASan, as documented in:
+* GCC: https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html
+* Clang: https://clang.llvm.org/docs/AddressSanitizer.html#conditional-compilation-with-has-feature-address-sanitizer
+*/
+#if defined(__SANITIZE_ADDRESS__)
+ #define ASN__SANITIZE_ENABLED 1
+#elif defined(__has_feature)
+#if __has_feature(address_sanitizer)
+ #define ASN__SANITIZE_ENABLED 1
+#endif
+#endif
+
+#define ASN__DEFAULT_STACK_MAX (30000)
+
+#if defined(ASN__SANITIZE_ENABLED) || defined(ASN_DISABLE_STACK_OVERFLOW_CHECK)
+static int CC_NOTUSED
+ASN__STACK_OVERFLOW_CHECK(const asn_codec_ctx_t *ctx) {
+ (void)ctx;
+ return 0;
+}
+#else
+static int CC_NOTUSED
+ASN__STACK_OVERFLOW_CHECK(const asn_codec_ctx_t *ctx) {
+ if(ctx && ctx->max_stack_size) {
+
+ /* ctx MUST be allocated on the stack */
+ ptrdiff_t usedstack = ((const char *)ctx - (const char *)&ctx);
+ if(usedstack > 0) usedstack = -usedstack; /* grows up! */
+
+ /* double negative required to avoid int wrap-around */
+ if(usedstack < -(ptrdiff_t)ctx->max_stack_size) {
+ ASN_DEBUG("Stack limit %ld reached",
+ (long)ctx->max_stack_size);
+ return -1;
+ }
+ }
+ return 0;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN_INTERNAL_H */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_ioc.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_ioc.h
new file mode 100644
index 000000000..71e2b6ca2
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_ioc.h
@@ -0,0 +1,51 @@
+/*
+ * Run-time support for Information Object Classes.
+ * Copyright (c) 2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_IOC_H
+#define ASN_IOC_H
+
+#include /* Platform-specific types */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;
+struct asn_ioc_cell_s;
+
+/*
+ * X.681, #13
+ */
+typedef struct asn_ioc_set_s {
+ size_t rows_count;
+ size_t columns_count;
+ const struct asn_ioc_cell_s *rows;
+} asn_ioc_set_t;
+
+
+typedef struct asn_ioc_cell_s {
+ const char *field_name; /* Is equal to corresponding column_name */
+ enum {
+ aioc__undefined = 0,
+ aioc__value,
+ aioc__type,
+ aioc__open_type,
+ } cell_kind;
+ struct asn_TYPE_descriptor_s *type_descriptor;
+ const void *value_sptr;
+ struct {
+ size_t types_count;
+ struct {
+ unsigned choice_position;
+ } *types;
+ } open_type;
+} asn_ioc_cell_t;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN_IOC_H */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_random_fill.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_random_fill.h
new file mode 100644
index 000000000..47f9b8af0
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_random_fill.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_RANDOM_FILL
+#define ASN_RANDOM_FILL
+
+/* Forward declarations */
+struct asn_TYPE_descriptor_s;
+struct asn_encoding_constraints_s;
+
+/*
+ * Initialize a structure with random data according to the type specification
+ * and optional member constraints.
+ * ARGUMENTS:
+ * (max_length) - See (approx_max_length_limit).
+ * (memb_constraints) - Member constraints, if exist.
+ * The type can be constrained differently according
+ * to PER and OER specifications, so we find a value
+ * at the intersection of these constraints.
+ * In case the return differs from ARFILL_OK, the (struct_ptr) contents
+ * and (current_length) value remain in their original state.
+ */
+typedef struct asn_random_fill_result_s {
+ enum {
+ ARFILL_FAILED = -1, /* System error (memory?) */
+ ARFILL_OK = 0, /* Initialization succeeded */
+ ARFILL_SKIPPED = 1 /* Not done due to (length?) constraint */
+ } code;
+ size_t length; /* Approximate number of bytes created. */
+} asn_random_fill_result_t;
+typedef asn_random_fill_result_t(asn_random_fill_f)(
+ const struct asn_TYPE_descriptor_s *td, void **struct_ptr,
+ const struct asn_encoding_constraints_s *memb_constraints,
+ size_t max_length);
+
+/*
+ * Returns 0 if the structure was properly initialized, -1 otherwise.
+ * The (approx_max_length_limit) specifies the approximate limit of the
+ * resulting structure in units closely resembling bytes. The actual result
+ * might be several times larger or smaller than the length limit.
+ */
+int asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr,
+ size_t approx_max_length_limit);
+
+/*
+ * Returns a random number between min and max.
+ */
+intmax_t asn_random_between(intmax_t min, intmax_t max);
+
+#endif /* ASN_RANDOM_FILL */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_system.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_system.h
new file mode 100644
index 000000000..194f96a5f
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/asn_system.h
@@ -0,0 +1,185 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * Miscellaneous system-dependent types.
+ */
+#ifndef ASN_SYSTEM_H
+#define ASN_SYSTEM_H
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef _DEFAULT_SOURCE
+#define _DEFAULT_SOURCE 1
+#endif
+
+#ifndef _BSD_SOURCE
+#define _BSD_SOURCE /* for snprintf() on some linux systems */
+#endif
+
+#include /* For snprintf(3) */
+#include /* For *alloc(3) */
+#include /* For memcpy(3) */
+#include /* For size_t */
+#include /* For LONG_MAX */
+#include /* For va_start */
+#include /* for offsetof and ptrdiff_t */
+#include /* for PRIdMAX */
+
+#ifdef _WIN32
+
+#include
+#ifndef __MINGW32__
+#define snprintf _snprintf
+#define vsnprintf _vsnprintf
+#endif
+
+/* To avoid linking with ws2_32.lib, here's the definition of ntohl() */
+#define sys_ntohl(l) ((((l) << 24) & 0xff000000) \
+ | (((l) << 8) & 0xff0000) \
+ | (((l) >> 8) & 0xff00) \
+ | ((l >> 24) & 0xff))
+
+#ifdef _MSC_VER /* MSVS.Net */
+#ifndef __cplusplus
+#define inline __inline
+#endif
+#ifndef ASSUMESTDTYPES /* Standard types have been defined elsewhere */
+#define ssize_t SSIZE_T
+#if _MSC_VER < 1600
+typedef char int8_t;
+typedef short int16_t;
+typedef int int32_t;
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+#else /* _MSC_VER >= 1600 */
+#include
+#endif /* _MSC_VER < 1600 */
+#endif /* ASSUMESTDTYPES */
+#define WIN32_LEAN_AND_MEAN
+#include
+#include
+#define isnan _isnan
+#define finite _finite
+#define copysign _copysign
+#define ilogb _logb
+#else /* !_MSC_VER */
+#include
+#endif /* _MSC_VER */
+
+#else /* !_WIN32 */
+
+#if defined(__vxworks)
+#include
+#else /* !defined(__vxworks) */
+
+#include /* C99 specifies this file */
+#ifdef HAVE_ARPA_INET_H
+#include /* for ntohl() */
+#define sys_ntohl(foo) ntohl(foo)
+#else /* !_HAVE_ARPA_INET_H */
+#ifdef HAVE_NETINET_IN_H
+#include /* for ntohl() */
+#define sys_ntohl(foo) ntohl(foo)
+#else /* !_HAVE_NETINET_IN_H */
+/* Here's the definition of ntohl() */
+#define sys_ntohl(l) ((((l) << 24) & 0xff000000) \
+ | (((l) << 8) & 0xff0000) \
+ | (((l) >> 8) & 0xff00) \
+ | ((l >> 24) & 0xff))
+#endif /* HAVE_NETINET_IN_H */
+#endif /* HAVE_ARPA_INET_H */
+#endif /* defined(__vxworks) */
+
+
+#endif /* _WIN32 */
+
+#if __GNUC__ >= 3 || defined(__clang__)
+#define CC_ATTRIBUTE(attr) __attribute__((attr))
+#else
+#define CC_ATTRIBUTE(attr)
+#endif
+#if defined(__GNUC__) && ((__GNUC__ == 4 && __GNUC_MINOR__>= 4) || __GNUC__ > 4)
+#define CC_PRINTFLIKE(fmt, var) CC_ATTRIBUTE(format(gnu_printf, fmt, var))
+#elif defined(__GNUC__)
+#if defined(ANDROID)
+#define CC_PRINTFLIKE(fmt, var) CC_ATTRIBUTE(__format__(__printf__, fmt, var))
+#else
+#define CC_PRINTFLIKE(fmt, var) CC_ATTRIBUTE(format(printf, fmt, var))
+#endif
+#else
+#define CC_PRINTFLIKE(fmt, var)
+#endif
+#define CC_NOTUSED CC_ATTRIBUTE(unused)
+#ifndef CC_ATTR_NO_SANITIZE
+#if __GNUC__ < 8
+#define CC_ATTR_NO_SANITIZE(what)
+#else
+#define CC_ATTR_NO_SANITIZE(what) CC_ATTRIBUTE(no_sanitize(what))
+#endif
+#endif
+
+/* Figure out if thread safety is requested */
+#if !defined(ASN_THREAD_SAFE) && (defined(THREAD_SAFE) || defined(_REENTRANT))
+#define ASN_THREAD_SAFE
+#endif /* Thread safety */
+
+#ifndef offsetof /* If not defined by */
+#define offsetof(s, m) ((ptrdiff_t)&(((s *)0)->m) - (ptrdiff_t)((s *)0))
+#endif /* offsetof */
+
+#ifndef MIN /* Suitable for comparing primitive types (integers) */
+#if defined(__GNUC__)
+#define MIN(a,b) ({ __typeof a _a = a; __typeof b _b = b; \
+ ((_a)<(_b)?(_a):(_b)); })
+#else /* !__GNUC__ */
+#define MIN(a,b) ((a)<(b)?(a):(b)) /* Unsafe variant */
+#endif /* __GNUC__ */
+#endif /* MIN */
+
+#if __STDC_VERSION__ >= 199901L
+#ifndef SIZE_MAX
+#define SIZE_MAX ((~((size_t)0)) >> 1)
+#endif
+
+#ifndef RSIZE_MAX /* C11, Annex K */
+#define RSIZE_MAX (SIZE_MAX >> 1)
+#endif
+#ifndef RSSIZE_MAX /* Halve signed size even further than unsigned */
+#define RSSIZE_MAX ((ssize_t)(RSIZE_MAX >> 1))
+#endif
+#else /* Old compiler */
+#undef SIZE_MAX
+#undef RSIZE_MAX
+#undef RSSIZE_MAX
+#define SIZE_MAX ((~((size_t)0)) >> 1)
+#define RSIZE_MAX (SIZE_MAX >> 1)
+#define RSSIZE_MAX ((ssize_t)(RSIZE_MAX >> 1))
+#endif
+
+#if __STDC_VERSION__ >= 199901L
+#define ASN_PRI_SIZE "zu"
+#define ASN_PRI_SSIZE "zd"
+#define ASN_PRIuMAX PRIuMAX
+#define ASN_PRIdMAX PRIdMAX
+#define ASN_PRIu64 PRIu64
+#define ASN_PRId64 PRId64
+#else
+#define ASN_PRI_SIZE "lu"
+#define ASN_PRI_SSIZE "ld"
+#define ASN_PRIu64 "llu"
+#define ASN_PRId64 "lld"
+#if LLONG_MAX > LONG_MAX
+#define ASN_PRIuMAX "llu"
+#define ASN_PRIdMAX "lld"
+#else
+#define ASN_PRIuMAX "lu"
+#define ASN_PRIdMAX "ld"
+#endif
+#endif
+
+#endif /* ASN_SYSTEM_H */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/ber_tlv_length.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/ber_tlv_length.h
new file mode 100644
index 000000000..d1e4d48dd
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/ber_tlv_length.h
@@ -0,0 +1,50 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _BER_TLV_LENGTH_H_
+#define _BER_TLV_LENGTH_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef ssize_t ber_tlv_len_t;
+
+/*
+ * This function tries to fetch the length of the BER TLV value and place it
+ * in *len_r.
+ * RETURN VALUES:
+ * 0: More data expected than bufptr contains.
+ * -1: Fatal error deciphering length.
+ * >0: Number of bytes used from bufptr.
+ * On return with >0, len_r is constrained as -1..MAX, where -1 mean
+ * that the value is of indefinite length.
+ */
+ssize_t ber_fetch_length(int _is_constructed, const void *bufptr, size_t size,
+ ber_tlv_len_t *len_r);
+
+/*
+ * This function expects bufptr to be positioned over L in TLV.
+ * It returns number of bytes occupied by L and V together, suitable
+ * for skipping. The function properly handles indefinite length.
+ * RETURN VALUES:
+ * Standard {-1,0,>0} convention.
+ */
+ssize_t ber_skip_length(
+ const struct asn_codec_ctx_s *opt_codec_ctx, /* optional context */
+ int _is_constructed, const void *bufptr, size_t size);
+
+/*
+ * This function serializes the length (L from TLV) in DER format.
+ * It always returns number of bytes necessary to represent the length,
+ * it is a caller's responsibility to check the return value
+ * against the supplied buffer's size.
+ */
+size_t der_tlv_length_serialize(ber_tlv_len_t len, void *bufptr, size_t size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _BER_TLV_LENGTH_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/ber_tlv_tag.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/ber_tlv_tag.h
new file mode 100644
index 000000000..ce227add6
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/ber_tlv_tag.h
@@ -0,0 +1,60 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _BER_TLV_TAG_H_
+#define _BER_TLV_TAG_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum asn_tag_class {
+ ASN_TAG_CLASS_UNIVERSAL = 0, /* 0b00 */
+ ASN_TAG_CLASS_APPLICATION = 1, /* 0b01 */
+ ASN_TAG_CLASS_CONTEXT = 2, /* 0b10 */
+ ASN_TAG_CLASS_PRIVATE = 3 /* 0b11 */
+};
+typedef unsigned ber_tlv_tag_t; /* BER TAG from Tag-Length-Value */
+
+/*
+ * Tag class is encoded together with tag value for optimization purposes.
+ */
+#define BER_TAG_CLASS(tag) ((tag) & 0x3)
+#define BER_TAG_VALUE(tag) ((tag) >> 2)
+#define BER_TLV_CONSTRUCTED(tagptr) (((*(const uint8_t *)tagptr)&0x20)?1:0)
+
+#define BER_TAGS_EQUAL(tag1, tag2) ((tag1) == (tag2))
+
+/*
+ * Several functions for printing the TAG in the canonical form
+ * (i.e. "[PRIVATE 0]").
+ * Return values correspond to their libc counterparts (if any).
+ */
+ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t buflen);
+ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *);
+char *ber_tlv_tag_string(ber_tlv_tag_t tag);
+
+
+/*
+ * This function tries to fetch the tag from the input stream.
+ * RETURN VALUES:
+ * 0: More data expected than bufptr contains.
+ * -1: Fatal error deciphering tag.
+ * >0: Number of bytes used from bufptr. tag_r will contain the tag.
+ */
+ssize_t ber_fetch_tag(const void *bufptr, size_t size, ber_tlv_tag_t *tag_r);
+
+/*
+ * This function serializes the tag (T from TLV) in BER format.
+ * It always returns number of bytes necessary to represent the tag,
+ * it is a caller's responsibility to check the return value
+ * against the supplied buffer's size.
+ */
+size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufptr, size_t size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _BER_TLV_TAG_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/constr_CHOICE.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/constr_CHOICE.h
new file mode 100644
index 000000000..28d227f08
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/constr_CHOICE.h
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _CONSTR_CHOICE_H_
+#define _CONSTR_CHOICE_H_
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct asn_CHOICE_specifics_s {
+ /*
+ * Target structure description.
+ */
+ unsigned struct_size; /* Size of the target structure. */
+ unsigned ctx_offset; /* Offset of the asn_codec_ctx_t member */
+ unsigned pres_offset; /* Identifier of the present member */
+ unsigned pres_size; /* Size of the identifier (enum) */
+
+ /*
+ * Tags to members mapping table.
+ */
+ const asn_TYPE_tag2member_t *tag2el;
+ unsigned tag2el_count;
+
+ /* Canonical ordering of CHOICE elements, for PER */
+ const unsigned *to_canonical_order;
+ const unsigned *from_canonical_order;
+
+ /*
+ * Extensions-related stuff.
+ */
+ signed ext_start; /* First member of extensions, or -1 */
+} asn_CHOICE_specifics_t;
+
+/*
+ * A set specialized functions dealing with the CHOICE type.
+ */
+asn_struct_free_f CHOICE_free;
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+asn_struct_print_f CHOICE_print;
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+asn_struct_compare_f CHOICE_compare;
+asn_struct_copy_f CHOICE_copy;
+
+asn_constr_check_f CHOICE_constraint;
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+ber_type_decoder_f CHOICE_decode_ber;
+der_type_encoder_f CHOICE_encode_der;
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+xer_type_decoder_f CHOICE_decode_xer;
+xer_type_encoder_f CHOICE_encode_xer;
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+jer_type_decoder_f CHOICE_decode_jer;
+jer_type_encoder_f CHOICE_encode_jer;
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_OER_SUPPORT)
+oer_type_decoder_f CHOICE_decode_oer;
+oer_type_encoder_f CHOICE_encode_oer;
+#endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+per_type_decoder_f CHOICE_decode_uper;
+per_type_encoder_f CHOICE_encode_uper;
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+per_type_decoder_f CHOICE_decode_aper;
+per_type_encoder_f CHOICE_encode_aper;
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_RFILL_SUPPORT)
+asn_random_fill_f CHOICE_random_fill;
+#endif /* !defined(ASN_DISABLE_RFILL_SUPPORT) */
+
+asn_outmost_tag_f CHOICE_outmost_tag;
+
+extern asn_TYPE_operation_t asn_OP_CHOICE;
+
+unsigned _fetch_present_idx(
+ const void *struct_ptr,
+ unsigned off,
+ unsigned size);
+
+void _set_present_idx(
+ void *sptr,
+ unsigned offset,
+ unsigned size,
+ unsigned present);
+
+/*
+ * Return the 1-based choice variant presence index.
+ * Returns 0 in case of error.
+ */
+unsigned CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td,
+ const void *structure_ptr);
+
+/*
+ * Sets or resets the 1-based choice variant presence index.
+ * In case a previous index is not zero, the currently selected structure
+ * member is freed and zeroed-out first.
+ * Returns 0 on success and -1 on error.
+ */
+int CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td,
+ void *structure_ptr, unsigned present);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _CONSTR_CHOICE_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/constr_SEQUENCE.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/constr_SEQUENCE.h
new file mode 100644
index 000000000..848154ae4
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/constr_SEQUENCE.h
@@ -0,0 +1,97 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _CONSTR_SEQUENCE_H_
+#define _CONSTR_SEQUENCE_H_
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct asn_SEQUENCE_specifics_s {
+ /*
+ * Target structure description.
+ */
+ unsigned struct_size; /* Size of the target structure. */
+ unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */
+
+ /*
+ * Tags to members mapping table (sorted).
+ */
+ const asn_TYPE_tag2member_t *tag2el;
+ unsigned tag2el_count;
+
+ /*
+ * Optional members of the extensions root (roms) or additions (aoms).
+ * Meaningful for PER.
+ */
+ const int *oms; /* Optional MemberS */
+ unsigned roms_count; /* Root optional members count */
+ unsigned aoms_count; /* Additions optional members count */
+
+ /*
+ * Description of an extensions group.
+ * Root components are clustered at the beginning of the structure,
+ * whereas extensions are clustered at the end. -1 means not extensible.
+ */
+ signed first_extension; /* First extension addition */
+} asn_SEQUENCE_specifics_t;
+
+
+/*
+ * A set specialized functions dealing with the SEQUENCE type.
+ */
+asn_struct_free_f SEQUENCE_free;
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+asn_struct_print_f SEQUENCE_print;
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+asn_struct_compare_f SEQUENCE_compare;
+asn_struct_copy_f SEQUENCE_copy;
+
+asn_constr_check_f SEQUENCE_constraint;
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+ber_type_decoder_f SEQUENCE_decode_ber;
+der_type_encoder_f SEQUENCE_encode_der;
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+xer_type_decoder_f SEQUENCE_decode_xer;
+xer_type_encoder_f SEQUENCE_encode_xer;
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+jer_type_decoder_f SEQUENCE_decode_jer;
+jer_type_encoder_f SEQUENCE_encode_jer;
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_OER_SUPPORT)
+oer_type_decoder_f SEQUENCE_decode_oer;
+oer_type_encoder_f SEQUENCE_encode_oer;
+#endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+per_type_decoder_f SEQUENCE_decode_uper;
+per_type_encoder_f SEQUENCE_encode_uper;
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+per_type_decoder_f SEQUENCE_decode_aper;
+per_type_encoder_f SEQUENCE_encode_aper;
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_RFILL_SUPPORT)
+asn_random_fill_f SEQUENCE_random_fill;
+#endif /* !defined(ASN_DISABLE_RFILL_SUPPORT) */
+
+extern asn_TYPE_operation_t asn_OP_SEQUENCE;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _CONSTR_SEQUENCE_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/constr_SEQUENCE_OF.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/constr_SEQUENCE_OF.h
new file mode 100644
index 000000000..65189eb9e
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/constr_SEQUENCE_OF.h
@@ -0,0 +1,69 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef _CONSTR_SEQUENCE_OF_H_
+#define _CONSTR_SEQUENCE_OF_H_
+
+#include
+#include /* Implemented using SET OF */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * A set specialized functions dealing with the SEQUENCE OF type.
+ * Generally implemented using SET OF.
+ */
+#define SEQUENCE_OF_free SET_OF_free
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+#define SEQUENCE_OF_print SET_OF_print
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+asn_struct_compare_f SEQUENCE_OF_compare;
+#define SEQUENCE_OF_copy SET_OF_copy
+
+#define SEQUENCE_OF_constraint SET_OF_constraint
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+#define SEQUENCE_OF_decode_ber SET_OF_decode_ber
+der_type_encoder_f SEQUENCE_OF_encode_der;
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+#define SEQUENCE_OF_decode_xer SET_OF_decode_xer
+xer_type_encoder_f SEQUENCE_OF_encode_xer;
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+#define SEQUENCE_OF_decode_jer SET_OF_decode_jer
+jer_type_encoder_f SEQUENCE_OF_encode_jer;
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_OER_SUPPORT)
+#define SEQUENCE_OF_decode_oer SET_OF_decode_oer
+#define SEQUENCE_OF_encode_oer SET_OF_encode_oer
+#endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+#define SEQUENCE_OF_decode_uper SET_OF_decode_uper
+per_type_encoder_f SEQUENCE_OF_encode_uper;
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+#define SEQUENCE_OF_decode_aper SET_OF_decode_aper
+per_type_encoder_f SEQUENCE_OF_encode_aper;
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_RFILL_SUPPORT)
+#define SEQUENCE_OF_random_fill SET_OF_random_fill
+#endif /* !defined(ASN_DISABLE_RFILL_SUPPORT) */
+
+extern asn_TYPE_operation_t asn_OP_SEQUENCE_OF;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _CONSTR_SET_OF_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/constr_SET_OF.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/constr_SET_OF.h
new file mode 100644
index 000000000..b5a945deb
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/constr_SET_OF.h
@@ -0,0 +1,104 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef CONSTR_SET_OF_H
+#define CONSTR_SET_OF_H
+
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct asn_SET_OF_specifics_s {
+ /*
+ * Target structure description.
+ */
+ unsigned struct_size; /* Size of the target structure. */
+ unsigned ctx_offset; /* Offset of the asn_struct_ctx_t member */
+
+ /* XER-specific stuff */
+ int as_XMLValueList; /* The member type must be encoded like this */
+} asn_SET_OF_specifics_t;
+
+/*
+ * A set specialized functions dealing with the SET OF type.
+ */
+asn_struct_free_f SET_OF_free;
+
+#if !defined(ASN_DISABLE_PRINT_SUPPORT)
+asn_struct_print_f SET_OF_print;
+#endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
+
+asn_struct_compare_f SET_OF_compare;
+asn_struct_copy_f SET_OF_copy;
+
+asn_constr_check_f SET_OF_constraint;
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+ber_type_decoder_f SET_OF_decode_ber;
+der_type_encoder_f SET_OF_encode_der;
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+xer_type_decoder_f SET_OF_decode_xer;
+xer_type_encoder_f SET_OF_encode_xer;
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+jer_type_decoder_f SET_OF_decode_jer;
+jer_type_encoder_f SET_OF_encode_jer;
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_OER_SUPPORT)
+oer_type_decoder_f SET_OF_decode_oer;
+oer_type_encoder_f SET_OF_encode_oer;
+#endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT)
+per_type_decoder_f SET_OF_decode_uper;
+per_type_encoder_f SET_OF_encode_uper;
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
+#if !defined(ASN_DISABLE_APER_SUPPORT)
+per_type_decoder_f SET_OF_decode_aper;
+per_type_encoder_f SET_OF_encode_aper;
+#endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_RFILL_SUPPORT)
+asn_random_fill_f SET_OF_random_fill;
+#endif /* !defined(ASN_DISABLE_RFILL_SUPPORT) */
+
+extern asn_TYPE_operation_t asn_OP_SET_OF;
+
+/*
+ * Internally visible buffer holding a single encoded element.
+ */
+struct _el_buffer {
+ uint8_t *buf;
+ size_t length;
+ size_t allocated_size;
+ unsigned bits_unused;
+};
+
+enum SET_OF__encode_method {
+ SOES_DER, /* Distinguished Encoding Rules */
+ SOES_CUPER, /* Canonical Unaligned Packed Encoding Rules */
+ SOES_CAPER /* Canonical Aligned Packed Encoding Rules */
+};
+
+struct _el_buffer * SET_OF__encode_sorted(
+ const asn_TYPE_member_t *elm,
+ const asn_anonymous_set_ *list,
+ enum SET_OF__encode_method method);
+
+void SET_OF__encode_sorted_free(
+ struct _el_buffer *el_buf,
+ size_t count);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CONSTR_SET_OF_H */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/constr_TYPE.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/constr_TYPE.h
new file mode 100644
index 000000000..7e85a6ef8
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/constr_TYPE.h
@@ -0,0 +1,323 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * This file contains the declaration structure called "ASN.1 Type Definition",
+ * which holds all information necessary for encoding and decoding routines.
+ * This structure even contains pointer to these encoding and decoding routines
+ * for each defined ASN.1 type.
+ */
+#ifndef _CONSTR_TYPE_H_
+#define _CONSTR_TYPE_H_
+
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s; /* Forward declaration */
+struct asn_TYPE_member_s; /* Forward declaration */
+
+/*
+ * This type provides the context information for various ASN.1 routines,
+ * primarily ones doing decoding. A member _asn_ctx of this type must be
+ * included into certain target language's structures, such as compound types.
+ */
+typedef struct asn_struct_ctx_s {
+ short phase; /* Decoding phase */
+ short step; /* Elementary step of a phase */
+ int context; /* Other context information */
+ void *ptr; /* Decoder-specific stuff (stack elements) */
+ ber_tlv_len_t left; /* Number of bytes left, -1 for indefinite */
+} asn_struct_ctx_t;
+
+#if !defined(ASN_DISABLE_BER_SUPPORT)
+#include /* Basic Encoding Rules decoder */
+#include /* Distinguished Encoding Rules encoder */
+#else
+typedef void (ber_type_decoder_f)(void);
+typedef void (der_type_encoder_f)(void);
+#endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_XER_SUPPORT)
+#include /* Decoder of XER (XML, text) */
+#include /* Encoder into XER (XML, text) */
+#else
+typedef void (xer_type_decoder_f)(void);
+typedef void (xer_type_encoder_f)(void);
+#endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+#include /* Decoder of JER (JSON, text) */
+#include /* Encoder into JER (JSON, text) */
+#else
+typedef void (jer_type_decoder_f)(void);
+typedef void (jer_type_encoder_f)(void);
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+
+#if !defined(ASN_DISABLE_UPER_SUPPORT) || !defined(ASN_DISABLE_APER_SUPPORT)
+#include /* Packet Encoding Rules decoder */
+#include /* Packet Encoding Rules encoder */
+#else
+typedef void (per_type_decoder_f)(void);
+typedef void (per_type_encoder_f)(void);
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) || !defined(ASN_DISABLE_APER_SUPPORT) */
+
+#include /* Subtype constraints support */
+
+#if !defined(ASN_DISABLE_RFILL_SUPPORT)
+#include /* Random structures support */
+#else
+typedef void (asn_random_fill_f)(void);
+#endif /* !defined(ASN_DISABLE_RFILL_SUPPORT) */
+
+#if !defined(ASN_DISABLE_OER_SUPPORT)
+#include /* Octet Encoding Rules encoder */
+#include /* Octet Encoding Rules encoder */
+#else
+typedef void (oer_type_decoder_f)(void);
+typedef void (oer_type_encoder_f)(void);
+#endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
+
+/*
+ * Free the structure according to its specification.
+ * Use one of ASN_STRUCT_{FREE,RESET,CONTENTS_ONLY} macros instead.
+ * Do not use directly.
+ */
+enum asn_struct_free_method {
+ ASFM_FREE_EVERYTHING, /* free(struct_ptr) and underlying members */
+ ASFM_FREE_UNDERLYING, /* free underlying members */
+ ASFM_FREE_UNDERLYING_AND_RESET /* FREE_UNDERLYING + memset(0) */
+};
+typedef void (asn_struct_free_f)(
+ const struct asn_TYPE_descriptor_s *type_descriptor,
+ void *struct_ptr, enum asn_struct_free_method);
+
+/*
+ * Free the structure including freeing the memory pointed to by ptr itself.
+ */
+#define ASN_STRUCT_FREE(asn_DEF, ptr) \
+ (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_EVERYTHING)
+
+/*
+ * Free the memory used by the members of the structure without freeing the
+ * the structure pointer itself.
+ * ZERO-OUT the structure to the safe clean state.
+ * (Retaining the pointer may be useful in case the structure is allocated
+ * statically or arranged on the stack, yet its elements are dynamic.)
+ */
+#define ASN_STRUCT_RESET(asn_DEF, ptr) \
+ (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING_AND_RESET)
+
+/*
+ * Free memory used by the members of the structure without freeing
+ * the structure pointer itself.
+ * (Retaining the pointer may be useful in case the structure is allocated
+ * statically or arranged on the stack, yet its elements are dynamic.)
+ * AVOID using it in the application code;
+ * Use a safer ASN_STRUCT_RESET() instead.
+ */
+#define ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF, ptr) \
+ (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING)
+
+/*
+ * Print the structure according to its specification.
+ */
+typedef int(asn_struct_print_f)(
+ const struct asn_TYPE_descriptor_s *type_descriptor,
+ const void *struct_ptr,
+ int level, /* Indentation level */
+ asn_app_consume_bytes_f *callback, void *app_key);
+
+/*
+ * Compare two structs between each other.
+ * Returns <0 if struct_A is "smaller" than struct_B, >0 if "greater",
+ * and =0 if "equal to", for some type-specific, stable definition of
+ * "smaller", "greater" and "equal to".
+ */
+typedef int (asn_struct_compare_f)(
+ const struct asn_TYPE_descriptor_s *type_descriptor,
+ const void *struct_A,
+ const void *struct_B);
+
+/*
+ * Copies struct B into struct A.
+ * Allocates memory for struct A, if necessary.
+ */
+typedef int (asn_struct_copy_f)(
+ const struct asn_TYPE_descriptor_s *type_descriptor,
+ void **struct_A,
+ const void *struct_B
+ );
+
+/*
+ * Return the outmost tag of the type.
+ * If the type is untagged CHOICE, the dynamic operation is performed.
+ * NOTE: This function pointer type is only useful internally.
+ * Do not use it in your application.
+ */
+typedef ber_tlv_tag_t (asn_outmost_tag_f)(
+ const struct asn_TYPE_descriptor_s *type_descriptor,
+ const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag);
+/* The instance of the above function type; used internally. */
+asn_outmost_tag_f asn_TYPE_outmost_tag;
+
+/*
+ * Fetch the desired type of the Open Type based on the
+ * Information Object Set driven constraints.
+ */
+typedef struct asn_type_selector_result_s {
+ const struct asn_TYPE_descriptor_s *type_descriptor; /* Type encoded. */
+ unsigned presence_index; /* Associated choice variant. */
+} asn_type_selector_result_t;
+typedef asn_type_selector_result_t(asn_type_selector_f)(
+ const struct asn_TYPE_descriptor_s *parent_type_descriptor,
+ const void *parent_structure_ptr);
+
+/*
+ * Generalized functions for dealing with the speciic type.
+ * May be directly invoked by applications.
+ */
+typedef struct asn_TYPE_operation_s {
+ asn_struct_free_f *free_struct; /* Free the structure */
+ asn_struct_print_f *print_struct; /* Human readable output */
+ asn_struct_compare_f *compare_struct; /* Compare two structures */
+ asn_struct_copy_f *copy_struct; /* Copy method */
+ ber_type_decoder_f *ber_decoder; /* Generic BER decoder */
+ der_type_encoder_f *der_encoder; /* Canonical DER encoder */
+ xer_type_decoder_f *xer_decoder; /* Generic XER decoder */
+ xer_type_encoder_f *xer_encoder; /* [Canonical] XER encoder */
+ jer_type_decoder_f *jer_decoder; /* Generic JER encoder */
+ jer_type_encoder_f *jer_encoder; /* Generic JER encoder */
+ oer_type_decoder_f *oer_decoder; /* Generic OER decoder */
+ oer_type_encoder_f *oer_encoder; /* Canonical OER encoder */
+ per_type_decoder_f *uper_decoder; /* Unaligned PER decoder */
+ per_type_encoder_f *uper_encoder; /* Unaligned PER encoder */
+ per_type_decoder_f *aper_decoder; /* Aligned PER decoder */
+ per_type_encoder_f *aper_encoder; /* Aligned PER encoder */
+ asn_random_fill_f *random_fill; /* Initialize with a random value */
+ asn_outmost_tag_f *outmost_tag; /* */
+} asn_TYPE_operation_t;
+
+/*
+ * A constraints tuple specifying both the OER and PER constraints.
+ */
+typedef struct asn_encoding_constraints_s {
+#if !defined(ASN_DISABLE_OER_SUPPORT)
+ const struct asn_oer_constraints_s *oer_constraints;
+#endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
+#if !defined(ASN_DISABLE_UPER_SUPPORT) || !defined(ASN_DISABLE_APER_SUPPORT)
+ const struct asn_per_constraints_s *per_constraints;
+#endif /* !defined(ASN_DISABLE_UPER_SUPPORT) || !defined(ASN_DISABLE_APER_SUPPORT) */
+#if !defined(ASN_DISABLE_JER_SUPPORT)
+ const struct asn_jer_constraints_s *jer_constraints;
+#endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
+ asn_constr_check_f *general_constraints;
+} asn_encoding_constraints_t;
+
+/*
+ * The definitive description of the destination language's structure.
+ */
+typedef struct asn_TYPE_descriptor_s {
+ const char *name; /* A name of the ASN.1 type. "" in some cases. */
+ const char *xml_tag; /* Name used in XML tag */
+
+ /*
+ * Generalized functions for dealing with the specific type.
+ * May be directly invoked by applications.
+ */
+ asn_TYPE_operation_t *op;
+
+ /***********************************************************************
+ * Internally useful members. Not to be used by applications directly. *
+ **********************************************************************/
+
+ /*
+ * Tags that are expected to occur.
+ */
+ const ber_tlv_tag_t *tags; /* Effective tags sequence for this type */
+ unsigned tags_count; /* Number of tags which are expected */
+ const ber_tlv_tag_t *all_tags; /* Every tag for BER/containment */
+ unsigned all_tags_count; /* Number of tags */
+
+ /* OER, PER, and general constraints */
+ asn_encoding_constraints_t encoding_constraints;
+
+ /*
+ * An ASN.1 production type members (members of SEQUENCE, SET, CHOICE).
+ */
+ struct asn_TYPE_member_s *elements;
+ unsigned elements_count;
+
+ /*
+ * Additional information describing the type, used by appropriate
+ * functions above.
+ */
+ const void *specifics;
+} asn_TYPE_descriptor_t;
+
+/*
+ * This type describes an element of the constructed type,
+ * i.e. SEQUENCE, SET, CHOICE, etc.
+ */
+ enum asn_TYPE_flags_e {
+ ATF_NOFLAGS,
+ ATF_POINTER = 0x01, /* Represented by the pointer */
+ ATF_OPEN_TYPE = 0x02, /* Open Type */
+ ATF_ANY_TYPE = 0x04 /* ANY type (deprecated!) */
+ };
+typedef struct asn_TYPE_member_s {
+ enum asn_TYPE_flags_e flags; /* Element's presentation flags */
+ unsigned optional; /* Following optional members, including current */
+ unsigned memb_offset; /* Offset of the element */
+ ber_tlv_tag_t tag; /* Outmost (most immediate) tag */
+ int tag_mode; /* IMPLICIT/no/EXPLICIT tag at current level */
+ asn_TYPE_descriptor_t *type; /* Member type descriptor */
+ asn_type_selector_f *type_selector; /* IoS runtime type selector */
+ asn_encoding_constraints_t encoding_constraints;
+ int (*default_value_cmp)(const void *sptr); /* Compare DEFAULT */
+ int (*default_value_set)(void **sptr); /* Set DEFAULT */
+ const char *name; /* ASN.1 identifier of the element */
+} asn_TYPE_member_t;
+
+/*
+ * BER tag to element number mapping.
+ */
+typedef struct asn_TYPE_tag2member_s {
+ ber_tlv_tag_t el_tag; /* Outmost tag of the member */
+ unsigned el_no; /* Index of the associated member, base 0 */
+ int toff_first; /* First occurrence of the el_tag, relative */
+ int toff_last; /* Last occurrence of the el_tag, relative */
+} asn_TYPE_tag2member_t;
+
+/*
+ * This function prints out the contents of the target language's structure
+ * (struct_ptr) into the file pointer (stream) in human readable form.
+ * RETURN VALUES:
+ * 0: The structure is printed.
+ * -1: Problem dumping the structure.
+ * (See also xer_fprint() in xer_encoder.h)
+ */
+int asn_fprint(FILE *stream, /* Destination stream descriptor */
+ const asn_TYPE_descriptor_t *td, /* ASN.1 type descriptor */
+ const void *struct_ptr); /* Structure to be printed */
+
+/*
+ * Copies a source structure (struct_src) into destination structure
+ * (struct_dst). Allocates memory for the destination structure, if necessary.
+ * RETURN VALUES:
+ * 0: Copy OK.
+ * -1: Problem copying the structure.
+ */
+int asn_copy(const asn_TYPE_descriptor_t *td, /* ASN.1 type descriptor */
+ void **struct_dst, /* Structure to be populated */
+ const void *struct_src); /* Structure to be copied */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _CONSTR_TYPE_H_ */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/constraints.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/constraints.h
new file mode 100644
index 000000000..d267c0b66
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/constraints.h
@@ -0,0 +1,63 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin . All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN1_CONSTRAINTS_VALIDATOR_H
+#define ASN1_CONSTRAINTS_VALIDATOR_H
+
+#include /* Platform-dependent types */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s; /* Forward declaration */
+
+/*
+ * Validate the structure according to the ASN.1 constraints.
+ * If errbuf and errlen are given, they shall be pointing to the appropriate
+ * buffer space and its length before calling this function. Alternatively,
+ * they could be passed as NULL's. If constraints validation fails,
+ * errlen will contain the actual number of bytes taken from the errbuf
+ * to encode an error message (properly 0-terminated).
+ *
+ * RETURN VALUES:
+ * This function returns 0 in case all ASN.1 constraints are met
+ * and -1 if one or more constraints were failed.
+ */
+int asn_check_constraints(
+ const struct asn_TYPE_descriptor_s *type_descriptor,
+ const void *struct_ptr, /* Target language's structure */
+ char *errbuf, /* Returned error description */
+ size_t *errlen /* Length of the error description */
+);
+
+
+/*
+ * Generic type for constraint checking callback,
+ * associated with every type descriptor.
+ */
+typedef int(asn_constr_check_f)(
+ const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr,
+ asn_app_constraint_failed_f *optional_callback, /* Log the error */
+ void *optional_app_key /* Opaque key passed to a callback */
+);
+
+/*******************************
+ * INTERNALLY USEFUL FUNCTIONS *
+ *******************************/
+
+asn_constr_check_f asn_generic_no_constraint; /* No constraint whatsoever */
+asn_constr_check_f asn_generic_unknown_constraint; /* Not fully supported */
+
+/*
+ * Invoke the callback with a complete error message.
+ */
+#define ASN__CTFAIL if(ctfailcb) ctfailcb
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN1_CONSTRAINTS_VALIDATOR_H */
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AccelerationConfidence.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AccelerationConfidence.h
new file mode 100644
index 000000000..249b1c484
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AccelerationConfidence.h
@@ -0,0 +1,47 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "ITS-Container"
+ * found in "/input/ITS-Container.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_AccelerationConfidence_H_
+#define _mapem_ts_AccelerationConfidence_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum mapem_ts_AccelerationConfidence {
+ mapem_ts_AccelerationConfidence_pointOneMeterPerSecSquared = 1,
+ mapem_ts_AccelerationConfidence_outOfRange = 101,
+ mapem_ts_AccelerationConfidence_unavailable = 102
+} e_mapem_ts_AccelerationConfidence;
+
+/* mapem_ts_AccelerationConfidence */
+typedef long mapem_ts_AccelerationConfidence_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_mapem_ts_AccelerationConfidence_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_AccelerationConfidence;
+asn_struct_free_f mapem_ts_AccelerationConfidence_free;
+asn_struct_print_f mapem_ts_AccelerationConfidence_print;
+asn_constr_check_f mapem_ts_AccelerationConfidence_constraint;
+per_type_decoder_f mapem_ts_AccelerationConfidence_decode_uper;
+per_type_encoder_f mapem_ts_AccelerationConfidence_encode_uper;
+per_type_decoder_f mapem_ts_AccelerationConfidence_decode_aper;
+per_type_encoder_f mapem_ts_AccelerationConfidence_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_AccelerationConfidence_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AccelerationControl.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AccelerationControl.h
new file mode 100644
index 000000000..feecd8393
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AccelerationControl.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "ITS-Container"
+ * found in "/input/ITS-Container.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_AccelerationControl_H_
+#define _mapem_ts_AccelerationControl_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum mapem_ts_AccelerationControl {
+ mapem_ts_AccelerationControl_brakePedalEngaged = 0,
+ mapem_ts_AccelerationControl_gasPedalEngaged = 1,
+ mapem_ts_AccelerationControl_emergencyBrakeEngaged = 2,
+ mapem_ts_AccelerationControl_collisionWarningEngaged = 3,
+ mapem_ts_AccelerationControl_accEngaged = 4,
+ mapem_ts_AccelerationControl_cruiseControlEngaged = 5,
+ mapem_ts_AccelerationControl_speedLimiterEngaged = 6
+} e_mapem_ts_AccelerationControl;
+
+/* mapem_ts_AccelerationControl */
+typedef BIT_STRING_t mapem_ts_AccelerationControl_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_AccelerationControl;
+asn_struct_free_f mapem_ts_AccelerationControl_free;
+asn_struct_print_f mapem_ts_AccelerationControl_print;
+asn_constr_check_f mapem_ts_AccelerationControl_constraint;
+per_type_decoder_f mapem_ts_AccelerationControl_decode_uper;
+per_type_encoder_f mapem_ts_AccelerationControl_encode_uper;
+per_type_decoder_f mapem_ts_AccelerationControl_decode_aper;
+per_type_encoder_f mapem_ts_AccelerationControl_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_AccelerationControl_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AccidentSubCauseCode.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AccidentSubCauseCode.h
new file mode 100644
index 000000000..c8f2ad041
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AccidentSubCauseCode.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "ITS-Container"
+ * found in "/input/ITS-Container.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_AccidentSubCauseCode_H_
+#define _mapem_ts_AccidentSubCauseCode_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum mapem_ts_AccidentSubCauseCode {
+ mapem_ts_AccidentSubCauseCode_unavailable = 0,
+ mapem_ts_AccidentSubCauseCode_multiVehicleAccident = 1,
+ mapem_ts_AccidentSubCauseCode_heavyAccident = 2,
+ mapem_ts_AccidentSubCauseCode_accidentInvolvingLorry = 3,
+ mapem_ts_AccidentSubCauseCode_accidentInvolvingBus = 4,
+ mapem_ts_AccidentSubCauseCode_accidentInvolvingHazardousMaterials = 5,
+ mapem_ts_AccidentSubCauseCode_accidentOnOppositeLane = 6,
+ mapem_ts_AccidentSubCauseCode_unsecuredAccident = 7,
+ mapem_ts_AccidentSubCauseCode_assistanceRequested = 8
+} e_mapem_ts_AccidentSubCauseCode;
+
+/* mapem_ts_AccidentSubCauseCode */
+typedef long mapem_ts_AccidentSubCauseCode_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_AccidentSubCauseCode;
+asn_struct_free_f mapem_ts_AccidentSubCauseCode_free;
+asn_struct_print_f mapem_ts_AccidentSubCauseCode_print;
+asn_constr_check_f mapem_ts_AccidentSubCauseCode_constraint;
+per_type_decoder_f mapem_ts_AccidentSubCauseCode_decode_uper;
+per_type_encoder_f mapem_ts_AccidentSubCauseCode_encode_uper;
+per_type_decoder_f mapem_ts_AccidentSubCauseCode_decode_aper;
+per_type_encoder_f mapem_ts_AccidentSubCauseCode_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_AccidentSubCauseCode_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_ActionID.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_ActionID.h
new file mode 100644
index 000000000..15074e550
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_ActionID.h
@@ -0,0 +1,40 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "ITS-Container"
+ * found in "/input/ITS-Container.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_ActionID_H_
+#define _mapem_ts_ActionID_H_
+
+
+#include
+
+/* Including external dependencies */
+#include "etsi_its_mapem_ts_coding/mapem_ts_StationID.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_SequenceNumber.h"
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* mapem_ts_ActionID */
+typedef struct mapem_ts_ActionID {
+ mapem_ts_StationID_t originatingStationID;
+ mapem_ts_SequenceNumber_t sequenceNumber;
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} mapem_ts_ActionID_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_ActionID;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_ActionID_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdverseWeatherCondition-AdhesionSubCauseCode.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdverseWeatherCondition-AdhesionSubCauseCode.h
new file mode 100644
index 000000000..3c10c6dfe
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdverseWeatherCondition-AdhesionSubCauseCode.h
@@ -0,0 +1,54 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "ITS-Container"
+ * found in "/input/ITS-Container.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_H_
+#define _mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode {
+ mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_unavailable = 0,
+ mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_heavyFrostOnRoad = 1,
+ mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_fuelOnRoad = 2,
+ mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_mudOnRoad = 3,
+ mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_snowOnRoad = 4,
+ mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_iceOnRoad = 5,
+ mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_blackIceOnRoad = 6,
+ mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_oilOnRoad = 7,
+ mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_looseChippings = 8,
+ mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_instantBlackIce = 9,
+ mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_roadsSalted = 10
+} e_mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode;
+
+/* mapem_ts_AdverseWeatherCondition-AdhesionSubCauseCode */
+typedef long mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode;
+asn_struct_free_f mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_free;
+asn_struct_print_f mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_print;
+asn_constr_check_f mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_constraint;
+per_type_decoder_f mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_decode_uper;
+per_type_encoder_f mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_encode_uper;
+per_type_decoder_f mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_decode_aper;
+per_type_encoder_f mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_AdverseWeatherCondition_AdhesionSubCauseCode_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdverseWeatherCondition-ExtremeWeatherConditionSubCauseCode.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdverseWeatherCondition-ExtremeWeatherConditionSubCauseCode.h
new file mode 100644
index 000000000..8c1b29f72
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdverseWeatherCondition-ExtremeWeatherConditionSubCauseCode.h
@@ -0,0 +1,50 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "ITS-Container"
+ * found in "/input/ITS-Container.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_H_
+#define _mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode {
+ mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_unavailable = 0,
+ mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_strongWinds = 1,
+ mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_damagingHail = 2,
+ mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_hurricane = 3,
+ mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_thunderstorm = 4,
+ mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_tornado = 5,
+ mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_blizzard = 6
+} e_mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode;
+
+/* mapem_ts_AdverseWeatherCondition-ExtremeWeatherConditionSubCauseCode */
+typedef long mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode;
+asn_struct_free_f mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_free;
+asn_struct_print_f mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_print;
+asn_constr_check_f mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_constraint;
+per_type_decoder_f mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_decode_uper;
+per_type_encoder_f mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_encode_uper;
+per_type_decoder_f mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_decode_aper;
+per_type_encoder_f mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdverseWeatherCondition-PrecipitationSubCauseCode.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdverseWeatherCondition-PrecipitationSubCauseCode.h
new file mode 100644
index 000000000..9dbd0f899
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdverseWeatherCondition-PrecipitationSubCauseCode.h
@@ -0,0 +1,47 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "ITS-Container"
+ * found in "/input/ITS-Container.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_AdverseWeatherCondition_PrecipitationSubCauseCode_H_
+#define _mapem_ts_AdverseWeatherCondition_PrecipitationSubCauseCode_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum mapem_ts_AdverseWeatherCondition_PrecipitationSubCauseCode {
+ mapem_ts_AdverseWeatherCondition_PrecipitationSubCauseCode_unavailable = 0,
+ mapem_ts_AdverseWeatherCondition_PrecipitationSubCauseCode_heavyRain = 1,
+ mapem_ts_AdverseWeatherCondition_PrecipitationSubCauseCode_heavySnowfall = 2,
+ mapem_ts_AdverseWeatherCondition_PrecipitationSubCauseCode_softHail = 3
+} e_mapem_ts_AdverseWeatherCondition_PrecipitationSubCauseCode;
+
+/* mapem_ts_AdverseWeatherCondition-PrecipitationSubCauseCode */
+typedef long mapem_ts_AdverseWeatherCondition_PrecipitationSubCauseCode_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_AdverseWeatherCondition_PrecipitationSubCauseCode;
+asn_struct_free_f mapem_ts_AdverseWeatherCondition_PrecipitationSubCauseCode_free;
+asn_struct_print_f mapem_ts_AdverseWeatherCondition_PrecipitationSubCauseCode_print;
+asn_constr_check_f mapem_ts_AdverseWeatherCondition_PrecipitationSubCauseCode_constraint;
+per_type_decoder_f mapem_ts_AdverseWeatherCondition_PrecipitationSubCauseCode_decode_uper;
+per_type_encoder_f mapem_ts_AdverseWeatherCondition_PrecipitationSubCauseCode_encode_uper;
+per_type_decoder_f mapem_ts_AdverseWeatherCondition_PrecipitationSubCauseCode_decode_aper;
+per_type_encoder_f mapem_ts_AdverseWeatherCondition_PrecipitationSubCauseCode_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_AdverseWeatherCondition_PrecipitationSubCauseCode_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdverseWeatherCondition-VisibilitySubCauseCode.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdverseWeatherCondition-VisibilitySubCauseCode.h
new file mode 100644
index 000000000..7dd853ae7
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdverseWeatherCondition-VisibilitySubCauseCode.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "ITS-Container"
+ * found in "/input/ITS-Container.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode_H_
+#define _mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode {
+ mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode_unavailable = 0,
+ mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode_fog = 1,
+ mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode_smoke = 2,
+ mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode_heavySnowfall = 3,
+ mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode_heavyRain = 4,
+ mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode_heavyHail = 5,
+ mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode_lowSunGlare = 6,
+ mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode_sandstorms = 7,
+ mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode_swarmsOfInsects = 8
+} e_mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode;
+
+/* mapem_ts_AdverseWeatherCondition-VisibilitySubCauseCode */
+typedef long mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode;
+asn_struct_free_f mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode_free;
+asn_struct_print_f mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode_print;
+asn_constr_check_f mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode_constraint;
+per_type_decoder_f mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode_decode_uper;
+per_type_encoder_f mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode_encode_uper;
+per_type_decoder_f mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode_decode_aper;
+per_type_encoder_f mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_AdverseWeatherCondition_VisibilitySubCauseCode_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdvisorySpeed.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdvisorySpeed.h
new file mode 100644
index 000000000..51426d484
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdvisorySpeed.h
@@ -0,0 +1,66 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "DSRC"
+ * found in "/input/ISO-TS-19091-addgrp-C-2018-patched.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_AdvisorySpeed_H_
+#define _mapem_ts_AdvisorySpeed_H_
+
+
+#include
+
+/* Including external dependencies */
+#include "etsi_its_mapem_ts_coding/mapem_ts_AdvisorySpeedType.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_SpeedAdvice.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_SpeedConfidenceDSRC.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_ZoneLength.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_RestrictionClassID.h"
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct mapem_ts_Reg_AdvisorySpeed;
+
+/* mapem_ts_AdvisorySpeed */
+typedef struct mapem_ts_AdvisorySpeed {
+ mapem_ts_AdvisorySpeedType_t type;
+ mapem_ts_SpeedAdvice_t *speed; /* OPTIONAL */
+ mapem_ts_SpeedConfidenceDSRC_t *confidence; /* OPTIONAL */
+ mapem_ts_ZoneLength_t *distance; /* OPTIONAL */
+ mapem_ts_RestrictionClassID_t *Class; /* OPTIONAL */
+ struct mapem_ts_AdvisorySpeed__regional {
+ A_SEQUENCE_OF(struct mapem_ts_Reg_AdvisorySpeed) list;
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+ } *regional;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} mapem_ts_AdvisorySpeed_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_AdvisorySpeed;
+extern asn_SEQUENCE_specifics_t asn_SPC_mapem_ts_AdvisorySpeed_specs_1;
+extern asn_TYPE_member_t asn_MBR_mapem_ts_AdvisorySpeed_1[6];
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Referred external types */
+#include "etsi_its_mapem_ts_coding/mapem_ts_RegionalExtension.h"
+
+#endif /* _mapem_ts_AdvisorySpeed_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdvisorySpeedList.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdvisorySpeedList.h
new file mode 100644
index 000000000..c192d24ba
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdvisorySpeedList.h
@@ -0,0 +1,47 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "DSRC"
+ * found in "/input/ISO-TS-19091-addgrp-C-2018-patched.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_AdvisorySpeedList_H_
+#define _mapem_ts_AdvisorySpeedList_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct mapem_ts_AdvisorySpeed;
+
+/* mapem_ts_AdvisorySpeedList */
+typedef struct mapem_ts_AdvisorySpeedList {
+ A_SEQUENCE_OF(struct mapem_ts_AdvisorySpeed) list;
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} mapem_ts_AdvisorySpeedList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_AdvisorySpeedList;
+extern asn_SET_OF_specifics_t asn_SPC_mapem_ts_AdvisorySpeedList_specs_1;
+extern asn_TYPE_member_t asn_MBR_mapem_ts_AdvisorySpeedList_1[1];
+extern asn_per_constraints_t asn_PER_type_mapem_ts_AdvisorySpeedList_constr_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Referred external types */
+#include "etsi_its_mapem_ts_coding/mapem_ts_AdvisorySpeed.h"
+
+#endif /* _mapem_ts_AdvisorySpeedList_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdvisorySpeedType.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdvisorySpeedType.h
new file mode 100644
index 000000000..6cf20ab08
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AdvisorySpeedType.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "DSRC"
+ * found in "/input/ISO-TS-19091-addgrp-C-2018-patched.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_AdvisorySpeedType_H_
+#define _mapem_ts_AdvisorySpeedType_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum mapem_ts_AdvisorySpeedType {
+ mapem_ts_AdvisorySpeedType_none = 0,
+ mapem_ts_AdvisorySpeedType_greenwave = 1,
+ mapem_ts_AdvisorySpeedType_ecoDrive = 2,
+ mapem_ts_AdvisorySpeedType_transit = 3
+ /*
+ * Enumeration is extensible
+ */
+} e_mapem_ts_AdvisorySpeedType;
+
+/* mapem_ts_AdvisorySpeedType */
+typedef long mapem_ts_AdvisorySpeedType_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_mapem_ts_AdvisorySpeedType_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_AdvisorySpeedType;
+extern const asn_INTEGER_specifics_t asn_SPC_mapem_ts_AdvisorySpeedType_specs_1;
+asn_struct_free_f mapem_ts_AdvisorySpeedType_free;
+asn_struct_print_f mapem_ts_AdvisorySpeedType_print;
+asn_constr_check_f mapem_ts_AdvisorySpeedType_constraint;
+per_type_decoder_f mapem_ts_AdvisorySpeedType_decode_uper;
+per_type_encoder_f mapem_ts_AdvisorySpeedType_encode_uper;
+per_type_decoder_f mapem_ts_AdvisorySpeedType_decode_aper;
+per_type_encoder_f mapem_ts_AdvisorySpeedType_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_AdvisorySpeedType_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AllowedManeuvers.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AllowedManeuvers.h
new file mode 100644
index 000000000..073178b78
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AllowedManeuvers.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "DSRC"
+ * found in "/input/ISO-TS-19091-addgrp-C-2018-patched.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_AllowedManeuvers_H_
+#define _mapem_ts_AllowedManeuvers_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum mapem_ts_AllowedManeuvers {
+ mapem_ts_AllowedManeuvers_maneuverStraightAllowed = 0,
+ mapem_ts_AllowedManeuvers_maneuverLeftAllowed = 1,
+ mapem_ts_AllowedManeuvers_maneuverRightAllowed = 2,
+ mapem_ts_AllowedManeuvers_maneuverUTurnAllowed = 3,
+ mapem_ts_AllowedManeuvers_maneuverLeftTurnOnRedAllowed = 4,
+ mapem_ts_AllowedManeuvers_maneuverRightTurnOnRedAllowed = 5,
+ mapem_ts_AllowedManeuvers_maneuverLaneChangeAllowed = 6,
+ mapem_ts_AllowedManeuvers_maneuverNoStoppingAllowed = 7,
+ mapem_ts_AllowedManeuvers_yieldAllwaysRequired = 8,
+ mapem_ts_AllowedManeuvers_goWithHalt = 9,
+ mapem_ts_AllowedManeuvers_caution = 10,
+ mapem_ts_AllowedManeuvers_reserved1 = 11
+} e_mapem_ts_AllowedManeuvers;
+
+/* mapem_ts_AllowedManeuvers */
+typedef BIT_STRING_t mapem_ts_AllowedManeuvers_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_mapem_ts_AllowedManeuvers_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_AllowedManeuvers;
+asn_struct_free_f mapem_ts_AllowedManeuvers_free;
+asn_struct_print_f mapem_ts_AllowedManeuvers_print;
+asn_constr_check_f mapem_ts_AllowedManeuvers_constraint;
+per_type_decoder_f mapem_ts_AllowedManeuvers_decode_uper;
+per_type_encoder_f mapem_ts_AllowedManeuvers_encode_uper;
+per_type_decoder_f mapem_ts_AllowedManeuvers_decode_aper;
+per_type_encoder_f mapem_ts_AllowedManeuvers_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_AllowedManeuvers_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AlphabetIndicator.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AlphabetIndicator.h
new file mode 100644
index 000000000..ad8fa66f4
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AlphabetIndicator.h
@@ -0,0 +1,56 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "AVIAEINumberingAndDataStructures"
+ * found in "/input/ISO14816_AVIAEINumberingAndDataStructures.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_AlphabetIndicator_H_
+#define _mapem_ts_AlphabetIndicator_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum mapem_ts_AlphabetIndicator {
+ mapem_ts_AlphabetIndicator_latinAlphabetNo1 = 0,
+ mapem_ts_AlphabetIndicator_latinAlphabetNo2 = 1,
+ mapem_ts_AlphabetIndicator_latinAlphabetNo3 = 2,
+ mapem_ts_AlphabetIndicator_latinAlphabetNo4 = 3,
+ mapem_ts_AlphabetIndicator_latinCyrillicAlphabet = 4,
+ mapem_ts_AlphabetIndicator_latinArabicAlphabet = 5,
+ mapem_ts_AlphabetIndicator_latinGreekAlphabet = 6,
+ mapem_ts_AlphabetIndicator_latinHebrewAlphabet = 7,
+ mapem_ts_AlphabetIndicator_latinAlphabetNo5 = 8,
+ mapem_ts_AlphabetIndicator_latinAlphabetNo6 = 9,
+ mapem_ts_AlphabetIndicator_twoOctetBMP = 10,
+ mapem_ts_AlphabetIndicator_fourOctetCanonical = 11
+} e_mapem_ts_AlphabetIndicator;
+
+/* mapem_ts_AlphabetIndicator */
+typedef long mapem_ts_AlphabetIndicator_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_mapem_ts_AlphabetIndicator_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_AlphabetIndicator;
+asn_struct_free_f mapem_ts_AlphabetIndicator_free;
+asn_struct_print_f mapem_ts_AlphabetIndicator_print;
+asn_constr_check_f mapem_ts_AlphabetIndicator_constraint;
+per_type_decoder_f mapem_ts_AlphabetIndicator_decode_uper;
+per_type_encoder_f mapem_ts_AlphabetIndicator_encode_uper;
+per_type_decoder_f mapem_ts_AlphabetIndicator_decode_aper;
+per_type_encoder_f mapem_ts_AlphabetIndicator_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_AlphabetIndicator_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_Altitude.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_Altitude.h
new file mode 100644
index 000000000..bee2ec0b8
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_Altitude.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "ITS-Container"
+ * found in "/input/ITS-Container.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_Altitude_H_
+#define _mapem_ts_Altitude_H_
+
+
+#include
+
+/* Including external dependencies */
+#include "etsi_its_mapem_ts_coding/mapem_ts_AltitudeValue.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_AltitudeConfidence.h"
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* mapem_ts_Altitude */
+typedef struct mapem_ts_Altitude {
+ mapem_ts_AltitudeValue_t altitudeValue;
+ mapem_ts_AltitudeConfidence_t altitudeConfidence;
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} mapem_ts_Altitude_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_Altitude;
+extern asn_SEQUENCE_specifics_t asn_SPC_mapem_ts_Altitude_specs_1;
+extern asn_TYPE_member_t asn_MBR_mapem_ts_Altitude_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_Altitude_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AltitudeConfidence.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AltitudeConfidence.h
new file mode 100644
index 000000000..f03a05628
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AltitudeConfidence.h
@@ -0,0 +1,61 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "ITS-Container"
+ * found in "/input/ITS-Container.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_AltitudeConfidence_H_
+#define _mapem_ts_AltitudeConfidence_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum mapem_ts_AltitudeConfidence {
+ mapem_ts_AltitudeConfidence_alt_000_01 = 0,
+ mapem_ts_AltitudeConfidence_alt_000_02 = 1,
+ mapem_ts_AltitudeConfidence_alt_000_05 = 2,
+ mapem_ts_AltitudeConfidence_alt_000_10 = 3,
+ mapem_ts_AltitudeConfidence_alt_000_20 = 4,
+ mapem_ts_AltitudeConfidence_alt_000_50 = 5,
+ mapem_ts_AltitudeConfidence_alt_001_00 = 6,
+ mapem_ts_AltitudeConfidence_alt_002_00 = 7,
+ mapem_ts_AltitudeConfidence_alt_005_00 = 8,
+ mapem_ts_AltitudeConfidence_alt_010_00 = 9,
+ mapem_ts_AltitudeConfidence_alt_020_00 = 10,
+ mapem_ts_AltitudeConfidence_alt_050_00 = 11,
+ mapem_ts_AltitudeConfidence_alt_100_00 = 12,
+ mapem_ts_AltitudeConfidence_alt_200_00 = 13,
+ mapem_ts_AltitudeConfidence_outOfRange = 14,
+ mapem_ts_AltitudeConfidence_unavailable = 15
+} e_mapem_ts_AltitudeConfidence;
+
+/* mapem_ts_AltitudeConfidence */
+typedef long mapem_ts_AltitudeConfidence_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_mapem_ts_AltitudeConfidence_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_AltitudeConfidence;
+extern const asn_INTEGER_specifics_t asn_SPC_mapem_ts_AltitudeConfidence_specs_1;
+asn_struct_free_f mapem_ts_AltitudeConfidence_free;
+asn_struct_print_f mapem_ts_AltitudeConfidence_print;
+asn_constr_check_f mapem_ts_AltitudeConfidence_constraint;
+per_type_decoder_f mapem_ts_AltitudeConfidence_decode_uper;
+per_type_encoder_f mapem_ts_AltitudeConfidence_encode_uper;
+per_type_decoder_f mapem_ts_AltitudeConfidence_decode_aper;
+per_type_encoder_f mapem_ts_AltitudeConfidence_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_AltitudeConfidence_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AltitudeValue.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AltitudeValue.h
new file mode 100644
index 000000000..280d5e93f
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AltitudeValue.h
@@ -0,0 +1,47 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "ITS-Container"
+ * found in "/input/ITS-Container.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_AltitudeValue_H_
+#define _mapem_ts_AltitudeValue_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum mapem_ts_AltitudeValue {
+ mapem_ts_AltitudeValue_referenceEllipsoidSurface = 0,
+ mapem_ts_AltitudeValue_oneCentimeter = 1,
+ mapem_ts_AltitudeValue_unavailable = 800001
+} e_mapem_ts_AltitudeValue;
+
+/* mapem_ts_AltitudeValue */
+typedef long mapem_ts_AltitudeValue_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_mapem_ts_AltitudeValue_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_AltitudeValue;
+asn_struct_free_f mapem_ts_AltitudeValue_free;
+asn_struct_print_f mapem_ts_AltitudeValue_print;
+asn_constr_check_f mapem_ts_AltitudeValue_constraint;
+per_type_decoder_f mapem_ts_AltitudeValue_decode_uper;
+per_type_encoder_f mapem_ts_AltitudeValue_encode_uper;
+per_type_decoder_f mapem_ts_AltitudeValue_decode_aper;
+per_type_encoder_f mapem_ts_AltitudeValue_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_AltitudeValue_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_Angle.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_Angle.h
new file mode 100644
index 000000000..cf5445e8f
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_Angle.h
@@ -0,0 +1,40 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "DSRC"
+ * found in "/input/ISO-TS-19091-addgrp-C-2018-patched.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_Angle_H_
+#define _mapem_ts_Angle_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* mapem_ts_Angle */
+typedef long mapem_ts_Angle_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_mapem_ts_Angle_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_Angle;
+asn_struct_free_f mapem_ts_Angle_free;
+asn_struct_print_f mapem_ts_Angle_print;
+asn_constr_check_f mapem_ts_Angle_constraint;
+per_type_decoder_f mapem_ts_Angle_decode_uper;
+per_type_encoder_f mapem_ts_Angle_encode_uper;
+per_type_decoder_f mapem_ts_Angle_decode_aper;
+per_type_encoder_f mapem_ts_Angle_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_Angle_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AntennaOffsetSet.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AntennaOffsetSet.h
new file mode 100644
index 000000000..76372acb3
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AntennaOffsetSet.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "DSRC"
+ * found in "/input/ISO-TS-19091-addgrp-C-2018-patched.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_AntennaOffsetSet_H_
+#define _mapem_ts_AntennaOffsetSet_H_
+
+
+#include
+
+/* Including external dependencies */
+#include "etsi_its_mapem_ts_coding/mapem_ts_Offset-B12.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_Offset-B09.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_Offset-B10.h"
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* mapem_ts_AntennaOffsetSet */
+typedef struct mapem_ts_AntennaOffsetSet {
+ mapem_ts_Offset_B12_t antOffsetX;
+ mapem_ts_Offset_B09_t antOffsetY;
+ mapem_ts_Offset_B10_t antOffsetZ;
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} mapem_ts_AntennaOffsetSet_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_AntennaOffsetSet;
+extern asn_SEQUENCE_specifics_t asn_SPC_mapem_ts_AntennaOffsetSet_specs_1;
+extern asn_TYPE_member_t asn_MBR_mapem_ts_AntennaOffsetSet_1[3];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_AntennaOffsetSet_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_ApproachID.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_ApproachID.h
new file mode 100644
index 000000000..c9b5a6c38
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_ApproachID.h
@@ -0,0 +1,40 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "DSRC"
+ * found in "/input/ISO-TS-19091-addgrp-C-2018-patched.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_ApproachID_H_
+#define _mapem_ts_ApproachID_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* mapem_ts_ApproachID */
+typedef long mapem_ts_ApproachID_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_mapem_ts_ApproachID_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_ApproachID;
+asn_struct_free_f mapem_ts_ApproachID_free;
+asn_struct_print_f mapem_ts_ApproachID_print;
+asn_constr_check_f mapem_ts_ApproachID_constraint;
+per_type_decoder_f mapem_ts_ApproachID_decode_uper;
+per_type_encoder_f mapem_ts_ApproachID_encode_uper;
+per_type_decoder_f mapem_ts_ApproachID_decode_aper;
+per_type_encoder_f mapem_ts_ApproachID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_ApproachID_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AviEriDateTime.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AviEriDateTime.h
new file mode 100644
index 000000000..bd6d2ec1d
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_AviEriDateTime.h
@@ -0,0 +1,40 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "AVIAEINumberingAndDataStructures"
+ * found in "/input/ISO14816_AVIAEINumberingAndDataStructures.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_AviEriDateTime_H_
+#define _mapem_ts_AviEriDateTime_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* mapem_ts_AviEriDateTime */
+typedef OCTET_STRING_t mapem_ts_AviEriDateTime_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_mapem_ts_AviEriDateTime_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_AviEriDateTime;
+asn_struct_free_f mapem_ts_AviEriDateTime_free;
+asn_struct_print_f mapem_ts_AviEriDateTime_print;
+asn_constr_check_f mapem_ts_AviEriDateTime_constraint;
+per_type_decoder_f mapem_ts_AviEriDateTime_decode_uper;
+per_type_encoder_f mapem_ts_AviEriDateTime_encode_uper;
+per_type_decoder_f mapem_ts_AviEriDateTime_decode_aper;
+per_type_encoder_f mapem_ts_AviEriDateTime_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_AviEriDateTime_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_BasicVehicleRole.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_BasicVehicleRole.h
new file mode 100644
index 000000000..7140c78f9
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_BasicVehicleRole.h
@@ -0,0 +1,71 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "DSRC"
+ * found in "/input/ISO-TS-19091-addgrp-C-2018-patched.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_BasicVehicleRole_H_
+#define _mapem_ts_BasicVehicleRole_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum mapem_ts_BasicVehicleRole {
+ mapem_ts_BasicVehicleRole_basicVehicle = 0,
+ mapem_ts_BasicVehicleRole_publicTransport = 1,
+ mapem_ts_BasicVehicleRole_specialTransport = 2,
+ mapem_ts_BasicVehicleRole_dangerousGoods = 3,
+ mapem_ts_BasicVehicleRole_roadWork = 4,
+ mapem_ts_BasicVehicleRole_roadRescue = 5,
+ mapem_ts_BasicVehicleRole_emergency = 6,
+ mapem_ts_BasicVehicleRole_safetyCar = 7,
+ mapem_ts_BasicVehicleRole_none_unknown = 8,
+ mapem_ts_BasicVehicleRole_truck = 9,
+ mapem_ts_BasicVehicleRole_motorcycle = 10,
+ mapem_ts_BasicVehicleRole_roadSideSource = 11,
+ mapem_ts_BasicVehicleRole_police = 12,
+ mapem_ts_BasicVehicleRole_fire = 13,
+ mapem_ts_BasicVehicleRole_ambulance = 14,
+ mapem_ts_BasicVehicleRole_dot = 15,
+ mapem_ts_BasicVehicleRole_transit = 16,
+ mapem_ts_BasicVehicleRole_slowMoving = 17,
+ mapem_ts_BasicVehicleRole_stopNgo = 18,
+ mapem_ts_BasicVehicleRole_cyclist = 19,
+ mapem_ts_BasicVehicleRole_pedestrian = 20,
+ mapem_ts_BasicVehicleRole_nonMotorized = 21,
+ mapem_ts_BasicVehicleRole_military = 22
+ /*
+ * Enumeration is extensible
+ */
+} e_mapem_ts_BasicVehicleRole;
+
+/* mapem_ts_BasicVehicleRole */
+typedef long mapem_ts_BasicVehicleRole_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_mapem_ts_BasicVehicleRole_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_BasicVehicleRole;
+extern const asn_INTEGER_specifics_t asn_SPC_mapem_ts_BasicVehicleRole_specs_1;
+asn_struct_free_f mapem_ts_BasicVehicleRole_free;
+asn_struct_print_f mapem_ts_BasicVehicleRole_print;
+asn_constr_check_f mapem_ts_BasicVehicleRole_constraint;
+per_type_decoder_f mapem_ts_BasicVehicleRole_decode_uper;
+per_type_encoder_f mapem_ts_BasicVehicleRole_encode_uper;
+per_type_decoder_f mapem_ts_BasicVehicleRole_decode_aper;
+per_type_encoder_f mapem_ts_BasicVehicleRole_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_BasicVehicleRole_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_BatteryStatus.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_BatteryStatus.h
new file mode 100644
index 000000000..3b3d7ba01
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_BatteryStatus.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "AddGrpC"
+ * found in "/input/ISO-TS-19091-addgrp-C-2018-patched.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_BatteryStatus_H_
+#define _mapem_ts_BatteryStatus_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum mapem_ts_BatteryStatus {
+ mapem_ts_BatteryStatus_unknown = 0,
+ mapem_ts_BatteryStatus_critical = 1,
+ mapem_ts_BatteryStatus_low = 2,
+ mapem_ts_BatteryStatus_good = 3
+ /*
+ * Enumeration is extensible
+ */
+} e_mapem_ts_BatteryStatus;
+
+/* mapem_ts_BatteryStatus */
+typedef long mapem_ts_BatteryStatus_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_mapem_ts_BatteryStatus_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_BatteryStatus;
+extern const asn_INTEGER_specifics_t asn_SPC_mapem_ts_BatteryStatus_specs_1;
+asn_struct_free_f mapem_ts_BatteryStatus_free;
+asn_struct_print_f mapem_ts_BatteryStatus_print;
+asn_constr_check_f mapem_ts_BatteryStatus_constraint;
+per_type_decoder_f mapem_ts_BatteryStatus_decode_uper;
+per_type_encoder_f mapem_ts_BatteryStatus_encode_uper;
+per_type_decoder_f mapem_ts_BatteryStatus_decode_aper;
+per_type_encoder_f mapem_ts_BatteryStatus_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_BatteryStatus_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS1.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS1.h
new file mode 100644
index 000000000..442ebf51d
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS1.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "AVIAEINumberingAndDataStructures"
+ * found in "/input/ISO14816_AVIAEINumberingAndDataStructures.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_CS1_H_
+#define _mapem_ts_CS1_H_
+
+
+#include
+
+/* Including external dependencies */
+#include "etsi_its_mapem_ts_coding/mapem_ts_CountryCode.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_IssuerIdentifier.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_ServiceNumber.h"
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* mapem_ts_CS1 */
+typedef struct mapem_ts_CS1 {
+ mapem_ts_CountryCode_t countryCode;
+ mapem_ts_IssuerIdentifier_t issuerIdentifier;
+ mapem_ts_ServiceNumber_t serviceNumber;
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} mapem_ts_CS1_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_CS1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_CS1_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS2.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS2.h
new file mode 100644
index 000000000..a6bdad97b
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS2.h
@@ -0,0 +1,40 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "AVIAEINumberingAndDataStructures"
+ * found in "/input/ISO14816_AVIAEINumberingAndDataStructures.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_CS2_H_
+#define _mapem_ts_CS2_H_
+
+
+#include
+
+/* Including external dependencies */
+#include "etsi_its_mapem_ts_coding/mapem_ts_ManufacturerIdentifier.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_ServiceNumber.h"
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* mapem_ts_CS2 */
+typedef struct mapem_ts_CS2 {
+ mapem_ts_ManufacturerIdentifier_t manufacturerIdentifier;
+ mapem_ts_ServiceNumber_t serviceNumber;
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} mapem_ts_CS2_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_CS2;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_CS2_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS3.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS3.h
new file mode 100644
index 000000000..aef3c9e15
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS3.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "AVIAEINumberingAndDataStructures"
+ * found in "/input/ISO14816_AVIAEINumberingAndDataStructures.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_CS3_H_
+#define _mapem_ts_CS3_H_
+
+
+#include
+
+/* Including external dependencies */
+#include "etsi_its_mapem_ts_coding/mapem_ts_StartTime.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_StopTime.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_GeoGraphicalLimit.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_ServiceApplicationLimit.h"
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* mapem_ts_CS3 */
+typedef struct mapem_ts_CS3 {
+ mapem_ts_StartTime_t startTime;
+ mapem_ts_StopTime_t stopTime;
+ mapem_ts_GeoGraphicalLimit_t geographLimit;
+ mapem_ts_ServiceApplicationLimit_t serviceAppLimit;
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} mapem_ts_CS3_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_CS3;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_CS3_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS4.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS4.h
new file mode 100644
index 000000000..14bb6ed4e
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS4.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "AVIAEINumberingAndDataStructures"
+ * found in "/input/ISO14816_AVIAEINumberingAndDataStructures.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_CS4_H_
+#define _mapem_ts_CS4_H_
+
+
+#include
+
+/* Including external dependencies */
+#include "etsi_its_mapem_ts_coding/mapem_ts_CountryCode.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_AlphabetIndicator.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_LicPlateNumber.h"
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* mapem_ts_CS4 */
+typedef struct mapem_ts_CS4 {
+ mapem_ts_CountryCode_t countryCode;
+ mapem_ts_AlphabetIndicator_t alphabetIndicator;
+ mapem_ts_LicPlateNumber_t licPlateNumber;
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} mapem_ts_CS4_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_CS4;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_CS4_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS5.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS5.h
new file mode 100644
index 000000000..51ebc45e8
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS5.h
@@ -0,0 +1,40 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "AVIAEINumberingAndDataStructures"
+ * found in "/input/ISO14816_AVIAEINumberingAndDataStructures.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_CS5_H_
+#define _mapem_ts_CS5_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* mapem_ts_CS5 */
+typedef struct mapem_ts_CS5 {
+ VisibleString_t vin;
+ BIT_STRING_t fill;
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} mapem_ts_CS5_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_CS5;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_CS5_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS7.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS7.h
new file mode 100644
index 000000000..7921837d0
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS7.h
@@ -0,0 +1,39 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "AVIAEINumberingAndDataStructures"
+ * found in "/input/ISO14816_AVIAEINumberingAndDataStructures.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_CS7_H_
+#define _mapem_ts_CS7_H_
+
+
+#include
+
+/* Including external dependencies */
+#include "etsi_its_mapem_ts_coding/mapem_ts_FreightContainerData.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* mapem_ts_CS7 */
+typedef mapem_ts_FreightContainerData_t mapem_ts_CS7_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_CS7;
+asn_struct_free_f mapem_ts_CS7_free;
+asn_struct_print_f mapem_ts_CS7_print;
+asn_constr_check_f mapem_ts_CS7_constraint;
+per_type_decoder_f mapem_ts_CS7_decode_uper;
+per_type_encoder_f mapem_ts_CS7_encode_uper;
+per_type_decoder_f mapem_ts_CS7_decode_aper;
+per_type_encoder_f mapem_ts_CS7_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_CS7_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS8.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS8.h
new file mode 100644
index 000000000..5a990f5a9
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CS8.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "AVIAEINumberingAndDataStructures"
+ * found in "/input/ISO14816_AVIAEINumberingAndDataStructures.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_CS8_H_
+#define _mapem_ts_CS8_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+#include "etsi_its_mapem_ts_coding/mapem_ts_CountryCode.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_TaxCode.h"
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* mapem_ts_CS8 */
+typedef struct mapem_ts_CS8 {
+ BIT_STRING_t fill;
+ mapem_ts_CountryCode_t countryCode;
+ mapem_ts_TaxCode_t taxCode;
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} mapem_ts_CS8_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_CS8;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_CS8_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CauseCode.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CauseCode.h
new file mode 100644
index 000000000..e2796ea4f
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CauseCode.h
@@ -0,0 +1,44 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "ITS-Container"
+ * found in "/input/ITS-Container.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_CauseCode_H_
+#define _mapem_ts_CauseCode_H_
+
+
+#include
+
+/* Including external dependencies */
+#include "etsi_its_mapem_ts_coding/mapem_ts_CauseCodeType.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_SubCauseCodeType.h"
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* mapem_ts_CauseCode */
+typedef struct mapem_ts_CauseCode {
+ mapem_ts_CauseCodeType_t causeCode;
+ mapem_ts_SubCauseCodeType_t subCauseCode;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} mapem_ts_CauseCode_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_CauseCode;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_CauseCode_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CauseCodeType.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CauseCodeType.h
new file mode 100644
index 000000000..e648b2bb8
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CauseCodeType.h
@@ -0,0 +1,71 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "ITS-Container"
+ * found in "/input/ITS-Container.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_CauseCodeType_H_
+#define _mapem_ts_CauseCodeType_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum mapem_ts_CauseCodeType {
+ mapem_ts_CauseCodeType_reserved = 0,
+ mapem_ts_CauseCodeType_trafficCondition = 1,
+ mapem_ts_CauseCodeType_accident = 2,
+ mapem_ts_CauseCodeType_roadworks = 3,
+ mapem_ts_CauseCodeType_impassability = 5,
+ mapem_ts_CauseCodeType_adverseWeatherCondition_Adhesion = 6,
+ mapem_ts_CauseCodeType_aquaplannning = 7,
+ mapem_ts_CauseCodeType_hazardousLocation_SurfaceCondition = 9,
+ mapem_ts_CauseCodeType_hazardousLocation_ObstacleOnTheRoad = 10,
+ mapem_ts_CauseCodeType_hazardousLocation_AnimalOnTheRoad = 11,
+ mapem_ts_CauseCodeType_humanPresenceOnTheRoad = 12,
+ mapem_ts_CauseCodeType_wrongWayDriving = 14,
+ mapem_ts_CauseCodeType_rescueAndRecoveryWorkInProgress = 15,
+ mapem_ts_CauseCodeType_adverseWeatherCondition_ExtremeWeatherCondition = 17,
+ mapem_ts_CauseCodeType_adverseWeatherCondition_Visibility = 18,
+ mapem_ts_CauseCodeType_adverseWeatherCondition_Precipitation = 19,
+ mapem_ts_CauseCodeType_slowVehicle = 26,
+ mapem_ts_CauseCodeType_dangerousEndOfQueue = 27,
+ mapem_ts_CauseCodeType_vehicleBreakdown = 91,
+ mapem_ts_CauseCodeType_postCrash = 92,
+ mapem_ts_CauseCodeType_humanProblem = 93,
+ mapem_ts_CauseCodeType_stationaryVehicle = 94,
+ mapem_ts_CauseCodeType_emergencyVehicleApproaching = 95,
+ mapem_ts_CauseCodeType_hazardousLocation_DangerousCurve = 96,
+ mapem_ts_CauseCodeType_collisionRisk = 97,
+ mapem_ts_CauseCodeType_signalViolation = 98,
+ mapem_ts_CauseCodeType_dangerousSituation = 99
+} e_mapem_ts_CauseCodeType;
+
+/* mapem_ts_CauseCodeType */
+typedef long mapem_ts_CauseCodeType_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_mapem_ts_CauseCodeType_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_CauseCodeType;
+asn_struct_free_f mapem_ts_CauseCodeType_free;
+asn_struct_print_f mapem_ts_CauseCodeType_print;
+asn_constr_check_f mapem_ts_CauseCodeType_constraint;
+per_type_decoder_f mapem_ts_CauseCodeType_decode_uper;
+per_type_encoder_f mapem_ts_CauseCodeType_encode_uper;
+per_type_decoder_f mapem_ts_CauseCodeType_decode_aper;
+per_type_encoder_f mapem_ts_CauseCodeType_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_CauseCodeType_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CenDsrcTollingZone.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CenDsrcTollingZone.h
new file mode 100644
index 000000000..c2cb906e5
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CenDsrcTollingZone.h
@@ -0,0 +1,46 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "ITS-Container"
+ * found in "/input/ITS-Container.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_CenDsrcTollingZone_H_
+#define _mapem_ts_CenDsrcTollingZone_H_
+
+
+#include
+
+/* Including external dependencies */
+#include "etsi_its_mapem_ts_coding/mapem_ts_Latitude.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_Longitude.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_CenDsrcTollingZoneID.h"
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* mapem_ts_CenDsrcTollingZone */
+typedef struct mapem_ts_CenDsrcTollingZone {
+ mapem_ts_Latitude_t protectedZoneLatitude;
+ mapem_ts_Longitude_t protectedZoneLongitude;
+ mapem_ts_CenDsrcTollingZoneID_t *cenDsrcTollingZoneID; /* OPTIONAL */
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} mapem_ts_CenDsrcTollingZone_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_CenDsrcTollingZone;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_CenDsrcTollingZone_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CenDsrcTollingZoneID.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CenDsrcTollingZoneID.h
new file mode 100644
index 000000000..09b6cc93b
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CenDsrcTollingZoneID.h
@@ -0,0 +1,40 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "ITS-Container"
+ * found in "/input/ITS-Container.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_CenDsrcTollingZoneID_H_
+#define _mapem_ts_CenDsrcTollingZoneID_H_
+
+
+#include
+
+/* Including external dependencies */
+#include "etsi_its_mapem_ts_coding/mapem_ts_ProtectedZoneID.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* mapem_ts_CenDsrcTollingZoneID */
+typedef mapem_ts_ProtectedZoneID_t mapem_ts_CenDsrcTollingZoneID_t;
+
+/* Implementation */
+extern asn_per_constraints_t asn_PER_type_mapem_ts_CenDsrcTollingZoneID_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_CenDsrcTollingZoneID;
+asn_struct_free_f mapem_ts_CenDsrcTollingZoneID_free;
+asn_struct_print_f mapem_ts_CenDsrcTollingZoneID_print;
+asn_constr_check_f mapem_ts_CenDsrcTollingZoneID_constraint;
+per_type_decoder_f mapem_ts_CenDsrcTollingZoneID_decode_uper;
+per_type_encoder_f mapem_ts_CenDsrcTollingZoneID_encode_uper;
+per_type_decoder_f mapem_ts_CenDsrcTollingZoneID_decode_aper;
+per_type_encoder_f mapem_ts_CenDsrcTollingZoneID_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_CenDsrcTollingZoneID_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_ClosedLanes.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_ClosedLanes.h
new file mode 100644
index 000000000..1280154a9
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_ClosedLanes.h
@@ -0,0 +1,45 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "ITS-Container"
+ * found in "/input/ITS-Container.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_ClosedLanes_H_
+#define _mapem_ts_ClosedLanes_H_
+
+
+#include
+
+/* Including external dependencies */
+#include "etsi_its_mapem_ts_coding/mapem_ts_HardShoulderStatus.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_DrivingLaneStatus.h"
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* mapem_ts_ClosedLanes */
+typedef struct mapem_ts_ClosedLanes {
+ mapem_ts_HardShoulderStatus_t *innerhardShoulderStatus; /* OPTIONAL */
+ mapem_ts_HardShoulderStatus_t *outerhardShoulderStatus; /* OPTIONAL */
+ mapem_ts_DrivingLaneStatus_t *drivingLaneStatus; /* OPTIONAL */
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} mapem_ts_ClosedLanes_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_ClosedLanes;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_ClosedLanes_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CollisionRiskSubCauseCode.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CollisionRiskSubCauseCode.h
new file mode 100644
index 000000000..9b43576a6
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_CollisionRiskSubCauseCode.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "ITS-Container"
+ * found in "/input/ITS-Container.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_CollisionRiskSubCauseCode_H_
+#define _mapem_ts_CollisionRiskSubCauseCode_H_
+
+
+#include
+
+/* Including external dependencies */
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum mapem_ts_CollisionRiskSubCauseCode {
+ mapem_ts_CollisionRiskSubCauseCode_unavailable = 0,
+ mapem_ts_CollisionRiskSubCauseCode_longitudinalCollisionRisk = 1,
+ mapem_ts_CollisionRiskSubCauseCode_crossingCollisionRisk = 2,
+ mapem_ts_CollisionRiskSubCauseCode_lateralCollisionRisk = 3,
+ mapem_ts_CollisionRiskSubCauseCode_vulnerableRoadUser = 4
+} e_mapem_ts_CollisionRiskSubCauseCode;
+
+/* mapem_ts_CollisionRiskSubCauseCode */
+typedef long mapem_ts_CollisionRiskSubCauseCode_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_CollisionRiskSubCauseCode;
+asn_struct_free_f mapem_ts_CollisionRiskSubCauseCode_free;
+asn_struct_print_f mapem_ts_CollisionRiskSubCauseCode_print;
+asn_constr_check_f mapem_ts_CollisionRiskSubCauseCode_constraint;
+per_type_decoder_f mapem_ts_CollisionRiskSubCauseCode_decode_uper;
+per_type_encoder_f mapem_ts_CollisionRiskSubCauseCode_encode_uper;
+per_type_decoder_f mapem_ts_CollisionRiskSubCauseCode_decode_aper;
+per_type_encoder_f mapem_ts_CollisionRiskSubCauseCode_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_CollisionRiskSubCauseCode_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_ComputedLane.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_ComputedLane.h
new file mode 100644
index 000000000..8c49ef6f7
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_ComputedLane.h
@@ -0,0 +1,98 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "DSRC"
+ * found in "/input/ISO-TS-19091-addgrp-C-2018-patched.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_ComputedLane_H_
+#define _mapem_ts_ComputedLane_H_
+
+
+#include
+
+/* Including external dependencies */
+#include "etsi_its_mapem_ts_coding/mapem_ts_LaneID.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_Angle.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_Scale-B12.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_DrivenLineOffsetSm.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_DrivenLineOffsetLg.h"
+#include
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Dependencies */
+typedef enum mapem_ts_ComputedLane__offsetXaxis_PR {
+ mapem_ts_ComputedLane__offsetXaxis_PR_NOTHING, /* No components present */
+ mapem_ts_ComputedLane__offsetXaxis_PR_small,
+ mapem_ts_ComputedLane__offsetXaxis_PR_large
+} mapem_ts_ComputedLane__offsetXaxis_PR;
+typedef enum mapem_ts_ComputedLane__offsetYaxis_PR {
+ mapem_ts_ComputedLane__offsetYaxis_PR_NOTHING, /* No components present */
+ mapem_ts_ComputedLane__offsetYaxis_PR_small,
+ mapem_ts_ComputedLane__offsetYaxis_PR_large
+} mapem_ts_ComputedLane__offsetYaxis_PR;
+
+/* Forward declarations */
+struct mapem_ts_Reg_ComputedLane;
+
+/* mapem_ts_ComputedLane */
+typedef struct mapem_ts_ComputedLane {
+ mapem_ts_LaneID_t referenceLaneId;
+ struct mapem_ts_ComputedLane__offsetXaxis {
+ mapem_ts_ComputedLane__offsetXaxis_PR present;
+ union mapem_ts_ComputedLane__mapem_ts_offsetXaxis_u {
+ mapem_ts_DrivenLineOffsetSm_t small;
+ mapem_ts_DrivenLineOffsetLg_t large;
+ } choice;
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+ } offsetXaxis;
+ struct mapem_ts_ComputedLane__offsetYaxis {
+ mapem_ts_ComputedLane__offsetYaxis_PR present;
+ union mapem_ts_ComputedLane__mapem_ts_offsetYaxis_u {
+ mapem_ts_DrivenLineOffsetSm_t small;
+ mapem_ts_DrivenLineOffsetLg_t large;
+ } choice;
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+ } offsetYaxis;
+ mapem_ts_Angle_t *rotateXY; /* OPTIONAL */
+ mapem_ts_Scale_B12_t *scaleXaxis; /* OPTIONAL */
+ mapem_ts_Scale_B12_t *scaleYaxis; /* OPTIONAL */
+ struct mapem_ts_ComputedLane__regional {
+ A_SEQUENCE_OF(struct mapem_ts_Reg_ComputedLane) list;
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+ } *regional;
+ /*
+ * This type is extensible,
+ * possible extensions are below.
+ */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} mapem_ts_ComputedLane_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_ComputedLane;
+extern asn_SEQUENCE_specifics_t asn_SPC_mapem_ts_ComputedLane_specs_1;
+extern asn_TYPE_member_t asn_MBR_mapem_ts_ComputedLane_1[7];
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Referred external types */
+#include "etsi_its_mapem_ts_coding/mapem_ts_RegionalExtension.h"
+
+#endif /* _mapem_ts_ComputedLane_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_ConnectingLane.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_ConnectingLane.h
new file mode 100644
index 000000000..1d8c3dbb1
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_ConnectingLane.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "DSRC"
+ * found in "/input/ISO-TS-19091-addgrp-C-2018-patched.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_ConnectingLane_H_
+#define _mapem_ts_ConnectingLane_H_
+
+
+#include
+
+/* Including external dependencies */
+#include "etsi_its_mapem_ts_coding/mapem_ts_LaneID.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_AllowedManeuvers.h"
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* mapem_ts_ConnectingLane */
+typedef struct mapem_ts_ConnectingLane {
+ mapem_ts_LaneID_t lane;
+ mapem_ts_AllowedManeuvers_t *maneuver; /* OPTIONAL */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} mapem_ts_ConnectingLane_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_ConnectingLane;
+extern asn_SEQUENCE_specifics_t asn_SPC_mapem_ts_ConnectingLane_specs_1;
+extern asn_TYPE_member_t asn_MBR_mapem_ts_ConnectingLane_1[2];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _mapem_ts_ConnectingLane_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_Connection.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_Connection.h
new file mode 100644
index 000000000..cd259023e
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_Connection.h
@@ -0,0 +1,53 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "DSRC"
+ * found in "/input/ISO-TS-19091-addgrp-C-2018-patched.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_Connection_H_
+#define _mapem_ts_Connection_H_
+
+
+#include
+
+/* Including external dependencies */
+#include "etsi_its_mapem_ts_coding/mapem_ts_ConnectingLane.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_SignalGroupID.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_RestrictionClassID.h"
+#include "etsi_its_mapem_ts_coding/mapem_ts_LaneConnectionID.h"
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+struct mapem_ts_IntersectionReferenceID;
+
+/* mapem_ts_Connection */
+typedef struct mapem_ts_Connection {
+ mapem_ts_ConnectingLane_t connectingLane;
+ struct mapem_ts_IntersectionReferenceID *remoteIntersection; /* OPTIONAL */
+ mapem_ts_SignalGroupID_t *signalGroup; /* OPTIONAL */
+ mapem_ts_RestrictionClassID_t *userClass; /* OPTIONAL */
+ mapem_ts_LaneConnectionID_t *connectionID; /* OPTIONAL */
+
+ /* Context for parsing across buffer boundaries */
+ asn_struct_ctx_t _asn_ctx;
+} mapem_ts_Connection_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_mapem_ts_Connection;
+extern asn_SEQUENCE_specifics_t asn_SPC_mapem_ts_Connection_specs_1;
+extern asn_TYPE_member_t asn_MBR_mapem_ts_Connection_1[5];
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Referred external types */
+#include "etsi_its_mapem_ts_coding/mapem_ts_IntersectionReferenceID.h"
+
+#endif /* _mapem_ts_Connection_H_ */
+#include
diff --git a/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_ConnectionManeuverAssist-addGrpC.h b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_ConnectionManeuverAssist-addGrpC.h
new file mode 100644
index 000000000..fcf3badaf
--- /dev/null
+++ b/etsi_its_coding/etsi_its_mapem_ts_coding/include/etsi_its_mapem_ts_coding/mapem_ts_ConnectionManeuverAssist-addGrpC.h
@@ -0,0 +1,49 @@
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ * From ASN.1 module "AddGrpC"
+ * found in "/input/ISO-TS-19091-addgrp-C-2018-patched.asn"
+ * `asn1c -fcompound-names -fprefix=mapem_ts_ -no-gen-BER -no-gen-XER -no-gen-JER -no-gen-OER -no-gen-example -gen-UPER`
+ */
+
+#ifndef _mapem_ts_ConnectionManeuverAssist_addGrpC_H_
+#define _mapem_ts_ConnectionManeuverAssist_addGrpC_H_
+
+
+#include