diff --git a/.gitlab-ci.mk b/.gitlab-ci.mk
index b67f882e42c9edfa62aefad929e00e54520b37cf..762b6e862b059ba8317bcb434f34eee7f4a7093a 100644
--- a/.gitlab-ci.mk
+++ b/.gitlab-ci.mk
@@ -1,4 +1,4 @@
-ASN1_SRC := $(wildcard asn/*.asn asn/cam/*.asn asn/cdd/*.asn)
+ASN1_SRC := $(wildcard asn/*.asn asn/cam/*.asn asn/cdd/*.asn asn/vam/VAM-PDU-Descriptions.asn asn/vam/VAM-Temp-Imports.asn)
ASN1_SRC_VALIDATE := \
iso/iso19091_2018.asn \
diff --git a/.gitmodules b/.gitmodules
index 0c4fb143eaf7abc5eee3190f731aa3a138a7d9d0..75fd289a1df0955aa500ee4ae044862fab8e4f7a 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -4,3 +4,6 @@
[submodule "asn/cam"]
path = asn/cam
url = https://forge.etsi.org/rep/ITS/asn1/cam_en302637_2.git
+[submodule "asn/vam"]
+ path = asn/vam
+ url = https://forge.etsi.org/rep/ITS/asn1/vam-ts103300_3.git
diff --git a/asn/CPM_CommonDataTypes.asn b/asn/CPM_CommonDataTypes.asn
index 8b87735cda233504a4fad198485781590698f37d..b562728756024d04cc09a98f7cb699adcaeee533 100644
--- a/asn/CPM_CommonDataTypes.asn
+++ b/asn/CPM_CommonDataTypes.asn
@@ -17,7 +17,15 @@ FROM ITS-Container {itu-t (0) identified-organization (4) etsi (0) itsDomain (5)
Include references from @url https://standards.iso.org/iso/ts/19091/ed-2/en/ISO-TS-19091-addgrp-C-2018.asn
*/
LaneID, NodeOffsetPointXY, Offset-B10, Offset-B11, Offset-B12, Offset-B13, Offset-B14, Offset-B16
-FROM DSRC {iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) version2 (2)};
+FROM DSRC {iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) version2 (2)}
+
+
+/** @brief Include ETSI TS 103 300-3 V2.1.1
+Include references from https://forge.etsi.org/rep/ITS/asn1/vam-ts103300_3/tree/v2.1.1/
+*/
+VruProfileAndSubprofile, ClusterId, ClusterProfiles, ClusterCardinalitySize
+FROM VAM-PDU-Descriptions {itu-t(0) identified-organization(4) etsi(0) itsDomain(5)
+ wg1(1) ts(103300) vam(1) version1(1)};
/** @brief Area Circular
Describes a circular area. The circle is centred about the reference point of the ITS-S or about
@@ -380,8 +388,7 @@ A list of object classes.
ObjectClassDescription ::= SEQUENCE (SIZE(1..8)) OF ObjectClassWithConfidence
/** @brief Object Class with Confidence
-Describes the classification of a detected object. The object can be classified into one of four
-categories: vehicle, person, animal and other. The classification is provided with a
+Describes the classification of a detected object. The classification is provided with a
confidence indication.
*/
ObjectClassWithConfidence ::= SEQUENCE {
@@ -390,16 +397,44 @@ ObjectClassWithConfidence ::= SEQUENCE {
}
/** @brief Object Class
-The class that best describes the detected object. Each class provides optional subclasses.
+The class that best describes the detected object. The object can be classified into one of three
+categories: vehicle, VRU and other. Each class provides optional subclasses.
*/
ObjectClass ::= CHOICE {
- vehicleSubclass VehicleSubclassType,
- personSubclass PersonSubclassType,
- animalSubclass AnimalSubclassType,
- otherSubclass OtherSubclassType,
+ vehicleSubclass VehicleSubclassType,
+ vruSubclass VruSubclassType,
+ otherSubclass OtherSubclassType,
...
}
+/** @brief VRU Subclass Type
+Describes if a detected object is a single VRU or a group of VRUs.
+*/
+VruSubclassType ::= CHOICE {
+ singleVru VruProfileAndSubprofile,
+ vruGroupSubclass VruGroupSubClassType
+}
+
+/** @brief VruGroup Subclass Type
+Describes the composition of a group of VRUs.
+*/
+VruGroupSubClassType ::= SEQUENCE {
+ /** @details groupType
+ Indicates the profiles of the VRUs detected in the group.
+ A group of VRUs may be composed of VRUs of several different profiles.
+ */
+ groupType ClusterProfiles,
+ /** @details groupSize
+ Indicates an estimation of the number of VRUs in the group.
+ */
+ groupSize ClusterCardinalitySize,
+ /** @details clusterID
+ If the group is associated to a VRU cluster, this element indicates the ID of the associated cluster.
+ The ClusterId can only be assigned if a VRU cluster which is transmitting VAMs has been detected.
+ */
+ clusterID ClusterId OPTIONAL
+}
+
/** @brief Offset Point
Describes an offset position in a two- or three-dimensional plane as imported from
CEN ISO/TS 19091. Excludes the node-LatLon DF and regional DF defined therein.
@@ -422,63 +457,30 @@ NodeOffsetPointZ ::= CHOICE {
node-Z6 Offset-B16 --< node is within 327.67m of last node
}
-/** @brief Animal Subclass Type
-Describes the subclass of a detected object for class animal.
-@unit n/a
-*/
-AnimalSubclassType ::= INTEGER {
- unknown (0) --< the kind of animal is not known
-} (0..255)
-
-/** @brief Person Subclass Type
-Describes the subclass of a detected object for class persons. Persons are a subset of the
-vulnerable road users as defined in Section 4.2 of ETSI TR 103 300-2 as well as in the
-classification provided in Annex 1 of Regulation EU 168/2013.
-@unit n/a
-*/
-PersonSubclassType ::= INTEGER {
- unknown (0), --< the vru type for the detected object is unknown
- pedestrian (1), --< the detected object is a pedestrian travelling on foot
- personInWheelchair (2), --< the detected object is a person travelling in a wheelchair
- cyclist (3), --< the detected object is one or multiple persons travelling on
- --< non-motorized unicycles, bicycles, tricycles or quadricycle
- personWithStroller (4), --< the detected object is a person travelling on foot pushing or
- --< pulling a stroller potentially carrying by one or
- --< multiple other persons
- personOnSkates (5), --< the detected object is a person travelling on skates, skateboards
- --< or a small electric or foot operated scooter
- personGroup (6) --< the detected object is a group of persons with similar
- --< movement characteristics
-} (0..255)
-
/** @brief Vehicle Subclass Type
Describes the subclass of a detected object for class vehicle.
@unit n/a
*/
VehicleSubclassType ::= INTEGER {
unknown (0), --< the type of vehicle is unknown
- moped (1), --< the detected object is a light motor vehicle with less than four
- --< wheels as defined in UNECE/TRANS/WP.29/78/Rev.4 class L1, L2
- motorcycle (2), --< the detected object is a light motor vehicle with less than four
- --< wheels as defined in UNECE/TRANS/WP.29/78/Rev.4 class L3, L4, L5, L6, L7
- passengerCar (3), --< the detected object is a small passenger car as defined in
+ passengerCar (1), --< the detected object is a small passenger car as defined in
--< UNECE/TRANS/WP.29/78/Rev.4 class M1
- bus (4), --< the detected object is a large passenger vehicle as defined
+ bus (2), --< the detected object is a large passenger vehicle as defined
--< in UNECE/TRANS/WP.29/78/Rev.4 class M2, M3
- lightTruck (5), --< the detected object is a light goods vehicle as defined
+ lightTruck (3), --< the detected object is a light goods vehicle as defined
--< in UNECE/TRANS/WP.29/78/Rev.4 class N1
- heavyTruck (6), --< the detected object is a heavy goods vehicle as defined
+ heavyTruck (4), --< the detected object is a heavy goods vehicle as defined
--< in UNECE/TRANS/WP.29/78/Rev.4 class N2, N3
- trailer (7), --< the detected object is an unpowered vehicle that is intended
+ trailer (5), --< the detected object is an unpowered vehicle that is intended
--< to be towed by a powered vehicle as defined in
--< UNECE/TRANS/WP.29/78/Rev.4 class O
- specialVehicles (8), --< the detected object is a vehicle which has a special purpose
+ specialVehicles (6), --< the detected object is a vehicle which has a special purpose
--< other than the above (e.g. moving road works vehicle)
- tram (9), --< the detected object is a vehicle running on tracks along
+ tram (7), --< the detected object is a vehicle running on tracks along
--< public streets
- emergencyVehicle (10), --< the detected object is a vehicle used in an emergency situation
+ emergencyVehicle (8), --< the detected object is a vehicle used in an emergency situation
--< such as an ambulance, police car or fire engine
- agricultural (11) --< the detected object is a vehicle used for agricultural purposes
+ agricultural (9) --< the detected object is a vehicle used for agricultural purposes
} (0..255)
/** @brief Other Subclass Type
diff --git a/asn/vam b/asn/vam
new file mode 160000
index 0000000000000000000000000000000000000000..aa7e1dfaf471fa9f464baa26f525f54866e0acd2
--- /dev/null
+++ b/asn/vam
@@ -0,0 +1 @@
+Subproject commit aa7e1dfaf471fa9f464baa26f525f54866e0acd2
diff --git a/docs/CPM-CommonDataTypes-Descriptions.md b/docs/CPM-CommonDataTypes-Descriptions.md
index 794f15ea1043096736a7aa616aadee3c8872d446..54fc643018fc55cb1651ea137d04ddcbea60103b 100644
--- a/docs/CPM-CommonDataTypes-Descriptions.md
+++ b/docs/CPM-CommonDataTypes-Descriptions.md
@@ -10,6 +10,10 @@
Include ISO 19091
Include references from https://standards.iso.org/iso/ts/19091/ed-2/en/ISO-TS-19091-addgrp-C-2018.asn
+ * **[VAM-PDU-Descriptions](VAM-PDU-Descriptions.md)** *{itu-t(0) identified-organization(4) etsi(0) itsDomain(5) wg1(1) ts(103300) vam(1) version1(1)}*
+ Include ETSI TS 103 300-3 V2.1.1
+ Include references from https://forge.etsi.org/rep/ITS/asn1/vam-ts103300_3/tree/v2.1.1/
+
## Data Elements:
### Area Circular
@@ -542,8 +546,7 @@ ObjectClassDescription ::= SEQUENCE (SIZE(1..8)) OF ObjectClassWithConfidence
### Object Class with Confidence
-Describes the classification of a detected object. The object can be classified into one of four
-categories: vehicle, person, animal and other. The classification is provided with a
+Describes the classification of a detected object. The classification is provided with a
confidence indication.
@@ -559,24 +562,66 @@ ObjectClassWithConfidence ::= SEQUENCE {
### Object Class
-The class that best describes the detected object. Each class provides optional subclasses.
+The class that best describes the detected object. The object can be classified into one of three
+categories: vehicle, VRU and other. Each class provides optional subclasses.
Fields:
* vehicleSubclass [**VehicleSubclassType**](#VehicleSubclassType)
-* personSubclass [**PersonSubclassType**](#PersonSubclassType)
-* animalSubclass [**AnimalSubclassType**](#AnimalSubclassType)
+* vruSubclass [**VruSubclassType**](#VruSubclassType)
* otherSubclass [**OtherSubclassType**](#OtherSubclassType)
```asn1
ObjectClass ::= CHOICE {
- vehicleSubclass VehicleSubclassType,
- personSubclass PersonSubclassType,
- animalSubclass AnimalSubclassType,
- otherSubclass OtherSubclassType,
+ vehicleSubclass VehicleSubclassType,
+ vruSubclass VruSubclassType,
+ otherSubclass OtherSubclassType,
...
}
```
+### VRU Subclass Type
+
+Describes if a detected object is a single VRU or a group of VRUs.
+
+
+Fields:
+* singleVru [**VruProfileAndSubprofile**](VAM-PDU-Descriptions.md#VruProfileAndSubprofile)
+* vruGroupSubclass [**VruGroupSubClassType**](#VruGroupSubClassType)
+```asn1
+VruSubclassType ::= CHOICE {
+ singleVru VruProfileAndSubprofile,
+ vruGroupSubclass VruGroupSubClassType
+}
+```
+
+### VruGroup Subclass Type
+
+Describes the composition of a group of VRUs.
+
+
+Fields:
+* groupType [**ClusterProfiles**](VAM-PDU-Descriptions.md#ClusterProfiles)
+
+ Indicates the profiles of the VRUs detected in the group.
+ A group of VRUs may be composed of VRUs of several different profiles.
+
+* groupSize [**ClusterCardinalitySize**](VAM-PDU-Descriptions.md#ClusterCardinalitySize)
+
+ Indicates an estimation of the number of VRUs in the group.
+
+* clusterID [**ClusterId**](VAM-PDU-Descriptions.md#ClusterId) OPTIONAL
+
+ If the group is associated to a VRU cluster, this element indicates the ID of the associated cluster.
+ The ClusterId can only be assigned if a VRU cluster which is transmitting VAMs has been detected.
+
+```asn1
+VruGroupSubClassType ::= SEQUENCE {
+ groupType ClusterProfiles,
+ groupSize ClusterCardinalitySize,
+ clusterID ClusterId OPTIONAL
+}
+```
+
### Offset Point
Describes an offset position in a two- or three-dimensional plane as imported from
@@ -623,63 +668,6 @@ NodeOffsetPointZ ::= CHOICE {
}
```
-### Animal Subclass Type
-
-Describes the subclass of a detected object for class animal.
-
-
- **Unit**: _n/a_
-
-Values:
-* **unknown** (0)
-the kind of animal is not known
-```asn1
-AnimalSubclassType ::= INTEGER {
- unknown (0)
-} (0..255)
-```
-
-### Person Subclass Type
-
-Describes the subclass of a detected object for class persons. Persons are a subset of the
-vulnerable road users as defined in Section 4.2 of ETSI TR 103 300-2 as well as in the
-classification provided in Annex 1 of Regulation EU 168/2013.
-
-
- **Unit**: _n/a_
-
-Values:
-* **unknown** (0)
-the vru type for the detected object is unknown
-* **pedestrian** (1)
-the detected object is a pedestrian travelling on foot
-* **personInWheelchair** (2)
-the detected object is a person travelling in a wheelchair
-* **cyclist** (3)
-the detected object is one or multiple persons travelling on
-non-motorized unicycles, bicycles, tricycles or quadricycle
-* **personWithStroller** (4)
-the detected object is a person travelling on foot pushing or
-pulling a stroller potentially carrying by one or
-multiple other persons
-* **personOnSkates** (5)
-the detected object is a person travelling on skates, skateboards
-or a small electric or foot operated scooter
-* **personGroup** (6)
-the detected object is a group of persons with similar
-movement characteristics
-```asn1
-PersonSubclassType ::= INTEGER {
- unknown (0),
- pedestrian (1),
- personInWheelchair (2),
- cyclist (3),
- personWithStroller (4),
- personOnSkates (5),
- personGroup (6)
-} (0..255)
-```
-
### Vehicle Subclass Type
Describes the subclass of a detected object for class vehicle.
@@ -690,53 +678,45 @@ Describes the subclass of a detected object for class vehicle.
Values:
* **unknown** (0)
the type of vehicle is unknown
-* **moped** (1)
-the detected object is a light motor vehicle with less than four
-wheels as defined in UNECE/TRANS/WP.29/78/Rev.4 class L1, L2
-* **motorcycle** (2)
-the detected object is a light motor vehicle with less than four
-wheels as defined in UNECE/TRANS/WP.29/78/Rev.4 class L3, L4, L5, L6, L7
-* **passengerCar** (3)
+* **passengerCar** (1)
the detected object is a small passenger car as defined in
UNECE/TRANS/WP.29/78/Rev.4 class M1
-* **bus** (4)
+* **bus** (2)
the detected object is a large passenger vehicle as defined
in UNECE/TRANS/WP.29/78/Rev.4 class M2, M3
-* **lightTruck** (5)
+* **lightTruck** (3)
the detected object is a light goods vehicle as defined
in UNECE/TRANS/WP.29/78/Rev.4 class N1
-* **heavyTruck** (6)
+* **heavyTruck** (4)
the detected object is a heavy goods vehicle as defined
in UNECE/TRANS/WP.29/78/Rev.4 class N2, N3
-* **trailer** (7)
+* **trailer** (5)
the detected object is an unpowered vehicle that is intended
to be towed by a powered vehicle as defined in
UNECE/TRANS/WP.29/78/Rev.4 class O
-* **specialVehicles** (8)
+* **specialVehicles** (6)
the detected object is a vehicle which has a special purpose
other than the above (e.g. moving road works vehicle)
-* **tram** (9)
+* **tram** (7)
the detected object is a vehicle running on tracks along
public streets
-* **emergencyVehicle** (10)
+* **emergencyVehicle** (8)
the detected object is a vehicle used in an emergency situation
such as an ambulance, police car or fire engine
-* **agricultural** (11)
+* **agricultural** (9)
the detected object is a vehicle used for agricultural purposes
```asn1
VehicleSubclassType ::= INTEGER {
unknown (0),
- moped (1),
- motorcycle (2),
- passengerCar (3),
- bus (4),
- lightTruck (5),
- heavyTruck (6),
- trailer (7),
- specialVehicles (8),
- tram (9),
- emergencyVehicle (10),
- agricultural (11)
+ passengerCar (1),
+ bus (2),
+ lightTruck (3),
+ heavyTruck (4),
+ trailer (5),
+ specialVehicles (6),
+ tram (7),
+ emergencyVehicle (8),
+ agricultural (9)
} (0..255)
```
diff --git a/docs/VAM-PDU-Descriptions.md b/docs/VAM-PDU-Descriptions.md
new file mode 100644
index 0000000000000000000000000000000000000000..28a33dacc6f951c1382bc26f426dbb81862cb6fe
--- /dev/null
+++ b/docs/VAM-PDU-Descriptions.md
@@ -0,0 +1,536 @@
+# ASN.1 module VAM-PDU-Descriptions
+ OID: _{itu-t(0) identified-organization(4) etsi(0) itsDomain(5) wg1(1) ts(103300) vam(1) version1(1)}_
+
+## Imports:
+ * **[ITS-Container](ITS-Container.md)** *{itu-t(0) identified-organization(4) etsi(0) itsDomain(5) wg1(1) ts(102894) cdd(2) version(2)}*
+
+ * **[CAM-PDU-Descriptions](CAM-PDU-Descriptions.md)** *{itu-t(0) identified-organization(4) etsi(0) itsDomain(5) wg1(1) en(302637) cam(2) version(2)}*
+
+ * **[VAM-Temp-Imports](VAM-Temp-Imports.md)** *{itu-t(0) identified-organization(4) etsi(0) itsDomain(5) wg1(1) ts(103300) temp-imports(255) version1(1)} WITH SUCCESSORS*
+
+ * **[DSRC](DSRC.md)** *{iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) version (2)}*
+
+## Data Elements:
+
+
+```asn1
+VAM ::= SEQUENCE {
+ header ItsPduHeaderVam,
+ vam VruAwareness
+ }
+```
+
+
+
+```asn1
+ItsPduHeaderVam ::= ItsPduHeader(WITH COMPONENTS {
+ ...,
+ messageID(vam)
+ })
+```
+
+
+
+```asn1
+VruAwareness ::= SEQUENCE {
+ generationDeltaTime GenerationDeltaTime,
+ vamParameters VamParameters
+ }
+```
+
+
+
+```asn1
+VamParameters ::= SEQUENCE {
+ basicContainer BasicContainer,
+ vruHighFrequencyContainer VruHighFrequencyContainer OPTIONAL,
+ vruLowFrequencyContainer VruLowFrequencyContainer OPTIONAL,
+ vruClusterInformationContainer VruClusterInformationContainer OPTIONAL,
+ vruClusterOperationContainer VruClusterOperationContainer OPTIONAL,
+ vruMotionPredictionContainer VruMotionPredictionContainer OPTIONAL,
+ ...
+ }
+```
+
+
+
+```asn1
+VruProfile ::= ENUMERATED {
+ unavailable(0), pedestrian(1), cyclist(2), motorcyclist(3), animal(4),
+ max(15)
+ }
+```
+
+
+
+```asn1
+VruHighFrequencyContainer ::= SEQUENCE {
+ heading Heading,
+ speed Speed,
+ longitudinalAcceleration LongitudinalAcceleration,
+ curvature Curvature OPTIONAL,
+ curvatureCalculationMode CurvatureCalculationMode OPTIONAL,
+ yawRate YawRate OPTIONAL,
+ lateralAcceleration LateralAcceleration OPTIONAL,
+ verticalAcceleration VerticalAcceleration OPTIONAL,
+ vruLanePosition VruLanePosition OPTIONAL,
+ environment VruEnvironment OPTIONAL,
+ movementControl VruMovementControl OPTIONAL,
+ orientation VruOrientation OPTIONAL,
+ rollAngle VruRollAngle OPTIONAL,
+ deviceUsage VruDeviceUsage OPTIONAL,
+ ...
+ }
+```
+
+
+
+```asn1
+VruLanePosition ::= CHOICE {
+ offRoadLanePosition OffRoadLanePosition,
+ vehicularLanePosition LanePosition,
+ trafficIslandPosition TrafficIslandPosition,
+ mapPosition MapPosition,
+ ...
+ }
+```
+
+
+
+```asn1
+OffRoadLanePosition ::= ENUMERATED {
+ unavailable(0), sidewalk(1), parkingLane(2), bikeLane(3),
+ max(15)
+ }
+```
+
+
+
+```asn1
+TrafficIslandPosition ::= SEQUENCE {
+ oneSide NonIslandLanePosition,
+ otherSide NonIslandLanePosition,
+ ...
+ }
+```
+
+
+
+```asn1
+NonIslandLanePosition ::= CHOICE {
+ offRoadLanePosition OffRoadLanePosition,
+ vehicularLanePosition LanePosition,
+ mapPosition MapPosition,
+ ...
+ }
+```
+
+
+
+```asn1
+MapPosition ::= SEQUENCE {
+ intersectionId IntersectionReferenceID,
+ lane LaneID
+ }
+```
+
+
+
+```asn1
+VruEnvironment ::= ENUMERATED {
+ unavailable (0), intersectionCrossing(1), zebraCrossing(2), sidewalk (3),
+ onVehicleRoad(4), protectedGeographicArea(5), max (255)
+ }
+```
+
+
+
+```asn1
+VruMovementControl ::= ENUMERATED {
+ unavailable (0), braking(1), hardBraking(2), stopPedaling (3),
+ brakingAndStopPedaling(4), hardBrakingAndStopPedaling (5),
+ noReaction(6), max (255)
+ }
+```
+
+
+
+```asn1
+VruOrientation ::= Heading
+```
+
+
+
+```asn1
+VruRollAngle ::= Heading
+```
+
+
+
+```asn1
+VruDeviceUsage ::= ENUMERATED {
+ unavailable(0), other(1), idle(2), listeningToAudio(3), typing(4),
+ calling(5), playingGames(6), reading(7), viewing(8), max(255)
+ }
+```
+
+
+
+```asn1
+VruLowFrequencyContainer ::= SEQUENCE {
+ profileAndSubprofile VruProfileAndSubprofile OPTIONAL,
+ exteriorLights VruExteriorLights OPTIONAL,
+ sizeClass VruSizeClass OPTIONAL,
+ ...
+ }
+```
+
+
+
+```asn1
+VruProfileAndSubprofile ::= CHOICE {
+ pedestrian VruSubProfilePedestrian,
+ bicyclist VruSubProfileBicyclist,
+ motorcylist VruSubProfileMotorcyclist,
+ animal VruSubProfileAnimal,
+ ...
+ }
+```
+
+
+
+```asn1
+VruSubProfilePedestrian ::= ENUMERATED {
+ unavailable(0), ordinary-pedestrian(1),
+ road-worker(2), first-responder(3),
+ max(15)
+ }
+```
+
+
+
+```asn1
+VruSubProfileBicyclist ::= ENUMERATED {
+ unavailable(0), bicyclist(1), wheelchair-user(2), horse-and-rider(3),
+ rollerskater(4), e-scooter(5), personal-transporter(6),
+ pedelec(7), speed-pedelec(8),
+ max(15)
+ }
+```
+
+
+
+```asn1
+VruSubProfileMotorcyclist ::= ENUMERATED {
+ unavailable(0), moped(1), motorcycle(2), motorcycle-and-sidecar-right(3),
+ motorcycle-and-sidecar-left(4), max(15)
+ }
+```
+
+
+
+```asn1
+VruSubProfileAnimal ::= ENUMERATED {
+ unavailable(0), wild-animal(1), farm-animal(2), service-animal(3), max(15)
+ }
+```
+
+
+
+```asn1
+VruExteriorLights ::= SEQUENCE {
+ vruSpecific VruSpecificExteriorLights,
+ vehicular ExteriorLights
+ }
+```
+
+
+
+```asn1
+VruSpecificExteriorLights ::= BIT STRING {
+ unavailable (0),
+ backFlashLight (1),
+ helmetLight (2),
+ armLight (3),
+ legLight (4),
+ wheelLight (5)
+ } (SIZE(8))
+```
+
+
+
+```asn1
+VruSizeClass ::= ENUMERATED {
+ unavailable (0), low(1), medium(2), high (3), max(15)
+ }
+```
+
+
+
+```asn1
+VruClusterInformationContainer ::= SEQUENCE {
+ clusterId ClusterId,
+ clusterBoundingBoxShape ClusterBoundingBoxShape,
+ clusterCardinalitySize ClusterCardinalitySize,
+ clusterProfiles ClusterProfiles,
+ ...
+ }
+```
+
+
+
+```asn1
+ClusterId ::= INTEGER(0..255)
+```
+
+
+
+```asn1
+ClusterBoundingBoxShape::= CHOICE {
+ clusterRectangle AreaRectangle,
+ clusterCircle AreaCircular,
+ clusterPolygon AreaPolygon,
+ ...
+ }
+```
+
+
+
+```asn1
+ClusterCardinalitySize ::= INTEGER {unavailable(0), onlyLeader(1)} (0..255)
+```
+
+
+
+```asn1
+ClusterProfiles ::= BIT STRING {
+ pedestrian(0),
+ bicyclist(1),
+ motorcyclist(2),
+ animal(3)
+ } (SIZE(4))
+```
+
+
+
+```asn1
+VruClusterOperationContainer ::= SEQUENCE {
+ clusterJoinInfo ClusterJoinInfo OPTIONAL,
+ clusterLeaveInfo ClusterLeaveInfo OPTIONAL,
+ clusterBreakupInfo ClusterBreakupInfo OPTIONAL,
+ clusterIdChangeTimeInfo VruClusterOpTimestamp OPTIONAL,
+ ...
+ }
+```
+
+
+
+```asn1
+VruClusterOpTimestamp ::= INTEGER (1..255)
+```
+
+
+
+```asn1
+ClusterJoinInfo ::= SEQUENCE {
+ clusterId ClusterId,
+ joinTime VruClusterOpTimestamp,
+ ...
+ }
+```
+
+
+
+```asn1
+ClusterLeaveInfo ::= SEQUENCE {
+ clusterId ClusterId,
+ clusterLeaveReason ClusterLeaveReason,
+ ...
+ }
+```
+
+
+
+```asn1
+ClusterBreakupInfo ::= SEQUENCE {
+ clusterBreakupReason ClusterBreakupReason,
+ breakupTime VruClusterOpTimestamp,
+ ...
+ }
+```
+
+
+
+```asn1
+ClusterLeaveReason ::= ENUMERATED {
+ notProvided (0),
+ clusterLeaderLost (1),
+ clusterDisbandedByLeader (2),
+ outOfClusterBoundingBox (3),
+ outOfClusterSpeedRange (4),
+ joiningAnotherCluster (5),
+ cancelledJoin (6),
+ failedJoin (7),
+ safetyCondition (8),
+ max(15)
+ }
+```
+
+
+
+```asn1
+ClusterBreakupReason ::= ENUMERATED {
+ notProvided (0),
+ clusteringPurposeCompleted (1),
+ leaderMovedOutOfClusterBoundingBox (2),
+ joiningAnotherCluster (3),
+ enteringLowRiskAreaBasedOnMaps (4),
+ receptionOfCpmContainingCluster (5),
+ max(15)
+ }
+```
+
+
+
+```asn1
+VruMotionPredictionContainer ::= SEQUENCE {
+ pathHistory PathHistory OPTIONAL,
+ pathPrediction SequenceOfVruPathPoint OPTIONAL,
+ safeDistance SequenceOfVruSafeDistanceIndication OPTIONAL,
+ trajectoryInterceptionIndication SequenceOfTrajectoryInterceptionIndication OPTIONAL,
+ accelerationChangeIndication AccelerationChangeIndication OPTIONAL,
+ headingChangeIndication HeadingChangeIndication OPTIONAL,
+ stabilityChangeIndication StabilityChangeIndication OPTIONAL,
+ ...
+ }
+```
+
+
+
+```asn1
+SequenceOfVruPathPoint ::= SEQUENCE OF VruPathPoint
+```
+
+
+
+```asn1
+VruPathPoint ::= SEQUENCE {
+ pathPosition ReferencePosition,
+ pathDeltaTime PathDeltaTime OPTIONAL
+ }
+```
+
+
+
+```asn1
+SequenceOfVruSafeDistanceIndication ::=
+ SEQUENCE(SIZE(1..8)) OF VruSafeDistanceIndication
+```
+
+
+
+```asn1
+VruSafeDistanceIndication ::= SEQUENCE {
+ subjectStation StationID OPTIONAL,
+ stationSafeDistanceIndication StationSafeDistanceIndication,
+ timeToCollision ActionDeltaTime OPTIONAL,
+ ...
+ }
+```
+
+
+
+```asn1
+StationSafeDistanceIndication ::= BOOLEAN
+```
+
+
+
+```asn1
+SequenceOfTrajectoryInterceptionIndication ::=
+ SEQUENCE (SIZE(1..8)) OF TrajectoryInterceptionIndication
+```
+
+
+
+```asn1
+TrajectoryInterceptionIndication ::= SEQUENCE {
+ subjectStation StationID OPTIONAL,
+ trajectoryInterceptionProbability TrajectoryInterceptionProbability,
+ trajectoryInterceptionConfidence TrajectoryInterceptionConfidence OPTIONAL,
+ ...
+ }
+```
+
+
+
+```asn1
+TrajectoryInterceptionProbability ::= INTEGER { zero(0), twoPercent(1),
+ fourPercent(2), oneHundredPercent(50), unavailable (63) } (0..63)
+```
+
+
+
+```asn1
+TrajectoryInterceptionConfidence ::= INTEGER { lessthan50percent(0),
+ between50and70Percent(1), between70and90Percent(2), above90Percent(3) } (0..3)
+```
+
+
+
+```asn1
+HeadingChangeIndication ::= SEQUENCE {
+ direction LeftOrRight,
+ actionDeltaTime ActionDeltaTime,
+ ...
+ }
+```
+
+
+
+```asn1
+LeftOrRight ::= ENUMERATED { left, right }
+```
+
+
+
+```asn1
+ActionDeltaTime ::= INTEGER {zero(0), hundredMs(1), twoHundredMs(2),
+ unavailable (127) } (0..127)
+```
+
+
+
+```asn1
+AccelerationChangeIndication ::= SEQUENCE {
+ accelOrDecel AccelOrDecel,
+ actionDeltaTime ActionDeltaTime,
+ ...
+ }
+```
+
+
+
+```asn1
+AccelOrDecel ::= ENUMERATED { accelerate, decelerate }
+```
+
+
+
+```asn1
+StabilityChangeIndication ::= SEQUENCE {
+ lossProbability StabilityLossProbability,
+ actionDeltaTime ActionDeltaTime,
+ ...
+ }
+```
+
+
+
+```asn1
+StabilityLossProbability ::= INTEGER { zero(0), twoPercent (1),
+ fourPercent(2), unavailable (63) } (0..63)
+```
+
+
+
diff --git a/docs/VAM-Temp-Imports.md b/docs/VAM-Temp-Imports.md
new file mode 100644
index 0000000000000000000000000000000000000000..65de4698814eac8088070f9dfefdc0ee52225ef1
--- /dev/null
+++ b/docs/VAM-Temp-Imports.md
@@ -0,0 +1,172 @@
+# ASN.1 module VAM-Temp-Imports
+ OID: _{itu-t(0) identified-organization(4) etsi(0) itsDomain(5) wg1(1) ts(103300) temp-imports(255) version1(1)}_
+
+## Imports:
+ * **[ITS-Container](ITS-Container.md)** *{itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (2)}*
+
+ * **[DSRC](DSRC.md)** *{iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) version (2)}*
+
+## Data Elements:
+### BasicContainer
+
+
+
+Fields:
+* stationType [**StationType**](ITS-Container.md#StationType)
+* referencePosition [**ReferencePosition**](ITS-Container.md#ReferencePosition)
+```asn1
+BasicContainer ::= SEQUENCE {
+ stationType StationType,
+ referencePosition ReferencePosition,
+ ...
+}
+```
+
+### ItsPduHeader
+
+Fields:
+* 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), vam(14) } (0..255)
+* stationID [**StationID**](ITS-Container.md#StationID)
+```asn1
+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), vam(14) } (0..255),
+ stationID StationID
+}
+```
+
+### AreaCircular
+
+Fields:
+* nodeCenterPoint [**OffsetPoint**](#OffsetPoint) OPTIONAL
+* radius [**Radius**](#Radius)
+```asn1
+AreaCircular ::= SEQUENCE {
+ nodeCenterPoint OffsetPoint OPTIONAL,
+ radius Radius
+}
+```
+
+### AreaPolygon
+
+Fields:
+* polyPointList [**PolyPointList**](#PolyPointList)
+```asn1
+AreaPolygon ::= SEQUENCE {
+ polyPointList PolyPointList
+}
+```
+
+### AreaRectangle
+
+Fields:
+* nodeCenterPoint [**OffsetPoint**](#OffsetPoint) OPTIONAL
+* semiMajorRangeLength [**SemiRangeLength**](#SemiRangeLength)
+* semiMinorRangeLength [**SemiRangeLength**](#SemiRangeLength)
+* semiMajorRangeOrientation [**WGS84AngleValue**](#WGS84AngleValue)
+* semiHeight [**SemiRangeLength**](#SemiRangeLength) OPTIONAL
+```asn1
+AreaRectangle ::= SEQUENCE {
+ nodeCenterPoint OffsetPoint OPTIONAL,
+ semiMajorRangeLength SemiRangeLength,
+ semiMinorRangeLength SemiRangeLength,
+ semiMajorRangeOrientation WGS84AngleValue,
+ semiHeight SemiRangeLength OPTIONAL
+}
+```
+
+### OffsetPoint
+
+Fields:
+* nodeOffsetPointXY [**NodeOffsetPointXY**](DSRC.md#NodeOffsetPointXY) (WITH COMPONENTS {..., node-LatLon ABSENT, regional ABSENT})
+* nodeOffsetPointZ [**NodeOffsetPointZ**](#NodeOffsetPointZ) OPTIONAL
+```asn1
+OffsetPoint ::= SEQUENCE{
+ nodeOffsetPointXY NodeOffsetPointXY (WITH COMPONENTS {..., node-LatLon ABSENT, regional ABSENT}),
+ nodeOffsetPointZ NodeOffsetPointZ OPTIONAL
+}
+```
+
+### NodeOffsetPointZ
+
+Fields:
+* node-Z1 [**Offset-B10**](DSRC.md#Offset-B10)
+* node-Z2 [**Offset-B11**](DSRC.md#Offset-B11)
+* node-Z3 [**Offset-B12**](DSRC.md#Offset-B12)
+* node-Z4 [**Offset-B13**](DSRC.md#Offset-B13)
+* node-Z5 [**Offset-B14**](DSRC.md#Offset-B14)
+* node-Z6 [**Offset-B16**](DSRC.md#Offset-B16)
+```asn1
+NodeOffsetPointZ ::= CHOICE {
+ node-Z1 Offset-B10,
+ node-Z2 Offset-B11,
+ node-Z3 Offset-B12,
+ node-Z4 Offset-B13,
+ node-Z5 Offset-B14,
+ node-Z6 Offset-B16
+}
+```
+
+### Radius
+
+Values:
+* **zeroPointOneMeter** (1)
+* **oneMeter** (10)
+```asn1
+Radius ::= INTEGER {
+ zeroPointOneMeter (1),
+ oneMeter (10)
+} (0..10000)
+```
+
+### PolyPointList
+
+```asn1
+PolyPointList ::= SEQUENCE (SIZE(3..16, ...)) OF OffsetPoint
+```
+
+### SemiRangeLength
+
+Values:
+* **zeroPointOneMeter** (1)
+* **oneMeter** (10)
+```asn1
+SemiRangeLength ::= INTEGER {
+ zeroPointOneMeter (1),
+ oneMeter (10)
+} (0..10000)
+```
+
+### WGS84AngleValue
+
+Values:
+* **wgs84North** (0)
+* **wgs84East** (900)
+* **wgs84South** (1800)
+* **wgs84West** (2700)
+* **unavailable** (3601)
+```asn1
+WGS84AngleValue ::= INTEGER {
+ wgs84North (0),
+ wgs84East (900),
+ wgs84South (1800),
+ wgs84West (2700),
+ unavailable (3601)
+} (0..3601)
+```
+
+### StationType
+
+```asn1
+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), lightVruVehicle(12), animal(13),
+ roadSideUnit(15)
+}
+(0..255)
+```
+
+
+