aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors
diff options
context:
space:
mode:
authorChristophe GUERBER <christophe.guerber@gmail.com>2018-12-14 22:41:28 +0100
committerAnders Broman <a.broman58@gmail.com>2018-12-18 12:31:48 +0000
commitc7f7b60c6b4cf6a316de8ec84794a44c8ff43d16 (patch)
tree56677a500336cc264943314e1a2d8e1d45e27bfc /epan/dissectors
parentae83101dd5643c3852ca67ffb331cd8dbd20c727 (diff)
ITS facilities message dissector
Dissector for Intelligent Transport System facility messages: - Cooperative Awareness Message (CAM) - Decentralized Environmental Notification Message (DENM) - Infrastructure to Vehicle Information Message (IVIM) - MAP (topology) Extended Message (MAPEM) - Signal Phase And Timing Extended Message (SPATEM) - Signal Request Extended Message (SREM) - Signal request Status Extended Message (SSEM) - Electric Vehicle Charging Spot Notification (EVCSN) - Electric Vehicle - Recharging Spot Reservation (EVRSR) - Tyre Information System (TIS) and Tyre Pressure Gauge (TPG) interoperability Subdissectors: - ITS version if ever the ITS PDU header is changed - Version << 16 | MessageID to register new message dissectors - RegionId << 16 | type to register regional extensions AddGrpC regional additions already provided TAP: - its TAP with ItsPduHeader fields provided Bug: 15148 Change-Id: I4c71d4dfa1d5d63cb57f61a4e1436a60a3482205 Reviewed-on: https://code.wireshark.org/review/31049 Petri-Dish: Anders Broman <a.broman58@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors')
-rw-r--r--epan/dissectors/CMakeLists.txt2
-rw-r--r--epan/dissectors/asn1/CMakeLists.txt1
-rw-r--r--epan/dissectors/asn1/its/CAM.asn132
-rw-r--r--epan/dissectors/asn1/its/CMakeLists.txt46
-rw-r--r--epan/dissectors/asn1/its/DENM.asn109
-rw-r--r--epan/dissectors/asn1/its/ETSI_TS_103301.asn146
-rw-r--r--epan/dissectors/asn1/its/EV-RSR-PDU-Descriptions.asn157
-rw-r--r--epan/dissectors/asn1/its/EVCSN-PDU-Descriptions.asn103
-rw-r--r--epan/dissectors/asn1/its/ISO_TS_14816.asn28
-rw-r--r--epan/dissectors/asn1/its/ISO_TS_14906_Application.asn140
-rw-r--r--epan/dissectors/asn1/its/ISO_TS_17419.asn44
-rw-r--r--epan/dissectors/asn1/its/ISO_TS_19091.asn2078
-rw-r--r--epan/dissectors/asn1/its/ISO_TS_19321.asn621
-rw-r--r--epan/dissectors/asn1/its/ISO_TS_24534-3.asn85
-rw-r--r--epan/dissectors/asn1/its/ITS-Container.asn511
-rw-r--r--epan/dissectors/asn1/its/TIS_TPG_Transactions_Descriptions.asn348
-rw-r--r--epan/dissectors/asn1/its/its.cnf1183
-rw-r--r--epan/dissectors/asn1/its/packet-its-template.c447
-rw-r--r--epan/dissectors/asn1/its/packet-its-template.h57
-rw-r--r--epan/dissectors/packet-its.c17743
-rw-r--r--epan/dissectors/packet-its.h246
21 files changed, 24227 insertions, 0 deletions
diff --git a/epan/dissectors/CMakeLists.txt b/epan/dissectors/CMakeLists.txt
index 06590032ba..bce4d27062 100644
--- a/epan/dissectors/CMakeLists.txt
+++ b/epan/dissectors/CMakeLists.txt
@@ -118,6 +118,7 @@ set(CLEAN_ASN1_DISSECTOR_SRC
${CMAKE_CURRENT_SOURCE_DIR}/packet-ilp.c
${CMAKE_CURRENT_SOURCE_DIR}/packet-inap.c
${CMAKE_CURRENT_SOURCE_DIR}/packet-isdn-sup.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/packet-its.c
${CMAKE_CURRENT_SOURCE_DIR}/packet-kerberos.c
${CMAKE_CURRENT_SOURCE_DIR}/packet-lcsap.c
${CMAKE_CURRENT_SOURCE_DIR}/packet-ldap.c
@@ -404,6 +405,7 @@ set(DISSECTOR_PUBLIC_HEADERS
packet-isis-clv.h
packet-isl.h
packet-isup.h
+ packet-its.h
packet-iwarp-ddp-rdmap.h
packet-juniper.h
packet-jxta.h
diff --git a/epan/dissectors/asn1/CMakeLists.txt b/epan/dissectors/asn1/CMakeLists.txt
index c891dcc31c..05f6a362b0 100644
--- a/epan/dissectors/asn1/CMakeLists.txt
+++ b/epan/dissectors/asn1/CMakeLists.txt
@@ -58,6 +58,7 @@ set(ASN1_SRC_DIRS
ilp
inap
isdn-sup
+ its
kerberos
lcsap
ldap
diff --git a/epan/dissectors/asn1/its/CAM.asn b/epan/dissectors/asn1/its/CAM.asn
new file mode 100644
index 0000000000..314f2e4170
--- /dev/null
+++ b/epan/dissectors/asn1/its/CAM.asn
@@ -0,0 +1,132 @@
+CAM-PDU-Descriptions {
+itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) en (302637) cam (2) version (1)
+}
+
+DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+ItsPduHeader, CauseCode, ReferencePosition, AccelerationControl, Curvature, CurvatureCalculationMode, Heading, LanePosition, EmergencyPriority, EmbarkationStatus, Speed, DriveDirection, LongitudinalAcceleration, LateralAcceleration, VerticalAcceleration, StationType, ExteriorLights, DangerousGoodsBasic, SpecialTransportType, LightBarSirenInUse, VehicleRole, VehicleLength, VehicleWidth, PathHistory, RoadworksSubCauseCode, ClosedLanes, TrafficRule, SpeedLimit, SteeringWheelAngle, PerformanceClass, YawRate, ProtectedCommunicationZone, PtActivation, Latitude, Longitude, ProtectedCommunicationZonesRSU, CenDsrcTollingZone FROM ITS-Container {
+itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (1)
+};
+
+
+-- The root data frame for cooperative awareness messages
+
+CAM ::= SEQUENCE {
+ header ItsPduHeader,
+ cam CoopAwareness
+}
+
+CoopAwareness ::= SEQUENCE {
+ generationDeltaTime GenerationDeltaTime,
+ camParameters CamParameters
+}
+
+CamParameters ::= SEQUENCE {
+ basicContainer BasicContainer,
+ highFrequencyContainer HighFrequencyContainer,
+ lowFrequencyContainer LowFrequencyContainer OPTIONAL,
+ specialVehicleContainer SpecialVehicleContainer OPTIONAL,
+ ...
+}
+
+HighFrequencyContainer ::= CHOICE {
+ basicVehicleContainerHighFrequency BasicVehicleContainerHighFrequency,
+ rsuContainerHighFrequency RSUContainerHighFrequency,
+ ...
+}
+
+ LowFrequencyContainer ::= CHOICE {
+ basicVehicleContainerLowFrequency BasicVehicleContainerLowFrequency,
+ ...
+}
+
+SpecialVehicleContainer ::= CHOICE {
+ publicTransportContainer PublicTransportContainer,
+ specialTransportContainer SpecialTransportContainer,
+ dangerousGoodsContainer DangerousGoodsContainer,
+ roadWorksContainerBasic RoadWorksContainerBasic,
+ rescueContainer RescueContainer,
+ emergencyContainer EmergencyContainer,
+ safetyCarContainer SafetyCarContainer,
+ ...
+}
+
+BasicContainer ::= SEQUENCE {
+ stationType StationType,
+ referencePosition ReferencePosition,
+ ...
+}
+
+BasicVehicleContainerHighFrequency ::= SEQUENCE {
+ heading Heading,
+ speed Speed,
+ driveDirection DriveDirection,
+ vehicleLength VehicleLength,
+ vehicleWidth VehicleWidth,
+ longitudinalAcceleration LongitudinalAcceleration,
+ curvature Curvature,
+ curvatureCalculationMode CurvatureCalculationMode,
+ yawRate YawRate,
+ accelerationControl AccelerationControl OPTIONAL,
+ lanePosition LanePosition OPTIONAL,
+ steeringWheelAngle SteeringWheelAngle OPTIONAL,
+ lateralAcceleration LateralAcceleration OPTIONAL,
+ verticalAcceleration VerticalAcceleration OPTIONAL,
+ performanceClass PerformanceClass OPTIONAL,
+ cenDsrcTollingZone CenDsrcTollingZone OPTIONAL
+}
+
+BasicVehicleContainerLowFrequency ::= SEQUENCE {
+ vehicleRole VehicleRole,
+ exteriorLights ExteriorLights,
+ pathHistory PathHistory
+}
+
+PublicTransportContainer ::= SEQUENCE {
+ embarkationStatus EmbarkationStatus,
+ ptActivation PtActivation OPTIONAL
+}
+
+SpecialTransportContainer ::= SEQUENCE {
+ specialTransportType SpecialTransportType,
+ lightBarSirenInUse LightBarSirenInUse
+}
+
+ DangerousGoodsContainer ::= SEQUENCE {
+ dangerousGoodsBasic DangerousGoodsBasic
+ }
+
+ RoadWorksContainerBasic ::= SEQUENCE {
+ roadworksSubCauseCode RoadworksSubCauseCode OPTIONAL,
+ lightBarSirenInUse LightBarSirenInUse,
+ closedLanes ClosedLanes OPTIONAL
+ }
+
+RescueContainer ::= SEQUENCE {
+ lightBarSirenInUse LightBarSirenInUse
+}
+
+EmergencyContainer ::= SEQUENCE {
+ lightBarSirenInUse LightBarSirenInUse,
+ incidentIndication CauseCode OPTIONAL,
+ emergencyPriority EmergencyPriority OPTIONAL
+}
+
+SafetyCarContainer ::= SEQUENCE {
+ lightBarSirenInUse LightBarSirenInUse,
+ incidentIndication CauseCode OPTIONAL,
+ trafficRule TrafficRule OPTIONAL,
+ speedLimit SpeedLimit OPTIONAL
+}
+
+RSUContainerHighFrequency ::= SEQUENCE {
+ protectedCommunicationZonesRSU ProtectedCommunicationZonesRSU OPTIONAL,
+ ...
+}
+
+GenerationDeltaTime ::= INTEGER { oneMilliSec(1) } (0..65535)
+
+END
diff --git a/epan/dissectors/asn1/its/CMakeLists.txt b/epan/dissectors/asn1/its/CMakeLists.txt
new file mode 100644
index 0000000000..ce36448a0d
--- /dev/null
+++ b/epan/dissectors/asn1/its/CMakeLists.txt
@@ -0,0 +1,46 @@
+# CMakeLists.txt
+#
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+
+set( PROTOCOL_NAME its )
+
+set( PROTO_OPT -o its )
+
+set( EXT_ASN_FILE_LIST
+)
+
+set( ASN_FILE_LIST
+ ITS-Container.asn
+ ISO_TS_14816.asn
+ ISO_TS_24534-3.asn
+ ISO_TS_17419.asn
+ ISO_TS_14906_Application.asn
+ ISO_TS_19321.asn
+ ISO_TS_19091.asn
+ ETSI_TS_103301.asn
+ CAM.asn
+ DENM.asn
+ TIS_TPG_Transactions_Descriptions.asn
+ EVCSN-PDU-Descriptions.asn
+ EV-RSR-PDU-Descriptions.asn
+)
+
+set( EXTRA_DIST
+ ${ASN_FILE_LIST}
+ packet-${PROTOCOL_NAME}-template.c
+ ${PROTOCOL_NAME}.cnf
+)
+
+set( SRC_FILES
+ ${EXTRA_DIST}
+ ${EXT_ASN_FILE_LIST}
+)
+
+set( A2W_FLAGS )
+
+ASN2WRS()
diff --git a/epan/dissectors/asn1/its/DENM.asn b/epan/dissectors/asn1/its/DENM.asn
new file mode 100644
index 0000000000..d979a61d19
--- /dev/null
+++ b/epan/dissectors/asn1/its/DENM.asn
@@ -0,0 +1,109 @@
+DENM-PDU-Descriptions {
+ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) en (302637) denm (1) version (1)
+}
+
+DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+ItsPduHeader, CauseCode, Speed, InformationQuality, ReferencePosition, ClosedLanes, DangerousGoodsExtended, Heading, LanePosition, LightBarSirenInUse, RoadType, HeightLonCarr, PosLonCarr, PosCentMass, PositioningSolutionType, RequestResponseIndication, StationType, SpeedLimit, StationarySince, TimestampIts, WheelBaseVehicle, TurningRadius, PosFrontAx, PositionOfOccupants, Temperature, VehicleMass, VehicleIdentification, EnergyStorageType, ActionID, ItineraryPath, NumberOfOccupants, PositionOfPillars, RelevanceTrafficDirection, RestrictedTypes, Traces, TransmissionInterval, ValidityDuration, RelevanceDistance, EventHistory, TrafficRule, DeltaReferencePosition FROM ITS-Container {
+itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (1)
+};
+
+
+DENM ::= SEQUENCE {
+ header ItsPduHeader,
+ denm DecentralizedEnvironmentalNotificationMessage
+}
+
+DecentralizedEnvironmentalNotificationMessage ::= SEQUENCE {
+ management ManagementContainer,
+ situation SituationContainer OPTIONAL,
+ location LocationContainer OPTIONAL,
+ alacarte AlacarteContainer OPTIONAL
+}
+
+ManagementContainer ::= SEQUENCE {
+ actionID ActionID,
+ detectionTime TimestampIts,
+ referenceTime TimestampIts,
+ termination Termination OPTIONAL,
+ eventPosition ReferencePosition,
+ relevanceDistance RelevanceDistance OPTIONAL,
+ relevanceTrafficDirection RelevanceTrafficDirection OPTIONAL,
+ validityDuration ValidityDuration DEFAULT defaultValidity,
+ transmissionInterval TransmissionInterval OPTIONAL,
+ stationType StationType,
+ ...
+}
+
+SituationContainer ::= SEQUENCE {
+ informationQuality InformationQuality,
+ eventType CauseCode,
+ linkedCause CauseCode OPTIONAL,
+ eventHistory EventHistory OPTIONAL,
+ ...
+}
+
+LocationContainer ::= SEQUENCE {
+ eventSpeed Speed OPTIONAL,
+ eventPositionHeading Heading OPTIONAL,
+ traces Traces,
+ roadType RoadType OPTIONAL,
+ ...
+}
+
+ImpactReductionContainer ::= SEQUENCE {
+ heightLonCarrLeft HeightLonCarr,
+ heightLonCarrRight HeightLonCarr,
+ posLonCarrLeft PosLonCarr,
+ posLonCarrRight PosLonCarr,
+ positionOfPillars PositionOfPillars,
+ posCentMass PosCentMass,
+ wheelBaseVehicle WheelBaseVehicle,
+ turningRadius TurningRadius,
+ posFrontAx PosFrontAx,
+ positionOfOccupants PositionOfOccupants,
+ vehicleMass VehicleMass,
+ requestResponseIndication RequestResponseIndication
+}
+
+RoadWorksContainerExtended ::= SEQUENCE {
+ lightBarSirenInUse LightBarSirenInUse OPTIONAL,
+ closedLanes ClosedLanes OPTIONAL,
+ restriction RestrictedTypes OPTIONAL,
+ speedLimit SpeedLimit OPTIONAL,
+ incidentIndication CauseCode OPTIONAL,
+ recommendedPath ItineraryPath OPTIONAL,
+ startingPointSpeedLimit DeltaReferencePosition OPTIONAL,
+ trafficFlowRule TrafficRule OPTIONAL,
+ referenceDenms ReferenceDenms OPTIONAL
+ }
+
+StationaryVehicleContainer ::= SEQUENCE {
+ stationarySince StationarySince OPTIONAL,
+ stationaryCause CauseCode OPTIONAL,
+ carryingDangerousGoods DangerousGoodsExtended OPTIONAL,
+ numberOfOccupants NumberOfOccupants OPTIONAL,
+ vehicleIdentification VehicleIdentification OPTIONAL,
+ energyStorageType EnergyStorageType OPTIONAL
+}
+
+AlacarteContainer ::= SEQUENCE {
+ lanePosition LanePosition OPTIONAL,
+ impactReduction ImpactReductionContainer OPTIONAL,
+ externalTemperature Temperature OPTIONAL,
+ roadWorks RoadWorksContainerExtended OPTIONAL,
+ positioningSolution PositioningSolutionType OPTIONAL,
+ stationaryVehicle StationaryVehicleContainer OPTIONAL,
+ ...
+}
+
+defaultValidity INTEGER ::= 600
+
+Termination ::= ENUMERATED {isCancellation(0), isNegation (1)}
+
+ReferenceDenms ::= SEQUENCE (SIZE(1..8, ...)) OF ActionID
+
+END
diff --git a/epan/dissectors/asn1/its/ETSI_TS_103301.asn b/epan/dissectors/asn1/its/ETSI_TS_103301.asn
new file mode 100644
index 0000000000..3ea0318732
--- /dev/null
+++ b/epan/dissectors/asn1/its/ETSI_TS_103301.asn
@@ -0,0 +1,146 @@
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-- ETSI TS 103 301
+--
+-- This ASN.1 was generated: 30.08.2016
+--
+-- This document contains the data element needed for the encoding the SPATEM, MAPEM, IVIM, SSEM and SREM message
+-- as defined in ETSI TS 103 301
+--
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+
+-- ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-
+--
+-- module: SPAT-MESSAGE-PDU-Descriptions
+--
+-- This ASN.1 was created: 30.08.2016
+--
+-- ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-
+SPATEM-PDU-Descriptions {
+ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts-103301 (103301) spatem (0) version1 (1)
+}
+
+DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+SPAT FROM DSRC { iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) version (1) }
+ItsPduHeader FROM ITS-Container { itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (1) };
+
+
+SPATEM ::= SEQUENCE {
+ header ItsPduHeader,
+ spat SPAT
+}
+
+END
+
+
+
+-- ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-
+--
+-- module: MAP-MESSAGE-PDU-Descriptions
+--
+-- ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-
+MAPEM-PDU-Descriptions {
+ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts-103301 (103301) mapem (1) version1 (1)
+}
+
+DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+MapData FROM DSRC { iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) version (1) }
+ItsPduHeader FROM ITS-Container { itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (1)};
+
+
+MAPEM ::= SEQUENCE {
+ header ItsPduHeader,
+ map MapData
+}
+
+END
+
+
+
+-- ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-
+--
+-- module: IVI-MESSAGE-PDU-Descriptions
+--
+-- ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-
+IVIM-PDU-Descriptions {
+ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts-103301 (103301) ivim (2) version1 (1)
+}
+
+DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+IviStructure FROM IVI {iso (1) standard (0) ivi (19321) version1 (1)}
+ItsPduHeader FROM ITS-Container { itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (1)};
+
+
+IVIM ::= SEQUENCE {
+ header ItsPduHeader,
+ ivi IviStructure
+}
+
+END
+
+
+
+-- ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-
+--
+-- module: SRM-MESSAGE-PDU-Descriptions
+--
+-- ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-
+SREM-PDU-Descriptions {
+ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts-103301 (103301) srem (3) version1 (1)
+}
+
+DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+SignalRequestMessage FROM DSRC { iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) version (1) }
+ItsPduHeader FROM ITS-Container { itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (1) };
+
+SREM ::= SEQUENCE {
+ header ItsPduHeader,
+ srm SignalRequestMessage
+}
+
+END
+
+
+
+-- ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-
+--
+-- module: SSM-MESSAGE-PDU-Descriptions
+--
+-- ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-
+SSEM-PDU-Descriptions {
+ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts-103301 (103301) ssem (4) version1 (1)
+}
+
+DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+SignalStatusMessage FROM DSRC { iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) version (1) }
+ItsPduHeader FROM ITS-Container { itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (1) };
+
+
+SSEM ::= SEQUENCE {
+ header ItsPduHeader,
+ ssm SignalStatusMessage
+}
+
+END
+
diff --git a/epan/dissectors/asn1/its/EV-RSR-PDU-Descriptions.asn b/epan/dissectors/asn1/its/EV-RSR-PDU-Descriptions.asn
new file mode 100644
index 0000000000..eeb9943c82
--- /dev/null
+++ b/epan/dissectors/asn1/its/EV-RSR-PDU-Descriptions.asn
@@ -0,0 +1,157 @@
+EV-RechargingSpotReservation-PDU-Descriptions {
+ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (101556) ev-rsr (4) version (1)
+}
+
+DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+ ItsPduHeader FROM ITS-Container {
+ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (1)
+};
+
+EV-RSR ::= SEQUENCE {
+ header ItsPduHeader,
+ messageBody EV-RSR-MessageBody
+}
+
+EV-RSR-MessageBody ::= CHOICE {
+ preReservationRequestMessage PreReservationRequestMessage,
+ preReservationResponseMessage PreReservationResponseMessage,
+ reservationRequestMessage ReservationRequestMessage,
+ reservationResponseMessage ReservationResponseMessage,
+ cancellationRequestMessage CancellationRequestMessage,
+ cancellationResponseMessage CancellationResponseMessage,
+ updateRequestMessage UpdateRequestMessage,
+ updateResponseMessage UpdateResponseMessage,
+...
+}
+
+PreReservationRequestMessage ::= SEQUENCE {
+ evse-ID EVSE-ID,
+ arrivalTime TimestampUTC,
+ departureTime TimestampUTC OPTIONAL,
+ rechargingType RechargingType,
+ batteryType BatteryType OPTIONAL,
+ ...
+}
+
+PreReservationResponseMessage ::= SEQUENCE {
+ preReservation-ID PreReservation-ID,
+ availabilityStatus AvailabilityStatus,
+ preReservationExpirationTime TimestampUTC,
+ supportedPaymentTypes SupportedPaymentTypes,
+ ...
+}
+
+ReservationRequestMessage ::= SEQUENCE {
+ currentTime TimestampUTC,
+ preReservation-ID PreReservation-ID,
+ arrivalTime TimestampUTC,
+ departureTime TimestampUTC OPTIONAL,
+ eAmount EAmount,
+ eAmountMin EAmount,
+ paymentType PaymentType,
+ payment-ID Payment-ID,
+ secondPayment-ID Payment-ID OPTIONAL,
+ pairing-ID Pairing-ID OPTIONAL,
+ ...
+}
+
+ReservationResponseMessage ::= SEQUENCE {
+ reservationResponseCode ReservationResponseCode,
+ reservation-ID Reservation-ID OPTIONAL,
+ reservation-Password Reservation-Password OPTIONAL,
+ stationDetails StationDetails OPTIONAL,
+ chargingSpotLabel ChargingSpotLabel OPTIONAL,
+ expirationTime TimestampUTC,
+ freeCancelTimeLimit TimestampUTC OPTIONAL,
+ ...
+}
+
+CancellationRequestMessage ::= SEQUENCE {
+ reservation-ID Reservation-ID,
+ reservation-Password Reservation-Password,
+ currentTime TimestampUTC,
+ ...
+}
+
+CancellationResponseMessage ::= SEQUENCE {
+ reservation-ID Reservation-ID,
+ cancellationResponseCode CancellationResponseCode,
+ ...
+}
+
+UpdateRequestMessage ::= SEQUENCE {
+ reservation-ID Reservation-ID,
+ reservation-Password Reservation-Password,
+ updatedArrivalTime TimestampUTC,
+ updatedDepartureTime TimestampUTC,
+ ...
+}
+
+UpdateResponseMessage ::= SEQUENCE {
+ reservation-ID Reservation-ID,
+ updateResponseCode UpdateResponseCode,
+ chargingSpotLabel ChargingSpotLabel OPTIONAL,
+ ...
+}
+
+
+
+AvailabilityStatus ::= ENUMERATED { available, no-free-capacity }
+
+BatteryType ::= UTF8String (SIZE(1..16))
+
+CancellationResponseCode ::= ENUMERATED { ok, unknown-Reservation-ID, mismatching-Reservation-Password }
+
+ChargingSpotLabel ::= UTF8String (SIZE(1..4))
+
+ContractID ::= UTF8String (SIZE(1..24))
+
+EAmount ::= INTEGER { oneWh(1) } (1..500000)
+
+ChargingPower ::= INTEGER { oneW(1) } (1..200000)
+
+EVSE-ID ::= OCTET STRING (SIZE(1..32))
+
+ExternalIdentificationMeans ::= UTF8String (SIZE(1..24))
+
+Pairing-ID ::= VisibleString (SIZE(1..64))
+
+PaymentType ::= ENUMERATED {contract, externalIdentification}
+
+Payment-ID ::= CHOICE {
+ contractID ContractID,
+ externalIdentificationMeans ExternalIdentificationMeans
+}
+
+RechargingType ::= SEQUENCE {
+ rechargingMode RechargingMode,
+ powerSource PowerSource
+}
+
+RechargingMode ::= INTEGER { mode1(0), mode2(1), mode3(2), mode4(3), quickDrop(8), inductiveChargingWhileStationary(12), inductiveChargingWhileDriving(14) } (0..15)
+
+PowerSource::= INTEGER { notApplicable(0), ac1Phase(1), ac2Phase(2), ac3Phase(3), dcc(4), chaDeMo(5) } (0..7)
+ReservationResponseCode ::= ENUMERATED {ok, invalid-EVSE-ID, payment-type-not-supported, payment-error, authentication-error, insufficient-power-availability }
+
+Reservation-ID ::= VisibleString (SIZE(8))
+
+PreReservation-ID ::= Reservation-ID
+
+Reservation-Password ::= VisibleString (SIZE(8))
+
+
+StationDetails ::= UTF8String (SIZE(1..32))
+
+SupportedPaymentTypes ::= BIT STRING { contract(0), externalIdentification (1) } (SIZE(2))
+
+TimestampUTC ::= INTEGER { utcStartOf2013(0), oneSecondAfterUTCStartOf2013(1) }
+
+UpdateResponseCode ::= ENUMERATED { ok, unknown-Reservation-ID, mismatching-Reservation-Password, invalid-Arrival-Time, invalid-Departure-Time }
+
+StatusResponseCode ::= ENUMERATED { charging-Spot-Occupied, charging-Spot-Unoccupied, charging-Ongoing, reservation-Limit-Exceeded, reservation-Cancelled, unknown-Reservation-ID, expired-Reservation-ID }
+
+END
diff --git a/epan/dissectors/asn1/its/EVCSN-PDU-Descriptions.asn b/epan/dissectors/asn1/its/EVCSN-PDU-Descriptions.asn
new file mode 100644
index 0000000000..8bcc3d340e
--- /dev/null
+++ b/epan/dissectors/asn1/its/EVCSN-PDU-Descriptions.asn
@@ -0,0 +1,103 @@
+-- Point of Interest (POI) notification for charging spot
+-- for electric vehicle
+-- EVCSN Message definition
+-- ASN.1 Start Definition
+
+EVCSN-PDU-Descriptions {
+itu-t (0) identified-organization (4) etsi (0) itsDomain (5)
+wg1 (1) ts (101556) evcsn (1) version (1)
+}
+
+DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+ ItsPduHeader,
+ StationID,
+ TimestampIts, -- CORRECTION
+ DigitalMap, -- PATCH
+ ReferencePosition
+FROM ITS-Container {
+ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102637) cc (0) version (2)
+};
+
+-- Root Message PDU: EvcsnPdu
+
+EvcsnPdu ::= SEQUENCE {
+ header ItsPduHeader,
+ evcsn EVChargingSpotNotificationPOIMessage
+}
+
+EVChargingSpotNotificationPOIMessage ::= SEQUENCE {
+ poiHeader ItsPOIHeader, -- Specific POI Message Header
+ evcsnData ItsEVCSNData -- Electric Vehicle Charging Spot Data Elements
+}
+
+ItsPOIHeader ::= SEQUENCE {
+ poiType POIType, -- set to "EV charging station POI ID = 1"
+ timeStamp TimestampIts, -- CORRECTION
+ relayCapable BOOLEAN
+}
+
+
+ItsEVCSNData ::= SEQUENCE {
+ totalNumberOfStations NumberStations,
+ chargingStationsData SEQUENCE (SIZE(1..256)) OF ItsChargingStationData
+}
+
+ItsChargingStationData ::= SEQUENCE {
+ chargingStationID StationID,
+ utilityDistributorId UTF8String (SIZE(1..32)) OPTIONAL,
+ providerID UTF8String (SIZE(1..32)) OPTIONAL,
+ chargingStationLocation ReferencePosition,
+ address UTF8String OPTIONAL,
+ phoneNumber NumericString (SIZE(1..16)) OPTIONAL,
+ accessibility UTF8String (SIZE(1..32)),
+ digitalMap DigitalMap OPTIONAL,
+ openingDaysHours UTF8String,
+ pricing UTF8String,
+ bookingContactInfo UTF8String OPTIONAL,
+ payment UTF8String OPTIONAL,
+ chargingSpotsAvailable ItsChargingSpots,
+ ...
+}
+
+
+ItsChargingSpots ::= SEQUENCE (SIZE(1..16)) OF ItsChargingSpotDataElements
+
+
+ItsChargingSpotDataElements ::= SEQUENCE {
+ type ChargingSpotType,
+ evEquipmentID UTF8String OPTIONAL,
+ typeOfReceptacle TypeOfReceptacle,
+ energyAvailability UTF8String,
+ parkingPlacesData ParkingPlacesData OPTIONAL
+}
+
+-- DigitalMap ::= SEQUENCE (SIZE(1..256)) OF ReferencePosition PATCH
+
+ChargingSpotType ::= BIT STRING {
+ standardChargeMode1(0),
+ standardChargeMode2(1),
+ standardOrFastChargeMode3(2),
+ fastChargeWithExternalCharger(3),
+ quickDrop(8),
+ inductiveChargeWhileStationary(12),
+ inductiveChargeWhileDriving(14)
+}
+
+TypeOfReceptacle ::= BIT STRING
+
+ParkingPlacesData ::= SEQUENCE (SIZE(1..4)) OF SpotAvailability
+
+SpotAvailability ::= SEQUENCE {
+ maxWaitingTimeMinutes INTEGER (0..1400), -- 0 if available or max waiting
+ -- time (minutes)
+ blocking BOOLEAN -- true if the spot can be blocked
+}
+
+POIType ::= INTEGER(0..65535)
+NumberStations ::= INTEGER(1..256)
+
+END
diff --git a/epan/dissectors/asn1/its/ISO_TS_14816.asn b/epan/dissectors/asn1/its/ISO_TS_14816.asn
new file mode 100644
index 0000000000..9159fc4fb6
--- /dev/null
+++ b/epan/dissectors/asn1/its/ISO_TS_14816.asn
@@ -0,0 +1,28 @@
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-- ISO TS 14816
+--
+-- 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(2015)
+--
+-- Published version location:
+-- http://standards.iso.org/iso/14816/
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+AVIAEINumberingAndDataStructures {iso(1) standard(0) iso14816(14816) asnm1(1) version1(1)}
+
+DEFINITIONS AUTOMATIC TAGS::= BEGIN
+
+CS5::= SEQUENCE {
+ vin VisibleString, -- 17 characters VIN
+ fill BIT STRING (SIZE(9)) -- set to '000000000'
+}
+
+
+
+CountryCode::= BIT STRING(SIZE(10))
+
+IssuerIdentifier::= INTEGER(0 .. 16383)
+
+END
diff --git a/epan/dissectors/asn1/its/ISO_TS_14906_Application.asn b/epan/dissectors/asn1/its/ISO_TS_14906_Application.asn
new file mode 100644
index 0000000000..49110dbcaf
--- /dev/null
+++ b/epan/dissectors/asn1/its/ISO_TS_14906_Application.asn
@@ -0,0 +1,140 @@
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-- ISO TS 14906 Application
+--
+-- 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(2015)
+--
+-- Published version location:
+-- http://standards.iso.org/iso/14906
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+EfcDsrcApplication { iso(1) standard(0) 14906 application(0) version5(5) }
+
+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
+FROM EfcDsrcGeneric {iso(1) standard(0) 14906 generic(1) version5(5)};
+-- NOTE: The following are the definitions of the action and response
+-- parameters
+
+AxleWeightLimits ::= SEQUENCE {
+ maxLadenweightOnAxle1 Int2,
+ maxLadenweightOnAxle2 Int2,
+ maxLadenweightOnAxle3 Int2,
+ maxLadenweightOnAxle4 Int2,
+ maxLadenweightOnAxle5 Int2
+}
+
+DieselEmissionValues::= SEQUENCE {
+ particulate SEQUENCE {
+ unitType UnitType,
+ value INTEGER (0..32767)
+ },
+ absorptionCoeff Int2
+}
+
+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-Clases 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
+
+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)
+
+ExhaustEmissionValues ::= SEQUENCE {
+ unitType UnitType,
+ emissionCO INTEGER (0..32767),
+ emissionHC Int2,
+ emissionNOX Int2,
+ emissionHCNOX Int2
+}
+
+
+Int1 ::= INTEGER(0..255)
+
+Int2 ::= INTEGER(0..65535)
+
+PassengerCapacity ::= SEQUENCE{
+ numberOfSeats Int1,
+ numberOfStandingPlaces Int1
+}
+
+Provider ::= SEQUENCE {
+ countryCode CountryCode,
+ providerIdentifier IssuerIdentifier
+}
+
+SoundLevel ::= SEQUENCE{
+ soundstationary Int1,
+ sounddriveby Int1
+}
+
+UnitType::= ENUMERATED {
+ mg-km (0),
+ mg-kWh (1)
+}
+
+VehicleDimensions ::= SEQUENCE {
+ vehicleLengthOverall Int1,
+ vehicleHeigthOverall Int1,
+ vehicleWidthOverall Int1
+}
+
+VehicleWeightLimits ::= SEQUENCE {
+ vehicleMaxLadenWeight Int2,
+ vehicleTrainMaximumWeight Int2,
+ vehicleWeightUnladen Int2
+}
+
+END
diff --git a/epan/dissectors/asn1/its/ISO_TS_17419.asn b/epan/dissectors/asn1/its/ISO_TS_17419.asn
new file mode 100644
index 0000000000..e705e21e41
--- /dev/null
+++ b/epan/dissectors/asn1/its/ISO_TS_17419.asn
@@ -0,0 +1,44 @@
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-- ISO TS 17419
+--
+-- 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(2015)
+--
+-- Published version location:
+-- http://standards.iso.org/iso/ts/17419/
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+CITSapplMgmtIDs {iso(1) standard(0) cits-applMgmt (17419) ids (1) version1 (1)}
+
+DEFINITIONS AUTOMATIC TAGS::=BEGIN
+
+IMPORTS
+
+;
+
+-- End of IMPORTS
+
+-- Types
+
+-- Variable length data types
+
+VarLengthNumber::=CHOICE{
+ content [0] INTEGER(0..127), -- one octet length
+ extension [1] Ext1
+ }
+
+Ext1::=CHOICE{
+ content [0] INTEGER(128..16511), -- two octets length
+ extension [1] Ext2
+}
+
+Ext2::=CHOICE{
+ content [0] INTEGER(16512..2113663), -- three octets length
+ extension [1] Ext3
+ }
+
+Ext3::=INTEGER(2113664..270549119,...) -- four and more octets length
+
+END
diff --git a/epan/dissectors/asn1/its/ISO_TS_19091.asn b/epan/dissectors/asn1/its/ISO_TS_19091.asn
new file mode 100644
index 0000000000..453aa536a5
--- /dev/null
+++ b/epan/dissectors/asn1/its/ISO_TS_19091.asn
@@ -0,0 +1,2078 @@
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-- ISO TS 19091
+--
+-- This ASN.1 was generated: 30.08.2016
+--
+-- This document contains the data element needed for the encoding the SPAT, MapData, SignalRequestMessage, SignalStatusMessage message
+-- as defined in ISO TS 19091 and SAEJ2735
+--
+-- It includes the addendunm extensions for Addgrp-C (e.g. Europe)
+--
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+-- ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-
+--
+-- module: DSRC
+--
+-- ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-
+DSRC { iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) version (1) }
+
+DEFINITIONS AUTOMATIC TAGS::= BEGIN
+
+IMPORTS
+StationID, Longitude, Latitude, SpeedConfidence FROM ITS-Container { itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (1) }
+Reg-SPAT,Reg-SignalRequestMessage, Reg-SignalStatusMessage, Reg-MapData, Reg-AdvisorySpeed, Reg-ComputedLane, Reg-ConnectionManeuverAssist,
+Reg-GenericLane, Reg-IntersectionGeometry, Reg-IntersectionState, Reg-LaneAttributes, Reg-LaneDataAttribute, Reg-MovementEvent, Reg-MovementState,
+Reg-NodeAttributeSetXY, Reg-NodeOffsetPointXY,Reg-Position3D, Reg-RequestorDescription, Reg-RequestorType, Reg-RestrictionUserType, Reg-RoadSegment,
+Reg-SignalControlZone, Reg-SignalRequestPackage, Reg-SignalRequest, Reg-SignalStatusPackage, Reg-SignalStatus FROM REGION { iso (1) standard (0) signalizedIntersection (19091) profilec(2) region (1) version (1)}
+Iso3833VehicleType FROM ElectronicRegistrationIdentificationVehicleDataModule { iso(1) standard(0) iso24534 (24534) vehicleData (1) version (1) };
+
+-- -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
+--
+-- Start of entries from table Messages...
+-- This table typicaly contains message entries.
+-- -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
+--
+
+-- PATCH Moved on top so that definition precedes usage
+MESSAGE-ID-AND-TYPE ::= CLASS {
+ &id DSRCmsgID UNIQUE,
+ &Type
+ } WITH SYNTAX {&Type IDENTIFIED BY &id}
+
+MessageFrame ::= SEQUENCE {
+ messageId MESSAGE-ID-AND-TYPE.&id({MessageTypes}),
+ value MESSAGE-ID-AND-TYPE.&Type({MessageTypes}{@.messageId}),
+ ...
+ }
+
+MessageTypes MESSAGE-ID-AND-TYPE ::= {
+ { MapData IDENTIFIED BY mapData } |
+ { SPAT IDENTIFIED BY signalPhaseAndTimingMessage } |
+ { SignalRequestMessage IDENTIFIED BY signalRequestMessage } |
+ { SignalStatusMessage IDENTIFIED BY signalStatusMessage },
+ ... -- Expansion to be used only by the SAE J2735 DSRC TC
+ }
+
+
+-- Regional extensions support
+REG-EXT-ID-AND-TYPE ::= CLASS {
+ &id RegionId UNIQUE,
+ &Type
+ } WITH SYNTAX {&Type IDENTIFIED BY &id}
+
+RegionalExtension {REG-EXT-ID-AND-TYPE : Set} ::= SEQUENCE {
+ regionId REG-EXT-ID-AND-TYPE.&id( {Set} ),
+ regExtValue REG-EXT-ID-AND-TYPE.&Type( {Set}{@regionId} )
+ }
+
+SPAT ::= SEQUENCE {
+ timeStamp MinuteOfTheYear OPTIONAL,
+ name DescriptiveName OPTIONAL,
+ -- human readable name for this collection
+ -- to be used only in debug mode
+
+ intersections IntersectionStateList,
+ -- sets of SPAT data (one per intersection)
+
+ -- If PrioritizationResponse data is required, it is found
+ -- in the RegionalSPAT entry below
+
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-SPAT}} OPTIONAL,
+ ...
+ }
+
+SignalRequestMessage ::= SEQUENCE {
+ timeStamp MinuteOfTheYear OPTIONAL,
+ second DSecond,
+ sequenceNumber MsgCount OPTIONAL,
+
+ requests SignalRequestList OPTIONAL,
+ -- Request Data for one or more signalized
+ -- intersections that support SRM dialogs
+
+ requestor RequestorDescription,
+ -- Requesting Device and other User Data
+ -- contains vehicle ID (if from a vehicle)
+ -- as well as type data and current position
+ -- and may contain additional transit data
+
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-SignalRequestMessage}} OPTIONAL,
+ ...
+}
+
+SignalStatusMessage ::= SEQUENCE {
+ timeStamp MinuteOfTheYear OPTIONAL,
+ second DSecond,
+ sequenceNumber MsgCount OPTIONAL,
+
+ -- Status Data for one of more signalized intersections
+ status SignalStatusList,
+
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-SignalStatusMessage}} OPTIONAL,
+ ...
+}
+
+MapData ::= SEQUENCE {
+ timeStamp MinuteOfTheYear OPTIONAL,
+ msgIssueRevision MsgCount,
+ layerType LayerType OPTIONAL,
+ layerID LayerID OPTIONAL,
+ intersections IntersectionGeometryList OPTIONAL,
+ -- All Intersection definitions
+ roadSegments RoadSegmentList OPTIONAL,
+ -- All roadway descriptions
+
+ dataParameters DataParameters OPTIONAL,
+ -- Any meta data regarding the map contents
+
+ restrictionList RestrictionClassList OPTIONAL,
+ -- Any restriction ID tables which have
+ -- established for these map entries
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-MapData}} OPTIONAL,
+
+ -- NOTE:
+ -- Other map data will be added here as it is defined
+ -- Examples of the type of content to be added include
+ -- curve warnings, construction routes, etc.
+ ...
+}
+
+
+-- -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
+--
+-- Start of entries from table Data_Frames...
+-- This table typicaly contains data frame entries.
+-- -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
+--
+
+AdvisorySpeed ::= SEQUENCE {
+ type AdvisorySpeedType,
+ -- the type of advisory which this is.
+ speed SpeedAdvice OPTIONAL,
+ -- See Section 11 for converting and translating speed
+ -- expressed in mph into units of m/s
+ -- This element is optional ONLY when superceded
+ -- by the presence of a regional speed element found in
+ -- Reg-AdvisorySpeed entry
+ confidence SpeedConfidence OPTIONAL,
+ -- A confidence value for the above speed
+ distance ZoneLength OPTIONAL,
+ -- Unit = 1 meter,
+ -- The distance indicates the region for which the advised speed
+ -- is recommended, it is specified upstream from the stop bar
+ -- along the connected egressing lane
+ class RestrictionClassID OPTIONAL,
+ -- the vehicle types to which it applies
+ -- when absent, the AdvisorySpeed applies to
+ -- all motor vehicle types
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-AdvisorySpeed}} OPTIONAL,
+ ...
+ }
+
+AdvisorySpeedList ::= SEQUENCE (SIZE(1..16)) OF AdvisorySpeed
+
+ComputedLane ::= SEQUENCE {
+ -- Data needed to created a computed lane
+ referenceLaneId LaneID,
+ -- the lane ID upon which this
+ -- computed lane will be based
+ -- Lane Offset in X and Y direction
+ offsetXaxis CHOICE {
+ small DrivenLineOffsetSm,
+ large DrivenLineOffsetLg
+ },
+ offsetYaxis CHOICE {
+ small DrivenLineOffsetSm,
+ large DrivenLineOffsetLg
+ },
+ -- A path X offset value for translations of the
+ -- path's points when creating translated lanes.
+ -- The values found in the reference lane are
+ -- all offset based on the X and Y values from
+ -- the coordinates of the reference lane's
+ -- initial path point.
+ -- Lane Rotation
+ rotateXY Angle OPTIONAL,
+ -- A path rotation value for the entire lane
+ -- Observe that this rotates the existing orientation
+ -- of the referenced lane, it does not replace it.
+ -- Rotation occurs about the initial path point.
+ -- Lane Path Scale (zooming)
+ scaleXaxis Scale-B12 OPTIONAL,
+ scaleYaxis Scale-B12 OPTIONAL,
+ -- value for translations or zooming of the path's
+ -- points. The values found in the reference lane
+ -- are all expanded or contracted based on the X
+ -- and Y and width values from the coordinates of
+ -- the reference lane's initial path point.
+ -- The Z axis remains untouched.
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-ComputedLane}} OPTIONAL,
+ ...
+ }
+ConnectsToList ::= SEQUENCE (SIZE(1..16)) OF Connection
+
+ConnectingLane ::= SEQUENCE {
+ lane LaneID, -- Index of the connecting lane
+ maneuver AllowedManeuvers OPTIONAL
+ -- The Maneuver between
+ -- the enclosing lane and this lane
+ -- at the stop line to connect them
+ }
+
+
+Connection ::= SEQUENCE {
+ -- The subject lane connecting to this lane is:
+ connectingLane ConnectingLane,
+ -- The index of the connecting lane and also
+ -- the maneuver from the current lane to it
+ remoteIntersection IntersectionReferenceID OPTIONAL,
+ -- This entry is only used when the
+ -- indicated connecting lane belongs
+ -- to another intersection layout. This
+ -- provides a means to create meshes of lanes
+
+ -- SPAT mapping details at the stop line are:
+ signalGroup SignalGroupID OPTIONAL,
+ -- The matching signal group send by
+ -- the SPAT message for this lane/maneuver.
+ -- Shall be present unless the connectingLane
+ -- has no signal group (is un-signalized)
+ userClass RestrictionClassID OPTIONAL,
+ -- The Restriction Class of users this applies to
+ -- The use of some lane/maneuver and SignalGroupID
+ -- pairings are restricted to selected users.
+ -- When absent, the SignalGroupID applies to all
+
+ -- Movement assist details are given by:
+ connectionID LaneConnectionID OPTIONAL
+ -- An optional connection index used to
+ -- relate this lane connection to any dynamic
+ -- clearance data in the SPAT. Note that
+ -- the index may be shared with other
+ -- connections if the clearance data is common
+ }
+
+
+ConnectionManeuverAssist ::= SEQUENCE {
+ connectionID LaneConnectionID,
+ -- the common connectionID used by all lanes to which
+ -- this data applies
+ -- (this value traces to ConnectsTo entries in lanes)
+ -- Expected Clearance Information
+ queueLength ZoneLength OPTIONAL,
+ -- Unit = 1 meter, 0 = no queue
+ -- The distance from the stop line to the back
+ -- edge of the last vehicle in the queue,
+ -- as measured along the lane center line.
+ availableStorageLength ZoneLength OPTIONAL,
+ -- Unit = 1 meter, 0 = no space remains
+ -- Distance (e.g. beginning from the downstream
+ -- stop-line up to a given distance) with a high
+ -- probability for successfully executing the
+ -- connecting maneuver between the two lanes
+ -- during the current cycle.
+ -- Used for enhancing the awareness of vehicles
+ -- to anticipate if they can pass the stop line
+ -- of the lane. Used for optimizing the green wave,
+ -- due to knowledge of vehicles waiting in front
+ -- of a red light (downstream).
+ -- The element nextTime in TimeChangeDetails
+ -- in the containing data frame contains the next
+ -- timemark at which an active phase is expected,
+ -- a form of storage flush interval.
+ waitOnStop WaitOnStopline OPTIONAL,
+ -- If "true", the vehicles on this specific connecting
+ -- maneuver have to stop on the stop-line and not
+ -- to enter the collision area
+ pedBicycleDetect PedestrianBicycleDetect OPTIONAL,
+ -- true if ANY ped or bicycles are detected crossing
+ -- the above lanes. Set to false ONLY if there is a
+ -- high certainty that there are none present,
+ -- otherwise element is not sent.
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-ConnectionManeuverAssist}} OPTIONAL,
+ ...
+ }
+
+DataParameters ::= SEQUENCE {
+ processMethod IA5String(SIZE(1..255)) OPTIONAL,
+ processAgency IA5String(SIZE(1..255)) OPTIONAL,
+ lastCheckedDate IA5String(SIZE(1..255)) OPTIONAL,
+ geoidUsed IA5String(SIZE(1..255)) OPTIONAL,
+ ...
+ }
+
+EnabledLaneList ::= SEQUENCE (SIZE(1..16)) OF LaneID
+ -- The unique ID numbers for each
+ -- lane object which is 'active'
+ -- as part of the dynamic map contents.
+
+GenericLane ::= SEQUENCE {
+ laneID LaneID,
+ -- The unique ID number assigned
+ -- to this lane object
+ name DescriptiveName OPTIONAL,
+ -- often for debug use only
+ -- but at times used to name ped crossings
+ ingressApproach ApproachID OPTIONAL, -- inbound
+ egressApproach ApproachID OPTIONAL, -- outbound
+ -- Approach IDs to which this lane belongs
+ laneAttributes LaneAttributes,
+ -- All Attribute information about
+ -- the basic selected lane type
+ -- Directions of use, Geometric co-sharing
+ -- and Type Specific Attributes
+ -- These Attributes are 'lane - global' that is,
+ -- they are true for the entire length of the lane
+ maneuvers AllowedManeuvers OPTIONAL,
+ -- the permitted maneuvers for this lane
+ nodeList NodeListXY,
+ -- Lane spatial path information as well as
+ -- various Attribute information along the node path
+ -- Attributes found here are more general and may
+ -- come and go over the length of the lane.
+ connectsTo ConnectsToList OPTIONAL,
+ -- a list of other lanes and their signal group IDs
+ -- each connecting lane and its signal group ID
+ -- is given, therefore this element provides the
+ -- information formerly in "signalGroups" in prior
+ -- editions.
+ overlays OverlayLaneList OPTIONAL,
+ -- A list of any lanes which have spatial paths that
+ -- overlay (run on top of, and not simply cross)
+ -- the path of this lane when used
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-GenericLane}} OPTIONAL,
+ ...
+ }
+
+IntersectionAccessPoint ::= CHOICE {
+ lane LaneID,
+ approach ApproachID,
+ connection LaneConnectionID,
+ ...
+ }
+
+IntersectionGeometry ::= SEQUENCE {
+ name DescriptiveName OPTIONAL,
+ -- For debug use only
+ id IntersectionReferenceID,
+ -- A globally unique value set,
+ -- consisting of a regionID and
+ -- intersection ID assignment
+ revision MsgCount,
+
+ -- Required default values about lane descriptions follow
+ refPoint Position3D, -- The reference from which subsequent
+ -- data points are offset until a new
+ -- point is used.
+ laneWidth LaneWidth OPTIONAL,
+ -- Reference width used by all subsequent
+ -- lanes unless a new width is given
+ speedLimits SpeedLimitList OPTIONAL,
+ -- Reference regulatory speed limits
+ -- used by all subsequent
+ -- lanes unless a new speed is given
+ -- See Section 11 for converting and
+ -- translating speed expressed in mph
+ -- into units of m/s
+ -- Complete details regarding each lane type in this intersection
+ laneSet LaneList, -- Data about one or more lanes
+ -- (all lane data is found here)
+
+ -- Data describing how to use and request preemption and
+ -- priority services from this intersection (if supported)
+ -- NOTE Additonal data may be added in the next release of the
+ -- standard at this point to handle this concept
+ preemptPriorityData PreemptPriorityList OPTIONAL,
+ -- data about one or more regional
+ -- preempt or priority zones
+
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-IntersectionGeometry}} OPTIONAL,
+ ...
+ }
+
+IntersectionGeometryList ::= SEQUENCE (SIZE(1..32)) OF IntersectionGeometry
+
+IntersectionReferenceID ::= SEQUENCE {
+ region RoadRegulatorID OPTIONAL,
+ -- a globally unique regional assignment value
+ -- typical assigned to a regional DOT authority
+ -- the value zero shall be used for testing needs
+ id IntersectionID
+ -- a unique mapping to the intersection
+ -- in question within the above region of use
+ }
+
+IntersectionState ::= SEQUENCE {
+ name DescriptiveName OPTIONAL,
+ -- human readable name for intersection
+ -- to be used only in debug mode
+ id IntersectionReferenceID,
+ -- A globally unique value set, consisting of a
+ -- regionID and intersection ID assignment
+ -- provides a unique mapping to the
+ -- intersection MAP in question
+ -- which provides complete location
+ -- and approach/move/lane data
+ revision MsgCount,
+ status IntersectionStatusObject,
+ -- general status of the controller(s)
+ moy MinuteOfTheYear OPTIONAL,
+ -- Minute of current UTC year
+ -- used only with messages to be archived
+ timeStamp DSecond OPTIONAL,
+ -- the mSec point in the current UTC minute that
+ -- this message was constructed
+ enabledLanes EnabledLaneList OPTIONAL,
+ -- a list of lanes where the RevocableLane bit
+ -- has been set which are now active and
+ -- therefore part of the current intersection
+ states MovementList,
+ -- Each Movement is given in turn
+ -- and contains its signal phase state,
+ -- mapping to the lanes it applies to, and
+ -- point in time it will end, and it
+ -- may contain both active and future states
+ maneuverAssistList ManeuverAssistList OPTIONAL,
+ -- Assist data
+
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-IntersectionState}} OPTIONAL,
+ ...
+ }
+
+IntersectionStateList ::= SEQUENCE (SIZE(1..32)) OF IntersectionState
+
+LaneAttributes ::= SEQUENCE {
+ directionalUse LaneDirection, -- directions of lane use
+ sharedWith LaneSharing, -- co-users of the lane path
+ laneType LaneTypeAttributes, -- specific lane type data
+ regional RegionalExtension {{Reg-LaneAttributes}} OPTIONAL
+ }
+
+LaneDataAttribute ::= CHOICE {
+ -- Segment attribute types and the data needed for each
+ pathEndPointAngle DeltaAngle,
+ -- adjusts final point/width slant
+ -- of the lane to align with the stop line
+ laneCrownPointCenter RoadwayCrownAngle,
+ -- sets the canter of the road bed
+ -- from centerline point
+ laneCrownPointLeft RoadwayCrownAngle,
+ -- sets the canter of the road bed
+ -- from left edge
+ laneCrownPointRight RoadwayCrownAngle,
+ -- sets the canter of the road bed
+ -- from right edge
+ laneAngle MergeDivergeNodeAngle,
+ -- the angle or direction of another lane
+ -- this is required to support Japan style
+ -- when a merge point angle is required
+ speedLimits SpeedLimitList,
+ -- Reference regulatory speed limits
+ -- used by all segments
+
+ -- Add others as needed, in regional space
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-LaneDataAttribute}},
+ ...
+ }
+
+LaneDataAttributeList ::= SEQUENCE (SIZE(1..8)) OF LaneDataAttribute
+
+LaneList ::= SEQUENCE (SIZE(1..255)) OF GenericLane
+
+LaneSharing ::= BIT STRING {
+ -- With bits as defined:
+ overlappingLaneDescriptionProvided (0),
+ -- Assert when another lane object is present to describe the
+ -- path of the overlapping shared lane
+ -- this construct is not used for lane objects which simply cross
+ multipleLanesTreatedAsOneLane (1),
+ -- Assert if the lane object path and width details represents
+ -- multiple lanes within it that are not further described
+
+ -- Various modes and type of traffic that may share this lane:
+ otherNonMotorizedTrafficTypes (2), -- horse drawn etc.
+ individualMotorizedVehicleTraffic (3),
+ busVehicleTraffic (4),
+ taxiVehicleTraffic (5),
+ pedestriansTraffic (6),
+ cyclistVehicleTraffic (7),
+ trackedVehicleTraffic (8),
+ pedestrianTraffic (9)
+ } (SIZE (10))
+ -- All zeros would indicate 'not shared' and 'not overlapping'
+
+LaneTypeAttributes ::= CHOICE {
+ vehicle LaneAttributes-Vehicle, -- motor vehicle lanes
+ crosswalk LaneAttributes-Crosswalk, -- pedestrian crosswalks
+ bikeLane LaneAttributes-Bike, -- bike lanes
+ sidewalk LaneAttributes-Sidewalk, -- pedestrian sidewalk paths
+ median LaneAttributes-Barrier, -- medians & channelization
+ striping LaneAttributes-Striping, -- roadway markings
+ trackedVehicle LaneAttributes-TrackedVehicle, -- trains and trolleys
+ parking LaneAttributes-Parking, -- parking and stopping lanes
+ ...
+ }
+
+ManeuverAssistList ::= SEQUENCE (SIZE(1..16)) OF ConnectionManeuverAssist
+
+MovementEventList ::= SEQUENCE (SIZE(1..16)) OF MovementEvent
+
+MovementEvent ::= SEQUENCE {
+ eventState MovementPhaseState,
+ -- Consisting of:
+ -- Phase state (the basic 11 states)
+ -- Directional, protected, or permissive state
+
+ timing TimeChangeDetails OPTIONAL,
+ -- Timing Data in UTC time stamps for event
+ -- includes start and min/max end times of phase
+ -- confidence and estimated next occurrence
+
+ speeds AdvisorySpeedList OPTIONAL,
+ -- various speed advisories for use by
+ -- general and specific types of vehicles
+ -- supporting green-wave and other flow needs
+ -- See Section 11 for converting and translating
+ -- speed expressed in mph into units of m/s
+
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-MovementEvent}} OPTIONAL,
+ ...
+ }
+
+MovementList ::= SEQUENCE (SIZE(1..255)) OF MovementState
+
+MovementState ::= SEQUENCE {
+ movementName DescriptiveName OPTIONAL,
+ -- uniquely defines movement by name
+ -- human readable name for intersection
+ -- to be used only in debug mode
+ signalGroup SignalGroupID,
+ -- the group id is used to map to lists
+ -- of lanes (and their descriptions)
+ -- which this MovementState data applies to
+ -- see comments in the Remarks for usage details
+ state-time-speed MovementEventList,
+ -- Consisting of sets of movement data with:
+ -- a) SignalPhaseState
+ -- b) TimeChangeDetails, and
+ -- c) AdvisorySpeeds (optional )
+ -- Note one or more of the movement events may be for
+ -- a future time and that this allows conveying multiple
+ -- predictive phase and movement timing for various uses
+ -- for the current signal group
+ maneuverAssistList ManeuverAssistList OPTIONAL,
+ -- This information may also be placed in the
+ -- IntersectionState when common information applies to
+ -- different lanes in the same way
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-MovementState}} OPTIONAL,
+ ...
+ }
+
+NodeAttributeSetXY ::= SEQUENCE {
+ localNode NodeAttributeXYList OPTIONAL,
+ -- Attribute states which pertain to this node point
+ disabled SegmentAttributeXYList OPTIONAL,
+ -- Attribute states which are disabled at this node point
+ enabled SegmentAttributeXYList OPTIONAL,
+ -- Attribute states which are enabled at this node point
+ -- and which remain enabled until disabled or the lane ends
+ data LaneDataAttributeList OPTIONAL,
+ -- Attributes which require an additional data values
+ -- some of these are local to the node point, while others
+ -- persist with the provided values until changed
+ -- and this is indicated in each entry
+ dWidth Offset-B10 OPTIONAL,
+ -- A value added to the current lane width
+ -- at this node and from this node onwards, in 1cm steps
+ -- lane width between nodes are a linear taper between pts
+ -- the value of zero shall not be sent here
+ dElevation Offset-B10 OPTIONAL,
+ -- A value added to the current Elevation
+ -- at this node from this node onwards, in 10cm steps
+ -- elevations between nodes are a linear taper between pts
+ -- the value of zero shall not be sent here
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-NodeAttributeSetXY}} OPTIONAL,
+ ...
+ }
+
+NodeAttributeXYList ::= SEQUENCE (SIZE(1..8)) OF NodeAttributeXY
+
+NodeAttributeXY ::= ENUMERATED {
+ -- Various values which pertain only to the current node point
+
+ -- General Items
+ reserved,
+ stopLine, -- point where a mid-path stop line exists
+ -- See also 'do not block' for segments
+
+ -- Path finish details
+ roundedCapStyleA, -- Used to control final path rounded end shape
+ -- with edge of curve at final point in a circle
+ roundedCapStyleB, -- Used to control final path rounded end shape
+ -- with edge of curve extending 50% of width past
+ -- final point in a circle
+
+ -- Topography Points (items with no concept of a distance along the path)
+ mergePoint, -- Japan merge with 1 or more lanes
+ divergePoint, -- Japan diverge with 1 or more lanes
+ downstreamStopLine, -- Japan style downstream intersection
+ -- (a 2nd intersection) stop line
+ downstreamStartNode, -- Japan style downstream intersection
+ -- (a 2nd intersection) start node
+
+ -- Pedestrian Support Attributes
+ closedToTraffic, -- where a pedestrian may NOT go
+ -- to be used during construction events
+ safeIsland, -- a pedestrian safe stopping point
+ -- also called a traffic island
+ -- This usage described a point feature on a path,
+ -- other entries can describe a path
+ curbPresentAtStepOff, -- the sidewalk to street curb is NOT
+ -- angled where it meets the edge of the
+ -- roadway (user must step up/down)
+
+ -- Lane geometry details (see standard for defined shapes)
+ hydrantPresent, -- Or other services access
+ ...
+ }
+
+Node-LLmD-64b ::= SEQUENCE {
+ lon Longitude,
+ lat Latitude
+ }
+
+ Node-XY-20b ::= SEQUENCE {
+ x Offset-B10,
+ y Offset-B10
+ }
+
+Node-XY-22b ::= SEQUENCE {
+ x Offset-B11,
+ y Offset-B11
+ }
+
+
+Node-XY-24b ::= SEQUENCE {
+ x Offset-B12,
+ y Offset-B12
+ }
+
+
+Node-XY-26b ::= SEQUENCE {
+ x Offset-B13,
+ y Offset-B13
+ }
+
+
+Node-XY-28b ::= SEQUENCE {
+ x Offset-B14,
+ y Offset-B14
+ }
+
+
+Node-XY-32b ::= SEQUENCE {
+ x Offset-B16,
+ y Offset-B16
+ }
+
+NodeListXY ::= CHOICE {
+ nodes NodeSetXY,
+ -- a lane made up of two or more
+ -- XY node points and any attributes
+ -- defined in those nodes
+ computed ComputedLane,
+ -- a lane path computed by translating
+ -- the data defined by another lane
+ ...
+ }
+
+NodeOffsetPointXY ::= CHOICE {
+ -- Nodes with X,Y content
+ node-XY1 Node-XY-20b, -- node is within 5.11m of last node
+ node-XY2 Node-XY-22b, -- node is within 10.23m of last node
+ node-XY3 Node-XY-24b, -- node is within 20.47m of last node
+ node-XY4 Node-XY-26b, -- node is within 40.96m of last node
+ node-XY5 Node-XY-28b, -- node is within 81.91m of last node
+ node-XY6 Node-XY-32b, -- node is within 327.67m of last node
+ node-LatLon Node-LLmD-64b, -- node is a full 32b Lat/Lon range
+ regional RegionalExtension {{Reg-NodeOffsetPointXY}}
+ -- node which follows is of a
+ -- regional definition type
+ }
+
+NodeSetXY ::= SEQUENCE (SIZE(2..63)) OF NodeXY
+
+NodeXY ::= SEQUENCE {
+ delta NodeOffsetPointXY,
+ -- A choice of which X,Y offset value to use
+ -- this includes various delta values as well a regional choices
+ attributes NodeAttributeSetXY OPTIONAL,
+ -- Any optional Attributes which are needed
+ -- This includes changes to the current lane width and elevation
+ ...
+}
+
+OverlayLaneList ::= SEQUENCE (SIZE(1..5)) OF LaneID
+ -- The unique ID numbers for any lane object which have
+ -- spatial paths that overlay (run on top of, and not
+ -- simply cross with) the current lane.
+ -- Such as a train path that overlays a motor vehicle
+ -- lane object for a roadway segment.
+
+Position3D ::= SEQUENCE {
+ lat Latitude, -- in 1/10th micro degrees
+ long Longitude, -- in 1/10th micro degrees
+ elevation Elevation OPTIONAL, -- in 10 cm units
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-Position3D}} OPTIONAL,
+ ...
+ }
+
+PreemptPriorityList ::= SEQUENCE (SIZE(1..32)) OF SignalControlZone
+
+RegulatorySpeedLimit ::= SEQUENCE {
+ type SpeedLimitType,
+ -- The type of regulatory speed which follows
+ speed Velocity
+ -- The speed in units of 0.02 m/s
+ -- See Section 11 for converting and translating
+ -- speed expressed in mph into units of m/s
+ }
+
+RequestorDescription ::= SEQUENCE {
+ id VehicleID,
+ -- The ID used in the BSM or CAM of the requestor
+ -- This ID is presumed not to change
+ -- during the exchange
+ type RequestorType OPTIONAL,
+ -- Information regarding all type and class data
+ -- about the requesting vehicle
+ position RequestorPositionVector OPTIONAL,
+ -- The location of the requesting vehicle
+ name DescriptiveName OPTIONAL,
+ -- A human readable name for debugging use
+ -- Support for Transit requests
+ routeName DescriptiveName OPTIONAL,
+ -- A string for transit operations use
+ transitStatus TransitVehicleStatus OPTIONAL,
+ -- current vehicle state (loading, etc.)
+ transitOccupancy TransitVehicleOccupancy OPTIONAL,
+ -- current vehicle occupancy
+ transitSchedule DeltaTime OPTIONAL,
+ -- current vehicle schedule adherence
+
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-RequestorDescription}} OPTIONAL,
+ ...
+ }
+
+RequestorPositionVector ::= SEQUENCE {
+ position Position3D,
+ heading Angle OPTIONAL,
+ speed TransmissionAndSpeed OPTIONAL,
+ ...
+ }
+
+RequestorType ::= SEQUENCE {
+ -- Defines who is requesting
+ role BasicVehicleRole, -- Basic role of this user at this time
+ subrole RequestSubRole OPTIONAL, -- A local list with role based items
+
+ -- Defines what kind of request (a level of importance in the Priority Scheme)
+ request RequestImportanceLevel OPTIONAL, -- A local list with request items
+
+ -- Additional classification details
+ iso3883 Iso3833VehicleType OPTIONAL,
+ hpmsType VehicleType OPTIONAL, -- HPMS classification types
+
+ regional RegionalExtension {{Reg-RequestorType}} OPTIONAL,
+ ...
+ }
+
+RestrictionClassAssignment ::= SEQUENCE {
+ id RestrictionClassID,
+ -- the unique value (within an intersection or local region)
+ -- that is assigned to this group of users
+ users RestrictionUserTypeList
+ -- The list of user types/classes
+ -- to which this restriction ID applies
+ }
+
+RestrictionClassList ::= SEQUENCE (SIZE(1..254)) OF RestrictionClassAssignment
+
+RestrictionUserTypeList ::= SEQUENCE (SIZE(1..16)) OF RestrictionUserType
+
+RestrictionUserType ::= CHOICE {
+ basicType RestrictionAppliesTo,
+ -- a set of the most commonly used types
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-RestrictionUserType}},
+ ...
+ }
+
+RoadLaneSetList ::= SEQUENCE (SIZE(1..255)) OF GenericLane
+
+RoadSegmentReferenceID ::= SEQUENCE {
+ region RoadRegulatorID OPTIONAL,
+ -- a globally unique regional assignment value
+ -- typically assigned to a regional DOT authority
+ -- the value zero shall be used for testing needs
+ id RoadSegmentID
+ -- a unique mapping to the road segment
+ -- in question within the above region of use
+ -- during its period of assignment and use
+ -- note that unlike intersectionID values,
+ -- this value can be reused by the region
+ }
+
+RoadSegment ::= SEQUENCE {
+ name DescriptiveName OPTIONAL,
+ id RoadSegmentReferenceID,
+ -- a globally unique value for the segment
+ revision MsgCount,
+ -- Required default values about the descriptions to follow
+ refPoint Position3D, -- the reference from which subsequent
+ -- data points are offset until a new
+ -- point is used.
+ laneWidth LaneWidth OPTIONAL,
+ -- Reference width used by all subsequent
+ -- lanes unless a new width is given
+ speedLimits SpeedLimitList OPTIONAL,
+ -- Reference regulatory speed limits
+ -- used by all subsequent
+ -- lanes unless a new speed is given
+ -- See Section 11 for converting and
+ -- translating speed expressed in mph
+ -- into units of m/s
+
+ -- Data describing disruptions in the RoadSegment
+ -- such as work zones etc will be added here;
+ -- in the US the SAE ITIS codes would be used here
+ -- The details regarding each lane type in the RoadSegment
+ roadLaneSet RoadLaneSetList,
+
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-RoadSegment}} OPTIONAL,
+ ...
+ }
+
+RoadSegmentList ::= SEQUENCE (SIZE(1..32)) OF RoadSegment
+
+SegmentAttributeXYList ::= SEQUENCE (SIZE(1..8)) OF SegmentAttributeXY
+
+SignalControlZone ::= SEQUENCE {
+ zone RegionalExtension {{Reg-SignalControlZone}},
+ ...
+ }
+
+SignalRequesterInfo ::= SEQUENCE {
+ -- These three items serve to uniquely identify the requester
+ -- and the specific request to all parties
+ id VehicleID,
+ request RequestID,
+ sequenceNumber MsgCount,
+ role BasicVehicleRole OPTIONAL,
+
+ typeData RequestorType OPTIONAL,
+ -- Used when addition data besides the role
+ -- is needed, at which point the role entry
+ -- above is not sent.
+ ...
+ }
+
+SignalRequestList ::= SEQUENCE (SIZE(1..32)) OF SignalRequestPackage
+
+SignalRequestPackage ::= SEQUENCE {
+ request SignalRequest,
+ -- The specific request to the intersection
+ -- contains IntersectionID, request type,
+ -- requested action (approach/lane request)
+
+ -- The Estimated Time of Arrival (ETA) when the service is requested
+ minute MinuteOfTheYear OPTIONAL,
+ second DSecond OPTIONAL,
+ duration DSecond OPTIONAL,
+ -- The duration value is used to provide a short interval that
+ -- extends the ETA so that the requesting vehicle can arrive at
+ -- the point of service with uncertainty or with some desired
+ -- duration of service. This concept can be used to avoid needing
+ -- to frequently update the request.
+ -- The requester must update the ETA and duration values if the
+ -- period of services extends beyond the duration time.
+ -- It should be assumed that if the vehicle does not clear the
+ -- intersection when the duration is reached, the request will
+ -- be cancelled and the intersection will revert to
+ -- normal operation.
+
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-SignalRequestPackage}} OPTIONAL,
+ ...
+ }
+
+SignalRequest ::= SEQUENCE {
+ -- the unique ID of the target intersection
+ id IntersectionReferenceID,
+
+ -- The unique requestID used by the requestor
+ requestID RequestID,
+
+ -- The type of request or cancel for priority or preempt use
+ -- when a prior request is canceled, only the requestID is needed
+ requestType PriorityRequestType,
+
+ -- In typical use either an approach or a lane number would
+ -- be given, this indicates the requested
+ -- path through the intersection to the degree it is known.
+ inBoundLane IntersectionAccessPoint,
+ -- desired entry approach or lane
+ outBoundLane IntersectionAccessPoint OPTIONAL,
+ -- desired exit approach or lane
+ -- the values zero is used to indicate
+ -- intent to stop within the intersection
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-SignalRequest}} OPTIONAL,
+ ...
+ }
+
+SignalStatusList ::= SEQUENCE (SIZE(1..32)) OF SignalStatus
+
+SignalStatusPackageList ::= SEQUENCE (SIZE(1..32)) OF SignalStatusPackage
+
+SignalStatusPackage ::= SEQUENCE {
+ -- The party that made the initial SRM request
+ requester SignalRequesterInfo OPTIONAL,
+ -- The lanes or approaches used in the request
+ inboundOn IntersectionAccessPoint, -- estimated lane / approach of vehicle
+ outboundOn IntersectionAccessPoint OPTIONAL,
+
+ -- The Estimated Time of Arrival (ETA) when the service is requested
+ -- This data echos the data of the request
+ minute MinuteOfTheYear OPTIONAL,
+ second DSecond OPTIONAL,
+ duration DSecond OPTIONAL,
+
+ -- the SRM status for this request
+ status PrioritizationResponseStatus,
+ -- Status of request, this may include rejection
+
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-SignalStatusPackage}} OPTIONAL,
+ ...
+ }
+
+SignalStatus ::= SEQUENCE {
+ sequenceNumber MsgCount,
+ -- changed whenever the below contents have change
+ id IntersectionReferenceID,
+ -- this provides a unique mapping to the
+ -- intersection map in question
+ -- which provides complete location
+ -- and approach/movement/lane data
+ -- as well as zones for priority/preemption
+ sigStatus SignalStatusPackageList,
+ -- a list of detailed status containing all
+ -- priority or preemption state data, both
+ -- active and pending, and who requested it
+ -- requests which are denied are also listed
+ -- here for a short period of time
+ regional SEQUENCE (SIZE(1..4)) OF
+ RegionalExtension {{Reg-SignalStatus}} OPTIONAL,
+ ...
+ }
+
+SpeedLimitList ::= SEQUENCE (SIZE(1..9)) OF RegulatorySpeedLimit
+
+SpeedLimitType ::= ENUMERATED {
+ unknown, -- Speed limit type not available
+ maxSpeedInSchoolZone, -- Only sent when the limit is active
+ maxSpeedInSchoolZoneWhenChildrenArePresent, -- Sent at any time
+ maxSpeedInConstructionZone, -- Used for work zones, incident zones, etc.
+ -- where a reduced speed is present
+ vehicleMinSpeed,
+ vehicleMaxSpeed, -- Regulatory speed limit for general traffic
+ vehicleNightMaxSpeed,
+
+ truckMinSpeed,
+ truckMaxSpeed,
+ truckNightMaxSpeed,
+
+ vehiclesWithTrailersMinSpeed,
+ vehiclesWithTrailersMaxSpeed,
+ vehiclesWithTrailersNightMaxSpeed,
+ ...
+ }
+
+TimeChangeDetails ::= SEQUENCE {
+ startTime TimeMark OPTIONAL,
+ -- When this phase 1st started
+ minEndTime TimeMark,
+ -- Expected shortest end time
+ maxEndTime TimeMark OPTIONAL,
+ -- Expected longest end time
+
+ likelyTime TimeMark OPTIONAL,
+ -- Best predicted value based on other data
+ confidence TimeIntervalConfidence OPTIONAL,
+ -- Applies to above time element only
+
+ nextTime TimeMark OPTIONAL
+ -- A rough estimate of time when
+ -- this phase may next occur again
+ -- used to support various ECO driving power
+ -- management needs.
+ }
+
+TimeMark ::= INTEGER (0..36001)
+ -- Tenths of a second in the current or next hour
+ -- In units of 1/10th second from UTC time
+ -- A range of 0~36000 covers one hour
+ -- The values 35991..36000 are used when a leap second occurs
+ -- The value 36001 is used to indicate time >3600 seconds
+ -- 36002 is to be used when value undefined or unknown
+ -- Note that this is NOT expressed in GPS time
+ -- or in local time
+
+TransmissionAndSpeed ::= SEQUENCE {
+ transmisson TransmissionState,
+ speed Velocity
+ }
+
+VehicleID ::= CHOICE {
+ entityID TemporaryID,
+ stationID StationID
+ }
+
+
+-- -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
+--
+-- Start of entries from table Data_Elements...
+-- This table typicaly contains data element entries.
+-- -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
+--
+
+AdvisorySpeedType ::= ENUMERATED {
+ none (0),
+ greenwave (1),
+ ecoDrive (2),
+ transit (3),
+ ...
+ } -- Note: subject to further growth
+
+AllowedManeuvers ::= BIT STRING {
+ -- With bits as defined:
+ -- Allowed maneuvers at path end (stop line)
+ -- All maneuvers with bits not set are therefore prohibited !
+ -- A value of zero shall be used for unknown, indicating no Maneuver
+ maneuverStraightAllowed (0),
+ -- a Straight movement is allowed in this lane
+ maneuverLeftAllowed (1),
+ -- a Left Turn movement is allowed in this lane
+ maneuverRightAllowed (2),
+ -- a Right Turn movement is allowed in this lane
+ maneuverUTurnAllowed (3),
+ -- a U turn movement is allowed in this lane
+ maneuverLeftTurnOnRedAllowed (4),
+ -- a Stop, and then proceed when safe movement
+ -- is allowed in this lane
+ maneuverRightTurnOnRedAllowed (5),
+ -- a Stop, and then proceed when safe movement
+ -- is allowed in this lane
+ maneuverLaneChangeAllowed (6),
+ -- a movement which changes to an outer lane
+ -- on the egress side is allowed in this lane
+ -- (example: left into either outbound lane)
+ maneuverNoStoppingAllowed (7),
+ -- the vehicle should not stop at the stop line
+ -- (example: a flashing green arrow)
+ yieldAllwaysRequired (8),
+ -- the allowed movements above are not protected
+ -- (example: an permanent yellow condition)
+ goWithHalt (9),
+ -- after making a full stop, may proceed
+ caution (10),
+ -- proceed past stop line with caution
+ reserved1 (11)
+ -- used to align to 12 Bit Field
+
+ } (SIZE(12))
+
+Angle ::= INTEGER (0..28800)
+ -- LSB of 0.0125 degrees
+ -- A range of 0 to 359.9875 degrees
+
+ApproachID ::= INTEGER (0..15) -- zero to be used when valid value is unknown
+
+BasicVehicleRole ::= ENUMERATED {
+ -- Values used in the EU and in the US
+ basicVehicle (0), -- Light duty passenger vehicle type
+ publicTransport (1), -- Used in EU for Transit us
+ specialTransport (2), -- Used in EU (e.g. heavy load)
+ dangerousGoods (3), -- Used in EU for any HAZMAT
+ roadWork (4), -- Used in EU for State and Local DOT uses
+ roadRescue (5), -- Used in EU and in the US to include tow trucks.
+ emergency (6), -- Used in EU for Police, Fire and Ambulance units
+ safetyCar (7), -- Used in EU for Escort vehicles
+ -- Begin US unique numbering
+ none-unknown (8), -- added to follow current SAE style guidelines
+ truck (9), -- Heavy trucks with additional BSM rights and obligations
+ motorcycle (10), --
+ roadSideSource (11), -- For infrastructure generated calls such as
+ -- fire house, rail infrastructure, roadwork site, etc.
+ police (12), --
+ fire (13), --
+ ambulance (14), -- (does not include private para-transit etc.)
+ dot (15), -- all roadwork vehicles
+ transit (16), -- all transit vehicles
+ slowMoving (17), -- to also include oversize etc.
+ stopNgo (18), -- to include trash trucks, school buses and others
+ -- that routinely disturb the free flow of traffic
+ cyclist (19), --
+ pedestrian (20), -- also includes those with mobility limitations
+ nonMotorized (21), -- other, horse drawn, etc.
+ military (22), --
+ ...
+ }
+
+DeltaAngle ::= INTEGER (-150..150)
+ -- With an angle range from
+ -- negative 150 to positive 150
+ -- in one degree steps where zero is directly
+ -- along the axis or the lane center line as defined by the
+ -- two closest points
+
+DeltaTime ::= INTEGER (-122 .. 121)
+ -- Supporting a range of +/- 20 minute in steps of 10 seconds
+ -- the value of -121 shall be used when more than -20 minutes
+ -- the value of +120 shall be used when more than +20 minutes
+ -- the value -122 shall be used when the value is unavailable
+
+DescriptiveName ::= IA5String (SIZE(1..63))
+
+DrivenLineOffsetLg ::= INTEGER (-32767..32767)
+ -- LSB units are 1 cm.
+
+DrivenLineOffsetSm ::= INTEGER (-2047..2047)
+ -- LSB units are 1 cm.
+
+DSecond ::= INTEGER (0..65535) -- units of milliseconds
+
+DSRCmsgID ::= INTEGER (0..32767)
+ mapData DSRCmsgID ::= 18 -- MAP, intersections
+ signalPhaseAndTimingMessage DSRCmsgID ::= 19 -- SPAT
+ signalRequestMessage DSRCmsgID ::= 29 -- SRM
+ signalStatusMessage DSRCmsgID ::= 30 -- SSM
+
+Elevation ::= INTEGER (-4096..61439)
+ -- In units of 10 cm steps above or below the reference ellipsoid
+ -- Providing a range of -409.5 to + 6143.9 meters
+ -- The value -4096 shall be used when Unknown is to be sent
+
+IntersectionID ::= INTEGER (0..65535)
+ -- The values zero through 255 are allocated for testing purposes
+ -- Note that the value assigned to an intersection will be
+ -- unique within a given regional ID only
+
+IntersectionStatusObject ::= BIT STRING {
+ manualControlIsEnabled (0),
+ -- Timing reported is per programmed values, etc. but person
+ -- at cabinet can manually request that certain intervals are
+ -- terminated early (e.g. green).
+ stopTimeIsActivated (1),
+ -- And all counting/timing has stopped.
+ failureFlash (2),
+ -- Above to be used for any detected hardware failures,
+ -- e.g. conflict monitor as well as for police flash
+ preemptIsActive (3),
+ signalPriorityIsActive (4),
+
+ -- Additional states
+ fixedTimeOperation (5),
+ -- Schedule of signals is based on time only
+ -- (i.e. the state can be calculated)
+ trafficDependentOperation (6),
+ -- Operation is based on different levels of traffic parameters
+ -- (requests, duration of gaps or more complex parameters)
+ standbyOperation (7),
+ -- Controller: partially switched off or partially amber flashing
+ failureMode (8),
+ -- Controller has a problem or failure in operation
+ off (9),
+ -- Controller is switched off
+
+ -- Related to MAP and SPAT bindings
+ recentMAPmessageUpdate (10),
+ -- Map revision with content changes
+ recentChangeInMAPassignedLanesIDsUsed (11),
+ -- Change in MAP's assigned lanes used (lane changes)
+ -- Changes in the active lane list description
+ noValidMAPisAvailableAtThisTime (12),
+ -- MAP (and various lanes indexes) not available
+ noValidSPATisAvailableAtThisTime (13)
+ -- SPAT system is not working at this time
+
+ -- Bits 14,15 reserved at this time and shall be zero
+ } (SIZE(16))
+
+
+LaneAttributes-Barrier ::= BIT STRING {
+ -- With bits as defined:
+ median-RevocableLane (0),
+ -- this lane may be activated or not based
+ -- on the current SPAT message contents
+ -- if not asserted, the lane is ALWAYS present
+ median (1),
+ whiteLineHashing (2),
+ stripedLines (3),
+ doubleStripedLines (4),
+ trafficCones (5),
+ constructionBarrier (6),
+ trafficChannels (7),
+ lowCurbs (8),
+ highCurbs (9)
+ -- Bits 10~15 reserved and set to zero
+ } (SIZE (16))
+
+LaneAttributes-Bike ::= BIT STRING {
+ -- With bits as defined:
+ bikeRevocableLane (0),
+ -- this lane may be activated or not based
+ -- on the current SPAT message contents
+ -- if not asserted, the lane is ALWAYS present
+ pedestrianUseAllowed (1),
+ -- The path allows pedestrian traffic,
+ -- if not set, this mode is prohibited
+ isBikeFlyOverLane (2),
+ -- path of lane is not at grade
+ fixedCycleTime (3),
+ -- the phases use preset times
+ -- i.e. there is not a 'push to cross' button
+ biDirectionalCycleTimes (4),
+ -- ped walk phases use different SignalGroupID
+ -- for each direction. The first SignalGroupID
+ -- in the first Connection represents 'inbound'
+ -- flow (the direction of travel towards the first
+ -- node point) while second SignalGroupID in the
+ -- next Connection entry represents the 'outbound'
+ -- flow. And use of RestrictionClassID entries
+ -- in the Connect follow this same pattern in pairs.
+ isolatedByBarrier (5),
+ unsignalizedSegmentsPresent (6)
+ -- The lane path consists of one of more segments
+ -- which are not part of a signal group ID
+
+ -- Bits 7~15 reserved and set to zero
+ } (SIZE (16))
+
+LaneAttributes-Crosswalk ::= BIT STRING {
+ -- With bits as defined:
+ -- MUTCD provides no suitable "types" to use here
+ crosswalkRevocableLane (0),
+ -- this lane may be activated or not based
+ -- on the current SPAT message contents
+ -- if not asserted, the lane is ALWAYS present
+ bicyleUseAllowed (1),
+ -- The path allows bicycle traffic,
+ -- if not set, this mode is prohibited
+ isXwalkFlyOverLane (2),
+ -- path of lane is not at grade
+ fixedCycleTime (3),
+ -- ped walk phases use preset times
+ -- i.e. there is not a 'push to cross' button
+ biDirectionalCycleTimes (4),
+ -- ped walk phases use different SignalGroupID
+ -- for each direction. The first SignalGroupID
+ -- in the first Connection represents 'inbound'
+ -- flow (the direction of travel towards the first
+ -- node point) while second SignalGroupID in the
+ -- next Connection entry represents the 'outbound'
+ -- flow. And use of RestrictionClassID entries
+ -- in the Connect follow this same pattern in pairs.
+ hasPushToWalkButton (5),
+ -- Has a demand input
+ audioSupport (6),
+ -- audio crossing cues present
+ rfSignalRequestPresent (7),
+ -- Supports RF push to walk technologies
+ unsignalizedSegmentsPresent (8)
+ -- The lane path consists of one of more segments
+ -- which are not part of a signal group ID
+ -- Bits 9~15 reserved and set to zero
+ } (SIZE (16))
+
+LaneAttributes-Parking ::= BIT STRING {
+ -- With bits as defined:
+ -- Parking use details, note that detailed restrictions such as
+ -- allowed hours are sent by way of ITIS codes in the TIM message
+ parkingRevocableLane (0),
+ -- this lane may be activated or not based
+ -- on the current SPAT message contents
+ -- if not asserted, the lane is ALWAYS present
+ parallelParkingInUse (1),
+ headInParkingInUse (2),
+ doNotParkZone (3),
+ -- used to denote fire hydrants as well as
+ -- short disruptions in a parking zone
+ parkingForBusUse (4),
+ parkingForTaxiUse (5),
+ noPublicParkingUse (6)
+ -- private parking, as in front of
+ -- private property
+ -- Bits 7~15 reserved and set to zero
+ } (SIZE (16))
+
+LaneAttributes-Sidewalk ::= BIT STRING {
+ -- With bits as defined:
+ sidewalk-RevocableLane (0),
+ -- this lane may be activated or not based
+ -- on the current SPAT message contents
+ -- if not asserted, the lane is ALWAYS present
+ bicyleUseAllowed (1),
+ -- The path allows bicycle traffic,
+ -- if not set, this mode is prohibited
+ isSidewalkFlyOverLane (2),
+ -- path of lane is not at grade
+ walkBikes (3)
+ -- bike traffic must dismount and walk
+ -- Bits 4~15 reserved and set to zero
+ } (SIZE (16))
+
+
+LaneAttributes-Striping ::= BIT STRING {
+ -- With bits as defined:
+ stripeToConnectingLanesRevocableLane (0),
+ -- this lane may be activated or not activated based
+ -- on the current SPAT message contents
+ -- if not asserted, the lane is ALWAYS present
+ stripeDrawOnLeft (1),
+ stripeDrawOnRight (2),
+ -- which side of lane to mark
+ stripeToConnectingLanesLeft (3),
+ stripeToConnectingLanesRight (4),
+ stripeToConnectingLanesAhead (5)
+ -- the stripe type should be
+ -- presented to the user visually
+ -- to reflect stripes in the
+ -- intersection for the type of
+ -- movement indicated
+ -- Bits 6~15 reserved and set to zero
+ } (SIZE (16))
+
+
+LaneAttributes-TrackedVehicle ::= BIT STRING {
+ -- With bits as defined:
+ spec-RevocableLane (0),
+ -- this lane may be activated or not based
+ -- on the current SPAT message contents
+ -- if not asserted, the lane is ALWAYS present
+ spec-commuterRailRoadTrack (1),
+ spec-lightRailRoadTrack (2),
+ spec-heavyRailRoadTrack (3),
+ spec-otherRailType (4)
+ -- Bits 5~15 reserved and set to zero
+ } (SIZE (16))
+
+
+LaneAttributes-Vehicle ::= BIT STRING {
+ -- With bits as defined:
+ isVehicleRevocableLane (0),
+ -- this lane may be activated or not based
+ -- on the current SPAT message contents
+ -- if not asserted, the lane is ALWAYS present
+ isVehicleFlyOverLane (1),
+ -- path of lane is not at grade
+ hovLaneUseOnly (2),
+ restrictedToBusUse (3),
+ restrictedToTaxiUse (4),
+ restrictedFromPublicUse (5),
+ hasIRbeaconCoverage (6),
+ permissionOnRequest (7) -- e.g. to inform about a lane for e-cars
+
+ } (SIZE (8,...))
+
+LaneConnectionID ::= INTEGER (0..255)
+
+LaneDirection ::= BIT STRING {
+ -- With bits as defined:
+ -- Allowed directions of travel in the lane object
+ -- All lanes are described from the stop line outwards
+ ingressPath (0),
+ -- travel from rear of path to front
+ -- is allowed
+ egressPath (1)
+ -- travel from front of path to rear
+ -- is allowed
+ -- Notes: No Travel, i.e. the lane object type does not support
+ -- travel (medians, curbs, etc.) is indicated by not
+ -- asserting any bit value
+ -- Bi-Directional Travel (such as a ped crosswalk) is
+ -- indicated by asserting both of the bits
+ } (SIZE (2))
+
+LaneID ::= INTEGER (0..255)
+ -- the value 0 shall be used when the lane ID is
+ -- not available or not known
+ -- the value 255 is reserved for future use
+
+LayerID ::= INTEGER (0..100)
+
+LayerType ::= ENUMERATED {
+ none,
+ mixedContent, -- two or more of the below types
+ generalMapData,
+ intersectionData,
+ curveData,
+ roadwaySectionData,
+ parkingAreaData,
+ sharedLaneData,
+ ...
+ }
+
+LaneWidth ::= INTEGER (0..32767) -- units of 1 cm
+
+MergeDivergeNodeAngle ::= INTEGER (-180..180)
+ -- In units of 1.5 degrees from north
+ -- the value -180 shall be used to represent
+ -- data is not available or unknown
+
+MinuteOfTheYear ::= INTEGER (0..527040)
+ -- the value 527040 shall be used for invalid
+
+MovementPhaseState ::= ENUMERATED {
+ -- Note that based on the regions and the operating mode not every
+ -- phase will be used in all transportation modes and that not
+ -- every phase will be used in all transportation modes
+
+ unavailable (0),
+ -- This state is used for unknown or error
+ dark (1),
+ -- The signal head is dark (unlit)
+
+ -- Reds
+ stop-Then-Proceed (2),
+ -- Often called 'flashing red' in US
+ -- Driver Action:
+ -- Stop vehicle at stop line.
+ -- Do not proceed unless it is safe.
+ -- Note that the right to proceed either right or left when
+ -- it is safe may be contained in the lane description to
+ -- handle what is called a 'right on red'
+ stop-And-Remain (3),
+ -- e.g. called 'red light' in US
+ -- Driver Action:
+ -- Stop vehicle at stop line.
+ -- Do not proceed.
+ -- Note that the right to proceed either right or left when
+ -- it is safe may be contained in the lane description to
+ -- handle what is called a 'right on red'
+
+ -- Greens
+ pre-Movement (4),
+ -- Not used in the US, red+yellow partly in EU
+ -- Driver Action:
+ -- Stop vehicle.
+ -- Prepare to proceed (pending green)
+ -- (Prepare for transition to green/go)
+ permissive-Movement-Allowed (5),
+ -- Often called 'permissive green' in US
+ -- Driver Action:
+ -- Proceed with caution,
+ -- must yield to all conflicting traffic
+ -- Conflicting traffic may be present
+ -- in the intersection conflict area
+ protected-Movement-Allowed (6),
+ -- Often called 'protected green' in US
+ -- Driver Action:
+ -- Proceed, tossing caution to the wind,
+ -- in indicated (allowed) direction.
+
+ -- Yellows / Ambers
+ -- The vehicle is not allowed to cross the stop bar if it is possible
+ -- to stop without danger.
+ permissive-clearance (7),
+ -- Often called 'permissive yellow' in US
+ -- Driver Action:
+ -- Prepare to stop.
+ -- Proceed if unable to stop,
+ -- Clear Intersection.
+ -- Conflicting traffic may be present
+ -- in the intersection conflict area
+ protected-clearance (8),
+ -- Often called 'protected yellow' in US
+ -- Driver Action:
+ -- Prepare to stop.
+ -- Proceed if unable to stop,
+ -- in indicated direction (to connected lane)
+ -- Clear Intersection.
+
+ caution-Conflicting-Traffic (9)
+ -- Often called 'flashing yellow' in US
+ -- Often used for extended periods of time
+ -- Driver Action:
+ -- Proceed with caution,
+ -- Conflicting traffic may be present
+ -- in the intersection conflict area
+ }
+ -- The above number assignments are not used with UPER encoding
+ -- and are only to be used with DER or implicit encoding
+
+MsgCount ::= INTEGER (0..127)
+
+Offset-B10 ::= INTEGER (-512..511)
+ -- a range of +- 5.11 meters
+
+Offset-B11 ::= INTEGER (-1024..1023)
+ -- a range of +- 10.23 meters
+
+Offset-B12 ::= INTEGER (-2048..2047)
+ -- a range of +- 20.47 meters
+
+Offset-B13 ::= INTEGER (-4096..4095)
+ -- a range of +- 40.95 meters
+
+Offset-B14 ::= INTEGER (-8192..8191)
+ -- a range of +- 81.91 meters
+
+Offset-B16 ::= INTEGER (-32768..32767)
+ -- a range of +- 327.68 meters
+
+PedestrianBicycleDetect ::= BOOLEAN
+ -- true if ANY Pedestrians or Bicyclists are
+ -- detected crossing the target lane or lanes
+
+PrioritizationResponseStatus ::= ENUMERATED {
+ unknown (0),
+ -- Unknown state
+ requested (1),
+ -- This prioritization request was detected
+ -- by the traffic controller
+ processing (2),
+ -- Checking request
+ -- (request is in queue, other requests are prior)
+ watchOtherTraffic (3),
+ -- Cannot give full permission,
+ -- therefore watch for other traffic
+ -- Note that other requests may be present
+ granted (4),
+ -- Intervention was successful
+ -- and now prioritization is active
+ rejected (5),
+ -- The prioritization or preemption request was
+ -- rejected by the traffic controller
+ maxPresence (6),
+ -- The Request has exceeded maxPresence time
+ -- Used when the controller has determined that
+ -- the requester should then back off and
+ -- request an alternative.
+ reserviceLocked (7),
+ -- Prior conditions have resulted in a reservice
+ -- locked event: the controller requires the
+ -- passage of time before another similar request
+ -- will be accepted
+ ...
+}
+
+PriorityRequestType ::= ENUMERATED {
+ priorityRequestTypeReserved (0),
+ priorityRequest (1),
+ priorityRequestUpdate (2),
+ priorityCancellation (3),
+ ...
+ }
+
+RegionId ::= INTEGER (0..255)
+ noRegion RegionId ::= 0 -- Use default supplied stubs
+ addGrpA RegionId ::= 1 -- USA
+ addGrpB RegionId ::= 2 -- Japan
+ addGrpC RegionId ::= 3 -- EU
+ -- NOTE: new registered regional IDs will be added here
+ -- The values 128 and above are for local region use
+
+RequestID ::= INTEGER (0..255)
+
+RequestImportanceLevel ::= ENUMERATED {
+ requestImportanceLevelUnKnown (0),
+ requestImportanceLevel1 (1), -- The least important request
+ requestImportanceLevel2 (2), -- The values here shall be assigned
+ requestImportanceLevel3 (3), -- Meanings based on regional needs
+ requestImportanceLevel4 (4), -- for each of the basic roles which
+ requestImportanceLevel5 (5), -- are defined elsewhere
+ requestImportanceLevel6 (6),
+ requestImportanceLevel7 (7),
+ requestImportanceLevel8 (8),
+ requestImportanceLevel9 (9),
+ requestImportanceLevel10 (10),
+ requestImportanceLevel11 (11),
+ requestImportanceLevel12 (12),
+ requestImportanceLevel13 (13),
+ requestImportanceLevel14 (14), -- The most important request
+ requestImportanceReserved (15) -- Reserved for future use
+ }
+
+RequestSubRole ::= ENUMERATED {
+ requestSubRoleUnKnown (0),
+ requestSubRole1 (1), -- The first type of sub role
+ requestSubRole2 (2), -- The values here shall be assigned
+ requestSubRole3 (3), -- Meanings based on regional needs
+ requestSubRole4 (4), -- to refine and expand the basic
+ requestSubRole5 (5), -- roles which are defined elsewhere
+ requestSubRole6 (6),
+ requestSubRole7 (7),
+ requestSubRole8 (8),
+ requestSubRole9 (9),
+ requestSubRole10 (10),
+ requestSubRole11 (11),
+ requestSubRole12 (12),
+ requestSubRole13 (13),
+ requestSubRole14 (14), -- The last type of sub role
+ requestSubRoleReserved (15) -- Reserved for future use
+ }
+
+RestrictionAppliesTo ::= ENUMERATED {
+ none, -- applies to nothing
+ equippedTransit, -- buses etc.
+ equippedTaxis,
+ equippedOther, -- other vehicle types with
+ -- necessary signal phase state
+ -- reception equipment
+ emissionCompliant, -- regional variants with more
+ -- definitive items also exist
+ equippedBicycle,
+ weightCompliant,
+ heightCompliant,
+ -- Items dealing with traveler needs serviced by the infrastructure
+ -- These end users (which are not vehicles) are presumed to be suitably equipped
+ pedestrians,
+ slowMovingPersons,
+ wheelchairUsers,
+ visualDisabilities,
+ audioDisabilities, -- hearing
+ otherUnknownDisabilities,
+ ...
+ }
+
+RestrictionClassID ::= INTEGER (0..255)
+ -- An index value to identify data about classes of users
+ -- the value used varies with each intersection's
+ -- needs and is defined in the map to the assigned
+ -- classes of supported users.
+
+RoadRegulatorID ::= INTEGER (0..65535)
+ -- The value zero shall be used for testing only
+
+RoadSegmentID ::= INTEGER (0..65535)
+ -- The values zero to 255 shall be used for testing only
+ -- Note that the value assigned to an RoadSegment will be
+ -- unique within a given regional ID only during its use
+
+RoadwayCrownAngle ::= INTEGER (-128..127)
+ -- In LSB units of 0.3 degrees of angle
+ -- over a range of -38.1 to + 38.1 degrees
+ -- The value -128 shall be used for unknown
+ -- The value zero shall be used for angles
+ -- which are between -0.15 and +0.15
+
+Scale-B12 ::= INTEGER (-2048..2047) -- in steps of 0.05 percent
+
+SignalGroupID ::= INTEGER (0..255)
+ -- The value 0 shall be used when the ID is
+ -- not available or not known
+ -- the value 255 is reserved to indicate a
+ -- permanent green movement state
+ -- therefore a simple 8 phase signal controller
+ -- device might use 1..9 as its groupIDs
+
+SegmentAttributeXY ::= ENUMERATED {
+ -- Various values which can be Enabled and Disabled for a lane segment
+
+ -- General Items
+ reserved ,
+ doNotBlock , -- segment where a vehicle
+ -- may not come to a stop
+ whiteLine , -- segment where lane crossing not allowed
+ -- such as the final few meters of a lane
+
+ -- Porous Lane states, merging, turn outs, parking etc.
+
+ mergingLaneLeft , -- indicates porous lanes
+ mergingLaneRight ,
+
+ curbOnLeft , -- indicates presence of curbs
+ curbOnRight ,
+
+ loadingzoneOnLeft , -- loading or drop off zones
+ loadingzoneOnRight ,
+
+ turnOutPointOnLeft , -- opening to adjacent street/alley/road
+ turnOutPointOnRight ,
+
+ adjacentParkingOnLeft , -- side of road parking
+ adjacentParkingOnRight ,
+
+ -- Bike Lane Needs
+ adjacentBikeLaneOnLeft , -- presence of marked bike lanes
+ adjacentBikeLaneOnRight ,
+ sharedBikeLane , -- right of way is shared with bikes
+ -- who may occupy entire lane width
+ bikeBoxInFront ,
+
+ -- Transit Needs
+ transitStopOnLeft , -- any form of bus/transit loading
+ -- with pull in-out access to lane on left
+ transitStopOnRight , -- any form of bus/transit loading
+ -- with pull in-out access to lane on right
+ transitStopInLane , -- any form of bus/transit loading
+ -- in mid path of the lane
+ sharedWithTrackedVehicle , -- lane is shared with train or trolley
+ -- not used for crossing tracks
+
+
+ -- Pedestrian Support Attributes
+ safeIsland , -- begin/end a safety island in path
+ lowCurbsPresent , -- for ADA support
+ rumbleStripPresent , -- for ADA support
+ audibleSignalingPresent , -- for ADA support
+ adaptiveTimingPresent , -- for ADA support
+ rfSignalRequestPresent , -- Supports RF push to walk technologies
+ partialCurbIntrusion , -- path is blocked by a median or curb
+ -- but at least 1 meter remains open for use
+ -- and at-grade passage
+
+ -- Lane geometry details (see standard for defined shapes)
+ taperToLeft , -- Used to control final path shape
+ taperToRight , -- Used to control final path shape
+ taperToCenterLine , -- Used to control final path shape
+
+ -- Parking Lane and Curb Attributes
+ parallelParking , --
+ headInParking , -- Parking at an angle with the street
+ freeParking , -- no restriction on use of parking
+ timeRestrictionsOnParking , -- Parking is not permitted at all times
+ -- typically used when the 'parking' lane
+ -- becomes a driving lane at times
+ costToPark , -- Used where parking has a cost
+ midBlockCurbPresent , -- a protruding curb near lane edge
+ unEvenPavementPresent , -- a disjoint height at lane edge
+ ...
+ }
+
+SpeedAdvice ::= INTEGER (0..500)
+ -- LSB units are 0.1 m/s^2
+ -- the value 499 shall be used for values at or greater than 49.9 m/s
+ -- the value 500 shall be used to indicate that speed is unavailable
+
+
+TemporaryID ::= OCTET STRING (SIZE(4))
+
+TimeIntervalConfidence ::= INTEGER (0..15)
+ -- Value Probability
+ -- 0 21%
+ -- 1 36%
+ -- 2 47%
+ -- 3 56%
+ -- 4 62%
+ -- 5 68%
+ -- 6 73%
+ -- 7 77%
+ -- 8 81%
+ -- 9 85%
+ -- 10 88%
+ -- 11 91%
+ -- 12 94%
+ -- 13 96%
+ -- 14 98%
+ -- 15 100%
+
+TransitVehicleOccupancy ::= ENUMERATED {
+ occupancyUnknown (0),
+ occupancyEmpty (1),
+ occupancyVeryLow (2),
+ occupancyLow (3),
+ occupancyMed (4),
+ occupancyHigh (5),
+ occupancyNearlyFull (6),
+ occupancyFull (7)
+ }
+
+TransitVehicleStatus ::= BIT STRING {
+ loading (0), -- parking and unable to move at this time
+ anADAuse (1), -- an ADA access is in progress (wheelchairs, kneeling, etc.)
+ aBikeLoad (2), -- loading of a bicycle is in progress
+ doorOpen (3), -- a vehicle door is open for passenger access
+ charging (4), -- a vehicle is connected to charging point
+ atStopLine (5) -- a vehicle is at the stop line for the lane it is in
+ } (SIZE(8))
+
+TransmissionState ::= ENUMERATED {
+ neutral (0), -- Neutral
+ park (1), -- Park
+ forwardGears (2), -- Forward gears
+ reverseGears (3), -- Reverse gears
+ reserved1 (4),
+ reserved2 (5),
+ reserved3 (6),
+ unavailable (7) -- not-equipped or unavailable value,
+ -- Any related speed is relative to the vehicle reference frame used
+ }
+
+VehicleType ::= ENUMERATED {
+ none (0), -- Not Equipped, Not known or unavailable
+ unknown (1), -- Does not fit any other category
+ special (2), -- Special use
+ moto (3), -- Motorcycle
+ car (4), -- Passenger car
+ carOther (5), -- Four tire single units
+ bus (6), -- Buses
+ axleCnt2 (7), -- Two axle, six tire single units
+ axleCnt3 (8), -- Three axle, single units
+ axleCnt4 (9), -- Four or more axle, single unit
+ axleCnt4Trailer (10), -- Four or less axle, single trailer
+ axleCnt5Trailer (11), -- Five or less axle, single trailer
+ axleCnt6Trailer (12), -- Six or more axle, single trailer
+ axleCnt5MultiTrailer (13), -- Five or less axle, multi-trailer
+ axleCnt6MultiTrailer (14), -- Six axle, multi-trailer
+ axleCnt7MultiTrailer (15), -- Seven or more axle, multi-trailer
+ ...
+ }
+
+Velocity ::= INTEGER (0..8191) -- Units of 0.02 m/s
+ -- The value 8191 indicates that
+ -- velocity is unavailable
+
+WaitOnStopline ::= BOOLEAN --
+ -- True or False
+ -- If "true", the vehicles on this specific connecting
+ -- maneuver have to stop on the stop-line
+ -- and not to enter the collision area
+
+ZoneLength ::= INTEGER (0..10000)
+ -- Unit = 1 meter, 0 = unknown,
+ -- The value 10000 to be used for Distances >=10000 m
+ -- (e.g. from known point to another point along a
+ -- known path, often against traffic flow direction
+ -- when used for measuring queues)
+
+END
+
+-- ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-
+--
+-- module: AddGrpC
+--
+-- ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-
+AddGrpC { iso (1) standard (0) signalizedIntersection (19091) profilec(2) addgrpc (0) version (1) }
+
+
+DEFINITIONS AUTOMATIC TAGS::= BEGIN
+
+IMPORTS
+NodeOffsetPointXY, NodeSetXY, PrioritizationResponseStatus, SignalGroupID, DeltaTime, LaneID FROM DSRC
+Altitude, StationID, DeltaAltitude FROM ITS-Container { itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (1) };
+
+
+ConnectionManeuverAssist-addGrpC ::= SEQUENCE {
+ itsStationPositions ItsStationPositionList OPTIONAL,
+ rsuGNSSOffset NodeOffsetPointXY OPTIONAL,
+ ...
+}
+
+ConnectionTrajectory-addGrpC ::= SEQUENCE {
+ nodes NodeSetXY,
+ ...
+}
+
+Control-addGrpC ::= SEQUENCE {
+ ptvRequest PtvRequestType,
+ ...
+}
+
+IntersectionState-addGrpC ::= SEQUENCE {
+ activePrioritizations PrioritizationResponseList OPTIONAL,
+ ...
+}
+
+MapData-addGrpC ::= SEQUENCE {
+ signalHeadLocations SignalHeadLocationList OPTIONAL,
+ ...
+}
+
+Position3D-addGrpC ::= SEQUENCE {
+ altitude Altitude,
+ ...
+}
+
+PrioritizationResponseList ::= SEQUENCE SIZE(1..10) OF PrioritizationResponse
+
+PrioritizationResponse ::= SEQUENCE {
+ stationID StationID,
+ priorState PrioritizationResponseStatus,
+ signalGroup SignalGroupID,
+ ...
+}
+
+RestrictionUserType-addGrpC ::= SEQUENCE {
+ emission EmissionType OPTIONAL,
+ ...
+}
+
+SignalHeadLocationList ::= SEQUENCE (SIZE(1..64)) OF SignalHeadLocation
+
+SignalHeadLocation ::= SEQUENCE {
+ nodeXY NodeOffsetPointXY,
+ nodeZ DeltaAltitude,
+ signalGroupID SignalGroupID,
+ ...
+}
+
+SignalStatusPackage-addGrpC ::= SEQUENCE {
+ synchToSchedule DeltaTime OPTIONAL,
+ ...
+}
+
+
+ItsStationPositionList::= SEQUENCE SIZE(1..5) OF ItsStationPosition
+
+ItsStationPosition ::= SEQUENCE {
+ stationID StationID,
+ laneID LaneID OPTIONAL,
+ nodeXY NodeOffsetPointXY OPTIONAL,
+ timeReference TimeReference OPTIONAL,
+ ...
+}
+EmissionType ::= ENUMERATED {
+ euro1,
+ euro2,
+ euro3,
+ euro4,
+ euro5,
+ euro6,
+ ...
+}
+
+PtvRequestType ::= ENUMERATED {
+ preRequest,
+ mainRequest,
+ doorCloseRequest,
+ cancelRequest,
+ emergencyRequest,
+ ...
+}
+
+TimeReference ::= INTEGER { oneMilliSec(1) } (0..65535)
+
+END
+
+
+
+-- ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-
+--
+-- module: REGION
+--
+-- ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-
+REGION { iso (1) standard (0) signalizedIntersection (19091) profilec(2) region (1) version (1) }
+
+DEFINITIONS AUTOMATIC TAGS::= BEGIN
+
+IMPORTS
+addGrpC, REG-EXT-ID-AND-TYPE FROM DSRC
+ConnectionManeuverAssist-addGrpC, ConnectionTrajectory-addGrpC, IntersectionState-addGrpC, Control-addGrpC, Position3D-addGrpC, RestrictionUserType-addGrpC,
+SignalStatusPackage-addGrpC, MapData-addGrpC FROM AddGrpC {iso (1) standard (0) signalizedIntersection (19091) profilec(2) addgrpc (0) version (1)};
+
+Reg-AdvisorySpeed REG-EXT-ID-AND-TYPE ::= { ... }
+
+Reg-ComputedLane REG-EXT-ID-AND-TYPE ::= { ... }
+
+Reg-ConnectionManeuverAssist REG-EXT-ID-AND-TYPE ::= {
+ {ConnectionManeuverAssist-addGrpC IDENTIFIED BY addGrpC} ,
+ ...
+}
+
+Reg-GenericLane REG-EXT-ID-AND-TYPE ::= {
+ {ConnectionTrajectory-addGrpC IDENTIFIED BY addGrpC} ,
+ ...
+}
+
+Reg-IntersectionGeometry REG-EXT-ID-AND-TYPE ::= { ... }
+
+Reg-IntersectionState REG-EXT-ID-AND-TYPE ::= {
+ {IntersectionState-addGrpC IDENTIFIED BY addGrpC} ,
+ ...
+}
+
+Reg-LaneAttributes REG-EXT-ID-AND-TYPE ::= { ... }
+
+Reg-LaneDataAttribute REG-EXT-ID-AND-TYPE ::= { ... }
+
+Reg-MapData REG-EXT-ID-AND-TYPE ::= {
+ {MapData-addGrpC IDENTIFIED BY addGrpC},
+ ...
+}
+
+Reg-MovementEvent REG-EXT-ID-AND-TYPE ::= { ... }
+
+Reg-MovementState REG-EXT-ID-AND-TYPE ::= { ... }
+
+Reg-NodeAttributeSetLL REG-EXT-ID-AND-TYPE ::= { ... }
+
+Reg-NodeAttributeSetXY REG-EXT-ID-AND-TYPE ::= {
+ {Control-addGrpC IDENTIFIED BY addGrpC} ,
+ ...
+}
+
+Reg-NodeOffsetPointLL REG-EXT-ID-AND-TYPE ::= { ... }
+
+Reg-NodeOffsetPointXY REG-EXT-ID-AND-TYPE ::= { ... }
+
+Reg-Position3D REG-EXT-ID-AND-TYPE ::= {
+ {Position3D-addGrpC IDENTIFIED BY addGrpC} ,
+ ...
+}
+
+Reg-RequestorDescription REG-EXT-ID-AND-TYPE ::= { ... }
+
+Reg-RequestorType REG-EXT-ID-AND-TYPE ::= { ... }
+
+Reg-RestrictionUserType REG-EXT-ID-AND-TYPE ::= {
+ {RestrictionUserType-addGrpC IDENTIFIED BY addGrpC} ,
+ ...
+}
+
+Reg-RoadSegment REG-EXT-ID-AND-TYPE ::= { ... }
+
+Reg-SignalControlZone REG-EXT-ID-AND-TYPE ::= { ... }
+
+Reg-SignalRequest REG-EXT-ID-AND-TYPE ::= { ... }
+
+Reg-SignalRequestMessage REG-EXT-ID-AND-TYPE ::= { ... }
+
+Reg-SignalRequestPackage REG-EXT-ID-AND-TYPE ::= { ... }
+
+Reg-SignalStatus REG-EXT-ID-AND-TYPE ::= { ... }
+
+Reg-SignalStatusMessage REG-EXT-ID-AND-TYPE ::= { ... }
+
+Reg-SignalStatusPackage REG-EXT-ID-AND-TYPE ::= {
+ { SignalStatusPackage-addGrpC IDENTIFIED BY addGrpC} ,
+ ...
+}
+
+Reg-SPAT REG-EXT-ID-AND-TYPE ::= { ... }
+
+END
+
+
+
diff --git a/epan/dissectors/asn1/its/ISO_TS_19321.asn b/epan/dissectors/asn1/its/ISO_TS_19321.asn
new file mode 100644
index 0000000000..6a39657567
--- /dev/null
+++ b/epan/dissectors/asn1/its/ISO_TS_19321.asn
@@ -0,0 +1,621 @@
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-- ISO TS 19321
+--
+-- This ASN.1 was generateds: 30.08.2016
+--
+-- Due to typos in the published version,
+-- small ASN.1 syntax adaptations have been executed
+--
+-- Published version location:
+-- http://standards.iso.org/iso/ts/19321
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+IVI {iso (1) standard (0) ivi (19321) version1 (1)}
+
+DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+IMPORTS
+ItsPduHeader, Altitude, DangerousGoodsBasic , DeltaLatitude, DeltaLongitude, DeltaReferencePosition, Heading, HeadingValue, Latitude, LanePosition, Longitude, ReferencePosition, RoadType, SpecialTransportType, Speed, StationType, TimestampIts, VehicleRole
+FROM ITS-Container { itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (1) }
+
+AxleWeightLimits, DieselEmissionValues, ExhaustEmissionValues, EngineCharacteristics, EnvironmentalCharacteristics, PassengerCapacity , Provider, SoundLevel, VehicleDimensions, VehicleWeightLimits
+FROM EfcDsrcApplication {iso(1) standard(0) 14906 application(0) version5(5)}
+
+EuVehicleCategoryCode, Iso3833VehicleType
+FROM ElectronicRegistrationIdentificationVehicleDataModule {iso(1) standard(0) iso24534 (24534) vehicleData (1) version (1)}
+
+VarLengthNumber
+FROM CITSapplMgmtIDs {iso(1) standard(0) cits-applMgmt (17419) ids (1) version1 (1)};
+
+--Definition of IVI message to be send over the air is outside of the scope and given for information only:
+
+IVI::= SEQUENCE {
+ header ItsPduHeader,
+ ivi IviStructure
+}
+
+--Definition of IVI Structure
+
+
+
+IviStructure::= SEQUENCE{
+ mandatory IVIManagementContainer,
+ optional SEQUENCE (SIZE (1..8,...)) OF IviContainer OPTIONAL
+ }
+
+--Definition of Containers
+
+IviContainer::= CHOICE {
+ glc GeographicLocationContainer,
+ giv GeneralIviContainer,
+ rcc RoadConfigurationContainer,
+ tc TextContainer,
+ lac LayoutContainer,
+ ... -- extension for future containers
+ }
+
+-- Prefix IVI added due to naming collision with data element ManagementContainer of Module DENM-PDU-Descriptions
+IVIManagementContainer::= SEQUENCE {
+ serviceProviderId Provider,
+ iviIdentificationNumber IviIdentificationNumber,
+ timeStamp TimestampIts OPTIONAL,
+ validFrom TimestampIts OPTIONAL,
+ validTo TimestampIts OPTIONAL,
+ connectedIviStructures SEQUENCE (SIZE(1..8)) OF IviIdentificationNumber OPTIONAL,
+ iviStatus IviStatus,
+ ...
+ }
+
+GeographicLocationContainer::= SEQUENCE {
+ referencePosition ReferencePosition,
+ referencePositionTime TimestampIts OPTIONAL,
+ referencePositionHeading Heading OPTIONAL,
+ referencePositionSpeed Speed OPTIONAL,
+ parts SEQUENCE (SIZE (1..16,...)) OF GlcPart,
+ ...
+ }
+
+GlcPart::= SEQUENCE {
+ zoneId Zid,
+ laneNumber LanePosition OPTIONAL,
+ zoneExtension INTEGER (0..255) OPTIONAL,
+ zoneHeading HeadingValue OPTIONAL,
+ zone Zone OPTIONAL,
+ ...
+ }
+
+GeneralIviContainer::= SEQUENCE (SIZE (1..16,...)) OF GicPart
+
+GicPart::= SEQUENCE {
+ detectionZoneIds SEQUENCE (SIZE (1..8,...)) OF Zid OPTIONAL,
+ its-Rrid VarLengthNumber OPTIONAL,
+ relevanceZoneIds SEQUENCE (SIZE (1..8,...)) OF Zid OPTIONAL,
+ direction Direction OPTIONAL,
+ driverAwarenessZoneIds SEQUENCE (SIZE (1..8,...)) OF Zid OPTIONAL,
+ minimumAwarenessTime INTEGER (0..255) OPTIONAL,
+ applicableLanes SEQUENCE (SIZE (1..8,...)) OF LanePosition OPTIONAL,
+ iviType IviType,
+ iviPurpose IviPurpose OPTIONAL,
+ laneStatus LaneStatus OPTIONAL,
+ vehicleCharacteristics SEQUENCE (SIZE (1..8, ...)) OF CompleteVehicleCharacteristics OPTIONAL,
+ driverCharacteristics DriverCharacteristics OPTIONAL,
+ layoutId INTEGER(1..4,...) OPTIONAL,
+ preStoredlayoutId INTEGER(1..64,...) OPTIONAL,
+ roadSignCodes SEQUENCE (SIZE (1..4,...)) OF RSCode,
+ extraText SEQUENCE (SIZE (1..4,...)) OF Text (WITH COMPONENTS {layoutComponentId, language, textContent (SIZE(1..32))}) OPTIONAL,
+ ...
+ }
+
+RoadConfigurationContainer::= SEQUENCE (SIZE (1..16,...)) OF RccPart
+
+RccPart::= SEQUENCE{
+ zoneIds SEQUENCE (SIZE (1..8,...)) OF Zid,
+ roadType RoadType,
+ laneConfiguration SEQUENCE (SIZE (1..16,...)) OF LaneInformation,
+ ...
+ }
+
+TextContainer::= SEQUENCE (SIZE (1..16,...)) OF TcPart
+
+TcPart::= SEQUENCE {
+ detectionZoneIds SEQUENCE (SIZE (1..8,...)) OF Zid OPTIONAL,
+ relevanceZoneIds SEQUENCE (SIZE (1..8,...)) OF Zid,
+ direction Direction OPTIONAL,
+ driverAwarenessZoneIds SEQUENCE (SIZE (1..8,...)) OF Zid OPTIONAL,
+ minimumAwarenessTime INTEGER (0..255) OPTIONAL,
+ applicableLanes SEQUENCE (SIZE (1..8,...)) OF LanePosition OPTIONAL,
+ layoutId INTEGER(1..4,...) OPTIONAL,
+ preStoredlayoutId INTEGER(1..64,...) OPTIONAL,
+ text SEQUENCE (SIZE (1..4,...)) OF Text OPTIONAL,
+ data OCTET STRING,
+ ...
+ }
+
+LayoutContainer::=SEQUENCE{
+ layoutId INTEGER(1..4,...),
+ height INTEGER(10..73) OPTIONAL,
+ width INTEGER(10..265) OPTIONAL,
+ layoutComponents SEQUENCE SIZE (1..4,...) OF LayoutComponent,
+ ...
+ }
+
+-- Definition of Data Frames & Elements
+
+AbsolutePosition::= SEQUENCE{
+ latitude Latitude,
+ longitude Longitude
+ }
+
+AbsolutePositionWAltitude::= SEQUENCE{
+ latitude Latitude,
+ longitude Longitude,
+ altitude Altitude
+ }
+
+AnyCatalogue::=SEQUENCE{
+ owner Provider,
+ version INTEGER(0..255),
+ pictogramCode INTEGER(0..65535),
+ value INTEGER (0..65535) OPTIONAL,
+ unit RSCUnit OPTIONAL,
+ attributes ISO14823Attributes OPTIONAL
+ }
+
+ComparisonOperator ::= INTEGER {
+ greaterThan (0),
+ greaterThanOrEqualTo (1),
+ lessThan (2),
+ lessThanOrEqualTo (3)
+} (0..3)
+
+CompleteVehicleCharacteristics::= SEQUENCE{
+ tractor TractorCharacteristics OPTIONAL,
+ trailer SEQUENCE (SIZE (1..3)) OF TrailerCharacteristics OPTIONAL,
+ train TrainCharacteristics OPTIONAL
+ }
+
+ComputedSegment::= SEQUENCE {
+ zoneId Zid,
+ laneNumber LanePosition,
+ laneWidth IVILaneWidth,
+ offsetDistance INTEGER (-32768..32767) OPTIONAL,
+ offsetPosition DeltaReferencePosition OPTIONAL
+ }
+
+DeltaPosition::=SEQUENCE{
+ deltaLatitude DeltaLatitude,
+ deltaLongitude DeltaLongitude
+ }
+
+Direction::= INTEGER{
+ sameDirection (0),
+ oppositeDirection (1),
+ bothDirections (2),
+ valueNotUsed (3)
+ } (0..3)
+
+Distance::= SEQUENCE {
+ value INTEGER(1..16384),
+ unit RSCUnit (2..4|6..8)
+ }
+
+DistanceOrDuration::= SEQUENCE {
+ value INTEGER(1..16384),
+ unit RSCUnit (2..9)
+ }
+
+DriverCharacteristics::= INTEGER{
+ unexperiencedDrivers (0),
+ experiencedDrivers (1),
+ rfu1 (2),
+ rfu2 (3)
+ } (0..3)
+
+GoodsType::= INTEGER {
+ ammunition (0),
+ chemicals (1),
+ empty (2),
+ fuel (3),
+ glass (4),
+ dangerous (5),
+ liquid (6),
+ liveStock (7),
+ dangerousForPeople (8),
+ dangerousForTheEnvironment (9),
+ dangerousForWater (10),
+ perishableProducts (11),
+ pharmaceutical (12),
+ vehicles (13)
+ -- other values reserved for future use
+ } (0..15,...)
+
+
+ISO14823Attributes::= SEQUENCE (SIZE(1..8,...)) OF CHOICE{
+ dtm DTM, -- Date/Time/Period
+ edt EDT, -- Exemption status of Date/Time/Period
+ dfl DFL, -- Directional Flow of Lane
+ ved VED, -- Vehicle Dimensions
+ spe SPE, -- Speed
+ roi ROI, -- Rate of Incline
+ dbv DBV, -- Distance Between Vehicles
+ ddd DDD -- Destination/Direction/Distance
+ }
+
+ISO14823Code ::= 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 ISO14823Attributes OPTIONAL
+ }
+
+IviIdentificationNumber::= INTEGER(1..32767,...)
+
+IviPurpose::= INTEGER {
+ safety (0),
+ environmental (1),
+ trafficOptimisation (2)
+ } (0..3)
+
+IviStatus::= INTEGER {
+ new (0),
+ update (1),
+ cancellation (2),
+ negation (3)
+ -- other values reserved for future use
+ }(0..7)
+
+IviType::= INTEGER {
+ immediateDangerWarningMessages (0),
+ regulatoryMessages (1),
+ trafficRelatedInformationMessages (2),
+ pollutionMessages (3),
+ notTrafficRelatedInformationMessages (4)
+ -- other values reserved for future use
+ } (0..7)
+
+LaneInformation::= SEQUENCE{
+ laneNumber LanePosition,
+ direction Direction,
+ validity DTM OPTIONAL,
+ laneType LaneType,
+ laneTypeQualifier CompleteVehicleCharacteristics OPTIONAL,
+ laneStatus LaneStatus,
+ laneWidth IVILaneWidth OPTIONAL,
+ ...
+ }
+
+LaneStatus::= INTEGER {
+ open (0),
+ closed (1),
+ mergeR (2),
+ mergeL (3),
+ mergeLR (4),
+ provisionallyOpen (5),
+ diverging (6)
+ -- value 7 reserved for future use
+} (0..7, ...)
+
+LaneType::= INTEGER{
+ traffic (0),
+ through (1),
+ reversible (2),
+ acceleration (3),
+ deceleration (4),
+ leftHandTurning (5),
+ rightHandTurning (6),
+ dedicatedVehicle (7),
+ bus (8),
+ taxi (9),
+ hov (10),
+ hot (11),
+ pedestrian (12),
+ bikeLane (13),
+ median (14),
+ striping (15),
+ trackedVehicle (16),
+ parking (17),
+ emergency (18),
+ verge (19)
+-- values 20 to 31 reserved for future use
+ }(0..31)
+
+-- Prefix IVI added due to naming collision with data element LaneWidth of Module DSRC
+IVILaneWidth::= INTEGER (0..1023)
+
+LayoutComponent::=SEQUENCE{
+ layoutComponentId INTEGER(1..8,...),
+ height INTEGER(10..73),
+ width INTEGER(10..265),
+ x INTEGER(10..265),
+ y INTEGER(10..73),
+ textScripting INTEGER {horizontal (0), vertical (1)}(0..1)
+ }
+
+LoadType::= SEQUENCE{
+ goodsType GoodsType,
+ dangerousGoodsType DangerousGoodsBasic,
+ specialTransportType SpecialTransportType
+ }
+
+PolygonalLine::= CHOICE {
+ deltaPositions SEQUENCE (SIZE (1..32,...)) OF DeltaPosition,
+ deltaPositionsWithAltitude SEQUENCE (SIZE (1..32,...)) OF DeltaReferencePosition,
+ absolutePositions SEQUENCE (SIZE (1..8,...)) OF AbsolutePosition,
+ absolutePositionsWithAltitude SEQUENCE (SIZE (1..8,...)) OF AbsolutePositionWAltitude,
+ ...
+ }
+
+RSCode::= SEQUENCE{
+ layoutComponentId INTEGER(1..4,...) OPTIONAL,
+ code CHOICE {
+ viennaConvention VcCode, -- see Vienna Convention Annex A
+ iso14823 ISO14823Code,
+ itisCodes INTEGER (0..65535), -- see SAE J2540
+ anyCatalogue AnyCatalogue,
+ ...
+ }}
+
+RSCUnit::= INTEGER {
+ kmperh (0),
+ milesperh (1),
+ kilometer (2),
+ meter (3),
+ decimeter (4),
+ centimeter (5),
+ mile (6),
+ yard (7),
+ foot (8),
+ minutesOfTime (9),
+ tonnes (10), --1000 kg, not Ton!
+ hundredkg (11),
+ pound (12), --lbs
+ rateOfIncline (13)
+ -- other value reserved for future use
+ } (0..15)
+
+
+Segment::= SEQUENCE {
+ line PolygonalLine,
+ laneWidth IVILaneWidth OPTIONAL
+ }
+
+Text::= SEQUENCE {
+ layoutComponentId INTEGER(1..4,...) OPTIONAL,
+ language BIT STRING (SIZE(10)),
+ textContent UTF8String
+ }
+
+TractorCharacteristics::=SEQUENCE{
+ equalTo SEQUENCE (SIZE (1..4,...)) OF VehicleCharacteristicsFixValues OPTIONAL,
+ notEqualTo SEQUENCE (SIZE (1..4,...)) OF VehicleCharacteristicsFixValues OPTIONAL,
+ ranges SEQUENCE (SIZE (1..4,...)) OF VehicleCharacteristicsRanges OPTIONAL
+}
+
+TrailerCharacteristics::=SEQUENCE{
+ equalTo SEQUENCE (SIZE (1..4,...)) OF VehicleCharacteristicsFixValues (WITH COMPONENTS {..., euroAndCo2value ABSENT, engineCharacteristics ABSENT}) OPTIONAL,
+ notEqualTo SEQUENCE (SIZE (1..4,...)) OF VehicleCharacteristicsFixValues (WITH COMPONENTS {..., euroAndCo2value ABSENT, engineCharacteristics ABSENT}) OPTIONAL,
+ ranges SEQUENCE (SIZE (1..4,...)) OF VehicleCharacteristicsRanges (WITH COMPONENTS {comparisonOperator, limits (WITH COMPONENTS {..., exhaustEmissionValues ABSENT, dieselEmissionValues ABSENT, soundLevel ABSENT})}) OPTIONAL
+ }
+
+TrainCharacteristics::= TractorCharacteristics
+
+VcClass::= INTEGER {
+ classA (0),
+ classB (1),
+ classC (2),
+ classD (3),
+ classE (4),
+ classF (5),
+ classG (6),
+ classH (7)
+ } (0..7)
+
+VcCode::= SEQUENCE {
+ roadSignClass VcClass, -- see Vienna Convention
+ roadSignCode INTEGER (1..64),
+ vcOption VcOption, -- e.g. the "a" in H, 3a
+ validity SEQUENCE (SIZE (1..8,...)) OF DTM OPTIONAL,
+ value INTEGER (0..65535) OPTIONAL,
+ unit RSCUnit OPTIONAL
+ }
+
+VcOption::= INTEGER {
+ none (0),
+ a (1),
+ b (2),
+ c (3),
+ d (4),
+ e (5),
+ f (6),
+ g (7)
+ } (0..7)
+
+VehicleCharacteristicsFixValues::= CHOICE{
+ simpleVehicleType StationType,
+ euVehicleCategoryCode EuVehicleCategoryCode,
+ iso3833VehicleType Iso3833VehicleType,
+ euroAndCo2value EnvironmentalCharacteristics,
+ engineCharacteristics EngineCharacteristics,
+ loadType LoadType,
+ usage VehicleRole,
+ ...}
+
+VehicleCharacteristicsRanges::= SEQUENCE{
+ comparisonOperator ComparisonOperator,
+ limits CHOICE{
+ numberOfAxles INTEGER(0..7),
+ vehicleDimensions VehicleDimensions,
+ vehicleWeightLimits VehicleWeightLimits,
+ axleWeightLimits AxleWeightLimits,
+ passengerCapacity PassengerCapacity,
+ exhaustEmissionValues ExhaustEmissionValues,
+ dieselEmissionValues DieselEmissionValues,
+ soundLevel SoundLevel,
+ ...}}
+
+Weight::= SEQUENCE {
+ value INTEGER(1..16384),
+ unit RSCUnit (10..12)
+ }
+
+Zid::= INTEGER (1..32,...)
+
+Zone::= CHOICE {
+ segment Segment,
+ area PolygonalLine,
+ computedSegment ComputedSegment,
+ ...
+ }
+
+-- Definition of the single ISO 14823 Attributes
+
+
+DTM ::= SEQUENCE {
+ year SEQUENCE { -- contains SYR and EYR
+ syr INTEGER(2000..2127,...),
+ eyr INTEGER(2000..2127,...)
+ } OPTIONAL,
+ month-day SEQUENCE { -- contains SMD and EMD
+ smd MonthDay,
+ emd MonthDay
+ } OPTIONAL,
+ pmd PMD OPTIONAL,
+ hourMinutes SEQUENCE { -- contains SHM and EHM
+ shm HoursMinutes,
+ ehm HoursMinutes
+ } OPTIONAL,
+ dayOfWeek DayOfWeek OPTIONAL, -- corresponds to SDY and EDY
+ period HoursMinutes OPTIONAL -- corresponds to LDM
+}
+
+MonthDay ::= SEQUENCE {
+ month INTEGER (1..12),
+ day INTEGER (1..31)
+}
+
+PMD::= BIT STRING {national-holiday (0), even-days(1), odd-days(2), market-day(3) } (SIZE (4))
+
+HoursMinutes ::= SEQUENCE {
+ hours INTEGER (0..23), -- number of hours after midnight
+ mins INTEGER (0..59) -- number of minutes after the hour
+ }
+
+-- Prefix IVI added due to naming collision with data element DayOfWeek of Module DSRC
+DayOfWeek ::= BIT STRING {unused(0), monday(1), tuesday(2), wednesday(3), thursday(4), friday(5), saturday(6), sunday(7)} (SIZE (8))
+
+EDT ::= DTM
+
+
+
+DFL::= 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)
+
+VED::=SEQUENCE{
+ hei Distance OPTIONAL,
+ wid Distance OPTIONAL,
+ vln Distance OPTIONAL,
+ wei Weight OPTIONAL
+ }
+
+SPE::=SEQUENCE{
+ spm INTEGER(0..250) OPTIONAL,
+ mns INTEGER(0..250) OPTIONAL,
+ unit RSCUnit(0..1)
+ }
+
+ROI::= INTEGER(1..32)
+
+DBV::= Distance
+-- changes: from DDD_IO to DDD-IO
+DDD::= SEQUENCE{
+ dcj INTEGER(1..128) OPTIONAL,
+ dcr INTEGER(1..128)OPTIONAL,
+ tpl INTEGER(1..128)OPTIONAL,
+ ioList SEQUENCE (SIZE (1..8,...)) OF DDD-IO
+ }
+-- changes: from DDD_IO to DDD-IO
+DDD-IO::= SEQUENCE{
+ drn INTEGER(0..7),
+ dp SEQUENCE (SIZE (1..4,...)) OF DestinationPlace OPTIONAL,
+ dr SEQUENCE (SIZE (1..4,...)) OF DestinationRoad OPTIONAL,
+ rne INTEGER(1..999) OPTIONAL,
+ stnId INTEGER(1..999) OPTIONAL,
+ stnText UTF8String OPTIONAL,
+ dcp DistanceOrDuration OPTIONAL,
+ ddp DistanceOrDuration OPTIONAL
+ }
+-- changes: from DDD_DEP to DDD-DEP
+DestinationPlace::= SEQUENCE{
+ depType DDD-DEP,
+ -- Encoding problem: to be checked if the statement is ASN.1 compatible
+ -- depRSCode ISO14823Code (WITH COMPONENTS {..., attributes ABSENT}) OPTIONAL,
+ depRSCode ISO14823Code OPTIONAL,
+ depBlob OCTET STRING OPTIONAL,
+ plnId INTEGER(1..999) OPTIONAL,
+ plnText UTF8String OPTIONAL
+ }
+-- changes: from DDD_DER to DDD-DER
+DestinationRoad::=SEQUENCE{
+ derType DDD-DER,
+ ronId INTEGER(1..999) OPTIONAL,
+ ronText UTF8String OPTIONAL
+ }
+-- changes: from DDD_DER to DDD-DER
+DDD-DER::= 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, ...)
+-- changes: from DDD_DEP to DDD-DEP
+DDD-DEP::= 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, ...)
+
+
+
+END
+
diff --git a/epan/dissectors/asn1/its/ISO_TS_24534-3.asn b/epan/dissectors/asn1/its/ISO_TS_24534-3.asn
new file mode 100644
index 0000000000..80882fbae7
--- /dev/null
+++ b/epan/dissectors/asn1/its/ISO_TS_24534-3.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(2015)
+--
+-- Published version location:
+-- http://standards.iso.org/iso/24534/-3/
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+-- 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/epan/dissectors/asn1/its/ITS-Container.asn b/epan/dissectors/asn1/its/ITS-Container.asn
new file mode 100644
index 0000000000..17ec594e68
--- /dev/null
+++ b/epan/dissectors/asn1/its/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 (0..4398046511103) -- {utcStartOf2004(0), oneMillisecAfterUTCStartOf2004(1)} (0..4398046511103) PATCH
+
+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/epan/dissectors/asn1/its/TIS_TPG_Transactions_Descriptions.asn b/epan/dissectors/asn1/its/TIS_TPG_Transactions_Descriptions.asn
new file mode 100644
index 0000000000..dc5607b6f1
--- /dev/null
+++ b/epan/dissectors/asn1/its/TIS_TPG_Transactions_Descriptions.asn
@@ -0,0 +1,348 @@
+-- TIS-TPG Transactions message definitions
+-- ASN.1 Start Definition
+
+TIS-TPG-Transactions-Descriptions {
+itu-t (0) identified-organization (4) etsi (0) itsDomain (5)
+wg1 (1) i2vApplications (101556) tpms (2) transactions (1) version (1)}
+DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+IMPORTS
+ItsPduHeader, CauseCode, ReferencePosition, Speed, Heading, TimestampIts, StationID, PhoneNumber, OpeningDaysHours, DigitalMap -- PATCH
+FROM ITS-Container {
+ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (1)
+};
+
+
+
+-- Root Message PDU: TisTpgTransactionsPdu
+
+TisTpgTransactionsPdu ::= SEQUENCE {
+ header ItsPduHeader,
+ tisTpgTransaction TisTpgTransaction
+}
+
+TisTpgTransaction ::= CHOICE {
+ drm TisTpgDRM,
+ snm TisTpgSNM,
+ trm TisTpgTRM,
+ tcm TisTpgTCM,
+ vdrm TisTpgVDRM,
+ vdpm TisTpgVDPM,
+ eofm TisTpgEOFM
+}
+
+-- TisTpgDRM
+
+TisTpgDRM ::= SEQUENCE {
+ management TisTpgDRM-Management,
+ situation TisTpgDRM-Situation,
+ location TisTpgDRM-Location,
+ ...
+}
+
+TisTpgDRM-Management ::= SEQUENCE {
+ generationTime TimestampIts,
+ vehicleType UNVehicleClassifcation,
+ costumerContract CustomerContract OPTIONAL,
+ tisProfile TisProfile,
+ ...
+}
+
+TisTpgDRM-Situation ::= SEQUENCE {
+ causeCode CauseCode,
+ ...
+}
+
+TisTpgDRM-Location ::= SEQUENCE {
+ vehiclePosition ReferencePosition,
+ vehicleSpeed Speed,
+ vehicleHeading Heading,
+ requestedPosition ReferencePosition OPTIONAL,
+ searchRange SearchRange OPTIONAL,
+ searchCondition SearchCondition OPTIONAL,
+ ...
+}
+
+-- TisTpgSNM
+
+TisTpgSNM ::= SEQUENCE {
+ management TisTpgSNM-Management,
+ tpgContainer TpgNotifContainer
+}
+
+TisTpgSNM-Management ::= SEQUENCE {
+ generationTime TimestampIts,
+ totalTpgStations TotalTpgStations,
+ ...
+}
+
+-- TisTpgTRM
+
+TisTpgTRM ::= SEQUENCE {
+ management TisTpgTRM-Management,
+ situation TisTpgTRM-Situation OPTIONAL,
+ location TisTpgTRM-Location OPTIONAL,
+ ...
+}
+
+TisTpgTRM-Management ::= SEQUENCE {
+ generationTime TimestampIts,
+ vehicleType UNVehicleClassifcation,
+ tpgStationID StationID,
+ reservationStatus ReservationStatus,
+ costumercontract CustomerContract OPTIONAL,
+ reservationID ReservationID OPTIONAL,
+ ...
+}
+
+TisTpgTRM-Situation ::= SEQUENCE {
+ estArrivalTime TimestampIts,
+ proposedPairingID PairingID OPTIONAL
+}
+
+TisTpgTRM-Location ::= SEQUENCE {
+ vehiclePosition ReferencePosition,
+ vehicleSpeed Speed,
+ vehicleHeading Heading,
+ ...
+}
+
+-- TisTpgTCM
+
+TisTpgTCM ::= SEQUENCE {
+ management TisTpgTCM-Management,
+ situation TisTpgTCM-Situation OPTIONAL,
+ location TisTpgTCM-Location OPTIONAL,
+ ...
+}
+
+TisTpgTCM-Management ::= SEQUENCE {
+ generationTime TimestampIts,
+ tpgStationID StationID,
+ reservationStatus ReservationStatus,
+ reservedTpg INTEGER(1..65535) OPTIONAL,
+ costumercontract CustomerContract OPTIONAL,
+ reservationID ReservationID OPTIONAL,
+ tpgAutomationLevel TpgAutomation OPTIONAL,
+ ...
+}
+
+TisTpgTCM-Situation::= SEQUENCE {
+ pairingID PairingID OPTIONAL,
+ reservationTimeLimit TimestampIts,
+ cancellationCondition CancellationCondition OPTIONAL,
+ ...
+}
+
+TisTpgTCM-Location::= SEQUENCE {
+ tpgLocation ReferencePosition OPTIONAL,
+ address UTF8String(SIZE(1..128)) OPTIONAL,
+ ...
+}
+
+-- TisTpgVDRM
+
+TisTpgVDRM ::= SEQUENCE {
+ management TisTpgVDRM-Management,
+ ...
+}
+
+TisTpgVDRM-Management ::= SEQUENCE {
+ generationTime TimestampIts,
+ fillingStatus FillingStatus,
+ automationLevel TpgAutomation,
+ pairingID PairingID OPTIONAL,
+ ...
+}
+
+-- TisTpgVDPM
+
+TisTpgVDPM ::= SEQUENCE {
+ management TisTpgVDPM-Management,
+ placardTable PlacardTable,
+ vehicleSpecificData VehicleSpecificData OPTIONAL,
+ ...
+}
+
+TisTpgVDPM-Management ::= SEQUENCE {
+ generationTime TimestampIts,
+ tisProfile TisProfile OPTIONAL,
+ language Language,
+ vehicleType UNVehicleClassifcation,
+ tyreTempCondition TyreTempCondition,
+ fillingStatus FillingStatus,
+ pairingID PairingID OPTIONAL,
+ ...
+}
+
+VehicleSpecificData ::= SEQUENCE {
+ currentVehicleConfiguration PressureConfiguration,
+ frontLeftTyreData TyreData,
+ frontRightTyreData TyreData,
+ rearLeftTyreData TyreData,
+ rearRightTyreData TyreData,
+ spareTyreData TyreData,
+ ...
+}
+
+-- TisTpgEOFM
+
+TisTpgEOFM ::= SEQUENCE {
+ management TisTpgEOFM-Management,
+ ...
+}
+
+TisTpgEOFM-Management ::= SEQUENCE {
+ generationTime TimestampIts,
+ fillingStatus FillingStatus,
+ numberOfAppliedPressure NumberOfAppliedPressure,
+ appliedTyrePressures AppliedTyrePressures OPTIONAL,
+ pairingID PairingID OPTIONAL,
+ ...
+}
+
+PlacardTable ::= SEQUENCE(SIZE(0..15)) OF TyreSetVariant
+
+TyreSetVariant ::= SEQUENCE
+{
+ variantID TyreSetVariantID,
+ frontAxleDimension TyreSidewallInformation OPTIONAL,
+ rearAxleDimension TyreSidewallInformation OPTIONAL,
+ pressureVariantsList PressureVariantsList
+}
+
+PressureVariantsList ::= SEQUENCE(SIZE(1..15)) OF PressureVariant
+
+PressureVariant ::= SEQUENCE
+{
+ pressureConfiguration PressureConfiguration,
+ frontAxlePressure AxlePlacardPressure,
+ rearAxlePressure AxlePlacardPressure
+}
+
+TyreData ::= SEQUENCE
+{
+ currentTyrePressure CHOICE {
+ tyrePressureValue TyrePressure,
+ unavailable NULL
+ } OPTIONAL,
+ tyreSidewallInformation CHOICE {
+ tyreSidewallInformationValue TyreSidewallInformation,
+ unavailable NULL
+ } OPTIONAL,
+ currentInsideAirTemperature CHOICE {
+ tyreAirTemperatureValue TyreAirTemperature,
+ unavailable NULL
+ } OPTIONAL,
+ recommendedTyrePressure CHOICE {
+ axlePlacardPressureValue AxlePlacardPressure,
+ unavailable NULL
+ } OPTIONAL,
+ tin CHOICE {
+ tinValue TIN,
+ unavailable NULL
+ } OPTIONAL,
+ sensorState CHOICE {
+ sensorStateValue SensorState,
+ unavailable NULL
+ } OPTIONAL,
+ ...
+}
+
+AppliedTyrePressure ::= CHOICE {
+ tyrePressureValue TyrePressure,
+ unavailable NULL
+}
+
+TpgStationData ::= SEQUENCE {
+ tpgStationID StationID,
+ tpgAutomationLevel TpgAutomation,
+ tpgNumber TpgNumber,
+ tpgProvider TpgProvider,
+ tpgLocation ReferencePosition,
+ accessibility Accessibility,
+ address UTF8String(SIZE(1..128)) OPTIONAL,
+ phoneNumber PhoneNumber OPTIONAL,
+ digitalMap DigitalMap OPTIONAL,
+ openingDaysHours OpeningDaysHours OPTIONAL,
+ bookingInfo BookingInfo OPTIONAL,
+ availableTpgNumber AvailableTpgNumber OPTIONAL,
+ cancellationCondition CancellationCondition OPTIONAL,
+ ...
+}
+
+TyreSidewallInformation ::= BIT STRING (SIZE (60))
+
+CurrentVehicleConfiguration ::= BIT STRING (SIZE (9))
+
+AxlePlacardPressure ::= INTEGER { zero (0), fiveKPa (1) } (0..255)
+
+SensorState ::= INTEGER { malfunction(65534), unavailable(65535) } (0..65535)
+
+TyrePressure ::= INTEGER { invalid (0), lessThanOneBar (1), oneBar (2), oneBarPlusTwoAndHalfKPa (3), inflation (254), overflow(255) } (0..255)
+
+DriverLanguage ::= INTEGER {english (0), german (1), french (2), italian (3), spanish (4) } (0..15)
+
+TyreTempCondition ::= ENUMERATED {pressure-cold (0),pressure-warm (1), unavailable (2), ... }
+
+TyreAirTemperature ::= INTEGER { invalid (0), lessThanMinus50Celsius(1), minus50Celsius(2), minus49Celsius(3), zeroCelsius(52), overflowThreshold1(240), overflowThreshold2(241), overflowThreshold3(242), overflowThreshold4(243), overflowThreshold5(244), overflowThreshold6(245), overflowThreshold7(246), overflowThreshold8(247), overflowThreshold9(248), overflowThreshold10(249), overflowThreshold11(250), overflowThreshold12(251), overflowThreshold13(252), overflowThreshold14(253), overflowThreshold15(254), overflowThreshold16(255) } (0..255)
+
+TIN ::= BIT STRING (SIZE(64))
+
+PressureConfiguration ::= BIT STRING (SIZE (9))
+
+CustomerContract ::= IA5String(SIZE(1..32))
+
+ReservationStatus ::= ENUMERATED { reservationOK (0), noReservationService (1), noTpmsAvailable (2), ...}
+
+PairingID ::= INTEGER(0..9999)
+
+AppliedTyrePressures ::= SEQUENCE (SIZE(1..5)) OF AppliedTyrePressure
+
+SearchRange ::= INTEGER(0..255)
+
+TotalTpgStations ::= INTEGER(0..65535)
+
+TpgNotifContainer ::= SEQUENCE (SIZE(1..8)) OF TpgStationData
+
+-- DigitalMap ::= SEQUENCE (SIZE(1..256)) OF ReferencePosition PATCH
+
+TpgNumber ::= INTEGER(1..65535)
+
+TpgProvider ::= UTF8String (SIZE(1..32))
+
+TpgLocation ::= ReferencePosition
+
+Accessibility ::= UTF8String (SIZE(1..32))
+
+-- PhoneNumber ::= NumericString (SIZE(1..16)) PATCH
+
+-- OpeningDaysHours ::= UTF8String PATCH
+
+BookingInfo ::= UTF8String
+
+AvailableTpgNumber ::= INTEGER(1..65535)
+
+CancellationCondition ::= UTF8String (SIZE(1..32))
+
+TpgAutomation ::= BIT STRING {fullAutomated(0), semiAutomated(1), manual(2), reserved (3)} (SIZE(4))
+
+FillingStatus ::= INTEGER {requestVehicleData(0), sendVehicleData(1), started(2), fillingProcessFailed (3), fillingProcessCompleted (4) } (0..7)
+
+NumberOfAppliedPressure ::= INTEGER {oneAppliedPressure(1), twoAppliedPressure (2)} (1..5)
+
+UNVehicleClassifcation ::= INTEGER {reserved(0), categoryL1(1), categoryL2(2), categoryL3(3), categoryL4(4), categoryL5(5), categoryL6(6), categoryL7(7), categoryL8(8)} (0..63)
+
+SearchCondition ::= INTEGER {nearest(0), quickest(1), paylessRoad(2)} (0..7)
+
+TisProfile ::= BIT STRING {reserved(0),profileOne(1), profileTwo(2), profileThree(3)} (SIZE(8))
+
+ReservationID ::= UTF8String (SIZE(1..32))
+
+Language ::= BIT STRING (SIZE (10))
+
+TyreSetVariantID ::= INTEGER (0..15)
+
+END
diff --git a/epan/dissectors/asn1/its/its.cnf b/epan/dissectors/asn1/its/its.cnf
new file mode 100644
index 0000000000..805d027a58
--- /dev/null
+++ b/epan/dissectors/asn1/its/its.cnf
@@ -0,0 +1,1183 @@
+# its.cnf
+# Intelligent Transport Systems (ITS)
+
+#.OPT
+PER
+UNALIGNED
+#.END
+
+#.EXPORTS
+
+#.OMIT_ASSIGNMENT
+# Get rid of unused code warnings
+TisTpgTransactionsPdu
+DENM
+CAM
+SSEM
+SREM
+IVIM
+MAPEM
+SPATEM
+EV-RSR
+EvcsnPdu
+
+# Could be Language but size of Language bit string is 10 and DriverLanguage max is 15...
+DriverLanguage
+ChargingPower
+StatusResponseCode
+CurrentVehicleConfiguration
+TpgLocation
+CS5
+MessageFrame
+IVI
+DSRCmsgID
+#.NO_EMIT
+
+#.MODULE
+CAM-PDU-Descriptions cam
+DENM-PDU-Descriptions denm
+EVCSN-PDU-Descriptions evcsn
+EV-RechargingSpotReservation-PDU-Descriptions evrsr
+IVIM-PDU-Descriptions ivim
+TIS-TPG-Transactions-Descriptions tistpg
+SPATEM-PDU-Descriptions spatem
+MAPEM-PDU-Descriptions mapem
+SREM-PDU-Descriptions srem
+SSEM-PDU-Descriptions ssem
+AVIAEINumberingAndDataStructures anads
+ITS-Container its
+ElectronicRegistrationIdentificationVehicleDataModule erivdm
+CITSapplMgmtIDs csmid
+EfcDsrcApplication dsrc_app
+IVI ivi
+DSRC dsrc
+#.END
+
+#.PDU
+CoopAwareness
+DecentralizedEnvironmentalNotificationMessage
+EVChargingSpotNotificationPOIMessage
+EV-RSR-MessageBody
+TisTpgTransaction
+IviStructure
+SPAT
+MapData
+SignalRequestMessage
+SignalStatusMessage
+ItsPduHeader
+# AddGrpC regional extension
+ConnectionManeuverAssist-addGrpC
+ConnectionTrajectory-addGrpC
+Control-addGrpC
+IntersectionState-addGrpC
+MapData-addGrpC
+Position3D-addGrpC
+RestrictionUserType-addGrpC
+SignalStatusPackage-addGrpC
+
+#.TYPE_RENAME
+
+# GicPart
+GicPart/relevanceZoneIds T_GicPartRelevanceZoneIds
+GicPart/detectionZoneIds T_GicPartDetectionZoneIds
+GicPart/driverAwarenessZoneIds T_GicPartDriverAwarenessZoneIds
+GicPart/extraText T_GicPartExtraText
+
+TcPart/relevanceZoneIds T_TcPartRelevanceZoneIds
+TcPart/detectionZoneIds T_TcPartDetectionZoneIds
+TcPart/driverAwarenessZoneIds T_TcPartDriverAwarenessZoneIds
+TcPart/text T_TcPartText
+
+TractorCharacteristics/equalTo T_TractorCharactEqualTo
+TractorCharacteristics/notEqualTo T_TractorCharactNotEqualTo
+
+TrailerCharacteristics/equalTo T_TrailerCharactEqualTo
+TrailerCharacteristics/notEqualTo T_TrailerCharactNotEqualTo
+
+SPAT/regional T_SPATRegional
+SignalRequestMessage/regional T_SRMRegional
+SignalStatusMessage/regional T_SSMRegional
+MapData/regional T_MAPRegional
+AdvisorySpeed/regional T_AdvisorySpeedRegional
+ComputedLane/regional T_ComputedLaneRegional
+ConnectionManeuverAssist/regional T_ConnectionManeuverAssistRegional
+GenericLane/regional T_GenericLaneRegional
+IntersectionGeometry/regional T_IntersectionGeometryRegional
+IntersectionState/regional T_IntersectionStateRegional
+LaneDataAttribute/regional T_LaneDataAttributeRegional
+MovementEvent/regional T_MovementEventRegional
+MovementState/regional T_MovementStateRegional
+NodeAttributeSetXY/regional T_NodeAttributeSetXYRegional
+Position3D/regional T_Position3DRegional
+RequestorDescription/regional T_RequestorDescriptionRegional
+RestrictionUserType/regional T_RestrictionUserTypeRegional
+RoadSegment/regional T_RoadSegmentRegional
+SignalRequestPackage/regional T_SignalRequestPackageRegional
+SignalRequest/regional T_SignalRequestRegional
+SignalStatusPackage/regional T_SignalStatusPackageRegional
+SignalStatus/regional T_SignalStatusRegional
+#.END
+
+#.FIELD_RENAME
+TisTpgDRM/location drmLocation
+TisTpgTRM/location trmLocation
+TisTpgTCM/location tcmLocation
+
+TisTpgVDRM/management vdrmManagement
+TisTpgDRM/management drmManagement
+TisTpgEOFM/management eofmManagement
+TisTpgTCM/management tcmManagement
+TisTpgVDPM/management vdpmManagement
+TisTpgTRM/management trmManagement
+TisTpgSNM/management snmManagement
+
+TisTpgDRM/situation drmSituation
+TisTpgTRM/situation trmSituation
+TisTpgTCM/situation tcmSituation
+
+Distance/value dValue
+DistanceOrDuration/value dodValue
+Weight/value wValue
+AnyCatalogue/value acValue
+VcCode/value vcValue
+
+Ext1/content e1Content
+Ext2/content e2Content
+VarLengthNumber/content vlnContent
+
+Ext2/extension e1Extension
+Ext1/extension e2Extension
+VarLengthNumber/extension vlnExtension
+
+RSCode/layoutComponentId rscLayoutComponentId
+Text/layoutComponentId tLayoutComponentId
+LayoutComponent/layoutComponentId lcLayoutComponentId
+
+ISO14823Code/pictogramCode icPictogramCode
+AnyCatalogue/pictogramCode acPictogramCode
+
+VcCode/validity vcValidity
+LaneInformation/validity liValidity
+
+RoadSegmentReferenceID/id rsrId
+RoadSegment/id rsId
+RequestorDescription/id rdId
+SignalRequesterInfo/id sriId
+IntersectionGeometry/id igId
+IntersectionState/id isId
+SignalRequest/id srId
+SignalStatus/id ssId
+IntersectionReferenceID/id irId
+RestrictionClassAssignment/id scaId
+
+AdvisorySpeed/confidence asConfidence
+TimeChangeDetails/confidence tcdConfidence
+
+SPAT/intersections spatIntersections
+MapData/intersections mdIntersections
+
+RequestorPositionVector/position rpvPosition
+RequestorDescription/position rdPosition
+
+SPAT/regional spatRegional
+SignalRequestMessage/regional srmRegional
+SignalStatusMessage/regional ssmRegional
+MapData/regional mapRegional
+AdvisorySpeed/regional asRegional
+ComputedLane/regional clRegional
+ConnectionManeuverAssist/regional cmaRegional
+GenericLane/regional glRegional
+IntersectionGeometry/regional igRegional
+IntersectionState/regional isRegional
+LaneDataAttribute/regional ldaRegional
+MovementEvent/regional meRegional
+MovementState/regional msRegional
+NodeAttributeSetXY/regional nasxyRegional
+Position3D/regional p3dRegional
+RequestorDescription/regional rdRegional
+RestrictionUserType/regional rutRegional
+RoadSegment/regional rsRegional
+SignalRequestPackage/regional srpRegional
+SignalRequest/regional srRegional
+SignalStatusPackage/regional sspRegional
+SignalStatus/regional ssRegional
+
+LaneAttributes/regional laRegional
+NodeOffsetPointXY/regional nopxyRegional
+RequestorType/regional rtRegional
+
+SignalRequestPackage/request srpRequest
+SignalRequesterInfo/request sriRequest
+RequestorType/request rtRequest
+
+RegulatorySpeedLimit/speed rslSpeed
+TransmissionAndSpeed/speed tasSpeed
+RequestorPositionVector/speed rpvSpeed
+AdvisorySpeed/speed asSpeed
+
+IntersectionState/status isStatus
+SignalStatusPackage/status sspStatus
+SignalStatusMessage/status ssmStatus
+
+SPAT/timeStamp spatTimeStamp
+SignalRequestMessage/timeStamp srmTimeStamp
+SignalStatusMessage/timeStamp ssmTimeStamp
+MapData/timeStamp mdTimeStamp
+IntersectionState/timeStamp isTimeStamp
+
+AdvisorySpeed/type asType
+RegulatorySpeedLimit/type rslType
+RequestorDescription/type rdType
+
+TcPart/detectionZoneIds tpDetectionZoneIds
+TcPart/driverAwarenessZoneIds tpDriverAwarenessZoneIds
+TcPart/relevanceZoneIds tpRelevanceZoneIds
+
+GicPart/detectionZoneIds gpDetectionZoneIds
+GicPart/driverAwarenessZoneIds gpDriverAwarenessZoneIds
+GicPart/relevanceZoneIds gpRelevanceZoneIds
+
+TractorCharacteristics/equalTo toEqualTo
+TractorCharacteristics/notEqualTo toNotEqualTo
+
+TrailerCharacteristics/equalTo teEqualTo
+TrailerCharacteristics/notEqualTo teNotEqualTo
+
+Node-XY-20b/x n20bX
+Node-XY-22b/x n22bX
+Node-XY-24b/x n24bX
+Node-XY-26b/x n26bX
+Node-XY-28b/x n28bX
+Node-XY-32b/x n32bX
+
+Node-XY-20b/y n20bY
+Node-XY-22b/y n22bY
+Node-XY-24b/y n24bY
+Node-XY-26b/y n26bY
+Node-XY-28b/y n28bY
+Node-XY-32b/y n32bY
+
+
+#.END
+
+#.MAKE_DEFINES
+ItsPduHeader/messageID
+#.END
+
+#.MAKE_ENUM
+RegionId
+CauseCodeType
+
+#.FN_HDR CoopAwareness
+ actx->private_data = (void*)wmem_new0(wmem_packet_scope(), its_private_data_t);
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "CAM");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "CAM");
+#.END
+
+#.FN_HDR DecentralizedEnvironmentalNotificationMessage
+ actx->private_data = (void*)wmem_new0(wmem_packet_scope(), its_private_data_t);
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "DENM");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "DENM");
+#.END
+
+#.FN_HDR EVChargingSpotNotificationPOIMessage
+ actx->private_data = (void*)wmem_new0(wmem_packet_scope(), its_private_data_t);
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "EVCSN");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "EVCSN");
+#.END
+
+#.FN_HDR EV-RSR-MessageBody
+ actx->private_data = (void*)wmem_new0(wmem_packet_scope(), its_private_data_t);
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "EV-RSR");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "EV-RSR");
+#.END
+
+#.FN_HDR TisTpgTransaction
+ actx->private_data = (void*)wmem_new0(wmem_packet_scope(), its_private_data_t);
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "TISTPG");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "TISTPG");
+#.END
+
+#.FN_HDR IviStructure
+ actx->private_data = (void*)wmem_new0(wmem_packet_scope(), its_private_data_t);
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "IVIM");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "IVIM");
+#.END
+
+#.FN_HDR SignalStatusMessage
+ its_private_data_t *regext = wmem_new0(wmem_packet_scope(), its_private_data_t);
+ actx->private_data = (void*)regext;
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "SSEM");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "SSEM");
+ regext->type = Reg_SignalStatusMessage;
+#.END
+
+#.FN_HDR SignalRequestMessage
+ its_private_data_t *regext = wmem_new0(wmem_packet_scope(), its_private_data_t);
+ actx->private_data = (void*)regext;
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "SREM");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "SREM");
+ regext->type = Reg_SignalRequestMessage;
+#.END
+
+#.FN_HDR MapData
+ its_private_data_t *regext = wmem_new0(wmem_packet_scope(), its_private_data_t);
+ actx->private_data = (void*)regext;
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "MAPEM");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "MAPEM");
+ regext->type = Reg_MapData;
+#.END
+
+#.FN_HDR SPAT
+ its_private_data_t *regext = wmem_new0(wmem_packet_scope(), its_private_data_t);
+ actx->private_data = (void*)regext;
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "SPATEM");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "SPATEM");
+ regext->type = Reg_SPAT;
+#.END
+
+
+#.FN_HDR ConnectionManeuverAssist-addGrpC
+ actx->private_data = wmem_new0(wmem_packet_scope(), its_private_data_t);
+#.END
+
+
+#.FN_HDR ConnectionTrajectory-addGrpC
+ actx->private_data = wmem_new0(wmem_packet_scope(), its_private_data_t);
+#.END
+
+
+#.FN_HDR Control-addGrpC
+ actx->private_data = wmem_new0(wmem_packet_scope(), its_private_data_t);
+#.END
+
+
+#.FN_HDR IntersectionState-addGrpC
+ actx->private_data = wmem_new0(wmem_packet_scope(), its_private_data_t);
+#.END
+
+
+#.FN_HDR MapData-addGrpC
+ actx->private_data = wmem_new0(wmem_packet_scope(), its_private_data_t);
+#.END
+
+
+#.FN_HDR Position3D-addGrpC
+ actx->private_data = wmem_new0(wmem_packet_scope(), its_private_data_t);
+#.END
+
+
+#.FN_HDR RestrictionUserType-addGrpC
+ actx->private_data = wmem_new0(wmem_packet_scope(), its_private_data_t);
+#.END
+
+
+#.FN_HDR SignalStatusPackage-addGrpC
+ actx->private_data = wmem_new0(wmem_packet_scope(), its_private_data_t);
+#.END
+
+
+#.FN_HDR AdvisorySpeed
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_AdvisorySpeed;
+#.END
+#.FN_FTR AdvisorySpeed
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR ComputedLane
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_ComputedLane;
+#.END
+#.FN_FTR ComputedLane
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR ConnectionManeuverAssist
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_ConnectionManeuverAssist;
+#.END
+#.FN_FTR ConnectionManeuverAssist
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR GenericLane
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_GenericLane;
+#.END
+#.FN_FTR GenericLane
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR IntersectionGeometry
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_IntersectionGeometry;
+#.END
+#.FN_FTR IntersectionGeometry
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR IntersectionState
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_IntersectionState;
+#.END
+#.FN_FTR IntersectionState
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR LaneAttributes
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_LaneAttributes;
+#.END
+#.FN_FTR LaneAttributes
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR LaneDataAttribute
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_LaneDataAttribute;
+#.END
+#.FN_FTR LaneDataAttribute
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR MovementEvent
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_MovementEvent;
+#.END
+#.FN_FTR MovementEvent
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR MovementState
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_MovementState;
+#.END
+#.FN_FTR MovementState
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR NodeAttributeSetXY
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_NodeAttributeSetXY;
+#.END
+#.FN_FTR NodeAttributeSetXY
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR NodeOffsetPointXY
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_NodeOffsetPointXY;
+#.END
+#.FN_FTR NodeOffsetPointXY
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR Position3D
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_Position3D;
+#.END
+#.FN_FTR Position3D
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR RequestorDescription
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_RequestorDescription;
+#.END
+#.FN_FTR RequestorDescription
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR RequestorType
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_RequestorType;
+#.END
+#.FN_FTR RequestorType
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR RestrictionUserType
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_RestrictionUserType;
+#.END
+#.FN_FTR RestrictionUserType
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR RoadSegment
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_RoadSegment;
+#.END
+#.FN_FTR RoadSegment
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR SignalRequestPackage
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_SignalRequestPackage;
+#.END
+#.FN_FTR SignalRequestPackage
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR SignalRequest
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_SignalRequest;
+#.END
+#.FN_FTR SignalRequest
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR SignalStatusPackage
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_SignalStatusPackage;
+#.END
+#.FN_FTR SignalStatusPackage
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR SignalStatus
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_SignalStatus;
+#.END
+#.FN_FTR SignalStatus
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+
+#.FN_HDR SignalControlZone
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_SignalControlZone;
+#.END
+#.FN_FTR SignalControlZone
+ ((its_private_data_t*)actx->private_data)->type = save;
+#.END
+
+#.FN_PARS RegionId VAL_PTR = &((its_private_data_t*)actx->private_data)->region_id
+
+#.FN_PARS ItsPduHeader/protocolVersion VAL_PTR = &((its_header_t*)actx->private_data)->version
+#.FN_PARS ItsPduHeader/messageID VAL_PTR = &((its_header_t*)actx->private_data)->msgId
+#.FN_PARS StationID VAL_PTR = actx->private_data?&((its_header_t*)actx->private_data)->stationId:NULL
+
+#.FN_BODY ItsPduHeader
+ guint8 version = tvb_get_guint8(tvb, 0);
+ if ((offset = dissector_try_uint(its_version_subdissector_table, version, tvb, actx->pinfo, tree))) {
+ return offset;
+ }
+ // Lets try it that way, regarless of version value...
+ its_header_t *hdr = wmem_new0(wmem_packet_scope(), its_header_t);
+ actx->private_data = (void*)hdr;
+%(DEFAULT_BODY)s
+ tap_queue_packet(its_tap, actx->pinfo, actx->private_data);
+ tvbuff_t *next_tvb = tvb_new_subset_length(tvb, (offset+7)>>3, -1);
+ if (!dissector_try_uint(its_msgid_subdissector_table, (hdr->version << 16)+hdr->msgId, next_tvb, actx->pinfo, tree)) {
+ call_data_dissector(next_tvb, actx->pinfo, tree);
+ }
+#.END
+
+#.ASSIGN_VALUE_TO_TYPE # ISO_TS_19091_DSRC ASN.1 does not have constants assigned to types
+
+#RegionId
+noRegion RegionId
+addGrpA RegionId
+addGrpB RegionId
+addGrpC RegionId
+
+#.END
+
+#.REGISTER
+# Not used due to "protocol" detection issue: we shall register for its subdissector not dsrc
+#.END
+
+#.FN_PARS RegionalExtension/regExtValue FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_regextval_pdu
+
+#.FN_BODY ChargingSpotType VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields0[] = { // CHECKED
+ &hf_evcsn_ChargingSpotType_standardChargeMode1,
+ &hf_evcsn_ChargingSpotType_standardChargeMode2,
+ &hf_evcsn_ChargingSpotType_standardOrFastChargeMode3,
+ &hf_evcsn_ChargingSpotType_fastChargeWithExternalCharger,
+ NULL
+ };
+ const gint *fields1[] = { // CHECKED
+ &hf_evcsn_ChargingSpotType_quickDrop,
+ &hf_evcsn_ChargingSpotType_inductiveChargeWhileStationary,
+ &hf_evcsn_ChargingSpotType_inductiveChargeWhileDriving,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_evcsn_ChargingSpotType);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields0, ENC_BIG_ENDIAN);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 1, 1, fields1, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY SupportedPaymentTypes VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_evrsr_SupportedPaymentTypes_contract,
+ &hf_evrsr_SupportedPaymentTypes_externalIdentification,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_evrsr_SupportedPaymentTypes);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY PMD VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields[] = {
+ &hf_ivi_PMD_national_holiday,
+ &hf_ivi_PMD_even_days,
+ &hf_ivi_PMD_odd_days,
+ &hf_ivi_PMD_market_day,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_ivi_PMD);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 2, fields, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY TpgAutomation VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_tistpg_TpgAutomation_fullAutomated,
+ &hf_tistpg_TpgAutomation_semiAutomated,
+ &hf_tistpg_TpgAutomation_manual,
+ &hf_tistpg_TpgAutomation_reserved,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_tistpg_TpgAutomation);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY AccelerationControl VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_its_AccelerationControl_brakePedalEngaged,
+ &hf_its_AccelerationControl_gasPedalEngaged,
+ &hf_its_AccelerationControl_emergencyBrakeEngaged,
+ &hf_its_AccelerationControl_collisionWarningEngaged,
+ &hf_its_AccelerationControl_accEngaged,
+ &hf_its_AccelerationControl_cruiseControlEngaged,
+ &hf_its_AccelerationControl_speedLimiterEngaged,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_its_AccelerationControl);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY LaneAttributes-Barrier VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields0[] = { // CHECKED
+ &hf_dsrc_LaneAttributes_Barrier_median_RevocableLane,
+ &hf_dsrc_LaneAttributes_Barrier_median,
+ &hf_dsrc_LaneAttributes_Barrier_whiteLineHashing,
+ &hf_dsrc_LaneAttributes_Barrier_stripedLines,
+ &hf_dsrc_LaneAttributes_Barrier_doubleStripedLines,
+ &hf_dsrc_LaneAttributes_Barrier_trafficCones,
+ &hf_dsrc_LaneAttributes_Barrier_constructionBarrier,
+ &hf_dsrc_LaneAttributes_Barrier_trafficChannels,
+ NULL
+ };
+ const gint *fields1[] = { // CHECKED
+ &hf_dsrc_LaneAttributes_Barrier_lowCurbs,
+ &hf_dsrc_LaneAttributes_Barrier_highCurbs,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_LaneAttributes_Barrier);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields0, ENC_BIG_ENDIAN);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 1, 1, fields1, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY TisProfile VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_tistpg_TisProfile_reserved,
+ &hf_tistpg_TisProfile_profileOne,
+ &hf_tistpg_TisProfile_profileTwo,
+ &hf_tistpg_TisProfile_profileThree,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_tistpg_TisProfile);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY LaneAttributes-Vehicle VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_dsrc_LaneAttributes_Vehicle_isVehicleRevocableLane,
+ &hf_dsrc_LaneAttributes_Vehicle_isVehicleFlyOverLane,
+ &hf_dsrc_LaneAttributes_Vehicle_hovLaneUseOnly,
+ &hf_dsrc_LaneAttributes_Vehicle_restrictedToBusUse,
+ &hf_dsrc_LaneAttributes_Vehicle_restrictedToTaxiUse,
+ &hf_dsrc_LaneAttributes_Vehicle_restrictedFromPublicUse,
+ &hf_dsrc_LaneAttributes_Vehicle_hasIRbeaconCoverage,
+ &hf_dsrc_LaneAttributes_Vehicle_permissionOnRequest,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_LaneAttributes_Vehicle);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY LightBarSirenInUse VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_its_LightBarSirenInUse_lightBarActivated,
+ &hf_its_LightBarSirenInUse_sirenActivated,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_its_LightBarSirenInUse);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY LaneAttributes-TrackedVehicle VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_dsrc_LaneAttributes_TrackedVehicle_spec_RevocableLane,
+ &hf_dsrc_LaneAttributes_TrackedVehicle_spec_commuterRailRoadTrack,
+ &hf_dsrc_LaneAttributes_TrackedVehicle_spec_lightRailRoadTrack,
+ &hf_dsrc_LaneAttributes_TrackedVehicle_spec_heavyRailRoadTrack,
+ &hf_dsrc_LaneAttributes_TrackedVehicle_spec_otherRailType,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_LaneAttributes_TrackedVehicle);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY DayOfWeek VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_ivi_DayOfWeek_unused,
+ &hf_ivi_DayOfWeek_monday,
+ &hf_ivi_DayOfWeek_tuesday,
+ &hf_ivi_DayOfWeek_wednesday,
+ &hf_ivi_DayOfWeek_thursday,
+ &hf_ivi_DayOfWeek_friday,
+ &hf_ivi_DayOfWeek_saturday,
+ &hf_ivi_DayOfWeek_sunday,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_ivi_DayOfWeek);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY EnergyStorageType VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_its_EnergyStorageType_hydrogenStorage,
+ &hf_its_EnergyStorageType_electricEnergyStorage,
+ &hf_its_EnergyStorageType_liquidPropaneGas,
+ &hf_its_EnergyStorageType_compressedNaturalGas,
+ &hf_its_EnergyStorageType_diesel,
+ &hf_its_EnergyStorageType_gasoline,
+ &hf_its_EnergyStorageType_ammonia,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_its_EnergyStorageType);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY EmergencyPriority VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_its_EmergencyPriority_requestForRightOfWay,
+ &hf_its_EmergencyPriority_requestForFreeCrossingAtATrafficLight,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_its_EmergencyPriority);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY IntersectionStatusObject VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields0[] = { // CHECKED
+ &hf_dsrc_IntersectionStatusObject_manualControlIsEnabled,
+ &hf_dsrc_IntersectionStatusObject_stopTimeIsActivated,
+ &hf_dsrc_IntersectionStatusObject_failureFlash,
+ &hf_dsrc_IntersectionStatusObject_preemptIsActive,
+ &hf_dsrc_IntersectionStatusObject_signalPriorityIsActive,
+ &hf_dsrc_IntersectionStatusObject_fixedTimeOperation,
+ &hf_dsrc_IntersectionStatusObject_trafficDependentOperation,
+ &hf_dsrc_IntersectionStatusObject_standbyOperation,
+ NULL
+ };
+ const gint *fields1[] = { // CHECKED
+ &hf_dsrc_IntersectionStatusObject_failureMode,
+ &hf_dsrc_IntersectionStatusObject_off,
+ &hf_dsrc_IntersectionStatusObject_recentMAPmessageUpdate,
+ &hf_dsrc_IntersectionStatusObject_recentChangeInMAPassignedLanesIDsUsed,
+ &hf_dsrc_IntersectionStatusObject_noValidMAPisAvailableAtThisTime,
+ &hf_dsrc_IntersectionStatusObject_noValidSPATisAvailableAtThisTime,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_IntersectionStatusObject);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields0, ENC_BIG_ENDIAN);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 1, 1, fields1, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY AllowedManeuvers VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields0[] = { // CHECKED
+ &hf_dsrc_AllowedManeuvers_maneuverStraightAllowed,
+ &hf_dsrc_AllowedManeuvers_maneuverLeftAllowed,
+ &hf_dsrc_AllowedManeuvers_maneuverRightAllowed,
+ &hf_dsrc_AllowedManeuvers_maneuverUTurnAllowed,
+ &hf_dsrc_AllowedManeuvers_maneuverLeftTurnOnRedAllowed,
+ &hf_dsrc_AllowedManeuvers_maneuverRightTurnOnRedAllowed,
+ &hf_dsrc_AllowedManeuvers_maneuverLaneChangeAllowed,
+ &hf_dsrc_AllowedManeuvers_maneuverNoStoppingAllowed,
+ NULL
+ };
+ const gint *fields1[] = { // CHECKED
+ &hf_dsrc_AllowedManeuvers_yieldAllwaysRequired,
+ &hf_dsrc_AllowedManeuvers_goWithHalt,
+ &hf_dsrc_AllowedManeuvers_caution,
+ &hf_dsrc_AllowedManeuvers_reserved1,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_AllowedManeuvers);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields0, ENC_BIG_ENDIAN);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 1, 1, fields1, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY LaneAttributes-Crosswalk VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields0[] = { // CHECKED
+ &hf_dsrc_LaneAttributes_Crosswalk_crosswalkRevocableLane,
+ &hf_dsrc_LaneAttributes_Crosswalk_bicyleUseAllowed,
+ &hf_dsrc_LaneAttributes_Crosswalk_isXwalkFlyOverLane,
+ &hf_dsrc_LaneAttributes_Crosswalk_fixedCycleTime,
+ &hf_dsrc_LaneAttributes_Crosswalk_biDirectionalCycleTimes,
+ &hf_dsrc_LaneAttributes_Crosswalk_hasPushToWalkButton,
+ &hf_dsrc_LaneAttributes_Crosswalk_audioSupport,
+ &hf_dsrc_LaneAttributes_Crosswalk_rfSignalRequestPresent,
+ NULL
+ };
+ const gint *fields1[] = { // CHECKED
+ &hf_dsrc_LaneAttributes_Crosswalk_unsignalizedSegmentsPresent,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_LaneAttributes_Crosswalk);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields0, ENC_BIG_ENDIAN);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 1, 1, fields1, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY LaneDirection VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_dsrc_LaneDirection_ingressPath,
+ &hf_dsrc_LaneDirection_egressPath,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_LaneDirection);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY LaneAttributes-Bike VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_dsrc_LaneAttributes_Bike_bikeRevocableLane,
+ &hf_dsrc_LaneAttributes_Bike_pedestrianUseAllowed,
+ &hf_dsrc_LaneAttributes_Bike_isBikeFlyOverLane,
+ &hf_dsrc_LaneAttributes_Bike_fixedCycleTime,
+ &hf_dsrc_LaneAttributes_Bike_biDirectionalCycleTimes,
+ &hf_dsrc_LaneAttributes_Bike_isolatedByBarrier,
+ &hf_dsrc_LaneAttributes_Bike_unsignalizedSegmentsPresent,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_LaneAttributes_Bike);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY LaneAttributes-Parking VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_dsrc_LaneAttributes_Parking_parkingRevocableLane,
+ &hf_dsrc_LaneAttributes_Parking_parallelParkingInUse,
+ &hf_dsrc_LaneAttributes_Parking_headInParkingInUse,
+ &hf_dsrc_LaneAttributes_Parking_doNotParkZone,
+ &hf_dsrc_LaneAttributes_Parking_parkingForBusUse,
+ &hf_dsrc_LaneAttributes_Parking_parkingForTaxiUse,
+ &hf_dsrc_LaneAttributes_Parking_noPublicParkingUse,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_LaneAttributes_Parking);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY ExteriorLights VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_its_ExteriorLights_lowBeamHeadlightsOn,
+ &hf_its_ExteriorLights_highBeamHeadlightsOn,
+ &hf_its_ExteriorLights_leftTurnSignalOn,
+ &hf_its_ExteriorLights_rightTurnSignalOn,
+ &hf_its_ExteriorLights_daytimeRunningLightsOn,
+ &hf_its_ExteriorLights_reverseLightOn,
+ &hf_its_ExteriorLights_fogLightOn,
+ &hf_its_ExteriorLights_parkingLightsOn,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_its_ExteriorLights);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY LaneAttributes-Striping VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_dsrc_LaneAttributes_Striping_stripeToConnectingLanesRevocableLane,
+ &hf_dsrc_LaneAttributes_Striping_stripeDrawOnLeft,
+ &hf_dsrc_LaneAttributes_Striping_stripeDrawOnRight,
+ &hf_dsrc_LaneAttributes_Striping_stripeToConnectingLanesLeft,
+ &hf_dsrc_LaneAttributes_Striping_stripeToConnectingLanesRight,
+ &hf_dsrc_LaneAttributes_Striping_stripeToConnectingLanesAhead,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_LaneAttributes_Striping);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY LaneSharing VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields0[] = { // CHECKED
+ &hf_dsrc_LaneSharing_overlappingLaneDescriptionProvided,
+ &hf_dsrc_LaneSharing_multipleLanesTreatedAsOneLane,
+ &hf_dsrc_LaneSharing_otherNonMotorizedTrafficTypes,
+ &hf_dsrc_LaneSharing_individualMotorizedVehicleTraffic,
+ &hf_dsrc_LaneSharing_busVehicleTraffic,
+ &hf_dsrc_LaneSharing_taxiVehicleTraffic,
+ &hf_dsrc_LaneSharing_pedestriansTraffic,
+ &hf_dsrc_LaneSharing_cyclistVehicleTraffic,
+ NULL
+ };
+ const gint *fields1[] = { // CHECKED
+ &hf_dsrc_LaneSharing_trackedVehicleTraffic,
+ &hf_dsrc_LaneSharing_pedestrianTraffic,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_LaneSharing);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields0, ENC_BIG_ENDIAN);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 1, 1, fields1, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY TransitVehicleStatus VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_dsrc_TransitVehicleStatus_loading,
+ &hf_dsrc_TransitVehicleStatus_anADAuse,
+ &hf_dsrc_TransitVehicleStatus_aBikeLoad,
+ &hf_dsrc_TransitVehicleStatus_doorOpen,
+ &hf_dsrc_TransitVehicleStatus_charging,
+ &hf_dsrc_TransitVehicleStatus_atStopLine,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_TransitVehicleStatus);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY LaneAttributes-Sidewalk VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_dsrc_LaneAttributes_Sidewalk_sidewalk_RevocableLane,
+ &hf_dsrc_LaneAttributes_Sidewalk_bicyleUseAllowed,
+ &hf_dsrc_LaneAttributes_Sidewalk_isSidewalkFlyOverLane,
+ &hf_dsrc_LaneAttributes_Sidewalk_walkBikes,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_LaneAttributes_Sidewalk);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY PositionOfOccupants VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields0[] = { // CHECKED
+ &hf_its_PositionOfOccupants_row1LeftOccupied,
+ &hf_its_PositionOfOccupants_row1RightOccupied,
+ &hf_its_PositionOfOccupants_row1MidOccupied,
+ &hf_its_PositionOfOccupants_row1NotDetectable,
+ &hf_its_PositionOfOccupants_row1NotPresent,
+ &hf_its_PositionOfOccupants_row2LeftOccupied,
+ &hf_its_PositionOfOccupants_row2RightOccupied,
+ &hf_its_PositionOfOccupants_row2MidOccupied,
+ NULL
+ };
+ const gint *fields1[] = { // CHECKED
+ &hf_its_PositionOfOccupants_row2NotDetectable,
+ &hf_its_PositionOfOccupants_row2NotPresent,
+ &hf_its_PositionOfOccupants_row3LeftOccupied,
+ &hf_its_PositionOfOccupants_row3RightOccupied,
+ &hf_its_PositionOfOccupants_row3MidOccupied,
+ &hf_its_PositionOfOccupants_row3NotDetectable,
+ &hf_its_PositionOfOccupants_row3NotPresent,
+ &hf_its_PositionOfOccupants_row4LeftOccupied,
+ NULL
+ };
+ const gint *fields2[] = { // CHECKED
+ &hf_its_PositionOfOccupants_row4RightOccupied,
+ &hf_its_PositionOfOccupants_row4MidOccupied,
+ &hf_its_PositionOfOccupants_row4NotDetectable,
+ &hf_its_PositionOfOccupants_row4NotPresent,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_its_PositionOfOccupants);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields0, ENC_BIG_ENDIAN);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 1, 1, fields1, ENC_BIG_ENDIAN);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 2, 1, fields2, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY SpecialTransportType VAL_PTR=&parameter_tvb
+ tvbuff_t *parameter_tvb = NULL;
+%(DEFAULT_BODY)s
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_its_SpecialTransportType_heavyLoad,
+ &hf_its_SpecialTransportType_excessWidth,
+ &hf_its_SpecialTransportType_excessLength,
+ &hf_its_SpecialTransportType_excessHeight,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_its_SpecialTransportType);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+#.FN_BODY TypeOfReceptacle VAL_PTR=&parameter_tvb LEN_PTR=&len
+ tvbuff_t *parameter_tvb = NULL;
+ int len;
+%(DEFAULT_BODY)s
+ /* TODO Provide values?
+ * See ETSI TS 101 556-1 V1.1.1 Annex B Description for data elements
+ * Table B.2: Coding of the type of receptacle field
+ *
+ * Code Charging Standard plug / Type of Nb of Maximum Maximum
+ * spot type cable current phases Voltage Current
+ * -------------------------------------------------------------------------
+ * 0000 Socket IEC 62196-2 type 1 AC Single 240V 16A
+ * 0001 Socket IEC 62196-2 type 1 AC Single 240V 32A
+ * 0010 Socket IEC 62196-2 type 1 AC Single 240V 80A
+ * 0011 Socket IEC 62196-2 type 1 AC Single 120V 12A
+ * 0100 Socket IEC 62196-2 type 1 AC Single 120V 16A
+ * 0101 Socket Standard Household AC Single 250V 16A
+ * 0110 Socket Standard Household AC Single 480V 16A
+ * 0111 Socket IEC 62196-2 type 2 AC Single 230V 16A
+ * 1000 Socket IEC 62196-2 type 2 AC Single 250V 32A
+ * 1001 Socket IEC 62196-2 type 2 AC Single 480V 32A
+ * 1010 Socket IEC 62196-2 type 2 AC Single 400V 32/250A
+ * 1011 Socket IEC 62196-2 type 3A AC Single 250V 32A
+ * 1100 Socket IEC 62196-2 type 3B AC Single 480V 32A
+ * 1101 Socket Reserved for Future AC Single 1000V 400A
+ IEC 62196-3
+ * 1110 Cable for Reserved
+ DC charging
+ * 1111 Cable for Reserved
+ DC charging
+ */
+
+#.NO_EMIT WITH_VALS
+#.END
+
+#.NO_EMIT ONLY_VALS
+#.END
+
+#.NO_EMIT WITHOUT_VALS
+# Just keep the vals. hf are made manually and used in cause/subcause decoding
+PostCrashSubCauseCode
+VehicleBreakdownSubCauseCode
+DangerousSituationSubCauseCode
+DangerousEndOfQueueSubCauseCode
+RescueAndRecoveryWorkInProgressSubCauseCode
+SignalViolationSubCauseCode
+CollisionRiskSubCauseCode
+HazardousLocation-AnimalOnTheRoadSubCauseCode
+HazardousLocation-ObstacleOnTheRoadSubCauseCode
+HazardousLocation-SurfaceConditionSubCauseCode
+HazardousLocation-DangerousCurveSubCauseCode
+EmergencyVehicleApproachingSubCauseCode
+HumanProblemSubCauseCode
+StationaryVehicleSubCauseCode
+SlowVehicleSubCauseCode
+AdverseWeatherCondition-PrecipitationSubCauseCode
+AdverseWeatherCondition-VisibilitySubCauseCode
+AdverseWeatherCondition-AdhesionSubCauseCode
+AdverseWeatherCondition-ExtremeWeatherConditionSubCauseCode
+WrongWayDrivingSubCauseCode
+HumanPresenceOnTheRoadSubCauseCode
+AccidentSubCauseCode
+TrafficConditionSubCauseCode
+#.END
+
+#.FN_PARS CauseCodeType VAL_PTR = &((its_private_data_t*)actx->private_data)->cause_code
+
+#.FN_BODY SubCauseCodeType
+ // Overwrite hf_index
+ hf_index = *find_subcause_from_cause((CauseCodeType_enum) ((its_private_data_t*)actx->private_data)->cause_code);
+%(DEFAULT_BODY)s
+
diff --git a/epan/dissectors/asn1/its/packet-its-template.c b/epan/dissectors/asn1/its/packet-its-template.c
new file mode 100644
index 0000000000..28948ae361
--- /dev/null
+++ b/epan/dissectors/asn1/its/packet-its-template.c
@@ -0,0 +1,447 @@
+/* packet-its-template.c
+ *
+ * Intelligent Transport Systems Applications dissectors
+ * Coyright 2018, C. Guerber <cguerber@yahoo.com>
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+/*
+ * Implemented:
+ * CA (CAM) ETSI EN 302 637-2
+ * DEN (DENM) ETSI EN 302 637-3
+ * RLT (MAPEM) ETSI TS 103 301
+ * TLM (SPATEM) ETSI TS 103 301
+ * IVI (IVIM) ETSI TS 103 301
+ * TLC (SREM) ETSI TS 103 301
+ * TLC (SSEM) ETSI TS 103 301
+ * EVCSN POI (EVCSN POI message) ETSI TS 101 556-1
+ * TPG (TRM, TCM, VDRM, VDPM, EOFM) ETSI TS 101 556-2
+ * Charging (EV-RSR, SRM, SCM) ETSI TS 101 556-3
+ *
+ * Not supported:
+ * SA (SAEM) ETSI TS 102 890-1
+ * GPC (RTCMEM) ETSI TS 103 301
+ * CTL (CTLM) ETSI TS 102 941
+ * CRL (CRLM) ETSI TS 102 941
+ * Certificate request ETSI TS 102 941
+ */
+#include "config.h"
+
+#include <epan/packet.h>
+#include <epan/expert.h>
+#include <epan/decode_as.h>
+#include <epan/proto_data.h>
+#include <epan/exceptions.h>
+#include <epan/conversation.h>
+#include <epan/tap.h>
+#include <wsutil/utf8_entities.h>
+#include "packet-ber.h"
+#include "packet-per.h"
+
+#include "packet-its.h"
+
+/*
+ * Well Known Ports definitions as per:
+ *
+ * ETSI TS 103 248 v1.2.1 (2018-08)
+ * Intelligent Transport Systems (ITS);
+ * GeoNetworking;
+ * Port Numbers for the Basic Transport Protocol (BTP)
+ *
+ * BTP port Facilities service Related standard
+ * number or Application
+ * values
+ * 2001 CA (CAM) ETSI EN 302 637-2
+ * 2002 DEN (DENM) ETSI EN 302 637-3
+ * 2003 RLT (MAPEM) ETSI TS 103 301
+ * 2004 TLM (SPATEM) ETSI TS 103 301
+ * 2005 SA (SAEM) ETSI TS 102 890-1
+ * 2006 IVI (IVIM) ETSI TS 103 301
+ * 2007 TLC (SREM) ETSI TS 103 301
+ * 2008 TLC (SSEM) ETSI TS 103 301
+ * 2009 Allocated Allocated for "Intelligent Transport
+ * System (ITS); Vehicular Communications;
+ * Basic Set of Applications; Specification
+ * of the Collective Perception Service"
+ * 2010 EVCSN POI (EVCSN POI ETSI TS 101 556-1
+ * message)
+ * 2011 TPG (TRM, TCM, VDRM, ETSI TS 101 556-2
+ * VDPM, EOFM)
+ * 2012 Charging (EV-RSR, ETSI TS 101 556-3
+ * SRM, SCM)
+ * 2013 GPC (RTCMEM) ETSI TS 103 301
+ * 2014 CTL (CTLM) ETSI TS 102 941
+ * 2015 CRL (CRLM) ETSI TS 102 941
+ * 2016 Certificate request ETSI TS 102 941
+ */
+
+// Applications Well Known Ports
+#define ITS_WKP_CA 2001
+#define ITS_WKP_DEN 2002
+#define ITS_WKP_RLT 2003
+#define ITS_WKP_TLM 2004
+#define ITS_WKP_SA 2005
+#define ITS_WKP_IVI 2006
+#define ITS_WKP_TLC_SREM 2007
+#define ITS_WKP_TLC_SSEM 2008
+#define ITS_WKP_CPS 2009
+#define ITS_WKP_EVCSN 2010
+#define ITS_WKP_TPG 2011
+#define ITS_WKP_CHARGING 2012
+#define ITS_WKP_GPC 2013
+#define ITS_WKP_CTL 2014
+#define ITS_WKP_CRL 2015
+#define ITS_WKP_CERTIF_REQ 2016
+
+/*
+ * Prototypes
+ */
+void proto_reg_handoff_its(void);
+void proto_register_its(void);
+
+// TAP
+static int its_tap = -1;
+
+// Protocols
+static int proto_its = -1;
+static int proto_its_denm = -1;
+static int proto_its_cam = -1;
+static int proto_its_evcsn = -1;
+static int proto_its_evrsr = -1;
+static int proto_its_ivim = -1;
+static int proto_its_tistpg = -1;
+static int proto_its_ssem = -1;
+static int proto_its_srem = -1;
+static int proto_its_mapem = -1;
+static int proto_its_spatem = -1;
+static int proto_addgrpc = -1;
+
+// Subdissectors
+static dissector_table_t its_version_subdissector_table;
+static dissector_table_t its_msgid_subdissector_table;
+static dissector_table_t regionid_subdissector_table;
+
+typedef struct its_private_data {
+ enum regext_type_enum type;
+ guint32 region_id;
+ guint32 cause_code;
+} its_private_data_t;
+
+// Specidic dissector for content of open type for regional extensions
+static int dissect_regextval_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+{
+ its_private_data_t *re = (its_private_data_t*)data;
+ // XXX What to do when region_id = noRegion? Test length is zero?
+ if (!dissector_try_uint_new(regionid_subdissector_table, ((guint32) re->region_id<<16) + (guint32) re->type, tvb, pinfo, tree, FALSE, NULL))
+ call_data_dissector(tvb, pinfo, tree);
+ return tvb_captured_length(tvb);
+}
+
+// Generated by asn2wrs
+#include "packet-its-hf.c"
+
+// CauseCode/SubCauseCode management
+static int hf_its_trafficConditionSubCauseCode = -1;
+static int hf_its_accidentSubCauseCode = -1;
+static int hf_its_roadworksSubCauseCode = -1;
+static int hf_its_adverseWeatherCondition_PrecipitationSubCauseCode = -1;
+static int hf_its_adverseWeatherCondition_VisibilitySubCauseCode = -1;
+static int hf_its_adverseWeatherCondition_AdhesionSubCauseCode = -1;
+static int hf_its_adverseWeatherCondition_ExtremeWeatherConditionSubCauseCode = -1;
+static int hf_its_hazardousLocation_AnimalOnTheRoadSubCauseCode = -1;
+static int hf_its_hazardousLocation_ObstacleOnTheRoadSubCauseCode = -1;
+static int hf_its_hazardousLocation_SurfaceConditionSubCauseCode = -1;
+static int hf_its_hazardousLocation_DangerousCurveSubCauseCode = -1;
+static int hf_its_humanPresenceOnTheRoadSubCauseCode = -1;
+static int hf_its_wrongWayDrivingSubCauseCode = -1;
+static int hf_its_rescueAndRecoveryWorkInProgressSubCauseCode = -1;
+static int hf_its_slowVehicleSubCauseCode = -1;
+static int hf_its_dangerousEndOfQueueSubCauseCode = -1;
+static int hf_its_vehicleBreakdownSubCauseCode = -1;
+static int hf_its_postCrashSubCauseCode = -1;
+static int hf_its_humanProblemSubCauseCode = -1;
+static int hf_its_stationaryVehicleSubCauseCode = -1;
+static int hf_its_emergencyVehicleApproachingSubCauseCode = -1;
+static int hf_its_collisionRiskSubCauseCode = -1;
+static int hf_its_signalViolationSubCauseCode = -1;
+static int hf_its_dangerousSituationSubCauseCode = -1;
+
+static gint ett_its = -1;
+
+#include "packet-its-ett.c"
+
+// Deal with cause/subcause code management
+struct { CauseCodeType_enum cause; int* hf; } cause_to_subcause[] = {
+ { trafficCondition, &hf_its_trafficConditionSubCauseCode },
+ { accident, &hf_its_accidentSubCauseCode },
+ { roadworks, &hf_its_roadworksSubCauseCode },
+ { adverseWeatherCondition_Precipitation, &hf_its_adverseWeatherCondition_PrecipitationSubCauseCode },
+ { adverseWeatherCondition_Visibility, &hf_its_adverseWeatherCondition_VisibilitySubCauseCode },
+ { adverseWeatherCondition_Adhesion, &hf_its_adverseWeatherCondition_AdhesionSubCauseCode },
+ { adverseWeatherCondition_ExtremeWeatherCondition, &hf_its_adverseWeatherCondition_ExtremeWeatherConditionSubCauseCode },
+ { hazardousLocation_AnimalOnTheRoad, &hf_its_hazardousLocation_AnimalOnTheRoadSubCauseCode },
+ { hazardousLocation_ObstacleOnTheRoad, &hf_its_hazardousLocation_ObstacleOnTheRoadSubCauseCode },
+ { hazardousLocation_SurfaceCondition, &hf_its_hazardousLocation_SurfaceConditionSubCauseCode },
+ { hazardousLocation_DangerousCurve, &hf_its_hazardousLocation_DangerousCurveSubCauseCode },
+ { humanPresenceOnTheRoad, &hf_its_humanPresenceOnTheRoadSubCauseCode },
+ { wrongWayDriving, &hf_its_wrongWayDrivingSubCauseCode },
+ { rescueAndRecoveryWorkInProgress, &hf_its_rescueAndRecoveryWorkInProgressSubCauseCode },
+ { slowVehicle, &hf_its_slowVehicleSubCauseCode },
+ { dangerousEndOfQueue, &hf_its_dangerousEndOfQueueSubCauseCode },
+ { vehicleBreakdown, &hf_its_vehicleBreakdownSubCauseCode },
+ { postCrash, &hf_its_postCrashSubCauseCode },
+ { humanProblem, &hf_its_humanProblemSubCauseCode },
+ { stationaryVehicle, &hf_its_stationaryVehicleSubCauseCode },
+ { emergencyVehicleApproaching, &hf_its_emergencyVehicleApproachingSubCauseCode },
+ { collisionRisk, &hf_its_collisionRiskSubCauseCode },
+ { signalViolation, &hf_its_signalViolationSubCauseCode },
+ { dangerousSituation, &hf_its_dangerousSituationSubCauseCode },
+ { reserved, NULL },
+};
+
+static int*
+find_subcause_from_cause(CauseCodeType_enum cause)
+{
+ int idx = 0;
+
+ while (cause_to_subcause[idx].hf && (cause_to_subcause[idx].cause != cause))
+ idx++;
+
+ return cause_to_subcause[idx].hf?cause_to_subcause[idx].hf:&hf_its_subCauseCode;
+}
+
+#include "packet-its-fn.c"
+
+static int
+dissect_its_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
+{
+ proto_item *its_item;
+ proto_tree *its_tree;
+
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "ITS");
+ col_clear(pinfo->cinfo, COL_INFO);
+
+ its_item = proto_tree_add_item(tree, proto_its, tvb, 0, -1, ENC_NA);
+ its_tree = proto_item_add_subtree(its_item, ett_its);
+
+ return dissect_its_ItsPduHeader_PDU(tvb, pinfo, its_tree, data);
+}
+
+// Decode As...
+static void
+its_msgid_prompt(packet_info *pinfo, gchar *result)
+{
+ guint32 msgid = GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, hf_its_messageID, pinfo->curr_layer_num));
+
+ g_snprintf(result, MAX_DECODE_AS_PROMPT_LEN, "MsgId (%s%u)", UTF8_RIGHTWARDS_ARROW, msgid);
+}
+
+static gpointer
+its_msgid_value(packet_info *pinfo)
+{
+ return p_get_proto_data(pinfo->pool, pinfo, hf_its_messageID, pinfo->curr_layer_num);
+}
+
+// Registration of protocols
+void proto_register_its(void)
+{
+ static hf_register_info hf_its[] = {
+ #include "packet-its-hfarr.c"
+
+ { &hf_its_roadworksSubCauseCode,
+ { "roadworksSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_RoadworksSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_postCrashSubCauseCode,
+ { "postCrashSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_PostCrashSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_vehicleBreakdownSubCauseCode,
+ { "vehicleBreakdownSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_VehicleBreakdownSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_dangerousSituationSubCauseCode,
+ { "dangerousSituationSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_DangerousSituationSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_dangerousEndOfQueueSubCauseCode,
+ { "dangerousEndOfQueueSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_DangerousEndOfQueueSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_rescueAndRecoveryWorkInProgressSubCauseCode,
+ { "rescueAndRecoveryWorkInProgressSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_RescueAndRecoveryWorkInProgressSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_signalViolationSubCauseCode,
+ { "signalViolationSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_SignalViolationSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_collisionRiskSubCauseCode,
+ { "collisionRiskSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_CollisionRiskSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_hazardousLocation_AnimalOnTheRoadSubCauseCode,
+ { "hazardousLocation_AnimalOnTheRoadSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_HazardousLocation_AnimalOnTheRoadSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_hazardousLocation_ObstacleOnTheRoadSubCauseCode,
+ { "hazardousLocation_ObstacleOnTheRoadSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_HazardousLocation_ObstacleOnTheRoadSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_hazardousLocation_SurfaceConditionSubCauseCode,
+ { "hazardousLocation_SurfaceConditionSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_HazardousLocation_SurfaceConditionSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_hazardousLocation_DangerousCurveSubCauseCode,
+ { "hazardousLocation_DangerousCurveSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_HazardousLocation_DangerousCurveSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_emergencyVehicleApproachingSubCauseCode,
+ { "emergencyVehicleApproachingSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_EmergencyVehicleApproachingSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_humanProblemSubCauseCode,
+ { "humanProblemSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_HumanProblemSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_stationaryVehicleSubCauseCode,
+ { "stationaryVehicleSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_StationaryVehicleSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_slowVehicleSubCauseCode,
+ { "slowVehicleSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_SlowVehicleSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_adverseWeatherCondition_PrecipitationSubCauseCode,
+ { "adverseWeatherCondition_PrecipitationSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_AdverseWeatherCondition_PrecipitationSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_adverseWeatherCondition_VisibilitySubCauseCode,
+ { "adverseWeatherCondition_VisibilitySubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_AdverseWeatherCondition_VisibilitySubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_adverseWeatherCondition_AdhesionSubCauseCode,
+ { "adverseWeatherCondition_AdhesionSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_AdverseWeatherCondition_AdhesionSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_adverseWeatherCondition_ExtremeWeatherConditionSubCauseCode,
+ { "adverseWeatherCondition_ExtremeWeatherConditionSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_wrongWayDrivingSubCauseCode,
+ { "wrongWayDrivingSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_WrongWayDrivingSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_humanPresenceOnTheRoadSubCauseCode,
+ { "humanPresenceOnTheRoadSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_HumanPresenceOnTheRoadSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_accidentSubCauseCode,
+ { "accidentSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_AccidentSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_trafficConditionSubCauseCode,
+ { "trafficConditionSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_TrafficConditionSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ };
+
+ static gint *ett[] = {
+ &ett_its,
+ #include "packet-its-ettarr.c"
+ };
+
+ proto_its = proto_register_protocol("Intelligent Transport Systems", "ITS", "its");
+
+ proto_register_field_array(proto_its, hf_its, array_length(hf_its));
+
+ proto_register_subtree_array(ett, array_length(ett));
+
+ register_dissector("its", dissect_its_PDU, proto_its);
+
+ // Register subdissector table
+ its_version_subdissector_table = register_dissector_table("its.version", "ITS version", proto_its, FT_UINT8, BASE_DEC);
+ its_msgid_subdissector_table = register_dissector_table("its.msg_id", "ITS message id", proto_its, FT_UINT32, BASE_DEC);
+ regionid_subdissector_table = register_dissector_table("dsrc.regionid", "DSRC RegionId", proto_its, FT_UINT32, BASE_DEC);
+
+ proto_its_denm = proto_register_protocol_in_name_only("ITS message - DENM", "DENM", "its.message.denm", proto_its, FT_BYTES);
+ proto_its_cam = proto_register_protocol_in_name_only("ITS message - CAM", "CAM", "its.message.cam", proto_its, FT_BYTES);
+ proto_its_spatem = proto_register_protocol_in_name_only("ITS message - SPATEM", "SPATEM", "its.message.spatem", proto_its, FT_BYTES);
+ proto_its_mapem = proto_register_protocol_in_name_only("ITS message - MAPEM", "MAPEM", "its.message.mapem", proto_its, FT_BYTES);
+ proto_its_ivim = proto_register_protocol_in_name_only("ITS message - IVIM", "IVIM", "its.message.ivim", proto_its, FT_BYTES);
+ proto_its_evrsr = proto_register_protocol_in_name_only("ITS message - EVRSR", "EVRSR", "its.message.evrsr", proto_its, FT_BYTES);
+ proto_its_srem = proto_register_protocol_in_name_only("ITS message - SREM", "SREM", "its.message.srem", proto_its, FT_BYTES);
+ proto_its_ssem = proto_register_protocol_in_name_only("ITS message - SSEM", "SSEM", "its.message.ssem", proto_its, FT_BYTES);
+ proto_its_evcsn = proto_register_protocol_in_name_only("ITS message - EVCSN", "EVCSN", "its.message.evcsn", proto_its, FT_BYTES);
+ proto_its_tistpg = proto_register_protocol_in_name_only("ITS message - TISTPG", "TISTPG", "its.message.tistpg", proto_its, FT_BYTES);
+
+ proto_addgrpc = proto_register_protocol_in_name_only("DSRC Addition Grp C (EU)", "ADDGRPC", "dsrc.addgrpc", proto_its, FT_BYTES);
+
+ // Decode as
+ static build_valid_func its_da_build_value[1] = {its_msgid_value};
+ static decode_as_value_t its_da_values = {its_msgid_prompt, 1, its_da_build_value};
+ static decode_as_t its_da = {"its", "ITS msg id", "its.msg_id", 1, 0, &its_da_values, NULL, NULL,
+ decode_as_default_populate_list, decode_as_default_reset, decode_as_default_change, NULL};
+
+ register_decode_as(&its_da);
+}
+
+#define BTP_SUBDISS_SZ 2
+#define BTP_PORTS_SZ 10
+void proto_reg_handoff_its(void)
+{
+ const char *subdissector[BTP_SUBDISS_SZ] = { "btpa.port", "btpb.port" };
+ const guint16 ports[BTP_PORTS_SZ] = { ITS_WKP_DEN, ITS_WKP_CA, ITS_WKP_EVCSN, ITS_WKP_CHARGING, ITS_WKP_IVI, ITS_WKP_TPG, ITS_WKP_TLC_SSEM, ITS_WKP_TLC_SREM, ITS_WKP_RLT, ITS_WKP_TLM };
+ int sdIdx, pIdx;
+ dissector_handle_t its_handle_;
+
+ // Register well known ports to btp subdissector table (BTP A and B)
+ its_handle_ = create_dissector_handle(dissect_its_PDU, proto_its);
+ for (sdIdx=0; sdIdx < BTP_SUBDISS_SZ; sdIdx++) {
+ for (pIdx=0; pIdx < BTP_PORTS_SZ; pIdx++) {
+ dissector_add_uint(subdissector[sdIdx], ports[pIdx], its_handle_);
+ }
+ }
+
+ dissector_add_uint("its.msg_id", ITS_DENM, create_dissector_handle( dissect_denm_DecentralizedEnvironmentalNotificationMessage_PDU, proto_its_denm ));
+ dissector_add_uint("its.msg_id", ITS_CAM, create_dissector_handle( dissect_cam_CoopAwareness_PDU, proto_its_cam ));
+ dissector_add_uint("its.msg_id", ITS_SPATEM, create_dissector_handle( dissect_dsrc_SPAT_PDU, proto_its_spatem ));
+ dissector_add_uint("its.msg_id", ITS_MAPEM, create_dissector_handle( dissect_dsrc_MapData_PDU, proto_its_mapem ));
+ dissector_add_uint("its.msg_id", ITS_IVIM, create_dissector_handle( dissect_ivi_IviStructure_PDU, proto_its_ivim ));
+ dissector_add_uint("its.msg_id", ITS_EV_RSR, create_dissector_handle( dissect_evrsr_EV_RSR_MessageBody_PDU, proto_its_evrsr ));
+ dissector_add_uint("its.msg_id", ITS_SREM, create_dissector_handle( dissect_dsrc_SignalRequestMessage_PDU, proto_its_srem ));
+ dissector_add_uint("its.msg_id", ITS_SSEM, create_dissector_handle( dissect_dsrc_SignalStatusMessage_PDU, proto_its_ssem ));
+ dissector_add_uint("its.msg_id", ITS_EVCSN, create_dissector_handle( dissect_evcsn_EVChargingSpotNotificationPOIMessage_PDU, proto_its_evcsn ));
+ dissector_add_uint("its.msg_id", ITS_TISTPGTRANSACTION, create_dissector_handle( dissect_tistpg_TisTpgTransaction_PDU, proto_its_tistpg ));
+
+ /* Missing definitions: ITS_POI, ITS_SAEM, ITS_RTCMEM */
+
+ dissector_add_uint("dsrc.regionid", (addGrpC<<16)+Reg_ConnectionManeuverAssist, create_dissector_handle(dissect_AddGrpC_ConnectionManeuverAssist_addGrpC_PDU, proto_addgrpc ));
+ dissector_add_uint("dsrc.regionid", (addGrpC<<16)+Reg_GenericLane, create_dissector_handle(dissect_AddGrpC_ConnectionTrajectory_addGrpC_PDU, proto_addgrpc ));
+ dissector_add_uint("dsrc.regionid", (addGrpC<<16)+Reg_NodeAttributeSetXY, create_dissector_handle(dissect_AddGrpC_Control_addGrpC_PDU, proto_addgrpc ));
+ dissector_add_uint("dsrc.regionid", (addGrpC<<16)+Reg_IntersectionState, create_dissector_handle(dissect_AddGrpC_IntersectionState_addGrpC_PDU, proto_addgrpc ));
+ dissector_add_uint("dsrc.regionid", (addGrpC<<16)+Reg_MapData, create_dissector_handle(dissect_AddGrpC_MapData_addGrpC_PDU, proto_addgrpc ));
+ dissector_add_uint("dsrc.regionid", (addGrpC<<16)+Reg_Position3D, create_dissector_handle(dissect_AddGrpC_Position3D_addGrpC_PDU, proto_addgrpc ));
+ dissector_add_uint("dsrc.regionid", (addGrpC<<16)+Reg_RestrictionUserType, create_dissector_handle(dissect_AddGrpC_RestrictionUserType_addGrpC_PDU, proto_addgrpc ));
+ dissector_add_uint("dsrc.regionid", (addGrpC<<16)+Reg_SignalStatusPackage, create_dissector_handle(dissect_AddGrpC_SignalStatusPackage_addGrpC_PDU, proto_addgrpc ));
+
+ its_tap = register_tap("its");
+}
+
+/*
+ * Editor modelines - http://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 4
+ * tab-width: 8
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * vi: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
+ */
diff --git a/epan/dissectors/asn1/its/packet-its-template.h b/epan/dissectors/asn1/its/packet-its-template.h
new file mode 100644
index 0000000000..a77c9a24c2
--- /dev/null
+++ b/epan/dissectors/asn1/its/packet-its-template.h
@@ -0,0 +1,57 @@
+/* packet-its-template.h
+ *
+ * Intelligent Transport Systems Applications dissectors
+ * C. Guerber <cguerber@yahoo.com>
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#ifndef __PACKET_ITS_H__
+#define __PACKET_ITS_H__
+
+#include "packet-its-exp.h"
+
+#include "packet-its-val.h"
+
+typedef struct its_header {
+ guint32 version;
+ guint32 msgId;
+ guint32 stationId;
+} its_header_t;
+
+enum regext_type_enum {
+ Reg_AdvisorySpeed,
+ Reg_ComputedLane,
+ Reg_ConnectionManeuverAssist,
+ Reg_GenericLane,
+ Reg_IntersectionGeometry,
+ Reg_IntersectionState,
+ Reg_LaneAttributes,
+ Reg_LaneDataAttribute,
+ Reg_MapData,
+ Reg_MovementEvent,
+ Reg_MovementState,
+ Reg_NodeAttributeSetLL,
+ Reg_NodeAttributeSetXY,
+ Reg_NodeOffsetPointLL,
+ Reg_NodeOffsetPointXY,
+ Reg_Position3D,
+ Reg_RequestorDescription,
+ Reg_RequestorType,
+ Reg_RestrictionUserType,
+ Reg_RoadSegment,
+ Reg_SignalControlZone,
+ Reg_SignalRequest,
+ Reg_SignalRequestMessage,
+ Reg_SignalRequestPackage,
+ Reg_SignalStatus,
+ Reg_SignalStatusMessage,
+ Reg_SignalStatusPackage,
+ Reg_SPAT,
+};
+
+#endif /* __PACKET_ITS_H__ */
diff --git a/epan/dissectors/packet-its.c b/epan/dissectors/packet-its.c
new file mode 100644
index 0000000000..f2aba7e3f6
--- /dev/null
+++ b/epan/dissectors/packet-its.c
@@ -0,0 +1,17743 @@
+/* Do not modify this file. Changes will be overwritten. */
+/* Generated automatically by the ASN.1 to Wireshark dissector compiler */
+/* packet-its.c */
+/* asn2wrs.py -o its -c its.cnf -O ../.. -I . -D . -s packet-its-template ITS-Container.asn ISO_TS_14816.asn ISO_TS_24534-3.asn ISO_TS_17419.asn ISO_TS_14906_Application.asn ISO_TS_19321.asn ISO_TS_19091.asn ETSI_TS_103301.asn CAM.asn DENM.asn TIS_TPG_Transactions_Descriptions.asn EVCSN-PDU-Descriptions.asn EV-RSR-PDU-Descriptions.asn */
+
+/* Input file: packet-its-template.c */
+
+#line 1 "./asn1/its/packet-its-template.c"
+/* packet-its-template.c
+ *
+ * Intelligent Transport Systems Applications dissectors
+ * Coyright 2018, C. Guerber <cguerber@yahoo.com>
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+/*
+ * Implemented:
+ * CA (CAM) ETSI EN 302 637-2
+ * DEN (DENM) ETSI EN 302 637-3
+ * RLT (MAPEM) ETSI TS 103 301
+ * TLM (SPATEM) ETSI TS 103 301
+ * IVI (IVIM) ETSI TS 103 301
+ * TLC (SREM) ETSI TS 103 301
+ * TLC (SSEM) ETSI TS 103 301
+ * EVCSN POI (EVCSN POI message) ETSI TS 101 556-1
+ * TPG (TRM, TCM, VDRM, VDPM, EOFM) ETSI TS 101 556-2
+ * Charging (EV-RSR, SRM, SCM) ETSI TS 101 556-3
+ *
+ * Not supported:
+ * SA (SAEM) ETSI TS 102 890-1
+ * GPC (RTCMEM) ETSI TS 103 301
+ * CTL (CTLM) ETSI TS 102 941
+ * CRL (CRLM) ETSI TS 102 941
+ * Certificate request ETSI TS 102 941
+ */
+#include "config.h"
+
+#include <epan/packet.h>
+#include <epan/expert.h>
+#include <epan/decode_as.h>
+#include <epan/proto_data.h>
+#include <epan/exceptions.h>
+#include <epan/conversation.h>
+#include <epan/tap.h>
+#include <wsutil/utf8_entities.h>
+#include "packet-ber.h"
+#include "packet-per.h"
+
+#include "packet-its.h"
+
+/*
+ * Well Known Ports definitions as per:
+ *
+ * ETSI TS 103 248 v1.2.1 (2018-08)
+ * Intelligent Transport Systems (ITS);
+ * GeoNetworking;
+ * Port Numbers for the Basic Transport Protocol (BTP)
+ *
+ * BTP port Facilities service Related standard
+ * number or Application
+ * values
+ * 2001 CA (CAM) ETSI EN 302 637-2
+ * 2002 DEN (DENM) ETSI EN 302 637-3
+ * 2003 RLT (MAPEM) ETSI TS 103 301
+ * 2004 TLM (SPATEM) ETSI TS 103 301
+ * 2005 SA (SAEM) ETSI TS 102 890-1
+ * 2006 IVI (IVIM) ETSI TS 103 301
+ * 2007 TLC (SREM) ETSI TS 103 301
+ * 2008 TLC (SSEM) ETSI TS 103 301
+ * 2009 Allocated Allocated for "Intelligent Transport
+ * System (ITS); Vehicular Communications;
+ * Basic Set of Applications; Specification
+ * of the Collective Perception Service"
+ * 2010 EVCSN POI (EVCSN POI ETSI TS 101 556-1
+ * message)
+ * 2011 TPG (TRM, TCM, VDRM, ETSI TS 101 556-2
+ * VDPM, EOFM)
+ * 2012 Charging (EV-RSR, ETSI TS 101 556-3
+ * SRM, SCM)
+ * 2013 GPC (RTCMEM) ETSI TS 103 301
+ * 2014 CTL (CTLM) ETSI TS 102 941
+ * 2015 CRL (CRLM) ETSI TS 102 941
+ * 2016 Certificate request ETSI TS 102 941
+ */
+
+// Applications Well Known Ports
+#define ITS_WKP_CA 2001
+#define ITS_WKP_DEN 2002
+#define ITS_WKP_RLT 2003
+#define ITS_WKP_TLM 2004
+#define ITS_WKP_SA 2005
+#define ITS_WKP_IVI 2006
+#define ITS_WKP_TLC_SREM 2007
+#define ITS_WKP_TLC_SSEM 2008
+#define ITS_WKP_CPS 2009
+#define ITS_WKP_EVCSN 2010
+#define ITS_WKP_TPG 2011
+#define ITS_WKP_CHARGING 2012
+#define ITS_WKP_GPC 2013
+#define ITS_WKP_CTL 2014
+#define ITS_WKP_CRL 2015
+#define ITS_WKP_CERTIF_REQ 2016
+
+/*
+ * Prototypes
+ */
+void proto_reg_handoff_its(void);
+void proto_register_its(void);
+
+// TAP
+static int its_tap = -1;
+
+// Protocols
+static int proto_its = -1;
+static int proto_its_denm = -1;
+static int proto_its_cam = -1;
+static int proto_its_evcsn = -1;
+static int proto_its_evrsr = -1;
+static int proto_its_ivim = -1;
+static int proto_its_tistpg = -1;
+static int proto_its_ssem = -1;
+static int proto_its_srem = -1;
+static int proto_its_mapem = -1;
+static int proto_its_spatem = -1;
+static int proto_addgrpc = -1;
+
+// Subdissectors
+static dissector_table_t its_version_subdissector_table;
+static dissector_table_t its_msgid_subdissector_table;
+static dissector_table_t regionid_subdissector_table;
+
+typedef struct its_private_data {
+ enum regext_type_enum type;
+ guint32 region_id;
+ guint32 cause_code;
+} its_private_data_t;
+
+// Specidic dissector for content of open type for regional extensions
+static int dissect_regextval_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+{
+ its_private_data_t *re = (its_private_data_t*)data;
+ // XXX What to do when region_id = noRegion? Test length is zero?
+ if (!dissector_try_uint_new(regionid_subdissector_table, ((guint32) re->region_id<<16) + (guint32) re->type, tvb, pinfo, tree, FALSE, NULL))
+ call_data_dissector(tvb, pinfo, tree);
+ return tvb_captured_length(tvb);
+}
+
+// Generated by asn2wrs
+
+/*--- Included file: packet-its-hf.c ---*/
+#line 1 "./asn1/its/packet-its-hf.c"
+
+/* --- Module ITS-Container --- --- --- */
+
+static int hf_its_its_ItsPduHeader_PDU = -1; /* ItsPduHeader */
+static int hf_its_protocolVersion = -1; /* T_protocolVersion */
+static int hf_its_messageID = -1; /* T_messageID */
+static int hf_its_stationID = -1; /* StationID */
+static int hf_its_latitude = -1; /* Latitude */
+static int hf_its_longitude = -1; /* Longitude */
+static int hf_its_positionConfidenceEllipse = -1; /* PosConfidenceEllipse */
+static int hf_its_altitude = -1; /* Altitude */
+static int hf_its_deltaLatitude = -1; /* DeltaLatitude */
+static int hf_its_deltaLongitude = -1; /* DeltaLongitude */
+static int hf_its_deltaAltitude = -1; /* DeltaAltitude */
+static int hf_its_altitudeValue = -1; /* AltitudeValue */
+static int hf_its_altitudeConfidence = -1; /* AltitudeConfidence */
+static int hf_its_semiMajorConfidence = -1; /* SemiAxisLength */
+static int hf_its_semiMinorConfidence = -1; /* SemiAxisLength */
+static int hf_its_semiMajorOrientation = -1; /* HeadingValue */
+static int hf_its_pathPosition = -1; /* DeltaReferencePosition */
+static int hf_its_pathDeltaTime = -1; /* PathDeltaTime */
+static int hf_its_ptActivationType = -1; /* PtActivationType */
+static int hf_its_ptActivationData = -1; /* PtActivationData */
+static int hf_its_causeCode = -1; /* CauseCodeType */
+static int hf_its_subCauseCode = -1; /* SubCauseCodeType */
+static int hf_its_curvatureValue = -1; /* CurvatureValue */
+static int hf_its_curvatureConfidence = -1; /* CurvatureConfidence */
+static int hf_its_headingValue = -1; /* HeadingValue */
+static int hf_its_headingConfidence = -1; /* HeadingConfidence */
+static int hf_its_innerhardShoulderStatus = -1; /* HardShoulderStatus */
+static int hf_its_outerhardShoulderStatus = -1; /* HardShoulderStatus */
+static int hf_its_drivingLaneStatus = -1; /* DrivingLaneStatus */
+static int hf_its_speedValue = -1; /* SpeedValue */
+static int hf_its_speedConfidence = -1; /* SpeedConfidence */
+static int hf_its_longitudinalAccelerationValue = -1; /* LongitudinalAccelerationValue */
+static int hf_its_longitudinalAccelerationConfidence = -1; /* AccelerationConfidence */
+static int hf_its_lateralAccelerationValue = -1; /* LateralAccelerationValue */
+static int hf_its_lateralAccelerationConfidence = -1; /* AccelerationConfidence */
+static int hf_its_verticalAccelerationValue = -1; /* VerticalAccelerationValue */
+static int hf_its_verticalAccelerationConfidence = -1; /* AccelerationConfidence */
+static int hf_its_dangerousGoodsType = -1; /* DangerousGoodsBasic */
+static int hf_its_unNumber = -1; /* INTEGER_0_9999 */
+static int hf_its_elevatedTemperature = -1; /* BOOLEAN */
+static int hf_its_tunnelsRestricted = -1; /* BOOLEAN */
+static int hf_its_limitedQuantity = -1; /* BOOLEAN */
+static int hf_its_emergencyActionCode = -1; /* IA5String_SIZE_1_24 */
+static int hf_its_phoneNumber = -1; /* PhoneNumber */
+static int hf_its_companyName = -1; /* UTF8String_SIZE_1_24 */
+static int hf_its_wMInumber = -1; /* WMInumber */
+static int hf_its_vDS = -1; /* VDS */
+static int hf_its_vehicleLengthValue = -1; /* VehicleLengthValue */
+static int hf_its_vehicleLengthConfidenceIndication = -1; /* VehicleLengthConfidenceIndication */
+static int hf_its_PathHistory_item = -1; /* PathPoint */
+static int hf_its_steeringWheelAngleValue = -1; /* SteeringWheelAngleValue */
+static int hf_its_steeringWheelAngleConfidence = -1; /* SteeringWheelAngleConfidence */
+static int hf_its_yawRateValue = -1; /* YawRateValue */
+static int hf_its_yawRateConfidence = -1; /* YawRateConfidence */
+static int hf_its_originatingStationID = -1; /* StationID */
+static int hf_its_sequenceNumber = -1; /* SequenceNumber */
+static int hf_its_ItineraryPath_item = -1; /* ReferencePosition */
+static int hf_its_protectedZoneType = -1; /* ProtectedZoneType */
+static int hf_its_expiryTime = -1; /* TimestampIts */
+static int hf_its_protectedZoneLatitude = -1; /* Latitude */
+static int hf_its_protectedZoneLongitude = -1; /* Longitude */
+static int hf_its_protectedZoneRadius = -1; /* ProtectedZoneRadius */
+static int hf_its_protectedZoneID = -1; /* ProtectedZoneID */
+static int hf_its_Traces_item = -1; /* PathHistory */
+static int hf_its_PositionOfPillars_item = -1; /* PosPillar */
+static int hf_its_RestrictedTypes_item = -1; /* StationType */
+static int hf_its_EventHistory_item = -1; /* EventPoint */
+static int hf_its_eventPosition = -1; /* DeltaReferencePosition */
+static int hf_its_eventDeltaTime = -1; /* PathDeltaTime */
+static int hf_its_informationQuality = -1; /* InformationQuality */
+static int hf_its_ProtectedCommunicationZonesRSU_item = -1; /* ProtectedCommunicationZone */
+static int hf_its_cenDsrcTollingZoneID = -1; /* CenDsrcTollingZoneID */
+static int hf_its_DigitalMap_item = -1; /* ReferencePosition */
+/* named bits */
+static int hf_its_AccelerationControl_brakePedalEngaged = -1;
+static int hf_its_AccelerationControl_gasPedalEngaged = -1;
+static int hf_its_AccelerationControl_emergencyBrakeEngaged = -1;
+static int hf_its_AccelerationControl_collisionWarningEngaged = -1;
+static int hf_its_AccelerationControl_accEngaged = -1;
+static int hf_its_AccelerationControl_cruiseControlEngaged = -1;
+static int hf_its_AccelerationControl_speedLimiterEngaged = -1;
+static int hf_its_ExteriorLights_lowBeamHeadlightsOn = -1;
+static int hf_its_ExteriorLights_highBeamHeadlightsOn = -1;
+static int hf_its_ExteriorLights_leftTurnSignalOn = -1;
+static int hf_its_ExteriorLights_rightTurnSignalOn = -1;
+static int hf_its_ExteriorLights_daytimeRunningLightsOn = -1;
+static int hf_its_ExteriorLights_reverseLightOn = -1;
+static int hf_its_ExteriorLights_fogLightOn = -1;
+static int hf_its_ExteriorLights_parkingLightsOn = -1;
+static int hf_its_SpecialTransportType_heavyLoad = -1;
+static int hf_its_SpecialTransportType_excessWidth = -1;
+static int hf_its_SpecialTransportType_excessLength = -1;
+static int hf_its_SpecialTransportType_excessHeight = -1;
+static int hf_its_LightBarSirenInUse_lightBarActivated = -1;
+static int hf_its_LightBarSirenInUse_sirenActivated = -1;
+static int hf_its_PositionOfOccupants_row1LeftOccupied = -1;
+static int hf_its_PositionOfOccupants_row1RightOccupied = -1;
+static int hf_its_PositionOfOccupants_row1MidOccupied = -1;
+static int hf_its_PositionOfOccupants_row1NotDetectable = -1;
+static int hf_its_PositionOfOccupants_row1NotPresent = -1;
+static int hf_its_PositionOfOccupants_row2LeftOccupied = -1;
+static int hf_its_PositionOfOccupants_row2RightOccupied = -1;
+static int hf_its_PositionOfOccupants_row2MidOccupied = -1;
+static int hf_its_PositionOfOccupants_row2NotDetectable = -1;
+static int hf_its_PositionOfOccupants_row2NotPresent = -1;
+static int hf_its_PositionOfOccupants_row3LeftOccupied = -1;
+static int hf_its_PositionOfOccupants_row3RightOccupied = -1;
+static int hf_its_PositionOfOccupants_row3MidOccupied = -1;
+static int hf_its_PositionOfOccupants_row3NotDetectable = -1;
+static int hf_its_PositionOfOccupants_row3NotPresent = -1;
+static int hf_its_PositionOfOccupants_row4LeftOccupied = -1;
+static int hf_its_PositionOfOccupants_row4RightOccupied = -1;
+static int hf_its_PositionOfOccupants_row4MidOccupied = -1;
+static int hf_its_PositionOfOccupants_row4NotDetectable = -1;
+static int hf_its_PositionOfOccupants_row4NotPresent = -1;
+static int hf_its_EnergyStorageType_hydrogenStorage = -1;
+static int hf_its_EnergyStorageType_electricEnergyStorage = -1;
+static int hf_its_EnergyStorageType_liquidPropaneGas = -1;
+static int hf_its_EnergyStorageType_compressedNaturalGas = -1;
+static int hf_its_EnergyStorageType_diesel = -1;
+static int hf_its_EnergyStorageType_gasoline = -1;
+static int hf_its_EnergyStorageType_ammonia = -1;
+static int hf_its_EmergencyPriority_requestForRightOfWay = -1;
+static int hf_its_EmergencyPriority_requestForFreeCrossingAtATrafficLight = -1;
+
+/* --- Module ElectronicRegistrationIdentificationVehicleDataModule --- --- --- */
+
+static int hf_erivdm_euVehicleCategoryL = -1; /* EuVehicleCategoryL */
+static int hf_erivdm_euVehicleCategoryM = -1; /* EuVehicleCategoryM */
+static int hf_erivdm_euVehicleCategoryN = -1; /* EuVehicleCategoryN */
+static int hf_erivdm_euVehicleCategoryO = -1; /* EuVehicleCategoryO */
+static int hf_erivdm_euVehilcleCategoryT = -1; /* NULL */
+static int hf_erivdm_euVehilcleCategoryG = -1; /* NULL */
+
+/* --- Module CITSapplMgmtIDs --- --- --- */
+
+static int hf_csmid_vlnContent = -1; /* INTEGER_0_127 */
+static int hf_csmid_vlnExtension = -1; /* Ext1 */
+static int hf_csmid_e1Content = -1; /* INTEGER_128_16511 */
+static int hf_csmid_e2Extension = -1; /* Ext2 */
+static int hf_csmid_e2Content = -1; /* INTEGER_16512_2113663 */
+static int hf_csmid_e1Extension = -1; /* Ext3 */
+
+/* --- Module EfcDsrcApplication --- --- --- */
+
+static int hf_dsrc_app_maxLadenweightOnAxle1 = -1; /* Int2 */
+static int hf_dsrc_app_maxLadenweightOnAxle2 = -1; /* Int2 */
+static int hf_dsrc_app_maxLadenweightOnAxle3 = -1; /* Int2 */
+static int hf_dsrc_app_maxLadenweightOnAxle4 = -1; /* Int2 */
+static int hf_dsrc_app_maxLadenweightOnAxle5 = -1; /* Int2 */
+static int hf_dsrc_app_particulate = -1; /* T_particulate */
+static int hf_dsrc_app_unitType = -1; /* UnitType */
+static int hf_dsrc_app_value = -1; /* INTEGER_0_32767 */
+static int hf_dsrc_app_absorptionCoeff = -1; /* Int2 */
+static int hf_dsrc_app_euroValue = -1; /* EuroValue */
+static int hf_dsrc_app_copValue = -1; /* CopValue */
+static int hf_dsrc_app_emissionCO = -1; /* INTEGER_0_32767 */
+static int hf_dsrc_app_emissionHC = -1; /* Int2 */
+static int hf_dsrc_app_emissionNOX = -1; /* Int2 */
+static int hf_dsrc_app_emissionHCNOX = -1; /* Int2 */
+static int hf_dsrc_app_numberOfSeats = -1; /* Int1 */
+static int hf_dsrc_app_numberOfStandingPlaces = -1; /* Int1 */
+static int hf_dsrc_app_countryCode = -1; /* CountryCode */
+static int hf_dsrc_app_providerIdentifier = -1; /* IssuerIdentifier */
+static int hf_dsrc_app_soundstationary = -1; /* Int1 */
+static int hf_dsrc_app_sounddriveby = -1; /* Int1 */
+static int hf_dsrc_app_vehicleLengthOverall = -1; /* Int1 */
+static int hf_dsrc_app_vehicleHeigthOverall = -1; /* Int1 */
+static int hf_dsrc_app_vehicleWidthOverall = -1; /* Int1 */
+static int hf_dsrc_app_vehicleMaxLadenWeight = -1; /* Int2 */
+static int hf_dsrc_app_vehicleTrainMaximumWeight = -1; /* Int2 */
+static int hf_dsrc_app_vehicleWeightUnladen = -1; /* Int2 */
+
+/* --- Module IVI --- --- --- */
+
+static int hf_ivi_ivi_IviStructure_PDU = -1; /* IviStructure */
+static int hf_ivi_mandatory = -1; /* IVIManagementContainer */
+static int hf_ivi_optional = -1; /* SEQUENCE_SIZE_1_8__OF_IviContainer */
+static int hf_ivi_optional_item = -1; /* IviContainer */
+static int hf_ivi_glc = -1; /* GeographicLocationContainer */
+static int hf_ivi_giv = -1; /* GeneralIviContainer */
+static int hf_ivi_rcc = -1; /* RoadConfigurationContainer */
+static int hf_ivi_tc = -1; /* TextContainer */
+static int hf_ivi_lac = -1; /* LayoutContainer */
+static int hf_ivi_serviceProviderId = -1; /* Provider */
+static int hf_ivi_iviIdentificationNumber = -1; /* IviIdentificationNumber */
+static int hf_ivi_timeStamp = -1; /* TimestampIts */
+static int hf_ivi_validFrom = -1; /* TimestampIts */
+static int hf_ivi_validTo = -1; /* TimestampIts */
+static int hf_ivi_connectedIviStructures = -1; /* SEQUENCE_SIZE_1_8_OF_IviIdentificationNumber */
+static int hf_ivi_connectedIviStructures_item = -1; /* IviIdentificationNumber */
+static int hf_ivi_iviStatus = -1; /* IviStatus */
+static int hf_ivi_referencePosition = -1; /* ReferencePosition */
+static int hf_ivi_referencePositionTime = -1; /* TimestampIts */
+static int hf_ivi_referencePositionHeading = -1; /* Heading */
+static int hf_ivi_referencePositionSpeed = -1; /* Speed */
+static int hf_ivi_parts = -1; /* SEQUENCE_SIZE_1_16__OF_GlcPart */
+static int hf_ivi_parts_item = -1; /* GlcPart */
+static int hf_ivi_zoneId = -1; /* Zid */
+static int hf_ivi_laneNumber = -1; /* LanePosition */
+static int hf_ivi_zoneExtension = -1; /* INTEGER_0_255 */
+static int hf_ivi_zoneHeading = -1; /* HeadingValue */
+static int hf_ivi_zone = -1; /* Zone */
+static int hf_ivi_GeneralIviContainer_item = -1; /* GicPart */
+static int hf_ivi_gpDetectionZoneIds = -1; /* T_GicPartDetectionZoneIds */
+static int hf_ivi_gpDetectionZoneIds_item = -1; /* Zid */
+static int hf_ivi_its_Rrid = -1; /* VarLengthNumber */
+static int hf_ivi_gpRelevanceZoneIds = -1; /* T_GicPartRelevanceZoneIds */
+static int hf_ivi_gpRelevanceZoneIds_item = -1; /* Zid */
+static int hf_ivi_direction = -1; /* Direction */
+static int hf_ivi_gpDriverAwarenessZoneIds = -1; /* T_GicPartDriverAwarenessZoneIds */
+static int hf_ivi_gpDriverAwarenessZoneIds_item = -1; /* Zid */
+static int hf_ivi_minimumAwarenessTime = -1; /* INTEGER_0_255 */
+static int hf_ivi_applicableLanes = -1; /* SEQUENCE_SIZE_1_8__OF_LanePosition */
+static int hf_ivi_applicableLanes_item = -1; /* LanePosition */
+static int hf_ivi_iviType = -1; /* IviType */
+static int hf_ivi_iviPurpose = -1; /* IviPurpose */
+static int hf_ivi_laneStatus = -1; /* LaneStatus */
+static int hf_ivi_vehicleCharacteristics = -1; /* SEQUENCE_SIZE_1_8__OF_CompleteVehicleCharacteristics */
+static int hf_ivi_vehicleCharacteristics_item = -1; /* CompleteVehicleCharacteristics */
+static int hf_ivi_driverCharacteristics = -1; /* DriverCharacteristics */
+static int hf_ivi_layoutId = -1; /* INTEGER_1_4_ */
+static int hf_ivi_preStoredlayoutId = -1; /* INTEGER_1_64_ */
+static int hf_ivi_roadSignCodes = -1; /* SEQUENCE_SIZE_1_4__OF_RSCode */
+static int hf_ivi_roadSignCodes_item = -1; /* RSCode */
+static int hf_ivi_extraText = -1; /* T_GicPartExtraText */
+static int hf_ivi_extraText_item = -1; /* Text */
+static int hf_ivi_RoadConfigurationContainer_item = -1; /* RccPart */
+static int hf_ivi_zoneIds = -1; /* SEQUENCE_SIZE_1_8__OF_Zid */
+static int hf_ivi_zoneIds_item = -1; /* Zid */
+static int hf_ivi_roadType = -1; /* RoadType */
+static int hf_ivi_laneConfiguration = -1; /* SEQUENCE_SIZE_1_16__OF_LaneInformation */
+static int hf_ivi_laneConfiguration_item = -1; /* LaneInformation */
+static int hf_ivi_TextContainer_item = -1; /* TcPart */
+static int hf_ivi_tpDetectionZoneIds = -1; /* T_TcPartDetectionZoneIds */
+static int hf_ivi_tpDetectionZoneIds_item = -1; /* Zid */
+static int hf_ivi_tpRelevanceZoneIds = -1; /* T_TcPartRelevanceZoneIds */
+static int hf_ivi_tpRelevanceZoneIds_item = -1; /* Zid */
+static int hf_ivi_tpDriverAwarenessZoneIds = -1; /* T_TcPartDriverAwarenessZoneIds */
+static int hf_ivi_tpDriverAwarenessZoneIds_item = -1; /* Zid */
+static int hf_ivi_text = -1; /* T_TcPartText */
+static int hf_ivi_text_item = -1; /* Text */
+static int hf_ivi_data = -1; /* OCTET_STRING */
+static int hf_ivi_height = -1; /* INTEGER_10_73 */
+static int hf_ivi_width = -1; /* INTEGER_10_265 */
+static int hf_ivi_layoutComponents = -1; /* SEQUENCE_SIZE_1_4__OF_LayoutComponent */
+static int hf_ivi_layoutComponents_item = -1; /* LayoutComponent */
+static int hf_ivi_latitude = -1; /* Latitude */
+static int hf_ivi_longitude = -1; /* Longitude */
+static int hf_ivi_altitude = -1; /* Altitude */
+static int hf_ivi_owner = -1; /* Provider */
+static int hf_ivi_version = -1; /* INTEGER_0_255 */
+static int hf_ivi_acPictogramCode = -1; /* INTEGER_0_65535 */
+static int hf_ivi_acValue = -1; /* INTEGER_0_65535 */
+static int hf_ivi_unit = -1; /* RSCUnit */
+static int hf_ivi_attributes = -1; /* ISO14823Attributes */
+static int hf_ivi_tractor = -1; /* TractorCharacteristics */
+static int hf_ivi_trailer = -1; /* SEQUENCE_SIZE_1_3_OF_TrailerCharacteristics */
+static int hf_ivi_trailer_item = -1; /* TrailerCharacteristics */
+static int hf_ivi_train = -1; /* TrainCharacteristics */
+static int hf_ivi_laneWidth = -1; /* IVILaneWidth */
+static int hf_ivi_offsetDistance = -1; /* INTEGER_M32768_32767 */
+static int hf_ivi_offsetPosition = -1; /* DeltaReferencePosition */
+static int hf_ivi_deltaLatitude = -1; /* DeltaLatitude */
+static int hf_ivi_deltaLongitude = -1; /* DeltaLongitude */
+static int hf_ivi_dValue = -1; /* INTEGER_1_16384 */
+static int hf_ivi_dodValue = -1; /* INTEGER_1_16384 */
+static int hf_ivi_ISO14823Attributes_item = -1; /* ISO14823Attributes_item */
+static int hf_ivi_dtm = -1; /* DTM */
+static int hf_ivi_edt = -1; /* EDT */
+static int hf_ivi_dfl = -1; /* DFL */
+static int hf_ivi_ved = -1; /* VED */
+static int hf_ivi_spe = -1; /* SPE */
+static int hf_ivi_roi = -1; /* ROI */
+static int hf_ivi_dbv = -1; /* DBV */
+static int hf_ivi_ddd = -1; /* DDD */
+static int hf_ivi_icPictogramCode = -1; /* T_icPictogramCode */
+static int hf_ivi_countryCode = -1; /* OCTET_STRING_SIZE_2 */
+static int hf_ivi_serviceCategoryCode = -1; /* T_serviceCategoryCode */
+static int hf_ivi_trafficSignPictogram = -1; /* T_trafficSignPictogram */
+static int hf_ivi_publicFacilitiesPictogram = -1; /* T_publicFacilitiesPictogram */
+static int hf_ivi_ambientOrRoadConditionPictogram = -1; /* T_ambientOrRoadConditionPictogram */
+static int hf_ivi_pictogramCategoryCode = -1; /* T_pictogramCategoryCode */
+static int hf_ivi_nature = -1; /* INTEGER_1_9 */
+static int hf_ivi_serialNumber = -1; /* INTEGER_0_99 */
+static int hf_ivi_liValidity = -1; /* DTM */
+static int hf_ivi_laneType = -1; /* LaneType */
+static int hf_ivi_laneTypeQualifier = -1; /* CompleteVehicleCharacteristics */
+static int hf_ivi_lcLayoutComponentId = -1; /* INTEGER_1_8_ */
+static int hf_ivi_x = -1; /* INTEGER_10_265 */
+static int hf_ivi_y = -1; /* INTEGER_10_73 */
+static int hf_ivi_textScripting = -1; /* T_textScripting */
+static int hf_ivi_goodsType = -1; /* GoodsType */
+static int hf_ivi_dangerousGoodsType = -1; /* DangerousGoodsBasic */
+static int hf_ivi_specialTransportType = -1; /* SpecialTransportType */
+static int hf_ivi_deltaPositions = -1; /* SEQUENCE_SIZE_1_32__OF_DeltaPosition */
+static int hf_ivi_deltaPositions_item = -1; /* DeltaPosition */
+static int hf_ivi_deltaPositionsWithAltitude = -1; /* SEQUENCE_SIZE_1_32__OF_DeltaReferencePosition */
+static int hf_ivi_deltaPositionsWithAltitude_item = -1; /* DeltaReferencePosition */
+static int hf_ivi_absolutePositions = -1; /* SEQUENCE_SIZE_1_8__OF_AbsolutePosition */
+static int hf_ivi_absolutePositions_item = -1; /* AbsolutePosition */
+static int hf_ivi_absolutePositionsWithAltitude = -1; /* SEQUENCE_SIZE_1_8__OF_AbsolutePositionWAltitude */
+static int hf_ivi_absolutePositionsWithAltitude_item = -1; /* AbsolutePositionWAltitude */
+static int hf_ivi_rscLayoutComponentId = -1; /* INTEGER_1_4_ */
+static int hf_ivi_code = -1; /* T_code */
+static int hf_ivi_viennaConvention = -1; /* VcCode */
+static int hf_ivi_iso14823 = -1; /* ISO14823Code */
+static int hf_ivi_itisCodes = -1; /* INTEGER_0_65535 */
+static int hf_ivi_anyCatalogue = -1; /* AnyCatalogue */
+static int hf_ivi_line = -1; /* PolygonalLine */
+static int hf_ivi_tLayoutComponentId = -1; /* INTEGER_1_4_ */
+static int hf_ivi_language = -1; /* BIT_STRING_SIZE_10 */
+static int hf_ivi_textContent = -1; /* UTF8String */
+static int hf_ivi_toEqualTo = -1; /* T_TractorCharactEqualTo */
+static int hf_ivi_toEqualTo_item = -1; /* VehicleCharacteristicsFixValues */
+static int hf_ivi_toNotEqualTo = -1; /* T_TractorCharactNotEqualTo */
+static int hf_ivi_toNotEqualTo_item = -1; /* VehicleCharacteristicsFixValues */
+static int hf_ivi_ranges = -1; /* SEQUENCE_SIZE_1_4__OF_VehicleCharacteristicsRanges */
+static int hf_ivi_ranges_item = -1; /* VehicleCharacteristicsRanges */
+static int hf_ivi_teEqualTo = -1; /* T_TrailerCharactEqualTo */
+static int hf_ivi_teEqualTo_item = -1; /* VehicleCharacteristicsFixValues */
+static int hf_ivi_teNotEqualTo = -1; /* T_TrailerCharactNotEqualTo */
+static int hf_ivi_teNotEqualTo_item = -1; /* VehicleCharacteristicsFixValues */
+static int hf_ivi_roadSignClass = -1; /* VcClass */
+static int hf_ivi_roadSignCode = -1; /* INTEGER_1_64 */
+static int hf_ivi_vcOption = -1; /* VcOption */
+static int hf_ivi_vcValidity = -1; /* SEQUENCE_SIZE_1_8__OF_DTM */
+static int hf_ivi_vcValidity_item = -1; /* DTM */
+static int hf_ivi_vcValue = -1; /* INTEGER_0_65535 */
+static int hf_ivi_simpleVehicleType = -1; /* StationType */
+static int hf_ivi_euVehicleCategoryCode = -1; /* EuVehicleCategoryCode */
+static int hf_ivi_iso3833VehicleType = -1; /* Iso3833VehicleType */
+static int hf_ivi_euroAndCo2value = -1; /* EnvironmentalCharacteristics */
+static int hf_ivi_engineCharacteristics = -1; /* EngineCharacteristics */
+static int hf_ivi_loadType = -1; /* LoadType */
+static int hf_ivi_usage = -1; /* VehicleRole */
+static int hf_ivi_comparisonOperator = -1; /* ComparisonOperator */
+static int hf_ivi_limits = -1; /* T_limits */
+static int hf_ivi_numberOfAxles = -1; /* INTEGER_0_7 */
+static int hf_ivi_vehicleDimensions = -1; /* VehicleDimensions */
+static int hf_ivi_vehicleWeightLimits = -1; /* VehicleWeightLimits */
+static int hf_ivi_axleWeightLimits = -1; /* AxleWeightLimits */
+static int hf_ivi_passengerCapacity = -1; /* PassengerCapacity */
+static int hf_ivi_exhaustEmissionValues = -1; /* ExhaustEmissionValues */
+static int hf_ivi_dieselEmissionValues = -1; /* DieselEmissionValues */
+static int hf_ivi_soundLevel = -1; /* SoundLevel */
+static int hf_ivi_wValue = -1; /* INTEGER_1_16384 */
+static int hf_ivi_segment = -1; /* Segment */
+static int hf_ivi_area = -1; /* PolygonalLine */
+static int hf_ivi_computedSegment = -1; /* ComputedSegment */
+static int hf_ivi_year = -1; /* T_year */
+static int hf_ivi_syr = -1; /* INTEGER_2000_2127_ */
+static int hf_ivi_eyr = -1; /* INTEGER_2000_2127_ */
+static int hf_ivi_month_day = -1; /* T_month_day */
+static int hf_ivi_smd = -1; /* MonthDay */
+static int hf_ivi_emd = -1; /* MonthDay */
+static int hf_ivi_pmd = -1; /* PMD */
+static int hf_ivi_hourMinutes = -1; /* T_hourMinutes */
+static int hf_ivi_shm = -1; /* HoursMinutes */
+static int hf_ivi_ehm = -1; /* HoursMinutes */
+static int hf_ivi_dayOfWeek = -1; /* DayOfWeek */
+static int hf_ivi_period = -1; /* HoursMinutes */
+static int hf_ivi_month = -1; /* INTEGER_1_12 */
+static int hf_ivi_day = -1; /* INTEGER_1_31 */
+static int hf_ivi_hours = -1; /* INTEGER_0_23 */
+static int hf_ivi_mins = -1; /* INTEGER_0_59 */
+static int hf_ivi_hei = -1; /* Distance */
+static int hf_ivi_wid = -1; /* Distance */
+static int hf_ivi_vln = -1; /* Distance */
+static int hf_ivi_wei = -1; /* Weight */
+static int hf_ivi_spm = -1; /* INTEGER_0_250 */
+static int hf_ivi_mns = -1; /* INTEGER_0_250 */
+static int hf_ivi_dcj = -1; /* INTEGER_1_128 */
+static int hf_ivi_dcr = -1; /* INTEGER_1_128 */
+static int hf_ivi_tpl = -1; /* INTEGER_1_128 */
+static int hf_ivi_ioList = -1; /* SEQUENCE_SIZE_1_8__OF_DDD_IO */
+static int hf_ivi_ioList_item = -1; /* DDD_IO */
+static int hf_ivi_drn = -1; /* INTEGER_0_7 */
+static int hf_ivi_dp = -1; /* SEQUENCE_SIZE_1_4__OF_DestinationPlace */
+static int hf_ivi_dp_item = -1; /* DestinationPlace */
+static int hf_ivi_dr = -1; /* SEQUENCE_SIZE_1_4__OF_DestinationRoad */
+static int hf_ivi_dr_item = -1; /* DestinationRoad */
+static int hf_ivi_rne = -1; /* INTEGER_1_999 */
+static int hf_ivi_stnId = -1; /* INTEGER_1_999 */
+static int hf_ivi_stnText = -1; /* UTF8String */
+static int hf_ivi_dcp = -1; /* DistanceOrDuration */
+static int hf_ivi_ddp = -1; /* DistanceOrDuration */
+static int hf_ivi_depType = -1; /* DDD_DEP */
+static int hf_ivi_depRSCode = -1; /* ISO14823Code */
+static int hf_ivi_depBlob = -1; /* OCTET_STRING */
+static int hf_ivi_plnId = -1; /* INTEGER_1_999 */
+static int hf_ivi_plnText = -1; /* UTF8String */
+static int hf_ivi_derType = -1; /* DDD_DER */
+static int hf_ivi_ronId = -1; /* INTEGER_1_999 */
+static int hf_ivi_ronText = -1; /* UTF8String */
+/* named bits */
+static int hf_ivi_PMD_national_holiday = -1;
+static int hf_ivi_PMD_even_days = -1;
+static int hf_ivi_PMD_odd_days = -1;
+static int hf_ivi_PMD_market_day = -1;
+static int hf_ivi_DayOfWeek_unused = -1;
+static int hf_ivi_DayOfWeek_monday = -1;
+static int hf_ivi_DayOfWeek_tuesday = -1;
+static int hf_ivi_DayOfWeek_wednesday = -1;
+static int hf_ivi_DayOfWeek_thursday = -1;
+static int hf_ivi_DayOfWeek_friday = -1;
+static int hf_ivi_DayOfWeek_saturday = -1;
+static int hf_ivi_DayOfWeek_sunday = -1;
+
+/* --- Module DSRC --- --- --- */
+
+static int hf_dsrc_dsrc_SPAT_PDU = -1; /* SPAT */
+static int hf_dsrc_dsrc_SignalRequestMessage_PDU = -1; /* SignalRequestMessage */
+static int hf_dsrc_dsrc_SignalStatusMessage_PDU = -1; /* SignalStatusMessage */
+static int hf_dsrc_dsrc_MapData_PDU = -1; /* MapData */
+static int hf_dsrc_regionId = -1; /* RegionId */
+static int hf_dsrc_regExtValue = -1; /* T_regExtValue */
+static int hf_dsrc_spatTimeStamp = -1; /* MinuteOfTheYear */
+static int hf_dsrc_name = -1; /* DescriptiveName */
+static int hf_dsrc_spatIntersections = -1; /* IntersectionStateList */
+static int hf_dsrc_spatRegional = -1; /* T_SPATRegional */
+static int hf_dsrc_spatRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_srmTimeStamp = -1; /* MinuteOfTheYear */
+static int hf_dsrc_second = -1; /* DSecond */
+static int hf_dsrc_sequenceNumber = -1; /* MsgCount */
+static int hf_dsrc_requests = -1; /* SignalRequestList */
+static int hf_dsrc_requestor = -1; /* RequestorDescription */
+static int hf_dsrc_srmRegional = -1; /* T_SRMRegional */
+static int hf_dsrc_srmRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_ssmTimeStamp = -1; /* MinuteOfTheYear */
+static int hf_dsrc_ssmStatus = -1; /* SignalStatusList */
+static int hf_dsrc_ssmRegional = -1; /* T_SSMRegional */
+static int hf_dsrc_ssmRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_mdTimeStamp = -1; /* MinuteOfTheYear */
+static int hf_dsrc_msgIssueRevision = -1; /* MsgCount */
+static int hf_dsrc_layerType = -1; /* LayerType */
+static int hf_dsrc_layerID = -1; /* LayerID */
+static int hf_dsrc_mdIntersections = -1; /* IntersectionGeometryList */
+static int hf_dsrc_roadSegments = -1; /* RoadSegmentList */
+static int hf_dsrc_dataParameters = -1; /* DataParameters */
+static int hf_dsrc_restrictionList = -1; /* RestrictionClassList */
+static int hf_dsrc_mapRegional = -1; /* T_MAPRegional */
+static int hf_dsrc_mapRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_asType = -1; /* AdvisorySpeedType */
+static int hf_dsrc_asSpeed = -1; /* SpeedAdvice */
+static int hf_dsrc_asConfidence = -1; /* SpeedConfidence */
+static int hf_dsrc_distance = -1; /* ZoneLength */
+static int hf_dsrc_class = -1; /* RestrictionClassID */
+static int hf_dsrc_asRegional = -1; /* T_AdvisorySpeedRegional */
+static int hf_dsrc_asRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_AdvisorySpeedList_item = -1; /* AdvisorySpeed */
+static int hf_dsrc_referenceLaneId = -1; /* LaneID */
+static int hf_dsrc_offsetXaxis = -1; /* T_offsetXaxis */
+static int hf_dsrc_small = -1; /* DrivenLineOffsetSm */
+static int hf_dsrc_large = -1; /* DrivenLineOffsetLg */
+static int hf_dsrc_offsetYaxis = -1; /* T_offsetYaxis */
+static int hf_dsrc_rotateXY = -1; /* Angle */
+static int hf_dsrc_scaleXaxis = -1; /* Scale_B12 */
+static int hf_dsrc_scaleYaxis = -1; /* Scale_B12 */
+static int hf_dsrc_clRegional = -1; /* T_ComputedLaneRegional */
+static int hf_dsrc_clRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_ConnectsToList_item = -1; /* Connection */
+static int hf_dsrc_lane = -1; /* LaneID */
+static int hf_dsrc_maneuver = -1; /* AllowedManeuvers */
+static int hf_dsrc_connectingLane = -1; /* ConnectingLane */
+static int hf_dsrc_remoteIntersection = -1; /* IntersectionReferenceID */
+static int hf_dsrc_signalGroup = -1; /* SignalGroupID */
+static int hf_dsrc_userClass = -1; /* RestrictionClassID */
+static int hf_dsrc_connectionID = -1; /* LaneConnectionID */
+static int hf_dsrc_queueLength = -1; /* ZoneLength */
+static int hf_dsrc_availableStorageLength = -1; /* ZoneLength */
+static int hf_dsrc_waitOnStop = -1; /* WaitOnStopline */
+static int hf_dsrc_pedBicycleDetect = -1; /* PedestrianBicycleDetect */
+static int hf_dsrc_cmaRegional = -1; /* T_ConnectionManeuverAssistRegional */
+static int hf_dsrc_cmaRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_processMethod = -1; /* IA5String_SIZE_1_255 */
+static int hf_dsrc_processAgency = -1; /* IA5String_SIZE_1_255 */
+static int hf_dsrc_lastCheckedDate = -1; /* IA5String_SIZE_1_255 */
+static int hf_dsrc_geoidUsed = -1; /* IA5String_SIZE_1_255 */
+static int hf_dsrc_EnabledLaneList_item = -1; /* LaneID */
+static int hf_dsrc_laneID = -1; /* LaneID */
+static int hf_dsrc_ingressApproach = -1; /* ApproachID */
+static int hf_dsrc_egressApproach = -1; /* ApproachID */
+static int hf_dsrc_laneAttributes = -1; /* LaneAttributes */
+static int hf_dsrc_maneuvers = -1; /* AllowedManeuvers */
+static int hf_dsrc_nodeList = -1; /* NodeListXY */
+static int hf_dsrc_connectsTo = -1; /* ConnectsToList */
+static int hf_dsrc_overlays = -1; /* OverlayLaneList */
+static int hf_dsrc_glRegional = -1; /* T_GenericLaneRegional */
+static int hf_dsrc_glRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_approach = -1; /* ApproachID */
+static int hf_dsrc_connection = -1; /* LaneConnectionID */
+static int hf_dsrc_igId = -1; /* IntersectionReferenceID */
+static int hf_dsrc_revision = -1; /* MsgCount */
+static int hf_dsrc_refPoint = -1; /* Position3D */
+static int hf_dsrc_laneWidth = -1; /* LaneWidth */
+static int hf_dsrc_speedLimits = -1; /* SpeedLimitList */
+static int hf_dsrc_laneSet = -1; /* LaneList */
+static int hf_dsrc_preemptPriorityData = -1; /* PreemptPriorityList */
+static int hf_dsrc_igRegional = -1; /* T_IntersectionGeometryRegional */
+static int hf_dsrc_igRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_IntersectionGeometryList_item = -1; /* IntersectionGeometry */
+static int hf_dsrc_region = -1; /* RoadRegulatorID */
+static int hf_dsrc_irId = -1; /* IntersectionID */
+static int hf_dsrc_isId = -1; /* IntersectionReferenceID */
+static int hf_dsrc_isStatus = -1; /* IntersectionStatusObject */
+static int hf_dsrc_moy = -1; /* MinuteOfTheYear */
+static int hf_dsrc_isTimeStamp = -1; /* DSecond */
+static int hf_dsrc_enabledLanes = -1; /* EnabledLaneList */
+static int hf_dsrc_states = -1; /* MovementList */
+static int hf_dsrc_maneuverAssistList = -1; /* ManeuverAssistList */
+static int hf_dsrc_isRegional = -1; /* T_IntersectionStateRegional */
+static int hf_dsrc_isRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_IntersectionStateList_item = -1; /* IntersectionState */
+static int hf_dsrc_directionalUse = -1; /* LaneDirection */
+static int hf_dsrc_sharedWith = -1; /* LaneSharing */
+static int hf_dsrc_laneType = -1; /* LaneTypeAttributes */
+static int hf_dsrc_laRegional = -1; /* RegionalExtension */
+static int hf_dsrc_pathEndPointAngle = -1; /* DeltaAngle */
+static int hf_dsrc_laneCrownPointCenter = -1; /* RoadwayCrownAngle */
+static int hf_dsrc_laneCrownPointLeft = -1; /* RoadwayCrownAngle */
+static int hf_dsrc_laneCrownPointRight = -1; /* RoadwayCrownAngle */
+static int hf_dsrc_laneAngle = -1; /* MergeDivergeNodeAngle */
+static int hf_dsrc_ldaRegional = -1; /* T_LaneDataAttributeRegional */
+static int hf_dsrc_ldaRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_LaneDataAttributeList_item = -1; /* LaneDataAttribute */
+static int hf_dsrc_LaneList_item = -1; /* GenericLane */
+static int hf_dsrc_vehicle = -1; /* LaneAttributes_Vehicle */
+static int hf_dsrc_crosswalk = -1; /* LaneAttributes_Crosswalk */
+static int hf_dsrc_bikeLane = -1; /* LaneAttributes_Bike */
+static int hf_dsrc_sidewalk = -1; /* LaneAttributes_Sidewalk */
+static int hf_dsrc_median = -1; /* LaneAttributes_Barrier */
+static int hf_dsrc_striping = -1; /* LaneAttributes_Striping */
+static int hf_dsrc_trackedVehicle = -1; /* LaneAttributes_TrackedVehicle */
+static int hf_dsrc_parking = -1; /* LaneAttributes_Parking */
+static int hf_dsrc_ManeuverAssistList_item = -1; /* ConnectionManeuverAssist */
+static int hf_dsrc_MovementEventList_item = -1; /* MovementEvent */
+static int hf_dsrc_eventState = -1; /* MovementPhaseState */
+static int hf_dsrc_timing = -1; /* TimeChangeDetails */
+static int hf_dsrc_speeds = -1; /* AdvisorySpeedList */
+static int hf_dsrc_meRegional = -1; /* T_MovementEventRegional */
+static int hf_dsrc_meRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_MovementList_item = -1; /* MovementState */
+static int hf_dsrc_movementName = -1; /* DescriptiveName */
+static int hf_dsrc_state_time_speed = -1; /* MovementEventList */
+static int hf_dsrc_msRegional = -1; /* T_MovementStateRegional */
+static int hf_dsrc_msRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_localNode = -1; /* NodeAttributeXYList */
+static int hf_dsrc_disabled = -1; /* SegmentAttributeXYList */
+static int hf_dsrc_enabled = -1; /* SegmentAttributeXYList */
+static int hf_dsrc_data = -1; /* LaneDataAttributeList */
+static int hf_dsrc_dWidth = -1; /* Offset_B10 */
+static int hf_dsrc_dElevation = -1; /* Offset_B10 */
+static int hf_dsrc_nasxyRegional = -1; /* T_NodeAttributeSetXYRegional */
+static int hf_dsrc_nasxyRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_NodeAttributeXYList_item = -1; /* NodeAttributeXY */
+static int hf_dsrc_lon = -1; /* Longitude */
+static int hf_dsrc_lat = -1; /* Latitude */
+static int hf_dsrc_n20bX = -1; /* Offset_B10 */
+static int hf_dsrc_n20bY = -1; /* Offset_B10 */
+static int hf_dsrc_n22bX = -1; /* Offset_B11 */
+static int hf_dsrc_n22bY = -1; /* Offset_B11 */
+static int hf_dsrc_n24bX = -1; /* Offset_B12 */
+static int hf_dsrc_n24bY = -1; /* Offset_B12 */
+static int hf_dsrc_n26bX = -1; /* Offset_B13 */
+static int hf_dsrc_n26bY = -1; /* Offset_B13 */
+static int hf_dsrc_n28bX = -1; /* Offset_B14 */
+static int hf_dsrc_n28bY = -1; /* Offset_B14 */
+static int hf_dsrc_n32bX = -1; /* Offset_B16 */
+static int hf_dsrc_n32bY = -1; /* Offset_B16 */
+static int hf_dsrc_nodes = -1; /* NodeSetXY */
+static int hf_dsrc_computed = -1; /* ComputedLane */
+static int hf_dsrc_node_XY1 = -1; /* Node_XY_20b */
+static int hf_dsrc_node_XY2 = -1; /* Node_XY_22b */
+static int hf_dsrc_node_XY3 = -1; /* Node_XY_24b */
+static int hf_dsrc_node_XY4 = -1; /* Node_XY_26b */
+static int hf_dsrc_node_XY5 = -1; /* Node_XY_28b */
+static int hf_dsrc_node_XY6 = -1; /* Node_XY_32b */
+static int hf_dsrc_node_LatLon = -1; /* Node_LLmD_64b */
+static int hf_dsrc_nopxyRegional = -1; /* RegionalExtension */
+static int hf_dsrc_NodeSetXY_item = -1; /* NodeXY */
+static int hf_dsrc_delta = -1; /* NodeOffsetPointXY */
+static int hf_dsrc_attributes = -1; /* NodeAttributeSetXY */
+static int hf_dsrc_OverlayLaneList_item = -1; /* LaneID */
+static int hf_dsrc_long = -1; /* Longitude */
+static int hf_dsrc_elevation = -1; /* Elevation */
+static int hf_dsrc_p3dRegional = -1; /* T_Position3DRegional */
+static int hf_dsrc_p3dRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_PreemptPriorityList_item = -1; /* SignalControlZone */
+static int hf_dsrc_rslType = -1; /* SpeedLimitType */
+static int hf_dsrc_rslSpeed = -1; /* Velocity */
+static int hf_dsrc_rdId = -1; /* VehicleID */
+static int hf_dsrc_rdType = -1; /* RequestorType */
+static int hf_dsrc_rdPosition = -1; /* RequestorPositionVector */
+static int hf_dsrc_routeName = -1; /* DescriptiveName */
+static int hf_dsrc_transitStatus = -1; /* TransitVehicleStatus */
+static int hf_dsrc_transitOccupancy = -1; /* TransitVehicleOccupancy */
+static int hf_dsrc_transitSchedule = -1; /* DeltaTime */
+static int hf_dsrc_rdRegional = -1; /* T_RequestorDescriptionRegional */
+static int hf_dsrc_rdRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_rpvPosition = -1; /* Position3D */
+static int hf_dsrc_heading = -1; /* Angle */
+static int hf_dsrc_rpvSpeed = -1; /* TransmissionAndSpeed */
+static int hf_dsrc_role = -1; /* BasicVehicleRole */
+static int hf_dsrc_subrole = -1; /* RequestSubRole */
+static int hf_dsrc_rtRequest = -1; /* RequestImportanceLevel */
+static int hf_dsrc_iso3883 = -1; /* Iso3833VehicleType */
+static int hf_dsrc_hpmsType = -1; /* VehicleType */
+static int hf_dsrc_rtRegional = -1; /* RegionalExtension */
+static int hf_dsrc_scaId = -1; /* RestrictionClassID */
+static int hf_dsrc_users = -1; /* RestrictionUserTypeList */
+static int hf_dsrc_RestrictionClassList_item = -1; /* RestrictionClassAssignment */
+static int hf_dsrc_RestrictionUserTypeList_item = -1; /* RestrictionUserType */
+static int hf_dsrc_basicType = -1; /* RestrictionAppliesTo */
+static int hf_dsrc_rutRegional = -1; /* T_RestrictionUserTypeRegional */
+static int hf_dsrc_rutRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_RoadLaneSetList_item = -1; /* GenericLane */
+static int hf_dsrc_rsrId = -1; /* RoadSegmentID */
+static int hf_dsrc_rsId = -1; /* RoadSegmentReferenceID */
+static int hf_dsrc_roadLaneSet = -1; /* RoadLaneSetList */
+static int hf_dsrc_rsRegional = -1; /* T_RoadSegmentRegional */
+static int hf_dsrc_rsRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_RoadSegmentList_item = -1; /* RoadSegment */
+static int hf_dsrc_SegmentAttributeXYList_item = -1; /* SegmentAttributeXY */
+static int hf_dsrc_zone = -1; /* RegionalExtension */
+static int hf_dsrc_sriId = -1; /* VehicleID */
+static int hf_dsrc_sriRequest = -1; /* RequestID */
+static int hf_dsrc_typeData = -1; /* RequestorType */
+static int hf_dsrc_SignalRequestList_item = -1; /* SignalRequestPackage */
+static int hf_dsrc_srpRequest = -1; /* SignalRequest */
+static int hf_dsrc_minute = -1; /* MinuteOfTheYear */
+static int hf_dsrc_duration = -1; /* DSecond */
+static int hf_dsrc_srpRegional = -1; /* T_SignalRequestPackageRegional */
+static int hf_dsrc_srpRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_srId = -1; /* IntersectionReferenceID */
+static int hf_dsrc_requestID = -1; /* RequestID */
+static int hf_dsrc_requestType = -1; /* PriorityRequestType */
+static int hf_dsrc_inBoundLane = -1; /* IntersectionAccessPoint */
+static int hf_dsrc_outBoundLane = -1; /* IntersectionAccessPoint */
+static int hf_dsrc_srRegional = -1; /* T_SignalRequestRegional */
+static int hf_dsrc_srRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_SignalStatusList_item = -1; /* SignalStatus */
+static int hf_dsrc_SignalStatusPackageList_item = -1; /* SignalStatusPackage */
+static int hf_dsrc_requester = -1; /* SignalRequesterInfo */
+static int hf_dsrc_inboundOn = -1; /* IntersectionAccessPoint */
+static int hf_dsrc_outboundOn = -1; /* IntersectionAccessPoint */
+static int hf_dsrc_sspStatus = -1; /* PrioritizationResponseStatus */
+static int hf_dsrc_sspRegional = -1; /* T_SignalStatusPackageRegional */
+static int hf_dsrc_sspRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_ssId = -1; /* IntersectionReferenceID */
+static int hf_dsrc_sigStatus = -1; /* SignalStatusPackageList */
+static int hf_dsrc_ssRegional = -1; /* T_SignalStatusRegional */
+static int hf_dsrc_ssRegional_item = -1; /* RegionalExtension */
+static int hf_dsrc_SpeedLimitList_item = -1; /* RegulatorySpeedLimit */
+static int hf_dsrc_startTime = -1; /* TimeMark */
+static int hf_dsrc_minEndTime = -1; /* TimeMark */
+static int hf_dsrc_maxEndTime = -1; /* TimeMark */
+static int hf_dsrc_likelyTime = -1; /* TimeMark */
+static int hf_dsrc_tcdConfidence = -1; /* TimeIntervalConfidence */
+static int hf_dsrc_nextTime = -1; /* TimeMark */
+static int hf_dsrc_transmisson = -1; /* TransmissionState */
+static int hf_dsrc_tasSpeed = -1; /* Velocity */
+static int hf_dsrc_entityID = -1; /* TemporaryID */
+static int hf_dsrc_stationID = -1; /* StationID */
+/* named bits */
+static int hf_dsrc_LaneSharing_overlappingLaneDescriptionProvided = -1;
+static int hf_dsrc_LaneSharing_multipleLanesTreatedAsOneLane = -1;
+static int hf_dsrc_LaneSharing_otherNonMotorizedTrafficTypes = -1;
+static int hf_dsrc_LaneSharing_individualMotorizedVehicleTraffic = -1;
+static int hf_dsrc_LaneSharing_busVehicleTraffic = -1;
+static int hf_dsrc_LaneSharing_taxiVehicleTraffic = -1;
+static int hf_dsrc_LaneSharing_pedestriansTraffic = -1;
+static int hf_dsrc_LaneSharing_cyclistVehicleTraffic = -1;
+static int hf_dsrc_LaneSharing_trackedVehicleTraffic = -1;
+static int hf_dsrc_LaneSharing_pedestrianTraffic = -1;
+static int hf_dsrc_AllowedManeuvers_maneuverStraightAllowed = -1;
+static int hf_dsrc_AllowedManeuvers_maneuverLeftAllowed = -1;
+static int hf_dsrc_AllowedManeuvers_maneuverRightAllowed = -1;
+static int hf_dsrc_AllowedManeuvers_maneuverUTurnAllowed = -1;
+static int hf_dsrc_AllowedManeuvers_maneuverLeftTurnOnRedAllowed = -1;
+static int hf_dsrc_AllowedManeuvers_maneuverRightTurnOnRedAllowed = -1;
+static int hf_dsrc_AllowedManeuvers_maneuverLaneChangeAllowed = -1;
+static int hf_dsrc_AllowedManeuvers_maneuverNoStoppingAllowed = -1;
+static int hf_dsrc_AllowedManeuvers_yieldAllwaysRequired = -1;
+static int hf_dsrc_AllowedManeuvers_goWithHalt = -1;
+static int hf_dsrc_AllowedManeuvers_caution = -1;
+static int hf_dsrc_AllowedManeuvers_reserved1 = -1;
+static int hf_dsrc_IntersectionStatusObject_manualControlIsEnabled = -1;
+static int hf_dsrc_IntersectionStatusObject_stopTimeIsActivated = -1;
+static int hf_dsrc_IntersectionStatusObject_failureFlash = -1;
+static int hf_dsrc_IntersectionStatusObject_preemptIsActive = -1;
+static int hf_dsrc_IntersectionStatusObject_signalPriorityIsActive = -1;
+static int hf_dsrc_IntersectionStatusObject_fixedTimeOperation = -1;
+static int hf_dsrc_IntersectionStatusObject_trafficDependentOperation = -1;
+static int hf_dsrc_IntersectionStatusObject_standbyOperation = -1;
+static int hf_dsrc_IntersectionStatusObject_failureMode = -1;
+static int hf_dsrc_IntersectionStatusObject_off = -1;
+static int hf_dsrc_IntersectionStatusObject_recentMAPmessageUpdate = -1;
+static int hf_dsrc_IntersectionStatusObject_recentChangeInMAPassignedLanesIDsUsed = -1;
+static int hf_dsrc_IntersectionStatusObject_noValidMAPisAvailableAtThisTime = -1;
+static int hf_dsrc_IntersectionStatusObject_noValidSPATisAvailableAtThisTime = -1;
+static int hf_dsrc_LaneAttributes_Barrier_median_RevocableLane = -1;
+static int hf_dsrc_LaneAttributes_Barrier_median = -1;
+static int hf_dsrc_LaneAttributes_Barrier_whiteLineHashing = -1;
+static int hf_dsrc_LaneAttributes_Barrier_stripedLines = -1;
+static int hf_dsrc_LaneAttributes_Barrier_doubleStripedLines = -1;
+static int hf_dsrc_LaneAttributes_Barrier_trafficCones = -1;
+static int hf_dsrc_LaneAttributes_Barrier_constructionBarrier = -1;
+static int hf_dsrc_LaneAttributes_Barrier_trafficChannels = -1;
+static int hf_dsrc_LaneAttributes_Barrier_lowCurbs = -1;
+static int hf_dsrc_LaneAttributes_Barrier_highCurbs = -1;
+static int hf_dsrc_LaneAttributes_Bike_bikeRevocableLane = -1;
+static int hf_dsrc_LaneAttributes_Bike_pedestrianUseAllowed = -1;
+static int hf_dsrc_LaneAttributes_Bike_isBikeFlyOverLane = -1;
+static int hf_dsrc_LaneAttributes_Bike_fixedCycleTime = -1;
+static int hf_dsrc_LaneAttributes_Bike_biDirectionalCycleTimes = -1;
+static int hf_dsrc_LaneAttributes_Bike_isolatedByBarrier = -1;
+static int hf_dsrc_LaneAttributes_Bike_unsignalizedSegmentsPresent = -1;
+static int hf_dsrc_LaneAttributes_Crosswalk_crosswalkRevocableLane = -1;
+static int hf_dsrc_LaneAttributes_Crosswalk_bicyleUseAllowed = -1;
+static int hf_dsrc_LaneAttributes_Crosswalk_isXwalkFlyOverLane = -1;
+static int hf_dsrc_LaneAttributes_Crosswalk_fixedCycleTime = -1;
+static int hf_dsrc_LaneAttributes_Crosswalk_biDirectionalCycleTimes = -1;
+static int hf_dsrc_LaneAttributes_Crosswalk_hasPushToWalkButton = -1;
+static int hf_dsrc_LaneAttributes_Crosswalk_audioSupport = -1;
+static int hf_dsrc_LaneAttributes_Crosswalk_rfSignalRequestPresent = -1;
+static int hf_dsrc_LaneAttributes_Crosswalk_unsignalizedSegmentsPresent = -1;
+static int hf_dsrc_LaneAttributes_Parking_parkingRevocableLane = -1;
+static int hf_dsrc_LaneAttributes_Parking_parallelParkingInUse = -1;
+static int hf_dsrc_LaneAttributes_Parking_headInParkingInUse = -1;
+static int hf_dsrc_LaneAttributes_Parking_doNotParkZone = -1;
+static int hf_dsrc_LaneAttributes_Parking_parkingForBusUse = -1;
+static int hf_dsrc_LaneAttributes_Parking_parkingForTaxiUse = -1;
+static int hf_dsrc_LaneAttributes_Parking_noPublicParkingUse = -1;
+static int hf_dsrc_LaneAttributes_Sidewalk_sidewalk_RevocableLane = -1;
+static int hf_dsrc_LaneAttributes_Sidewalk_bicyleUseAllowed = -1;
+static int hf_dsrc_LaneAttributes_Sidewalk_isSidewalkFlyOverLane = -1;
+static int hf_dsrc_LaneAttributes_Sidewalk_walkBikes = -1;
+static int hf_dsrc_LaneAttributes_Striping_stripeToConnectingLanesRevocableLane = -1;
+static int hf_dsrc_LaneAttributes_Striping_stripeDrawOnLeft = -1;
+static int hf_dsrc_LaneAttributes_Striping_stripeDrawOnRight = -1;
+static int hf_dsrc_LaneAttributes_Striping_stripeToConnectingLanesLeft = -1;
+static int hf_dsrc_LaneAttributes_Striping_stripeToConnectingLanesRight = -1;
+static int hf_dsrc_LaneAttributes_Striping_stripeToConnectingLanesAhead = -1;
+static int hf_dsrc_LaneAttributes_TrackedVehicle_spec_RevocableLane = -1;
+static int hf_dsrc_LaneAttributes_TrackedVehicle_spec_commuterRailRoadTrack = -1;
+static int hf_dsrc_LaneAttributes_TrackedVehicle_spec_lightRailRoadTrack = -1;
+static int hf_dsrc_LaneAttributes_TrackedVehicle_spec_heavyRailRoadTrack = -1;
+static int hf_dsrc_LaneAttributes_TrackedVehicle_spec_otherRailType = -1;
+static int hf_dsrc_LaneAttributes_Vehicle_isVehicleRevocableLane = -1;
+static int hf_dsrc_LaneAttributes_Vehicle_isVehicleFlyOverLane = -1;
+static int hf_dsrc_LaneAttributes_Vehicle_hovLaneUseOnly = -1;
+static int hf_dsrc_LaneAttributes_Vehicle_restrictedToBusUse = -1;
+static int hf_dsrc_LaneAttributes_Vehicle_restrictedToTaxiUse = -1;
+static int hf_dsrc_LaneAttributes_Vehicle_restrictedFromPublicUse = -1;
+static int hf_dsrc_LaneAttributes_Vehicle_hasIRbeaconCoverage = -1;
+static int hf_dsrc_LaneAttributes_Vehicle_permissionOnRequest = -1;
+static int hf_dsrc_LaneDirection_ingressPath = -1;
+static int hf_dsrc_LaneDirection_egressPath = -1;
+static int hf_dsrc_TransitVehicleStatus_loading = -1;
+static int hf_dsrc_TransitVehicleStatus_anADAuse = -1;
+static int hf_dsrc_TransitVehicleStatus_aBikeLoad = -1;
+static int hf_dsrc_TransitVehicleStatus_doorOpen = -1;
+static int hf_dsrc_TransitVehicleStatus_charging = -1;
+static int hf_dsrc_TransitVehicleStatus_atStopLine = -1;
+
+/* --- Module AddGrpC --- --- --- */
+
+static int hf_AddGrpC_AddGrpC_ConnectionManeuverAssist_addGrpC_PDU = -1; /* ConnectionManeuverAssist_addGrpC */
+static int hf_AddGrpC_AddGrpC_ConnectionTrajectory_addGrpC_PDU = -1; /* ConnectionTrajectory_addGrpC */
+static int hf_AddGrpC_AddGrpC_Control_addGrpC_PDU = -1; /* Control_addGrpC */
+static int hf_AddGrpC_AddGrpC_IntersectionState_addGrpC_PDU = -1; /* IntersectionState_addGrpC */
+static int hf_AddGrpC_AddGrpC_MapData_addGrpC_PDU = -1; /* MapData_addGrpC */
+static int hf_AddGrpC_AddGrpC_Position3D_addGrpC_PDU = -1; /* Position3D_addGrpC */
+static int hf_AddGrpC_AddGrpC_RestrictionUserType_addGrpC_PDU = -1; /* RestrictionUserType_addGrpC */
+static int hf_AddGrpC_AddGrpC_SignalStatusPackage_addGrpC_PDU = -1; /* SignalStatusPackage_addGrpC */
+static int hf_AddGrpC_itsStationPositions = -1; /* ItsStationPositionList */
+static int hf_AddGrpC_rsuGNSSOffset = -1; /* NodeOffsetPointXY */
+static int hf_AddGrpC_nodes = -1; /* NodeSetXY */
+static int hf_AddGrpC_ptvRequest = -1; /* PtvRequestType */
+static int hf_AddGrpC_activePrioritizations = -1; /* PrioritizationResponseList */
+static int hf_AddGrpC_signalHeadLocations = -1; /* SignalHeadLocationList */
+static int hf_AddGrpC_altitude = -1; /* Altitude */
+static int hf_AddGrpC_PrioritizationResponseList_item = -1; /* PrioritizationResponse */
+static int hf_AddGrpC_stationID = -1; /* StationID */
+static int hf_AddGrpC_priorState = -1; /* PrioritizationResponseStatus */
+static int hf_AddGrpC_signalGroup = -1; /* SignalGroupID */
+static int hf_AddGrpC_emission = -1; /* EmissionType */
+static int hf_AddGrpC_SignalHeadLocationList_item = -1; /* SignalHeadLocation */
+static int hf_AddGrpC_nodeXY = -1; /* NodeOffsetPointXY */
+static int hf_AddGrpC_nodeZ = -1; /* DeltaAltitude */
+static int hf_AddGrpC_signalGroupID = -1; /* SignalGroupID */
+static int hf_AddGrpC_synchToSchedule = -1; /* DeltaTime */
+static int hf_AddGrpC_ItsStationPositionList_item = -1; /* ItsStationPosition */
+static int hf_AddGrpC_laneID = -1; /* LaneID */
+static int hf_AddGrpC_timeReference = -1; /* TimeReference */
+
+/* --- Module CAM-PDU-Descriptions --- --- --- */
+
+static int hf_cam_cam_CoopAwareness_PDU = -1; /* CoopAwareness */
+static int hf_cam_generationDeltaTime = -1; /* GenerationDeltaTime */
+static int hf_cam_camParameters = -1; /* CamParameters */
+static int hf_cam_basicContainer = -1; /* BasicContainer */
+static int hf_cam_highFrequencyContainer = -1; /* HighFrequencyContainer */
+static int hf_cam_lowFrequencyContainer = -1; /* LowFrequencyContainer */
+static int hf_cam_specialVehicleContainer = -1; /* SpecialVehicleContainer */
+static int hf_cam_basicVehicleContainerHighFrequency = -1; /* BasicVehicleContainerHighFrequency */
+static int hf_cam_rsuContainerHighFrequency = -1; /* RSUContainerHighFrequency */
+static int hf_cam_basicVehicleContainerLowFrequency = -1; /* BasicVehicleContainerLowFrequency */
+static int hf_cam_publicTransportContainer = -1; /* PublicTransportContainer */
+static int hf_cam_specialTransportContainer = -1; /* SpecialTransportContainer */
+static int hf_cam_dangerousGoodsContainer = -1; /* DangerousGoodsContainer */
+static int hf_cam_roadWorksContainerBasic = -1; /* RoadWorksContainerBasic */
+static int hf_cam_rescueContainer = -1; /* RescueContainer */
+static int hf_cam_emergencyContainer = -1; /* EmergencyContainer */
+static int hf_cam_safetyCarContainer = -1; /* SafetyCarContainer */
+static int hf_cam_stationType = -1; /* StationType */
+static int hf_cam_referencePosition = -1; /* ReferencePosition */
+static int hf_cam_heading = -1; /* Heading */
+static int hf_cam_speed = -1; /* Speed */
+static int hf_cam_driveDirection = -1; /* DriveDirection */
+static int hf_cam_vehicleLength = -1; /* VehicleLength */
+static int hf_cam_vehicleWidth = -1; /* VehicleWidth */
+static int hf_cam_longitudinalAcceleration = -1; /* LongitudinalAcceleration */
+static int hf_cam_curvature = -1; /* Curvature */
+static int hf_cam_curvatureCalculationMode = -1; /* CurvatureCalculationMode */
+static int hf_cam_yawRate = -1; /* YawRate */
+static int hf_cam_accelerationControl = -1; /* AccelerationControl */
+static int hf_cam_lanePosition = -1; /* LanePosition */
+static int hf_cam_steeringWheelAngle = -1; /* SteeringWheelAngle */
+static int hf_cam_lateralAcceleration = -1; /* LateralAcceleration */
+static int hf_cam_verticalAcceleration = -1; /* VerticalAcceleration */
+static int hf_cam_performanceClass = -1; /* PerformanceClass */
+static int hf_cam_cenDsrcTollingZone = -1; /* CenDsrcTollingZone */
+static int hf_cam_vehicleRole = -1; /* VehicleRole */
+static int hf_cam_exteriorLights = -1; /* ExteriorLights */
+static int hf_cam_pathHistory = -1; /* PathHistory */
+static int hf_cam_embarkationStatus = -1; /* EmbarkationStatus */
+static int hf_cam_ptActivation = -1; /* PtActivation */
+static int hf_cam_specialTransportType = -1; /* SpecialTransportType */
+static int hf_cam_lightBarSirenInUse = -1; /* LightBarSirenInUse */
+static int hf_cam_dangerousGoodsBasic = -1; /* DangerousGoodsBasic */
+static int hf_cam_roadworksSubCauseCode = -1; /* RoadworksSubCauseCode */
+static int hf_cam_closedLanes = -1; /* ClosedLanes */
+static int hf_cam_incidentIndication = -1; /* CauseCode */
+static int hf_cam_emergencyPriority = -1; /* EmergencyPriority */
+static int hf_cam_trafficRule = -1; /* TrafficRule */
+static int hf_cam_speedLimit = -1; /* SpeedLimit */
+static int hf_cam_protectedCommunicationZonesRSU = -1; /* ProtectedCommunicationZonesRSU */
+
+/* --- Module DENM-PDU-Descriptions --- --- --- */
+
+static int hf_denm_denm_DecentralizedEnvironmentalNotificationMessage_PDU = -1; /* DecentralizedEnvironmentalNotificationMessage */
+static int hf_denm_management = -1; /* ManagementContainer */
+static int hf_denm_situation = -1; /* SituationContainer */
+static int hf_denm_location = -1; /* LocationContainer */
+static int hf_denm_alacarte = -1; /* AlacarteContainer */
+static int hf_denm_actionID = -1; /* ActionID */
+static int hf_denm_detectionTime = -1; /* TimestampIts */
+static int hf_denm_referenceTime = -1; /* TimestampIts */
+static int hf_denm_termination = -1; /* Termination */
+static int hf_denm_eventPosition = -1; /* ReferencePosition */
+static int hf_denm_relevanceDistance = -1; /* RelevanceDistance */
+static int hf_denm_relevanceTrafficDirection = -1; /* RelevanceTrafficDirection */
+static int hf_denm_validityDuration = -1; /* ValidityDuration */
+static int hf_denm_transmissionInterval = -1; /* TransmissionInterval */
+static int hf_denm_stationType = -1; /* StationType */
+static int hf_denm_informationQuality = -1; /* InformationQuality */
+static int hf_denm_eventType = -1; /* CauseCode */
+static int hf_denm_linkedCause = -1; /* CauseCode */
+static int hf_denm_eventHistory = -1; /* EventHistory */
+static int hf_denm_eventSpeed = -1; /* Speed */
+static int hf_denm_eventPositionHeading = -1; /* Heading */
+static int hf_denm_traces = -1; /* Traces */
+static int hf_denm_roadType = -1; /* RoadType */
+static int hf_denm_heightLonCarrLeft = -1; /* HeightLonCarr */
+static int hf_denm_heightLonCarrRight = -1; /* HeightLonCarr */
+static int hf_denm_posLonCarrLeft = -1; /* PosLonCarr */
+static int hf_denm_posLonCarrRight = -1; /* PosLonCarr */
+static int hf_denm_positionOfPillars = -1; /* PositionOfPillars */
+static int hf_denm_posCentMass = -1; /* PosCentMass */
+static int hf_denm_wheelBaseVehicle = -1; /* WheelBaseVehicle */
+static int hf_denm_turningRadius = -1; /* TurningRadius */
+static int hf_denm_posFrontAx = -1; /* PosFrontAx */
+static int hf_denm_positionOfOccupants = -1; /* PositionOfOccupants */
+static int hf_denm_vehicleMass = -1; /* VehicleMass */
+static int hf_denm_requestResponseIndication = -1; /* RequestResponseIndication */
+static int hf_denm_lightBarSirenInUse = -1; /* LightBarSirenInUse */
+static int hf_denm_closedLanes = -1; /* ClosedLanes */
+static int hf_denm_restriction = -1; /* RestrictedTypes */
+static int hf_denm_speedLimit = -1; /* SpeedLimit */
+static int hf_denm_incidentIndication = -1; /* CauseCode */
+static int hf_denm_recommendedPath = -1; /* ItineraryPath */
+static int hf_denm_startingPointSpeedLimit = -1; /* DeltaReferencePosition */
+static int hf_denm_trafficFlowRule = -1; /* TrafficRule */
+static int hf_denm_referenceDenms = -1; /* ReferenceDenms */
+static int hf_denm_stationarySince = -1; /* StationarySince */
+static int hf_denm_stationaryCause = -1; /* CauseCode */
+static int hf_denm_carryingDangerousGoods = -1; /* DangerousGoodsExtended */
+static int hf_denm_numberOfOccupants = -1; /* NumberOfOccupants */
+static int hf_denm_vehicleIdentification = -1; /* VehicleIdentification */
+static int hf_denm_energyStorageType = -1; /* EnergyStorageType */
+static int hf_denm_lanePosition = -1; /* LanePosition */
+static int hf_denm_impactReduction = -1; /* ImpactReductionContainer */
+static int hf_denm_externalTemperature = -1; /* Temperature */
+static int hf_denm_roadWorks = -1; /* RoadWorksContainerExtended */
+static int hf_denm_positioningSolution = -1; /* PositioningSolutionType */
+static int hf_denm_stationaryVehicle = -1; /* StationaryVehicleContainer */
+static int hf_denm_ReferenceDenms_item = -1; /* ActionID */
+
+/* --- Module TIS-TPG-Transactions-Descriptions --- --- --- */
+
+static int hf_tistpg_tistpg_TisTpgTransaction_PDU = -1; /* TisTpgTransaction */
+static int hf_tistpg_drm = -1; /* TisTpgDRM */
+static int hf_tistpg_snm = -1; /* TisTpgSNM */
+static int hf_tistpg_trm = -1; /* TisTpgTRM */
+static int hf_tistpg_tcm = -1; /* TisTpgTCM */
+static int hf_tistpg_vdrm = -1; /* TisTpgVDRM */
+static int hf_tistpg_vdpm = -1; /* TisTpgVDPM */
+static int hf_tistpg_eofm = -1; /* TisTpgEOFM */
+static int hf_tistpg_drmManagement = -1; /* TisTpgDRM_Management */
+static int hf_tistpg_drmSituation = -1; /* TisTpgDRM_Situation */
+static int hf_tistpg_drmLocation = -1; /* TisTpgDRM_Location */
+static int hf_tistpg_generationTime = -1; /* TimestampIts */
+static int hf_tistpg_vehicleType = -1; /* UNVehicleClassifcation */
+static int hf_tistpg_costumerContract = -1; /* CustomerContract */
+static int hf_tistpg_tisProfile = -1; /* TisProfile */
+static int hf_tistpg_causeCode = -1; /* CauseCode */
+static int hf_tistpg_vehiclePosition = -1; /* ReferencePosition */
+static int hf_tistpg_vehicleSpeed = -1; /* Speed */
+static int hf_tistpg_vehicleHeading = -1; /* Heading */
+static int hf_tistpg_requestedPosition = -1; /* ReferencePosition */
+static int hf_tistpg_searchRange = -1; /* SearchRange */
+static int hf_tistpg_searchCondition = -1; /* SearchCondition */
+static int hf_tistpg_snmManagement = -1; /* TisTpgSNM_Management */
+static int hf_tistpg_tpgContainer = -1; /* TpgNotifContainer */
+static int hf_tistpg_totalTpgStations = -1; /* TotalTpgStations */
+static int hf_tistpg_trmManagement = -1; /* TisTpgTRM_Management */
+static int hf_tistpg_trmSituation = -1; /* TisTpgTRM_Situation */
+static int hf_tistpg_trmLocation = -1; /* TisTpgTRM_Location */
+static int hf_tistpg_tpgStationID = -1; /* StationID */
+static int hf_tistpg_reservationStatus = -1; /* ReservationStatus */
+static int hf_tistpg_costumercontract = -1; /* CustomerContract */
+static int hf_tistpg_reservationID = -1; /* ReservationID */
+static int hf_tistpg_estArrivalTime = -1; /* TimestampIts */
+static int hf_tistpg_proposedPairingID = -1; /* PairingID */
+static int hf_tistpg_tcmManagement = -1; /* TisTpgTCM_Management */
+static int hf_tistpg_tcmSituation = -1; /* TisTpgTCM_Situation */
+static int hf_tistpg_tcmLocation = -1; /* TisTpgTCM_Location */
+static int hf_tistpg_reservedTpg = -1; /* INTEGER_1_65535 */
+static int hf_tistpg_tpgAutomationLevel = -1; /* TpgAutomation */
+static int hf_tistpg_pairingID = -1; /* PairingID */
+static int hf_tistpg_reservationTimeLimit = -1; /* TimestampIts */
+static int hf_tistpg_cancellationCondition = -1; /* CancellationCondition */
+static int hf_tistpg_tpgLocation = -1; /* ReferencePosition */
+static int hf_tistpg_address = -1; /* UTF8String_SIZE_1_128 */
+static int hf_tistpg_vdrmManagement = -1; /* TisTpgVDRM_Management */
+static int hf_tistpg_fillingStatus = -1; /* FillingStatus */
+static int hf_tistpg_automationLevel = -1; /* TpgAutomation */
+static int hf_tistpg_vdpmManagement = -1; /* TisTpgVDPM_Management */
+static int hf_tistpg_placardTable = -1; /* PlacardTable */
+static int hf_tistpg_vehicleSpecificData = -1; /* VehicleSpecificData */
+static int hf_tistpg_language = -1; /* Language */
+static int hf_tistpg_tyreTempCondition = -1; /* TyreTempCondition */
+static int hf_tistpg_currentVehicleConfiguration = -1; /* PressureConfiguration */
+static int hf_tistpg_frontLeftTyreData = -1; /* TyreData */
+static int hf_tistpg_frontRightTyreData = -1; /* TyreData */
+static int hf_tistpg_rearLeftTyreData = -1; /* TyreData */
+static int hf_tistpg_rearRightTyreData = -1; /* TyreData */
+static int hf_tistpg_spareTyreData = -1; /* TyreData */
+static int hf_tistpg_eofmManagement = -1; /* TisTpgEOFM_Management */
+static int hf_tistpg_numberOfAppliedPressure = -1; /* NumberOfAppliedPressure */
+static int hf_tistpg_appliedTyrePressures = -1; /* AppliedTyrePressures */
+static int hf_tistpg_PlacardTable_item = -1; /* TyreSetVariant */
+static int hf_tistpg_variantID = -1; /* TyreSetVariantID */
+static int hf_tistpg_frontAxleDimension = -1; /* TyreSidewallInformation */
+static int hf_tistpg_rearAxleDimension = -1; /* TyreSidewallInformation */
+static int hf_tistpg_pressureVariantsList = -1; /* PressureVariantsList */
+static int hf_tistpg_PressureVariantsList_item = -1; /* PressureVariant */
+static int hf_tistpg_pressureConfiguration = -1; /* PressureConfiguration */
+static int hf_tistpg_frontAxlePressure = -1; /* AxlePlacardPressure */
+static int hf_tistpg_rearAxlePressure = -1; /* AxlePlacardPressure */
+static int hf_tistpg_currentTyrePressure = -1; /* T_currentTyrePressure */
+static int hf_tistpg_tyrePressureValue = -1; /* TyrePressure */
+static int hf_tistpg_unavailable = -1; /* NULL */
+static int hf_tistpg_tyreSidewallInformation = -1; /* T_tyreSidewallInformation */
+static int hf_tistpg_tyreSidewallInformationValue = -1; /* TyreSidewallInformation */
+static int hf_tistpg_currentInsideAirTemperature = -1; /* T_currentInsideAirTemperature */
+static int hf_tistpg_tyreAirTemperatureValue = -1; /* TyreAirTemperature */
+static int hf_tistpg_recommendedTyrePressure = -1; /* T_recommendedTyrePressure */
+static int hf_tistpg_axlePlacardPressureValue = -1; /* AxlePlacardPressure */
+static int hf_tistpg_tin = -1; /* T_tin */
+static int hf_tistpg_tinValue = -1; /* TIN */
+static int hf_tistpg_sensorState = -1; /* T_sensorState */
+static int hf_tistpg_sensorStateValue = -1; /* SensorState */
+static int hf_tistpg_tpgNumber = -1; /* TpgNumber */
+static int hf_tistpg_tpgProvider = -1; /* TpgProvider */
+static int hf_tistpg_accessibility = -1; /* Accessibility */
+static int hf_tistpg_phoneNumber = -1; /* PhoneNumber */
+static int hf_tistpg_digitalMap = -1; /* DigitalMap */
+static int hf_tistpg_openingDaysHours = -1; /* OpeningDaysHours */
+static int hf_tistpg_bookingInfo = -1; /* BookingInfo */
+static int hf_tistpg_availableTpgNumber = -1; /* AvailableTpgNumber */
+static int hf_tistpg_AppliedTyrePressures_item = -1; /* AppliedTyrePressure */
+static int hf_tistpg_TpgNotifContainer_item = -1; /* TpgStationData */
+/* named bits */
+static int hf_tistpg_TpgAutomation_fullAutomated = -1;
+static int hf_tistpg_TpgAutomation_semiAutomated = -1;
+static int hf_tistpg_TpgAutomation_manual = -1;
+static int hf_tistpg_TpgAutomation_reserved = -1;
+static int hf_tistpg_TisProfile_reserved = -1;
+static int hf_tistpg_TisProfile_profileOne = -1;
+static int hf_tistpg_TisProfile_profileTwo = -1;
+static int hf_tistpg_TisProfile_profileThree = -1;
+
+/* --- Module EVCSN-PDU-Descriptions --- --- --- */
+
+static int hf_evcsn_evcsn_EVChargingSpotNotificationPOIMessage_PDU = -1; /* EVChargingSpotNotificationPOIMessage */
+static int hf_evcsn_poiHeader = -1; /* ItsPOIHeader */
+static int hf_evcsn_evcsnData = -1; /* ItsEVCSNData */
+static int hf_evcsn_poiType = -1; /* POIType */
+static int hf_evcsn_timeStamp = -1; /* TimestampIts */
+static int hf_evcsn_relayCapable = -1; /* BOOLEAN */
+static int hf_evcsn_totalNumberOfStations = -1; /* NumberStations */
+static int hf_evcsn_chargingStationsData = -1; /* SEQUENCE_SIZE_1_256_OF_ItsChargingStationData */
+static int hf_evcsn_chargingStationsData_item = -1; /* ItsChargingStationData */
+static int hf_evcsn_chargingStationID = -1; /* StationID */
+static int hf_evcsn_utilityDistributorId = -1; /* UTF8String_SIZE_1_32 */
+static int hf_evcsn_providerID = -1; /* UTF8String_SIZE_1_32 */
+static int hf_evcsn_chargingStationLocation = -1; /* ReferencePosition */
+static int hf_evcsn_address = -1; /* UTF8String */
+static int hf_evcsn_phoneNumber = -1; /* NumericString_SIZE_1_16 */
+static int hf_evcsn_accessibility = -1; /* UTF8String_SIZE_1_32 */
+static int hf_evcsn_digitalMap = -1; /* DigitalMap */
+static int hf_evcsn_openingDaysHours = -1; /* UTF8String */
+static int hf_evcsn_pricing = -1; /* UTF8String */
+static int hf_evcsn_bookingContactInfo = -1; /* UTF8String */
+static int hf_evcsn_payment = -1; /* UTF8String */
+static int hf_evcsn_chargingSpotsAvailable = -1; /* ItsChargingSpots */
+static int hf_evcsn_ItsChargingSpots_item = -1; /* ItsChargingSpotDataElements */
+static int hf_evcsn_type = -1; /* ChargingSpotType */
+static int hf_evcsn_evEquipmentID = -1; /* UTF8String */
+static int hf_evcsn_typeOfReceptacle = -1; /* TypeOfReceptacle */
+static int hf_evcsn_energyAvailability = -1; /* UTF8String */
+static int hf_evcsn_parkingPlacesData = -1; /* ParkingPlacesData */
+static int hf_evcsn_ParkingPlacesData_item = -1; /* SpotAvailability */
+static int hf_evcsn_maxWaitingTimeMinutes = -1; /* INTEGER_0_1400 */
+static int hf_evcsn_blocking = -1; /* BOOLEAN */
+/* named bits */
+static int hf_evcsn_ChargingSpotType_standardChargeMode1 = -1;
+static int hf_evcsn_ChargingSpotType_standardChargeMode2 = -1;
+static int hf_evcsn_ChargingSpotType_standardOrFastChargeMode3 = -1;
+static int hf_evcsn_ChargingSpotType_fastChargeWithExternalCharger = -1;
+static int hf_evcsn_ChargingSpotType_quickDrop = -1;
+static int hf_evcsn_ChargingSpotType_inductiveChargeWhileStationary = -1;
+static int hf_evcsn_ChargingSpotType_inductiveChargeWhileDriving = -1;
+
+/* --- Module EV-RechargingSpotReservation-PDU-Descriptions --- --- --- */
+
+static int hf_evrsr_evrsr_EV_RSR_MessageBody_PDU = -1; /* EV_RSR_MessageBody */
+static int hf_evrsr_preReservationRequestMessage = -1; /* PreReservationRequestMessage */
+static int hf_evrsr_preReservationResponseMessage = -1; /* PreReservationResponseMessage */
+static int hf_evrsr_reservationRequestMessage = -1; /* ReservationRequestMessage */
+static int hf_evrsr_reservationResponseMessage = -1; /* ReservationResponseMessage */
+static int hf_evrsr_cancellationRequestMessage = -1; /* CancellationRequestMessage */
+static int hf_evrsr_cancellationResponseMessage = -1; /* CancellationResponseMessage */
+static int hf_evrsr_updateRequestMessage = -1; /* UpdateRequestMessage */
+static int hf_evrsr_updateResponseMessage = -1; /* UpdateResponseMessage */
+static int hf_evrsr_evse_ID = -1; /* EVSE_ID */
+static int hf_evrsr_arrivalTime = -1; /* TimestampUTC */
+static int hf_evrsr_departureTime = -1; /* TimestampUTC */
+static int hf_evrsr_rechargingType = -1; /* RechargingType */
+static int hf_evrsr_batteryType = -1; /* BatteryType */
+static int hf_evrsr_preReservation_ID = -1; /* PreReservation_ID */
+static int hf_evrsr_availabilityStatus = -1; /* AvailabilityStatus */
+static int hf_evrsr_preReservationExpirationTime = -1; /* TimestampUTC */
+static int hf_evrsr_supportedPaymentTypes = -1; /* SupportedPaymentTypes */
+static int hf_evrsr_currentTime = -1; /* TimestampUTC */
+static int hf_evrsr_eAmount = -1; /* EAmount */
+static int hf_evrsr_eAmountMin = -1; /* EAmount */
+static int hf_evrsr_paymentType = -1; /* PaymentType */
+static int hf_evrsr_payment_ID = -1; /* Payment_ID */
+static int hf_evrsr_secondPayment_ID = -1; /* Payment_ID */
+static int hf_evrsr_pairing_ID = -1; /* Pairing_ID */
+static int hf_evrsr_reservationResponseCode = -1; /* ReservationResponseCode */
+static int hf_evrsr_reservation_ID = -1; /* Reservation_ID */
+static int hf_evrsr_reservation_Password = -1; /* Reservation_Password */
+static int hf_evrsr_stationDetails = -1; /* StationDetails */
+static int hf_evrsr_chargingSpotLabel = -1; /* ChargingSpotLabel */
+static int hf_evrsr_expirationTime = -1; /* TimestampUTC */
+static int hf_evrsr_freeCancelTimeLimit = -1; /* TimestampUTC */
+static int hf_evrsr_cancellationResponseCode = -1; /* CancellationResponseCode */
+static int hf_evrsr_updatedArrivalTime = -1; /* TimestampUTC */
+static int hf_evrsr_updatedDepartureTime = -1; /* TimestampUTC */
+static int hf_evrsr_updateResponseCode = -1; /* UpdateResponseCode */
+static int hf_evrsr_contractID = -1; /* ContractID */
+static int hf_evrsr_externalIdentificationMeans = -1; /* ExternalIdentificationMeans */
+static int hf_evrsr_rechargingMode = -1; /* RechargingMode */
+static int hf_evrsr_powerSource = -1; /* PowerSource */
+/* named bits */
+static int hf_evrsr_SupportedPaymentTypes_contract = -1;
+static int hf_evrsr_SupportedPaymentTypes_externalIdentification = -1;
+
+/*--- End of included file: packet-its-hf.c ---*/
+#line 147 "./asn1/its/packet-its-template.c"
+
+// CauseCode/SubCauseCode management
+static int hf_its_trafficConditionSubCauseCode = -1;
+static int hf_its_accidentSubCauseCode = -1;
+static int hf_its_roadworksSubCauseCode = -1;
+static int hf_its_adverseWeatherCondition_PrecipitationSubCauseCode = -1;
+static int hf_its_adverseWeatherCondition_VisibilitySubCauseCode = -1;
+static int hf_its_adverseWeatherCondition_AdhesionSubCauseCode = -1;
+static int hf_its_adverseWeatherCondition_ExtremeWeatherConditionSubCauseCode = -1;
+static int hf_its_hazardousLocation_AnimalOnTheRoadSubCauseCode = -1;
+static int hf_its_hazardousLocation_ObstacleOnTheRoadSubCauseCode = -1;
+static int hf_its_hazardousLocation_SurfaceConditionSubCauseCode = -1;
+static int hf_its_hazardousLocation_DangerousCurveSubCauseCode = -1;
+static int hf_its_humanPresenceOnTheRoadSubCauseCode = -1;
+static int hf_its_wrongWayDrivingSubCauseCode = -1;
+static int hf_its_rescueAndRecoveryWorkInProgressSubCauseCode = -1;
+static int hf_its_slowVehicleSubCauseCode = -1;
+static int hf_its_dangerousEndOfQueueSubCauseCode = -1;
+static int hf_its_vehicleBreakdownSubCauseCode = -1;
+static int hf_its_postCrashSubCauseCode = -1;
+static int hf_its_humanProblemSubCauseCode = -1;
+static int hf_its_stationaryVehicleSubCauseCode = -1;
+static int hf_its_emergencyVehicleApproachingSubCauseCode = -1;
+static int hf_its_collisionRiskSubCauseCode = -1;
+static int hf_its_signalViolationSubCauseCode = -1;
+static int hf_its_dangerousSituationSubCauseCode = -1;
+
+static gint ett_its = -1;
+
+
+/*--- Included file: packet-its-ett.c ---*/
+#line 1 "./asn1/its/packet-its-ett.c"
+
+/* --- Module ITS-Container --- --- --- */
+
+static gint ett_its_ItsPduHeader = -1;
+static gint ett_its_ReferencePosition = -1;
+static gint ett_its_DeltaReferencePosition = -1;
+static gint ett_its_Altitude = -1;
+static gint ett_its_PosConfidenceEllipse = -1;
+static gint ett_its_PathPoint = -1;
+static gint ett_its_PtActivation = -1;
+static gint ett_its_AccelerationControl = -1;
+static gint ett_its_CauseCode = -1;
+static gint ett_its_Curvature = -1;
+static gint ett_its_Heading = -1;
+static gint ett_its_ClosedLanes = -1;
+static gint ett_its_Speed = -1;
+static gint ett_its_LongitudinalAcceleration = -1;
+static gint ett_its_LateralAcceleration = -1;
+static gint ett_its_VerticalAcceleration = -1;
+static gint ett_its_ExteriorLights = -1;
+static gint ett_its_DangerousGoodsExtended = -1;
+static gint ett_its_SpecialTransportType = -1;
+static gint ett_its_LightBarSirenInUse = -1;
+static gint ett_its_PositionOfOccupants = -1;
+static gint ett_its_VehicleIdentification = -1;
+static gint ett_its_EnergyStorageType = -1;
+static gint ett_its_VehicleLength = -1;
+static gint ett_its_PathHistory = -1;
+static gint ett_its_EmergencyPriority = -1;
+static gint ett_its_SteeringWheelAngle = -1;
+static gint ett_its_YawRate = -1;
+static gint ett_its_ActionID = -1;
+static gint ett_its_ItineraryPath = -1;
+static gint ett_its_ProtectedCommunicationZone = -1;
+static gint ett_its_Traces = -1;
+static gint ett_its_PositionOfPillars = -1;
+static gint ett_its_RestrictedTypes = -1;
+static gint ett_its_EventHistory = -1;
+static gint ett_its_EventPoint = -1;
+static gint ett_its_ProtectedCommunicationZonesRSU = -1;
+static gint ett_its_CenDsrcTollingZone = -1;
+static gint ett_its_DigitalMap = -1;
+
+/* --- Module AVIAEINumberingAndDataStructures --- --- --- */
+
+
+/* --- Module ElectronicRegistrationIdentificationVehicleDataModule --- --- --- */
+
+static gint ett_erivdm_EuVehicleCategoryCode = -1;
+
+/* --- Module CITSapplMgmtIDs --- --- --- */
+
+static gint ett_csmid_VarLengthNumber = -1;
+static gint ett_csmid_Ext1 = -1;
+static gint ett_csmid_Ext2 = -1;
+
+/* --- Module EfcDsrcApplication --- --- --- */
+
+static gint ett_dsrc_app_AxleWeightLimits = -1;
+static gint ett_dsrc_app_DieselEmissionValues = -1;
+static gint ett_dsrc_app_T_particulate = -1;
+static gint ett_dsrc_app_EnvironmentalCharacteristics = -1;
+static gint ett_dsrc_app_ExhaustEmissionValues = -1;
+static gint ett_dsrc_app_PassengerCapacity = -1;
+static gint ett_dsrc_app_Provider = -1;
+static gint ett_dsrc_app_SoundLevel = -1;
+static gint ett_dsrc_app_VehicleDimensions = -1;
+static gint ett_dsrc_app_VehicleWeightLimits = -1;
+
+/* --- Module IVI --- --- --- */
+
+static gint ett_ivi_IviStructure = -1;
+static gint ett_ivi_SEQUENCE_SIZE_1_8__OF_IviContainer = -1;
+static gint ett_ivi_IviContainer = -1;
+static gint ett_ivi_IVIManagementContainer = -1;
+static gint ett_ivi_SEQUENCE_SIZE_1_8_OF_IviIdentificationNumber = -1;
+static gint ett_ivi_GeographicLocationContainer = -1;
+static gint ett_ivi_SEQUENCE_SIZE_1_16__OF_GlcPart = -1;
+static gint ett_ivi_GlcPart = -1;
+static gint ett_ivi_GeneralIviContainer = -1;
+static gint ett_ivi_GicPart = -1;
+static gint ett_ivi_T_GicPartDetectionZoneIds = -1;
+static gint ett_ivi_T_GicPartRelevanceZoneIds = -1;
+static gint ett_ivi_T_GicPartDriverAwarenessZoneIds = -1;
+static gint ett_ivi_SEQUENCE_SIZE_1_8__OF_LanePosition = -1;
+static gint ett_ivi_SEQUENCE_SIZE_1_8__OF_CompleteVehicleCharacteristics = -1;
+static gint ett_ivi_SEQUENCE_SIZE_1_4__OF_RSCode = -1;
+static gint ett_ivi_T_GicPartExtraText = -1;
+static gint ett_ivi_RoadConfigurationContainer = -1;
+static gint ett_ivi_RccPart = -1;
+static gint ett_ivi_SEQUENCE_SIZE_1_8__OF_Zid = -1;
+static gint ett_ivi_SEQUENCE_SIZE_1_16__OF_LaneInformation = -1;
+static gint ett_ivi_TextContainer = -1;
+static gint ett_ivi_TcPart = -1;
+static gint ett_ivi_T_TcPartDetectionZoneIds = -1;
+static gint ett_ivi_T_TcPartRelevanceZoneIds = -1;
+static gint ett_ivi_T_TcPartDriverAwarenessZoneIds = -1;
+static gint ett_ivi_T_TcPartText = -1;
+static gint ett_ivi_LayoutContainer = -1;
+static gint ett_ivi_SEQUENCE_SIZE_1_4__OF_LayoutComponent = -1;
+static gint ett_ivi_AbsolutePosition = -1;
+static gint ett_ivi_AbsolutePositionWAltitude = -1;
+static gint ett_ivi_AnyCatalogue = -1;
+static gint ett_ivi_CompleteVehicleCharacteristics = -1;
+static gint ett_ivi_SEQUENCE_SIZE_1_3_OF_TrailerCharacteristics = -1;
+static gint ett_ivi_ComputedSegment = -1;
+static gint ett_ivi_DeltaPosition = -1;
+static gint ett_ivi_Distance = -1;
+static gint ett_ivi_DistanceOrDuration = -1;
+static gint ett_ivi_ISO14823Attributes = -1;
+static gint ett_ivi_ISO14823Attributes_item = -1;
+static gint ett_ivi_ISO14823Code = -1;
+static gint ett_ivi_T_icPictogramCode = -1;
+static gint ett_ivi_T_serviceCategoryCode = -1;
+static gint ett_ivi_T_pictogramCategoryCode = -1;
+static gint ett_ivi_LaneInformation = -1;
+static gint ett_ivi_LayoutComponent = -1;
+static gint ett_ivi_LoadType = -1;
+static gint ett_ivi_PolygonalLine = -1;
+static gint ett_ivi_SEQUENCE_SIZE_1_32__OF_DeltaPosition = -1;
+static gint ett_ivi_SEQUENCE_SIZE_1_32__OF_DeltaReferencePosition = -1;
+static gint ett_ivi_SEQUENCE_SIZE_1_8__OF_AbsolutePosition = -1;
+static gint ett_ivi_SEQUENCE_SIZE_1_8__OF_AbsolutePositionWAltitude = -1;
+static gint ett_ivi_RSCode = -1;
+static gint ett_ivi_T_code = -1;
+static gint ett_ivi_Segment = -1;
+static gint ett_ivi_Text = -1;
+static gint ett_ivi_TractorCharacteristics = -1;
+static gint ett_ivi_T_TractorCharactEqualTo = -1;
+static gint ett_ivi_T_TractorCharactNotEqualTo = -1;
+static gint ett_ivi_SEQUENCE_SIZE_1_4__OF_VehicleCharacteristicsRanges = -1;
+static gint ett_ivi_TrailerCharacteristics = -1;
+static gint ett_ivi_T_TrailerCharactEqualTo = -1;
+static gint ett_ivi_T_TrailerCharactNotEqualTo = -1;
+static gint ett_ivi_VcCode = -1;
+static gint ett_ivi_SEQUENCE_SIZE_1_8__OF_DTM = -1;
+static gint ett_ivi_VehicleCharacteristicsFixValues = -1;
+static gint ett_ivi_VehicleCharacteristicsRanges = -1;
+static gint ett_ivi_T_limits = -1;
+static gint ett_ivi_Weight = -1;
+static gint ett_ivi_Zone = -1;
+static gint ett_ivi_DTM = -1;
+static gint ett_ivi_T_year = -1;
+static gint ett_ivi_T_month_day = -1;
+static gint ett_ivi_T_hourMinutes = -1;
+static gint ett_ivi_MonthDay = -1;
+static gint ett_ivi_PMD = -1;
+static gint ett_ivi_HoursMinutes = -1;
+static gint ett_ivi_DayOfWeek = -1;
+static gint ett_ivi_VED = -1;
+static gint ett_ivi_SPE = -1;
+static gint ett_ivi_DDD = -1;
+static gint ett_ivi_SEQUENCE_SIZE_1_8__OF_DDD_IO = -1;
+static gint ett_ivi_DDD_IO = -1;
+static gint ett_ivi_SEQUENCE_SIZE_1_4__OF_DestinationPlace = -1;
+static gint ett_ivi_SEQUENCE_SIZE_1_4__OF_DestinationRoad = -1;
+static gint ett_ivi_DestinationPlace = -1;
+static gint ett_ivi_DestinationRoad = -1;
+
+/* --- Module DSRC --- --- --- */
+
+static gint ett_dsrc_RegionalExtension = -1;
+static gint ett_dsrc_SPAT = -1;
+static gint ett_dsrc_T_SPATRegional = -1;
+static gint ett_dsrc_SignalRequestMessage = -1;
+static gint ett_dsrc_T_SRMRegional = -1;
+static gint ett_dsrc_SignalStatusMessage = -1;
+static gint ett_dsrc_T_SSMRegional = -1;
+static gint ett_dsrc_MapData = -1;
+static gint ett_dsrc_T_MAPRegional = -1;
+static gint ett_dsrc_AdvisorySpeed = -1;
+static gint ett_dsrc_T_AdvisorySpeedRegional = -1;
+static gint ett_dsrc_AdvisorySpeedList = -1;
+static gint ett_dsrc_ComputedLane = -1;
+static gint ett_dsrc_T_offsetXaxis = -1;
+static gint ett_dsrc_T_offsetYaxis = -1;
+static gint ett_dsrc_T_ComputedLaneRegional = -1;
+static gint ett_dsrc_ConnectsToList = -1;
+static gint ett_dsrc_ConnectingLane = -1;
+static gint ett_dsrc_Connection = -1;
+static gint ett_dsrc_ConnectionManeuverAssist = -1;
+static gint ett_dsrc_T_ConnectionManeuverAssistRegional = -1;
+static gint ett_dsrc_DataParameters = -1;
+static gint ett_dsrc_EnabledLaneList = -1;
+static gint ett_dsrc_GenericLane = -1;
+static gint ett_dsrc_T_GenericLaneRegional = -1;
+static gint ett_dsrc_IntersectionAccessPoint = -1;
+static gint ett_dsrc_IntersectionGeometry = -1;
+static gint ett_dsrc_T_IntersectionGeometryRegional = -1;
+static gint ett_dsrc_IntersectionGeometryList = -1;
+static gint ett_dsrc_IntersectionReferenceID = -1;
+static gint ett_dsrc_IntersectionState = -1;
+static gint ett_dsrc_T_IntersectionStateRegional = -1;
+static gint ett_dsrc_IntersectionStateList = -1;
+static gint ett_dsrc_LaneAttributes = -1;
+static gint ett_dsrc_LaneDataAttribute = -1;
+static gint ett_dsrc_T_LaneDataAttributeRegional = -1;
+static gint ett_dsrc_LaneDataAttributeList = -1;
+static gint ett_dsrc_LaneList = -1;
+static gint ett_dsrc_LaneSharing = -1;
+static gint ett_dsrc_LaneTypeAttributes = -1;
+static gint ett_dsrc_ManeuverAssistList = -1;
+static gint ett_dsrc_MovementEventList = -1;
+static gint ett_dsrc_MovementEvent = -1;
+static gint ett_dsrc_T_MovementEventRegional = -1;
+static gint ett_dsrc_MovementList = -1;
+static gint ett_dsrc_MovementState = -1;
+static gint ett_dsrc_T_MovementStateRegional = -1;
+static gint ett_dsrc_NodeAttributeSetXY = -1;
+static gint ett_dsrc_T_NodeAttributeSetXYRegional = -1;
+static gint ett_dsrc_NodeAttributeXYList = -1;
+static gint ett_dsrc_Node_LLmD_64b = -1;
+static gint ett_dsrc_Node_XY_20b = -1;
+static gint ett_dsrc_Node_XY_22b = -1;
+static gint ett_dsrc_Node_XY_24b = -1;
+static gint ett_dsrc_Node_XY_26b = -1;
+static gint ett_dsrc_Node_XY_28b = -1;
+static gint ett_dsrc_Node_XY_32b = -1;
+static gint ett_dsrc_NodeListXY = -1;
+static gint ett_dsrc_NodeOffsetPointXY = -1;
+static gint ett_dsrc_NodeSetXY = -1;
+static gint ett_dsrc_NodeXY = -1;
+static gint ett_dsrc_OverlayLaneList = -1;
+static gint ett_dsrc_Position3D = -1;
+static gint ett_dsrc_T_Position3DRegional = -1;
+static gint ett_dsrc_PreemptPriorityList = -1;
+static gint ett_dsrc_RegulatorySpeedLimit = -1;
+static gint ett_dsrc_RequestorDescription = -1;
+static gint ett_dsrc_T_RequestorDescriptionRegional = -1;
+static gint ett_dsrc_RequestorPositionVector = -1;
+static gint ett_dsrc_RequestorType = -1;
+static gint ett_dsrc_RestrictionClassAssignment = -1;
+static gint ett_dsrc_RestrictionClassList = -1;
+static gint ett_dsrc_RestrictionUserTypeList = -1;
+static gint ett_dsrc_RestrictionUserType = -1;
+static gint ett_dsrc_T_RestrictionUserTypeRegional = -1;
+static gint ett_dsrc_RoadLaneSetList = -1;
+static gint ett_dsrc_RoadSegmentReferenceID = -1;
+static gint ett_dsrc_RoadSegment = -1;
+static gint ett_dsrc_T_RoadSegmentRegional = -1;
+static gint ett_dsrc_RoadSegmentList = -1;
+static gint ett_dsrc_SegmentAttributeXYList = -1;
+static gint ett_dsrc_SignalControlZone = -1;
+static gint ett_dsrc_SignalRequesterInfo = -1;
+static gint ett_dsrc_SignalRequestList = -1;
+static gint ett_dsrc_SignalRequestPackage = -1;
+static gint ett_dsrc_T_SignalRequestPackageRegional = -1;
+static gint ett_dsrc_SignalRequest = -1;
+static gint ett_dsrc_T_SignalRequestRegional = -1;
+static gint ett_dsrc_SignalStatusList = -1;
+static gint ett_dsrc_SignalStatusPackageList = -1;
+static gint ett_dsrc_SignalStatusPackage = -1;
+static gint ett_dsrc_T_SignalStatusPackageRegional = -1;
+static gint ett_dsrc_SignalStatus = -1;
+static gint ett_dsrc_T_SignalStatusRegional = -1;
+static gint ett_dsrc_SpeedLimitList = -1;
+static gint ett_dsrc_TimeChangeDetails = -1;
+static gint ett_dsrc_TransmissionAndSpeed = -1;
+static gint ett_dsrc_VehicleID = -1;
+static gint ett_dsrc_AllowedManeuvers = -1;
+static gint ett_dsrc_IntersectionStatusObject = -1;
+static gint ett_dsrc_LaneAttributes_Barrier = -1;
+static gint ett_dsrc_LaneAttributes_Bike = -1;
+static gint ett_dsrc_LaneAttributes_Crosswalk = -1;
+static gint ett_dsrc_LaneAttributes_Parking = -1;
+static gint ett_dsrc_LaneAttributes_Sidewalk = -1;
+static gint ett_dsrc_LaneAttributes_Striping = -1;
+static gint ett_dsrc_LaneAttributes_TrackedVehicle = -1;
+static gint ett_dsrc_LaneAttributes_Vehicle = -1;
+static gint ett_dsrc_LaneDirection = -1;
+static gint ett_dsrc_TransitVehicleStatus = -1;
+
+/* --- Module AddGrpC --- --- --- */
+
+static gint ett_AddGrpC_ConnectionManeuverAssist_addGrpC = -1;
+static gint ett_AddGrpC_ConnectionTrajectory_addGrpC = -1;
+static gint ett_AddGrpC_Control_addGrpC = -1;
+static gint ett_AddGrpC_IntersectionState_addGrpC = -1;
+static gint ett_AddGrpC_MapData_addGrpC = -1;
+static gint ett_AddGrpC_Position3D_addGrpC = -1;
+static gint ett_AddGrpC_PrioritizationResponseList = -1;
+static gint ett_AddGrpC_PrioritizationResponse = -1;
+static gint ett_AddGrpC_RestrictionUserType_addGrpC = -1;
+static gint ett_AddGrpC_SignalHeadLocationList = -1;
+static gint ett_AddGrpC_SignalHeadLocation = -1;
+static gint ett_AddGrpC_SignalStatusPackage_addGrpC = -1;
+static gint ett_AddGrpC_ItsStationPositionList = -1;
+static gint ett_AddGrpC_ItsStationPosition = -1;
+
+/* --- Module REGION --- --- --- */
+
+
+/* --- Module SPATEM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module MAPEM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module IVIM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module SREM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module SSEM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module CAM-PDU-Descriptions --- --- --- */
+
+static gint ett_cam_CoopAwareness = -1;
+static gint ett_cam_CamParameters = -1;
+static gint ett_cam_HighFrequencyContainer = -1;
+static gint ett_cam_LowFrequencyContainer = -1;
+static gint ett_cam_SpecialVehicleContainer = -1;
+static gint ett_cam_BasicContainer = -1;
+static gint ett_cam_BasicVehicleContainerHighFrequency = -1;
+static gint ett_cam_BasicVehicleContainerLowFrequency = -1;
+static gint ett_cam_PublicTransportContainer = -1;
+static gint ett_cam_SpecialTransportContainer = -1;
+static gint ett_cam_DangerousGoodsContainer = -1;
+static gint ett_cam_RoadWorksContainerBasic = -1;
+static gint ett_cam_RescueContainer = -1;
+static gint ett_cam_EmergencyContainer = -1;
+static gint ett_cam_SafetyCarContainer = -1;
+static gint ett_cam_RSUContainerHighFrequency = -1;
+
+/* --- Module DENM-PDU-Descriptions --- --- --- */
+
+static gint ett_denm_DecentralizedEnvironmentalNotificationMessage = -1;
+static gint ett_denm_ManagementContainer = -1;
+static gint ett_denm_SituationContainer = -1;
+static gint ett_denm_LocationContainer = -1;
+static gint ett_denm_ImpactReductionContainer = -1;
+static gint ett_denm_RoadWorksContainerExtended = -1;
+static gint ett_denm_StationaryVehicleContainer = -1;
+static gint ett_denm_AlacarteContainer = -1;
+static gint ett_denm_ReferenceDenms = -1;
+
+/* --- Module TIS-TPG-Transactions-Descriptions --- --- --- */
+
+static gint ett_tistpg_TisTpgTransaction = -1;
+static gint ett_tistpg_TisTpgDRM = -1;
+static gint ett_tistpg_TisTpgDRM_Management = -1;
+static gint ett_tistpg_TisTpgDRM_Situation = -1;
+static gint ett_tistpg_TisTpgDRM_Location = -1;
+static gint ett_tistpg_TisTpgSNM = -1;
+static gint ett_tistpg_TisTpgSNM_Management = -1;
+static gint ett_tistpg_TisTpgTRM = -1;
+static gint ett_tistpg_TisTpgTRM_Management = -1;
+static gint ett_tistpg_TisTpgTRM_Situation = -1;
+static gint ett_tistpg_TisTpgTRM_Location = -1;
+static gint ett_tistpg_TisTpgTCM = -1;
+static gint ett_tistpg_TisTpgTCM_Management = -1;
+static gint ett_tistpg_TisTpgTCM_Situation = -1;
+static gint ett_tistpg_TisTpgTCM_Location = -1;
+static gint ett_tistpg_TisTpgVDRM = -1;
+static gint ett_tistpg_TisTpgVDRM_Management = -1;
+static gint ett_tistpg_TisTpgVDPM = -1;
+static gint ett_tistpg_TisTpgVDPM_Management = -1;
+static gint ett_tistpg_VehicleSpecificData = -1;
+static gint ett_tistpg_TisTpgEOFM = -1;
+static gint ett_tistpg_TisTpgEOFM_Management = -1;
+static gint ett_tistpg_PlacardTable = -1;
+static gint ett_tistpg_TyreSetVariant = -1;
+static gint ett_tistpg_PressureVariantsList = -1;
+static gint ett_tistpg_PressureVariant = -1;
+static gint ett_tistpg_TyreData = -1;
+static gint ett_tistpg_T_currentTyrePressure = -1;
+static gint ett_tistpg_T_tyreSidewallInformation = -1;
+static gint ett_tistpg_T_currentInsideAirTemperature = -1;
+static gint ett_tistpg_T_recommendedTyrePressure = -1;
+static gint ett_tistpg_T_tin = -1;
+static gint ett_tistpg_T_sensorState = -1;
+static gint ett_tistpg_AppliedTyrePressure = -1;
+static gint ett_tistpg_TpgStationData = -1;
+static gint ett_tistpg_AppliedTyrePressures = -1;
+static gint ett_tistpg_TpgNotifContainer = -1;
+static gint ett_tistpg_TpgAutomation = -1;
+static gint ett_tistpg_TisProfile = -1;
+
+/* --- Module EVCSN-PDU-Descriptions --- --- --- */
+
+static gint ett_evcsn_EVChargingSpotNotificationPOIMessage = -1;
+static gint ett_evcsn_ItsPOIHeader = -1;
+static gint ett_evcsn_ItsEVCSNData = -1;
+static gint ett_evcsn_SEQUENCE_SIZE_1_256_OF_ItsChargingStationData = -1;
+static gint ett_evcsn_ItsChargingStationData = -1;
+static gint ett_evcsn_ItsChargingSpots = -1;
+static gint ett_evcsn_ItsChargingSpotDataElements = -1;
+static gint ett_evcsn_ChargingSpotType = -1;
+static gint ett_evcsn_ParkingPlacesData = -1;
+static gint ett_evcsn_SpotAvailability = -1;
+
+/* --- Module EV-RechargingSpotReservation-PDU-Descriptions --- --- --- */
+
+static gint ett_evrsr_EV_RSR_MessageBody = -1;
+static gint ett_evrsr_PreReservationRequestMessage = -1;
+static gint ett_evrsr_PreReservationResponseMessage = -1;
+static gint ett_evrsr_ReservationRequestMessage = -1;
+static gint ett_evrsr_ReservationResponseMessage = -1;
+static gint ett_evrsr_CancellationRequestMessage = -1;
+static gint ett_evrsr_CancellationResponseMessage = -1;
+static gint ett_evrsr_UpdateRequestMessage = -1;
+static gint ett_evrsr_UpdateResponseMessage = -1;
+static gint ett_evrsr_Payment_ID = -1;
+static gint ett_evrsr_RechargingType = -1;
+static gint ett_evrsr_SupportedPaymentTypes = -1;
+
+/*--- End of included file: packet-its-ett.c ---*/
+#line 177 "./asn1/its/packet-its-template.c"
+
+// Deal with cause/subcause code management
+struct { CauseCodeType_enum cause; int* hf; } cause_to_subcause[] = {
+ { trafficCondition, &hf_its_trafficConditionSubCauseCode },
+ { accident, &hf_its_accidentSubCauseCode },
+ { roadworks, &hf_its_roadworksSubCauseCode },
+ { adverseWeatherCondition_Precipitation, &hf_its_adverseWeatherCondition_PrecipitationSubCauseCode },
+ { adverseWeatherCondition_Visibility, &hf_its_adverseWeatherCondition_VisibilitySubCauseCode },
+ { adverseWeatherCondition_Adhesion, &hf_its_adverseWeatherCondition_AdhesionSubCauseCode },
+ { adverseWeatherCondition_ExtremeWeatherCondition, &hf_its_adverseWeatherCondition_ExtremeWeatherConditionSubCauseCode },
+ { hazardousLocation_AnimalOnTheRoad, &hf_its_hazardousLocation_AnimalOnTheRoadSubCauseCode },
+ { hazardousLocation_ObstacleOnTheRoad, &hf_its_hazardousLocation_ObstacleOnTheRoadSubCauseCode },
+ { hazardousLocation_SurfaceCondition, &hf_its_hazardousLocation_SurfaceConditionSubCauseCode },
+ { hazardousLocation_DangerousCurve, &hf_its_hazardousLocation_DangerousCurveSubCauseCode },
+ { humanPresenceOnTheRoad, &hf_its_humanPresenceOnTheRoadSubCauseCode },
+ { wrongWayDriving, &hf_its_wrongWayDrivingSubCauseCode },
+ { rescueAndRecoveryWorkInProgress, &hf_its_rescueAndRecoveryWorkInProgressSubCauseCode },
+ { slowVehicle, &hf_its_slowVehicleSubCauseCode },
+ { dangerousEndOfQueue, &hf_its_dangerousEndOfQueueSubCauseCode },
+ { vehicleBreakdown, &hf_its_vehicleBreakdownSubCauseCode },
+ { postCrash, &hf_its_postCrashSubCauseCode },
+ { humanProblem, &hf_its_humanProblemSubCauseCode },
+ { stationaryVehicle, &hf_its_stationaryVehicleSubCauseCode },
+ { emergencyVehicleApproaching, &hf_its_emergencyVehicleApproachingSubCauseCode },
+ { collisionRisk, &hf_its_collisionRiskSubCauseCode },
+ { signalViolation, &hf_its_signalViolationSubCauseCode },
+ { dangerousSituation, &hf_its_dangerousSituationSubCauseCode },
+ { reserved, NULL },
+};
+
+static int*
+find_subcause_from_cause(CauseCodeType_enum cause)
+{
+ int idx = 0;
+
+ while (cause_to_subcause[idx].hf && (cause_to_subcause[idx].cause != cause))
+ idx++;
+
+ return cause_to_subcause[idx].hf?cause_to_subcause[idx].hf:&hf_its_subCauseCode;
+}
+
+
+/*--- Included file: packet-its-fn.c ---*/
+#line 1 "./asn1/its/packet-its-fn.c"
+
+/* --- Module ITS-Container --- --- --- */
+
+
+
+static int
+dissect_its_T_protocolVersion(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, &((its_header_t*)actx->private_data)->version, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_T_messageID_vals[] = {
+ { ITS_DENM, "denm" },
+ { ITS_CAM, "cam" },
+ { ITS_POI, "poi" },
+ { ITS_SPATEM, "spatem" },
+ { ITS_MAPEM, "mapem" },
+ { ITS_IVIM, "ivim" },
+ { ITS_EV_RSR, "ev-rsr" },
+ { ITS_TISTPGTRANSACTION, "tistpgtransaction" },
+ { ITS_SREM, "srem" },
+ { ITS_SSEM, "ssem" },
+ { ITS_EVCSN, "evcsn" },
+ { ITS_SAEM, "saem" },
+ { ITS_RTCMEM, "rtcmem" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_T_messageID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, &((its_header_t*)actx->private_data)->msgId, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_StationID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 4294967295U, actx->private_data?&((its_header_t*)actx->private_data)->stationId:NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_ItsPduHeader_sequence[] = {
+ { &hf_its_protocolVersion , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_T_protocolVersion },
+ { &hf_its_messageID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_T_messageID },
+ { &hf_its_stationID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_StationID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_ItsPduHeader(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 584 "./asn1/its/its.cnf"
+ guint8 version = tvb_get_guint8(tvb, 0);
+ if ((offset = dissector_try_uint(its_version_subdissector_table, version, tvb, actx->pinfo, tree))) {
+ return offset;
+ }
+ // Lets try it that way, regarless of version value...
+ its_header_t *hdr = wmem_new0(wmem_packet_scope(), its_header_t);
+ actx->private_data = (void*)hdr;
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_ItsPduHeader, its_ItsPduHeader_sequence);
+
+ tap_queue_packet(its_tap, actx->pinfo, actx->private_data);
+ tvbuff_t *next_tvb = tvb_new_subset_length(tvb, (offset+7)>>3, -1);
+ if (!dissector_try_uint(its_msgid_subdissector_table, (hdr->version << 16)+hdr->msgId, next_tvb, actx->pinfo, tree)) {
+ call_data_dissector(next_tvb, actx->pinfo, tree);
+ }
+
+
+ return offset;
+}
+
+
+static const value_string its_Latitude_vals[] = {
+ { 10, "oneMicrodegreeNorth" },
+ { -10, "oneMicrodegreeSouth" },
+ { 900000001, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_Latitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -900000000, 900000001U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_Longitude_vals[] = {
+ { 10, "oneMicrodegreeEast" },
+ { -10, "oneMicrodegreeWest" },
+ { 1800000001, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_Longitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -1800000000, 1800000001U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_SemiAxisLength_vals[] = {
+ { 1, "oneCentimeter" },
+ { 4094, "outOfRange" },
+ { 4095, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_SemiAxisLength(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 4095U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_HeadingValue_vals[] = {
+ { 0, "wgs84North" },
+ { 900, "wgs84East" },
+ { 1800, "wgs84South" },
+ { 2700, "wgs84West" },
+ { 3601, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_HeadingValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 3601U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_PosConfidenceEllipse_sequence[] = {
+ { &hf_its_semiMajorConfidence, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_SemiAxisLength },
+ { &hf_its_semiMinorConfidence, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_SemiAxisLength },
+ { &hf_its_semiMajorOrientation, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_HeadingValue },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_PosConfidenceEllipse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_PosConfidenceEllipse, its_PosConfidenceEllipse_sequence);
+
+ return offset;
+}
+
+
+static const value_string its_AltitudeValue_vals[] = {
+ { 0, "referenceEllipsoidSurface" },
+ { 1, "oneCentimeter" },
+ { 800001, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_AltitudeValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -100000, 800001U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_AltitudeConfidence_vals[] = {
+ { 0, "alt-000-01" },
+ { 1, "alt-000-02" },
+ { 2, "alt-000-05" },
+ { 3, "alt-000-10" },
+ { 4, "alt-000-20" },
+ { 5, "alt-000-50" },
+ { 6, "alt-001-00" },
+ { 7, "alt-002-00" },
+ { 8, "alt-005-00" },
+ { 9, "alt-010-00" },
+ { 10, "alt-020-00" },
+ { 11, "alt-050-00" },
+ { 12, "alt-100-00" },
+ { 13, "alt-200-00" },
+ { 14, "outOfRange" },
+ { 15, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_AltitudeConfidence(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 16, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_Altitude_sequence[] = {
+ { &hf_its_altitudeValue , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_AltitudeValue },
+ { &hf_its_altitudeConfidence, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_AltitudeConfidence },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_Altitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_Altitude, its_Altitude_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_ReferencePosition_sequence[] = {
+ { &hf_its_latitude , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_Latitude },
+ { &hf_its_longitude , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_Longitude },
+ { &hf_its_positionConfidenceEllipse, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_PosConfidenceEllipse },
+ { &hf_its_altitude , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_Altitude },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_ReferencePosition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_ReferencePosition, its_ReferencePosition_sequence);
+
+ return offset;
+}
+
+
+static const value_string its_DeltaLatitude_vals[] = {
+ { 10, "oneMicrodegreeNorth" },
+ { -10, "oneMicrodegreeSouth" },
+ { 131072, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_DeltaLatitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -131071, 131072U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_DeltaLongitude_vals[] = {
+ { 10, "oneMicrodegreeEast" },
+ { -10, "oneMicrodegreeWest" },
+ { 131072, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_DeltaLongitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -131071, 131072U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_DeltaAltitude_vals[] = {
+ { 1, "oneCentimeterUp" },
+ { -1, "oneCentimeterDown" },
+ { 12800, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_DeltaAltitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -12700, 12800U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_DeltaReferencePosition_sequence[] = {
+ { &hf_its_deltaLatitude , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_DeltaLatitude },
+ { &hf_its_deltaLongitude , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_DeltaLongitude },
+ { &hf_its_deltaAltitude , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_DeltaAltitude },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_DeltaReferencePosition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_DeltaReferencePosition, its_DeltaReferencePosition_sequence);
+
+ return offset;
+}
+
+
+static const value_string its_PathDeltaTime_vals[] = {
+ { 1, "tenMilliSecondsInPast" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_PathDeltaTime(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 65535U, NULL, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_PathPoint_sequence[] = {
+ { &hf_its_pathPosition , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_DeltaReferencePosition },
+ { &hf_its_pathDeltaTime , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_PathDeltaTime },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_PathPoint(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_PathPoint, its_PathPoint_sequence);
+
+ return offset;
+}
+
+
+static const value_string its_PtActivationType_vals[] = {
+ { 0, "undefinedCodingType" },
+ { 1, "r09-16CodingType" },
+ { 2, "vdv-50149CodingType" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_PtActivationType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_PtActivationData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ 1, 20, FALSE, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_PtActivation_sequence[] = {
+ { &hf_its_ptActivationType, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_PtActivationType },
+ { &hf_its_ptActivationData, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_PtActivationData },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_PtActivation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_PtActivation, its_PtActivation_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_AccelerationControl(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 681 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 7, 7, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_its_AccelerationControl_brakePedalEngaged,
+ &hf_its_AccelerationControl_gasPedalEngaged,
+ &hf_its_AccelerationControl_emergencyBrakeEngaged,
+ &hf_its_AccelerationControl_collisionWarningEngaged,
+ &hf_its_AccelerationControl_accEngaged,
+ &hf_its_AccelerationControl_cruiseControlEngaged,
+ &hf_its_AccelerationControl_speedLimiterEngaged,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_its_AccelerationControl);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+static const value_string its_CauseCodeType_vals[] = {
+ { reserved, "reserved" },
+ { trafficCondition, "trafficCondition" },
+ { accident, "accident" },
+ { roadworks, "roadworks" },
+ { impassability, "impassability" },
+ { adverseWeatherCondition_Adhesion, "adverseWeatherCondition-Adhesion" },
+ { aquaplannning, "aquaplannning" },
+ { hazardousLocation_SurfaceCondition, "hazardousLocation-SurfaceCondition" },
+ { hazardousLocation_ObstacleOnTheRoad, "hazardousLocation-ObstacleOnTheRoad" },
+ { hazardousLocation_AnimalOnTheRoad, "hazardousLocation-AnimalOnTheRoad" },
+ { humanPresenceOnTheRoad, "humanPresenceOnTheRoad" },
+ { wrongWayDriving, "wrongWayDriving" },
+ { rescueAndRecoveryWorkInProgress, "rescueAndRecoveryWorkInProgress" },
+ { adverseWeatherCondition_ExtremeWeatherCondition, "adverseWeatherCondition-ExtremeWeatherCondition" },
+ { adverseWeatherCondition_Visibility, "adverseWeatherCondition-Visibility" },
+ { adverseWeatherCondition_Precipitation, "adverseWeatherCondition-Precipitation" },
+ { slowVehicle, "slowVehicle" },
+ { dangerousEndOfQueue, "dangerousEndOfQueue" },
+ { vehicleBreakdown, "vehicleBreakdown" },
+ { postCrash, "postCrash" },
+ { humanProblem, "humanProblem" },
+ { stationaryVehicle, "stationaryVehicle" },
+ { emergencyVehicleApproaching, "emergencyVehicleApproaching" },
+ { hazardousLocation_DangerousCurve, "hazardousLocation-DangerousCurve" },
+ { collisionRisk, "collisionRisk" },
+ { signalViolation, "signalViolation" },
+ { dangerousSituation, "dangerousSituation" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_CauseCodeType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, &((its_private_data_t*)actx->private_data)->cause_code, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_SubCauseCodeType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 1180 "./asn1/its/its.cnf"
+ // Overwrite hf_index
+ hf_index = *find_subcause_from_cause((CauseCodeType_enum) ((its_private_data_t*)actx->private_data)->cause_code);
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, FALSE);
+
+
+
+
+ return offset;
+}
+
+
+static const per_sequence_t its_CauseCode_sequence[] = {
+ { &hf_its_causeCode , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_CauseCodeType },
+ { &hf_its_subCauseCode , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_SubCauseCodeType },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_CauseCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_CauseCode, its_CauseCode_sequence);
+
+ return offset;
+}
+
+
+static const value_string its_TrafficConditionSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "increasedVolumeOfTraffic" },
+ { 2, "trafficJamSlowlyIncreasing" },
+ { 3, "trafficJamIncreasing" },
+ { 4, "trafficJamStronglyIncreasing" },
+ { 5, "trafficStationary" },
+ { 6, "trafficJamSlightlyDecreasing" },
+ { 7, "trafficJamDecreasing" },
+ { 8, "trafficJamStronglyDecreasing" },
+ { 0, NULL }
+};
+
+
+static const value_string its_AccidentSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "multiVehicleAccident" },
+ { 2, "heavyAccident" },
+ { 3, "accidentInvolvingLorry" },
+ { 4, "accidentInvolvingBus" },
+ { 5, "accidentInvolvingHazardousMaterials" },
+ { 6, "accidentOnOppositeLane" },
+ { 7, "unsecuredAccident" },
+ { 8, "assistanceRequested" },
+ { 0, NULL }
+};
+
+
+static const value_string its_RoadworksSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "majorRoadworks" },
+ { 2, "roadMarkingWork" },
+ { 3, "slowMovingRoadMaintenance" },
+ { 4, "shortTermStationaryRoadworks" },
+ { 5, "streetCleaning" },
+ { 6, "winterService" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_RoadworksSubCauseCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_HumanPresenceOnTheRoadSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "childrenOnRoadway" },
+ { 2, "cyclistOnRoadway" },
+ { 3, "motorcyclistOnRoadway" },
+ { 0, NULL }
+};
+
+
+static const value_string its_WrongWayDrivingSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "wrongLane" },
+ { 2, "wrongDirection" },
+ { 0, NULL }
+};
+
+
+static const value_string its_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "strongWinds" },
+ { 2, "damagingHail" },
+ { 3, "hurricane" },
+ { 4, "thunderstorm" },
+ { 5, "tornado" },
+ { 6, "blizzard" },
+ { 0, NULL }
+};
+
+
+static const value_string its_AdverseWeatherCondition_AdhesionSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "heavyFrostOnRoad" },
+ { 2, "fuelOnRoad" },
+ { 3, "mudOnRoad" },
+ { 4, "snowOnRoad" },
+ { 5, "iceOnRoad" },
+ { 6, "blackIceOnRoad" },
+ { 7, "oilOnRoad" },
+ { 8, "looseChippings" },
+ { 9, "instantBlackIce" },
+ { 10, "roadsSalted" },
+ { 0, NULL }
+};
+
+
+static const value_string its_AdverseWeatherCondition_VisibilitySubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "fog" },
+ { 2, "smoke" },
+ { 3, "heavySnowfall" },
+ { 4, "heavyRain" },
+ { 5, "heavyHail" },
+ { 6, "lowSunGlare" },
+ { 7, "sandstorms" },
+ { 8, "swarmsOfInsects" },
+ { 0, NULL }
+};
+
+
+static const value_string its_AdverseWeatherCondition_PrecipitationSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "heavyRain" },
+ { 2, "heavySnowfall" },
+ { 3, "softHail" },
+ { 0, NULL }
+};
+
+
+static const value_string its_SlowVehicleSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "maintenanceVehicle" },
+ { 2, "vehiclesSlowingToLookAtAccident" },
+ { 3, "abnormalLoad" },
+ { 4, "abnormalWideLoad" },
+ { 5, "convoy" },
+ { 6, "snowplough" },
+ { 7, "deicing" },
+ { 8, "saltingVehicles" },
+ { 0, NULL }
+};
+
+
+static const value_string its_StationaryVehicleSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "humanProblem" },
+ { 2, "vehicleBreakdown" },
+ { 3, "postCrash" },
+ { 4, "publicTransportStop" },
+ { 5, "carryingDangerousGoods" },
+ { 0, NULL }
+};
+
+
+static const value_string its_HumanProblemSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "glycemiaProblem" },
+ { 2, "heartProblem" },
+ { 0, NULL }
+};
+
+
+static const value_string its_EmergencyVehicleApproachingSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "emergencyVehicleApproaching" },
+ { 2, "prioritizedVehicleApproaching" },
+ { 0, NULL }
+};
+
+
+static const value_string its_HazardousLocation_DangerousCurveSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "dangerousLeftTurnCurve" },
+ { 2, "dangerousRightTurnCurve" },
+ { 3, "multipleCurvesStartingWithUnknownTurningDirection" },
+ { 4, "multipleCurvesStartingWithLeftTurn" },
+ { 5, "multipleCurvesStartingWithRightTurn" },
+ { 0, NULL }
+};
+
+
+static const value_string its_HazardousLocation_SurfaceConditionSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "rockfalls" },
+ { 2, "earthquakeDamage" },
+ { 3, "sewerCollapse" },
+ { 4, "subsidence" },
+ { 5, "snowDrifts" },
+ { 6, "stormDamage" },
+ { 7, "burstPipe" },
+ { 8, "volcanoEruption" },
+ { 9, "fallingIce" },
+ { 0, NULL }
+};
+
+
+static const value_string its_HazardousLocation_ObstacleOnTheRoadSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "shedLoad" },
+ { 2, "partsOfVehicles" },
+ { 3, "partsOfTyres" },
+ { 4, "bigObjects" },
+ { 5, "fallenTrees" },
+ { 6, "hubCaps" },
+ { 7, "waitingVehicles" },
+ { 0, NULL }
+};
+
+
+static const value_string its_HazardousLocation_AnimalOnTheRoadSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "wildAnimals" },
+ { 2, "herdOfAnimals" },
+ { 3, "smallAnimals" },
+ { 4, "largeAnimals" },
+ { 0, NULL }
+};
+
+
+static const value_string its_CollisionRiskSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "longitudinalCollisionRisk" },
+ { 2, "crossingCollisionRisk" },
+ { 3, "lateralCollisionRisk" },
+ { 4, "vulnerableRoadUser" },
+ { 0, NULL }
+};
+
+
+static const value_string its_SignalViolationSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "stopSignViolation" },
+ { 2, "trafficLightViolation" },
+ { 3, "turningRegulationViolation" },
+ { 0, NULL }
+};
+
+
+static const value_string its_RescueAndRecoveryWorkInProgressSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "emergencyVehicles" },
+ { 2, "rescueHelicopterLanding" },
+ { 3, "policeActivityOngoing" },
+ { 4, "medicalEmergencyOngoing" },
+ { 5, "childAbductionInProgress" },
+ { 0, NULL }
+};
+
+
+static const value_string its_DangerousEndOfQueueSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "suddenEndOfQueue" },
+ { 2, "queueOverHill" },
+ { 3, "queueAroundBend" },
+ { 4, "queueInTunnel" },
+ { 0, NULL }
+};
+
+
+static const value_string its_DangerousSituationSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "emergencyElectronicBrakeEngaged" },
+ { 2, "preCrashSystemEngaged" },
+ { 3, "espEngaged" },
+ { 4, "absEngaged" },
+ { 5, "aebEngaged" },
+ { 6, "brakeWarningEngaged" },
+ { 7, "collisionRiskWarningEngaged" },
+ { 0, NULL }
+};
+
+
+static const value_string its_VehicleBreakdownSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "lackOfFuel" },
+ { 2, "lackOfBatteryPower" },
+ { 3, "engineProblem" },
+ { 4, "transmissionProblem" },
+ { 5, "engineCoolingProblem" },
+ { 6, "brakingSystemProblem" },
+ { 7, "steeringProblem" },
+ { 8, "tyrePuncture" },
+ { 9, "tyrePressureProblem" },
+ { 0, NULL }
+};
+
+
+static const value_string its_PostCrashSubCauseCode_vals[] = {
+ { 0, "unavailable" },
+ { 1, "accidentWithoutECallTriggered" },
+ { 2, "accidentWithECallManuallyTriggered" },
+ { 3, "accidentWithECallAutomaticallyTriggered" },
+ { 4, "accidentWithECallTriggeredWithoutAccessToCellularNetwork" },
+ { 0, NULL }
+};
+
+
+static const value_string its_CurvatureValue_vals[] = {
+ { 0, "straight" },
+ { 1023, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_CurvatureValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -1023, 1023U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_CurvatureConfidence_vals[] = {
+ { 0, "onePerMeter-0-00002" },
+ { 1, "onePerMeter-0-0001" },
+ { 2, "onePerMeter-0-0005" },
+ { 3, "onePerMeter-0-002" },
+ { 4, "onePerMeter-0-01" },
+ { 5, "onePerMeter-0-1" },
+ { 6, "outOfRange" },
+ { 7, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_CurvatureConfidence(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 8, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_Curvature_sequence[] = {
+ { &hf_its_curvatureValue , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_CurvatureValue },
+ { &hf_its_curvatureConfidence, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_CurvatureConfidence },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_Curvature(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_Curvature, its_Curvature_sequence);
+
+ return offset;
+}
+
+
+static const value_string its_CurvatureCalculationMode_vals[] = {
+ { 0, "yawRateUsed" },
+ { 1, "yawRateNotUsed" },
+ { 2, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_CurvatureCalculationMode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 3, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string its_HeadingConfidence_vals[] = {
+ { 1, "equalOrWithinZeroPointOneDegree" },
+ { 10, "equalOrWithinOneDegree" },
+ { 126, "outOfRange" },
+ { 127, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_HeadingConfidence(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 127U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_Heading_sequence[] = {
+ { &hf_its_headingValue , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_HeadingValue },
+ { &hf_its_headingConfidence, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_HeadingConfidence },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_Heading(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_Heading, its_Heading_sequence);
+
+ return offset;
+}
+
+
+static const value_string its_LanePosition_vals[] = {
+ { -1, "offTheRoad" },
+ { 0, "hardShoulder" },
+ { 1, "outermostDrivingLane" },
+ { 2, "secondLaneFromOutside" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_LanePosition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -1, 14U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_HardShoulderStatus_vals[] = {
+ { 0, "availableForStopping" },
+ { 1, "closed" },
+ { 2, "availableForDriving" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_HardShoulderStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 3, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_DrivingLaneStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 1, 13, FALSE, NULL, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_ClosedLanes_sequence[] = {
+ { &hf_its_innerhardShoulderStatus, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_HardShoulderStatus },
+ { &hf_its_outerhardShoulderStatus, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_HardShoulderStatus },
+ { &hf_its_drivingLaneStatus, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_DrivingLaneStatus },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_ClosedLanes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_ClosedLanes, its_ClosedLanes_sequence);
+
+ return offset;
+}
+
+
+static const value_string its_PerformanceClass_vals[] = {
+ { 0, "unavailable" },
+ { 1, "performanceClassA" },
+ { 2, "performanceClassB" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_PerformanceClass(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 7U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_SpeedValue_vals[] = {
+ { 0, "standstill" },
+ { 1, "oneCentimeterPerSec" },
+ { 16383, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_SpeedValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 16383U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_SpeedConfidence_vals[] = {
+ { 1, "equalOrWithinOneCentimeterPerSec" },
+ { 100, "equalOrWithinOneMeterPerSec" },
+ { 126, "outOfRange" },
+ { 127, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_SpeedConfidence(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 127U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_VehicleMass_vals[] = {
+ { 1, "hundredKg" },
+ { 1024, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_VehicleMass(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 1024U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_Speed_sequence[] = {
+ { &hf_its_speedValue , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_SpeedValue },
+ { &hf_its_speedConfidence , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_SpeedConfidence },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_Speed(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_Speed, its_Speed_sequence);
+
+ return offset;
+}
+
+
+static const value_string its_DriveDirection_vals[] = {
+ { 0, "forward" },
+ { 1, "backward" },
+ { 2, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_DriveDirection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 3, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_EmbarkationStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
+
+ return offset;
+}
+
+
+static const value_string its_LongitudinalAccelerationValue_vals[] = {
+ { 1, "pointOneMeterPerSecSquaredForward" },
+ { -1, "pointOneMeterPerSecSquaredBackward" },
+ { 161, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_LongitudinalAccelerationValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -160, 161U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_AccelerationConfidence_vals[] = {
+ { 1, "pointOneMeterPerSecSquared" },
+ { 101, "outOfRange" },
+ { 102, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_AccelerationConfidence(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 102U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_LongitudinalAcceleration_sequence[] = {
+ { &hf_its_longitudinalAccelerationValue, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_LongitudinalAccelerationValue },
+ { &hf_its_longitudinalAccelerationConfidence, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_AccelerationConfidence },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_LongitudinalAcceleration(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_LongitudinalAcceleration, its_LongitudinalAcceleration_sequence);
+
+ return offset;
+}
+
+
+static const value_string its_LateralAccelerationValue_vals[] = {
+ { -1, "pointOneMeterPerSecSquaredToRight" },
+ { 1, "pointOneMeterPerSecSquaredToLeft" },
+ { 161, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_LateralAccelerationValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -160, 161U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_LateralAcceleration_sequence[] = {
+ { &hf_its_lateralAccelerationValue, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_LateralAccelerationValue },
+ { &hf_its_lateralAccelerationConfidence, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_AccelerationConfidence },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_LateralAcceleration(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_LateralAcceleration, its_LateralAcceleration_sequence);
+
+ return offset;
+}
+
+
+static const value_string its_VerticalAccelerationValue_vals[] = {
+ { 1, "pointOneMeterPerSecSquaredUp" },
+ { -1, "pointOneMeterPerSecSquaredDown" },
+ { 161, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_VerticalAccelerationValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -160, 161U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_VerticalAcceleration_sequence[] = {
+ { &hf_its_verticalAccelerationValue, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_VerticalAccelerationValue },
+ { &hf_its_verticalAccelerationConfidence, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_AccelerationConfidence },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_VerticalAcceleration(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_VerticalAcceleration, its_VerticalAcceleration_sequence);
+
+ return offset;
+}
+
+
+static const value_string its_StationType_vals[] = {
+ { 0, "unknown" },
+ { 1, "pedestrian" },
+ { 2, "cyclist" },
+ { 3, "moped" },
+ { 4, "motorcycle" },
+ { 5, "passengerCar" },
+ { 6, "bus" },
+ { 7, "lightTruck" },
+ { 8, "heavyTruck" },
+ { 9, "trailer" },
+ { 10, "specialVehicles" },
+ { 11, "tram" },
+ { 15, "roadSideUnit" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_StationType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_ExteriorLights(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 966 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 8, 8, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_its_ExteriorLights_lowBeamHeadlightsOn,
+ &hf_its_ExteriorLights_highBeamHeadlightsOn,
+ &hf_its_ExteriorLights_leftTurnSignalOn,
+ &hf_its_ExteriorLights_rightTurnSignalOn,
+ &hf_its_ExteriorLights_daytimeRunningLightsOn,
+ &hf_its_ExteriorLights_reverseLightOn,
+ &hf_its_ExteriorLights_fogLightOn,
+ &hf_its_ExteriorLights_parkingLightsOn,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_its_ExteriorLights);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+static const value_string its_DangerousGoodsBasic_vals[] = {
+ { 0, "explosives1" },
+ { 1, "explosives2" },
+ { 2, "explosives3" },
+ { 3, "explosives4" },
+ { 4, "explosives5" },
+ { 5, "explosives6" },
+ { 6, "flammableGases" },
+ { 7, "nonFlammableGases" },
+ { 8, "toxicGases" },
+ { 9, "flammableLiquids" },
+ { 10, "flammableSolids" },
+ { 11, "substancesLiableToSpontaneousCombustion" },
+ { 12, "substancesEmittingFlammableGasesUponContactWithWater" },
+ { 13, "oxidizingSubstances" },
+ { 14, "organicPeroxides" },
+ { 15, "toxicSubstances" },
+ { 16, "infectiousSubstances" },
+ { 17, "radioactiveMaterial" },
+ { 18, "corrosiveSubstances" },
+ { 19, "miscellaneousDangerousSubstances" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_DangerousGoodsBasic(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 20, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_INTEGER_0_9999(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 9999U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_BOOLEAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_IA5String_SIZE_1_24(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_IA5String(tvb, offset, actx, tree, hf_index,
+ 1, 24, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_PhoneNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_NumericString(tvb, offset, actx, tree, hf_index,
+ 1, 16, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_UTF8String_SIZE_1_24(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_UTF8String(tvb, offset, actx, tree, hf_index,
+ 1, 24, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_DangerousGoodsExtended_sequence[] = {
+ { &hf_its_dangerousGoodsType, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_DangerousGoodsBasic },
+ { &hf_its_unNumber , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_INTEGER_0_9999 },
+ { &hf_its_elevatedTemperature, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_BOOLEAN },
+ { &hf_its_tunnelsRestricted, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_BOOLEAN },
+ { &hf_its_limitedQuantity , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_BOOLEAN },
+ { &hf_its_emergencyActionCode, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_IA5String_SIZE_1_24 },
+ { &hf_its_phoneNumber , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_PhoneNumber },
+ { &hf_its_companyName , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_UTF8String_SIZE_1_24 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_DangerousGoodsExtended(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_DangerousGoodsExtended, its_DangerousGoodsExtended_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_SpecialTransportType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 1098 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 4, 4, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_its_SpecialTransportType_heavyLoad,
+ &hf_its_SpecialTransportType_excessWidth,
+ &hf_its_SpecialTransportType_excessLength,
+ &hf_its_SpecialTransportType_excessHeight,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_its_SpecialTransportType);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_LightBarSirenInUse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 758 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 2, 2, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_its_LightBarSirenInUse_lightBarActivated,
+ &hf_its_LightBarSirenInUse_sirenActivated,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_its_LightBarSirenInUse);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+static const value_string its_HeightLonCarr_vals[] = {
+ { 1, "oneCentimeter" },
+ { 100, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_HeightLonCarr(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 100U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_PosLonCarr_vals[] = {
+ { 1, "oneCentimeter" },
+ { 127, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_PosLonCarr(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 127U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_PosPillar_vals[] = {
+ { 1, "tenCentimeters" },
+ { 30, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_PosPillar(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 30U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_PosCentMass_vals[] = {
+ { 1, "tenCentimeters" },
+ { 63, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_PosCentMass(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 63U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_RequestResponseIndication_vals[] = {
+ { 0, "request" },
+ { 1, "response" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_RequestResponseIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 2, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string its_SpeedLimit_vals[] = {
+ { 1, "oneKmPerHour" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_SpeedLimit(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_StationarySince_vals[] = {
+ { 0, "lessThan1Minute" },
+ { 1, "lessThan2Minutes" },
+ { 2, "lessThan15Minutes" },
+ { 3, "equalOrGreater15Minutes" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_StationarySince(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 4, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string its_Temperature_vals[] = {
+ { -60, "equalOrSmallerThanMinus60Deg" },
+ { 1, "oneDegreeCelsius" },
+ { 67, "equalOrGreaterThan67Deg" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_Temperature(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -60, 67U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_TrafficRule_vals[] = {
+ { 0, "noPassing" },
+ { 1, "noPassingForTrucks" },
+ { 2, "passToRight" },
+ { 3, "passToLeft" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_TrafficRule(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 4, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string its_WheelBaseVehicle_vals[] = {
+ { 1, "tenCentimeters" },
+ { 127, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_WheelBaseVehicle(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 127U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_TurningRadius_vals[] = {
+ { 1, "point4Meters" },
+ { 255, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_TurningRadius(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_PosFrontAx_vals[] = {
+ { 1, "tenCentimeters" },
+ { 20, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_PosFrontAx(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 20U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_PositionOfOccupants(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 1059 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 20, 20, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields0[] = { // CHECKED
+ &hf_its_PositionOfOccupants_row1LeftOccupied,
+ &hf_its_PositionOfOccupants_row1RightOccupied,
+ &hf_its_PositionOfOccupants_row1MidOccupied,
+ &hf_its_PositionOfOccupants_row1NotDetectable,
+ &hf_its_PositionOfOccupants_row1NotPresent,
+ &hf_its_PositionOfOccupants_row2LeftOccupied,
+ &hf_its_PositionOfOccupants_row2RightOccupied,
+ &hf_its_PositionOfOccupants_row2MidOccupied,
+ NULL
+ };
+ const gint *fields1[] = { // CHECKED
+ &hf_its_PositionOfOccupants_row2NotDetectable,
+ &hf_its_PositionOfOccupants_row2NotPresent,
+ &hf_its_PositionOfOccupants_row3LeftOccupied,
+ &hf_its_PositionOfOccupants_row3RightOccupied,
+ &hf_its_PositionOfOccupants_row3MidOccupied,
+ &hf_its_PositionOfOccupants_row3NotDetectable,
+ &hf_its_PositionOfOccupants_row3NotPresent,
+ &hf_its_PositionOfOccupants_row4LeftOccupied,
+ NULL
+ };
+ const gint *fields2[] = { // CHECKED
+ &hf_its_PositionOfOccupants_row4RightOccupied,
+ &hf_its_PositionOfOccupants_row4MidOccupied,
+ &hf_its_PositionOfOccupants_row4NotDetectable,
+ &hf_its_PositionOfOccupants_row4NotPresent,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_its_PositionOfOccupants);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields0, ENC_BIG_ENDIAN);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 1, 1, fields1, ENC_BIG_ENDIAN);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 2, 1, fields2, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+static const value_string its_PositioningSolutionType_vals[] = {
+ { 0, "noPositioningSolution" },
+ { 1, "sGNSS" },
+ { 2, "dGNSS" },
+ { 3, "sGNSSplusDR" },
+ { 4, "dGNSSplusDR" },
+ { 5, "dR" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_PositioningSolutionType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 6, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_WMInumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_IA5String(tvb, offset, actx, tree, hf_index,
+ 1, 3, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_VDS(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_IA5String(tvb, offset, actx, tree, hf_index,
+ 6, 6, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_VehicleIdentification_sequence[] = {
+ { &hf_its_wMInumber , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_WMInumber },
+ { &hf_its_vDS , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_VDS },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_VehicleIdentification(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_VehicleIdentification, its_VehicleIdentification_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_EnergyStorageType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 806 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 7, 7, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_its_EnergyStorageType_hydrogenStorage,
+ &hf_its_EnergyStorageType_electricEnergyStorage,
+ &hf_its_EnergyStorageType_liquidPropaneGas,
+ &hf_its_EnergyStorageType_compressedNaturalGas,
+ &hf_its_EnergyStorageType_diesel,
+ &hf_its_EnergyStorageType_gasoline,
+ &hf_its_EnergyStorageType_ammonia,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_its_EnergyStorageType);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+static const value_string its_VehicleLengthValue_vals[] = {
+ { 1, "tenCentimeters" },
+ { 1022, "outOfRange" },
+ { 1023, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_VehicleLengthValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 1023U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_VehicleLengthConfidenceIndication_vals[] = {
+ { 0, "noTrailerPresent" },
+ { 1, "trailerPresentWithKnownLength" },
+ { 2, "trailerPresentWithUnknownLength" },
+ { 3, "trailerPresenceIsUnknown" },
+ { 4, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_VehicleLengthConfidenceIndication(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 5, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_VehicleLength_sequence[] = {
+ { &hf_its_vehicleLengthValue, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_VehicleLengthValue },
+ { &hf_its_vehicleLengthConfidenceIndication, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_VehicleLengthConfidenceIndication },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_VehicleLength(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_VehicleLength, its_VehicleLength_sequence);
+
+ return offset;
+}
+
+
+static const value_string its_VehicleWidth_vals[] = {
+ { 1, "tenCentimeters" },
+ { 61, "outOfRange" },
+ { 62, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_VehicleWidth(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 62U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_PathHistory_sequence_of[1] = {
+ { &hf_its_PathHistory_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_PathPoint },
+};
+
+static int
+dissect_its_PathHistory(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_its_PathHistory, its_PathHistory_sequence_of,
+ 0, 40, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_EmergencyPriority(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 824 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 2, 2, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_its_EmergencyPriority_requestForRightOfWay,
+ &hf_its_EmergencyPriority_requestForFreeCrossingAtATrafficLight,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_its_EmergencyPriority);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+static const value_string its_InformationQuality_vals[] = {
+ { 0, "unavailable" },
+ { 1, "lowest" },
+ { 7, "highest" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_InformationQuality(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 7U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_RoadType_vals[] = {
+ { 0, "urban-NoStructuralSeparationToOppositeLanes" },
+ { 1, "urban-WithStructuralSeparationToOppositeLanes" },
+ { 2, "nonUrban-NoStructuralSeparationToOppositeLanes" },
+ { 3, "nonUrban-WithStructuralSeparationToOppositeLanes" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_RoadType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 4, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string its_SteeringWheelAngleValue_vals[] = {
+ { 0, "straight" },
+ { -1, "onePointFiveDegreesToRight" },
+ { 1, "onePointFiveDegreesToLeft" },
+ { 512, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_SteeringWheelAngleValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -511, 512U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_SteeringWheelAngleConfidence_vals[] = {
+ { 1, "equalOrWithinOnePointFiveDegree" },
+ { 126, "outOfRange" },
+ { 127, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_SteeringWheelAngleConfidence(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 127U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_SteeringWheelAngle_sequence[] = {
+ { &hf_its_steeringWheelAngleValue, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_SteeringWheelAngleValue },
+ { &hf_its_steeringWheelAngleConfidence, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_SteeringWheelAngleConfidence },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_SteeringWheelAngle(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_SteeringWheelAngle, its_SteeringWheelAngle_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_TimestampIts(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer_64b(tvb, offset, actx, tree, hf_index,
+ 0U, G_GUINT64_CONSTANT(4398046511103), NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_VehicleRole_vals[] = {
+ { 0, "default" },
+ { 1, "publicTransport" },
+ { 2, "specialTransport" },
+ { 3, "dangerousGoods" },
+ { 4, "roadWork" },
+ { 5, "rescue" },
+ { 6, "emergency" },
+ { 7, "safetyCar" },
+ { 8, "agriculture" },
+ { 9, "commercial" },
+ { 10, "military" },
+ { 11, "roadOperator" },
+ { 12, "taxi" },
+ { 13, "reserved1" },
+ { 14, "reserved2" },
+ { 15, "reserved3" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_VehicleRole(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 16, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string its_YawRateValue_vals[] = {
+ { 0, "straight" },
+ { -1, "degSec-000-01ToRight" },
+ { 1, "degSec-000-01ToLeft" },
+ { 32767, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_YawRateValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -32766, 32767U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_YawRateConfidence_vals[] = {
+ { 0, "degSec-000-01" },
+ { 1, "degSec-000-05" },
+ { 2, "degSec-000-10" },
+ { 3, "degSec-001-00" },
+ { 4, "degSec-005-00" },
+ { 5, "degSec-010-00" },
+ { 6, "degSec-100-00" },
+ { 7, "outOfRange" },
+ { 8, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_YawRateConfidence(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 9, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_YawRate_sequence[] = {
+ { &hf_its_yawRateValue , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_YawRateValue },
+ { &hf_its_yawRateConfidence, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_YawRateConfidence },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_YawRate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_YawRate, its_YawRate_sequence);
+
+ return offset;
+}
+
+
+static const value_string its_ProtectedZoneType_vals[] = {
+ { 0, "permanentCenDsrcTolling" },
+ { 1, "temporaryCenDsrcTolling" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_ProtectedZoneType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 1, NULL, TRUE, 1, NULL);
+
+ return offset;
+}
+
+
+static const value_string its_RelevanceDistance_vals[] = {
+ { 0, "lessThan50m" },
+ { 1, "lessThan100m" },
+ { 2, "lessThan200m" },
+ { 3, "lessThan500m" },
+ { 4, "lessThan1000m" },
+ { 5, "lessThan5km" },
+ { 6, "lessThan10km" },
+ { 7, "over10km" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_RelevanceDistance(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 8, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string its_RelevanceTrafficDirection_vals[] = {
+ { 0, "allTrafficDirections" },
+ { 1, "upstreamTraffic" },
+ { 2, "downstreamTraffic" },
+ { 3, "oppositeTraffic" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_RelevanceTrafficDirection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 4, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string its_TransmissionInterval_vals[] = {
+ { 1, "oneMilliSecond" },
+ { 10000, "tenSeconds" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_TransmissionInterval(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 10000U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_ValidityDuration_vals[] = {
+ { 0, "timeOfDetection" },
+ { 1, "oneSecondAfterDetection" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_ValidityDuration(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 86400U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_SequenceNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 65535U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_ActionID_sequence[] = {
+ { &hf_its_originatingStationID, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_StationID },
+ { &hf_its_sequenceNumber , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_SequenceNumber },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_ActionID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_ActionID, its_ActionID_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_ItineraryPath_sequence_of[1] = {
+ { &hf_its_ItineraryPath_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_ReferencePosition },
+};
+
+static int
+dissect_its_ItineraryPath(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_its_ItineraryPath, its_ItineraryPath_sequence_of,
+ 1, 40, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_ProtectedZoneRadius_vals[] = {
+ { 1, "oneMeter" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_ProtectedZoneRadius(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 255U, NULL, TRUE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_ProtectedZoneID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 134217727U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_ProtectedCommunicationZone_sequence[] = {
+ { &hf_its_protectedZoneType, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_ProtectedZoneType },
+ { &hf_its_expiryTime , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_TimestampIts },
+ { &hf_its_protectedZoneLatitude, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_Latitude },
+ { &hf_its_protectedZoneLongitude, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_Longitude },
+ { &hf_its_protectedZoneRadius, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_ProtectedZoneRadius },
+ { &hf_its_protectedZoneID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_ProtectedZoneID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_ProtectedCommunicationZone(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_ProtectedCommunicationZone, its_ProtectedCommunicationZone_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_Traces_sequence_of[1] = {
+ { &hf_its_Traces_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_PathHistory },
+};
+
+static int
+dissect_its_Traces(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_its_Traces, its_Traces_sequence_of,
+ 1, 7, FALSE);
+
+ return offset;
+}
+
+
+static const value_string its_NumberOfOccupants_vals[] = {
+ { 1, "oneOccupant" },
+ { 127, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_its_NumberOfOccupants(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 127U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_PositionOfPillars_sequence_of[1] = {
+ { &hf_its_PositionOfPillars_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_PosPillar },
+};
+
+static int
+dissect_its_PositionOfPillars(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_its_PositionOfPillars, its_PositionOfPillars_sequence_of,
+ 1, 3, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_RestrictedTypes_sequence_of[1] = {
+ { &hf_its_RestrictedTypes_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_StationType },
+};
+
+static int
+dissect_its_RestrictedTypes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_its_RestrictedTypes, its_RestrictedTypes_sequence_of,
+ 1, 3, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_EventPoint_sequence[] = {
+ { &hf_its_eventPosition , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_DeltaReferencePosition },
+ { &hf_its_eventDeltaTime , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_PathDeltaTime },
+ { &hf_its_informationQuality, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_InformationQuality },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_EventPoint(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_EventPoint, its_EventPoint_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_EventHistory_sequence_of[1] = {
+ { &hf_its_EventHistory_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_EventPoint },
+};
+
+static int
+dissect_its_EventHistory(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_its_EventHistory, its_EventHistory_sequence_of,
+ 1, 23, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_ProtectedCommunicationZonesRSU_sequence_of[1] = {
+ { &hf_its_ProtectedCommunicationZonesRSU_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_ProtectedCommunicationZone },
+};
+
+static int
+dissect_its_ProtectedCommunicationZonesRSU(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_its_ProtectedCommunicationZonesRSU, its_ProtectedCommunicationZonesRSU_sequence_of,
+ 1, 16, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_CenDsrcTollingZoneID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_its_ProtectedZoneID(tvb, offset, actx, tree, hf_index);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_CenDsrcTollingZone_sequence[] = {
+ { &hf_its_protectedZoneLatitude, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_Latitude },
+ { &hf_its_protectedZoneLongitude, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_Longitude },
+ { &hf_its_cenDsrcTollingZoneID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_CenDsrcTollingZoneID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_its_CenDsrcTollingZone(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_its_CenDsrcTollingZone, its_CenDsrcTollingZone_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t its_DigitalMap_sequence_of[1] = {
+ { &hf_its_DigitalMap_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_ReferencePosition },
+};
+
+static int
+dissect_its_DigitalMap(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_its_DigitalMap, its_DigitalMap_sequence_of,
+ 1, 256, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_its_OpeningDaysHours(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_UTF8String(tvb, offset, actx, tree, hf_index,
+ NO_BOUND, NO_BOUND, FALSE);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_its_ItsPduHeader_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ offset = dissect_its_ItsPduHeader(tvb, offset, &asn1_ctx, tree, hf_its_its_ItsPduHeader_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
+
+/* --- Module AVIAEINumberingAndDataStructures --- --- --- */
+
+
+
+static int
+dissect_anads_CountryCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 10, 10, FALSE, NULL, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_anads_IssuerIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 16383U, NULL, FALSE);
+
+ return offset;
+}
+
+
+/* --- Module ElectronicRegistrationIdentificationVehicleDataModule --- --- --- */
+
+
+static const value_string erivdm_EuVehicleCategoryL_vals[] = {
+ { 0, "l1" },
+ { 1, "l2" },
+ { 2, "l3" },
+ { 3, "l4" },
+ { 4, "l5" },
+ { 5, "l6" },
+ { 6, "l7" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_erivdm_EuVehicleCategoryL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 7, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string erivdm_EuVehicleCategoryM_vals[] = {
+ { 0, "m1" },
+ { 1, "m2" },
+ { 2, "m3" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_erivdm_EuVehicleCategoryM(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 3, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string erivdm_EuVehicleCategoryN_vals[] = {
+ { 0, "n1" },
+ { 1, "n2" },
+ { 2, "n3" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_erivdm_EuVehicleCategoryN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 3, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string erivdm_EuVehicleCategoryO_vals[] = {
+ { 0, "o1" },
+ { 1, "o2" },
+ { 2, "o3" },
+ { 3, "o4" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_erivdm_EuVehicleCategoryO(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 4, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_erivdm_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
+
+ return offset;
+}
+
+
+static const value_string erivdm_EuVehicleCategoryCode_vals[] = {
+ { 0, "euVehicleCategoryL" },
+ { 1, "euVehicleCategoryM" },
+ { 2, "euVehicleCategoryN" },
+ { 3, "euVehicleCategoryO" },
+ { 4, "euVehilcleCategoryT" },
+ { 5, "euVehilcleCategoryG" },
+ { 0, NULL }
+};
+
+static const per_choice_t erivdm_EuVehicleCategoryCode_choice[] = {
+ { 0, &hf_erivdm_euVehicleCategoryL, ASN1_NO_EXTENSIONS , dissect_erivdm_EuVehicleCategoryL },
+ { 1, &hf_erivdm_euVehicleCategoryM, ASN1_NO_EXTENSIONS , dissect_erivdm_EuVehicleCategoryM },
+ { 2, &hf_erivdm_euVehicleCategoryN, ASN1_NO_EXTENSIONS , dissect_erivdm_EuVehicleCategoryN },
+ { 3, &hf_erivdm_euVehicleCategoryO, ASN1_NO_EXTENSIONS , dissect_erivdm_EuVehicleCategoryO },
+ { 4, &hf_erivdm_euVehilcleCategoryT, ASN1_NO_EXTENSIONS , dissect_erivdm_NULL },
+ { 5, &hf_erivdm_euVehilcleCategoryG, ASN1_NO_EXTENSIONS , dissect_erivdm_NULL },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_erivdm_EuVehicleCategoryCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_erivdm_EuVehicleCategoryCode, erivdm_EuVehicleCategoryCode_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string erivdm_Iso3833VehicleType_vals[] = {
+ { 0, "passengerCar" },
+ { 1, "saloon" },
+ { 2, "convertibleSaloon" },
+ { 3, "pullmanSaloon" },
+ { 4, "stationWagon" },
+ { 5, "truckStationWagon" },
+ { 6, "coupe" },
+ { 7, "convertible" },
+ { 8, "multipurposePassengerCar" },
+ { 9, "forwardControlPassengerCar" },
+ { 10, "specialPassengerCar" },
+ { 11, "bus" },
+ { 12, "minibus" },
+ { 13, "urbanBus" },
+ { 14, "interurbanCoach" },
+ { 15, "longDistanceCoach" },
+ { 16, "articulatedBus" },
+ { 17, "trolleyBus" },
+ { 18, "specialBus" },
+ { 19, "commercialVehicle" },
+ { 20, "specialCommercialVehicle" },
+ { 21, "specialVehicle" },
+ { 22, "trailingTowingVehicle" },
+ { 23, "semiTrailerTowingVehicle" },
+ { 24, "trailer" },
+ { 25, "busTrailer" },
+ { 26, "generalPurposeTrailer" },
+ { 27, "caravan" },
+ { 28, "specialTrailer" },
+ { 29, "semiTrailer" },
+ { 30, "busSemiTrailer" },
+ { 31, "generalPurposeSemiTrailer" },
+ { 32, "specialSemiTrailer" },
+ { 33, "roadTrain" },
+ { 34, "passengerRoadTrain" },
+ { 35, "articulatedRoadTrain" },
+ { 36, "doubleRoadTrain" },
+ { 37, "compositeRoadTrain" },
+ { 38, "specialRoadTrain" },
+ { 39, "moped" },
+ { 40, "motorCycle" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_erivdm_Iso3833VehicleType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+/* --- Module CITSapplMgmtIDs --- --- --- */
+
+
+
+static int
+dissect_csmid_INTEGER_0_127(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 127U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_csmid_INTEGER_128_16511(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 128U, 16511U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_csmid_INTEGER_16512_2113663(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 16512U, 2113663U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_csmid_Ext3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 2113664U, 270549119U, NULL, TRUE);
+
+ return offset;
+}
+
+
+static const value_string csmid_Ext2_vals[] = {
+ { 0, "content" },
+ { 1, "extension" },
+ { 0, NULL }
+};
+
+static const per_choice_t csmid_Ext2_choice[] = {
+ { 0, &hf_csmid_e2Content , ASN1_NO_EXTENSIONS , dissect_csmid_INTEGER_16512_2113663 },
+ { 1, &hf_csmid_e1Extension , ASN1_NO_EXTENSIONS , dissect_csmid_Ext3 },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_csmid_Ext2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_csmid_Ext2, csmid_Ext2_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string csmid_Ext1_vals[] = {
+ { 0, "content" },
+ { 1, "extension" },
+ { 0, NULL }
+};
+
+static const per_choice_t csmid_Ext1_choice[] = {
+ { 0, &hf_csmid_e1Content , ASN1_NO_EXTENSIONS , dissect_csmid_INTEGER_128_16511 },
+ { 1, &hf_csmid_e2Extension , ASN1_NO_EXTENSIONS , dissect_csmid_Ext2 },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_csmid_Ext1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_csmid_Ext1, csmid_Ext1_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string csmid_VarLengthNumber_vals[] = {
+ { 0, "content" },
+ { 1, "extension" },
+ { 0, NULL }
+};
+
+static const per_choice_t csmid_VarLengthNumber_choice[] = {
+ { 0, &hf_csmid_vlnContent , ASN1_NO_EXTENSIONS , dissect_csmid_INTEGER_0_127 },
+ { 1, &hf_csmid_vlnExtension , ASN1_NO_EXTENSIONS , dissect_csmid_Ext1 },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_csmid_VarLengthNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_csmid_VarLengthNumber, csmid_VarLengthNumber_choice,
+ NULL);
+
+ return offset;
+}
+
+
+/* --- Module EfcDsrcApplication --- --- --- */
+
+
+
+static int
+dissect_dsrc_app_Int2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 65535U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_app_AxleWeightLimits_sequence[] = {
+ { &hf_dsrc_app_maxLadenweightOnAxle1, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Int2 },
+ { &hf_dsrc_app_maxLadenweightOnAxle2, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Int2 },
+ { &hf_dsrc_app_maxLadenweightOnAxle3, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Int2 },
+ { &hf_dsrc_app_maxLadenweightOnAxle4, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Int2 },
+ { &hf_dsrc_app_maxLadenweightOnAxle5, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Int2 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_app_AxleWeightLimits(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_app_AxleWeightLimits, dsrc_app_AxleWeightLimits_sequence);
+
+ return offset;
+}
+
+
+static const value_string dsrc_app_UnitType_vals[] = {
+ { 0, "mg-km" },
+ { 1, "mg-kWh" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_dsrc_app_UnitType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 2, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_app_INTEGER_0_32767(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 32767U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_app_T_particulate_sequence[] = {
+ { &hf_dsrc_app_unitType , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_UnitType },
+ { &hf_dsrc_app_value , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_INTEGER_0_32767 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_app_T_particulate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_app_T_particulate, dsrc_app_T_particulate_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_app_DieselEmissionValues_sequence[] = {
+ { &hf_dsrc_app_particulate, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_T_particulate },
+ { &hf_dsrc_app_absorptionCoeff, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Int2 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_app_DieselEmissionValues(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_app_DieselEmissionValues, dsrc_app_DieselEmissionValues_sequence);
+
+ return offset;
+}
+
+
+static const value_string dsrc_app_EuroValue_vals[] = {
+ { 0, "noEntry" },
+ { 1, "euro-1" },
+ { 2, "euro-2" },
+ { 3, "euro-3" },
+ { 4, "euro-4" },
+ { 5, "euro-5" },
+ { 6, "euro-6" },
+ { 7, "reservedForUse1" },
+ { 8, "reservedForUse2" },
+ { 9, "reservedForUse3" },
+ { 10, "reservedForUse4" },
+ { 11, "reservedForUse5" },
+ { 12, "reservedForUse6" },
+ { 13, "reservedForUse7" },
+ { 14, "reservedForUse8" },
+ { 15, "eev" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_dsrc_app_EuroValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 16, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string dsrc_app_CopValue_vals[] = {
+ { 0, "noEntry" },
+ { 1, "co2class1" },
+ { 2, "co2class2" },
+ { 3, "co2class3" },
+ { 4, "co2class4" },
+ { 5, "co2class5" },
+ { 6, "co2class6" },
+ { 7, "co2class7" },
+ { 8, "reservedforUse" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_dsrc_app_CopValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 9, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_app_EnvironmentalCharacteristics_sequence[] = {
+ { &hf_dsrc_app_euroValue , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_EuroValue },
+ { &hf_dsrc_app_copValue , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_CopValue },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_app_EnvironmentalCharacteristics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_app_EnvironmentalCharacteristics, dsrc_app_EnvironmentalCharacteristics_sequence);
+
+ return offset;
+}
+
+
+static const value_string dsrc_app_EngineCharacteristics_vals[] = {
+ { 0, "noEntry" },
+ { 1, "noEngine" },
+ { 2, "petrolUnleaded" },
+ { 3, "petrolLeaded" },
+ { 4, "diesel" },
+ { 5, "lPG" },
+ { 6, "battery" },
+ { 7, "solar" },
+ { 8, "hybrid" },
+ { 9, "hydrogen" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_dsrc_app_EngineCharacteristics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_app_ExhaustEmissionValues_sequence[] = {
+ { &hf_dsrc_app_unitType , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_UnitType },
+ { &hf_dsrc_app_emissionCO , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_INTEGER_0_32767 },
+ { &hf_dsrc_app_emissionHC , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Int2 },
+ { &hf_dsrc_app_emissionNOX, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Int2 },
+ { &hf_dsrc_app_emissionHCNOX, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Int2 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_app_ExhaustEmissionValues(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_app_ExhaustEmissionValues, dsrc_app_ExhaustEmissionValues_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_app_Int1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_app_PassengerCapacity_sequence[] = {
+ { &hf_dsrc_app_numberOfSeats, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Int1 },
+ { &hf_dsrc_app_numberOfStandingPlaces, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Int1 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_app_PassengerCapacity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_app_PassengerCapacity, dsrc_app_PassengerCapacity_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_app_Provider_sequence[] = {
+ { &hf_dsrc_app_countryCode, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_anads_CountryCode },
+ { &hf_dsrc_app_providerIdentifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_anads_IssuerIdentifier },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_app_Provider(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_app_Provider, dsrc_app_Provider_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_app_SoundLevel_sequence[] = {
+ { &hf_dsrc_app_soundstationary, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Int1 },
+ { &hf_dsrc_app_sounddriveby, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Int1 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_app_SoundLevel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_app_SoundLevel, dsrc_app_SoundLevel_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_app_VehicleDimensions_sequence[] = {
+ { &hf_dsrc_app_vehicleLengthOverall, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Int1 },
+ { &hf_dsrc_app_vehicleHeigthOverall, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Int1 },
+ { &hf_dsrc_app_vehicleWidthOverall, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Int1 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_app_VehicleDimensions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_app_VehicleDimensions, dsrc_app_VehicleDimensions_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_app_VehicleWeightLimits_sequence[] = {
+ { &hf_dsrc_app_vehicleMaxLadenWeight, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Int2 },
+ { &hf_dsrc_app_vehicleTrainMaximumWeight, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Int2 },
+ { &hf_dsrc_app_vehicleWeightUnladen, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Int2 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_app_VehicleWeightLimits(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_app_VehicleWeightLimits, dsrc_app_VehicleWeightLimits_sequence);
+
+ return offset;
+}
+
+
+/* --- Module IVI --- --- --- */
+
+/*--- Cyclic dependencies ---*/
+
+/* ISO14823Code -> ISO14823Attributes -> ISO14823Attributes/_item -> DDD -> DDD/ioList -> DDD-IO -> DDD-IO/dp -> DestinationPlace -> ISO14823Code */
+static int dissect_ivi_ISO14823Code(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
+
+
+
+
+static int
+dissect_ivi_IviIdentificationNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 32767U, NULL, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_SEQUENCE_SIZE_1_8_OF_IviIdentificationNumber_sequence_of[1] = {
+ { &hf_ivi_connectedIviStructures_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_IviIdentificationNumber },
+};
+
+static int
+dissect_ivi_SEQUENCE_SIZE_1_8_OF_IviIdentificationNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_SEQUENCE_SIZE_1_8_OF_IviIdentificationNumber, ivi_SEQUENCE_SIZE_1_8_OF_IviIdentificationNumber_sequence_of,
+ 1, 8, FALSE);
+
+ return offset;
+}
+
+
+static const value_string ivi_IviStatus_vals[] = {
+ { 0, "new" },
+ { 1, "update" },
+ { 2, "cancellation" },
+ { 3, "negation" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_ivi_IviStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 7U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_IVIManagementContainer_sequence[] = {
+ { &hf_ivi_serviceProviderId, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Provider },
+ { &hf_ivi_iviIdentificationNumber, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ivi_IviIdentificationNumber },
+ { &hf_ivi_timeStamp , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_TimestampIts },
+ { &hf_ivi_validFrom , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_TimestampIts },
+ { &hf_ivi_validTo , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_TimestampIts },
+ { &hf_ivi_connectedIviStructures, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_SEQUENCE_SIZE_1_8_OF_IviIdentificationNumber },
+ { &hf_ivi_iviStatus , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ivi_IviStatus },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_IVIManagementContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_IVIManagementContainer, ivi_IVIManagementContainer_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_Zid(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 32U, NULL, TRUE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_0_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_DeltaPosition_sequence[] = {
+ { &hf_ivi_deltaLatitude , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_DeltaLatitude },
+ { &hf_ivi_deltaLongitude , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_DeltaLongitude },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_DeltaPosition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_DeltaPosition, ivi_DeltaPosition_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_SEQUENCE_SIZE_1_32__OF_DeltaPosition_sequence_of[1] = {
+ { &hf_ivi_deltaPositions_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_DeltaPosition },
+};
+
+static int
+dissect_ivi_SEQUENCE_SIZE_1_32__OF_DeltaPosition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_SEQUENCE_SIZE_1_32__OF_DeltaPosition, ivi_SEQUENCE_SIZE_1_32__OF_DeltaPosition_sequence_of,
+ 1, 32, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_SEQUENCE_SIZE_1_32__OF_DeltaReferencePosition_sequence_of[1] = {
+ { &hf_ivi_deltaPositionsWithAltitude_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_DeltaReferencePosition },
+};
+
+static int
+dissect_ivi_SEQUENCE_SIZE_1_32__OF_DeltaReferencePosition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_SEQUENCE_SIZE_1_32__OF_DeltaReferencePosition, ivi_SEQUENCE_SIZE_1_32__OF_DeltaReferencePosition_sequence_of,
+ 1, 32, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_AbsolutePosition_sequence[] = {
+ { &hf_ivi_latitude , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_Latitude },
+ { &hf_ivi_longitude , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_Longitude },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_AbsolutePosition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_AbsolutePosition, ivi_AbsolutePosition_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_SEQUENCE_SIZE_1_8__OF_AbsolutePosition_sequence_of[1] = {
+ { &hf_ivi_absolutePositions_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_AbsolutePosition },
+};
+
+static int
+dissect_ivi_SEQUENCE_SIZE_1_8__OF_AbsolutePosition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_SEQUENCE_SIZE_1_8__OF_AbsolutePosition, ivi_SEQUENCE_SIZE_1_8__OF_AbsolutePosition_sequence_of,
+ 1, 8, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_AbsolutePositionWAltitude_sequence[] = {
+ { &hf_ivi_latitude , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_Latitude },
+ { &hf_ivi_longitude , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_Longitude },
+ { &hf_ivi_altitude , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_Altitude },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_AbsolutePositionWAltitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_AbsolutePositionWAltitude, ivi_AbsolutePositionWAltitude_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_SEQUENCE_SIZE_1_8__OF_AbsolutePositionWAltitude_sequence_of[1] = {
+ { &hf_ivi_absolutePositionsWithAltitude_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_AbsolutePositionWAltitude },
+};
+
+static int
+dissect_ivi_SEQUENCE_SIZE_1_8__OF_AbsolutePositionWAltitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_SEQUENCE_SIZE_1_8__OF_AbsolutePositionWAltitude, ivi_SEQUENCE_SIZE_1_8__OF_AbsolutePositionWAltitude_sequence_of,
+ 1, 8, TRUE);
+
+ return offset;
+}
+
+
+static const value_string ivi_PolygonalLine_vals[] = {
+ { 0, "deltaPositions" },
+ { 1, "deltaPositionsWithAltitude" },
+ { 2, "absolutePositions" },
+ { 3, "absolutePositionsWithAltitude" },
+ { 0, NULL }
+};
+
+static const per_choice_t ivi_PolygonalLine_choice[] = {
+ { 0, &hf_ivi_deltaPositions , ASN1_EXTENSION_ROOT , dissect_ivi_SEQUENCE_SIZE_1_32__OF_DeltaPosition },
+ { 1, &hf_ivi_deltaPositionsWithAltitude, ASN1_EXTENSION_ROOT , dissect_ivi_SEQUENCE_SIZE_1_32__OF_DeltaReferencePosition },
+ { 2, &hf_ivi_absolutePositions, ASN1_EXTENSION_ROOT , dissect_ivi_SEQUENCE_SIZE_1_8__OF_AbsolutePosition },
+ { 3, &hf_ivi_absolutePositionsWithAltitude, ASN1_EXTENSION_ROOT , dissect_ivi_SEQUENCE_SIZE_1_8__OF_AbsolutePositionWAltitude },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_ivi_PolygonalLine(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_ivi_PolygonalLine, ivi_PolygonalLine_choice,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_IVILaneWidth(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 1023U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_Segment_sequence[] = {
+ { &hf_ivi_line , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_PolygonalLine },
+ { &hf_ivi_laneWidth , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_IVILaneWidth },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_Segment(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_Segment, ivi_Segment_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_M32768_32767(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -32768, 32767U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_ComputedSegment_sequence[] = {
+ { &hf_ivi_zoneId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_Zid },
+ { &hf_ivi_laneNumber , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_LanePosition },
+ { &hf_ivi_laneWidth , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_IVILaneWidth },
+ { &hf_ivi_offsetDistance , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_INTEGER_M32768_32767 },
+ { &hf_ivi_offsetPosition , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_DeltaReferencePosition },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_ComputedSegment(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_ComputedSegment, ivi_ComputedSegment_sequence);
+
+ return offset;
+}
+
+
+static const value_string ivi_Zone_vals[] = {
+ { 0, "segment" },
+ { 1, "area" },
+ { 2, "computedSegment" },
+ { 0, NULL }
+};
+
+static const per_choice_t ivi_Zone_choice[] = {
+ { 0, &hf_ivi_segment , ASN1_EXTENSION_ROOT , dissect_ivi_Segment },
+ { 1, &hf_ivi_area , ASN1_EXTENSION_ROOT , dissect_ivi_PolygonalLine },
+ { 2, &hf_ivi_computedSegment , ASN1_EXTENSION_ROOT , dissect_ivi_ComputedSegment },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_ivi_Zone(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_ivi_Zone, ivi_Zone_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_GlcPart_sequence[] = {
+ { &hf_ivi_zoneId , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ivi_Zid },
+ { &hf_ivi_laneNumber , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_LanePosition },
+ { &hf_ivi_zoneExtension , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_INTEGER_0_255 },
+ { &hf_ivi_zoneHeading , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_HeadingValue },
+ { &hf_ivi_zone , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_Zone },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_GlcPart(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_GlcPart, ivi_GlcPart_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_SEQUENCE_SIZE_1_16__OF_GlcPart_sequence_of[1] = {
+ { &hf_ivi_parts_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_GlcPart },
+};
+
+static int
+dissect_ivi_SEQUENCE_SIZE_1_16__OF_GlcPart(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_SEQUENCE_SIZE_1_16__OF_GlcPart, ivi_SEQUENCE_SIZE_1_16__OF_GlcPart_sequence_of,
+ 1, 16, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_GeographicLocationContainer_sequence[] = {
+ { &hf_ivi_referencePosition, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_ReferencePosition },
+ { &hf_ivi_referencePositionTime, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_TimestampIts },
+ { &hf_ivi_referencePositionHeading, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_Heading },
+ { &hf_ivi_referencePositionSpeed, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_Speed },
+ { &hf_ivi_parts , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ivi_SEQUENCE_SIZE_1_16__OF_GlcPart },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_GeographicLocationContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_GeographicLocationContainer, ivi_GeographicLocationContainer_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_T_GicPartDetectionZoneIds_sequence_of[1] = {
+ { &hf_ivi_gpDetectionZoneIds_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_Zid },
+};
+
+static int
+dissect_ivi_T_GicPartDetectionZoneIds(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_T_GicPartDetectionZoneIds, ivi_T_GicPartDetectionZoneIds_sequence_of,
+ 1, 8, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_T_GicPartRelevanceZoneIds_sequence_of[1] = {
+ { &hf_ivi_gpRelevanceZoneIds_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_Zid },
+};
+
+static int
+dissect_ivi_T_GicPartRelevanceZoneIds(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_T_GicPartRelevanceZoneIds, ivi_T_GicPartRelevanceZoneIds_sequence_of,
+ 1, 8, TRUE);
+
+ return offset;
+}
+
+
+static const value_string ivi_Direction_vals[] = {
+ { 0, "sameDirection" },
+ { 1, "oppositeDirection" },
+ { 2, "bothDirections" },
+ { 3, "valueNotUsed" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_ivi_Direction(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 3U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_T_GicPartDriverAwarenessZoneIds_sequence_of[1] = {
+ { &hf_ivi_gpDriverAwarenessZoneIds_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_Zid },
+};
+
+static int
+dissect_ivi_T_GicPartDriverAwarenessZoneIds(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_T_GicPartDriverAwarenessZoneIds, ivi_T_GicPartDriverAwarenessZoneIds_sequence_of,
+ 1, 8, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_SEQUENCE_SIZE_1_8__OF_LanePosition_sequence_of[1] = {
+ { &hf_ivi_applicableLanes_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_LanePosition },
+};
+
+static int
+dissect_ivi_SEQUENCE_SIZE_1_8__OF_LanePosition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_SEQUENCE_SIZE_1_8__OF_LanePosition, ivi_SEQUENCE_SIZE_1_8__OF_LanePosition_sequence_of,
+ 1, 8, TRUE);
+
+ return offset;
+}
+
+
+static const value_string ivi_IviType_vals[] = {
+ { 0, "immediateDangerWarningMessages" },
+ { 1, "regulatoryMessages" },
+ { 2, "trafficRelatedInformationMessages" },
+ { 3, "pollutionMessages" },
+ { 4, "notTrafficRelatedInformationMessages" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_ivi_IviType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 7U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string ivi_IviPurpose_vals[] = {
+ { 0, "safety" },
+ { 1, "environmental" },
+ { 2, "trafficOptimisation" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_ivi_IviPurpose(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 3U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string ivi_LaneStatus_vals[] = {
+ { 0, "open" },
+ { 1, "closed" },
+ { 2, "mergeR" },
+ { 3, "mergeL" },
+ { 4, "mergeLR" },
+ { 5, "provisionallyOpen" },
+ { 6, "diverging" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_ivi_LaneStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 7U, NULL, TRUE);
+
+ return offset;
+}
+
+
+static const value_string ivi_GoodsType_vals[] = {
+ { 0, "ammunition" },
+ { 1, "chemicals" },
+ { 2, "empty" },
+ { 3, "fuel" },
+ { 4, "glass" },
+ { 5, "dangerous" },
+ { 6, "liquid" },
+ { 7, "liveStock" },
+ { 8, "dangerousForPeople" },
+ { 9, "dangerousForTheEnvironment" },
+ { 10, "dangerousForWater" },
+ { 11, "perishableProducts" },
+ { 12, "pharmaceutical" },
+ { 13, "vehicles" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_ivi_GoodsType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 15U, NULL, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_LoadType_sequence[] = {
+ { &hf_ivi_goodsType , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_GoodsType },
+ { &hf_ivi_dangerousGoodsType, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_DangerousGoodsBasic },
+ { &hf_ivi_specialTransportType, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_SpecialTransportType },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_LoadType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_LoadType, ivi_LoadType_sequence);
+
+ return offset;
+}
+
+
+static const value_string ivi_VehicleCharacteristicsFixValues_vals[] = {
+ { 0, "simpleVehicleType" },
+ { 1, "euVehicleCategoryCode" },
+ { 2, "iso3833VehicleType" },
+ { 3, "euroAndCo2value" },
+ { 4, "engineCharacteristics" },
+ { 5, "loadType" },
+ { 6, "usage" },
+ { 0, NULL }
+};
+
+static const per_choice_t ivi_VehicleCharacteristicsFixValues_choice[] = {
+ { 0, &hf_ivi_simpleVehicleType, ASN1_EXTENSION_ROOT , dissect_its_StationType },
+ { 1, &hf_ivi_euVehicleCategoryCode, ASN1_EXTENSION_ROOT , dissect_erivdm_EuVehicleCategoryCode },
+ { 2, &hf_ivi_iso3833VehicleType, ASN1_EXTENSION_ROOT , dissect_erivdm_Iso3833VehicleType },
+ { 3, &hf_ivi_euroAndCo2value , ASN1_EXTENSION_ROOT , dissect_dsrc_app_EnvironmentalCharacteristics },
+ { 4, &hf_ivi_engineCharacteristics, ASN1_EXTENSION_ROOT , dissect_dsrc_app_EngineCharacteristics },
+ { 5, &hf_ivi_loadType , ASN1_EXTENSION_ROOT , dissect_ivi_LoadType },
+ { 6, &hf_ivi_usage , ASN1_EXTENSION_ROOT , dissect_its_VehicleRole },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_ivi_VehicleCharacteristicsFixValues(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_ivi_VehicleCharacteristicsFixValues, ivi_VehicleCharacteristicsFixValues_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_T_TractorCharactEqualTo_sequence_of[1] = {
+ { &hf_ivi_toEqualTo_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_VehicleCharacteristicsFixValues },
+};
+
+static int
+dissect_ivi_T_TractorCharactEqualTo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_T_TractorCharactEqualTo, ivi_T_TractorCharactEqualTo_sequence_of,
+ 1, 4, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_T_TractorCharactNotEqualTo_sequence_of[1] = {
+ { &hf_ivi_toNotEqualTo_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_VehicleCharacteristicsFixValues },
+};
+
+static int
+dissect_ivi_T_TractorCharactNotEqualTo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_T_TractorCharactNotEqualTo, ivi_T_TractorCharactNotEqualTo_sequence_of,
+ 1, 4, TRUE);
+
+ return offset;
+}
+
+
+static const value_string ivi_ComparisonOperator_vals[] = {
+ { 0, "greaterThan" },
+ { 1, "greaterThanOrEqualTo" },
+ { 2, "lessThan" },
+ { 3, "lessThanOrEqualTo" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_ivi_ComparisonOperator(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 3U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_0_7(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 7U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string ivi_T_limits_vals[] = {
+ { 0, "numberOfAxles" },
+ { 1, "vehicleDimensions" },
+ { 2, "vehicleWeightLimits" },
+ { 3, "axleWeightLimits" },
+ { 4, "passengerCapacity" },
+ { 5, "exhaustEmissionValues" },
+ { 6, "dieselEmissionValues" },
+ { 7, "soundLevel" },
+ { 0, NULL }
+};
+
+static const per_choice_t ivi_T_limits_choice[] = {
+ { 0, &hf_ivi_numberOfAxles , ASN1_EXTENSION_ROOT , dissect_ivi_INTEGER_0_7 },
+ { 1, &hf_ivi_vehicleDimensions, ASN1_EXTENSION_ROOT , dissect_dsrc_app_VehicleDimensions },
+ { 2, &hf_ivi_vehicleWeightLimits, ASN1_EXTENSION_ROOT , dissect_dsrc_app_VehicleWeightLimits },
+ { 3, &hf_ivi_axleWeightLimits, ASN1_EXTENSION_ROOT , dissect_dsrc_app_AxleWeightLimits },
+ { 4, &hf_ivi_passengerCapacity, ASN1_EXTENSION_ROOT , dissect_dsrc_app_PassengerCapacity },
+ { 5, &hf_ivi_exhaustEmissionValues, ASN1_EXTENSION_ROOT , dissect_dsrc_app_ExhaustEmissionValues },
+ { 6, &hf_ivi_dieselEmissionValues, ASN1_EXTENSION_ROOT , dissect_dsrc_app_DieselEmissionValues },
+ { 7, &hf_ivi_soundLevel , ASN1_EXTENSION_ROOT , dissect_dsrc_app_SoundLevel },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_ivi_T_limits(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_ivi_T_limits, ivi_T_limits_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_VehicleCharacteristicsRanges_sequence[] = {
+ { &hf_ivi_comparisonOperator, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_ComparisonOperator },
+ { &hf_ivi_limits , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_T_limits },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_VehicleCharacteristicsRanges(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_VehicleCharacteristicsRanges, ivi_VehicleCharacteristicsRanges_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_SEQUENCE_SIZE_1_4__OF_VehicleCharacteristicsRanges_sequence_of[1] = {
+ { &hf_ivi_ranges_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_VehicleCharacteristicsRanges },
+};
+
+static int
+dissect_ivi_SEQUENCE_SIZE_1_4__OF_VehicleCharacteristicsRanges(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_SEQUENCE_SIZE_1_4__OF_VehicleCharacteristicsRanges, ivi_SEQUENCE_SIZE_1_4__OF_VehicleCharacteristicsRanges_sequence_of,
+ 1, 4, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_TractorCharacteristics_sequence[] = {
+ { &hf_ivi_toEqualTo , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_T_TractorCharactEqualTo },
+ { &hf_ivi_toNotEqualTo , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_T_TractorCharactNotEqualTo },
+ { &hf_ivi_ranges , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_SEQUENCE_SIZE_1_4__OF_VehicleCharacteristicsRanges },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_TractorCharacteristics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_TractorCharacteristics, ivi_TractorCharacteristics_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_T_TrailerCharactEqualTo_sequence_of[1] = {
+ { &hf_ivi_teEqualTo_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_VehicleCharacteristicsFixValues },
+};
+
+static int
+dissect_ivi_T_TrailerCharactEqualTo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_T_TrailerCharactEqualTo, ivi_T_TrailerCharactEqualTo_sequence_of,
+ 1, 4, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_T_TrailerCharactNotEqualTo_sequence_of[1] = {
+ { &hf_ivi_teNotEqualTo_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_VehicleCharacteristicsFixValues },
+};
+
+static int
+dissect_ivi_T_TrailerCharactNotEqualTo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_T_TrailerCharactNotEqualTo, ivi_T_TrailerCharactNotEqualTo_sequence_of,
+ 1, 4, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_TrailerCharacteristics_sequence[] = {
+ { &hf_ivi_teEqualTo , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_T_TrailerCharactEqualTo },
+ { &hf_ivi_teNotEqualTo , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_T_TrailerCharactNotEqualTo },
+ { &hf_ivi_ranges , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_SEQUENCE_SIZE_1_4__OF_VehicleCharacteristicsRanges },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_TrailerCharacteristics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_TrailerCharacteristics, ivi_TrailerCharacteristics_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_SEQUENCE_SIZE_1_3_OF_TrailerCharacteristics_sequence_of[1] = {
+ { &hf_ivi_trailer_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_TrailerCharacteristics },
+};
+
+static int
+dissect_ivi_SEQUENCE_SIZE_1_3_OF_TrailerCharacteristics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_SEQUENCE_SIZE_1_3_OF_TrailerCharacteristics, ivi_SEQUENCE_SIZE_1_3_OF_TrailerCharacteristics_sequence_of,
+ 1, 3, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_TrainCharacteristics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_ivi_TractorCharacteristics(tvb, offset, actx, tree, hf_index);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_CompleteVehicleCharacteristics_sequence[] = {
+ { &hf_ivi_tractor , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_TractorCharacteristics },
+ { &hf_ivi_trailer , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_SEQUENCE_SIZE_1_3_OF_TrailerCharacteristics },
+ { &hf_ivi_train , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_TrainCharacteristics },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_CompleteVehicleCharacteristics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_CompleteVehicleCharacteristics, ivi_CompleteVehicleCharacteristics_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_SEQUENCE_SIZE_1_8__OF_CompleteVehicleCharacteristics_sequence_of[1] = {
+ { &hf_ivi_vehicleCharacteristics_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_CompleteVehicleCharacteristics },
+};
+
+static int
+dissect_ivi_SEQUENCE_SIZE_1_8__OF_CompleteVehicleCharacteristics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_SEQUENCE_SIZE_1_8__OF_CompleteVehicleCharacteristics, ivi_SEQUENCE_SIZE_1_8__OF_CompleteVehicleCharacteristics_sequence_of,
+ 1, 8, TRUE);
+
+ return offset;
+}
+
+
+static const value_string ivi_DriverCharacteristics_vals[] = {
+ { 0, "unexperiencedDrivers" },
+ { 1, "experiencedDrivers" },
+ { 2, "rfu1" },
+ { 3, "rfu2" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_ivi_DriverCharacteristics(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 3U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_1_4_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 4U, NULL, TRUE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_1_64_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 64U, NULL, TRUE);
+
+ return offset;
+}
+
+
+static const value_string ivi_VcClass_vals[] = {
+ { 0, "classA" },
+ { 1, "classB" },
+ { 2, "classC" },
+ { 3, "classD" },
+ { 4, "classE" },
+ { 5, "classF" },
+ { 6, "classG" },
+ { 7, "classH" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_ivi_VcClass(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 7U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_1_64(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 64U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string ivi_VcOption_vals[] = {
+ { 0, "none" },
+ { 1, "a" },
+ { 2, "b" },
+ { 3, "c" },
+ { 4, "d" },
+ { 5, "e" },
+ { 6, "f" },
+ { 7, "g" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_ivi_VcOption(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 7U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_2000_2127_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 2000U, 2127U, NULL, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_T_year_sequence[] = {
+ { &hf_ivi_syr , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_2000_2127_ },
+ { &hf_ivi_eyr , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_2000_2127_ },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_T_year(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_T_year, ivi_T_year_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_1_12(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 12U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_1_31(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 31U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_MonthDay_sequence[] = {
+ { &hf_ivi_month , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_1_12 },
+ { &hf_ivi_day , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_1_31 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_MonthDay(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_MonthDay, ivi_MonthDay_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_T_month_day_sequence[] = {
+ { &hf_ivi_smd , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_MonthDay },
+ { &hf_ivi_emd , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_MonthDay },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_T_month_day(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_T_month_day, ivi_T_month_day_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_PMD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 651 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 4, 4, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields[] = {
+ &hf_ivi_PMD_national_holiday,
+ &hf_ivi_PMD_even_days,
+ &hf_ivi_PMD_odd_days,
+ &hf_ivi_PMD_market_day,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_ivi_PMD);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 2, fields, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_0_23(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 23U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_0_59(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 59U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_HoursMinutes_sequence[] = {
+ { &hf_ivi_hours , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_0_23 },
+ { &hf_ivi_mins , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_0_59 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_HoursMinutes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_HoursMinutes, ivi_HoursMinutes_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_T_hourMinutes_sequence[] = {
+ { &hf_ivi_shm , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_HoursMinutes },
+ { &hf_ivi_ehm , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_HoursMinutes },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_T_hourMinutes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_T_hourMinutes, ivi_T_hourMinutes_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_DayOfWeek(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 787 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 8, 8, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_ivi_DayOfWeek_unused,
+ &hf_ivi_DayOfWeek_monday,
+ &hf_ivi_DayOfWeek_tuesday,
+ &hf_ivi_DayOfWeek_wednesday,
+ &hf_ivi_DayOfWeek_thursday,
+ &hf_ivi_DayOfWeek_friday,
+ &hf_ivi_DayOfWeek_saturday,
+ &hf_ivi_DayOfWeek_sunday,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_ivi_DayOfWeek);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_DTM_sequence[] = {
+ { &hf_ivi_year , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_T_year },
+ { &hf_ivi_month_day , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_T_month_day },
+ { &hf_ivi_pmd , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_PMD },
+ { &hf_ivi_hourMinutes , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_T_hourMinutes },
+ { &hf_ivi_dayOfWeek , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_DayOfWeek },
+ { &hf_ivi_period , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_HoursMinutes },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_DTM(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_DTM, ivi_DTM_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_SEQUENCE_SIZE_1_8__OF_DTM_sequence_of[1] = {
+ { &hf_ivi_vcValidity_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_DTM },
+};
+
+static int
+dissect_ivi_SEQUENCE_SIZE_1_8__OF_DTM(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_SEQUENCE_SIZE_1_8__OF_DTM, ivi_SEQUENCE_SIZE_1_8__OF_DTM_sequence_of,
+ 1, 8, TRUE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_0_65535(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 65535U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string ivi_RSCUnit_vals[] = {
+ { 0, "kmperh" },
+ { 1, "milesperh" },
+ { 2, "kilometer" },
+ { 3, "meter" },
+ { 4, "decimeter" },
+ { 5, "centimeter" },
+ { 6, "mile" },
+ { 7, "yard" },
+ { 8, "foot" },
+ { 9, "minutesOfTime" },
+ { 10, "tonnes" },
+ { 11, "hundredkg" },
+ { 12, "pound" },
+ { 13, "rateOfIncline" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_ivi_RSCUnit(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 15U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_VcCode_sequence[] = {
+ { &hf_ivi_roadSignClass , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_VcClass },
+ { &hf_ivi_roadSignCode , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_1_64 },
+ { &hf_ivi_vcOption , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_VcOption },
+ { &hf_ivi_vcValidity , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_SEQUENCE_SIZE_1_8__OF_DTM },
+ { &hf_ivi_vcValue , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_INTEGER_0_65535 },
+ { &hf_ivi_unit , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_RSCUnit },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_VcCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_VcCode, ivi_VcCode_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_OCTET_STRING_SIZE_2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ 2, 2, FALSE, NULL);
+
+ return offset;
+}
+
+
+static const value_string ivi_T_trafficSignPictogram_vals[] = {
+ { 0, "dangerWarning" },
+ { 1, "regulatory" },
+ { 2, "informative" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_ivi_T_trafficSignPictogram(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 3, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string ivi_T_publicFacilitiesPictogram_vals[] = {
+ { 0, "publicFacilities" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_ivi_T_publicFacilitiesPictogram(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 1, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string ivi_T_ambientOrRoadConditionPictogram_vals[] = {
+ { 0, "ambientCondition" },
+ { 1, "roadCondition" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_ivi_T_ambientOrRoadConditionPictogram(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 2, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string ivi_T_serviceCategoryCode_vals[] = {
+ { 0, "trafficSignPictogram" },
+ { 1, "publicFacilitiesPictogram" },
+ { 2, "ambientOrRoadConditionPictogram" },
+ { 0, NULL }
+};
+
+static const per_choice_t ivi_T_serviceCategoryCode_choice[] = {
+ { 0, &hf_ivi_trafficSignPictogram, ASN1_EXTENSION_ROOT , dissect_ivi_T_trafficSignPictogram },
+ { 1, &hf_ivi_publicFacilitiesPictogram, ASN1_EXTENSION_ROOT , dissect_ivi_T_publicFacilitiesPictogram },
+ { 2, &hf_ivi_ambientOrRoadConditionPictogram, ASN1_EXTENSION_ROOT , dissect_ivi_T_ambientOrRoadConditionPictogram },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_ivi_T_serviceCategoryCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_ivi_T_serviceCategoryCode, ivi_T_serviceCategoryCode_choice,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_1_9(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 9U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_0_99(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 99U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_T_pictogramCategoryCode_sequence[] = {
+ { &hf_ivi_nature , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_1_9 },
+ { &hf_ivi_serialNumber , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_0_99 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_T_pictogramCategoryCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_T_pictogramCategoryCode, ivi_T_pictogramCategoryCode_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_T_icPictogramCode_sequence[] = {
+ { &hf_ivi_countryCode , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_OCTET_STRING_SIZE_2 },
+ { &hf_ivi_serviceCategoryCode, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_T_serviceCategoryCode },
+ { &hf_ivi_pictogramCategoryCode, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_T_pictogramCategoryCode },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_T_icPictogramCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_T_icPictogramCode, ivi_T_icPictogramCode_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_EDT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_ivi_DTM(tvb, offset, actx, tree, hf_index);
+
+ return offset;
+}
+
+
+static const value_string ivi_DFL_vals[] = {
+ { 1, "sDL" },
+ { 2, "sLT" },
+ { 3, "sRT" },
+ { 4, "lTO" },
+ { 5, "rTO" },
+ { 6, "cLL" },
+ { 7, "cRI" },
+ { 8, "oVL" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_ivi_DFL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 8U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_1_16384(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 16384U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_Distance_sequence[] = {
+ { &hf_ivi_dValue , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_1_16384 },
+ { &hf_ivi_unit , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_RSCUnit },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_Distance(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_Distance, ivi_Distance_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_Weight_sequence[] = {
+ { &hf_ivi_wValue , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_1_16384 },
+ { &hf_ivi_unit , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_RSCUnit },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_Weight(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_Weight, ivi_Weight_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_VED_sequence[] = {
+ { &hf_ivi_hei , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_Distance },
+ { &hf_ivi_wid , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_Distance },
+ { &hf_ivi_vln , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_Distance },
+ { &hf_ivi_wei , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_Weight },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_VED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_VED, ivi_VED_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_0_250(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 250U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_SPE_sequence[] = {
+ { &hf_ivi_spm , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_INTEGER_0_250 },
+ { &hf_ivi_mns , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_INTEGER_0_250 },
+ { &hf_ivi_unit , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_RSCUnit },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_SPE(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_SPE, ivi_SPE_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_ROI(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 32U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_DBV(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_ivi_Distance(tvb, offset, actx, tree, hf_index);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_1_128(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 128U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string ivi_DDD_DEP_vals[] = {
+ { 0, "none" },
+ { 1, "importantArea" },
+ { 2, "principalArea" },
+ { 3, "generalArea" },
+ { 4, "wellKnownPoint" },
+ { 5, "country" },
+ { 6, "city" },
+ { 7, "street" },
+ { 8, "industrialArea" },
+ { 9, "historicArea" },
+ { 10, "touristicArea" },
+ { 11, "culturalArea" },
+ { 12, "touristicRoute" },
+ { 13, "recommendedRoute" },
+ { 14, "touristicAttraction" },
+ { 15, "geographicArea" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_ivi_DDD_DEP(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 15U, NULL, TRUE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_OCTET_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ NO_BOUND, NO_BOUND, FALSE, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_1_999(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 999U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_UTF8String(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_UTF8String(tvb, offset, actx, tree, hf_index,
+ NO_BOUND, NO_BOUND, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_DestinationPlace_sequence[] = {
+ { &hf_ivi_depType , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_DDD_DEP },
+ { &hf_ivi_depRSCode , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_ISO14823Code },
+ { &hf_ivi_depBlob , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_OCTET_STRING },
+ { &hf_ivi_plnId , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_INTEGER_1_999 },
+ { &hf_ivi_plnText , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_UTF8String },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_DestinationPlace(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_DestinationPlace, ivi_DestinationPlace_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_SEQUENCE_SIZE_1_4__OF_DestinationPlace_sequence_of[1] = {
+ { &hf_ivi_dp_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_DestinationPlace },
+};
+
+static int
+dissect_ivi_SEQUENCE_SIZE_1_4__OF_DestinationPlace(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_SEQUENCE_SIZE_1_4__OF_DestinationPlace, ivi_SEQUENCE_SIZE_1_4__OF_DestinationPlace_sequence_of,
+ 1, 4, TRUE);
+
+ return offset;
+}
+
+
+static const value_string ivi_DDD_DER_vals[] = {
+ { 0, "none" },
+ { 1, "nationalHighway" },
+ { 2, "localHighway" },
+ { 3, "tollExpresswayMotorway" },
+ { 4, "internationalHighway" },
+ { 5, "highway" },
+ { 6, "expressway" },
+ { 7, "nationalRoad" },
+ { 8, "regionalProvincialRoad" },
+ { 9, "localRoad" },
+ { 10, "motorwayJunction" },
+ { 11, "diversion" },
+ { 12, "rfu1" },
+ { 13, "rfu2" },
+ { 14, "rfu3" },
+ { 15, "rfu4" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_ivi_DDD_DER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 15U, NULL, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_DestinationRoad_sequence[] = {
+ { &hf_ivi_derType , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_DDD_DER },
+ { &hf_ivi_ronId , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_INTEGER_1_999 },
+ { &hf_ivi_ronText , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_UTF8String },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_DestinationRoad(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_DestinationRoad, ivi_DestinationRoad_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_SEQUENCE_SIZE_1_4__OF_DestinationRoad_sequence_of[1] = {
+ { &hf_ivi_dr_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_DestinationRoad },
+};
+
+static int
+dissect_ivi_SEQUENCE_SIZE_1_4__OF_DestinationRoad(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_SEQUENCE_SIZE_1_4__OF_DestinationRoad, ivi_SEQUENCE_SIZE_1_4__OF_DestinationRoad_sequence_of,
+ 1, 4, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_DistanceOrDuration_sequence[] = {
+ { &hf_ivi_dodValue , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_1_16384 },
+ { &hf_ivi_unit , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_RSCUnit },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_DistanceOrDuration(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_DistanceOrDuration, ivi_DistanceOrDuration_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_DDD_IO_sequence[] = {
+ { &hf_ivi_drn , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_0_7 },
+ { &hf_ivi_dp , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_SEQUENCE_SIZE_1_4__OF_DestinationPlace },
+ { &hf_ivi_dr , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_SEQUENCE_SIZE_1_4__OF_DestinationRoad },
+ { &hf_ivi_rne , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_INTEGER_1_999 },
+ { &hf_ivi_stnId , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_INTEGER_1_999 },
+ { &hf_ivi_stnText , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_UTF8String },
+ { &hf_ivi_dcp , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_DistanceOrDuration },
+ { &hf_ivi_ddp , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_DistanceOrDuration },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_DDD_IO(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_DDD_IO, ivi_DDD_IO_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_SEQUENCE_SIZE_1_8__OF_DDD_IO_sequence_of[1] = {
+ { &hf_ivi_ioList_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_DDD_IO },
+};
+
+static int
+dissect_ivi_SEQUENCE_SIZE_1_8__OF_DDD_IO(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_SEQUENCE_SIZE_1_8__OF_DDD_IO, ivi_SEQUENCE_SIZE_1_8__OF_DDD_IO_sequence_of,
+ 1, 8, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_DDD_sequence[] = {
+ { &hf_ivi_dcj , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_INTEGER_1_128 },
+ { &hf_ivi_dcr , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_INTEGER_1_128 },
+ { &hf_ivi_tpl , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_INTEGER_1_128 },
+ { &hf_ivi_ioList , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_SEQUENCE_SIZE_1_8__OF_DDD_IO },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_DDD(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_DDD, ivi_DDD_sequence);
+
+ return offset;
+}
+
+
+static const value_string ivi_ISO14823Attributes_item_vals[] = {
+ { 0, "dtm" },
+ { 1, "edt" },
+ { 2, "dfl" },
+ { 3, "ved" },
+ { 4, "spe" },
+ { 5, "roi" },
+ { 6, "dbv" },
+ { 7, "ddd" },
+ { 0, NULL }
+};
+
+static const per_choice_t ivi_ISO14823Attributes_item_choice[] = {
+ { 0, &hf_ivi_dtm , ASN1_NO_EXTENSIONS , dissect_ivi_DTM },
+ { 1, &hf_ivi_edt , ASN1_NO_EXTENSIONS , dissect_ivi_EDT },
+ { 2, &hf_ivi_dfl , ASN1_NO_EXTENSIONS , dissect_ivi_DFL },
+ { 3, &hf_ivi_ved , ASN1_NO_EXTENSIONS , dissect_ivi_VED },
+ { 4, &hf_ivi_spe , ASN1_NO_EXTENSIONS , dissect_ivi_SPE },
+ { 5, &hf_ivi_roi , ASN1_NO_EXTENSIONS , dissect_ivi_ROI },
+ { 6, &hf_ivi_dbv , ASN1_NO_EXTENSIONS , dissect_ivi_DBV },
+ { 7, &hf_ivi_ddd , ASN1_NO_EXTENSIONS , dissect_ivi_DDD },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_ivi_ISO14823Attributes_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_ivi_ISO14823Attributes_item, ivi_ISO14823Attributes_item_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_ISO14823Attributes_sequence_of[1] = {
+ { &hf_ivi_ISO14823Attributes_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_ISO14823Attributes_item },
+};
+
+static int
+dissect_ivi_ISO14823Attributes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_ISO14823Attributes, ivi_ISO14823Attributes_sequence_of,
+ 1, 8, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_ISO14823Code_sequence[] = {
+ { &hf_ivi_icPictogramCode , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_T_icPictogramCode },
+ { &hf_ivi_attributes , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_ISO14823Attributes },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_ISO14823Code(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_ISO14823Code, ivi_ISO14823Code_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_AnyCatalogue_sequence[] = {
+ { &hf_ivi_owner , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_app_Provider },
+ { &hf_ivi_version , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_0_255 },
+ { &hf_ivi_acPictogramCode , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_0_65535 },
+ { &hf_ivi_acValue , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_INTEGER_0_65535 },
+ { &hf_ivi_unit , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_RSCUnit },
+ { &hf_ivi_attributes , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_ISO14823Attributes },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_AnyCatalogue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_AnyCatalogue, ivi_AnyCatalogue_sequence);
+
+ return offset;
+}
+
+
+static const value_string ivi_T_code_vals[] = {
+ { 0, "viennaConvention" },
+ { 1, "iso14823" },
+ { 2, "itisCodes" },
+ { 3, "anyCatalogue" },
+ { 0, NULL }
+};
+
+static const per_choice_t ivi_T_code_choice[] = {
+ { 0, &hf_ivi_viennaConvention, ASN1_EXTENSION_ROOT , dissect_ivi_VcCode },
+ { 1, &hf_ivi_iso14823 , ASN1_EXTENSION_ROOT , dissect_ivi_ISO14823Code },
+ { 2, &hf_ivi_itisCodes , ASN1_EXTENSION_ROOT , dissect_ivi_INTEGER_0_65535 },
+ { 3, &hf_ivi_anyCatalogue , ASN1_EXTENSION_ROOT , dissect_ivi_AnyCatalogue },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_ivi_T_code(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_ivi_T_code, ivi_T_code_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_RSCode_sequence[] = {
+ { &hf_ivi_rscLayoutComponentId, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_INTEGER_1_4_ },
+ { &hf_ivi_code , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_T_code },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_RSCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_RSCode, ivi_RSCode_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_SEQUENCE_SIZE_1_4__OF_RSCode_sequence_of[1] = {
+ { &hf_ivi_roadSignCodes_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_RSCode },
+};
+
+static int
+dissect_ivi_SEQUENCE_SIZE_1_4__OF_RSCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_SEQUENCE_SIZE_1_4__OF_RSCode, ivi_SEQUENCE_SIZE_1_4__OF_RSCode_sequence_of,
+ 1, 4, TRUE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_BIT_STRING_SIZE_10(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 10, 10, FALSE, NULL, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_Text_sequence[] = {
+ { &hf_ivi_tLayoutComponentId, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_INTEGER_1_4_ },
+ { &hf_ivi_language , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_BIT_STRING_SIZE_10 },
+ { &hf_ivi_textContent , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_UTF8String },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_Text(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_Text, ivi_Text_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_T_GicPartExtraText_sequence_of[1] = {
+ { &hf_ivi_extraText_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_Text },
+};
+
+static int
+dissect_ivi_T_GicPartExtraText(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_T_GicPartExtraText, ivi_T_GicPartExtraText_sequence_of,
+ 1, 4, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_GicPart_sequence[] = {
+ { &hf_ivi_gpDetectionZoneIds, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_T_GicPartDetectionZoneIds },
+ { &hf_ivi_its_Rrid , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_csmid_VarLengthNumber },
+ { &hf_ivi_gpRelevanceZoneIds, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_T_GicPartRelevanceZoneIds },
+ { &hf_ivi_direction , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_Direction },
+ { &hf_ivi_gpDriverAwarenessZoneIds, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_T_GicPartDriverAwarenessZoneIds },
+ { &hf_ivi_minimumAwarenessTime, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_INTEGER_0_255 },
+ { &hf_ivi_applicableLanes , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_SEQUENCE_SIZE_1_8__OF_LanePosition },
+ { &hf_ivi_iviType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ivi_IviType },
+ { &hf_ivi_iviPurpose , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_IviPurpose },
+ { &hf_ivi_laneStatus , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_LaneStatus },
+ { &hf_ivi_vehicleCharacteristics, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_SEQUENCE_SIZE_1_8__OF_CompleteVehicleCharacteristics },
+ { &hf_ivi_driverCharacteristics, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_DriverCharacteristics },
+ { &hf_ivi_layoutId , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_INTEGER_1_4_ },
+ { &hf_ivi_preStoredlayoutId, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_INTEGER_1_64_ },
+ { &hf_ivi_roadSignCodes , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ivi_SEQUENCE_SIZE_1_4__OF_RSCode },
+ { &hf_ivi_extraText , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_T_GicPartExtraText },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_GicPart(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_GicPart, ivi_GicPart_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_GeneralIviContainer_sequence_of[1] = {
+ { &hf_ivi_GeneralIviContainer_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_GicPart },
+};
+
+static int
+dissect_ivi_GeneralIviContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_GeneralIviContainer, ivi_GeneralIviContainer_sequence_of,
+ 1, 16, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_SEQUENCE_SIZE_1_8__OF_Zid_sequence_of[1] = {
+ { &hf_ivi_zoneIds_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_Zid },
+};
+
+static int
+dissect_ivi_SEQUENCE_SIZE_1_8__OF_Zid(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_SEQUENCE_SIZE_1_8__OF_Zid, ivi_SEQUENCE_SIZE_1_8__OF_Zid_sequence_of,
+ 1, 8, TRUE);
+
+ return offset;
+}
+
+
+static const value_string ivi_LaneType_vals[] = {
+ { 0, "traffic" },
+ { 1, "through" },
+ { 2, "reversible" },
+ { 3, "acceleration" },
+ { 4, "deceleration" },
+ { 5, "leftHandTurning" },
+ { 6, "rightHandTurning" },
+ { 7, "dedicatedVehicle" },
+ { 8, "bus" },
+ { 9, "taxi" },
+ { 10, "hov" },
+ { 11, "hot" },
+ { 12, "pedestrian" },
+ { 13, "bikeLane" },
+ { 14, "median" },
+ { 15, "striping" },
+ { 16, "trackedVehicle" },
+ { 17, "parking" },
+ { 18, "emergency" },
+ { 19, "verge" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_ivi_LaneType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 31U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_LaneInformation_sequence[] = {
+ { &hf_ivi_laneNumber , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_LanePosition },
+ { &hf_ivi_direction , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ivi_Direction },
+ { &hf_ivi_liValidity , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_DTM },
+ { &hf_ivi_laneType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ivi_LaneType },
+ { &hf_ivi_laneTypeQualifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_CompleteVehicleCharacteristics },
+ { &hf_ivi_laneStatus , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ivi_LaneStatus },
+ { &hf_ivi_laneWidth , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_IVILaneWidth },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_LaneInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_LaneInformation, ivi_LaneInformation_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_SEQUENCE_SIZE_1_16__OF_LaneInformation_sequence_of[1] = {
+ { &hf_ivi_laneConfiguration_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_LaneInformation },
+};
+
+static int
+dissect_ivi_SEQUENCE_SIZE_1_16__OF_LaneInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_SEQUENCE_SIZE_1_16__OF_LaneInformation, ivi_SEQUENCE_SIZE_1_16__OF_LaneInformation_sequence_of,
+ 1, 16, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_RccPart_sequence[] = {
+ { &hf_ivi_zoneIds , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ivi_SEQUENCE_SIZE_1_8__OF_Zid },
+ { &hf_ivi_roadType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_RoadType },
+ { &hf_ivi_laneConfiguration, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ivi_SEQUENCE_SIZE_1_16__OF_LaneInformation },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_RccPart(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_RccPart, ivi_RccPart_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_RoadConfigurationContainer_sequence_of[1] = {
+ { &hf_ivi_RoadConfigurationContainer_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_RccPart },
+};
+
+static int
+dissect_ivi_RoadConfigurationContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_RoadConfigurationContainer, ivi_RoadConfigurationContainer_sequence_of,
+ 1, 16, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_T_TcPartDetectionZoneIds_sequence_of[1] = {
+ { &hf_ivi_tpDetectionZoneIds_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_Zid },
+};
+
+static int
+dissect_ivi_T_TcPartDetectionZoneIds(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_T_TcPartDetectionZoneIds, ivi_T_TcPartDetectionZoneIds_sequence_of,
+ 1, 8, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_T_TcPartRelevanceZoneIds_sequence_of[1] = {
+ { &hf_ivi_tpRelevanceZoneIds_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_Zid },
+};
+
+static int
+dissect_ivi_T_TcPartRelevanceZoneIds(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_T_TcPartRelevanceZoneIds, ivi_T_TcPartRelevanceZoneIds_sequence_of,
+ 1, 8, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_T_TcPartDriverAwarenessZoneIds_sequence_of[1] = {
+ { &hf_ivi_tpDriverAwarenessZoneIds_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_Zid },
+};
+
+static int
+dissect_ivi_T_TcPartDriverAwarenessZoneIds(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_T_TcPartDriverAwarenessZoneIds, ivi_T_TcPartDriverAwarenessZoneIds_sequence_of,
+ 1, 8, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_T_TcPartText_sequence_of[1] = {
+ { &hf_ivi_text_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_Text },
+};
+
+static int
+dissect_ivi_T_TcPartText(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_T_TcPartText, ivi_T_TcPartText_sequence_of,
+ 1, 4, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_TcPart_sequence[] = {
+ { &hf_ivi_tpDetectionZoneIds, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_T_TcPartDetectionZoneIds },
+ { &hf_ivi_tpRelevanceZoneIds, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ivi_T_TcPartRelevanceZoneIds },
+ { &hf_ivi_direction , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_Direction },
+ { &hf_ivi_tpDriverAwarenessZoneIds, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_T_TcPartDriverAwarenessZoneIds },
+ { &hf_ivi_minimumAwarenessTime, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_INTEGER_0_255 },
+ { &hf_ivi_applicableLanes , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_SEQUENCE_SIZE_1_8__OF_LanePosition },
+ { &hf_ivi_layoutId , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_INTEGER_1_4_ },
+ { &hf_ivi_preStoredlayoutId, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_INTEGER_1_64_ },
+ { &hf_ivi_text , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_T_TcPartText },
+ { &hf_ivi_data , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ivi_OCTET_STRING },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_TcPart(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_TcPart, ivi_TcPart_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_TextContainer_sequence_of[1] = {
+ { &hf_ivi_TextContainer_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_TcPart },
+};
+
+static int
+dissect_ivi_TextContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_TextContainer, ivi_TextContainer_sequence_of,
+ 1, 16, TRUE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_10_73(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 10U, 73U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_10_265(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 10U, 265U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ivi_INTEGER_1_8_(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 8U, NULL, TRUE);
+
+ return offset;
+}
+
+
+static const value_string ivi_T_textScripting_vals[] = {
+ { 0, "horizontal" },
+ { 1, "vertical" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_ivi_T_textScripting(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 1U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_LayoutComponent_sequence[] = {
+ { &hf_ivi_lcLayoutComponentId, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_1_8_ },
+ { &hf_ivi_height , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_10_73 },
+ { &hf_ivi_width , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_10_265 },
+ { &hf_ivi_x , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_10_265 },
+ { &hf_ivi_y , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_10_73 },
+ { &hf_ivi_textScripting , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_T_textScripting },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_LayoutComponent(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_LayoutComponent, ivi_LayoutComponent_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_SEQUENCE_SIZE_1_4__OF_LayoutComponent_sequence_of[1] = {
+ { &hf_ivi_layoutComponents_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_LayoutComponent },
+};
+
+static int
+dissect_ivi_SEQUENCE_SIZE_1_4__OF_LayoutComponent(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_SEQUENCE_SIZE_1_4__OF_LayoutComponent, ivi_SEQUENCE_SIZE_1_4__OF_LayoutComponent_sequence_of,
+ 1, 4, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_LayoutContainer_sequence[] = {
+ { &hf_ivi_layoutId , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ivi_INTEGER_1_4_ },
+ { &hf_ivi_height , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_INTEGER_10_73 },
+ { &hf_ivi_width , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ivi_INTEGER_10_265 },
+ { &hf_ivi_layoutComponents, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ivi_SEQUENCE_SIZE_1_4__OF_LayoutComponent },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_LayoutContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_LayoutContainer, ivi_LayoutContainer_sequence);
+
+ return offset;
+}
+
+
+static const value_string ivi_IviContainer_vals[] = {
+ { 0, "glc" },
+ { 1, "giv" },
+ { 2, "rcc" },
+ { 3, "tc" },
+ { 4, "lac" },
+ { 0, NULL }
+};
+
+static const per_choice_t ivi_IviContainer_choice[] = {
+ { 0, &hf_ivi_glc , ASN1_EXTENSION_ROOT , dissect_ivi_GeographicLocationContainer },
+ { 1, &hf_ivi_giv , ASN1_EXTENSION_ROOT , dissect_ivi_GeneralIviContainer },
+ { 2, &hf_ivi_rcc , ASN1_EXTENSION_ROOT , dissect_ivi_RoadConfigurationContainer },
+ { 3, &hf_ivi_tc , ASN1_EXTENSION_ROOT , dissect_ivi_TextContainer },
+ { 4, &hf_ivi_lac , ASN1_EXTENSION_ROOT , dissect_ivi_LayoutContainer },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_ivi_IviContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_ivi_IviContainer, ivi_IviContainer_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_SEQUENCE_SIZE_1_8__OF_IviContainer_sequence_of[1] = {
+ { &hf_ivi_optional_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_IviContainer },
+};
+
+static int
+dissect_ivi_SEQUENCE_SIZE_1_8__OF_IviContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_ivi_SEQUENCE_SIZE_1_8__OF_IviContainer, ivi_SEQUENCE_SIZE_1_8__OF_IviContainer_sequence_of,
+ 1, 8, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t ivi_IviStructure_sequence[] = {
+ { &hf_ivi_mandatory , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ivi_IVIManagementContainer },
+ { &hf_ivi_optional , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ivi_SEQUENCE_SIZE_1_8__OF_IviContainer },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_ivi_IviStructure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 302 "./asn1/its/its.cnf"
+ actx->private_data = (void*)wmem_new0(wmem_packet_scope(), its_private_data_t);
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "IVIM");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "IVIM");
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_ivi_IviStructure, ivi_IviStructure_sequence);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_ivi_IviStructure_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ offset = dissect_ivi_IviStructure(tvb, offset, &asn1_ctx, tree, hf_ivi_ivi_IviStructure_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
+
+/* --- Module DSRC --- --- --- */
+
+
+static const value_string dsrc_RegionId_vals[] = {
+ { noRegion, "noRegion" },
+ { addGrpA, "addGrpA" },
+ { addGrpB, "addGrpB" },
+ { addGrpC, "addGrpC" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_dsrc_RegionId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, &((its_private_data_t*)actx->private_data)->region_id, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_T_regExtValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_open_type_pdu_new(tvb, offset, actx, tree, hf_index, dissect_regextval_pdu);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_RegionalExtension_sequence[] = {
+ { &hf_dsrc_regionId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionId },
+ { &hf_dsrc_regExtValue , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_T_regExtValue },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_RegionalExtension(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_RegionalExtension, dsrc_RegionalExtension_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_MinuteOfTheYear(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 527040U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_DescriptiveName(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_IA5String(tvb, offset, actx, tree, hf_index,
+ 1, 63, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_RoadRegulatorID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 65535U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_IntersectionID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 65535U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_IntersectionReferenceID_sequence[] = {
+ { &hf_dsrc_region , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_dsrc_RoadRegulatorID },
+ { &hf_dsrc_irId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_IntersectionID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_IntersectionReferenceID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_IntersectionReferenceID, dsrc_IntersectionReferenceID_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_MsgCount(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 127U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_IntersectionStatusObject(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 837 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 16, 16, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields0[] = { // CHECKED
+ &hf_dsrc_IntersectionStatusObject_manualControlIsEnabled,
+ &hf_dsrc_IntersectionStatusObject_stopTimeIsActivated,
+ &hf_dsrc_IntersectionStatusObject_failureFlash,
+ &hf_dsrc_IntersectionStatusObject_preemptIsActive,
+ &hf_dsrc_IntersectionStatusObject_signalPriorityIsActive,
+ &hf_dsrc_IntersectionStatusObject_fixedTimeOperation,
+ &hf_dsrc_IntersectionStatusObject_trafficDependentOperation,
+ &hf_dsrc_IntersectionStatusObject_standbyOperation,
+ NULL
+ };
+ const gint *fields1[] = { // CHECKED
+ &hf_dsrc_IntersectionStatusObject_failureMode,
+ &hf_dsrc_IntersectionStatusObject_off,
+ &hf_dsrc_IntersectionStatusObject_recentMAPmessageUpdate,
+ &hf_dsrc_IntersectionStatusObject_recentChangeInMAPassignedLanesIDsUsed,
+ &hf_dsrc_IntersectionStatusObject_noValidMAPisAvailableAtThisTime,
+ &hf_dsrc_IntersectionStatusObject_noValidSPATisAvailableAtThisTime,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_IntersectionStatusObject);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields0, ENC_BIG_ENDIAN);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 1, 1, fields1, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_DSecond(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 65535U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_LaneID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_EnabledLaneList_sequence_of[1] = {
+ { &hf_dsrc_EnabledLaneList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_LaneID },
+};
+
+static int
+dissect_dsrc_EnabledLaneList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_EnabledLaneList, dsrc_EnabledLaneList_sequence_of,
+ 1, 16, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_SignalGroupID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string dsrc_MovementPhaseState_vals[] = {
+ { 0, "unavailable" },
+ { 1, "dark" },
+ { 2, "stop-Then-Proceed" },
+ { 3, "stop-And-Remain" },
+ { 4, "pre-Movement" },
+ { 5, "permissive-Movement-Allowed" },
+ { 6, "protected-Movement-Allowed" },
+ { 7, "permissive-clearance" },
+ { 8, "protected-clearance" },
+ { 9, "caution-Conflicting-Traffic" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_dsrc_MovementPhaseState(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 10, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_TimeMark(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 36001U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_TimeIntervalConfidence(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 15U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_TimeChangeDetails_sequence[] = {
+ { &hf_dsrc_startTime , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_dsrc_TimeMark },
+ { &hf_dsrc_minEndTime , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_TimeMark },
+ { &hf_dsrc_maxEndTime , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_dsrc_TimeMark },
+ { &hf_dsrc_likelyTime , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_dsrc_TimeMark },
+ { &hf_dsrc_tcdConfidence , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_dsrc_TimeIntervalConfidence },
+ { &hf_dsrc_nextTime , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_dsrc_TimeMark },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_TimeChangeDetails(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_TimeChangeDetails, dsrc_TimeChangeDetails_sequence);
+
+ return offset;
+}
+
+
+static const value_string dsrc_AdvisorySpeedType_vals[] = {
+ { 0, "none" },
+ { 1, "greenwave" },
+ { 2, "ecoDrive" },
+ { 3, "transit" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_dsrc_AdvisorySpeedType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 4, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_SpeedAdvice(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 500U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_ZoneLength(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 10000U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_RestrictionClassID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_AdvisorySpeedRegional_sequence_of[1] = {
+ { &hf_dsrc_asRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_AdvisorySpeedRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_AdvisorySpeedRegional, dsrc_T_AdvisorySpeedRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_AdvisorySpeed_sequence[] = {
+ { &hf_dsrc_asType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_AdvisorySpeedType },
+ { &hf_dsrc_asSpeed , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_SpeedAdvice },
+ { &hf_dsrc_asConfidence , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_SpeedConfidence },
+ { &hf_dsrc_distance , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_ZoneLength },
+ { &hf_dsrc_class , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_RestrictionClassID },
+ { &hf_dsrc_asRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_T_AdvisorySpeedRegional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_AdvisorySpeed(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 381 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_AdvisorySpeed;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_AdvisorySpeed, dsrc_AdvisorySpeed_sequence);
+
+#line 385 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_AdvisorySpeedList_sequence_of[1] = {
+ { &hf_dsrc_AdvisorySpeedList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_AdvisorySpeed },
+};
+
+static int
+dissect_dsrc_AdvisorySpeedList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_AdvisorySpeedList, dsrc_AdvisorySpeedList_sequence_of,
+ 1, 16, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_MovementEventRegional_sequence_of[1] = {
+ { &hf_dsrc_meRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_MovementEventRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_MovementEventRegional, dsrc_T_MovementEventRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_MovementEvent_sequence[] = {
+ { &hf_dsrc_eventState , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_MovementPhaseState },
+ { &hf_dsrc_timing , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_TimeChangeDetails },
+ { &hf_dsrc_speeds , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_AdvisorySpeedList },
+ { &hf_dsrc_meRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_T_MovementEventRegional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_MovementEvent(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 453 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_MovementEvent;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_MovementEvent, dsrc_MovementEvent_sequence);
+
+#line 457 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_MovementEventList_sequence_of[1] = {
+ { &hf_dsrc_MovementEventList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_MovementEvent },
+};
+
+static int
+dissect_dsrc_MovementEventList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_MovementEventList, dsrc_MovementEventList_sequence_of,
+ 1, 16, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_LaneConnectionID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_WaitOnStopline(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_PedestrianBicycleDetect(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_ConnectionManeuverAssistRegional_sequence_of[1] = {
+ { &hf_dsrc_cmaRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_ConnectionManeuverAssistRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_ConnectionManeuverAssistRegional, dsrc_T_ConnectionManeuverAssistRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_ConnectionManeuverAssist_sequence[] = {
+ { &hf_dsrc_connectionID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_LaneConnectionID },
+ { &hf_dsrc_queueLength , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_ZoneLength },
+ { &hf_dsrc_availableStorageLength, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_ZoneLength },
+ { &hf_dsrc_waitOnStop , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_WaitOnStopline },
+ { &hf_dsrc_pedBicycleDetect, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_PedestrianBicycleDetect },
+ { &hf_dsrc_cmaRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_T_ConnectionManeuverAssistRegional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_ConnectionManeuverAssist(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 399 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_ConnectionManeuverAssist;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_ConnectionManeuverAssist, dsrc_ConnectionManeuverAssist_sequence);
+
+#line 403 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_ManeuverAssistList_sequence_of[1] = {
+ { &hf_dsrc_ManeuverAssistList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_ConnectionManeuverAssist },
+};
+
+static int
+dissect_dsrc_ManeuverAssistList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_ManeuverAssistList, dsrc_ManeuverAssistList_sequence_of,
+ 1, 16, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_MovementStateRegional_sequence_of[1] = {
+ { &hf_dsrc_msRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_MovementStateRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_MovementStateRegional, dsrc_T_MovementStateRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_MovementState_sequence[] = {
+ { &hf_dsrc_movementName , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_DescriptiveName },
+ { &hf_dsrc_signalGroup , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_SignalGroupID },
+ { &hf_dsrc_state_time_speed, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_MovementEventList },
+ { &hf_dsrc_maneuverAssistList, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_ManeuverAssistList },
+ { &hf_dsrc_msRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_T_MovementStateRegional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_MovementState(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 462 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_MovementState;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_MovementState, dsrc_MovementState_sequence);
+
+#line 466 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_MovementList_sequence_of[1] = {
+ { &hf_dsrc_MovementList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_MovementState },
+};
+
+static int
+dissect_dsrc_MovementList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_MovementList, dsrc_MovementList_sequence_of,
+ 1, 255, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_IntersectionStateRegional_sequence_of[1] = {
+ { &hf_dsrc_isRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_IntersectionStateRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_IntersectionStateRegional, dsrc_T_IntersectionStateRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_IntersectionState_sequence[] = {
+ { &hf_dsrc_name , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_DescriptiveName },
+ { &hf_dsrc_isId , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_IntersectionReferenceID },
+ { &hf_dsrc_revision , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_MsgCount },
+ { &hf_dsrc_isStatus , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_IntersectionStatusObject },
+ { &hf_dsrc_moy , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_MinuteOfTheYear },
+ { &hf_dsrc_isTimeStamp , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_DSecond },
+ { &hf_dsrc_enabledLanes , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_EnabledLaneList },
+ { &hf_dsrc_states , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_MovementList },
+ { &hf_dsrc_maneuverAssistList, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_ManeuverAssistList },
+ { &hf_dsrc_isRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_T_IntersectionStateRegional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_IntersectionState(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 426 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_IntersectionState;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_IntersectionState, dsrc_IntersectionState_sequence);
+
+#line 430 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_IntersectionStateList_sequence_of[1] = {
+ { &hf_dsrc_IntersectionStateList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_IntersectionState },
+};
+
+static int
+dissect_dsrc_IntersectionStateList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_IntersectionStateList, dsrc_IntersectionStateList_sequence_of,
+ 1, 32, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_SPATRegional_sequence_of[1] = {
+ { &hf_dsrc_spatRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_SPATRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_SPATRegional, dsrc_T_SPATRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_SPAT_sequence[] = {
+ { &hf_dsrc_spatTimeStamp , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_MinuteOfTheYear },
+ { &hf_dsrc_name , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_DescriptiveName },
+ { &hf_dsrc_spatIntersections, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_IntersectionStateList },
+ { &hf_dsrc_spatRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_T_SPATRegional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_SPAT(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 332 "./asn1/its/its.cnf"
+ its_private_data_t *regext = wmem_new0(wmem_packet_scope(), its_private_data_t);
+ actx->private_data = (void*)regext;
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "SPATEM");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "SPATEM");
+ regext->type = Reg_SPAT;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_SPAT, dsrc_SPAT_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_RequestID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string dsrc_PriorityRequestType_vals[] = {
+ { 0, "priorityRequestTypeReserved" },
+ { 1, "priorityRequest" },
+ { 2, "priorityRequestUpdate" },
+ { 3, "priorityCancellation" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_dsrc_PriorityRequestType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 4, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_ApproachID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 15U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string dsrc_IntersectionAccessPoint_vals[] = {
+ { 0, "lane" },
+ { 1, "approach" },
+ { 2, "connection" },
+ { 0, NULL }
+};
+
+static const per_choice_t dsrc_IntersectionAccessPoint_choice[] = {
+ { 0, &hf_dsrc_lane , ASN1_EXTENSION_ROOT , dissect_dsrc_LaneID },
+ { 1, &hf_dsrc_approach , ASN1_EXTENSION_ROOT , dissect_dsrc_ApproachID },
+ { 2, &hf_dsrc_connection , ASN1_EXTENSION_ROOT , dissect_dsrc_LaneConnectionID },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_dsrc_IntersectionAccessPoint(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_IntersectionAccessPoint, dsrc_IntersectionAccessPoint_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_SignalRequestRegional_sequence_of[1] = {
+ { &hf_dsrc_srRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_SignalRequestRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_SignalRequestRegional, dsrc_T_SignalRequestRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_SignalRequest_sequence[] = {
+ { &hf_dsrc_srId , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_IntersectionReferenceID },
+ { &hf_dsrc_requestID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_RequestID },
+ { &hf_dsrc_requestType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_PriorityRequestType },
+ { &hf_dsrc_inBoundLane , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_IntersectionAccessPoint },
+ { &hf_dsrc_outBoundLane , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_IntersectionAccessPoint },
+ { &hf_dsrc_srRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_T_SignalRequestRegional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_SignalRequest(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 543 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_SignalRequest;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_SignalRequest, dsrc_SignalRequest_sequence);
+
+#line 547 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_SignalRequestPackageRegional_sequence_of[1] = {
+ { &hf_dsrc_srpRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_SignalRequestPackageRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_SignalRequestPackageRegional, dsrc_T_SignalRequestPackageRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_SignalRequestPackage_sequence[] = {
+ { &hf_dsrc_srpRequest , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_SignalRequest },
+ { &hf_dsrc_minute , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_MinuteOfTheYear },
+ { &hf_dsrc_second , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_DSecond },
+ { &hf_dsrc_duration , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_DSecond },
+ { &hf_dsrc_srpRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_T_SignalRequestPackageRegional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_SignalRequestPackage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 534 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_SignalRequestPackage;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_SignalRequestPackage, dsrc_SignalRequestPackage_sequence);
+
+#line 538 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_SignalRequestList_sequence_of[1] = {
+ { &hf_dsrc_SignalRequestList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_SignalRequestPackage },
+};
+
+static int
+dissect_dsrc_SignalRequestList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_SignalRequestList, dsrc_SignalRequestList_sequence_of,
+ 1, 32, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_TemporaryID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ 4, 4, FALSE, NULL);
+
+ return offset;
+}
+
+
+static const value_string dsrc_VehicleID_vals[] = {
+ { 0, "entityID" },
+ { 1, "stationID" },
+ { 0, NULL }
+};
+
+static const per_choice_t dsrc_VehicleID_choice[] = {
+ { 0, &hf_dsrc_entityID , ASN1_NO_EXTENSIONS , dissect_dsrc_TemporaryID },
+ { 1, &hf_dsrc_stationID , ASN1_NO_EXTENSIONS , dissect_its_StationID },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_dsrc_VehicleID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_VehicleID, dsrc_VehicleID_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string dsrc_BasicVehicleRole_vals[] = {
+ { 0, "basicVehicle" },
+ { 1, "publicTransport" },
+ { 2, "specialTransport" },
+ { 3, "dangerousGoods" },
+ { 4, "roadWork" },
+ { 5, "roadRescue" },
+ { 6, "emergency" },
+ { 7, "safetyCar" },
+ { 8, "none-unknown" },
+ { 9, "truck" },
+ { 10, "motorcycle" },
+ { 11, "roadSideSource" },
+ { 12, "police" },
+ { 13, "fire" },
+ { 14, "ambulance" },
+ { 15, "dot" },
+ { 16, "transit" },
+ { 17, "slowMoving" },
+ { 18, "stopNgo" },
+ { 19, "cyclist" },
+ { 20, "pedestrian" },
+ { 21, "nonMotorized" },
+ { 22, "military" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_dsrc_BasicVehicleRole(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 23, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string dsrc_RequestSubRole_vals[] = {
+ { 0, "requestSubRoleUnKnown" },
+ { 1, "requestSubRole1" },
+ { 2, "requestSubRole2" },
+ { 3, "requestSubRole3" },
+ { 4, "requestSubRole4" },
+ { 5, "requestSubRole5" },
+ { 6, "requestSubRole6" },
+ { 7, "requestSubRole7" },
+ { 8, "requestSubRole8" },
+ { 9, "requestSubRole9" },
+ { 10, "requestSubRole10" },
+ { 11, "requestSubRole11" },
+ { 12, "requestSubRole12" },
+ { 13, "requestSubRole13" },
+ { 14, "requestSubRole14" },
+ { 15, "requestSubRoleReserved" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_dsrc_RequestSubRole(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 16, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string dsrc_RequestImportanceLevel_vals[] = {
+ { 0, "requestImportanceLevelUnKnown" },
+ { 1, "requestImportanceLevel1" },
+ { 2, "requestImportanceLevel2" },
+ { 3, "requestImportanceLevel3" },
+ { 4, "requestImportanceLevel4" },
+ { 5, "requestImportanceLevel5" },
+ { 6, "requestImportanceLevel6" },
+ { 7, "requestImportanceLevel7" },
+ { 8, "requestImportanceLevel8" },
+ { 9, "requestImportanceLevel9" },
+ { 10, "requestImportanceLevel10" },
+ { 11, "requestImportanceLevel11" },
+ { 12, "requestImportanceLevel12" },
+ { 13, "requestImportanceLevel13" },
+ { 14, "requestImportanceLevel14" },
+ { 15, "requestImportanceReserved" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_dsrc_RequestImportanceLevel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 16, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const value_string dsrc_VehicleType_vals[] = {
+ { 0, "none" },
+ { 1, "unknown" },
+ { 2, "special" },
+ { 3, "moto" },
+ { 4, "car" },
+ { 5, "carOther" },
+ { 6, "bus" },
+ { 7, "axleCnt2" },
+ { 8, "axleCnt3" },
+ { 9, "axleCnt4" },
+ { 10, "axleCnt4Trailer" },
+ { 11, "axleCnt5Trailer" },
+ { 12, "axleCnt6Trailer" },
+ { 13, "axleCnt5MultiTrailer" },
+ { 14, "axleCnt6MultiTrailer" },
+ { 15, "axleCnt7MultiTrailer" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_dsrc_VehicleType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 16, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_RequestorType_sequence[] = {
+ { &hf_dsrc_role , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_BasicVehicleRole },
+ { &hf_dsrc_subrole , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_RequestSubRole },
+ { &hf_dsrc_rtRequest , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_RequestImportanceLevel },
+ { &hf_dsrc_iso3883 , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_erivdm_Iso3833VehicleType },
+ { &hf_dsrc_hpmsType , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_VehicleType },
+ { &hf_dsrc_rtRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_RegionalExtension },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_RequestorType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 507 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_RequestorType;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_RequestorType, dsrc_RequestorType_sequence);
+
+#line 511 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_Elevation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -4096, 61439U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_Position3DRegional_sequence_of[1] = {
+ { &hf_dsrc_p3dRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_Position3DRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_Position3DRegional, dsrc_T_Position3DRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_Position3D_sequence[] = {
+ { &hf_dsrc_lat , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_Latitude },
+ { &hf_dsrc_long , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_Longitude },
+ { &hf_dsrc_elevation , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_Elevation },
+ { &hf_dsrc_p3dRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_T_Position3DRegional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_Position3D(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 489 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_Position3D;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_Position3D, dsrc_Position3D_sequence);
+
+#line 493 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_Angle(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 28800U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string dsrc_TransmissionState_vals[] = {
+ { 0, "neutral" },
+ { 1, "park" },
+ { 2, "forwardGears" },
+ { 3, "reverseGears" },
+ { 4, "reserved1" },
+ { 5, "reserved2" },
+ { 6, "reserved3" },
+ { 7, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_dsrc_TransmissionState(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 8, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_Velocity(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 8191U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_TransmissionAndSpeed_sequence[] = {
+ { &hf_dsrc_transmisson , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_TransmissionState },
+ { &hf_dsrc_tasSpeed , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_Velocity },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_TransmissionAndSpeed(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_TransmissionAndSpeed, dsrc_TransmissionAndSpeed_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_RequestorPositionVector_sequence[] = {
+ { &hf_dsrc_rpvPosition , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_Position3D },
+ { &hf_dsrc_heading , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_Angle },
+ { &hf_dsrc_rpvSpeed , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_TransmissionAndSpeed },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_RequestorPositionVector(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_RequestorPositionVector, dsrc_RequestorPositionVector_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_TransitVehicleStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 1027 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 8, 8, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_dsrc_TransitVehicleStatus_loading,
+ &hf_dsrc_TransitVehicleStatus_anADAuse,
+ &hf_dsrc_TransitVehicleStatus_aBikeLoad,
+ &hf_dsrc_TransitVehicleStatus_doorOpen,
+ &hf_dsrc_TransitVehicleStatus_charging,
+ &hf_dsrc_TransitVehicleStatus_atStopLine,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_TransitVehicleStatus);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+static const value_string dsrc_TransitVehicleOccupancy_vals[] = {
+ { 0, "occupancyUnknown" },
+ { 1, "occupancyEmpty" },
+ { 2, "occupancyVeryLow" },
+ { 3, "occupancyLow" },
+ { 4, "occupancyMed" },
+ { 5, "occupancyHigh" },
+ { 6, "occupancyNearlyFull" },
+ { 7, "occupancyFull" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_dsrc_TransitVehicleOccupancy(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 8, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_DeltaTime(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -122, 121U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_RequestorDescriptionRegional_sequence_of[1] = {
+ { &hf_dsrc_rdRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_RequestorDescriptionRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_RequestorDescriptionRegional, dsrc_T_RequestorDescriptionRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_RequestorDescription_sequence[] = {
+ { &hf_dsrc_rdId , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_VehicleID },
+ { &hf_dsrc_rdType , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_RequestorType },
+ { &hf_dsrc_rdPosition , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_RequestorPositionVector },
+ { &hf_dsrc_name , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_DescriptiveName },
+ { &hf_dsrc_routeName , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_DescriptiveName },
+ { &hf_dsrc_transitStatus , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_TransitVehicleStatus },
+ { &hf_dsrc_transitOccupancy, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_TransitVehicleOccupancy },
+ { &hf_dsrc_transitSchedule, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_DeltaTime },
+ { &hf_dsrc_rdRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_T_RequestorDescriptionRegional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_RequestorDescription(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 498 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_RequestorDescription;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_RequestorDescription, dsrc_RequestorDescription_sequence);
+
+#line 502 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_SRMRegional_sequence_of[1] = {
+ { &hf_dsrc_srmRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_SRMRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_SRMRegional, dsrc_T_SRMRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_SignalRequestMessage_sequence[] = {
+ { &hf_dsrc_srmTimeStamp , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_MinuteOfTheYear },
+ { &hf_dsrc_second , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_DSecond },
+ { &hf_dsrc_sequenceNumber , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_MsgCount },
+ { &hf_dsrc_requests , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_SignalRequestList },
+ { &hf_dsrc_requestor , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_RequestorDescription },
+ { &hf_dsrc_srmRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_T_SRMRegional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_SignalRequestMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 316 "./asn1/its/its.cnf"
+ its_private_data_t *regext = wmem_new0(wmem_packet_scope(), its_private_data_t);
+ actx->private_data = (void*)regext;
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "SREM");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "SREM");
+ regext->type = Reg_SignalRequestMessage;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_SignalRequestMessage, dsrc_SignalRequestMessage_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_SignalRequesterInfo_sequence[] = {
+ { &hf_dsrc_sriId , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_VehicleID },
+ { &hf_dsrc_sriRequest , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_RequestID },
+ { &hf_dsrc_sequenceNumber , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_MsgCount },
+ { &hf_dsrc_role , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_BasicVehicleRole },
+ { &hf_dsrc_typeData , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_RequestorType },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_SignalRequesterInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_SignalRequesterInfo, dsrc_SignalRequesterInfo_sequence);
+
+ return offset;
+}
+
+
+static const value_string dsrc_PrioritizationResponseStatus_vals[] = {
+ { 0, "unknown" },
+ { 1, "requested" },
+ { 2, "processing" },
+ { 3, "watchOtherTraffic" },
+ { 4, "granted" },
+ { 5, "rejected" },
+ { 6, "maxPresence" },
+ { 7, "reserviceLocked" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_dsrc_PrioritizationResponseStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 8, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_SignalStatusPackageRegional_sequence_of[1] = {
+ { &hf_dsrc_sspRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_SignalStatusPackageRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_SignalStatusPackageRegional, dsrc_T_SignalStatusPackageRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_SignalStatusPackage_sequence[] = {
+ { &hf_dsrc_requester , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_SignalRequesterInfo },
+ { &hf_dsrc_inboundOn , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_IntersectionAccessPoint },
+ { &hf_dsrc_outboundOn , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_IntersectionAccessPoint },
+ { &hf_dsrc_minute , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_MinuteOfTheYear },
+ { &hf_dsrc_second , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_DSecond },
+ { &hf_dsrc_duration , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_DSecond },
+ { &hf_dsrc_sspStatus , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_PrioritizationResponseStatus },
+ { &hf_dsrc_sspRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_T_SignalStatusPackageRegional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_SignalStatusPackage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 552 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_SignalStatusPackage;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_SignalStatusPackage, dsrc_SignalStatusPackage_sequence);
+
+#line 556 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_SignalStatusPackageList_sequence_of[1] = {
+ { &hf_dsrc_SignalStatusPackageList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_SignalStatusPackage },
+};
+
+static int
+dissect_dsrc_SignalStatusPackageList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_SignalStatusPackageList, dsrc_SignalStatusPackageList_sequence_of,
+ 1, 32, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_SignalStatusRegional_sequence_of[1] = {
+ { &hf_dsrc_ssRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_SignalStatusRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_SignalStatusRegional, dsrc_T_SignalStatusRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_SignalStatus_sequence[] = {
+ { &hf_dsrc_sequenceNumber , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_MsgCount },
+ { &hf_dsrc_ssId , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_IntersectionReferenceID },
+ { &hf_dsrc_sigStatus , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_SignalStatusPackageList },
+ { &hf_dsrc_ssRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_T_SignalStatusRegional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_SignalStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 561 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_SignalStatus;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_SignalStatus, dsrc_SignalStatus_sequence);
+
+#line 565 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_SignalStatusList_sequence_of[1] = {
+ { &hf_dsrc_SignalStatusList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_SignalStatus },
+};
+
+static int
+dissect_dsrc_SignalStatusList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_SignalStatusList, dsrc_SignalStatusList_sequence_of,
+ 1, 32, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_SSMRegional_sequence_of[1] = {
+ { &hf_dsrc_ssmRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_SSMRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_SSMRegional, dsrc_T_SSMRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_SignalStatusMessage_sequence[] = {
+ { &hf_dsrc_ssmTimeStamp , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_MinuteOfTheYear },
+ { &hf_dsrc_second , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_DSecond },
+ { &hf_dsrc_sequenceNumber , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_MsgCount },
+ { &hf_dsrc_ssmStatus , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_SignalStatusList },
+ { &hf_dsrc_ssmRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_T_SSMRegional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_SignalStatusMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 308 "./asn1/its/its.cnf"
+ its_private_data_t *regext = wmem_new0(wmem_packet_scope(), its_private_data_t);
+ actx->private_data = (void*)regext;
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "SSEM");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "SSEM");
+ regext->type = Reg_SignalStatusMessage;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_SignalStatusMessage, dsrc_SignalStatusMessage_sequence);
+
+ return offset;
+}
+
+
+static const value_string dsrc_LayerType_vals[] = {
+ { 0, "none" },
+ { 1, "mixedContent" },
+ { 2, "generalMapData" },
+ { 3, "intersectionData" },
+ { 4, "curveData" },
+ { 5, "roadwaySectionData" },
+ { 6, "parkingAreaData" },
+ { 7, "sharedLaneData" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_dsrc_LayerType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 8, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_LayerID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 100U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_LaneWidth(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 32767U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string dsrc_SpeedLimitType_vals[] = {
+ { 0, "unknown" },
+ { 1, "maxSpeedInSchoolZone" },
+ { 2, "maxSpeedInSchoolZoneWhenChildrenArePresent" },
+ { 3, "maxSpeedInConstructionZone" },
+ { 4, "vehicleMinSpeed" },
+ { 5, "vehicleMaxSpeed" },
+ { 6, "vehicleNightMaxSpeed" },
+ { 7, "truckMinSpeed" },
+ { 8, "truckMaxSpeed" },
+ { 9, "truckNightMaxSpeed" },
+ { 10, "vehiclesWithTrailersMinSpeed" },
+ { 11, "vehiclesWithTrailersMaxSpeed" },
+ { 12, "vehiclesWithTrailersNightMaxSpeed" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_dsrc_SpeedLimitType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 13, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_RegulatorySpeedLimit_sequence[] = {
+ { &hf_dsrc_rslType , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_SpeedLimitType },
+ { &hf_dsrc_rslSpeed , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_Velocity },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_RegulatorySpeedLimit(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_RegulatorySpeedLimit, dsrc_RegulatorySpeedLimit_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_SpeedLimitList_sequence_of[1] = {
+ { &hf_dsrc_SpeedLimitList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegulatorySpeedLimit },
+};
+
+static int
+dissect_dsrc_SpeedLimitList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_SpeedLimitList, dsrc_SpeedLimitList_sequence_of,
+ 1, 9, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_LaneDirection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 917 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 2, 2, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_dsrc_LaneDirection_ingressPath,
+ &hf_dsrc_LaneDirection_egressPath,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_LaneDirection);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_LaneSharing(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 1002 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 10, 10, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields0[] = { // CHECKED
+ &hf_dsrc_LaneSharing_overlappingLaneDescriptionProvided,
+ &hf_dsrc_LaneSharing_multipleLanesTreatedAsOneLane,
+ &hf_dsrc_LaneSharing_otherNonMotorizedTrafficTypes,
+ &hf_dsrc_LaneSharing_individualMotorizedVehicleTraffic,
+ &hf_dsrc_LaneSharing_busVehicleTraffic,
+ &hf_dsrc_LaneSharing_taxiVehicleTraffic,
+ &hf_dsrc_LaneSharing_pedestriansTraffic,
+ &hf_dsrc_LaneSharing_cyclistVehicleTraffic,
+ NULL
+ };
+ const gint *fields1[] = { // CHECKED
+ &hf_dsrc_LaneSharing_trackedVehicleTraffic,
+ &hf_dsrc_LaneSharing_pedestrianTraffic,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_LaneSharing);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields0, ENC_BIG_ENDIAN);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 1, 1, fields1, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_LaneAttributes_Vehicle(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 739 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 8, 8, TRUE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_dsrc_LaneAttributes_Vehicle_isVehicleRevocableLane,
+ &hf_dsrc_LaneAttributes_Vehicle_isVehicleFlyOverLane,
+ &hf_dsrc_LaneAttributes_Vehicle_hovLaneUseOnly,
+ &hf_dsrc_LaneAttributes_Vehicle_restrictedToBusUse,
+ &hf_dsrc_LaneAttributes_Vehicle_restrictedToTaxiUse,
+ &hf_dsrc_LaneAttributes_Vehicle_restrictedFromPublicUse,
+ &hf_dsrc_LaneAttributes_Vehicle_hasIRbeaconCoverage,
+ &hf_dsrc_LaneAttributes_Vehicle_permissionOnRequest,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_LaneAttributes_Vehicle);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_LaneAttributes_Crosswalk(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 893 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 16, 16, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields0[] = { // CHECKED
+ &hf_dsrc_LaneAttributes_Crosswalk_crosswalkRevocableLane,
+ &hf_dsrc_LaneAttributes_Crosswalk_bicyleUseAllowed,
+ &hf_dsrc_LaneAttributes_Crosswalk_isXwalkFlyOverLane,
+ &hf_dsrc_LaneAttributes_Crosswalk_fixedCycleTime,
+ &hf_dsrc_LaneAttributes_Crosswalk_biDirectionalCycleTimes,
+ &hf_dsrc_LaneAttributes_Crosswalk_hasPushToWalkButton,
+ &hf_dsrc_LaneAttributes_Crosswalk_audioSupport,
+ &hf_dsrc_LaneAttributes_Crosswalk_rfSignalRequestPresent,
+ NULL
+ };
+ const gint *fields1[] = { // CHECKED
+ &hf_dsrc_LaneAttributes_Crosswalk_unsignalizedSegmentsPresent,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_LaneAttributes_Crosswalk);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields0, ENC_BIG_ENDIAN);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 1, 1, fields1, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_LaneAttributes_Bike(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 930 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 16, 16, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_dsrc_LaneAttributes_Bike_bikeRevocableLane,
+ &hf_dsrc_LaneAttributes_Bike_pedestrianUseAllowed,
+ &hf_dsrc_LaneAttributes_Bike_isBikeFlyOverLane,
+ &hf_dsrc_LaneAttributes_Bike_fixedCycleTime,
+ &hf_dsrc_LaneAttributes_Bike_biDirectionalCycleTimes,
+ &hf_dsrc_LaneAttributes_Bike_isolatedByBarrier,
+ &hf_dsrc_LaneAttributes_Bike_unsignalizedSegmentsPresent,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_LaneAttributes_Bike);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_LaneAttributes_Sidewalk(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 1044 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 16, 16, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_dsrc_LaneAttributes_Sidewalk_sidewalk_RevocableLane,
+ &hf_dsrc_LaneAttributes_Sidewalk_bicyleUseAllowed,
+ &hf_dsrc_LaneAttributes_Sidewalk_isSidewalkFlyOverLane,
+ &hf_dsrc_LaneAttributes_Sidewalk_walkBikes,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_LaneAttributes_Sidewalk);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_LaneAttributes_Barrier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 699 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 16, 16, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields0[] = { // CHECKED
+ &hf_dsrc_LaneAttributes_Barrier_median_RevocableLane,
+ &hf_dsrc_LaneAttributes_Barrier_median,
+ &hf_dsrc_LaneAttributes_Barrier_whiteLineHashing,
+ &hf_dsrc_LaneAttributes_Barrier_stripedLines,
+ &hf_dsrc_LaneAttributes_Barrier_doubleStripedLines,
+ &hf_dsrc_LaneAttributes_Barrier_trafficCones,
+ &hf_dsrc_LaneAttributes_Barrier_constructionBarrier,
+ &hf_dsrc_LaneAttributes_Barrier_trafficChannels,
+ NULL
+ };
+ const gint *fields1[] = { // CHECKED
+ &hf_dsrc_LaneAttributes_Barrier_lowCurbs,
+ &hf_dsrc_LaneAttributes_Barrier_highCurbs,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_LaneAttributes_Barrier);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields0, ENC_BIG_ENDIAN);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 1, 1, fields1, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_LaneAttributes_Striping(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 985 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 16, 16, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_dsrc_LaneAttributes_Striping_stripeToConnectingLanesRevocableLane,
+ &hf_dsrc_LaneAttributes_Striping_stripeDrawOnLeft,
+ &hf_dsrc_LaneAttributes_Striping_stripeDrawOnRight,
+ &hf_dsrc_LaneAttributes_Striping_stripeToConnectingLanesLeft,
+ &hf_dsrc_LaneAttributes_Striping_stripeToConnectingLanesRight,
+ &hf_dsrc_LaneAttributes_Striping_stripeToConnectingLanesAhead,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_LaneAttributes_Striping);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_LaneAttributes_TrackedVehicle(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 771 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 16, 16, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_dsrc_LaneAttributes_TrackedVehicle_spec_RevocableLane,
+ &hf_dsrc_LaneAttributes_TrackedVehicle_spec_commuterRailRoadTrack,
+ &hf_dsrc_LaneAttributes_TrackedVehicle_spec_lightRailRoadTrack,
+ &hf_dsrc_LaneAttributes_TrackedVehicle_spec_heavyRailRoadTrack,
+ &hf_dsrc_LaneAttributes_TrackedVehicle_spec_otherRailType,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_LaneAttributes_TrackedVehicle);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_LaneAttributes_Parking(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 948 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 16, 16, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_dsrc_LaneAttributes_Parking_parkingRevocableLane,
+ &hf_dsrc_LaneAttributes_Parking_parallelParkingInUse,
+ &hf_dsrc_LaneAttributes_Parking_headInParkingInUse,
+ &hf_dsrc_LaneAttributes_Parking_doNotParkZone,
+ &hf_dsrc_LaneAttributes_Parking_parkingForBusUse,
+ &hf_dsrc_LaneAttributes_Parking_parkingForTaxiUse,
+ &hf_dsrc_LaneAttributes_Parking_noPublicParkingUse,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_LaneAttributes_Parking);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+static const value_string dsrc_LaneTypeAttributes_vals[] = {
+ { 0, "vehicle" },
+ { 1, "crosswalk" },
+ { 2, "bikeLane" },
+ { 3, "sidewalk" },
+ { 4, "median" },
+ { 5, "striping" },
+ { 6, "trackedVehicle" },
+ { 7, "parking" },
+ { 0, NULL }
+};
+
+static const per_choice_t dsrc_LaneTypeAttributes_choice[] = {
+ { 0, &hf_dsrc_vehicle , ASN1_EXTENSION_ROOT , dissect_dsrc_LaneAttributes_Vehicle },
+ { 1, &hf_dsrc_crosswalk , ASN1_EXTENSION_ROOT , dissect_dsrc_LaneAttributes_Crosswalk },
+ { 2, &hf_dsrc_bikeLane , ASN1_EXTENSION_ROOT , dissect_dsrc_LaneAttributes_Bike },
+ { 3, &hf_dsrc_sidewalk , ASN1_EXTENSION_ROOT , dissect_dsrc_LaneAttributes_Sidewalk },
+ { 4, &hf_dsrc_median , ASN1_EXTENSION_ROOT , dissect_dsrc_LaneAttributes_Barrier },
+ { 5, &hf_dsrc_striping , ASN1_EXTENSION_ROOT , dissect_dsrc_LaneAttributes_Striping },
+ { 6, &hf_dsrc_trackedVehicle , ASN1_EXTENSION_ROOT , dissect_dsrc_LaneAttributes_TrackedVehicle },
+ { 7, &hf_dsrc_parking , ASN1_EXTENSION_ROOT , dissect_dsrc_LaneAttributes_Parking },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_dsrc_LaneTypeAttributes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_LaneTypeAttributes, dsrc_LaneTypeAttributes_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_LaneAttributes_sequence[] = {
+ { &hf_dsrc_directionalUse , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_LaneDirection },
+ { &hf_dsrc_sharedWith , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_LaneSharing },
+ { &hf_dsrc_laneType , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_LaneTypeAttributes },
+ { &hf_dsrc_laRegional , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_dsrc_RegionalExtension },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_LaneAttributes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 435 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_LaneAttributes;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_LaneAttributes, dsrc_LaneAttributes_sequence);
+
+#line 439 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_AllowedManeuvers(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 866 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 12, 12, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields0[] = { // CHECKED
+ &hf_dsrc_AllowedManeuvers_maneuverStraightAllowed,
+ &hf_dsrc_AllowedManeuvers_maneuverLeftAllowed,
+ &hf_dsrc_AllowedManeuvers_maneuverRightAllowed,
+ &hf_dsrc_AllowedManeuvers_maneuverUTurnAllowed,
+ &hf_dsrc_AllowedManeuvers_maneuverLeftTurnOnRedAllowed,
+ &hf_dsrc_AllowedManeuvers_maneuverRightTurnOnRedAllowed,
+ &hf_dsrc_AllowedManeuvers_maneuverLaneChangeAllowed,
+ &hf_dsrc_AllowedManeuvers_maneuverNoStoppingAllowed,
+ NULL
+ };
+ const gint *fields1[] = { // CHECKED
+ &hf_dsrc_AllowedManeuvers_yieldAllwaysRequired,
+ &hf_dsrc_AllowedManeuvers_goWithHalt,
+ &hf_dsrc_AllowedManeuvers_caution,
+ &hf_dsrc_AllowedManeuvers_reserved1,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_dsrc_AllowedManeuvers);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields0, ENC_BIG_ENDIAN);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 1, 1, fields1, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_Offset_B10(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -512, 511U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_Node_XY_20b_sequence[] = {
+ { &hf_dsrc_n20bX , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_Offset_B10 },
+ { &hf_dsrc_n20bY , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_Offset_B10 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_Node_XY_20b(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_Node_XY_20b, dsrc_Node_XY_20b_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_Offset_B11(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -1024, 1023U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_Node_XY_22b_sequence[] = {
+ { &hf_dsrc_n22bX , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_Offset_B11 },
+ { &hf_dsrc_n22bY , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_Offset_B11 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_Node_XY_22b(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_Node_XY_22b, dsrc_Node_XY_22b_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_Offset_B12(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -2048, 2047U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_Node_XY_24b_sequence[] = {
+ { &hf_dsrc_n24bX , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_Offset_B12 },
+ { &hf_dsrc_n24bY , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_Offset_B12 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_Node_XY_24b(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_Node_XY_24b, dsrc_Node_XY_24b_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_Offset_B13(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -4096, 4095U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_Node_XY_26b_sequence[] = {
+ { &hf_dsrc_n26bX , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_Offset_B13 },
+ { &hf_dsrc_n26bY , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_Offset_B13 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_Node_XY_26b(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_Node_XY_26b, dsrc_Node_XY_26b_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_Offset_B14(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -8192, 8191U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_Node_XY_28b_sequence[] = {
+ { &hf_dsrc_n28bX , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_Offset_B14 },
+ { &hf_dsrc_n28bY , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_Offset_B14 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_Node_XY_28b(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_Node_XY_28b, dsrc_Node_XY_28b_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_Offset_B16(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -32768, 32767U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_Node_XY_32b_sequence[] = {
+ { &hf_dsrc_n32bX , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_Offset_B16 },
+ { &hf_dsrc_n32bY , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_Offset_B16 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_Node_XY_32b(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_Node_XY_32b, dsrc_Node_XY_32b_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_Node_LLmD_64b_sequence[] = {
+ { &hf_dsrc_lon , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_Longitude },
+ { &hf_dsrc_lat , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_Latitude },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_Node_LLmD_64b(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_Node_LLmD_64b, dsrc_Node_LLmD_64b_sequence);
+
+ return offset;
+}
+
+
+static const value_string dsrc_NodeOffsetPointXY_vals[] = {
+ { 0, "node-XY1" },
+ { 1, "node-XY2" },
+ { 2, "node-XY3" },
+ { 3, "node-XY4" },
+ { 4, "node-XY5" },
+ { 5, "node-XY6" },
+ { 6, "node-LatLon" },
+ { 7, "regional" },
+ { 0, NULL }
+};
+
+static const per_choice_t dsrc_NodeOffsetPointXY_choice[] = {
+ { 0, &hf_dsrc_node_XY1 , ASN1_NO_EXTENSIONS , dissect_dsrc_Node_XY_20b },
+ { 1, &hf_dsrc_node_XY2 , ASN1_NO_EXTENSIONS , dissect_dsrc_Node_XY_22b },
+ { 2, &hf_dsrc_node_XY3 , ASN1_NO_EXTENSIONS , dissect_dsrc_Node_XY_24b },
+ { 3, &hf_dsrc_node_XY4 , ASN1_NO_EXTENSIONS , dissect_dsrc_Node_XY_26b },
+ { 4, &hf_dsrc_node_XY5 , ASN1_NO_EXTENSIONS , dissect_dsrc_Node_XY_28b },
+ { 5, &hf_dsrc_node_XY6 , ASN1_NO_EXTENSIONS , dissect_dsrc_Node_XY_32b },
+ { 6, &hf_dsrc_node_LatLon , ASN1_NO_EXTENSIONS , dissect_dsrc_Node_LLmD_64b },
+ { 7, &hf_dsrc_nopxyRegional , ASN1_NO_EXTENSIONS , dissect_dsrc_RegionalExtension },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_dsrc_NodeOffsetPointXY(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 480 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_NodeOffsetPointXY;
+
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_NodeOffsetPointXY, dsrc_NodeOffsetPointXY_choice,
+ NULL);
+
+#line 484 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+static const value_string dsrc_NodeAttributeXY_vals[] = {
+ { 0, "reserved" },
+ { 1, "stopLine" },
+ { 2, "roundedCapStyleA" },
+ { 3, "roundedCapStyleB" },
+ { 4, "mergePoint" },
+ { 5, "divergePoint" },
+ { 6, "downstreamStopLine" },
+ { 7, "downstreamStartNode" },
+ { 8, "closedToTraffic" },
+ { 9, "safeIsland" },
+ { 10, "curbPresentAtStepOff" },
+ { 11, "hydrantPresent" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_dsrc_NodeAttributeXY(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 12, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_NodeAttributeXYList_sequence_of[1] = {
+ { &hf_dsrc_NodeAttributeXYList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_NodeAttributeXY },
+};
+
+static int
+dissect_dsrc_NodeAttributeXYList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_NodeAttributeXYList, dsrc_NodeAttributeXYList_sequence_of,
+ 1, 8, FALSE);
+
+ return offset;
+}
+
+
+static const value_string dsrc_SegmentAttributeXY_vals[] = {
+ { 0, "reserved" },
+ { 1, "doNotBlock" },
+ { 2, "whiteLine" },
+ { 3, "mergingLaneLeft" },
+ { 4, "mergingLaneRight" },
+ { 5, "curbOnLeft" },
+ { 6, "curbOnRight" },
+ { 7, "loadingzoneOnLeft" },
+ { 8, "loadingzoneOnRight" },
+ { 9, "turnOutPointOnLeft" },
+ { 10, "turnOutPointOnRight" },
+ { 11, "adjacentParkingOnLeft" },
+ { 12, "adjacentParkingOnRight" },
+ { 13, "adjacentBikeLaneOnLeft" },
+ { 14, "adjacentBikeLaneOnRight" },
+ { 15, "sharedBikeLane" },
+ { 16, "bikeBoxInFront" },
+ { 17, "transitStopOnLeft" },
+ { 18, "transitStopOnRight" },
+ { 19, "transitStopInLane" },
+ { 20, "sharedWithTrackedVehicle" },
+ { 21, "safeIsland" },
+ { 22, "lowCurbsPresent" },
+ { 23, "rumbleStripPresent" },
+ { 24, "audibleSignalingPresent" },
+ { 25, "adaptiveTimingPresent" },
+ { 26, "rfSignalRequestPresent" },
+ { 27, "partialCurbIntrusion" },
+ { 28, "taperToLeft" },
+ { 29, "taperToRight" },
+ { 30, "taperToCenterLine" },
+ { 31, "parallelParking" },
+ { 32, "headInParking" },
+ { 33, "freeParking" },
+ { 34, "timeRestrictionsOnParking" },
+ { 35, "costToPark" },
+ { 36, "midBlockCurbPresent" },
+ { 37, "unEvenPavementPresent" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_dsrc_SegmentAttributeXY(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 38, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_SegmentAttributeXYList_sequence_of[1] = {
+ { &hf_dsrc_SegmentAttributeXYList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_SegmentAttributeXY },
+};
+
+static int
+dissect_dsrc_SegmentAttributeXYList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_SegmentAttributeXYList, dsrc_SegmentAttributeXYList_sequence_of,
+ 1, 8, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_DeltaAngle(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -150, 150U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_RoadwayCrownAngle(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -128, 127U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_MergeDivergeNodeAngle(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -180, 180U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_LaneDataAttributeRegional_sequence_of[1] = {
+ { &hf_dsrc_ldaRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_LaneDataAttributeRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_LaneDataAttributeRegional, dsrc_T_LaneDataAttributeRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const value_string dsrc_LaneDataAttribute_vals[] = {
+ { 0, "pathEndPointAngle" },
+ { 1, "laneCrownPointCenter" },
+ { 2, "laneCrownPointLeft" },
+ { 3, "laneCrownPointRight" },
+ { 4, "laneAngle" },
+ { 5, "speedLimits" },
+ { 6, "regional" },
+ { 0, NULL }
+};
+
+static const per_choice_t dsrc_LaneDataAttribute_choice[] = {
+ { 0, &hf_dsrc_pathEndPointAngle, ASN1_EXTENSION_ROOT , dissect_dsrc_DeltaAngle },
+ { 1, &hf_dsrc_laneCrownPointCenter, ASN1_EXTENSION_ROOT , dissect_dsrc_RoadwayCrownAngle },
+ { 2, &hf_dsrc_laneCrownPointLeft, ASN1_EXTENSION_ROOT , dissect_dsrc_RoadwayCrownAngle },
+ { 3, &hf_dsrc_laneCrownPointRight, ASN1_EXTENSION_ROOT , dissect_dsrc_RoadwayCrownAngle },
+ { 4, &hf_dsrc_laneAngle , ASN1_EXTENSION_ROOT , dissect_dsrc_MergeDivergeNodeAngle },
+ { 5, &hf_dsrc_speedLimits , ASN1_EXTENSION_ROOT , dissect_dsrc_SpeedLimitList },
+ { 6, &hf_dsrc_ldaRegional , ASN1_EXTENSION_ROOT , dissect_dsrc_T_LaneDataAttributeRegional },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_dsrc_LaneDataAttribute(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 444 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_LaneDataAttribute;
+
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_LaneDataAttribute, dsrc_LaneDataAttribute_choice,
+ NULL);
+
+#line 448 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_LaneDataAttributeList_sequence_of[1] = {
+ { &hf_dsrc_LaneDataAttributeList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_LaneDataAttribute },
+};
+
+static int
+dissect_dsrc_LaneDataAttributeList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_LaneDataAttributeList, dsrc_LaneDataAttributeList_sequence_of,
+ 1, 8, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_NodeAttributeSetXYRegional_sequence_of[1] = {
+ { &hf_dsrc_nasxyRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_NodeAttributeSetXYRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_NodeAttributeSetXYRegional, dsrc_T_NodeAttributeSetXYRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_NodeAttributeSetXY_sequence[] = {
+ { &hf_dsrc_localNode , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_NodeAttributeXYList },
+ { &hf_dsrc_disabled , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_SegmentAttributeXYList },
+ { &hf_dsrc_enabled , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_SegmentAttributeXYList },
+ { &hf_dsrc_data , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_LaneDataAttributeList },
+ { &hf_dsrc_dWidth , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_Offset_B10 },
+ { &hf_dsrc_dElevation , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_Offset_B10 },
+ { &hf_dsrc_nasxyRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_T_NodeAttributeSetXYRegional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_NodeAttributeSetXY(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 471 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_NodeAttributeSetXY;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_NodeAttributeSetXY, dsrc_NodeAttributeSetXY_sequence);
+
+#line 475 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_NodeXY_sequence[] = {
+ { &hf_dsrc_delta , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_NodeOffsetPointXY },
+ { &hf_dsrc_attributes , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_NodeAttributeSetXY },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_NodeXY(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_NodeXY, dsrc_NodeXY_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_NodeSetXY_sequence_of[1] = {
+ { &hf_dsrc_NodeSetXY_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_NodeXY },
+};
+
+static int
+dissect_dsrc_NodeSetXY(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_NodeSetXY, dsrc_NodeSetXY_sequence_of,
+ 2, 63, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_DrivenLineOffsetSm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -2047, 2047U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_DrivenLineOffsetLg(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -32767, 32767U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string dsrc_T_offsetXaxis_vals[] = {
+ { 0, "small" },
+ { 1, "large" },
+ { 0, NULL }
+};
+
+static const per_choice_t dsrc_T_offsetXaxis_choice[] = {
+ { 0, &hf_dsrc_small , ASN1_NO_EXTENSIONS , dissect_dsrc_DrivenLineOffsetSm },
+ { 1, &hf_dsrc_large , ASN1_NO_EXTENSIONS , dissect_dsrc_DrivenLineOffsetLg },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_dsrc_T_offsetXaxis(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_offsetXaxis, dsrc_T_offsetXaxis_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string dsrc_T_offsetYaxis_vals[] = {
+ { 0, "small" },
+ { 1, "large" },
+ { 0, NULL }
+};
+
+static const per_choice_t dsrc_T_offsetYaxis_choice[] = {
+ { 0, &hf_dsrc_small , ASN1_NO_EXTENSIONS , dissect_dsrc_DrivenLineOffsetSm },
+ { 1, &hf_dsrc_large , ASN1_NO_EXTENSIONS , dissect_dsrc_DrivenLineOffsetLg },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_dsrc_T_offsetYaxis(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_offsetYaxis, dsrc_T_offsetYaxis_choice,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_Scale_B12(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ -2048, 2047U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_ComputedLaneRegional_sequence_of[1] = {
+ { &hf_dsrc_clRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_ComputedLaneRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_ComputedLaneRegional, dsrc_T_ComputedLaneRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_ComputedLane_sequence[] = {
+ { &hf_dsrc_referenceLaneId, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_LaneID },
+ { &hf_dsrc_offsetXaxis , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_T_offsetXaxis },
+ { &hf_dsrc_offsetYaxis , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_T_offsetYaxis },
+ { &hf_dsrc_rotateXY , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_Angle },
+ { &hf_dsrc_scaleXaxis , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_Scale_B12 },
+ { &hf_dsrc_scaleYaxis , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_Scale_B12 },
+ { &hf_dsrc_clRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_T_ComputedLaneRegional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_ComputedLane(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 390 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_ComputedLane;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_ComputedLane, dsrc_ComputedLane_sequence);
+
+#line 394 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+static const value_string dsrc_NodeListXY_vals[] = {
+ { 0, "nodes" },
+ { 1, "computed" },
+ { 0, NULL }
+};
+
+static const per_choice_t dsrc_NodeListXY_choice[] = {
+ { 0, &hf_dsrc_nodes , ASN1_EXTENSION_ROOT , dissect_dsrc_NodeSetXY },
+ { 1, &hf_dsrc_computed , ASN1_EXTENSION_ROOT , dissect_dsrc_ComputedLane },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_dsrc_NodeListXY(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_NodeListXY, dsrc_NodeListXY_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_ConnectingLane_sequence[] = {
+ { &hf_dsrc_lane , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_LaneID },
+ { &hf_dsrc_maneuver , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_dsrc_AllowedManeuvers },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_ConnectingLane(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_ConnectingLane, dsrc_ConnectingLane_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_Connection_sequence[] = {
+ { &hf_dsrc_connectingLane , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_ConnectingLane },
+ { &hf_dsrc_remoteIntersection, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_dsrc_IntersectionReferenceID },
+ { &hf_dsrc_signalGroup , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_dsrc_SignalGroupID },
+ { &hf_dsrc_userClass , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_dsrc_RestrictionClassID },
+ { &hf_dsrc_connectionID , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_dsrc_LaneConnectionID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_Connection(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_Connection, dsrc_Connection_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_ConnectsToList_sequence_of[1] = {
+ { &hf_dsrc_ConnectsToList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_Connection },
+};
+
+static int
+dissect_dsrc_ConnectsToList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_ConnectsToList, dsrc_ConnectsToList_sequence_of,
+ 1, 16, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_OverlayLaneList_sequence_of[1] = {
+ { &hf_dsrc_OverlayLaneList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_LaneID },
+};
+
+static int
+dissect_dsrc_OverlayLaneList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_OverlayLaneList, dsrc_OverlayLaneList_sequence_of,
+ 1, 5, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_GenericLaneRegional_sequence_of[1] = {
+ { &hf_dsrc_glRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_GenericLaneRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_GenericLaneRegional, dsrc_T_GenericLaneRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_GenericLane_sequence[] = {
+ { &hf_dsrc_laneID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_LaneID },
+ { &hf_dsrc_name , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_DescriptiveName },
+ { &hf_dsrc_ingressApproach, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_ApproachID },
+ { &hf_dsrc_egressApproach , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_ApproachID },
+ { &hf_dsrc_laneAttributes , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_LaneAttributes },
+ { &hf_dsrc_maneuvers , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_AllowedManeuvers },
+ { &hf_dsrc_nodeList , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_NodeListXY },
+ { &hf_dsrc_connectsTo , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_ConnectsToList },
+ { &hf_dsrc_overlays , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_OverlayLaneList },
+ { &hf_dsrc_glRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_T_GenericLaneRegional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_GenericLane(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 408 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_GenericLane;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_GenericLane, dsrc_GenericLane_sequence);
+
+#line 412 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_LaneList_sequence_of[1] = {
+ { &hf_dsrc_LaneList_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_GenericLane },
+};
+
+static int
+dissect_dsrc_LaneList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_LaneList, dsrc_LaneList_sequence_of,
+ 1, 255, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_SignalControlZone_sequence[] = {
+ { &hf_dsrc_zone , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_SignalControlZone(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 570 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_SignalControlZone;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_SignalControlZone, dsrc_SignalControlZone_sequence);
+
+#line 574 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_PreemptPriorityList_sequence_of[1] = {
+ { &hf_dsrc_PreemptPriorityList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_SignalControlZone },
+};
+
+static int
+dissect_dsrc_PreemptPriorityList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_PreemptPriorityList, dsrc_PreemptPriorityList_sequence_of,
+ 1, 32, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_IntersectionGeometryRegional_sequence_of[1] = {
+ { &hf_dsrc_igRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_IntersectionGeometryRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_IntersectionGeometryRegional, dsrc_T_IntersectionGeometryRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_IntersectionGeometry_sequence[] = {
+ { &hf_dsrc_name , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_DescriptiveName },
+ { &hf_dsrc_igId , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_IntersectionReferenceID },
+ { &hf_dsrc_revision , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_MsgCount },
+ { &hf_dsrc_refPoint , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_Position3D },
+ { &hf_dsrc_laneWidth , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_LaneWidth },
+ { &hf_dsrc_speedLimits , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_SpeedLimitList },
+ { &hf_dsrc_laneSet , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_LaneList },
+ { &hf_dsrc_preemptPriorityData, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_PreemptPriorityList },
+ { &hf_dsrc_igRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_T_IntersectionGeometryRegional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_IntersectionGeometry(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 417 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_IntersectionGeometry;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_IntersectionGeometry, dsrc_IntersectionGeometry_sequence);
+
+#line 421 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_IntersectionGeometryList_sequence_of[1] = {
+ { &hf_dsrc_IntersectionGeometryList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_IntersectionGeometry },
+};
+
+static int
+dissect_dsrc_IntersectionGeometryList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_IntersectionGeometryList, dsrc_IntersectionGeometryList_sequence_of,
+ 1, 32, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_RoadSegmentID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 65535U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_RoadSegmentReferenceID_sequence[] = {
+ { &hf_dsrc_region , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_dsrc_RoadRegulatorID },
+ { &hf_dsrc_rsrId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RoadSegmentID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_RoadSegmentReferenceID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_RoadSegmentReferenceID, dsrc_RoadSegmentReferenceID_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_RoadLaneSetList_sequence_of[1] = {
+ { &hf_dsrc_RoadLaneSetList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_GenericLane },
+};
+
+static int
+dissect_dsrc_RoadLaneSetList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_RoadLaneSetList, dsrc_RoadLaneSetList_sequence_of,
+ 1, 255, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_RoadSegmentRegional_sequence_of[1] = {
+ { &hf_dsrc_rsRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_RoadSegmentRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_RoadSegmentRegional, dsrc_T_RoadSegmentRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_RoadSegment_sequence[] = {
+ { &hf_dsrc_name , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_DescriptiveName },
+ { &hf_dsrc_rsId , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_RoadSegmentReferenceID },
+ { &hf_dsrc_revision , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_MsgCount },
+ { &hf_dsrc_refPoint , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_Position3D },
+ { &hf_dsrc_laneWidth , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_LaneWidth },
+ { &hf_dsrc_speedLimits , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_SpeedLimitList },
+ { &hf_dsrc_roadLaneSet , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_RoadLaneSetList },
+ { &hf_dsrc_rsRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_T_RoadSegmentRegional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_RoadSegment(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 525 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_RoadSegment;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_RoadSegment, dsrc_RoadSegment_sequence);
+
+#line 529 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_RoadSegmentList_sequence_of[1] = {
+ { &hf_dsrc_RoadSegmentList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RoadSegment },
+};
+
+static int
+dissect_dsrc_RoadSegmentList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_RoadSegmentList, dsrc_RoadSegmentList_sequence_of,
+ 1, 32, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_dsrc_IA5String_SIZE_1_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_IA5String(tvb, offset, actx, tree, hf_index,
+ 1, 255, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_DataParameters_sequence[] = {
+ { &hf_dsrc_processMethod , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_IA5String_SIZE_1_255 },
+ { &hf_dsrc_processAgency , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_IA5String_SIZE_1_255 },
+ { &hf_dsrc_lastCheckedDate, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_IA5String_SIZE_1_255 },
+ { &hf_dsrc_geoidUsed , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_IA5String_SIZE_1_255 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_DataParameters(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_DataParameters, dsrc_DataParameters_sequence);
+
+ return offset;
+}
+
+
+static const value_string dsrc_RestrictionAppliesTo_vals[] = {
+ { 0, "none" },
+ { 1, "equippedTransit" },
+ { 2, "equippedTaxis" },
+ { 3, "equippedOther" },
+ { 4, "emissionCompliant" },
+ { 5, "equippedBicycle" },
+ { 6, "weightCompliant" },
+ { 7, "heightCompliant" },
+ { 8, "pedestrians" },
+ { 9, "slowMovingPersons" },
+ { 10, "wheelchairUsers" },
+ { 11, "visualDisabilities" },
+ { 12, "audioDisabilities" },
+ { 13, "otherUnknownDisabilities" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_dsrc_RestrictionAppliesTo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 14, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_RestrictionUserTypeRegional_sequence_of[1] = {
+ { &hf_dsrc_rutRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_RestrictionUserTypeRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_RestrictionUserTypeRegional, dsrc_T_RestrictionUserTypeRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const value_string dsrc_RestrictionUserType_vals[] = {
+ { 0, "basicType" },
+ { 1, "regional" },
+ { 0, NULL }
+};
+
+static const per_choice_t dsrc_RestrictionUserType_choice[] = {
+ { 0, &hf_dsrc_basicType , ASN1_EXTENSION_ROOT , dissect_dsrc_RestrictionAppliesTo },
+ { 1, &hf_dsrc_rutRegional , ASN1_EXTENSION_ROOT , dissect_dsrc_T_RestrictionUserTypeRegional },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_dsrc_RestrictionUserType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 516 "./asn1/its/its.cnf"
+ enum regext_type_enum save = ((its_private_data_t*)actx->private_data)->type;
+ ((its_private_data_t*)actx->private_data)->type = Reg_RestrictionUserType;
+
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_RestrictionUserType, dsrc_RestrictionUserType_choice,
+ NULL);
+
+#line 520 "./asn1/its/its.cnf"
+ ((its_private_data_t*)actx->private_data)->type = save;
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_RestrictionUserTypeList_sequence_of[1] = {
+ { &hf_dsrc_RestrictionUserTypeList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RestrictionUserType },
+};
+
+static int
+dissect_dsrc_RestrictionUserTypeList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_RestrictionUserTypeList, dsrc_RestrictionUserTypeList_sequence_of,
+ 1, 16, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_RestrictionClassAssignment_sequence[] = {
+ { &hf_dsrc_scaId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RestrictionClassID },
+ { &hf_dsrc_users , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RestrictionUserTypeList },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_RestrictionClassAssignment(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_RestrictionClassAssignment, dsrc_RestrictionClassAssignment_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_RestrictionClassList_sequence_of[1] = {
+ { &hf_dsrc_RestrictionClassList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RestrictionClassAssignment },
+};
+
+static int
+dissect_dsrc_RestrictionClassList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_RestrictionClassList, dsrc_RestrictionClassList_sequence_of,
+ 1, 254, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_T_MAPRegional_sequence_of[1] = {
+ { &hf_dsrc_mapRegional_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_dsrc_RegionalExtension },
+};
+
+static int
+dissect_dsrc_T_MAPRegional(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_T_MAPRegional, dsrc_T_MAPRegional_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t dsrc_MapData_sequence[] = {
+ { &hf_dsrc_mdTimeStamp , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_MinuteOfTheYear },
+ { &hf_dsrc_msgIssueRevision, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_MsgCount },
+ { &hf_dsrc_layerType , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_LayerType },
+ { &hf_dsrc_layerID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_LayerID },
+ { &hf_dsrc_mdIntersections, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_IntersectionGeometryList },
+ { &hf_dsrc_roadSegments , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_RoadSegmentList },
+ { &hf_dsrc_dataParameters , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_DataParameters },
+ { &hf_dsrc_restrictionList, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_RestrictionClassList },
+ { &hf_dsrc_mapRegional , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_T_MAPRegional },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_dsrc_MapData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 324 "./asn1/its/its.cnf"
+ its_private_data_t *regext = wmem_new0(wmem_packet_scope(), its_private_data_t);
+ actx->private_data = (void*)regext;
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "MAPEM");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "MAPEM");
+ regext->type = Reg_MapData;
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_dsrc_MapData, dsrc_MapData_sequence);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_dsrc_SPAT_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ offset = dissect_dsrc_SPAT(tvb, offset, &asn1_ctx, tree, hf_dsrc_dsrc_SPAT_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+static int dissect_dsrc_SignalRequestMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ offset = dissect_dsrc_SignalRequestMessage(tvb, offset, &asn1_ctx, tree, hf_dsrc_dsrc_SignalRequestMessage_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+static int dissect_dsrc_SignalStatusMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ offset = dissect_dsrc_SignalStatusMessage(tvb, offset, &asn1_ctx, tree, hf_dsrc_dsrc_SignalStatusMessage_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+static int dissect_dsrc_MapData_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ offset = dissect_dsrc_MapData(tvb, offset, &asn1_ctx, tree, hf_dsrc_dsrc_MapData_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
+
+/* --- Module AddGrpC --- --- --- */
+
+
+static const value_string AddGrpC_TimeReference_vals[] = {
+ { 1, "oneMilliSec" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_AddGrpC_TimeReference(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 65535U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t AddGrpC_ItsStationPosition_sequence[] = {
+ { &hf_AddGrpC_stationID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_StationID },
+ { &hf_AddGrpC_laneID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_LaneID },
+ { &hf_AddGrpC_nodeXY , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_NodeOffsetPointXY },
+ { &hf_AddGrpC_timeReference, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_AddGrpC_TimeReference },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_AddGrpC_ItsStationPosition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_AddGrpC_ItsStationPosition, AddGrpC_ItsStationPosition_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t AddGrpC_ItsStationPositionList_sequence_of[1] = {
+ { &hf_AddGrpC_ItsStationPositionList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_AddGrpC_ItsStationPosition },
+};
+
+static int
+dissect_AddGrpC_ItsStationPositionList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_AddGrpC_ItsStationPositionList, AddGrpC_ItsStationPositionList_sequence_of,
+ 1, 5, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t AddGrpC_ConnectionManeuverAssist_addGrpC_sequence[] = {
+ { &hf_AddGrpC_itsStationPositions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_AddGrpC_ItsStationPositionList },
+ { &hf_AddGrpC_rsuGNSSOffset, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_NodeOffsetPointXY },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_AddGrpC_ConnectionManeuverAssist_addGrpC(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 341 "./asn1/its/its.cnf"
+ actx->private_data = wmem_new0(wmem_packet_scope(), its_private_data_t);
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_AddGrpC_ConnectionManeuverAssist_addGrpC, AddGrpC_ConnectionManeuverAssist_addGrpC_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t AddGrpC_ConnectionTrajectory_addGrpC_sequence[] = {
+ { &hf_AddGrpC_nodes , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_NodeSetXY },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_AddGrpC_ConnectionTrajectory_addGrpC(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 346 "./asn1/its/its.cnf"
+ actx->private_data = wmem_new0(wmem_packet_scope(), its_private_data_t);
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_AddGrpC_ConnectionTrajectory_addGrpC, AddGrpC_ConnectionTrajectory_addGrpC_sequence);
+
+ return offset;
+}
+
+
+static const value_string AddGrpC_PtvRequestType_vals[] = {
+ { 0, "preRequest" },
+ { 1, "mainRequest" },
+ { 2, "doorCloseRequest" },
+ { 3, "cancelRequest" },
+ { 4, "emergencyRequest" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_AddGrpC_PtvRequestType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 5, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t AddGrpC_Control_addGrpC_sequence[] = {
+ { &hf_AddGrpC_ptvRequest , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_AddGrpC_PtvRequestType },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_AddGrpC_Control_addGrpC(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 351 "./asn1/its/its.cnf"
+ actx->private_data = wmem_new0(wmem_packet_scope(), its_private_data_t);
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_AddGrpC_Control_addGrpC, AddGrpC_Control_addGrpC_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t AddGrpC_PrioritizationResponse_sequence[] = {
+ { &hf_AddGrpC_stationID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_StationID },
+ { &hf_AddGrpC_priorState , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_PrioritizationResponseStatus },
+ { &hf_AddGrpC_signalGroup , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_SignalGroupID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_AddGrpC_PrioritizationResponse(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_AddGrpC_PrioritizationResponse, AddGrpC_PrioritizationResponse_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t AddGrpC_PrioritizationResponseList_sequence_of[1] = {
+ { &hf_AddGrpC_PrioritizationResponseList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_AddGrpC_PrioritizationResponse },
+};
+
+static int
+dissect_AddGrpC_PrioritizationResponseList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_AddGrpC_PrioritizationResponseList, AddGrpC_PrioritizationResponseList_sequence_of,
+ 1, 10, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t AddGrpC_IntersectionState_addGrpC_sequence[] = {
+ { &hf_AddGrpC_activePrioritizations, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_AddGrpC_PrioritizationResponseList },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_AddGrpC_IntersectionState_addGrpC(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 356 "./asn1/its/its.cnf"
+ actx->private_data = wmem_new0(wmem_packet_scope(), its_private_data_t);
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_AddGrpC_IntersectionState_addGrpC, AddGrpC_IntersectionState_addGrpC_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t AddGrpC_SignalHeadLocation_sequence[] = {
+ { &hf_AddGrpC_nodeXY , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_NodeOffsetPointXY },
+ { &hf_AddGrpC_nodeZ , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_DeltaAltitude },
+ { &hf_AddGrpC_signalGroupID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_dsrc_SignalGroupID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_AddGrpC_SignalHeadLocation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_AddGrpC_SignalHeadLocation, AddGrpC_SignalHeadLocation_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t AddGrpC_SignalHeadLocationList_sequence_of[1] = {
+ { &hf_AddGrpC_SignalHeadLocationList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_AddGrpC_SignalHeadLocation },
+};
+
+static int
+dissect_AddGrpC_SignalHeadLocationList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_AddGrpC_SignalHeadLocationList, AddGrpC_SignalHeadLocationList_sequence_of,
+ 1, 64, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t AddGrpC_MapData_addGrpC_sequence[] = {
+ { &hf_AddGrpC_signalHeadLocations, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_AddGrpC_SignalHeadLocationList },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_AddGrpC_MapData_addGrpC(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 361 "./asn1/its/its.cnf"
+ actx->private_data = wmem_new0(wmem_packet_scope(), its_private_data_t);
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_AddGrpC_MapData_addGrpC, AddGrpC_MapData_addGrpC_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t AddGrpC_Position3D_addGrpC_sequence[] = {
+ { &hf_AddGrpC_altitude , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_Altitude },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_AddGrpC_Position3D_addGrpC(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 366 "./asn1/its/its.cnf"
+ actx->private_data = wmem_new0(wmem_packet_scope(), its_private_data_t);
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_AddGrpC_Position3D_addGrpC, AddGrpC_Position3D_addGrpC_sequence);
+
+ return offset;
+}
+
+
+static const value_string AddGrpC_EmissionType_vals[] = {
+ { 0, "euro1" },
+ { 1, "euro2" },
+ { 2, "euro3" },
+ { 3, "euro4" },
+ { 4, "euro5" },
+ { 5, "euro6" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_AddGrpC_EmissionType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 6, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t AddGrpC_RestrictionUserType_addGrpC_sequence[] = {
+ { &hf_AddGrpC_emission , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_AddGrpC_EmissionType },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_AddGrpC_RestrictionUserType_addGrpC(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 371 "./asn1/its/its.cnf"
+ actx->private_data = wmem_new0(wmem_packet_scope(), its_private_data_t);
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_AddGrpC_RestrictionUserType_addGrpC, AddGrpC_RestrictionUserType_addGrpC_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t AddGrpC_SignalStatusPackage_addGrpC_sequence[] = {
+ { &hf_AddGrpC_synchToSchedule, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_dsrc_DeltaTime },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_AddGrpC_SignalStatusPackage_addGrpC(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 376 "./asn1/its/its.cnf"
+ actx->private_data = wmem_new0(wmem_packet_scope(), its_private_data_t);
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_AddGrpC_SignalStatusPackage_addGrpC, AddGrpC_SignalStatusPackage_addGrpC_sequence);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_AddGrpC_ConnectionManeuverAssist_addGrpC_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ offset = dissect_AddGrpC_ConnectionManeuverAssist_addGrpC(tvb, offset, &asn1_ctx, tree, hf_AddGrpC_AddGrpC_ConnectionManeuverAssist_addGrpC_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+static int dissect_AddGrpC_ConnectionTrajectory_addGrpC_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ offset = dissect_AddGrpC_ConnectionTrajectory_addGrpC(tvb, offset, &asn1_ctx, tree, hf_AddGrpC_AddGrpC_ConnectionTrajectory_addGrpC_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+static int dissect_AddGrpC_Control_addGrpC_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ offset = dissect_AddGrpC_Control_addGrpC(tvb, offset, &asn1_ctx, tree, hf_AddGrpC_AddGrpC_Control_addGrpC_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+static int dissect_AddGrpC_IntersectionState_addGrpC_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ offset = dissect_AddGrpC_IntersectionState_addGrpC(tvb, offset, &asn1_ctx, tree, hf_AddGrpC_AddGrpC_IntersectionState_addGrpC_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+static int dissect_AddGrpC_MapData_addGrpC_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ offset = dissect_AddGrpC_MapData_addGrpC(tvb, offset, &asn1_ctx, tree, hf_AddGrpC_AddGrpC_MapData_addGrpC_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+static int dissect_AddGrpC_Position3D_addGrpC_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ offset = dissect_AddGrpC_Position3D_addGrpC(tvb, offset, &asn1_ctx, tree, hf_AddGrpC_AddGrpC_Position3D_addGrpC_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+static int dissect_AddGrpC_RestrictionUserType_addGrpC_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ offset = dissect_AddGrpC_RestrictionUserType_addGrpC(tvb, offset, &asn1_ctx, tree, hf_AddGrpC_AddGrpC_RestrictionUserType_addGrpC_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+static int dissect_AddGrpC_SignalStatusPackage_addGrpC_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ offset = dissect_AddGrpC_SignalStatusPackage_addGrpC(tvb, offset, &asn1_ctx, tree, hf_AddGrpC_AddGrpC_SignalStatusPackage_addGrpC_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
+
+/* --- Module REGION --- --- --- */
+
+
+/* --- Module SPATEM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module MAPEM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module IVIM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module SREM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module SSEM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module CAM-PDU-Descriptions --- --- --- */
+
+
+static const value_string cam_GenerationDeltaTime_vals[] = {
+ { 1, "oneMilliSec" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_cam_GenerationDeltaTime(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 65535U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t cam_BasicContainer_sequence[] = {
+ { &hf_cam_stationType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_StationType },
+ { &hf_cam_referencePosition, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_ReferencePosition },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_cam_BasicContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_cam_BasicContainer, cam_BasicContainer_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t cam_BasicVehicleContainerHighFrequency_sequence[] = {
+ { &hf_cam_heading , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_Heading },
+ { &hf_cam_speed , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_Speed },
+ { &hf_cam_driveDirection , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_DriveDirection },
+ { &hf_cam_vehicleLength , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_VehicleLength },
+ { &hf_cam_vehicleWidth , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_VehicleWidth },
+ { &hf_cam_longitudinalAcceleration, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_LongitudinalAcceleration },
+ { &hf_cam_curvature , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_Curvature },
+ { &hf_cam_curvatureCalculationMode, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_CurvatureCalculationMode },
+ { &hf_cam_yawRate , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_YawRate },
+ { &hf_cam_accelerationControl, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_AccelerationControl },
+ { &hf_cam_lanePosition , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_LanePosition },
+ { &hf_cam_steeringWheelAngle, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_SteeringWheelAngle },
+ { &hf_cam_lateralAcceleration, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_LateralAcceleration },
+ { &hf_cam_verticalAcceleration, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_VerticalAcceleration },
+ { &hf_cam_performanceClass, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_PerformanceClass },
+ { &hf_cam_cenDsrcTollingZone, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_CenDsrcTollingZone },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_cam_BasicVehicleContainerHighFrequency(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_cam_BasicVehicleContainerHighFrequency, cam_BasicVehicleContainerHighFrequency_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t cam_RSUContainerHighFrequency_sequence[] = {
+ { &hf_cam_protectedCommunicationZonesRSU, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_ProtectedCommunicationZonesRSU },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_cam_RSUContainerHighFrequency(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_cam_RSUContainerHighFrequency, cam_RSUContainerHighFrequency_sequence);
+
+ return offset;
+}
+
+
+static const value_string cam_HighFrequencyContainer_vals[] = {
+ { 0, "basicVehicleContainerHighFrequency" },
+ { 1, "rsuContainerHighFrequency" },
+ { 0, NULL }
+};
+
+static const per_choice_t cam_HighFrequencyContainer_choice[] = {
+ { 0, &hf_cam_basicVehicleContainerHighFrequency, ASN1_EXTENSION_ROOT , dissect_cam_BasicVehicleContainerHighFrequency },
+ { 1, &hf_cam_rsuContainerHighFrequency, ASN1_EXTENSION_ROOT , dissect_cam_RSUContainerHighFrequency },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_cam_HighFrequencyContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_cam_HighFrequencyContainer, cam_HighFrequencyContainer_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t cam_BasicVehicleContainerLowFrequency_sequence[] = {
+ { &hf_cam_vehicleRole , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_VehicleRole },
+ { &hf_cam_exteriorLights , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_ExteriorLights },
+ { &hf_cam_pathHistory , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_PathHistory },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_cam_BasicVehicleContainerLowFrequency(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_cam_BasicVehicleContainerLowFrequency, cam_BasicVehicleContainerLowFrequency_sequence);
+
+ return offset;
+}
+
+
+static const value_string cam_LowFrequencyContainer_vals[] = {
+ { 0, "basicVehicleContainerLowFrequency" },
+ { 0, NULL }
+};
+
+static const per_choice_t cam_LowFrequencyContainer_choice[] = {
+ { 0, &hf_cam_basicVehicleContainerLowFrequency, ASN1_EXTENSION_ROOT , dissect_cam_BasicVehicleContainerLowFrequency },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_cam_LowFrequencyContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_cam_LowFrequencyContainer, cam_LowFrequencyContainer_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t cam_PublicTransportContainer_sequence[] = {
+ { &hf_cam_embarkationStatus, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_EmbarkationStatus },
+ { &hf_cam_ptActivation , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_PtActivation },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_cam_PublicTransportContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_cam_PublicTransportContainer, cam_PublicTransportContainer_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t cam_SpecialTransportContainer_sequence[] = {
+ { &hf_cam_specialTransportType, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_SpecialTransportType },
+ { &hf_cam_lightBarSirenInUse, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_LightBarSirenInUse },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_cam_SpecialTransportContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_cam_SpecialTransportContainer, cam_SpecialTransportContainer_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t cam_DangerousGoodsContainer_sequence[] = {
+ { &hf_cam_dangerousGoodsBasic, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_DangerousGoodsBasic },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_cam_DangerousGoodsContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_cam_DangerousGoodsContainer, cam_DangerousGoodsContainer_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t cam_RoadWorksContainerBasic_sequence[] = {
+ { &hf_cam_roadworksSubCauseCode, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_RoadworksSubCauseCode },
+ { &hf_cam_lightBarSirenInUse, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_LightBarSirenInUse },
+ { &hf_cam_closedLanes , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_ClosedLanes },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_cam_RoadWorksContainerBasic(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_cam_RoadWorksContainerBasic, cam_RoadWorksContainerBasic_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t cam_RescueContainer_sequence[] = {
+ { &hf_cam_lightBarSirenInUse, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_LightBarSirenInUse },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_cam_RescueContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_cam_RescueContainer, cam_RescueContainer_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t cam_EmergencyContainer_sequence[] = {
+ { &hf_cam_lightBarSirenInUse, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_LightBarSirenInUse },
+ { &hf_cam_incidentIndication, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_CauseCode },
+ { &hf_cam_emergencyPriority, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_EmergencyPriority },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_cam_EmergencyContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_cam_EmergencyContainer, cam_EmergencyContainer_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t cam_SafetyCarContainer_sequence[] = {
+ { &hf_cam_lightBarSirenInUse, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_LightBarSirenInUse },
+ { &hf_cam_incidentIndication, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_CauseCode },
+ { &hf_cam_trafficRule , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_TrafficRule },
+ { &hf_cam_speedLimit , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_SpeedLimit },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_cam_SafetyCarContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_cam_SafetyCarContainer, cam_SafetyCarContainer_sequence);
+
+ return offset;
+}
+
+
+static const value_string cam_SpecialVehicleContainer_vals[] = {
+ { 0, "publicTransportContainer" },
+ { 1, "specialTransportContainer" },
+ { 2, "dangerousGoodsContainer" },
+ { 3, "roadWorksContainerBasic" },
+ { 4, "rescueContainer" },
+ { 5, "emergencyContainer" },
+ { 6, "safetyCarContainer" },
+ { 0, NULL }
+};
+
+static const per_choice_t cam_SpecialVehicleContainer_choice[] = {
+ { 0, &hf_cam_publicTransportContainer, ASN1_EXTENSION_ROOT , dissect_cam_PublicTransportContainer },
+ { 1, &hf_cam_specialTransportContainer, ASN1_EXTENSION_ROOT , dissect_cam_SpecialTransportContainer },
+ { 2, &hf_cam_dangerousGoodsContainer, ASN1_EXTENSION_ROOT , dissect_cam_DangerousGoodsContainer },
+ { 3, &hf_cam_roadWorksContainerBasic, ASN1_EXTENSION_ROOT , dissect_cam_RoadWorksContainerBasic },
+ { 4, &hf_cam_rescueContainer , ASN1_EXTENSION_ROOT , dissect_cam_RescueContainer },
+ { 5, &hf_cam_emergencyContainer, ASN1_EXTENSION_ROOT , dissect_cam_EmergencyContainer },
+ { 6, &hf_cam_safetyCarContainer, ASN1_EXTENSION_ROOT , dissect_cam_SafetyCarContainer },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_cam_SpecialVehicleContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_cam_SpecialVehicleContainer, cam_SpecialVehicleContainer_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t cam_CamParameters_sequence[] = {
+ { &hf_cam_basicContainer , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_cam_BasicContainer },
+ { &hf_cam_highFrequencyContainer, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_cam_HighFrequencyContainer },
+ { &hf_cam_lowFrequencyContainer, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_cam_LowFrequencyContainer },
+ { &hf_cam_specialVehicleContainer, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_cam_SpecialVehicleContainer },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_cam_CamParameters(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_cam_CamParameters, cam_CamParameters_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t cam_CoopAwareness_sequence[] = {
+ { &hf_cam_generationDeltaTime, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_cam_GenerationDeltaTime },
+ { &hf_cam_camParameters , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_cam_CamParameters },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_cam_CoopAwareness(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 272 "./asn1/its/its.cnf"
+ actx->private_data = (void*)wmem_new0(wmem_packet_scope(), its_private_data_t);
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "CAM");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "CAM");
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_cam_CoopAwareness, cam_CoopAwareness_sequence);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_cam_CoopAwareness_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ offset = dissect_cam_CoopAwareness(tvb, offset, &asn1_ctx, tree, hf_cam_cam_CoopAwareness_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
+
+/* --- Module DENM-PDU-Descriptions --- --- --- */
+
+
+static const value_string denm_Termination_vals[] = {
+ { 0, "isCancellation" },
+ { 1, "isNegation" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_denm_Termination(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 2, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t denm_ManagementContainer_sequence[] = {
+ { &hf_denm_actionID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_ActionID },
+ { &hf_denm_detectionTime , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_TimestampIts },
+ { &hf_denm_referenceTime , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_TimestampIts },
+ { &hf_denm_termination , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_denm_Termination },
+ { &hf_denm_eventPosition , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_ReferencePosition },
+ { &hf_denm_relevanceDistance, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_RelevanceDistance },
+ { &hf_denm_relevanceTrafficDirection, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_RelevanceTrafficDirection },
+ { &hf_denm_validityDuration, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_ValidityDuration },
+ { &hf_denm_transmissionInterval, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_TransmissionInterval },
+ { &hf_denm_stationType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_StationType },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_denm_ManagementContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_denm_ManagementContainer, denm_ManagementContainer_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t denm_SituationContainer_sequence[] = {
+ { &hf_denm_informationQuality, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_InformationQuality },
+ { &hf_denm_eventType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_CauseCode },
+ { &hf_denm_linkedCause , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_CauseCode },
+ { &hf_denm_eventHistory , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_EventHistory },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_denm_SituationContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_denm_SituationContainer, denm_SituationContainer_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t denm_LocationContainer_sequence[] = {
+ { &hf_denm_eventSpeed , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_Speed },
+ { &hf_denm_eventPositionHeading, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_Heading },
+ { &hf_denm_traces , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_Traces },
+ { &hf_denm_roadType , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_RoadType },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_denm_LocationContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_denm_LocationContainer, denm_LocationContainer_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t denm_ImpactReductionContainer_sequence[] = {
+ { &hf_denm_heightLonCarrLeft, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_HeightLonCarr },
+ { &hf_denm_heightLonCarrRight, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_HeightLonCarr },
+ { &hf_denm_posLonCarrLeft , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_PosLonCarr },
+ { &hf_denm_posLonCarrRight, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_PosLonCarr },
+ { &hf_denm_positionOfPillars, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_PositionOfPillars },
+ { &hf_denm_posCentMass , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_PosCentMass },
+ { &hf_denm_wheelBaseVehicle, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_WheelBaseVehicle },
+ { &hf_denm_turningRadius , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_TurningRadius },
+ { &hf_denm_posFrontAx , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_PosFrontAx },
+ { &hf_denm_positionOfOccupants, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_PositionOfOccupants },
+ { &hf_denm_vehicleMass , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_VehicleMass },
+ { &hf_denm_requestResponseIndication, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_RequestResponseIndication },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_denm_ImpactReductionContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_denm_ImpactReductionContainer, denm_ImpactReductionContainer_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t denm_ReferenceDenms_sequence_of[1] = {
+ { &hf_denm_ReferenceDenms_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_ActionID },
+};
+
+static int
+dissect_denm_ReferenceDenms(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_denm_ReferenceDenms, denm_ReferenceDenms_sequence_of,
+ 1, 8, TRUE);
+
+ return offset;
+}
+
+
+static const per_sequence_t denm_RoadWorksContainerExtended_sequence[] = {
+ { &hf_denm_lightBarSirenInUse, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_LightBarSirenInUse },
+ { &hf_denm_closedLanes , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_ClosedLanes },
+ { &hf_denm_restriction , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_RestrictedTypes },
+ { &hf_denm_speedLimit , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_SpeedLimit },
+ { &hf_denm_incidentIndication, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_CauseCode },
+ { &hf_denm_recommendedPath, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_ItineraryPath },
+ { &hf_denm_startingPointSpeedLimit, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_DeltaReferencePosition },
+ { &hf_denm_trafficFlowRule, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_TrafficRule },
+ { &hf_denm_referenceDenms , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_denm_ReferenceDenms },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_denm_RoadWorksContainerExtended(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_denm_RoadWorksContainerExtended, denm_RoadWorksContainerExtended_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t denm_StationaryVehicleContainer_sequence[] = {
+ { &hf_denm_stationarySince, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_StationarySince },
+ { &hf_denm_stationaryCause, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_CauseCode },
+ { &hf_denm_carryingDangerousGoods, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_DangerousGoodsExtended },
+ { &hf_denm_numberOfOccupants, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_NumberOfOccupants },
+ { &hf_denm_vehicleIdentification, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_VehicleIdentification },
+ { &hf_denm_energyStorageType, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_its_EnergyStorageType },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_denm_StationaryVehicleContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_denm_StationaryVehicleContainer, denm_StationaryVehicleContainer_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t denm_AlacarteContainer_sequence[] = {
+ { &hf_denm_lanePosition , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_LanePosition },
+ { &hf_denm_impactReduction, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_denm_ImpactReductionContainer },
+ { &hf_denm_externalTemperature, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_Temperature },
+ { &hf_denm_roadWorks , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_denm_RoadWorksContainerExtended },
+ { &hf_denm_positioningSolution, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_PositioningSolutionType },
+ { &hf_denm_stationaryVehicle, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_denm_StationaryVehicleContainer },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_denm_AlacarteContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_denm_AlacarteContainer, denm_AlacarteContainer_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t denm_DecentralizedEnvironmentalNotificationMessage_sequence[] = {
+ { &hf_denm_management , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_denm_ManagementContainer },
+ { &hf_denm_situation , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_denm_SituationContainer },
+ { &hf_denm_location , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_denm_LocationContainer },
+ { &hf_denm_alacarte , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_denm_AlacarteContainer },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_denm_DecentralizedEnvironmentalNotificationMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 278 "./asn1/its/its.cnf"
+ actx->private_data = (void*)wmem_new0(wmem_packet_scope(), its_private_data_t);
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "DENM");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "DENM");
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_denm_DecentralizedEnvironmentalNotificationMessage, denm_DecentralizedEnvironmentalNotificationMessage_sequence);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_denm_DecentralizedEnvironmentalNotificationMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ offset = dissect_denm_DecentralizedEnvironmentalNotificationMessage(tvb, offset, &asn1_ctx, tree, hf_denm_denm_DecentralizedEnvironmentalNotificationMessage_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
+
+/* --- Module TIS-TPG-Transactions-Descriptions --- --- --- */
+
+
+static const value_string tistpg_UNVehicleClassifcation_vals[] = {
+ { 0, "reserved" },
+ { 1, "categoryL1" },
+ { 2, "categoryL2" },
+ { 3, "categoryL3" },
+ { 4, "categoryL4" },
+ { 5, "categoryL5" },
+ { 6, "categoryL6" },
+ { 7, "categoryL7" },
+ { 8, "categoryL8" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_tistpg_UNVehicleClassifcation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 63U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_CustomerContract(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_IA5String(tvb, offset, actx, tree, hf_index,
+ 1, 32, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_TisProfile(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 724 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 8, 8, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_tistpg_TisProfile_reserved,
+ &hf_tistpg_TisProfile_profileOne,
+ &hf_tistpg_TisProfile_profileTwo,
+ &hf_tistpg_TisProfile_profileThree,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_tistpg_TisProfile);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TisTpgDRM_Management_sequence[] = {
+ { &hf_tistpg_generationTime, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_TimestampIts },
+ { &hf_tistpg_vehicleType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_UNVehicleClassifcation },
+ { &hf_tistpg_costumerContract, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_CustomerContract },
+ { &hf_tistpg_tisProfile , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_TisProfile },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgDRM_Management(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgDRM_Management, tistpg_TisTpgDRM_Management_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TisTpgDRM_Situation_sequence[] = {
+ { &hf_tistpg_causeCode , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_CauseCode },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgDRM_Situation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgDRM_Situation, tistpg_TisTpgDRM_Situation_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_SearchRange(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string tistpg_SearchCondition_vals[] = {
+ { 0, "nearest" },
+ { 1, "quickest" },
+ { 2, "paylessRoad" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_tistpg_SearchCondition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 7U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TisTpgDRM_Location_sequence[] = {
+ { &hf_tistpg_vehiclePosition, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_ReferencePosition },
+ { &hf_tistpg_vehicleSpeed , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_Speed },
+ { &hf_tistpg_vehicleHeading, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_Heading },
+ { &hf_tistpg_requestedPosition, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_ReferencePosition },
+ { &hf_tistpg_searchRange , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_SearchRange },
+ { &hf_tistpg_searchCondition, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_SearchCondition },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgDRM_Location(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgDRM_Location, tistpg_TisTpgDRM_Location_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TisTpgDRM_sequence[] = {
+ { &hf_tistpg_drmManagement, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_TisTpgDRM_Management },
+ { &hf_tistpg_drmSituation , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_TisTpgDRM_Situation },
+ { &hf_tistpg_drmLocation , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_TisTpgDRM_Location },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgDRM(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgDRM, tistpg_TisTpgDRM_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_TotalTpgStations(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 65535U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TisTpgSNM_Management_sequence[] = {
+ { &hf_tistpg_generationTime, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_TimestampIts },
+ { &hf_tistpg_totalTpgStations, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_TotalTpgStations },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgSNM_Management(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgSNM_Management, tistpg_TisTpgSNM_Management_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_TpgAutomation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 666 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 4, 4, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_tistpg_TpgAutomation_fullAutomated,
+ &hf_tistpg_TpgAutomation_semiAutomated,
+ &hf_tistpg_TpgAutomation_manual,
+ &hf_tistpg_TpgAutomation_reserved,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_tistpg_TpgAutomation);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_TpgNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 65535U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_TpgProvider(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_UTF8String(tvb, offset, actx, tree, hf_index,
+ 1, 32, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_Accessibility(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_UTF8String(tvb, offset, actx, tree, hf_index,
+ 1, 32, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_UTF8String_SIZE_1_128(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_UTF8String(tvb, offset, actx, tree, hf_index,
+ 1, 128, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_BookingInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_UTF8String(tvb, offset, actx, tree, hf_index,
+ NO_BOUND, NO_BOUND, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_AvailableTpgNumber(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 65535U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_CancellationCondition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_UTF8String(tvb, offset, actx, tree, hf_index,
+ 1, 32, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TpgStationData_sequence[] = {
+ { &hf_tistpg_tpgStationID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_StationID },
+ { &hf_tistpg_tpgAutomationLevel, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_TpgAutomation },
+ { &hf_tistpg_tpgNumber , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_TpgNumber },
+ { &hf_tistpg_tpgProvider , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_TpgProvider },
+ { &hf_tistpg_tpgLocation , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_ReferencePosition },
+ { &hf_tistpg_accessibility, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_Accessibility },
+ { &hf_tistpg_address , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_UTF8String_SIZE_1_128 },
+ { &hf_tistpg_phoneNumber , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_PhoneNumber },
+ { &hf_tistpg_digitalMap , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_DigitalMap },
+ { &hf_tistpg_openingDaysHours, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_OpeningDaysHours },
+ { &hf_tistpg_bookingInfo , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_BookingInfo },
+ { &hf_tistpg_availableTpgNumber, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_AvailableTpgNumber },
+ { &hf_tistpg_cancellationCondition, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_CancellationCondition },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TpgStationData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TpgStationData, tistpg_TpgStationData_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TpgNotifContainer_sequence_of[1] = {
+ { &hf_tistpg_TpgNotifContainer_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tistpg_TpgStationData },
+};
+
+static int
+dissect_tistpg_TpgNotifContainer(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TpgNotifContainer, tistpg_TpgNotifContainer_sequence_of,
+ 1, 8, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TisTpgSNM_sequence[] = {
+ { &hf_tistpg_snmManagement, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tistpg_TisTpgSNM_Management },
+ { &hf_tistpg_tpgContainer , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tistpg_TpgNotifContainer },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgSNM(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgSNM, tistpg_TisTpgSNM_sequence);
+
+ return offset;
+}
+
+
+static const value_string tistpg_ReservationStatus_vals[] = {
+ { 0, "reservationOK" },
+ { 1, "noReservationService" },
+ { 2, "noTpmsAvailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_tistpg_ReservationStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 3, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_ReservationID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_UTF8String(tvb, offset, actx, tree, hf_index,
+ 1, 32, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TisTpgTRM_Management_sequence[] = {
+ { &hf_tistpg_generationTime, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_TimestampIts },
+ { &hf_tistpg_vehicleType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_UNVehicleClassifcation },
+ { &hf_tistpg_tpgStationID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_StationID },
+ { &hf_tistpg_reservationStatus, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_ReservationStatus },
+ { &hf_tistpg_costumercontract, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_CustomerContract },
+ { &hf_tistpg_reservationID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_ReservationID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgTRM_Management(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgTRM_Management, tistpg_TisTpgTRM_Management_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_PairingID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 9999U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TisTpgTRM_Situation_sequence[] = {
+ { &hf_tistpg_estArrivalTime, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_TimestampIts },
+ { &hf_tistpg_proposedPairingID, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_tistpg_PairingID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgTRM_Situation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgTRM_Situation, tistpg_TisTpgTRM_Situation_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TisTpgTRM_Location_sequence[] = {
+ { &hf_tistpg_vehiclePosition, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_ReferencePosition },
+ { &hf_tistpg_vehicleSpeed , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_Speed },
+ { &hf_tistpg_vehicleHeading, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_Heading },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgTRM_Location(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgTRM_Location, tistpg_TisTpgTRM_Location_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TisTpgTRM_sequence[] = {
+ { &hf_tistpg_trmManagement, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_TisTpgTRM_Management },
+ { &hf_tistpg_trmSituation , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_TisTpgTRM_Situation },
+ { &hf_tistpg_trmLocation , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_TisTpgTRM_Location },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgTRM(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgTRM, tistpg_TisTpgTRM_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_INTEGER_1_65535(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 65535U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TisTpgTCM_Management_sequence[] = {
+ { &hf_tistpg_generationTime, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_TimestampIts },
+ { &hf_tistpg_tpgStationID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_StationID },
+ { &hf_tistpg_reservationStatus, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_ReservationStatus },
+ { &hf_tistpg_reservedTpg , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_INTEGER_1_65535 },
+ { &hf_tistpg_costumercontract, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_CustomerContract },
+ { &hf_tistpg_reservationID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_ReservationID },
+ { &hf_tistpg_tpgAutomationLevel, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_TpgAutomation },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgTCM_Management(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgTCM_Management, tistpg_TisTpgTCM_Management_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TisTpgTCM_Situation_sequence[] = {
+ { &hf_tistpg_pairingID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_PairingID },
+ { &hf_tistpg_reservationTimeLimit, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_TimestampIts },
+ { &hf_tistpg_cancellationCondition, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_CancellationCondition },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgTCM_Situation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgTCM_Situation, tistpg_TisTpgTCM_Situation_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TisTpgTCM_Location_sequence[] = {
+ { &hf_tistpg_tpgLocation , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_ReferencePosition },
+ { &hf_tistpg_address , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_UTF8String_SIZE_1_128 },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgTCM_Location(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgTCM_Location, tistpg_TisTpgTCM_Location_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TisTpgTCM_sequence[] = {
+ { &hf_tistpg_tcmManagement, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_TisTpgTCM_Management },
+ { &hf_tistpg_tcmSituation , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_TisTpgTCM_Situation },
+ { &hf_tistpg_tcmLocation , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_TisTpgTCM_Location },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgTCM(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgTCM, tistpg_TisTpgTCM_sequence);
+
+ return offset;
+}
+
+
+static const value_string tistpg_FillingStatus_vals[] = {
+ { 0, "requestVehicleData" },
+ { 1, "sendVehicleData" },
+ { 2, "started" },
+ { 3, "fillingProcessFailed" },
+ { 4, "fillingProcessCompleted" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_tistpg_FillingStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 7U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TisTpgVDRM_Management_sequence[] = {
+ { &hf_tistpg_generationTime, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_TimestampIts },
+ { &hf_tistpg_fillingStatus, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_FillingStatus },
+ { &hf_tistpg_automationLevel, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_TpgAutomation },
+ { &hf_tistpg_pairingID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_PairingID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgVDRM_Management(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgVDRM_Management, tistpg_TisTpgVDRM_Management_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TisTpgVDRM_sequence[] = {
+ { &hf_tistpg_vdrmManagement, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_TisTpgVDRM_Management },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgVDRM(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgVDRM, tistpg_TisTpgVDRM_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_Language(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 10, 10, FALSE, NULL, NULL);
+
+ return offset;
+}
+
+
+static const value_string tistpg_TyreTempCondition_vals[] = {
+ { 0, "pressure-cold" },
+ { 1, "pressure-warm" },
+ { 2, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_tistpg_TyreTempCondition(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 3, NULL, TRUE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TisTpgVDPM_Management_sequence[] = {
+ { &hf_tistpg_generationTime, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_TimestampIts },
+ { &hf_tistpg_tisProfile , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_TisProfile },
+ { &hf_tistpg_language , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_Language },
+ { &hf_tistpg_vehicleType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_UNVehicleClassifcation },
+ { &hf_tistpg_tyreTempCondition, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_TyreTempCondition },
+ { &hf_tistpg_fillingStatus, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_FillingStatus },
+ { &hf_tistpg_pairingID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_PairingID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgVDPM_Management(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgVDPM_Management, tistpg_TisTpgVDPM_Management_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_TyreSetVariantID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 15U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_TyreSidewallInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 60, 60, FALSE, NULL, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_PressureConfiguration(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 9, 9, FALSE, NULL, NULL);
+
+ return offset;
+}
+
+
+static const value_string tistpg_AxlePlacardPressure_vals[] = {
+ { 0, "zero" },
+ { 1, "fiveKPa" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_tistpg_AxlePlacardPressure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_PressureVariant_sequence[] = {
+ { &hf_tistpg_pressureConfiguration, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tistpg_PressureConfiguration },
+ { &hf_tistpg_frontAxlePressure, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tistpg_AxlePlacardPressure },
+ { &hf_tistpg_rearAxlePressure, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tistpg_AxlePlacardPressure },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_PressureVariant(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_PressureVariant, tistpg_PressureVariant_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_PressureVariantsList_sequence_of[1] = {
+ { &hf_tistpg_PressureVariantsList_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tistpg_PressureVariant },
+};
+
+static int
+dissect_tistpg_PressureVariantsList(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_PressureVariantsList, tistpg_PressureVariantsList_sequence_of,
+ 1, 15, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TyreSetVariant_sequence[] = {
+ { &hf_tistpg_variantID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tistpg_TyreSetVariantID },
+ { &hf_tistpg_frontAxleDimension, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_tistpg_TyreSidewallInformation },
+ { &hf_tistpg_rearAxleDimension, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_tistpg_TyreSidewallInformation },
+ { &hf_tistpg_pressureVariantsList, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tistpg_PressureVariantsList },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TyreSetVariant(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TyreSetVariant, tistpg_TyreSetVariant_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_PlacardTable_sequence_of[1] = {
+ { &hf_tistpg_PlacardTable_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tistpg_TyreSetVariant },
+};
+
+static int
+dissect_tistpg_PlacardTable(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_PlacardTable, tistpg_PlacardTable_sequence_of,
+ 0, 15, FALSE);
+
+ return offset;
+}
+
+
+static const value_string tistpg_TyrePressure_vals[] = {
+ { 0, "invalid" },
+ { 1, "lessThanOneBar" },
+ { 2, "oneBar" },
+ { 3, "oneBarPlusTwoAndHalfKPa" },
+ { 254, "inflation" },
+ { 255, "overflow" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_tistpg_TyrePressure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
+
+ return offset;
+}
+
+
+static const value_string tistpg_T_currentTyrePressure_vals[] = {
+ { 0, "tyrePressureValue" },
+ { 1, "unavailable" },
+ { 0, NULL }
+};
+
+static const per_choice_t tistpg_T_currentTyrePressure_choice[] = {
+ { 0, &hf_tistpg_tyrePressureValue, ASN1_NO_EXTENSIONS , dissect_tistpg_TyrePressure },
+ { 1, &hf_tistpg_unavailable , ASN1_NO_EXTENSIONS , dissect_tistpg_NULL },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_tistpg_T_currentTyrePressure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_T_currentTyrePressure, tistpg_T_currentTyrePressure_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string tistpg_T_tyreSidewallInformation_vals[] = {
+ { 0, "tyreSidewallInformationValue" },
+ { 1, "unavailable" },
+ { 0, NULL }
+};
+
+static const per_choice_t tistpg_T_tyreSidewallInformation_choice[] = {
+ { 0, &hf_tistpg_tyreSidewallInformationValue, ASN1_NO_EXTENSIONS , dissect_tistpg_TyreSidewallInformation },
+ { 1, &hf_tistpg_unavailable , ASN1_NO_EXTENSIONS , dissect_tistpg_NULL },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_tistpg_T_tyreSidewallInformation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_T_tyreSidewallInformation, tistpg_T_tyreSidewallInformation_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string tistpg_TyreAirTemperature_vals[] = {
+ { 0, "invalid" },
+ { 1, "lessThanMinus50Celsius" },
+ { 2, "minus50Celsius" },
+ { 3, "minus49Celsius" },
+ { 52, "zeroCelsius" },
+ { 240, "overflowThreshold1" },
+ { 241, "overflowThreshold2" },
+ { 242, "overflowThreshold3" },
+ { 243, "overflowThreshold4" },
+ { 244, "overflowThreshold5" },
+ { 245, "overflowThreshold6" },
+ { 246, "overflowThreshold7" },
+ { 247, "overflowThreshold8" },
+ { 248, "overflowThreshold9" },
+ { 249, "overflowThreshold10" },
+ { 250, "overflowThreshold11" },
+ { 251, "overflowThreshold12" },
+ { 252, "overflowThreshold13" },
+ { 253, "overflowThreshold14" },
+ { 254, "overflowThreshold15" },
+ { 255, "overflowThreshold16" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_tistpg_TyreAirTemperature(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 255U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string tistpg_T_currentInsideAirTemperature_vals[] = {
+ { 0, "tyreAirTemperatureValue" },
+ { 1, "unavailable" },
+ { 0, NULL }
+};
+
+static const per_choice_t tistpg_T_currentInsideAirTemperature_choice[] = {
+ { 0, &hf_tistpg_tyreAirTemperatureValue, ASN1_NO_EXTENSIONS , dissect_tistpg_TyreAirTemperature },
+ { 1, &hf_tistpg_unavailable , ASN1_NO_EXTENSIONS , dissect_tistpg_NULL },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_tistpg_T_currentInsideAirTemperature(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_T_currentInsideAirTemperature, tistpg_T_currentInsideAirTemperature_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string tistpg_T_recommendedTyrePressure_vals[] = {
+ { 0, "axlePlacardPressureValue" },
+ { 1, "unavailable" },
+ { 0, NULL }
+};
+
+static const per_choice_t tistpg_T_recommendedTyrePressure_choice[] = {
+ { 0, &hf_tistpg_axlePlacardPressureValue, ASN1_NO_EXTENSIONS , dissect_tistpg_AxlePlacardPressure },
+ { 1, &hf_tistpg_unavailable , ASN1_NO_EXTENSIONS , dissect_tistpg_NULL },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_tistpg_T_recommendedTyrePressure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_T_recommendedTyrePressure, tistpg_T_recommendedTyrePressure_choice,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_tistpg_TIN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 64, 64, FALSE, NULL, NULL);
+
+ return offset;
+}
+
+
+static const value_string tistpg_T_tin_vals[] = {
+ { 0, "tinValue" },
+ { 1, "unavailable" },
+ { 0, NULL }
+};
+
+static const per_choice_t tistpg_T_tin_choice[] = {
+ { 0, &hf_tistpg_tinValue , ASN1_NO_EXTENSIONS , dissect_tistpg_TIN },
+ { 1, &hf_tistpg_unavailable , ASN1_NO_EXTENSIONS , dissect_tistpg_NULL },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_tistpg_T_tin(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_T_tin, tistpg_T_tin_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const value_string tistpg_SensorState_vals[] = {
+ { 65534, "malfunction" },
+ { 65535, "unavailable" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_tistpg_SensorState(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 65535U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string tistpg_T_sensorState_vals[] = {
+ { 0, "sensorStateValue" },
+ { 1, "unavailable" },
+ { 0, NULL }
+};
+
+static const per_choice_t tistpg_T_sensorState_choice[] = {
+ { 0, &hf_tistpg_sensorStateValue, ASN1_NO_EXTENSIONS , dissect_tistpg_SensorState },
+ { 1, &hf_tistpg_unavailable , ASN1_NO_EXTENSIONS , dissect_tistpg_NULL },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_tistpg_T_sensorState(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_T_sensorState, tistpg_T_sensorState_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TyreData_sequence[] = {
+ { &hf_tistpg_currentTyrePressure, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_T_currentTyrePressure },
+ { &hf_tistpg_tyreSidewallInformation, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_T_tyreSidewallInformation },
+ { &hf_tistpg_currentInsideAirTemperature, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_T_currentInsideAirTemperature },
+ { &hf_tistpg_recommendedTyrePressure, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_T_recommendedTyrePressure },
+ { &hf_tistpg_tin , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_T_tin },
+ { &hf_tistpg_sensorState , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_T_sensorState },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TyreData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TyreData, tistpg_TyreData_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_VehicleSpecificData_sequence[] = {
+ { &hf_tistpg_currentVehicleConfiguration, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_PressureConfiguration },
+ { &hf_tistpg_frontLeftTyreData, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_TyreData },
+ { &hf_tistpg_frontRightTyreData, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_TyreData },
+ { &hf_tistpg_rearLeftTyreData, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_TyreData },
+ { &hf_tistpg_rearRightTyreData, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_TyreData },
+ { &hf_tistpg_spareTyreData, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_TyreData },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_VehicleSpecificData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_VehicleSpecificData, tistpg_VehicleSpecificData_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TisTpgVDPM_sequence[] = {
+ { &hf_tistpg_vdpmManagement, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_TisTpgVDPM_Management },
+ { &hf_tistpg_placardTable , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_PlacardTable },
+ { &hf_tistpg_vehicleSpecificData, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_VehicleSpecificData },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgVDPM(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgVDPM, tistpg_TisTpgVDPM_sequence);
+
+ return offset;
+}
+
+
+static const value_string tistpg_NumberOfAppliedPressure_vals[] = {
+ { 1, "oneAppliedPressure" },
+ { 2, "twoAppliedPressure" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_tistpg_NumberOfAppliedPressure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 5U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string tistpg_AppliedTyrePressure_vals[] = {
+ { 0, "tyrePressureValue" },
+ { 1, "unavailable" },
+ { 0, NULL }
+};
+
+static const per_choice_t tistpg_AppliedTyrePressure_choice[] = {
+ { 0, &hf_tistpg_tyrePressureValue, ASN1_NO_EXTENSIONS , dissect_tistpg_TyrePressure },
+ { 1, &hf_tistpg_unavailable , ASN1_NO_EXTENSIONS , dissect_tistpg_NULL },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_tistpg_AppliedTyrePressure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_AppliedTyrePressure, tistpg_AppliedTyrePressure_choice,
+ NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_AppliedTyrePressures_sequence_of[1] = {
+ { &hf_tistpg_AppliedTyrePressures_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_tistpg_AppliedTyrePressure },
+};
+
+static int
+dissect_tistpg_AppliedTyrePressures(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_AppliedTyrePressures, tistpg_AppliedTyrePressures_sequence_of,
+ 1, 5, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TisTpgEOFM_Management_sequence[] = {
+ { &hf_tistpg_generationTime, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_TimestampIts },
+ { &hf_tistpg_fillingStatus, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_FillingStatus },
+ { &hf_tistpg_numberOfAppliedPressure, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_NumberOfAppliedPressure },
+ { &hf_tistpg_appliedTyrePressures, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_AppliedTyrePressures },
+ { &hf_tistpg_pairingID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_tistpg_PairingID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgEOFM_Management(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgEOFM_Management, tistpg_TisTpgEOFM_Management_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t tistpg_TisTpgEOFM_sequence[] = {
+ { &hf_tistpg_eofmManagement, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_tistpg_TisTpgEOFM_Management },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgEOFM(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgEOFM, tistpg_TisTpgEOFM_sequence);
+
+ return offset;
+}
+
+
+static const value_string tistpg_TisTpgTransaction_vals[] = {
+ { 0, "drm" },
+ { 1, "snm" },
+ { 2, "trm" },
+ { 3, "tcm" },
+ { 4, "vdrm" },
+ { 5, "vdpm" },
+ { 6, "eofm" },
+ { 0, NULL }
+};
+
+static const per_choice_t tistpg_TisTpgTransaction_choice[] = {
+ { 0, &hf_tistpg_drm , ASN1_NO_EXTENSIONS , dissect_tistpg_TisTpgDRM },
+ { 1, &hf_tistpg_snm , ASN1_NO_EXTENSIONS , dissect_tistpg_TisTpgSNM },
+ { 2, &hf_tistpg_trm , ASN1_NO_EXTENSIONS , dissect_tistpg_TisTpgTRM },
+ { 3, &hf_tistpg_tcm , ASN1_NO_EXTENSIONS , dissect_tistpg_TisTpgTCM },
+ { 4, &hf_tistpg_vdrm , ASN1_NO_EXTENSIONS , dissect_tistpg_TisTpgVDRM },
+ { 5, &hf_tistpg_vdpm , ASN1_NO_EXTENSIONS , dissect_tistpg_TisTpgVDPM },
+ { 6, &hf_tistpg_eofm , ASN1_NO_EXTENSIONS , dissect_tistpg_TisTpgEOFM },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_tistpg_TisTpgTransaction(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 296 "./asn1/its/its.cnf"
+ actx->private_data = (void*)wmem_new0(wmem_packet_scope(), its_private_data_t);
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "TISTPG");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "TISTPG");
+
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_tistpg_TisTpgTransaction, tistpg_TisTpgTransaction_choice,
+ NULL);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_tistpg_TisTpgTransaction_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ offset = dissect_tistpg_TisTpgTransaction(tvb, offset, &asn1_ctx, tree, hf_tistpg_tistpg_TisTpgTransaction_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
+
+/* --- Module EVCSN-PDU-Descriptions --- --- --- */
+
+
+
+static int
+dissect_evcsn_POIType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 65535U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_evcsn_BOOLEAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t evcsn_ItsPOIHeader_sequence[] = {
+ { &hf_evcsn_poiType , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_evcsn_POIType },
+ { &hf_evcsn_timeStamp , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_its_TimestampIts },
+ { &hf_evcsn_relayCapable , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_evcsn_BOOLEAN },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_evcsn_ItsPOIHeader(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_evcsn_ItsPOIHeader, evcsn_ItsPOIHeader_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_evcsn_NumberStations(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 256U, NULL, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_evcsn_UTF8String_SIZE_1_32(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_UTF8String(tvb, offset, actx, tree, hf_index,
+ 1, 32, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_evcsn_UTF8String(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_UTF8String(tvb, offset, actx, tree, hf_index,
+ NO_BOUND, NO_BOUND, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_evcsn_NumericString_SIZE_1_16(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_NumericString(tvb, offset, actx, tree, hf_index,
+ 1, 16, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_evcsn_ChargingSpotType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 616 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ NO_BOUND, NO_BOUND, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields0[] = { // CHECKED
+ &hf_evcsn_ChargingSpotType_standardChargeMode1,
+ &hf_evcsn_ChargingSpotType_standardChargeMode2,
+ &hf_evcsn_ChargingSpotType_standardOrFastChargeMode3,
+ &hf_evcsn_ChargingSpotType_fastChargeWithExternalCharger,
+ NULL
+ };
+ const gint *fields1[] = { // CHECKED
+ &hf_evcsn_ChargingSpotType_quickDrop,
+ &hf_evcsn_ChargingSpotType_inductiveChargeWhileStationary,
+ &hf_evcsn_ChargingSpotType_inductiveChargeWhileDriving,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_evcsn_ChargingSpotType);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields0, ENC_BIG_ENDIAN);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 1, 1, fields1, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_evcsn_TypeOfReceptacle(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 1113 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ int len;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ NO_BOUND, NO_BOUND, FALSE, &parameter_tvb, &len);
+
+ /* TODO Provide values?
+ * See ETSI TS 101 556-1 V1.1.1 Annex B Description for data elements
+ * Table B.2: Coding of the type of receptacle field
+ *
+ * Code Charging Standard plug / Type of Nb of Maximum Maximum
+ * spot type cable current phases Voltage Current
+ * -------------------------------------------------------------------------
+ * 0000 Socket IEC 62196-2 type 1 AC Single 240V 16A
+ * 0001 Socket IEC 62196-2 type 1 AC Single 240V 32A
+ * 0010 Socket IEC 62196-2 type 1 AC Single 240V 80A
+ * 0011 Socket IEC 62196-2 type 1 AC Single 120V 12A
+ * 0100 Socket IEC 62196-2 type 1 AC Single 120V 16A
+ * 0101 Socket Standard Household AC Single 250V 16A
+ * 0110 Socket Standard Household AC Single 480V 16A
+ * 0111 Socket IEC 62196-2 type 2 AC Single 230V 16A
+ * 1000 Socket IEC 62196-2 type 2 AC Single 250V 32A
+ * 1001 Socket IEC 62196-2 type 2 AC Single 480V 32A
+ * 1010 Socket IEC 62196-2 type 2 AC Single 400V 32/250A
+ * 1011 Socket IEC 62196-2 type 3A AC Single 250V 32A
+ * 1100 Socket IEC 62196-2 type 3B AC Single 480V 32A
+ * 1101 Socket Reserved for Future AC Single 1000V 400A
+ IEC 62196-3
+ * 1110 Cable for Reserved
+ DC charging
+ * 1111 Cable for Reserved
+ DC charging
+ */
+
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_evcsn_INTEGER_0_1400(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 1400U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t evcsn_SpotAvailability_sequence[] = {
+ { &hf_evcsn_maxWaitingTimeMinutes, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_evcsn_INTEGER_0_1400 },
+ { &hf_evcsn_blocking , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_evcsn_BOOLEAN },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_evcsn_SpotAvailability(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_evcsn_SpotAvailability, evcsn_SpotAvailability_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t evcsn_ParkingPlacesData_sequence_of[1] = {
+ { &hf_evcsn_ParkingPlacesData_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_evcsn_SpotAvailability },
+};
+
+static int
+dissect_evcsn_ParkingPlacesData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_evcsn_ParkingPlacesData, evcsn_ParkingPlacesData_sequence_of,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t evcsn_ItsChargingSpotDataElements_sequence[] = {
+ { &hf_evcsn_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_evcsn_ChargingSpotType },
+ { &hf_evcsn_evEquipmentID , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_evcsn_UTF8String },
+ { &hf_evcsn_typeOfReceptacle, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_evcsn_TypeOfReceptacle },
+ { &hf_evcsn_energyAvailability, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_evcsn_UTF8String },
+ { &hf_evcsn_parkingPlacesData, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_evcsn_ParkingPlacesData },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_evcsn_ItsChargingSpotDataElements(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_evcsn_ItsChargingSpotDataElements, evcsn_ItsChargingSpotDataElements_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t evcsn_ItsChargingSpots_sequence_of[1] = {
+ { &hf_evcsn_ItsChargingSpots_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_evcsn_ItsChargingSpotDataElements },
+};
+
+static int
+dissect_evcsn_ItsChargingSpots(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_evcsn_ItsChargingSpots, evcsn_ItsChargingSpots_sequence_of,
+ 1, 16, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t evcsn_ItsChargingStationData_sequence[] = {
+ { &hf_evcsn_chargingStationID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_StationID },
+ { &hf_evcsn_utilityDistributorId, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_evcsn_UTF8String_SIZE_1_32 },
+ { &hf_evcsn_providerID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_evcsn_UTF8String_SIZE_1_32 },
+ { &hf_evcsn_chargingStationLocation, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_its_ReferencePosition },
+ { &hf_evcsn_address , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_evcsn_UTF8String },
+ { &hf_evcsn_phoneNumber , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_evcsn_NumericString_SIZE_1_16 },
+ { &hf_evcsn_accessibility , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evcsn_UTF8String_SIZE_1_32 },
+ { &hf_evcsn_digitalMap , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_its_DigitalMap },
+ { &hf_evcsn_openingDaysHours, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evcsn_UTF8String },
+ { &hf_evcsn_pricing , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evcsn_UTF8String },
+ { &hf_evcsn_bookingContactInfo, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_evcsn_UTF8String },
+ { &hf_evcsn_payment , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_evcsn_UTF8String },
+ { &hf_evcsn_chargingSpotsAvailable, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evcsn_ItsChargingSpots },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_evcsn_ItsChargingStationData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_evcsn_ItsChargingStationData, evcsn_ItsChargingStationData_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t evcsn_SEQUENCE_SIZE_1_256_OF_ItsChargingStationData_sequence_of[1] = {
+ { &hf_evcsn_chargingStationsData_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_evcsn_ItsChargingStationData },
+};
+
+static int
+dissect_evcsn_SEQUENCE_SIZE_1_256_OF_ItsChargingStationData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
+ ett_evcsn_SEQUENCE_SIZE_1_256_OF_ItsChargingStationData, evcsn_SEQUENCE_SIZE_1_256_OF_ItsChargingStationData_sequence_of,
+ 1, 256, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t evcsn_ItsEVCSNData_sequence[] = {
+ { &hf_evcsn_totalNumberOfStations, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_evcsn_NumberStations },
+ { &hf_evcsn_chargingStationsData, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_evcsn_SEQUENCE_SIZE_1_256_OF_ItsChargingStationData },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_evcsn_ItsEVCSNData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_evcsn_ItsEVCSNData, evcsn_ItsEVCSNData_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t evcsn_EVChargingSpotNotificationPOIMessage_sequence[] = {
+ { &hf_evcsn_poiHeader , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_evcsn_ItsPOIHeader },
+ { &hf_evcsn_evcsnData , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_evcsn_ItsEVCSNData },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_evcsn_EVChargingSpotNotificationPOIMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 284 "./asn1/its/its.cnf"
+ actx->private_data = (void*)wmem_new0(wmem_packet_scope(), its_private_data_t);
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "EVCSN");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "EVCSN");
+
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_evcsn_EVChargingSpotNotificationPOIMessage, evcsn_EVChargingSpotNotificationPOIMessage_sequence);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_evcsn_EVChargingSpotNotificationPOIMessage_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ offset = dissect_evcsn_EVChargingSpotNotificationPOIMessage(tvb, offset, &asn1_ctx, tree, hf_evcsn_evcsn_EVChargingSpotNotificationPOIMessage_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
+
+/* --- Module EV-RechargingSpotReservation-PDU-Descriptions --- --- --- */
+
+
+
+static int
+dissect_evrsr_EVSE_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
+ 1, 32, FALSE, NULL);
+
+ return offset;
+}
+
+
+static const value_string evrsr_TimestampUTC_vals[] = {
+ { 0, "utcStartOf2013" },
+ { 1, "oneSecondAfterUTCStartOf2013" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_evrsr_TimestampUTC(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
+
+ return offset;
+}
+
+
+static const value_string evrsr_RechargingMode_vals[] = {
+ { 0, "mode1" },
+ { 1, "mode2" },
+ { 2, "mode3" },
+ { 3, "mode4" },
+ { 8, "quickDrop" },
+ { 12, "inductiveChargingWhileStationary" },
+ { 14, "inductiveChargingWhileDriving" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_evrsr_RechargingMode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 15U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string evrsr_PowerSource_vals[] = {
+ { 0, "notApplicable" },
+ { 1, "ac1Phase" },
+ { 2, "ac2Phase" },
+ { 3, "ac3Phase" },
+ { 4, "dcc" },
+ { 5, "chaDeMo" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_evrsr_PowerSource(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 0U, 7U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t evrsr_RechargingType_sequence[] = {
+ { &hf_evrsr_rechargingMode, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_evrsr_RechargingMode },
+ { &hf_evrsr_powerSource , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_evrsr_PowerSource },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_evrsr_RechargingType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_evrsr_RechargingType, evrsr_RechargingType_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_evrsr_BatteryType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_UTF8String(tvb, offset, actx, tree, hf_index,
+ 1, 16, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t evrsr_PreReservationRequestMessage_sequence[] = {
+ { &hf_evrsr_evse_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_EVSE_ID },
+ { &hf_evrsr_arrivalTime , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_TimestampUTC },
+ { &hf_evrsr_departureTime , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_evrsr_TimestampUTC },
+ { &hf_evrsr_rechargingType, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_RechargingType },
+ { &hf_evrsr_batteryType , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_evrsr_BatteryType },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_evrsr_PreReservationRequestMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_evrsr_PreReservationRequestMessage, evrsr_PreReservationRequestMessage_sequence);
+
+ return offset;
+}
+
+
+
+static int
+dissect_evrsr_Reservation_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_VisibleString(tvb, offset, actx, tree, hf_index,
+ 8, 8, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_evrsr_PreReservation_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_evrsr_Reservation_ID(tvb, offset, actx, tree, hf_index);
+
+ return offset;
+}
+
+
+static const value_string evrsr_AvailabilityStatus_vals[] = {
+ { 0, "available" },
+ { 1, "no-free-capacity" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_evrsr_AvailabilityStatus(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 2, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_evrsr_SupportedPaymentTypes(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 638 "./asn1/its/its.cnf"
+ tvbuff_t *parameter_tvb = NULL;
+ offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
+ 2, 2, FALSE, &parameter_tvb, NULL);
+
+ if (parameter_tvb) {
+ const gint *fields[] = { // CHECKED
+ &hf_evrsr_SupportedPaymentTypes_contract,
+ &hf_evrsr_SupportedPaymentTypes_externalIdentification,
+ NULL
+ };
+ proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_evrsr_SupportedPaymentTypes);
+ proto_tree_add_bitmask_list(subtree, parameter_tvb, 0, 1, fields, ENC_BIG_ENDIAN);
+ }
+
+
+
+ return offset;
+}
+
+
+static const per_sequence_t evrsr_PreReservationResponseMessage_sequence[] = {
+ { &hf_evrsr_preReservation_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_PreReservation_ID },
+ { &hf_evrsr_availabilityStatus, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_AvailabilityStatus },
+ { &hf_evrsr_preReservationExpirationTime, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_TimestampUTC },
+ { &hf_evrsr_supportedPaymentTypes, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_SupportedPaymentTypes },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_evrsr_PreReservationResponseMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_evrsr_PreReservationResponseMessage, evrsr_PreReservationResponseMessage_sequence);
+
+ return offset;
+}
+
+
+static const value_string evrsr_EAmount_vals[] = {
+ { 1, "oneWh" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_evrsr_EAmount(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
+ 1U, 500000U, NULL, FALSE);
+
+ return offset;
+}
+
+
+static const value_string evrsr_PaymentType_vals[] = {
+ { 0, "contract" },
+ { 1, "externalIdentification" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_evrsr_PaymentType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 2, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_evrsr_ContractID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_UTF8String(tvb, offset, actx, tree, hf_index,
+ 1, 24, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_evrsr_ExternalIdentificationMeans(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_UTF8String(tvb, offset, actx, tree, hf_index,
+ 1, 24, FALSE);
+
+ return offset;
+}
+
+
+static const value_string evrsr_Payment_ID_vals[] = {
+ { 0, "contractID" },
+ { 1, "externalIdentificationMeans" },
+ { 0, NULL }
+};
+
+static const per_choice_t evrsr_Payment_ID_choice[] = {
+ { 0, &hf_evrsr_contractID , ASN1_NO_EXTENSIONS , dissect_evrsr_ContractID },
+ { 1, &hf_evrsr_externalIdentificationMeans, ASN1_NO_EXTENSIONS , dissect_evrsr_ExternalIdentificationMeans },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_evrsr_Payment_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_evrsr_Payment_ID, evrsr_Payment_ID_choice,
+ NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_evrsr_Pairing_ID(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_VisibleString(tvb, offset, actx, tree, hf_index,
+ 1, 64, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t evrsr_ReservationRequestMessage_sequence[] = {
+ { &hf_evrsr_currentTime , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_TimestampUTC },
+ { &hf_evrsr_preReservation_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_PreReservation_ID },
+ { &hf_evrsr_arrivalTime , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_TimestampUTC },
+ { &hf_evrsr_departureTime , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_evrsr_TimestampUTC },
+ { &hf_evrsr_eAmount , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_EAmount },
+ { &hf_evrsr_eAmountMin , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_EAmount },
+ { &hf_evrsr_paymentType , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_PaymentType },
+ { &hf_evrsr_payment_ID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_Payment_ID },
+ { &hf_evrsr_secondPayment_ID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_evrsr_Payment_ID },
+ { &hf_evrsr_pairing_ID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_evrsr_Pairing_ID },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_evrsr_ReservationRequestMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_evrsr_ReservationRequestMessage, evrsr_ReservationRequestMessage_sequence);
+
+ return offset;
+}
+
+
+static const value_string evrsr_ReservationResponseCode_vals[] = {
+ { 0, "ok" },
+ { 1, "invalid-EVSE-ID" },
+ { 2, "payment-type-not-supported" },
+ { 3, "payment-error" },
+ { 4, "authentication-error" },
+ { 5, "insufficient-power-availability" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_evrsr_ReservationResponseCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 6, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+
+static int
+dissect_evrsr_Reservation_Password(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_VisibleString(tvb, offset, actx, tree, hf_index,
+ 8, 8, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_evrsr_StationDetails(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_UTF8String(tvb, offset, actx, tree, hf_index,
+ 1, 32, FALSE);
+
+ return offset;
+}
+
+
+
+static int
+dissect_evrsr_ChargingSpotLabel(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_UTF8String(tvb, offset, actx, tree, hf_index,
+ 1, 4, FALSE);
+
+ return offset;
+}
+
+
+static const per_sequence_t evrsr_ReservationResponseMessage_sequence[] = {
+ { &hf_evrsr_reservationResponseCode, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_ReservationResponseCode },
+ { &hf_evrsr_reservation_ID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_evrsr_Reservation_ID },
+ { &hf_evrsr_reservation_Password, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_evrsr_Reservation_Password },
+ { &hf_evrsr_stationDetails, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_evrsr_StationDetails },
+ { &hf_evrsr_chargingSpotLabel, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_evrsr_ChargingSpotLabel },
+ { &hf_evrsr_expirationTime, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_TimestampUTC },
+ { &hf_evrsr_freeCancelTimeLimit, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_evrsr_TimestampUTC },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_evrsr_ReservationResponseMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_evrsr_ReservationResponseMessage, evrsr_ReservationResponseMessage_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t evrsr_CancellationRequestMessage_sequence[] = {
+ { &hf_evrsr_reservation_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_Reservation_ID },
+ { &hf_evrsr_reservation_Password, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_Reservation_Password },
+ { &hf_evrsr_currentTime , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_TimestampUTC },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_evrsr_CancellationRequestMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_evrsr_CancellationRequestMessage, evrsr_CancellationRequestMessage_sequence);
+
+ return offset;
+}
+
+
+static const value_string evrsr_CancellationResponseCode_vals[] = {
+ { 0, "ok" },
+ { 1, "unknown-Reservation-ID" },
+ { 2, "mismatching-Reservation-Password" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_evrsr_CancellationResponseCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 3, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t evrsr_CancellationResponseMessage_sequence[] = {
+ { &hf_evrsr_reservation_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_Reservation_ID },
+ { &hf_evrsr_cancellationResponseCode, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_CancellationResponseCode },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_evrsr_CancellationResponseMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_evrsr_CancellationResponseMessage, evrsr_CancellationResponseMessage_sequence);
+
+ return offset;
+}
+
+
+static const per_sequence_t evrsr_UpdateRequestMessage_sequence[] = {
+ { &hf_evrsr_reservation_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_Reservation_ID },
+ { &hf_evrsr_reservation_Password, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_Reservation_Password },
+ { &hf_evrsr_updatedArrivalTime, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_TimestampUTC },
+ { &hf_evrsr_updatedDepartureTime, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_TimestampUTC },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_evrsr_UpdateRequestMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_evrsr_UpdateRequestMessage, evrsr_UpdateRequestMessage_sequence);
+
+ return offset;
+}
+
+
+static const value_string evrsr_UpdateResponseCode_vals[] = {
+ { 0, "ok" },
+ { 1, "unknown-Reservation-ID" },
+ { 2, "mismatching-Reservation-Password" },
+ { 3, "invalid-Arrival-Time" },
+ { 4, "invalid-Departure-Time" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_evrsr_UpdateResponseCode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_enumerated(tvb, offset, actx, tree, hf_index,
+ 5, NULL, FALSE, 0, NULL);
+
+ return offset;
+}
+
+
+static const per_sequence_t evrsr_UpdateResponseMessage_sequence[] = {
+ { &hf_evrsr_reservation_ID, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_Reservation_ID },
+ { &hf_evrsr_updateResponseCode, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_evrsr_UpdateResponseCode },
+ { &hf_evrsr_chargingSpotLabel, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_evrsr_ChargingSpotLabel },
+ { NULL, 0, 0, NULL }
+};
+
+static int
+dissect_evrsr_UpdateResponseMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+ offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
+ ett_evrsr_UpdateResponseMessage, evrsr_UpdateResponseMessage_sequence);
+
+ return offset;
+}
+
+
+static const value_string evrsr_EV_RSR_MessageBody_vals[] = {
+ { 0, "preReservationRequestMessage" },
+ { 1, "preReservationResponseMessage" },
+ { 2, "reservationRequestMessage" },
+ { 3, "reservationResponseMessage" },
+ { 4, "cancellationRequestMessage" },
+ { 5, "cancellationResponseMessage" },
+ { 6, "updateRequestMessage" },
+ { 7, "updateResponseMessage" },
+ { 0, NULL }
+};
+
+static const per_choice_t evrsr_EV_RSR_MessageBody_choice[] = {
+ { 0, &hf_evrsr_preReservationRequestMessage, ASN1_EXTENSION_ROOT , dissect_evrsr_PreReservationRequestMessage },
+ { 1, &hf_evrsr_preReservationResponseMessage, ASN1_EXTENSION_ROOT , dissect_evrsr_PreReservationResponseMessage },
+ { 2, &hf_evrsr_reservationRequestMessage, ASN1_EXTENSION_ROOT , dissect_evrsr_ReservationRequestMessage },
+ { 3, &hf_evrsr_reservationResponseMessage, ASN1_EXTENSION_ROOT , dissect_evrsr_ReservationResponseMessage },
+ { 4, &hf_evrsr_cancellationRequestMessage, ASN1_EXTENSION_ROOT , dissect_evrsr_CancellationRequestMessage },
+ { 5, &hf_evrsr_cancellationResponseMessage, ASN1_EXTENSION_ROOT , dissect_evrsr_CancellationResponseMessage },
+ { 6, &hf_evrsr_updateRequestMessage, ASN1_EXTENSION_ROOT , dissect_evrsr_UpdateRequestMessage },
+ { 7, &hf_evrsr_updateResponseMessage, ASN1_EXTENSION_ROOT , dissect_evrsr_UpdateResponseMessage },
+ { 0, NULL, 0, NULL }
+};
+
+static int
+dissect_evrsr_EV_RSR_MessageBody(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 290 "./asn1/its/its.cnf"
+ actx->private_data = (void*)wmem_new0(wmem_packet_scope(), its_private_data_t);
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "EV-RSR");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "EV-RSR");
+
+ offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
+ ett_evrsr_EV_RSR_MessageBody, evrsr_EV_RSR_MessageBody_choice,
+ NULL);
+
+ return offset;
+}
+
+/*--- PDUs ---*/
+
+static int dissect_evrsr_EV_RSR_MessageBody_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+ int offset = 0;
+ asn1_ctx_t asn1_ctx;
+ asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, FALSE, pinfo);
+ offset = dissect_evrsr_EV_RSR_MessageBody(tvb, offset, &asn1_ctx, tree, hf_evrsr_evrsr_EV_RSR_MessageBody_PDU);
+ offset += 7; offset >>= 3;
+ return offset;
+}
+
+
+/*--- End of included file: packet-its-fn.c ---*/
+#line 219 "./asn1/its/packet-its-template.c"
+
+static int
+dissect_its_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
+{
+ proto_item *its_item;
+ proto_tree *its_tree;
+
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "ITS");
+ col_clear(pinfo->cinfo, COL_INFO);
+
+ its_item = proto_tree_add_item(tree, proto_its, tvb, 0, -1, ENC_NA);
+ its_tree = proto_item_add_subtree(its_item, ett_its);
+
+ return dissect_its_ItsPduHeader_PDU(tvb, pinfo, its_tree, data);
+}
+
+// Decode As...
+static void
+its_msgid_prompt(packet_info *pinfo, gchar *result)
+{
+ guint32 msgid = GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, hf_its_messageID, pinfo->curr_layer_num));
+
+ g_snprintf(result, MAX_DECODE_AS_PROMPT_LEN, "MsgId (%s%u)", UTF8_RIGHTWARDS_ARROW, msgid);
+}
+
+static gpointer
+its_msgid_value(packet_info *pinfo)
+{
+ return p_get_proto_data(pinfo->pool, pinfo, hf_its_messageID, pinfo->curr_layer_num);
+}
+
+// Registration of protocols
+void proto_register_its(void)
+{
+ static hf_register_info hf_its[] = {
+
+/*--- Included file: packet-its-hfarr.c ---*/
+#line 1 "./asn1/its/packet-its-hfarr.c"
+
+/* --- Module ITS-Container --- --- --- */
+
+ { &hf_its_its_ItsPduHeader_PDU,
+ { "ItsPduHeader", "its.ItsPduHeader_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_its_protocolVersion,
+ { "protocolVersion", "its.protocolVersion",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_its_messageID,
+ { "messageID", "its.messageID",
+ FT_UINT32, BASE_DEC, VALS(its_T_messageID_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_stationID,
+ { "stationID", "its.stationID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_its_latitude,
+ { "latitude", "its.latitude",
+ FT_INT32, BASE_DEC, VALS(its_Latitude_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_longitude,
+ { "longitude", "its.longitude",
+ FT_INT32, BASE_DEC, VALS(its_Longitude_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_positionConfidenceEllipse,
+ { "positionConfidenceEllipse", "its.positionConfidenceEllipse_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PosConfidenceEllipse", HFILL }},
+ { &hf_its_altitude,
+ { "altitude", "its.altitude_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_its_deltaLatitude,
+ { "deltaLatitude", "its.deltaLatitude",
+ FT_INT32, BASE_DEC, VALS(its_DeltaLatitude_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_deltaLongitude,
+ { "deltaLongitude", "its.deltaLongitude",
+ FT_INT32, BASE_DEC, VALS(its_DeltaLongitude_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_deltaAltitude,
+ { "deltaAltitude", "its.deltaAltitude",
+ FT_INT32, BASE_DEC, VALS(its_DeltaAltitude_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_altitudeValue,
+ { "altitudeValue", "its.altitudeValue",
+ FT_INT32, BASE_DEC, VALS(its_AltitudeValue_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_altitudeConfidence,
+ { "altitudeConfidence", "its.altitudeConfidence",
+ FT_UINT32, BASE_DEC, VALS(its_AltitudeConfidence_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_semiMajorConfidence,
+ { "semiMajorConfidence", "its.semiMajorConfidence",
+ FT_UINT32, BASE_DEC, VALS(its_SemiAxisLength_vals), 0,
+ "SemiAxisLength", HFILL }},
+ { &hf_its_semiMinorConfidence,
+ { "semiMinorConfidence", "its.semiMinorConfidence",
+ FT_UINT32, BASE_DEC, VALS(its_SemiAxisLength_vals), 0,
+ "SemiAxisLength", HFILL }},
+ { &hf_its_semiMajorOrientation,
+ { "semiMajorOrientation", "its.semiMajorOrientation",
+ FT_UINT32, BASE_DEC, VALS(its_HeadingValue_vals), 0,
+ "HeadingValue", HFILL }},
+ { &hf_its_pathPosition,
+ { "pathPosition", "its.pathPosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DeltaReferencePosition", HFILL }},
+ { &hf_its_pathDeltaTime,
+ { "pathDeltaTime", "its.pathDeltaTime",
+ FT_UINT32, BASE_DEC, VALS(its_PathDeltaTime_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_ptActivationType,
+ { "ptActivationType", "its.ptActivationType",
+ FT_UINT32, BASE_DEC, VALS(its_PtActivationType_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_ptActivationData,
+ { "ptActivationData", "its.ptActivationData",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_its_causeCode,
+ { "causeCode", "its.causeCode",
+ FT_UINT32, BASE_DEC, VALS(its_CauseCodeType_vals), 0,
+ "CauseCodeType", HFILL }},
+ { &hf_its_subCauseCode,
+ { "subCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_curvatureValue,
+ { "curvatureValue", "its.curvatureValue",
+ FT_INT32, BASE_DEC, VALS(its_CurvatureValue_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_curvatureConfidence,
+ { "curvatureConfidence", "its.curvatureConfidence",
+ FT_UINT32, BASE_DEC, VALS(its_CurvatureConfidence_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_headingValue,
+ { "headingValue", "its.headingValue",
+ FT_UINT32, BASE_DEC, VALS(its_HeadingValue_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_headingConfidence,
+ { "headingConfidence", "its.headingConfidence",
+ FT_UINT32, BASE_DEC, VALS(its_HeadingConfidence_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_innerhardShoulderStatus,
+ { "innerhardShoulderStatus", "its.innerhardShoulderStatus",
+ FT_UINT32, BASE_DEC, VALS(its_HardShoulderStatus_vals), 0,
+ "HardShoulderStatus", HFILL }},
+ { &hf_its_outerhardShoulderStatus,
+ { "outerhardShoulderStatus", "its.outerhardShoulderStatus",
+ FT_UINT32, BASE_DEC, VALS(its_HardShoulderStatus_vals), 0,
+ "HardShoulderStatus", HFILL }},
+ { &hf_its_drivingLaneStatus,
+ { "drivingLaneStatus", "its.drivingLaneStatus",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_its_speedValue,
+ { "speedValue", "its.speedValue",
+ FT_UINT32, BASE_DEC, VALS(its_SpeedValue_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_speedConfidence,
+ { "speedConfidence", "its.speedConfidence",
+ FT_UINT32, BASE_DEC, VALS(its_SpeedConfidence_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_longitudinalAccelerationValue,
+ { "longitudinalAccelerationValue", "its.longitudinalAccelerationValue",
+ FT_INT32, BASE_DEC, VALS(its_LongitudinalAccelerationValue_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_longitudinalAccelerationConfidence,
+ { "longitudinalAccelerationConfidence", "its.longitudinalAccelerationConfidence",
+ FT_UINT32, BASE_DEC, VALS(its_AccelerationConfidence_vals), 0,
+ "AccelerationConfidence", HFILL }},
+ { &hf_its_lateralAccelerationValue,
+ { "lateralAccelerationValue", "its.lateralAccelerationValue",
+ FT_INT32, BASE_DEC, VALS(its_LateralAccelerationValue_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_lateralAccelerationConfidence,
+ { "lateralAccelerationConfidence", "its.lateralAccelerationConfidence",
+ FT_UINT32, BASE_DEC, VALS(its_AccelerationConfidence_vals), 0,
+ "AccelerationConfidence", HFILL }},
+ { &hf_its_verticalAccelerationValue,
+ { "verticalAccelerationValue", "its.verticalAccelerationValue",
+ FT_INT32, BASE_DEC, VALS(its_VerticalAccelerationValue_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_verticalAccelerationConfidence,
+ { "verticalAccelerationConfidence", "its.verticalAccelerationConfidence",
+ FT_UINT32, BASE_DEC, VALS(its_AccelerationConfidence_vals), 0,
+ "AccelerationConfidence", HFILL }},
+ { &hf_its_dangerousGoodsType,
+ { "dangerousGoodsType", "its.dangerousGoodsType",
+ FT_UINT32, BASE_DEC, VALS(its_DangerousGoodsBasic_vals), 0,
+ "DangerousGoodsBasic", HFILL }},
+ { &hf_its_unNumber,
+ { "unNumber", "its.unNumber",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_0_9999", HFILL }},
+ { &hf_its_elevatedTemperature,
+ { "elevatedTemperature", "its.elevatedTemperature",
+ FT_BOOLEAN, BASE_NONE, NULL, 0,
+ "BOOLEAN", HFILL }},
+ { &hf_its_tunnelsRestricted,
+ { "tunnelsRestricted", "its.tunnelsRestricted",
+ FT_BOOLEAN, BASE_NONE, NULL, 0,
+ "BOOLEAN", HFILL }},
+ { &hf_its_limitedQuantity,
+ { "limitedQuantity", "its.limitedQuantity",
+ FT_BOOLEAN, BASE_NONE, NULL, 0,
+ "BOOLEAN", HFILL }},
+ { &hf_its_emergencyActionCode,
+ { "emergencyActionCode", "its.emergencyActionCode",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "IA5String_SIZE_1_24", HFILL }},
+ { &hf_its_phoneNumber,
+ { "phoneNumber", "its.phoneNumber",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_its_companyName,
+ { "companyName", "its.companyName",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "UTF8String_SIZE_1_24", HFILL }},
+ { &hf_its_wMInumber,
+ { "wMInumber", "its.wMInumber",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_its_vDS,
+ { "vDS", "its.vDS",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_its_vehicleLengthValue,
+ { "vehicleLengthValue", "its.vehicleLengthValue",
+ FT_UINT32, BASE_DEC, VALS(its_VehicleLengthValue_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_vehicleLengthConfidenceIndication,
+ { "vehicleLengthConfidenceIndication", "its.vehicleLengthConfidenceIndication",
+ FT_UINT32, BASE_DEC, VALS(its_VehicleLengthConfidenceIndication_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_PathHistory_item,
+ { "PathPoint", "its.PathPoint_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_its_steeringWheelAngleValue,
+ { "steeringWheelAngleValue", "its.steeringWheelAngleValue",
+ FT_INT32, BASE_DEC, VALS(its_SteeringWheelAngleValue_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_steeringWheelAngleConfidence,
+ { "steeringWheelAngleConfidence", "its.steeringWheelAngleConfidence",
+ FT_UINT32, BASE_DEC, VALS(its_SteeringWheelAngleConfidence_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_yawRateValue,
+ { "yawRateValue", "its.yawRateValue",
+ FT_INT32, BASE_DEC, VALS(its_YawRateValue_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_yawRateConfidence,
+ { "yawRateConfidence", "its.yawRateConfidence",
+ FT_UINT32, BASE_DEC, VALS(its_YawRateConfidence_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_originatingStationID,
+ { "originatingStationID", "its.originatingStationID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "StationID", HFILL }},
+ { &hf_its_sequenceNumber,
+ { "sequenceNumber", "its.sequenceNumber",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_its_ItineraryPath_item,
+ { "ReferencePosition", "its.ReferencePosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_its_protectedZoneType,
+ { "protectedZoneType", "its.protectedZoneType",
+ FT_UINT32, BASE_DEC, VALS(its_ProtectedZoneType_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_expiryTime,
+ { "expiryTime", "its.expiryTime",
+ FT_UINT64, BASE_DEC, NULL, 0,
+ "TimestampIts", HFILL }},
+ { &hf_its_protectedZoneLatitude,
+ { "protectedZoneLatitude", "its.protectedZoneLatitude",
+ FT_INT32, BASE_DEC, VALS(its_Latitude_vals), 0,
+ "Latitude", HFILL }},
+ { &hf_its_protectedZoneLongitude,
+ { "protectedZoneLongitude", "its.protectedZoneLongitude",
+ FT_INT32, BASE_DEC, VALS(its_Longitude_vals), 0,
+ "Longitude", HFILL }},
+ { &hf_its_protectedZoneRadius,
+ { "protectedZoneRadius", "its.protectedZoneRadius",
+ FT_UINT32, BASE_DEC, VALS(its_ProtectedZoneRadius_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_protectedZoneID,
+ { "protectedZoneID", "its.protectedZoneID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_its_Traces_item,
+ { "PathHistory", "its.PathHistory",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_its_PositionOfPillars_item,
+ { "PosPillar", "its.PosPillar",
+ FT_UINT32, BASE_DEC, VALS(its_PosPillar_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_RestrictedTypes_item,
+ { "StationType", "its.StationType",
+ FT_UINT32, BASE_DEC, VALS(its_StationType_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_EventHistory_item,
+ { "EventPoint", "its.EventPoint_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_its_eventPosition,
+ { "eventPosition", "its.eventPosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DeltaReferencePosition", HFILL }},
+ { &hf_its_eventDeltaTime,
+ { "eventDeltaTime", "its.eventDeltaTime",
+ FT_UINT32, BASE_DEC, VALS(its_PathDeltaTime_vals), 0,
+ "PathDeltaTime", HFILL }},
+ { &hf_its_informationQuality,
+ { "informationQuality", "its.informationQuality",
+ FT_UINT32, BASE_DEC, VALS(its_InformationQuality_vals), 0,
+ NULL, HFILL }},
+ { &hf_its_ProtectedCommunicationZonesRSU_item,
+ { "ProtectedCommunicationZone", "its.ProtectedCommunicationZone_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_its_cenDsrcTollingZoneID,
+ { "cenDsrcTollingZoneID", "its.cenDsrcTollingZoneID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_its_DigitalMap_item,
+ { "ReferencePosition", "its.ReferencePosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_its_AccelerationControl_brakePedalEngaged,
+ { "brakePedalEngaged", "its.brakePedalEngaged",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_its_AccelerationControl_gasPedalEngaged,
+ { "gasPedalEngaged", "its.gasPedalEngaged",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_its_AccelerationControl_emergencyBrakeEngaged,
+ { "emergencyBrakeEngaged", "its.emergencyBrakeEngaged",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_its_AccelerationControl_collisionWarningEngaged,
+ { "collisionWarningEngaged", "its.collisionWarningEngaged",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_its_AccelerationControl_accEngaged,
+ { "accEngaged", "its.accEngaged",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_its_AccelerationControl_cruiseControlEngaged,
+ { "cruiseControlEngaged", "its.cruiseControlEngaged",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+ { &hf_its_AccelerationControl_speedLimiterEngaged,
+ { "speedLimiterEngaged", "its.speedLimiterEngaged",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+ { &hf_its_ExteriorLights_lowBeamHeadlightsOn,
+ { "lowBeamHeadlightsOn", "its.lowBeamHeadlightsOn",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_its_ExteriorLights_highBeamHeadlightsOn,
+ { "highBeamHeadlightsOn", "its.highBeamHeadlightsOn",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_its_ExteriorLights_leftTurnSignalOn,
+ { "leftTurnSignalOn", "its.leftTurnSignalOn",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_its_ExteriorLights_rightTurnSignalOn,
+ { "rightTurnSignalOn", "its.rightTurnSignalOn",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_its_ExteriorLights_daytimeRunningLightsOn,
+ { "daytimeRunningLightsOn", "its.daytimeRunningLightsOn",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_its_ExteriorLights_reverseLightOn,
+ { "reverseLightOn", "its.reverseLightOn",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+ { &hf_its_ExteriorLights_fogLightOn,
+ { "fogLightOn", "its.fogLightOn",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+ { &hf_its_ExteriorLights_parkingLightsOn,
+ { "parkingLightsOn", "its.parkingLightsOn",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }},
+ { &hf_its_SpecialTransportType_heavyLoad,
+ { "heavyLoad", "its.heavyLoad",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_its_SpecialTransportType_excessWidth,
+ { "excessWidth", "its.excessWidth",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_its_SpecialTransportType_excessLength,
+ { "excessLength", "its.excessLength",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_its_SpecialTransportType_excessHeight,
+ { "excessHeight", "its.excessHeight",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_its_LightBarSirenInUse_lightBarActivated,
+ { "lightBarActivated", "its.lightBarActivated",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_its_LightBarSirenInUse_sirenActivated,
+ { "sirenActivated", "its.sirenActivated",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_its_PositionOfOccupants_row1LeftOccupied,
+ { "row1LeftOccupied", "its.row1LeftOccupied",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_its_PositionOfOccupants_row1RightOccupied,
+ { "row1RightOccupied", "its.row1RightOccupied",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_its_PositionOfOccupants_row1MidOccupied,
+ { "row1MidOccupied", "its.row1MidOccupied",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_its_PositionOfOccupants_row1NotDetectable,
+ { "row1NotDetectable", "its.row1NotDetectable",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_its_PositionOfOccupants_row1NotPresent,
+ { "row1NotPresent", "its.row1NotPresent",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_its_PositionOfOccupants_row2LeftOccupied,
+ { "row2LeftOccupied", "its.row2LeftOccupied",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+ { &hf_its_PositionOfOccupants_row2RightOccupied,
+ { "row2RightOccupied", "its.row2RightOccupied",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+ { &hf_its_PositionOfOccupants_row2MidOccupied,
+ { "row2MidOccupied", "its.row2MidOccupied",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }},
+ { &hf_its_PositionOfOccupants_row2NotDetectable,
+ { "row2NotDetectable", "its.row2NotDetectable",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_its_PositionOfOccupants_row2NotPresent,
+ { "row2NotPresent", "its.row2NotPresent",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_its_PositionOfOccupants_row3LeftOccupied,
+ { "row3LeftOccupied", "its.row3LeftOccupied",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_its_PositionOfOccupants_row3RightOccupied,
+ { "row3RightOccupied", "its.row3RightOccupied",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_its_PositionOfOccupants_row3MidOccupied,
+ { "row3MidOccupied", "its.row3MidOccupied",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_its_PositionOfOccupants_row3NotDetectable,
+ { "row3NotDetectable", "its.row3NotDetectable",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+ { &hf_its_PositionOfOccupants_row3NotPresent,
+ { "row3NotPresent", "its.row3NotPresent",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+ { &hf_its_PositionOfOccupants_row4LeftOccupied,
+ { "row4LeftOccupied", "its.row4LeftOccupied",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }},
+ { &hf_its_PositionOfOccupants_row4RightOccupied,
+ { "row4RightOccupied", "its.row4RightOccupied",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_its_PositionOfOccupants_row4MidOccupied,
+ { "row4MidOccupied", "its.row4MidOccupied",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_its_PositionOfOccupants_row4NotDetectable,
+ { "row4NotDetectable", "its.row4NotDetectable",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_its_PositionOfOccupants_row4NotPresent,
+ { "row4NotPresent", "its.row4NotPresent",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_its_EnergyStorageType_hydrogenStorage,
+ { "hydrogenStorage", "its.hydrogenStorage",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_its_EnergyStorageType_electricEnergyStorage,
+ { "electricEnergyStorage", "its.electricEnergyStorage",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_its_EnergyStorageType_liquidPropaneGas,
+ { "liquidPropaneGas", "its.liquidPropaneGas",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_its_EnergyStorageType_compressedNaturalGas,
+ { "compressedNaturalGas", "its.compressedNaturalGas",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_its_EnergyStorageType_diesel,
+ { "diesel", "its.diesel",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_its_EnergyStorageType_gasoline,
+ { "gasoline", "its.gasoline",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+ { &hf_its_EnergyStorageType_ammonia,
+ { "ammonia", "its.ammonia",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+ { &hf_its_EmergencyPriority_requestForRightOfWay,
+ { "requestForRightOfWay", "its.requestForRightOfWay",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_its_EmergencyPriority_requestForFreeCrossingAtATrafficLight,
+ { "requestForFreeCrossingAtATrafficLight", "its.requestForFreeCrossingAtATrafficLight",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+
+/* --- Module ElectronicRegistrationIdentificationVehicleDataModule --- --- --- */
+
+ { &hf_erivdm_euVehicleCategoryL,
+ { "euVehicleCategoryL", "erivdm.euVehicleCategoryL",
+ FT_UINT32, BASE_DEC, VALS(erivdm_EuVehicleCategoryL_vals), 0,
+ NULL, HFILL }},
+ { &hf_erivdm_euVehicleCategoryM,
+ { "euVehicleCategoryM", "erivdm.euVehicleCategoryM",
+ FT_UINT32, BASE_DEC, VALS(erivdm_EuVehicleCategoryM_vals), 0,
+ NULL, HFILL }},
+ { &hf_erivdm_euVehicleCategoryN,
+ { "euVehicleCategoryN", "erivdm.euVehicleCategoryN",
+ FT_UINT32, BASE_DEC, VALS(erivdm_EuVehicleCategoryN_vals), 0,
+ NULL, HFILL }},
+ { &hf_erivdm_euVehicleCategoryO,
+ { "euVehicleCategoryO", "erivdm.euVehicleCategoryO",
+ FT_UINT32, BASE_DEC, VALS(erivdm_EuVehicleCategoryO_vals), 0,
+ NULL, HFILL }},
+ { &hf_erivdm_euVehilcleCategoryT,
+ { "euVehilcleCategoryT", "erivdm.euVehilcleCategoryT_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_erivdm_euVehilcleCategoryG,
+ { "euVehilcleCategoryG", "erivdm.euVehilcleCategoryG_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+
+/* --- Module CITSapplMgmtIDs --- --- --- */
+
+ { &hf_csmid_vlnContent,
+ { "content", "csmid.content",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_0_127", HFILL }},
+ { &hf_csmid_vlnExtension,
+ { "extension", "csmid.extension",
+ FT_UINT32, BASE_DEC, VALS(csmid_Ext1_vals), 0,
+ "Ext1", HFILL }},
+ { &hf_csmid_e1Content,
+ { "content", "csmid.content",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_128_16511", HFILL }},
+ { &hf_csmid_e2Extension,
+ { "extension", "csmid.extension",
+ FT_UINT32, BASE_DEC, VALS(csmid_Ext2_vals), 0,
+ "Ext2", HFILL }},
+ { &hf_csmid_e2Content,
+ { "content", "csmid.content",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_16512_2113663", HFILL }},
+ { &hf_csmid_e1Extension,
+ { "extension", "csmid.extension",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Ext3", HFILL }},
+
+/* --- Module EfcDsrcApplication --- --- --- */
+
+ { &hf_dsrc_app_maxLadenweightOnAxle1,
+ { "maxLadenweightOnAxle1", "dsrc_app.maxLadenweightOnAxle1",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Int2", HFILL }},
+ { &hf_dsrc_app_maxLadenweightOnAxle2,
+ { "maxLadenweightOnAxle2", "dsrc_app.maxLadenweightOnAxle2",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Int2", HFILL }},
+ { &hf_dsrc_app_maxLadenweightOnAxle3,
+ { "maxLadenweightOnAxle3", "dsrc_app.maxLadenweightOnAxle3",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Int2", HFILL }},
+ { &hf_dsrc_app_maxLadenweightOnAxle4,
+ { "maxLadenweightOnAxle4", "dsrc_app.maxLadenweightOnAxle4",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Int2", HFILL }},
+ { &hf_dsrc_app_maxLadenweightOnAxle5,
+ { "maxLadenweightOnAxle5", "dsrc_app.maxLadenweightOnAxle5",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Int2", HFILL }},
+ { &hf_dsrc_app_particulate,
+ { "particulate", "dsrc_app.particulate_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_app_unitType,
+ { "unitType", "dsrc_app.unitType",
+ FT_UINT32, BASE_DEC, VALS(dsrc_app_UnitType_vals), 0,
+ NULL, HFILL }},
+ { &hf_dsrc_app_value,
+ { "value", "dsrc_app.value",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_0_32767", HFILL }},
+ { &hf_dsrc_app_absorptionCoeff,
+ { "absorptionCoeff", "dsrc_app.absorptionCoeff",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Int2", HFILL }},
+ { &hf_dsrc_app_euroValue,
+ { "euroValue", "dsrc_app.euroValue",
+ FT_UINT32, BASE_DEC, VALS(dsrc_app_EuroValue_vals), 0,
+ NULL, HFILL }},
+ { &hf_dsrc_app_copValue,
+ { "copValue", "dsrc_app.copValue",
+ FT_UINT32, BASE_DEC, VALS(dsrc_app_CopValue_vals), 0,
+ NULL, HFILL }},
+ { &hf_dsrc_app_emissionCO,
+ { "emissionCO", "dsrc_app.emissionCO",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_0_32767", HFILL }},
+ { &hf_dsrc_app_emissionHC,
+ { "emissionHC", "dsrc_app.emissionHC",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Int2", HFILL }},
+ { &hf_dsrc_app_emissionNOX,
+ { "emissionNOX", "dsrc_app.emissionNOX",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Int2", HFILL }},
+ { &hf_dsrc_app_emissionHCNOX,
+ { "emissionHCNOX", "dsrc_app.emissionHCNOX",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Int2", HFILL }},
+ { &hf_dsrc_app_numberOfSeats,
+ { "numberOfSeats", "dsrc_app.numberOfSeats",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Int1", HFILL }},
+ { &hf_dsrc_app_numberOfStandingPlaces,
+ { "numberOfStandingPlaces", "dsrc_app.numberOfStandingPlaces",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Int1", HFILL }},
+ { &hf_dsrc_app_countryCode,
+ { "countryCode", "dsrc_app.countryCode",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_app_providerIdentifier,
+ { "providerIdentifier", "dsrc_app.providerIdentifier",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "IssuerIdentifier", HFILL }},
+ { &hf_dsrc_app_soundstationary,
+ { "soundstationary", "dsrc_app.soundstationary",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Int1", HFILL }},
+ { &hf_dsrc_app_sounddriveby,
+ { "sounddriveby", "dsrc_app.sounddriveby",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Int1", HFILL }},
+ { &hf_dsrc_app_vehicleLengthOverall,
+ { "vehicleLengthOverall", "dsrc_app.vehicleLengthOverall",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Int1", HFILL }},
+ { &hf_dsrc_app_vehicleHeigthOverall,
+ { "vehicleHeigthOverall", "dsrc_app.vehicleHeigthOverall",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Int1", HFILL }},
+ { &hf_dsrc_app_vehicleWidthOverall,
+ { "vehicleWidthOverall", "dsrc_app.vehicleWidthOverall",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Int1", HFILL }},
+ { &hf_dsrc_app_vehicleMaxLadenWeight,
+ { "vehicleMaxLadenWeight", "dsrc_app.vehicleMaxLadenWeight",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Int2", HFILL }},
+ { &hf_dsrc_app_vehicleTrainMaximumWeight,
+ { "vehicleTrainMaximumWeight", "dsrc_app.vehicleTrainMaximumWeight",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Int2", HFILL }},
+ { &hf_dsrc_app_vehicleWeightUnladen,
+ { "vehicleWeightUnladen", "dsrc_app.vehicleWeightUnladen",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Int2", HFILL }},
+
+/* --- Module IVI --- --- --- */
+
+ { &hf_ivi_ivi_IviStructure_PDU,
+ { "IviStructure", "ivi.IviStructure_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_mandatory,
+ { "mandatory", "ivi.mandatory_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "IVIManagementContainer", HFILL }},
+ { &hf_ivi_optional,
+ { "optional", "ivi.optional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_8__OF_IviContainer", HFILL }},
+ { &hf_ivi_optional_item,
+ { "IviContainer", "ivi.IviContainer",
+ FT_UINT32, BASE_DEC, VALS(ivi_IviContainer_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_glc,
+ { "glc", "ivi.glc_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "GeographicLocationContainer", HFILL }},
+ { &hf_ivi_giv,
+ { "giv", "ivi.giv",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "GeneralIviContainer", HFILL }},
+ { &hf_ivi_rcc,
+ { "rcc", "ivi.rcc",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "RoadConfigurationContainer", HFILL }},
+ { &hf_ivi_tc,
+ { "tc", "ivi.tc",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "TextContainer", HFILL }},
+ { &hf_ivi_lac,
+ { "lac", "ivi.lac_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "LayoutContainer", HFILL }},
+ { &hf_ivi_serviceProviderId,
+ { "serviceProviderId", "ivi.serviceProviderId_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Provider", HFILL }},
+ { &hf_ivi_iviIdentificationNumber,
+ { "iviIdentificationNumber", "ivi.iviIdentificationNumber",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_timeStamp,
+ { "timeStamp", "ivi.timeStamp",
+ FT_UINT64, BASE_DEC, NULL, 0,
+ "TimestampIts", HFILL }},
+ { &hf_ivi_validFrom,
+ { "validFrom", "ivi.validFrom",
+ FT_UINT64, BASE_DEC, NULL, 0,
+ "TimestampIts", HFILL }},
+ { &hf_ivi_validTo,
+ { "validTo", "ivi.validTo",
+ FT_UINT64, BASE_DEC, NULL, 0,
+ "TimestampIts", HFILL }},
+ { &hf_ivi_connectedIviStructures,
+ { "connectedIviStructures", "ivi.connectedIviStructures",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_8_OF_IviIdentificationNumber", HFILL }},
+ { &hf_ivi_connectedIviStructures_item,
+ { "IviIdentificationNumber", "ivi.IviIdentificationNumber",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_iviStatus,
+ { "iviStatus", "ivi.iviStatus",
+ FT_UINT32, BASE_DEC, VALS(ivi_IviStatus_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_referencePosition,
+ { "referencePosition", "ivi.referencePosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_referencePositionTime,
+ { "referencePositionTime", "ivi.referencePositionTime",
+ FT_UINT64, BASE_DEC, NULL, 0,
+ "TimestampIts", HFILL }},
+ { &hf_ivi_referencePositionHeading,
+ { "referencePositionHeading", "ivi.referencePositionHeading_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Heading", HFILL }},
+ { &hf_ivi_referencePositionSpeed,
+ { "referencePositionSpeed", "ivi.referencePositionSpeed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Speed", HFILL }},
+ { &hf_ivi_parts,
+ { "parts", "ivi.parts",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_16__OF_GlcPart", HFILL }},
+ { &hf_ivi_parts_item,
+ { "GlcPart", "ivi.GlcPart_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_zoneId,
+ { "zoneId", "ivi.zoneId",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Zid", HFILL }},
+ { &hf_ivi_laneNumber,
+ { "laneNumber", "ivi.laneNumber",
+ FT_INT32, BASE_DEC, VALS(its_LanePosition_vals), 0,
+ "LanePosition", HFILL }},
+ { &hf_ivi_zoneExtension,
+ { "zoneExtension", "ivi.zoneExtension",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_0_255", HFILL }},
+ { &hf_ivi_zoneHeading,
+ { "zoneHeading", "ivi.zoneHeading",
+ FT_UINT32, BASE_DEC, VALS(its_HeadingValue_vals), 0,
+ "HeadingValue", HFILL }},
+ { &hf_ivi_zone,
+ { "zone", "ivi.zone",
+ FT_UINT32, BASE_DEC, VALS(ivi_Zone_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_GeneralIviContainer_item,
+ { "GicPart", "ivi.GicPart_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_gpDetectionZoneIds,
+ { "detectionZoneIds", "ivi.detectionZoneIds",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_GicPartDetectionZoneIds", HFILL }},
+ { &hf_ivi_gpDetectionZoneIds_item,
+ { "Zid", "ivi.Zid",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_its_Rrid,
+ { "its-Rrid", "ivi.its_Rrid",
+ FT_UINT32, BASE_DEC, VALS(csmid_VarLengthNumber_vals), 0,
+ "VarLengthNumber", HFILL }},
+ { &hf_ivi_gpRelevanceZoneIds,
+ { "relevanceZoneIds", "ivi.relevanceZoneIds",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_GicPartRelevanceZoneIds", HFILL }},
+ { &hf_ivi_gpRelevanceZoneIds_item,
+ { "Zid", "ivi.Zid",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_direction,
+ { "direction", "ivi.direction",
+ FT_UINT32, BASE_DEC, VALS(ivi_Direction_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_gpDriverAwarenessZoneIds,
+ { "driverAwarenessZoneIds", "ivi.driverAwarenessZoneIds",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_GicPartDriverAwarenessZoneIds", HFILL }},
+ { &hf_ivi_gpDriverAwarenessZoneIds_item,
+ { "Zid", "ivi.Zid",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_minimumAwarenessTime,
+ { "minimumAwarenessTime", "ivi.minimumAwarenessTime",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_0_255", HFILL }},
+ { &hf_ivi_applicableLanes,
+ { "applicableLanes", "ivi.applicableLanes",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_8__OF_LanePosition", HFILL }},
+ { &hf_ivi_applicableLanes_item,
+ { "LanePosition", "ivi.LanePosition",
+ FT_INT32, BASE_DEC, VALS(its_LanePosition_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_iviType,
+ { "iviType", "ivi.iviType",
+ FT_UINT32, BASE_DEC, VALS(ivi_IviType_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_iviPurpose,
+ { "iviPurpose", "ivi.iviPurpose",
+ FT_UINT32, BASE_DEC, VALS(ivi_IviPurpose_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_laneStatus,
+ { "laneStatus", "ivi.laneStatus",
+ FT_UINT32, BASE_DEC, VALS(ivi_LaneStatus_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_vehicleCharacteristics,
+ { "vehicleCharacteristics", "ivi.vehicleCharacteristics",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_8__OF_CompleteVehicleCharacteristics", HFILL }},
+ { &hf_ivi_vehicleCharacteristics_item,
+ { "CompleteVehicleCharacteristics", "ivi.CompleteVehicleCharacteristics_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_driverCharacteristics,
+ { "driverCharacteristics", "ivi.driverCharacteristics",
+ FT_UINT32, BASE_DEC, VALS(ivi_DriverCharacteristics_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_layoutId,
+ { "layoutId", "ivi.layoutId",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_4_", HFILL }},
+ { &hf_ivi_preStoredlayoutId,
+ { "preStoredlayoutId", "ivi.preStoredlayoutId",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_64_", HFILL }},
+ { &hf_ivi_roadSignCodes,
+ { "roadSignCodes", "ivi.roadSignCodes",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_4__OF_RSCode", HFILL }},
+ { &hf_ivi_roadSignCodes_item,
+ { "RSCode", "ivi.RSCode_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_extraText,
+ { "extraText", "ivi.extraText",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_GicPartExtraText", HFILL }},
+ { &hf_ivi_extraText_item,
+ { "Text", "ivi.Text_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_RoadConfigurationContainer_item,
+ { "RccPart", "ivi.RccPart_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_zoneIds,
+ { "zoneIds", "ivi.zoneIds",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_8__OF_Zid", HFILL }},
+ { &hf_ivi_zoneIds_item,
+ { "Zid", "ivi.Zid",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_roadType,
+ { "roadType", "ivi.roadType",
+ FT_UINT32, BASE_DEC, VALS(its_RoadType_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_laneConfiguration,
+ { "laneConfiguration", "ivi.laneConfiguration",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_16__OF_LaneInformation", HFILL }},
+ { &hf_ivi_laneConfiguration_item,
+ { "LaneInformation", "ivi.LaneInformation_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_TextContainer_item,
+ { "TcPart", "ivi.TcPart_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_tpDetectionZoneIds,
+ { "detectionZoneIds", "ivi.detectionZoneIds",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_TcPartDetectionZoneIds", HFILL }},
+ { &hf_ivi_tpDetectionZoneIds_item,
+ { "Zid", "ivi.Zid",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_tpRelevanceZoneIds,
+ { "relevanceZoneIds", "ivi.relevanceZoneIds",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_TcPartRelevanceZoneIds", HFILL }},
+ { &hf_ivi_tpRelevanceZoneIds_item,
+ { "Zid", "ivi.Zid",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_tpDriverAwarenessZoneIds,
+ { "driverAwarenessZoneIds", "ivi.driverAwarenessZoneIds",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_TcPartDriverAwarenessZoneIds", HFILL }},
+ { &hf_ivi_tpDriverAwarenessZoneIds_item,
+ { "Zid", "ivi.Zid",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_text,
+ { "text", "ivi.text",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_TcPartText", HFILL }},
+ { &hf_ivi_text_item,
+ { "Text", "ivi.Text_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_data,
+ { "data", "ivi.data",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "OCTET_STRING", HFILL }},
+ { &hf_ivi_height,
+ { "height", "ivi.height",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_10_73", HFILL }},
+ { &hf_ivi_width,
+ { "width", "ivi.width",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_10_265", HFILL }},
+ { &hf_ivi_layoutComponents,
+ { "layoutComponents", "ivi.layoutComponents",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_4__OF_LayoutComponent", HFILL }},
+ { &hf_ivi_layoutComponents_item,
+ { "LayoutComponent", "ivi.LayoutComponent_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_latitude,
+ { "latitude", "ivi.latitude",
+ FT_INT32, BASE_DEC, VALS(its_Latitude_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_longitude,
+ { "longitude", "ivi.longitude",
+ FT_INT32, BASE_DEC, VALS(its_Longitude_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_altitude,
+ { "altitude", "ivi.altitude_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_owner,
+ { "owner", "ivi.owner_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Provider", HFILL }},
+ { &hf_ivi_version,
+ { "version", "ivi.version",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_0_255", HFILL }},
+ { &hf_ivi_acPictogramCode,
+ { "pictogramCode", "ivi.pictogramCode",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_0_65535", HFILL }},
+ { &hf_ivi_acValue,
+ { "value", "ivi.value",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_0_65535", HFILL }},
+ { &hf_ivi_unit,
+ { "unit", "ivi.unit",
+ FT_UINT32, BASE_DEC, VALS(ivi_RSCUnit_vals), 0,
+ "RSCUnit", HFILL }},
+ { &hf_ivi_attributes,
+ { "attributes", "ivi.attributes",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "ISO14823Attributes", HFILL }},
+ { &hf_ivi_tractor,
+ { "tractor", "ivi.tractor_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TractorCharacteristics", HFILL }},
+ { &hf_ivi_trailer,
+ { "trailer", "ivi.trailer",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_3_OF_TrailerCharacteristics", HFILL }},
+ { &hf_ivi_trailer_item,
+ { "TrailerCharacteristics", "ivi.TrailerCharacteristics_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_train,
+ { "train", "ivi.train_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TrainCharacteristics", HFILL }},
+ { &hf_ivi_laneWidth,
+ { "laneWidth", "ivi.laneWidth",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "IVILaneWidth", HFILL }},
+ { &hf_ivi_offsetDistance,
+ { "offsetDistance", "ivi.offsetDistance",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "INTEGER_M32768_32767", HFILL }},
+ { &hf_ivi_offsetPosition,
+ { "offsetPosition", "ivi.offsetPosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DeltaReferencePosition", HFILL }},
+ { &hf_ivi_deltaLatitude,
+ { "deltaLatitude", "ivi.deltaLatitude",
+ FT_INT32, BASE_DEC, VALS(its_DeltaLatitude_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_deltaLongitude,
+ { "deltaLongitude", "ivi.deltaLongitude",
+ FT_INT32, BASE_DEC, VALS(its_DeltaLongitude_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_dValue,
+ { "value", "ivi.value",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_16384", HFILL }},
+ { &hf_ivi_dodValue,
+ { "value", "ivi.value",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_16384", HFILL }},
+ { &hf_ivi_ISO14823Attributes_item,
+ { "ISO14823Attributes item", "ivi.ISO14823Attributes_item",
+ FT_UINT32, BASE_DEC, VALS(ivi_ISO14823Attributes_item_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_dtm,
+ { "dtm", "ivi.dtm_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_edt,
+ { "edt", "ivi.edt_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_dfl,
+ { "dfl", "ivi.dfl",
+ FT_UINT32, BASE_DEC, VALS(ivi_DFL_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_ved,
+ { "ved", "ivi.ved_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_spe,
+ { "spe", "ivi.spe_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_roi,
+ { "roi", "ivi.roi",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_dbv,
+ { "dbv", "ivi.dbv_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_ddd,
+ { "ddd", "ivi.ddd_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_icPictogramCode,
+ { "pictogramCode", "ivi.pictogramCode_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "T_icPictogramCode", HFILL }},
+ { &hf_ivi_countryCode,
+ { "countryCode", "ivi.countryCode",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "OCTET_STRING_SIZE_2", HFILL }},
+ { &hf_ivi_serviceCategoryCode,
+ { "serviceCategoryCode", "ivi.serviceCategoryCode",
+ FT_UINT32, BASE_DEC, VALS(ivi_T_serviceCategoryCode_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_trafficSignPictogram,
+ { "trafficSignPictogram", "ivi.trafficSignPictogram",
+ FT_UINT32, BASE_DEC, VALS(ivi_T_trafficSignPictogram_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_publicFacilitiesPictogram,
+ { "publicFacilitiesPictogram", "ivi.publicFacilitiesPictogram",
+ FT_UINT32, BASE_DEC, VALS(ivi_T_publicFacilitiesPictogram_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_ambientOrRoadConditionPictogram,
+ { "ambientOrRoadConditionPictogram", "ivi.ambientOrRoadConditionPictogram",
+ FT_UINT32, BASE_DEC, VALS(ivi_T_ambientOrRoadConditionPictogram_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_pictogramCategoryCode,
+ { "pictogramCategoryCode", "ivi.pictogramCategoryCode_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_nature,
+ { "nature", "ivi.nature",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_9", HFILL }},
+ { &hf_ivi_serialNumber,
+ { "serialNumber", "ivi.serialNumber",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_0_99", HFILL }},
+ { &hf_ivi_liValidity,
+ { "validity", "ivi.validity_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DTM", HFILL }},
+ { &hf_ivi_laneType,
+ { "laneType", "ivi.laneType",
+ FT_UINT32, BASE_DEC, VALS(ivi_LaneType_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_laneTypeQualifier,
+ { "laneTypeQualifier", "ivi.laneTypeQualifier_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "CompleteVehicleCharacteristics", HFILL }},
+ { &hf_ivi_lcLayoutComponentId,
+ { "layoutComponentId", "ivi.layoutComponentId",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_8_", HFILL }},
+ { &hf_ivi_x,
+ { "x", "ivi.x",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_10_265", HFILL }},
+ { &hf_ivi_y,
+ { "y", "ivi.y",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_10_73", HFILL }},
+ { &hf_ivi_textScripting,
+ { "textScripting", "ivi.textScripting",
+ FT_UINT32, BASE_DEC, VALS(ivi_T_textScripting_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_goodsType,
+ { "goodsType", "ivi.goodsType",
+ FT_UINT32, BASE_DEC, VALS(ivi_GoodsType_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_dangerousGoodsType,
+ { "dangerousGoodsType", "ivi.dangerousGoodsType",
+ FT_UINT32, BASE_DEC, VALS(its_DangerousGoodsBasic_vals), 0,
+ "DangerousGoodsBasic", HFILL }},
+ { &hf_ivi_specialTransportType,
+ { "specialTransportType", "ivi.specialTransportType",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_deltaPositions,
+ { "deltaPositions", "ivi.deltaPositions",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_32__OF_DeltaPosition", HFILL }},
+ { &hf_ivi_deltaPositions_item,
+ { "DeltaPosition", "ivi.DeltaPosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_deltaPositionsWithAltitude,
+ { "deltaPositionsWithAltitude", "ivi.deltaPositionsWithAltitude",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_32__OF_DeltaReferencePosition", HFILL }},
+ { &hf_ivi_deltaPositionsWithAltitude_item,
+ { "DeltaReferencePosition", "ivi.DeltaReferencePosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_absolutePositions,
+ { "absolutePositions", "ivi.absolutePositions",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_8__OF_AbsolutePosition", HFILL }},
+ { &hf_ivi_absolutePositions_item,
+ { "AbsolutePosition", "ivi.AbsolutePosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_absolutePositionsWithAltitude,
+ { "absolutePositionsWithAltitude", "ivi.absolutePositionsWithAltitude",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_8__OF_AbsolutePositionWAltitude", HFILL }},
+ { &hf_ivi_absolutePositionsWithAltitude_item,
+ { "AbsolutePositionWAltitude", "ivi.AbsolutePositionWAltitude_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_rscLayoutComponentId,
+ { "layoutComponentId", "ivi.layoutComponentId",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_4_", HFILL }},
+ { &hf_ivi_code,
+ { "code", "ivi.code",
+ FT_UINT32, BASE_DEC, VALS(ivi_T_code_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_viennaConvention,
+ { "viennaConvention", "ivi.viennaConvention_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "VcCode", HFILL }},
+ { &hf_ivi_iso14823,
+ { "iso14823", "ivi.iso14823_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ISO14823Code", HFILL }},
+ { &hf_ivi_itisCodes,
+ { "itisCodes", "ivi.itisCodes",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_0_65535", HFILL }},
+ { &hf_ivi_anyCatalogue,
+ { "anyCatalogue", "ivi.anyCatalogue_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_line,
+ { "line", "ivi.line",
+ FT_UINT32, BASE_DEC, VALS(ivi_PolygonalLine_vals), 0,
+ "PolygonalLine", HFILL }},
+ { &hf_ivi_tLayoutComponentId,
+ { "layoutComponentId", "ivi.layoutComponentId",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_4_", HFILL }},
+ { &hf_ivi_language,
+ { "language", "ivi.language",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "BIT_STRING_SIZE_10", HFILL }},
+ { &hf_ivi_textContent,
+ { "textContent", "ivi.textContent",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "UTF8String", HFILL }},
+ { &hf_ivi_toEqualTo,
+ { "equalTo", "ivi.equalTo",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_TractorCharactEqualTo", HFILL }},
+ { &hf_ivi_toEqualTo_item,
+ { "VehicleCharacteristicsFixValues", "ivi.VehicleCharacteristicsFixValues",
+ FT_UINT32, BASE_DEC, VALS(ivi_VehicleCharacteristicsFixValues_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_toNotEqualTo,
+ { "notEqualTo", "ivi.notEqualTo",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_TractorCharactNotEqualTo", HFILL }},
+ { &hf_ivi_toNotEqualTo_item,
+ { "VehicleCharacteristicsFixValues", "ivi.VehicleCharacteristicsFixValues",
+ FT_UINT32, BASE_DEC, VALS(ivi_VehicleCharacteristicsFixValues_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_ranges,
+ { "ranges", "ivi.ranges",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_4__OF_VehicleCharacteristicsRanges", HFILL }},
+ { &hf_ivi_ranges_item,
+ { "VehicleCharacteristicsRanges", "ivi.VehicleCharacteristicsRanges_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_teEqualTo,
+ { "equalTo", "ivi.equalTo",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_TrailerCharactEqualTo", HFILL }},
+ { &hf_ivi_teEqualTo_item,
+ { "VehicleCharacteristicsFixValues", "ivi.VehicleCharacteristicsFixValues",
+ FT_UINT32, BASE_DEC, VALS(ivi_VehicleCharacteristicsFixValues_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_teNotEqualTo,
+ { "notEqualTo", "ivi.notEqualTo",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_TrailerCharactNotEqualTo", HFILL }},
+ { &hf_ivi_teNotEqualTo_item,
+ { "VehicleCharacteristicsFixValues", "ivi.VehicleCharacteristicsFixValues",
+ FT_UINT32, BASE_DEC, VALS(ivi_VehicleCharacteristicsFixValues_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_roadSignClass,
+ { "roadSignClass", "ivi.roadSignClass",
+ FT_UINT32, BASE_DEC, VALS(ivi_VcClass_vals), 0,
+ "VcClass", HFILL }},
+ { &hf_ivi_roadSignCode,
+ { "roadSignCode", "ivi.roadSignCode",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_64", HFILL }},
+ { &hf_ivi_vcOption,
+ { "vcOption", "ivi.vcOption",
+ FT_UINT32, BASE_DEC, VALS(ivi_VcOption_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_vcValidity,
+ { "validity", "ivi.validity",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_8__OF_DTM", HFILL }},
+ { &hf_ivi_vcValidity_item,
+ { "DTM", "ivi.DTM_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_vcValue,
+ { "value", "ivi.value",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_0_65535", HFILL }},
+ { &hf_ivi_simpleVehicleType,
+ { "simpleVehicleType", "ivi.simpleVehicleType",
+ FT_UINT32, BASE_DEC, VALS(its_StationType_vals), 0,
+ "StationType", HFILL }},
+ { &hf_ivi_euVehicleCategoryCode,
+ { "euVehicleCategoryCode", "ivi.euVehicleCategoryCode",
+ FT_UINT32, BASE_DEC, VALS(erivdm_EuVehicleCategoryCode_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_iso3833VehicleType,
+ { "iso3833VehicleType", "ivi.iso3833VehicleType",
+ FT_UINT32, BASE_DEC, VALS(erivdm_Iso3833VehicleType_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_euroAndCo2value,
+ { "euroAndCo2value", "ivi.euroAndCo2value_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "EnvironmentalCharacteristics", HFILL }},
+ { &hf_ivi_engineCharacteristics,
+ { "engineCharacteristics", "ivi.engineCharacteristics",
+ FT_UINT32, BASE_DEC, VALS(dsrc_app_EngineCharacteristics_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_loadType,
+ { "loadType", "ivi.loadType_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_usage,
+ { "usage", "ivi.usage",
+ FT_UINT32, BASE_DEC, VALS(its_VehicleRole_vals), 0,
+ "VehicleRole", HFILL }},
+ { &hf_ivi_comparisonOperator,
+ { "comparisonOperator", "ivi.comparisonOperator",
+ FT_UINT32, BASE_DEC, VALS(ivi_ComparisonOperator_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_limits,
+ { "limits", "ivi.limits",
+ FT_UINT32, BASE_DEC, VALS(ivi_T_limits_vals), 0,
+ NULL, HFILL }},
+ { &hf_ivi_numberOfAxles,
+ { "numberOfAxles", "ivi.numberOfAxles",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_0_7", HFILL }},
+ { &hf_ivi_vehicleDimensions,
+ { "vehicleDimensions", "ivi.vehicleDimensions_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_vehicleWeightLimits,
+ { "vehicleWeightLimits", "ivi.vehicleWeightLimits_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_axleWeightLimits,
+ { "axleWeightLimits", "ivi.axleWeightLimits_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_passengerCapacity,
+ { "passengerCapacity", "ivi.passengerCapacity_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_exhaustEmissionValues,
+ { "exhaustEmissionValues", "ivi.exhaustEmissionValues_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_dieselEmissionValues,
+ { "dieselEmissionValues", "ivi.dieselEmissionValues_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_soundLevel,
+ { "soundLevel", "ivi.soundLevel_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_wValue,
+ { "value", "ivi.value",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_16384", HFILL }},
+ { &hf_ivi_segment,
+ { "segment", "ivi.segment_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_area,
+ { "area", "ivi.area",
+ FT_UINT32, BASE_DEC, VALS(ivi_PolygonalLine_vals), 0,
+ "PolygonalLine", HFILL }},
+ { &hf_ivi_computedSegment,
+ { "computedSegment", "ivi.computedSegment_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_year,
+ { "year", "ivi.year_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_syr,
+ { "syr", "ivi.syr",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_2000_2127_", HFILL }},
+ { &hf_ivi_eyr,
+ { "eyr", "ivi.eyr",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_2000_2127_", HFILL }},
+ { &hf_ivi_month_day,
+ { "month-day", "ivi.month_day_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_smd,
+ { "smd", "ivi.smd_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "MonthDay", HFILL }},
+ { &hf_ivi_emd,
+ { "emd", "ivi.emd_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "MonthDay", HFILL }},
+ { &hf_ivi_pmd,
+ { "pmd", "ivi.pmd",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_hourMinutes,
+ { "hourMinutes", "ivi.hourMinutes_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_shm,
+ { "shm", "ivi.shm_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "HoursMinutes", HFILL }},
+ { &hf_ivi_ehm,
+ { "ehm", "ivi.ehm_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "HoursMinutes", HFILL }},
+ { &hf_ivi_dayOfWeek,
+ { "dayOfWeek", "ivi.dayOfWeek",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_period,
+ { "period", "ivi.period_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "HoursMinutes", HFILL }},
+ { &hf_ivi_month,
+ { "month", "ivi.month",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_12", HFILL }},
+ { &hf_ivi_day,
+ { "day", "ivi.day",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_31", HFILL }},
+ { &hf_ivi_hours,
+ { "hours", "ivi.hours",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_0_23", HFILL }},
+ { &hf_ivi_mins,
+ { "mins", "ivi.mins",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_0_59", HFILL }},
+ { &hf_ivi_hei,
+ { "hei", "ivi.hei_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Distance", HFILL }},
+ { &hf_ivi_wid,
+ { "wid", "ivi.wid_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Distance", HFILL }},
+ { &hf_ivi_vln,
+ { "vln", "ivi.vln_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Distance", HFILL }},
+ { &hf_ivi_wei,
+ { "wei", "ivi.wei_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Weight", HFILL }},
+ { &hf_ivi_spm,
+ { "spm", "ivi.spm",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_0_250", HFILL }},
+ { &hf_ivi_mns,
+ { "mns", "ivi.mns",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_0_250", HFILL }},
+ { &hf_ivi_dcj,
+ { "dcj", "ivi.dcj",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_128", HFILL }},
+ { &hf_ivi_dcr,
+ { "dcr", "ivi.dcr",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_128", HFILL }},
+ { &hf_ivi_tpl,
+ { "tpl", "ivi.tpl",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_128", HFILL }},
+ { &hf_ivi_ioList,
+ { "ioList", "ivi.ioList",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_8__OF_DDD_IO", HFILL }},
+ { &hf_ivi_ioList_item,
+ { "DDD-IO", "ivi.DDD_IO_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_drn,
+ { "drn", "ivi.drn",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_0_7", HFILL }},
+ { &hf_ivi_dp,
+ { "dp", "ivi.dp",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_4__OF_DestinationPlace", HFILL }},
+ { &hf_ivi_dp_item,
+ { "DestinationPlace", "ivi.DestinationPlace_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_dr,
+ { "dr", "ivi.dr",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_4__OF_DestinationRoad", HFILL }},
+ { &hf_ivi_dr_item,
+ { "DestinationRoad", "ivi.DestinationRoad_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_ivi_rne,
+ { "rne", "ivi.rne",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_999", HFILL }},
+ { &hf_ivi_stnId,
+ { "stnId", "ivi.stnId",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_999", HFILL }},
+ { &hf_ivi_stnText,
+ { "stnText", "ivi.stnText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "UTF8String", HFILL }},
+ { &hf_ivi_dcp,
+ { "dcp", "ivi.dcp_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DistanceOrDuration", HFILL }},
+ { &hf_ivi_ddp,
+ { "ddp", "ivi.ddp_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DistanceOrDuration", HFILL }},
+ { &hf_ivi_depType,
+ { "depType", "ivi.depType",
+ FT_UINT32, BASE_DEC, VALS(ivi_DDD_DEP_vals), 0,
+ "DDD_DEP", HFILL }},
+ { &hf_ivi_depRSCode,
+ { "depRSCode", "ivi.depRSCode_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ISO14823Code", HFILL }},
+ { &hf_ivi_depBlob,
+ { "depBlob", "ivi.depBlob",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "OCTET_STRING", HFILL }},
+ { &hf_ivi_plnId,
+ { "plnId", "ivi.plnId",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_999", HFILL }},
+ { &hf_ivi_plnText,
+ { "plnText", "ivi.plnText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "UTF8String", HFILL }},
+ { &hf_ivi_derType,
+ { "derType", "ivi.derType",
+ FT_UINT32, BASE_DEC, VALS(ivi_DDD_DER_vals), 0,
+ "DDD_DER", HFILL }},
+ { &hf_ivi_ronId,
+ { "ronId", "ivi.ronId",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_999", HFILL }},
+ { &hf_ivi_ronText,
+ { "ronText", "ivi.ronText",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "UTF8String", HFILL }},
+ { &hf_ivi_PMD_national_holiday,
+ { "national-holiday", "ivi.national-holiday",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_ivi_PMD_even_days,
+ { "even-days", "ivi.even-days",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_ivi_PMD_odd_days,
+ { "odd-days", "ivi.odd-days",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_ivi_PMD_market_day,
+ { "market-day", "ivi.market-day",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_ivi_DayOfWeek_unused,
+ { "unused", "ivi.unused",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_ivi_DayOfWeek_monday,
+ { "monday", "ivi.monday",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_ivi_DayOfWeek_tuesday,
+ { "tuesday", "ivi.tuesday",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_ivi_DayOfWeek_wednesday,
+ { "wednesday", "ivi.wednesday",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_ivi_DayOfWeek_thursday,
+ { "thursday", "ivi.thursday",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_ivi_DayOfWeek_friday,
+ { "friday", "ivi.friday",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+ { &hf_ivi_DayOfWeek_saturday,
+ { "saturday", "ivi.saturday",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+ { &hf_ivi_DayOfWeek_sunday,
+ { "sunday", "ivi.sunday",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }},
+
+/* --- Module DSRC --- --- --- */
+
+ { &hf_dsrc_dsrc_SPAT_PDU,
+ { "SPAT", "dsrc.SPAT_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_dsrc_SignalRequestMessage_PDU,
+ { "SignalRequestMessage", "dsrc.SignalRequestMessage_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_dsrc_SignalStatusMessage_PDU,
+ { "SignalStatusMessage", "dsrc.SignalStatusMessage_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_dsrc_MapData_PDU,
+ { "MapData", "dsrc.MapData_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_regionId,
+ { "regionId", "dsrc.regionId",
+ FT_UINT32, BASE_DEC, VALS(dsrc_RegionId_vals), 0,
+ NULL, HFILL }},
+ { &hf_dsrc_regExtValue,
+ { "regExtValue", "dsrc.regExtValue_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_spatTimeStamp,
+ { "timeStamp", "dsrc.timeStamp",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MinuteOfTheYear", HFILL }},
+ { &hf_dsrc_name,
+ { "name", "dsrc.name",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "DescriptiveName", HFILL }},
+ { &hf_dsrc_spatIntersections,
+ { "intersections", "dsrc.intersections",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "IntersectionStateList", HFILL }},
+ { &hf_dsrc_spatRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_SPATRegional", HFILL }},
+ { &hf_dsrc_spatRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_srmTimeStamp,
+ { "timeStamp", "dsrc.timeStamp",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MinuteOfTheYear", HFILL }},
+ { &hf_dsrc_second,
+ { "second", "dsrc.second",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "DSecond", HFILL }},
+ { &hf_dsrc_sequenceNumber,
+ { "sequenceNumber", "dsrc.sequenceNumber",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MsgCount", HFILL }},
+ { &hf_dsrc_requests,
+ { "requests", "dsrc.requests",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SignalRequestList", HFILL }},
+ { &hf_dsrc_requestor,
+ { "requestor", "dsrc.requestor_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "RequestorDescription", HFILL }},
+ { &hf_dsrc_srmRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_SRMRegional", HFILL }},
+ { &hf_dsrc_srmRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_ssmTimeStamp,
+ { "timeStamp", "dsrc.timeStamp",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MinuteOfTheYear", HFILL }},
+ { &hf_dsrc_ssmStatus,
+ { "status", "dsrc.status",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SignalStatusList", HFILL }},
+ { &hf_dsrc_ssmRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_SSMRegional", HFILL }},
+ { &hf_dsrc_ssmRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_mdTimeStamp,
+ { "timeStamp", "dsrc.timeStamp",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MinuteOfTheYear", HFILL }},
+ { &hf_dsrc_msgIssueRevision,
+ { "msgIssueRevision", "dsrc.msgIssueRevision",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MsgCount", HFILL }},
+ { &hf_dsrc_layerType,
+ { "layerType", "dsrc.layerType",
+ FT_UINT32, BASE_DEC, VALS(dsrc_LayerType_vals), 0,
+ NULL, HFILL }},
+ { &hf_dsrc_layerID,
+ { "layerID", "dsrc.layerID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_mdIntersections,
+ { "intersections", "dsrc.intersections",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "IntersectionGeometryList", HFILL }},
+ { &hf_dsrc_roadSegments,
+ { "roadSegments", "dsrc.roadSegments",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "RoadSegmentList", HFILL }},
+ { &hf_dsrc_dataParameters,
+ { "dataParameters", "dsrc.dataParameters_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_restrictionList,
+ { "restrictionList", "dsrc.restrictionList",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "RestrictionClassList", HFILL }},
+ { &hf_dsrc_mapRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_MAPRegional", HFILL }},
+ { &hf_dsrc_mapRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_asType,
+ { "type", "dsrc.type",
+ FT_UINT32, BASE_DEC, VALS(dsrc_AdvisorySpeedType_vals), 0,
+ "AdvisorySpeedType", HFILL }},
+ { &hf_dsrc_asSpeed,
+ { "speed", "dsrc.speed",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SpeedAdvice", HFILL }},
+ { &hf_dsrc_asConfidence,
+ { "confidence", "dsrc.confidence",
+ FT_UINT32, BASE_DEC, VALS(its_SpeedConfidence_vals), 0,
+ "SpeedConfidence", HFILL }},
+ { &hf_dsrc_distance,
+ { "distance", "dsrc.distance",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "ZoneLength", HFILL }},
+ { &hf_dsrc_class,
+ { "class", "dsrc.class",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "RestrictionClassID", HFILL }},
+ { &hf_dsrc_asRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_AdvisorySpeedRegional", HFILL }},
+ { &hf_dsrc_asRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_AdvisorySpeedList_item,
+ { "AdvisorySpeed", "dsrc.AdvisorySpeed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_referenceLaneId,
+ { "referenceLaneId", "dsrc.referenceLaneId",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "LaneID", HFILL }},
+ { &hf_dsrc_offsetXaxis,
+ { "offsetXaxis", "dsrc.offsetXaxis",
+ FT_UINT32, BASE_DEC, VALS(dsrc_T_offsetXaxis_vals), 0,
+ NULL, HFILL }},
+ { &hf_dsrc_small,
+ { "small", "dsrc.small",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "DrivenLineOffsetSm", HFILL }},
+ { &hf_dsrc_large,
+ { "large", "dsrc.large",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "DrivenLineOffsetLg", HFILL }},
+ { &hf_dsrc_offsetYaxis,
+ { "offsetYaxis", "dsrc.offsetYaxis",
+ FT_UINT32, BASE_DEC, VALS(dsrc_T_offsetYaxis_vals), 0,
+ NULL, HFILL }},
+ { &hf_dsrc_rotateXY,
+ { "rotateXY", "dsrc.rotateXY",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Angle", HFILL }},
+ { &hf_dsrc_scaleXaxis,
+ { "scaleXaxis", "dsrc.scaleXaxis",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "Scale_B12", HFILL }},
+ { &hf_dsrc_scaleYaxis,
+ { "scaleYaxis", "dsrc.scaleYaxis",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "Scale_B12", HFILL }},
+ { &hf_dsrc_clRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_ComputedLaneRegional", HFILL }},
+ { &hf_dsrc_clRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_ConnectsToList_item,
+ { "Connection", "dsrc.Connection_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_lane,
+ { "lane", "dsrc.lane",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "LaneID", HFILL }},
+ { &hf_dsrc_maneuver,
+ { "maneuver", "dsrc.maneuver",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "AllowedManeuvers", HFILL }},
+ { &hf_dsrc_connectingLane,
+ { "connectingLane", "dsrc.connectingLane_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_remoteIntersection,
+ { "remoteIntersection", "dsrc.remoteIntersection_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "IntersectionReferenceID", HFILL }},
+ { &hf_dsrc_signalGroup,
+ { "signalGroup", "dsrc.signalGroup",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SignalGroupID", HFILL }},
+ { &hf_dsrc_userClass,
+ { "userClass", "dsrc.userClass",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "RestrictionClassID", HFILL }},
+ { &hf_dsrc_connectionID,
+ { "connectionID", "dsrc.connectionID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "LaneConnectionID", HFILL }},
+ { &hf_dsrc_queueLength,
+ { "queueLength", "dsrc.queueLength",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "ZoneLength", HFILL }},
+ { &hf_dsrc_availableStorageLength,
+ { "availableStorageLength", "dsrc.availableStorageLength",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "ZoneLength", HFILL }},
+ { &hf_dsrc_waitOnStop,
+ { "waitOnStop", "dsrc.waitOnStop",
+ FT_BOOLEAN, BASE_NONE, NULL, 0,
+ "WaitOnStopline", HFILL }},
+ { &hf_dsrc_pedBicycleDetect,
+ { "pedBicycleDetect", "dsrc.pedBicycleDetect",
+ FT_BOOLEAN, BASE_NONE, NULL, 0,
+ "PedestrianBicycleDetect", HFILL }},
+ { &hf_dsrc_cmaRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_ConnectionManeuverAssistRegional", HFILL }},
+ { &hf_dsrc_cmaRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_processMethod,
+ { "processMethod", "dsrc.processMethod",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "IA5String_SIZE_1_255", HFILL }},
+ { &hf_dsrc_processAgency,
+ { "processAgency", "dsrc.processAgency",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "IA5String_SIZE_1_255", HFILL }},
+ { &hf_dsrc_lastCheckedDate,
+ { "lastCheckedDate", "dsrc.lastCheckedDate",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "IA5String_SIZE_1_255", HFILL }},
+ { &hf_dsrc_geoidUsed,
+ { "geoidUsed", "dsrc.geoidUsed",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "IA5String_SIZE_1_255", HFILL }},
+ { &hf_dsrc_EnabledLaneList_item,
+ { "LaneID", "dsrc.LaneID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_laneID,
+ { "laneID", "dsrc.laneID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_ingressApproach,
+ { "ingressApproach", "dsrc.ingressApproach",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "ApproachID", HFILL }},
+ { &hf_dsrc_egressApproach,
+ { "egressApproach", "dsrc.egressApproach",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "ApproachID", HFILL }},
+ { &hf_dsrc_laneAttributes,
+ { "laneAttributes", "dsrc.laneAttributes_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_maneuvers,
+ { "maneuvers", "dsrc.maneuvers",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "AllowedManeuvers", HFILL }},
+ { &hf_dsrc_nodeList,
+ { "nodeList", "dsrc.nodeList",
+ FT_UINT32, BASE_DEC, VALS(dsrc_NodeListXY_vals), 0,
+ "NodeListXY", HFILL }},
+ { &hf_dsrc_connectsTo,
+ { "connectsTo", "dsrc.connectsTo",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "ConnectsToList", HFILL }},
+ { &hf_dsrc_overlays,
+ { "overlays", "dsrc.overlays",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "OverlayLaneList", HFILL }},
+ { &hf_dsrc_glRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_GenericLaneRegional", HFILL }},
+ { &hf_dsrc_glRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_approach,
+ { "approach", "dsrc.approach",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "ApproachID", HFILL }},
+ { &hf_dsrc_connection,
+ { "connection", "dsrc.connection",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "LaneConnectionID", HFILL }},
+ { &hf_dsrc_igId,
+ { "id", "dsrc.id_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "IntersectionReferenceID", HFILL }},
+ { &hf_dsrc_revision,
+ { "revision", "dsrc.revision",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MsgCount", HFILL }},
+ { &hf_dsrc_refPoint,
+ { "refPoint", "dsrc.refPoint_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Position3D", HFILL }},
+ { &hf_dsrc_laneWidth,
+ { "laneWidth", "dsrc.laneWidth",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_speedLimits,
+ { "speedLimits", "dsrc.speedLimits",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SpeedLimitList", HFILL }},
+ { &hf_dsrc_laneSet,
+ { "laneSet", "dsrc.laneSet",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "LaneList", HFILL }},
+ { &hf_dsrc_preemptPriorityData,
+ { "preemptPriorityData", "dsrc.preemptPriorityData",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "PreemptPriorityList", HFILL }},
+ { &hf_dsrc_igRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_IntersectionGeometryRegional", HFILL }},
+ { &hf_dsrc_igRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_IntersectionGeometryList_item,
+ { "IntersectionGeometry", "dsrc.IntersectionGeometry_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_region,
+ { "region", "dsrc.region",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "RoadRegulatorID", HFILL }},
+ { &hf_dsrc_irId,
+ { "id", "dsrc.id",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "IntersectionID", HFILL }},
+ { &hf_dsrc_isId,
+ { "id", "dsrc.id_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "IntersectionReferenceID", HFILL }},
+ { &hf_dsrc_isStatus,
+ { "status", "dsrc.status",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "IntersectionStatusObject", HFILL }},
+ { &hf_dsrc_moy,
+ { "moy", "dsrc.moy",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MinuteOfTheYear", HFILL }},
+ { &hf_dsrc_isTimeStamp,
+ { "timeStamp", "dsrc.timeStamp",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "DSecond", HFILL }},
+ { &hf_dsrc_enabledLanes,
+ { "enabledLanes", "dsrc.enabledLanes",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "EnabledLaneList", HFILL }},
+ { &hf_dsrc_states,
+ { "states", "dsrc.states",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MovementList", HFILL }},
+ { &hf_dsrc_maneuverAssistList,
+ { "maneuverAssistList", "dsrc.maneuverAssistList",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_isRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_IntersectionStateRegional", HFILL }},
+ { &hf_dsrc_isRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_IntersectionStateList_item,
+ { "IntersectionState", "dsrc.IntersectionState_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_directionalUse,
+ { "directionalUse", "dsrc.directionalUse",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "LaneDirection", HFILL }},
+ { &hf_dsrc_sharedWith,
+ { "sharedWith", "dsrc.sharedWith",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "LaneSharing", HFILL }},
+ { &hf_dsrc_laneType,
+ { "laneType", "dsrc.laneType",
+ FT_UINT32, BASE_DEC, VALS(dsrc_LaneTypeAttributes_vals), 0,
+ "LaneTypeAttributes", HFILL }},
+ { &hf_dsrc_laRegional,
+ { "regional", "dsrc.regional_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "RegionalExtension", HFILL }},
+ { &hf_dsrc_pathEndPointAngle,
+ { "pathEndPointAngle", "dsrc.pathEndPointAngle",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "DeltaAngle", HFILL }},
+ { &hf_dsrc_laneCrownPointCenter,
+ { "laneCrownPointCenter", "dsrc.laneCrownPointCenter",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "RoadwayCrownAngle", HFILL }},
+ { &hf_dsrc_laneCrownPointLeft,
+ { "laneCrownPointLeft", "dsrc.laneCrownPointLeft",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "RoadwayCrownAngle", HFILL }},
+ { &hf_dsrc_laneCrownPointRight,
+ { "laneCrownPointRight", "dsrc.laneCrownPointRight",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "RoadwayCrownAngle", HFILL }},
+ { &hf_dsrc_laneAngle,
+ { "laneAngle", "dsrc.laneAngle",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "MergeDivergeNodeAngle", HFILL }},
+ { &hf_dsrc_ldaRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_LaneDataAttributeRegional", HFILL }},
+ { &hf_dsrc_ldaRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneDataAttributeList_item,
+ { "LaneDataAttribute", "dsrc.LaneDataAttribute",
+ FT_UINT32, BASE_DEC, VALS(dsrc_LaneDataAttribute_vals), 0,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneList_item,
+ { "GenericLane", "dsrc.GenericLane_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_vehicle,
+ { "vehicle", "dsrc.vehicle",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "LaneAttributes_Vehicle", HFILL }},
+ { &hf_dsrc_crosswalk,
+ { "crosswalk", "dsrc.crosswalk",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "LaneAttributes_Crosswalk", HFILL }},
+ { &hf_dsrc_bikeLane,
+ { "bikeLane", "dsrc.bikeLane",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "LaneAttributes_Bike", HFILL }},
+ { &hf_dsrc_sidewalk,
+ { "sidewalk", "dsrc.sidewalk",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "LaneAttributes_Sidewalk", HFILL }},
+ { &hf_dsrc_median,
+ { "median", "dsrc.median",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "LaneAttributes_Barrier", HFILL }},
+ { &hf_dsrc_striping,
+ { "striping", "dsrc.striping",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "LaneAttributes_Striping", HFILL }},
+ { &hf_dsrc_trackedVehicle,
+ { "trackedVehicle", "dsrc.trackedVehicle",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "LaneAttributes_TrackedVehicle", HFILL }},
+ { &hf_dsrc_parking,
+ { "parking", "dsrc.parking",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "LaneAttributes_Parking", HFILL }},
+ { &hf_dsrc_ManeuverAssistList_item,
+ { "ConnectionManeuverAssist", "dsrc.ConnectionManeuverAssist_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_MovementEventList_item,
+ { "MovementEvent", "dsrc.MovementEvent_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_eventState,
+ { "eventState", "dsrc.eventState",
+ FT_UINT32, BASE_DEC, VALS(dsrc_MovementPhaseState_vals), 0,
+ "MovementPhaseState", HFILL }},
+ { &hf_dsrc_timing,
+ { "timing", "dsrc.timing_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TimeChangeDetails", HFILL }},
+ { &hf_dsrc_speeds,
+ { "speeds", "dsrc.speeds",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "AdvisorySpeedList", HFILL }},
+ { &hf_dsrc_meRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_MovementEventRegional", HFILL }},
+ { &hf_dsrc_meRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_MovementList_item,
+ { "MovementState", "dsrc.MovementState_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_movementName,
+ { "movementName", "dsrc.movementName",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "DescriptiveName", HFILL }},
+ { &hf_dsrc_state_time_speed,
+ { "state-time-speed", "dsrc.state_time_speed",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MovementEventList", HFILL }},
+ { &hf_dsrc_msRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_MovementStateRegional", HFILL }},
+ { &hf_dsrc_msRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_localNode,
+ { "localNode", "dsrc.localNode",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "NodeAttributeXYList", HFILL }},
+ { &hf_dsrc_disabled,
+ { "disabled", "dsrc.disabled",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SegmentAttributeXYList", HFILL }},
+ { &hf_dsrc_enabled,
+ { "enabled", "dsrc.enabled",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SegmentAttributeXYList", HFILL }},
+ { &hf_dsrc_data,
+ { "data", "dsrc.data",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "LaneDataAttributeList", HFILL }},
+ { &hf_dsrc_dWidth,
+ { "dWidth", "dsrc.dWidth",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "Offset_B10", HFILL }},
+ { &hf_dsrc_dElevation,
+ { "dElevation", "dsrc.dElevation",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "Offset_B10", HFILL }},
+ { &hf_dsrc_nasxyRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_NodeAttributeSetXYRegional", HFILL }},
+ { &hf_dsrc_nasxyRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_NodeAttributeXYList_item,
+ { "NodeAttributeXY", "dsrc.NodeAttributeXY",
+ FT_UINT32, BASE_DEC, VALS(dsrc_NodeAttributeXY_vals), 0,
+ NULL, HFILL }},
+ { &hf_dsrc_lon,
+ { "lon", "dsrc.lon",
+ FT_INT32, BASE_DEC, VALS(its_Longitude_vals), 0,
+ "Longitude", HFILL }},
+ { &hf_dsrc_lat,
+ { "lat", "dsrc.lat",
+ FT_INT32, BASE_DEC, VALS(its_Latitude_vals), 0,
+ "Latitude", HFILL }},
+ { &hf_dsrc_n20bX,
+ { "x", "dsrc.x",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "Offset_B10", HFILL }},
+ { &hf_dsrc_n20bY,
+ { "y", "dsrc.y",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "Offset_B10", HFILL }},
+ { &hf_dsrc_n22bX,
+ { "x", "dsrc.x",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "Offset_B11", HFILL }},
+ { &hf_dsrc_n22bY,
+ { "y", "dsrc.y",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "Offset_B11", HFILL }},
+ { &hf_dsrc_n24bX,
+ { "x", "dsrc.x",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "Offset_B12", HFILL }},
+ { &hf_dsrc_n24bY,
+ { "y", "dsrc.y",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "Offset_B12", HFILL }},
+ { &hf_dsrc_n26bX,
+ { "x", "dsrc.x",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "Offset_B13", HFILL }},
+ { &hf_dsrc_n26bY,
+ { "y", "dsrc.y",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "Offset_B13", HFILL }},
+ { &hf_dsrc_n28bX,
+ { "x", "dsrc.x",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "Offset_B14", HFILL }},
+ { &hf_dsrc_n28bY,
+ { "y", "dsrc.y",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "Offset_B14", HFILL }},
+ { &hf_dsrc_n32bX,
+ { "x", "dsrc.x",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "Offset_B16", HFILL }},
+ { &hf_dsrc_n32bY,
+ { "y", "dsrc.y",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "Offset_B16", HFILL }},
+ { &hf_dsrc_nodes,
+ { "nodes", "dsrc.nodes",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "NodeSetXY", HFILL }},
+ { &hf_dsrc_computed,
+ { "computed", "dsrc.computed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ComputedLane", HFILL }},
+ { &hf_dsrc_node_XY1,
+ { "node-XY1", "dsrc.node_XY1_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Node_XY_20b", HFILL }},
+ { &hf_dsrc_node_XY2,
+ { "node-XY2", "dsrc.node_XY2_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Node_XY_22b", HFILL }},
+ { &hf_dsrc_node_XY3,
+ { "node-XY3", "dsrc.node_XY3_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Node_XY_24b", HFILL }},
+ { &hf_dsrc_node_XY4,
+ { "node-XY4", "dsrc.node_XY4_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Node_XY_26b", HFILL }},
+ { &hf_dsrc_node_XY5,
+ { "node-XY5", "dsrc.node_XY5_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Node_XY_28b", HFILL }},
+ { &hf_dsrc_node_XY6,
+ { "node-XY6", "dsrc.node_XY6_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Node_XY_32b", HFILL }},
+ { &hf_dsrc_node_LatLon,
+ { "node-LatLon", "dsrc.node_LatLon_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Node_LLmD_64b", HFILL }},
+ { &hf_dsrc_nopxyRegional,
+ { "regional", "dsrc.regional_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "RegionalExtension", HFILL }},
+ { &hf_dsrc_NodeSetXY_item,
+ { "NodeXY", "dsrc.NodeXY_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_delta,
+ { "delta", "dsrc.delta",
+ FT_UINT32, BASE_DEC, VALS(dsrc_NodeOffsetPointXY_vals), 0,
+ "NodeOffsetPointXY", HFILL }},
+ { &hf_dsrc_attributes,
+ { "attributes", "dsrc.attributes_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "NodeAttributeSetXY", HFILL }},
+ { &hf_dsrc_OverlayLaneList_item,
+ { "LaneID", "dsrc.LaneID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_long,
+ { "long", "dsrc.long",
+ FT_INT32, BASE_DEC, VALS(its_Longitude_vals), 0,
+ "Longitude", HFILL }},
+ { &hf_dsrc_elevation,
+ { "elevation", "dsrc.elevation",
+ FT_INT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_p3dRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_Position3DRegional", HFILL }},
+ { &hf_dsrc_p3dRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_PreemptPriorityList_item,
+ { "SignalControlZone", "dsrc.SignalControlZone_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_rslType,
+ { "type", "dsrc.type",
+ FT_UINT32, BASE_DEC, VALS(dsrc_SpeedLimitType_vals), 0,
+ "SpeedLimitType", HFILL }},
+ { &hf_dsrc_rslSpeed,
+ { "speed", "dsrc.speed",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Velocity", HFILL }},
+ { &hf_dsrc_rdId,
+ { "id", "dsrc.id",
+ FT_UINT32, BASE_DEC, VALS(dsrc_VehicleID_vals), 0,
+ "VehicleID", HFILL }},
+ { &hf_dsrc_rdType,
+ { "type", "dsrc.type_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "RequestorType", HFILL }},
+ { &hf_dsrc_rdPosition,
+ { "position", "dsrc.position_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "RequestorPositionVector", HFILL }},
+ { &hf_dsrc_routeName,
+ { "routeName", "dsrc.routeName",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "DescriptiveName", HFILL }},
+ { &hf_dsrc_transitStatus,
+ { "transitStatus", "dsrc.transitStatus",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "TransitVehicleStatus", HFILL }},
+ { &hf_dsrc_transitOccupancy,
+ { "transitOccupancy", "dsrc.transitOccupancy",
+ FT_UINT32, BASE_DEC, VALS(dsrc_TransitVehicleOccupancy_vals), 0,
+ "TransitVehicleOccupancy", HFILL }},
+ { &hf_dsrc_transitSchedule,
+ { "transitSchedule", "dsrc.transitSchedule",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "DeltaTime", HFILL }},
+ { &hf_dsrc_rdRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_RequestorDescriptionRegional", HFILL }},
+ { &hf_dsrc_rdRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_rpvPosition,
+ { "position", "dsrc.position_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Position3D", HFILL }},
+ { &hf_dsrc_heading,
+ { "heading", "dsrc.heading",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Angle", HFILL }},
+ { &hf_dsrc_rpvSpeed,
+ { "speed", "dsrc.speed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TransmissionAndSpeed", HFILL }},
+ { &hf_dsrc_role,
+ { "role", "dsrc.role",
+ FT_UINT32, BASE_DEC, VALS(dsrc_BasicVehicleRole_vals), 0,
+ "BasicVehicleRole", HFILL }},
+ { &hf_dsrc_subrole,
+ { "subrole", "dsrc.subrole",
+ FT_UINT32, BASE_DEC, VALS(dsrc_RequestSubRole_vals), 0,
+ "RequestSubRole", HFILL }},
+ { &hf_dsrc_rtRequest,
+ { "request", "dsrc.request",
+ FT_UINT32, BASE_DEC, VALS(dsrc_RequestImportanceLevel_vals), 0,
+ "RequestImportanceLevel", HFILL }},
+ { &hf_dsrc_iso3883,
+ { "iso3883", "dsrc.iso3883",
+ FT_UINT32, BASE_DEC, VALS(erivdm_Iso3833VehicleType_vals), 0,
+ "Iso3833VehicleType", HFILL }},
+ { &hf_dsrc_hpmsType,
+ { "hpmsType", "dsrc.hpmsType",
+ FT_UINT32, BASE_DEC, VALS(dsrc_VehicleType_vals), 0,
+ "VehicleType", HFILL }},
+ { &hf_dsrc_rtRegional,
+ { "regional", "dsrc.regional_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "RegionalExtension", HFILL }},
+ { &hf_dsrc_scaId,
+ { "id", "dsrc.id",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "RestrictionClassID", HFILL }},
+ { &hf_dsrc_users,
+ { "users", "dsrc.users",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "RestrictionUserTypeList", HFILL }},
+ { &hf_dsrc_RestrictionClassList_item,
+ { "RestrictionClassAssignment", "dsrc.RestrictionClassAssignment_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_RestrictionUserTypeList_item,
+ { "RestrictionUserType", "dsrc.RestrictionUserType",
+ FT_UINT32, BASE_DEC, VALS(dsrc_RestrictionUserType_vals), 0,
+ NULL, HFILL }},
+ { &hf_dsrc_basicType,
+ { "basicType", "dsrc.basicType",
+ FT_UINT32, BASE_DEC, VALS(dsrc_RestrictionAppliesTo_vals), 0,
+ "RestrictionAppliesTo", HFILL }},
+ { &hf_dsrc_rutRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_RestrictionUserTypeRegional", HFILL }},
+ { &hf_dsrc_rutRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_RoadLaneSetList_item,
+ { "GenericLane", "dsrc.GenericLane_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_rsrId,
+ { "id", "dsrc.id",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "RoadSegmentID", HFILL }},
+ { &hf_dsrc_rsId,
+ { "id", "dsrc.id_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "RoadSegmentReferenceID", HFILL }},
+ { &hf_dsrc_roadLaneSet,
+ { "roadLaneSet", "dsrc.roadLaneSet",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "RoadLaneSetList", HFILL }},
+ { &hf_dsrc_rsRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_RoadSegmentRegional", HFILL }},
+ { &hf_dsrc_rsRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_RoadSegmentList_item,
+ { "RoadSegment", "dsrc.RoadSegment_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_SegmentAttributeXYList_item,
+ { "SegmentAttributeXY", "dsrc.SegmentAttributeXY",
+ FT_UINT32, BASE_DEC, VALS(dsrc_SegmentAttributeXY_vals), 0,
+ NULL, HFILL }},
+ { &hf_dsrc_zone,
+ { "zone", "dsrc.zone_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "RegionalExtension", HFILL }},
+ { &hf_dsrc_sriId,
+ { "id", "dsrc.id",
+ FT_UINT32, BASE_DEC, VALS(dsrc_VehicleID_vals), 0,
+ "VehicleID", HFILL }},
+ { &hf_dsrc_sriRequest,
+ { "request", "dsrc.request",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "RequestID", HFILL }},
+ { &hf_dsrc_typeData,
+ { "typeData", "dsrc.typeData_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "RequestorType", HFILL }},
+ { &hf_dsrc_SignalRequestList_item,
+ { "SignalRequestPackage", "dsrc.SignalRequestPackage_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_srpRequest,
+ { "request", "dsrc.request_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "SignalRequest", HFILL }},
+ { &hf_dsrc_minute,
+ { "minute", "dsrc.minute",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "MinuteOfTheYear", HFILL }},
+ { &hf_dsrc_duration,
+ { "duration", "dsrc.duration",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "DSecond", HFILL }},
+ { &hf_dsrc_srpRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_SignalRequestPackageRegional", HFILL }},
+ { &hf_dsrc_srpRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_srId,
+ { "id", "dsrc.id_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "IntersectionReferenceID", HFILL }},
+ { &hf_dsrc_requestID,
+ { "requestID", "dsrc.requestID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_requestType,
+ { "requestType", "dsrc.requestType",
+ FT_UINT32, BASE_DEC, VALS(dsrc_PriorityRequestType_vals), 0,
+ "PriorityRequestType", HFILL }},
+ { &hf_dsrc_inBoundLane,
+ { "inBoundLane", "dsrc.inBoundLane",
+ FT_UINT32, BASE_DEC, VALS(dsrc_IntersectionAccessPoint_vals), 0,
+ "IntersectionAccessPoint", HFILL }},
+ { &hf_dsrc_outBoundLane,
+ { "outBoundLane", "dsrc.outBoundLane",
+ FT_UINT32, BASE_DEC, VALS(dsrc_IntersectionAccessPoint_vals), 0,
+ "IntersectionAccessPoint", HFILL }},
+ { &hf_dsrc_srRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_SignalRequestRegional", HFILL }},
+ { &hf_dsrc_srRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_SignalStatusList_item,
+ { "SignalStatus", "dsrc.SignalStatus_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_SignalStatusPackageList_item,
+ { "SignalStatusPackage", "dsrc.SignalStatusPackage_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_requester,
+ { "requester", "dsrc.requester_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "SignalRequesterInfo", HFILL }},
+ { &hf_dsrc_inboundOn,
+ { "inboundOn", "dsrc.inboundOn",
+ FT_UINT32, BASE_DEC, VALS(dsrc_IntersectionAccessPoint_vals), 0,
+ "IntersectionAccessPoint", HFILL }},
+ { &hf_dsrc_outboundOn,
+ { "outboundOn", "dsrc.outboundOn",
+ FT_UINT32, BASE_DEC, VALS(dsrc_IntersectionAccessPoint_vals), 0,
+ "IntersectionAccessPoint", HFILL }},
+ { &hf_dsrc_sspStatus,
+ { "status", "dsrc.status",
+ FT_UINT32, BASE_DEC, VALS(dsrc_PrioritizationResponseStatus_vals), 0,
+ "PrioritizationResponseStatus", HFILL }},
+ { &hf_dsrc_sspRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_SignalStatusPackageRegional", HFILL }},
+ { &hf_dsrc_sspRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_ssId,
+ { "id", "dsrc.id_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "IntersectionReferenceID", HFILL }},
+ { &hf_dsrc_sigStatus,
+ { "sigStatus", "dsrc.sigStatus",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SignalStatusPackageList", HFILL }},
+ { &hf_dsrc_ssRegional,
+ { "regional", "dsrc.regional",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "T_SignalStatusRegional", HFILL }},
+ { &hf_dsrc_ssRegional_item,
+ { "RegionalExtension", "dsrc.RegionalExtension_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_SpeedLimitList_item,
+ { "RegulatorySpeedLimit", "dsrc.RegulatorySpeedLimit_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_startTime,
+ { "startTime", "dsrc.startTime",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "TimeMark", HFILL }},
+ { &hf_dsrc_minEndTime,
+ { "minEndTime", "dsrc.minEndTime",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "TimeMark", HFILL }},
+ { &hf_dsrc_maxEndTime,
+ { "maxEndTime", "dsrc.maxEndTime",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "TimeMark", HFILL }},
+ { &hf_dsrc_likelyTime,
+ { "likelyTime", "dsrc.likelyTime",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "TimeMark", HFILL }},
+ { &hf_dsrc_tcdConfidence,
+ { "confidence", "dsrc.confidence",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "TimeIntervalConfidence", HFILL }},
+ { &hf_dsrc_nextTime,
+ { "nextTime", "dsrc.nextTime",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "TimeMark", HFILL }},
+ { &hf_dsrc_transmisson,
+ { "transmisson", "dsrc.transmisson",
+ FT_UINT32, BASE_DEC, VALS(dsrc_TransmissionState_vals), 0,
+ "TransmissionState", HFILL }},
+ { &hf_dsrc_tasSpeed,
+ { "speed", "dsrc.speed",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Velocity", HFILL }},
+ { &hf_dsrc_entityID,
+ { "entityID", "dsrc.entityID",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "TemporaryID", HFILL }},
+ { &hf_dsrc_stationID,
+ { "stationID", "dsrc.stationID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneSharing_overlappingLaneDescriptionProvided,
+ { "overlappingLaneDescriptionProvided", "dsrc.overlappingLaneDescriptionProvided",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneSharing_multipleLanesTreatedAsOneLane,
+ { "multipleLanesTreatedAsOneLane", "dsrc.multipleLanesTreatedAsOneLane",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneSharing_otherNonMotorizedTrafficTypes,
+ { "otherNonMotorizedTrafficTypes", "dsrc.otherNonMotorizedTrafficTypes",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneSharing_individualMotorizedVehicleTraffic,
+ { "individualMotorizedVehicleTraffic", "dsrc.individualMotorizedVehicleTraffic",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneSharing_busVehicleTraffic,
+ { "busVehicleTraffic", "dsrc.busVehicleTraffic",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneSharing_taxiVehicleTraffic,
+ { "taxiVehicleTraffic", "dsrc.taxiVehicleTraffic",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneSharing_pedestriansTraffic,
+ { "pedestriansTraffic", "dsrc.pedestriansTraffic",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneSharing_cyclistVehicleTraffic,
+ { "cyclistVehicleTraffic", "dsrc.cyclistVehicleTraffic",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneSharing_trackedVehicleTraffic,
+ { "trackedVehicleTraffic", "dsrc.trackedVehicleTraffic",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneSharing_pedestrianTraffic,
+ { "pedestrianTraffic", "dsrc.pedestrianTraffic",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_dsrc_AllowedManeuvers_maneuverStraightAllowed,
+ { "maneuverStraightAllowed", "dsrc.maneuverStraightAllowed",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_dsrc_AllowedManeuvers_maneuverLeftAllowed,
+ { "maneuverLeftAllowed", "dsrc.maneuverLeftAllowed",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_dsrc_AllowedManeuvers_maneuverRightAllowed,
+ { "maneuverRightAllowed", "dsrc.maneuverRightAllowed",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_dsrc_AllowedManeuvers_maneuverUTurnAllowed,
+ { "maneuverUTurnAllowed", "dsrc.maneuverUTurnAllowed",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_dsrc_AllowedManeuvers_maneuverLeftTurnOnRedAllowed,
+ { "maneuverLeftTurnOnRedAllowed", "dsrc.maneuverLeftTurnOnRedAllowed",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_dsrc_AllowedManeuvers_maneuverRightTurnOnRedAllowed,
+ { "maneuverRightTurnOnRedAllowed", "dsrc.maneuverRightTurnOnRedAllowed",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+ { &hf_dsrc_AllowedManeuvers_maneuverLaneChangeAllowed,
+ { "maneuverLaneChangeAllowed", "dsrc.maneuverLaneChangeAllowed",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+ { &hf_dsrc_AllowedManeuvers_maneuverNoStoppingAllowed,
+ { "maneuverNoStoppingAllowed", "dsrc.maneuverNoStoppingAllowed",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }},
+ { &hf_dsrc_AllowedManeuvers_yieldAllwaysRequired,
+ { "yieldAllwaysRequired", "dsrc.yieldAllwaysRequired",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_dsrc_AllowedManeuvers_goWithHalt,
+ { "goWithHalt", "dsrc.goWithHalt",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_dsrc_AllowedManeuvers_caution,
+ { "caution", "dsrc.caution",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_dsrc_AllowedManeuvers_reserved1,
+ { "reserved1", "dsrc.reserved1",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_dsrc_IntersectionStatusObject_manualControlIsEnabled,
+ { "manualControlIsEnabled", "dsrc.manualControlIsEnabled",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_dsrc_IntersectionStatusObject_stopTimeIsActivated,
+ { "stopTimeIsActivated", "dsrc.stopTimeIsActivated",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_dsrc_IntersectionStatusObject_failureFlash,
+ { "failureFlash", "dsrc.failureFlash",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_dsrc_IntersectionStatusObject_preemptIsActive,
+ { "preemptIsActive", "dsrc.preemptIsActive",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_dsrc_IntersectionStatusObject_signalPriorityIsActive,
+ { "signalPriorityIsActive", "dsrc.signalPriorityIsActive",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_dsrc_IntersectionStatusObject_fixedTimeOperation,
+ { "fixedTimeOperation", "dsrc.fixedTimeOperation",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+ { &hf_dsrc_IntersectionStatusObject_trafficDependentOperation,
+ { "trafficDependentOperation", "dsrc.trafficDependentOperation",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+ { &hf_dsrc_IntersectionStatusObject_standbyOperation,
+ { "standbyOperation", "dsrc.standbyOperation",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }},
+ { &hf_dsrc_IntersectionStatusObject_failureMode,
+ { "failureMode", "dsrc.failureMode",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_dsrc_IntersectionStatusObject_off,
+ { "off", "dsrc.off",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_dsrc_IntersectionStatusObject_recentMAPmessageUpdate,
+ { "recentMAPmessageUpdate", "dsrc.recentMAPmessageUpdate",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_dsrc_IntersectionStatusObject_recentChangeInMAPassignedLanesIDsUsed,
+ { "recentChangeInMAPassignedLanesIDsUsed", "dsrc.recentChangeInMAPassignedLanesIDsUsed",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_dsrc_IntersectionStatusObject_noValidMAPisAvailableAtThisTime,
+ { "noValidMAPisAvailableAtThisTime", "dsrc.noValidMAPisAvailableAtThisTime",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_dsrc_IntersectionStatusObject_noValidSPATisAvailableAtThisTime,
+ { "noValidSPATisAvailableAtThisTime", "dsrc.noValidSPATisAvailableAtThisTime",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Barrier_median_RevocableLane,
+ { "median-RevocableLane", "dsrc.median-RevocableLane",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Barrier_median,
+ { "median", "dsrc.median",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Barrier_whiteLineHashing,
+ { "whiteLineHashing", "dsrc.whiteLineHashing",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Barrier_stripedLines,
+ { "stripedLines", "dsrc.stripedLines",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Barrier_doubleStripedLines,
+ { "doubleStripedLines", "dsrc.doubleStripedLines",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Barrier_trafficCones,
+ { "trafficCones", "dsrc.trafficCones",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Barrier_constructionBarrier,
+ { "constructionBarrier", "dsrc.constructionBarrier",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Barrier_trafficChannels,
+ { "trafficChannels", "dsrc.trafficChannels",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Barrier_lowCurbs,
+ { "lowCurbs", "dsrc.lowCurbs",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Barrier_highCurbs,
+ { "highCurbs", "dsrc.highCurbs",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Bike_bikeRevocableLane,
+ { "bikeRevocableLane", "dsrc.bikeRevocableLane",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Bike_pedestrianUseAllowed,
+ { "pedestrianUseAllowed", "dsrc.pedestrianUseAllowed",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Bike_isBikeFlyOverLane,
+ { "isBikeFlyOverLane", "dsrc.isBikeFlyOverLane",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Bike_fixedCycleTime,
+ { "fixedCycleTime", "dsrc.fixedCycleTime",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Bike_biDirectionalCycleTimes,
+ { "biDirectionalCycleTimes", "dsrc.biDirectionalCycleTimes",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Bike_isolatedByBarrier,
+ { "isolatedByBarrier", "dsrc.isolatedByBarrier",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Bike_unsignalizedSegmentsPresent,
+ { "unsignalizedSegmentsPresent", "dsrc.unsignalizedSegmentsPresent",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Crosswalk_crosswalkRevocableLane,
+ { "crosswalkRevocableLane", "dsrc.crosswalkRevocableLane",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Crosswalk_bicyleUseAllowed,
+ { "bicyleUseAllowed", "dsrc.bicyleUseAllowed",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Crosswalk_isXwalkFlyOverLane,
+ { "isXwalkFlyOverLane", "dsrc.isXwalkFlyOverLane",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Crosswalk_fixedCycleTime,
+ { "fixedCycleTime", "dsrc.fixedCycleTime",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Crosswalk_biDirectionalCycleTimes,
+ { "biDirectionalCycleTimes", "dsrc.biDirectionalCycleTimes",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Crosswalk_hasPushToWalkButton,
+ { "hasPushToWalkButton", "dsrc.hasPushToWalkButton",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Crosswalk_audioSupport,
+ { "audioSupport", "dsrc.audioSupport",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Crosswalk_rfSignalRequestPresent,
+ { "rfSignalRequestPresent", "dsrc.rfSignalRequestPresent",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Crosswalk_unsignalizedSegmentsPresent,
+ { "unsignalizedSegmentsPresent", "dsrc.unsignalizedSegmentsPresent",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Parking_parkingRevocableLane,
+ { "parkingRevocableLane", "dsrc.parkingRevocableLane",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Parking_parallelParkingInUse,
+ { "parallelParkingInUse", "dsrc.parallelParkingInUse",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Parking_headInParkingInUse,
+ { "headInParkingInUse", "dsrc.headInParkingInUse",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Parking_doNotParkZone,
+ { "doNotParkZone", "dsrc.doNotParkZone",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Parking_parkingForBusUse,
+ { "parkingForBusUse", "dsrc.parkingForBusUse",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Parking_parkingForTaxiUse,
+ { "parkingForTaxiUse", "dsrc.parkingForTaxiUse",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Parking_noPublicParkingUse,
+ { "noPublicParkingUse", "dsrc.noPublicParkingUse",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Sidewalk_sidewalk_RevocableLane,
+ { "sidewalk-RevocableLane", "dsrc.sidewalk-RevocableLane",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Sidewalk_bicyleUseAllowed,
+ { "bicyleUseAllowed", "dsrc.bicyleUseAllowed",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Sidewalk_isSidewalkFlyOverLane,
+ { "isSidewalkFlyOverLane", "dsrc.isSidewalkFlyOverLane",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Sidewalk_walkBikes,
+ { "walkBikes", "dsrc.walkBikes",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Striping_stripeToConnectingLanesRevocableLane,
+ { "stripeToConnectingLanesRevocableLane", "dsrc.stripeToConnectingLanesRevocableLane",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Striping_stripeDrawOnLeft,
+ { "stripeDrawOnLeft", "dsrc.stripeDrawOnLeft",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Striping_stripeDrawOnRight,
+ { "stripeDrawOnRight", "dsrc.stripeDrawOnRight",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Striping_stripeToConnectingLanesLeft,
+ { "stripeToConnectingLanesLeft", "dsrc.stripeToConnectingLanesLeft",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Striping_stripeToConnectingLanesRight,
+ { "stripeToConnectingLanesRight", "dsrc.stripeToConnectingLanesRight",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Striping_stripeToConnectingLanesAhead,
+ { "stripeToConnectingLanesAhead", "dsrc.stripeToConnectingLanesAhead",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_TrackedVehicle_spec_RevocableLane,
+ { "spec-RevocableLane", "dsrc.spec-RevocableLane",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_TrackedVehicle_spec_commuterRailRoadTrack,
+ { "spec-commuterRailRoadTrack", "dsrc.spec-commuterRailRoadTrack",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_TrackedVehicle_spec_lightRailRoadTrack,
+ { "spec-lightRailRoadTrack", "dsrc.spec-lightRailRoadTrack",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_TrackedVehicle_spec_heavyRailRoadTrack,
+ { "spec-heavyRailRoadTrack", "dsrc.spec-heavyRailRoadTrack",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_TrackedVehicle_spec_otherRailType,
+ { "spec-otherRailType", "dsrc.spec-otherRailType",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Vehicle_isVehicleRevocableLane,
+ { "isVehicleRevocableLane", "dsrc.isVehicleRevocableLane",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Vehicle_isVehicleFlyOverLane,
+ { "isVehicleFlyOverLane", "dsrc.isVehicleFlyOverLane",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Vehicle_hovLaneUseOnly,
+ { "hovLaneUseOnly", "dsrc.hovLaneUseOnly",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Vehicle_restrictedToBusUse,
+ { "restrictedToBusUse", "dsrc.restrictedToBusUse",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Vehicle_restrictedToTaxiUse,
+ { "restrictedToTaxiUse", "dsrc.restrictedToTaxiUse",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Vehicle_restrictedFromPublicUse,
+ { "restrictedFromPublicUse", "dsrc.restrictedFromPublicUse",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Vehicle_hasIRbeaconCoverage,
+ { "hasIRbeaconCoverage", "dsrc.hasIRbeaconCoverage",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneAttributes_Vehicle_permissionOnRequest,
+ { "permissionOnRequest", "dsrc.permissionOnRequest",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneDirection_ingressPath,
+ { "ingressPath", "dsrc.ingressPath",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_dsrc_LaneDirection_egressPath,
+ { "egressPath", "dsrc.egressPath",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_dsrc_TransitVehicleStatus_loading,
+ { "loading", "dsrc.loading",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_dsrc_TransitVehicleStatus_anADAuse,
+ { "anADAuse", "dsrc.anADAuse",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_dsrc_TransitVehicleStatus_aBikeLoad,
+ { "aBikeLoad", "dsrc.aBikeLoad",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_dsrc_TransitVehicleStatus_doorOpen,
+ { "doorOpen", "dsrc.doorOpen",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_dsrc_TransitVehicleStatus_charging,
+ { "charging", "dsrc.charging",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_dsrc_TransitVehicleStatus_atStopLine,
+ { "atStopLine", "dsrc.atStopLine",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+
+/* --- Module AddGrpC --- --- --- */
+
+ { &hf_AddGrpC_AddGrpC_ConnectionManeuverAssist_addGrpC_PDU,
+ { "ConnectionManeuverAssist-addGrpC", "AddGrpC.ConnectionManeuverAssist_addGrpC_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_AddGrpC_AddGrpC_ConnectionTrajectory_addGrpC_PDU,
+ { "ConnectionTrajectory-addGrpC", "AddGrpC.ConnectionTrajectory_addGrpC_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_AddGrpC_AddGrpC_Control_addGrpC_PDU,
+ { "Control-addGrpC", "AddGrpC.Control_addGrpC_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_AddGrpC_AddGrpC_IntersectionState_addGrpC_PDU,
+ { "IntersectionState-addGrpC", "AddGrpC.IntersectionState_addGrpC_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_AddGrpC_AddGrpC_MapData_addGrpC_PDU,
+ { "MapData-addGrpC", "AddGrpC.MapData_addGrpC_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_AddGrpC_AddGrpC_Position3D_addGrpC_PDU,
+ { "Position3D-addGrpC", "AddGrpC.Position3D_addGrpC_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_AddGrpC_AddGrpC_RestrictionUserType_addGrpC_PDU,
+ { "RestrictionUserType-addGrpC", "AddGrpC.RestrictionUserType_addGrpC_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_AddGrpC_AddGrpC_SignalStatusPackage_addGrpC_PDU,
+ { "SignalStatusPackage-addGrpC", "AddGrpC.SignalStatusPackage_addGrpC_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_AddGrpC_itsStationPositions,
+ { "itsStationPositions", "AddGrpC.itsStationPositions",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "ItsStationPositionList", HFILL }},
+ { &hf_AddGrpC_rsuGNSSOffset,
+ { "rsuGNSSOffset", "AddGrpC.rsuGNSSOffset",
+ FT_UINT32, BASE_DEC, VALS(dsrc_NodeOffsetPointXY_vals), 0,
+ "NodeOffsetPointXY", HFILL }},
+ { &hf_AddGrpC_nodes,
+ { "nodes", "AddGrpC.nodes",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "NodeSetXY", HFILL }},
+ { &hf_AddGrpC_ptvRequest,
+ { "ptvRequest", "AddGrpC.ptvRequest",
+ FT_UINT32, BASE_DEC, VALS(AddGrpC_PtvRequestType_vals), 0,
+ "PtvRequestType", HFILL }},
+ { &hf_AddGrpC_activePrioritizations,
+ { "activePrioritizations", "AddGrpC.activePrioritizations",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "PrioritizationResponseList", HFILL }},
+ { &hf_AddGrpC_signalHeadLocations,
+ { "signalHeadLocations", "AddGrpC.signalHeadLocations",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SignalHeadLocationList", HFILL }},
+ { &hf_AddGrpC_altitude,
+ { "altitude", "AddGrpC.altitude_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_AddGrpC_PrioritizationResponseList_item,
+ { "PrioritizationResponse", "AddGrpC.PrioritizationResponse_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_AddGrpC_stationID,
+ { "stationID", "AddGrpC.stationID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_AddGrpC_priorState,
+ { "priorState", "AddGrpC.priorState",
+ FT_UINT32, BASE_DEC, VALS(dsrc_PrioritizationResponseStatus_vals), 0,
+ "PrioritizationResponseStatus", HFILL }},
+ { &hf_AddGrpC_signalGroup,
+ { "signalGroup", "AddGrpC.signalGroup",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SignalGroupID", HFILL }},
+ { &hf_AddGrpC_emission,
+ { "emission", "AddGrpC.emission",
+ FT_UINT32, BASE_DEC, VALS(AddGrpC_EmissionType_vals), 0,
+ "EmissionType", HFILL }},
+ { &hf_AddGrpC_SignalHeadLocationList_item,
+ { "SignalHeadLocation", "AddGrpC.SignalHeadLocation_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_AddGrpC_nodeXY,
+ { "nodeXY", "AddGrpC.nodeXY",
+ FT_UINT32, BASE_DEC, VALS(dsrc_NodeOffsetPointXY_vals), 0,
+ "NodeOffsetPointXY", HFILL }},
+ { &hf_AddGrpC_nodeZ,
+ { "nodeZ", "AddGrpC.nodeZ",
+ FT_INT32, BASE_DEC, VALS(its_DeltaAltitude_vals), 0,
+ "DeltaAltitude", HFILL }},
+ { &hf_AddGrpC_signalGroupID,
+ { "signalGroupID", "AddGrpC.signalGroupID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_AddGrpC_synchToSchedule,
+ { "synchToSchedule", "AddGrpC.synchToSchedule",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "DeltaTime", HFILL }},
+ { &hf_AddGrpC_ItsStationPositionList_item,
+ { "ItsStationPosition", "AddGrpC.ItsStationPosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_AddGrpC_laneID,
+ { "laneID", "AddGrpC.laneID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_AddGrpC_timeReference,
+ { "timeReference", "AddGrpC.timeReference",
+ FT_UINT32, BASE_DEC, VALS(AddGrpC_TimeReference_vals), 0,
+ NULL, HFILL }},
+
+/* --- Module CAM-PDU-Descriptions --- --- --- */
+
+ { &hf_cam_cam_CoopAwareness_PDU,
+ { "CoopAwareness", "cam.CoopAwareness_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_generationDeltaTime,
+ { "generationDeltaTime", "cam.generationDeltaTime",
+ FT_UINT32, BASE_DEC, VALS(cam_GenerationDeltaTime_vals), 0,
+ NULL, HFILL }},
+ { &hf_cam_camParameters,
+ { "camParameters", "cam.camParameters_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_basicContainer,
+ { "basicContainer", "cam.basicContainer_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_highFrequencyContainer,
+ { "highFrequencyContainer", "cam.highFrequencyContainer",
+ FT_UINT32, BASE_DEC, VALS(cam_HighFrequencyContainer_vals), 0,
+ NULL, HFILL }},
+ { &hf_cam_lowFrequencyContainer,
+ { "lowFrequencyContainer", "cam.lowFrequencyContainer",
+ FT_UINT32, BASE_DEC, VALS(cam_LowFrequencyContainer_vals), 0,
+ NULL, HFILL }},
+ { &hf_cam_specialVehicleContainer,
+ { "specialVehicleContainer", "cam.specialVehicleContainer",
+ FT_UINT32, BASE_DEC, VALS(cam_SpecialVehicleContainer_vals), 0,
+ NULL, HFILL }},
+ { &hf_cam_basicVehicleContainerHighFrequency,
+ { "basicVehicleContainerHighFrequency", "cam.basicVehicleContainerHighFrequency_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_rsuContainerHighFrequency,
+ { "rsuContainerHighFrequency", "cam.rsuContainerHighFrequency_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_basicVehicleContainerLowFrequency,
+ { "basicVehicleContainerLowFrequency", "cam.basicVehicleContainerLowFrequency_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_publicTransportContainer,
+ { "publicTransportContainer", "cam.publicTransportContainer_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_specialTransportContainer,
+ { "specialTransportContainer", "cam.specialTransportContainer_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_dangerousGoodsContainer,
+ { "dangerousGoodsContainer", "cam.dangerousGoodsContainer_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_roadWorksContainerBasic,
+ { "roadWorksContainerBasic", "cam.roadWorksContainerBasic_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_rescueContainer,
+ { "rescueContainer", "cam.rescueContainer_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_emergencyContainer,
+ { "emergencyContainer", "cam.emergencyContainer_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_safetyCarContainer,
+ { "safetyCarContainer", "cam.safetyCarContainer_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_stationType,
+ { "stationType", "cam.stationType",
+ FT_UINT32, BASE_DEC, VALS(its_StationType_vals), 0,
+ NULL, HFILL }},
+ { &hf_cam_referencePosition,
+ { "referencePosition", "cam.referencePosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_heading,
+ { "heading", "cam.heading_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_speed,
+ { "speed", "cam.speed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_driveDirection,
+ { "driveDirection", "cam.driveDirection",
+ FT_UINT32, BASE_DEC, VALS(its_DriveDirection_vals), 0,
+ NULL, HFILL }},
+ { &hf_cam_vehicleLength,
+ { "vehicleLength", "cam.vehicleLength_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_vehicleWidth,
+ { "vehicleWidth", "cam.vehicleWidth",
+ FT_UINT32, BASE_DEC, VALS(its_VehicleWidth_vals), 0,
+ NULL, HFILL }},
+ { &hf_cam_longitudinalAcceleration,
+ { "longitudinalAcceleration", "cam.longitudinalAcceleration_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_curvature,
+ { "curvature", "cam.curvature_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_curvatureCalculationMode,
+ { "curvatureCalculationMode", "cam.curvatureCalculationMode",
+ FT_UINT32, BASE_DEC, VALS(its_CurvatureCalculationMode_vals), 0,
+ NULL, HFILL }},
+ { &hf_cam_yawRate,
+ { "yawRate", "cam.yawRate_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_accelerationControl,
+ { "accelerationControl", "cam.accelerationControl",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_lanePosition,
+ { "lanePosition", "cam.lanePosition",
+ FT_INT32, BASE_DEC, VALS(its_LanePosition_vals), 0,
+ NULL, HFILL }},
+ { &hf_cam_steeringWheelAngle,
+ { "steeringWheelAngle", "cam.steeringWheelAngle_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_lateralAcceleration,
+ { "lateralAcceleration", "cam.lateralAcceleration_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_verticalAcceleration,
+ { "verticalAcceleration", "cam.verticalAcceleration_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_performanceClass,
+ { "performanceClass", "cam.performanceClass",
+ FT_UINT32, BASE_DEC, VALS(its_PerformanceClass_vals), 0,
+ NULL, HFILL }},
+ { &hf_cam_cenDsrcTollingZone,
+ { "cenDsrcTollingZone", "cam.cenDsrcTollingZone_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_vehicleRole,
+ { "vehicleRole", "cam.vehicleRole",
+ FT_UINT32, BASE_DEC, VALS(its_VehicleRole_vals), 0,
+ NULL, HFILL }},
+ { &hf_cam_exteriorLights,
+ { "exteriorLights", "cam.exteriorLights",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_pathHistory,
+ { "pathHistory", "cam.pathHistory",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_embarkationStatus,
+ { "embarkationStatus", "cam.embarkationStatus",
+ FT_BOOLEAN, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_ptActivation,
+ { "ptActivation", "cam.ptActivation_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_specialTransportType,
+ { "specialTransportType", "cam.specialTransportType",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_lightBarSirenInUse,
+ { "lightBarSirenInUse", "cam.lightBarSirenInUse",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_dangerousGoodsBasic,
+ { "dangerousGoodsBasic", "cam.dangerousGoodsBasic",
+ FT_UINT32, BASE_DEC, VALS(its_DangerousGoodsBasic_vals), 0,
+ NULL, HFILL }},
+ { &hf_cam_roadworksSubCauseCode,
+ { "roadworksSubCauseCode", "cam.roadworksSubCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_RoadworksSubCauseCode_vals), 0,
+ NULL, HFILL }},
+ { &hf_cam_closedLanes,
+ { "closedLanes", "cam.closedLanes_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_incidentIndication,
+ { "incidentIndication", "cam.incidentIndication_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "CauseCode", HFILL }},
+ { &hf_cam_emergencyPriority,
+ { "emergencyPriority", "cam.emergencyPriority",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_cam_trafficRule,
+ { "trafficRule", "cam.trafficRule",
+ FT_UINT32, BASE_DEC, VALS(its_TrafficRule_vals), 0,
+ NULL, HFILL }},
+ { &hf_cam_speedLimit,
+ { "speedLimit", "cam.speedLimit",
+ FT_UINT32, BASE_DEC, VALS(its_SpeedLimit_vals), 0,
+ NULL, HFILL }},
+ { &hf_cam_protectedCommunicationZonesRSU,
+ { "protectedCommunicationZonesRSU", "cam.protectedCommunicationZonesRSU",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+/* --- Module DENM-PDU-Descriptions --- --- --- */
+
+ { &hf_denm_denm_DecentralizedEnvironmentalNotificationMessage_PDU,
+ { "DecentralizedEnvironmentalNotificationMessage", "denm.DecentralizedEnvironmentalNotificationMessage_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_denm_management,
+ { "management", "denm.management_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ManagementContainer", HFILL }},
+ { &hf_denm_situation,
+ { "situation", "denm.situation_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "SituationContainer", HFILL }},
+ { &hf_denm_location,
+ { "location", "denm.location_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "LocationContainer", HFILL }},
+ { &hf_denm_alacarte,
+ { "alacarte", "denm.alacarte_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "AlacarteContainer", HFILL }},
+ { &hf_denm_actionID,
+ { "actionID", "denm.actionID_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_denm_detectionTime,
+ { "detectionTime", "denm.detectionTime",
+ FT_UINT64, BASE_DEC, NULL, 0,
+ "TimestampIts", HFILL }},
+ { &hf_denm_referenceTime,
+ { "referenceTime", "denm.referenceTime",
+ FT_UINT64, BASE_DEC, NULL, 0,
+ "TimestampIts", HFILL }},
+ { &hf_denm_termination,
+ { "termination", "denm.termination",
+ FT_UINT32, BASE_DEC, VALS(denm_Termination_vals), 0,
+ NULL, HFILL }},
+ { &hf_denm_eventPosition,
+ { "eventPosition", "denm.eventPosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ReferencePosition", HFILL }},
+ { &hf_denm_relevanceDistance,
+ { "relevanceDistance", "denm.relevanceDistance",
+ FT_UINT32, BASE_DEC, VALS(its_RelevanceDistance_vals), 0,
+ NULL, HFILL }},
+ { &hf_denm_relevanceTrafficDirection,
+ { "relevanceTrafficDirection", "denm.relevanceTrafficDirection",
+ FT_UINT32, BASE_DEC, VALS(its_RelevanceTrafficDirection_vals), 0,
+ NULL, HFILL }},
+ { &hf_denm_validityDuration,
+ { "validityDuration", "denm.validityDuration",
+ FT_UINT32, BASE_DEC, VALS(its_ValidityDuration_vals), 0,
+ NULL, HFILL }},
+ { &hf_denm_transmissionInterval,
+ { "transmissionInterval", "denm.transmissionInterval",
+ FT_UINT32, BASE_DEC, VALS(its_TransmissionInterval_vals), 0,
+ NULL, HFILL }},
+ { &hf_denm_stationType,
+ { "stationType", "denm.stationType",
+ FT_UINT32, BASE_DEC, VALS(its_StationType_vals), 0,
+ NULL, HFILL }},
+ { &hf_denm_informationQuality,
+ { "informationQuality", "denm.informationQuality",
+ FT_UINT32, BASE_DEC, VALS(its_InformationQuality_vals), 0,
+ NULL, HFILL }},
+ { &hf_denm_eventType,
+ { "eventType", "denm.eventType_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "CauseCode", HFILL }},
+ { &hf_denm_linkedCause,
+ { "linkedCause", "denm.linkedCause_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "CauseCode", HFILL }},
+ { &hf_denm_eventHistory,
+ { "eventHistory", "denm.eventHistory",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_denm_eventSpeed,
+ { "eventSpeed", "denm.eventSpeed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Speed", HFILL }},
+ { &hf_denm_eventPositionHeading,
+ { "eventPositionHeading", "denm.eventPositionHeading_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Heading", HFILL }},
+ { &hf_denm_traces,
+ { "traces", "denm.traces",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_denm_roadType,
+ { "roadType", "denm.roadType",
+ FT_UINT32, BASE_DEC, VALS(its_RoadType_vals), 0,
+ NULL, HFILL }},
+ { &hf_denm_heightLonCarrLeft,
+ { "heightLonCarrLeft", "denm.heightLonCarrLeft",
+ FT_UINT32, BASE_DEC, VALS(its_HeightLonCarr_vals), 0,
+ "HeightLonCarr", HFILL }},
+ { &hf_denm_heightLonCarrRight,
+ { "heightLonCarrRight", "denm.heightLonCarrRight",
+ FT_UINT32, BASE_DEC, VALS(its_HeightLonCarr_vals), 0,
+ "HeightLonCarr", HFILL }},
+ { &hf_denm_posLonCarrLeft,
+ { "posLonCarrLeft", "denm.posLonCarrLeft",
+ FT_UINT32, BASE_DEC, VALS(its_PosLonCarr_vals), 0,
+ "PosLonCarr", HFILL }},
+ { &hf_denm_posLonCarrRight,
+ { "posLonCarrRight", "denm.posLonCarrRight",
+ FT_UINT32, BASE_DEC, VALS(its_PosLonCarr_vals), 0,
+ "PosLonCarr", HFILL }},
+ { &hf_denm_positionOfPillars,
+ { "positionOfPillars", "denm.positionOfPillars",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_denm_posCentMass,
+ { "posCentMass", "denm.posCentMass",
+ FT_UINT32, BASE_DEC, VALS(its_PosCentMass_vals), 0,
+ NULL, HFILL }},
+ { &hf_denm_wheelBaseVehicle,
+ { "wheelBaseVehicle", "denm.wheelBaseVehicle",
+ FT_UINT32, BASE_DEC, VALS(its_WheelBaseVehicle_vals), 0,
+ NULL, HFILL }},
+ { &hf_denm_turningRadius,
+ { "turningRadius", "denm.turningRadius",
+ FT_UINT32, BASE_DEC, VALS(its_TurningRadius_vals), 0,
+ NULL, HFILL }},
+ { &hf_denm_posFrontAx,
+ { "posFrontAx", "denm.posFrontAx",
+ FT_UINT32, BASE_DEC, VALS(its_PosFrontAx_vals), 0,
+ NULL, HFILL }},
+ { &hf_denm_positionOfOccupants,
+ { "positionOfOccupants", "denm.positionOfOccupants",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_denm_vehicleMass,
+ { "vehicleMass", "denm.vehicleMass",
+ FT_UINT32, BASE_DEC, VALS(its_VehicleMass_vals), 0,
+ NULL, HFILL }},
+ { &hf_denm_requestResponseIndication,
+ { "requestResponseIndication", "denm.requestResponseIndication",
+ FT_UINT32, BASE_DEC, VALS(its_RequestResponseIndication_vals), 0,
+ NULL, HFILL }},
+ { &hf_denm_lightBarSirenInUse,
+ { "lightBarSirenInUse", "denm.lightBarSirenInUse",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_denm_closedLanes,
+ { "closedLanes", "denm.closedLanes_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_denm_restriction,
+ { "restriction", "denm.restriction",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "RestrictedTypes", HFILL }},
+ { &hf_denm_speedLimit,
+ { "speedLimit", "denm.speedLimit",
+ FT_UINT32, BASE_DEC, VALS(its_SpeedLimit_vals), 0,
+ NULL, HFILL }},
+ { &hf_denm_incidentIndication,
+ { "incidentIndication", "denm.incidentIndication_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "CauseCode", HFILL }},
+ { &hf_denm_recommendedPath,
+ { "recommendedPath", "denm.recommendedPath",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "ItineraryPath", HFILL }},
+ { &hf_denm_startingPointSpeedLimit,
+ { "startingPointSpeedLimit", "denm.startingPointSpeedLimit_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DeltaReferencePosition", HFILL }},
+ { &hf_denm_trafficFlowRule,
+ { "trafficFlowRule", "denm.trafficFlowRule",
+ FT_UINT32, BASE_DEC, VALS(its_TrafficRule_vals), 0,
+ "TrafficRule", HFILL }},
+ { &hf_denm_referenceDenms,
+ { "referenceDenms", "denm.referenceDenms",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_denm_stationarySince,
+ { "stationarySince", "denm.stationarySince",
+ FT_UINT32, BASE_DEC, VALS(its_StationarySince_vals), 0,
+ NULL, HFILL }},
+ { &hf_denm_stationaryCause,
+ { "stationaryCause", "denm.stationaryCause_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "CauseCode", HFILL }},
+ { &hf_denm_carryingDangerousGoods,
+ { "carryingDangerousGoods", "denm.carryingDangerousGoods_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DangerousGoodsExtended", HFILL }},
+ { &hf_denm_numberOfOccupants,
+ { "numberOfOccupants", "denm.numberOfOccupants",
+ FT_UINT32, BASE_DEC, VALS(its_NumberOfOccupants_vals), 0,
+ NULL, HFILL }},
+ { &hf_denm_vehicleIdentification,
+ { "vehicleIdentification", "denm.vehicleIdentification_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_denm_energyStorageType,
+ { "energyStorageType", "denm.energyStorageType",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_denm_lanePosition,
+ { "lanePosition", "denm.lanePosition",
+ FT_INT32, BASE_DEC, VALS(its_LanePosition_vals), 0,
+ NULL, HFILL }},
+ { &hf_denm_impactReduction,
+ { "impactReduction", "denm.impactReduction_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ImpactReductionContainer", HFILL }},
+ { &hf_denm_externalTemperature,
+ { "externalTemperature", "denm.externalTemperature",
+ FT_INT32, BASE_DEC, VALS(its_Temperature_vals), 0,
+ "Temperature", HFILL }},
+ { &hf_denm_roadWorks,
+ { "roadWorks", "denm.roadWorks_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "RoadWorksContainerExtended", HFILL }},
+ { &hf_denm_positioningSolution,
+ { "positioningSolution", "denm.positioningSolution",
+ FT_UINT32, BASE_DEC, VALS(its_PositioningSolutionType_vals), 0,
+ "PositioningSolutionType", HFILL }},
+ { &hf_denm_stationaryVehicle,
+ { "stationaryVehicle", "denm.stationaryVehicle_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "StationaryVehicleContainer", HFILL }},
+ { &hf_denm_ReferenceDenms_item,
+ { "ActionID", "denm.ActionID_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+
+/* --- Module TIS-TPG-Transactions-Descriptions --- --- --- */
+
+ { &hf_tistpg_tistpg_TisTpgTransaction_PDU,
+ { "TisTpgTransaction", "tistpg.TisTpgTransaction",
+ FT_UINT32, BASE_DEC, VALS(tistpg_TisTpgTransaction_vals), 0,
+ NULL, HFILL }},
+ { &hf_tistpg_drm,
+ { "drm", "tistpg.drm_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TisTpgDRM", HFILL }},
+ { &hf_tistpg_snm,
+ { "snm", "tistpg.snm_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TisTpgSNM", HFILL }},
+ { &hf_tistpg_trm,
+ { "trm", "tistpg.trm_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TisTpgTRM", HFILL }},
+ { &hf_tistpg_tcm,
+ { "tcm", "tistpg.tcm_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TisTpgTCM", HFILL }},
+ { &hf_tistpg_vdrm,
+ { "vdrm", "tistpg.vdrm_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TisTpgVDRM", HFILL }},
+ { &hf_tistpg_vdpm,
+ { "vdpm", "tistpg.vdpm_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TisTpgVDPM", HFILL }},
+ { &hf_tistpg_eofm,
+ { "eofm", "tistpg.eofm_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TisTpgEOFM", HFILL }},
+ { &hf_tistpg_drmManagement,
+ { "management", "tistpg.management_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TisTpgDRM_Management", HFILL }},
+ { &hf_tistpg_drmSituation,
+ { "situation", "tistpg.situation_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TisTpgDRM_Situation", HFILL }},
+ { &hf_tistpg_drmLocation,
+ { "location", "tistpg.location_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TisTpgDRM_Location", HFILL }},
+ { &hf_tistpg_generationTime,
+ { "generationTime", "tistpg.generationTime",
+ FT_UINT64, BASE_DEC, NULL, 0,
+ "TimestampIts", HFILL }},
+ { &hf_tistpg_vehicleType,
+ { "vehicleType", "tistpg.vehicleType",
+ FT_UINT32, BASE_DEC, VALS(tistpg_UNVehicleClassifcation_vals), 0,
+ "UNVehicleClassifcation", HFILL }},
+ { &hf_tistpg_costumerContract,
+ { "costumerContract", "tistpg.costumerContract",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "CustomerContract", HFILL }},
+ { &hf_tistpg_tisProfile,
+ { "tisProfile", "tistpg.tisProfile",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_causeCode,
+ { "causeCode", "tistpg.causeCode_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_vehiclePosition,
+ { "vehiclePosition", "tistpg.vehiclePosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ReferencePosition", HFILL }},
+ { &hf_tistpg_vehicleSpeed,
+ { "vehicleSpeed", "tistpg.vehicleSpeed_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Speed", HFILL }},
+ { &hf_tistpg_vehicleHeading,
+ { "vehicleHeading", "tistpg.vehicleHeading_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Heading", HFILL }},
+ { &hf_tistpg_requestedPosition,
+ { "requestedPosition", "tistpg.requestedPosition_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ReferencePosition", HFILL }},
+ { &hf_tistpg_searchRange,
+ { "searchRange", "tistpg.searchRange",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_searchCondition,
+ { "searchCondition", "tistpg.searchCondition",
+ FT_UINT32, BASE_DEC, VALS(tistpg_SearchCondition_vals), 0,
+ NULL, HFILL }},
+ { &hf_tistpg_snmManagement,
+ { "management", "tistpg.management_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TisTpgSNM_Management", HFILL }},
+ { &hf_tistpg_tpgContainer,
+ { "tpgContainer", "tistpg.tpgContainer",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "TpgNotifContainer", HFILL }},
+ { &hf_tistpg_totalTpgStations,
+ { "totalTpgStations", "tistpg.totalTpgStations",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_trmManagement,
+ { "management", "tistpg.management_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TisTpgTRM_Management", HFILL }},
+ { &hf_tistpg_trmSituation,
+ { "situation", "tistpg.situation_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TisTpgTRM_Situation", HFILL }},
+ { &hf_tistpg_trmLocation,
+ { "location", "tistpg.location_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TisTpgTRM_Location", HFILL }},
+ { &hf_tistpg_tpgStationID,
+ { "tpgStationID", "tistpg.tpgStationID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "StationID", HFILL }},
+ { &hf_tistpg_reservationStatus,
+ { "reservationStatus", "tistpg.reservationStatus",
+ FT_UINT32, BASE_DEC, VALS(tistpg_ReservationStatus_vals), 0,
+ NULL, HFILL }},
+ { &hf_tistpg_costumercontract,
+ { "costumercontract", "tistpg.costumercontract",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "CustomerContract", HFILL }},
+ { &hf_tistpg_reservationID,
+ { "reservationID", "tistpg.reservationID",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_estArrivalTime,
+ { "estArrivalTime", "tistpg.estArrivalTime",
+ FT_UINT64, BASE_DEC, NULL, 0,
+ "TimestampIts", HFILL }},
+ { &hf_tistpg_proposedPairingID,
+ { "proposedPairingID", "tistpg.proposedPairingID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "PairingID", HFILL }},
+ { &hf_tistpg_tcmManagement,
+ { "management", "tistpg.management_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TisTpgTCM_Management", HFILL }},
+ { &hf_tistpg_tcmSituation,
+ { "situation", "tistpg.situation_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TisTpgTCM_Situation", HFILL }},
+ { &hf_tistpg_tcmLocation,
+ { "location", "tistpg.location_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TisTpgTCM_Location", HFILL }},
+ { &hf_tistpg_reservedTpg,
+ { "reservedTpg", "tistpg.reservedTpg",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_1_65535", HFILL }},
+ { &hf_tistpg_tpgAutomationLevel,
+ { "tpgAutomationLevel", "tistpg.tpgAutomationLevel",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "TpgAutomation", HFILL }},
+ { &hf_tistpg_pairingID,
+ { "pairingID", "tistpg.pairingID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_reservationTimeLimit,
+ { "reservationTimeLimit", "tistpg.reservationTimeLimit",
+ FT_UINT64, BASE_DEC, NULL, 0,
+ "TimestampIts", HFILL }},
+ { &hf_tistpg_cancellationCondition,
+ { "cancellationCondition", "tistpg.cancellationCondition",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_tpgLocation,
+ { "tpgLocation", "tistpg.tpgLocation_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ReferencePosition", HFILL }},
+ { &hf_tistpg_address,
+ { "address", "tistpg.address",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "UTF8String_SIZE_1_128", HFILL }},
+ { &hf_tistpg_vdrmManagement,
+ { "management", "tistpg.management_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TisTpgVDRM_Management", HFILL }},
+ { &hf_tistpg_fillingStatus,
+ { "fillingStatus", "tistpg.fillingStatus",
+ FT_UINT32, BASE_DEC, VALS(tistpg_FillingStatus_vals), 0,
+ NULL, HFILL }},
+ { &hf_tistpg_automationLevel,
+ { "automationLevel", "tistpg.automationLevel",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "TpgAutomation", HFILL }},
+ { &hf_tistpg_vdpmManagement,
+ { "management", "tistpg.management_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TisTpgVDPM_Management", HFILL }},
+ { &hf_tistpg_placardTable,
+ { "placardTable", "tistpg.placardTable",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_vehicleSpecificData,
+ { "vehicleSpecificData", "tistpg.vehicleSpecificData_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_language,
+ { "language", "tistpg.language",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_tyreTempCondition,
+ { "tyreTempCondition", "tistpg.tyreTempCondition",
+ FT_UINT32, BASE_DEC, VALS(tistpg_TyreTempCondition_vals), 0,
+ NULL, HFILL }},
+ { &hf_tistpg_currentVehicleConfiguration,
+ { "currentVehicleConfiguration", "tistpg.currentVehicleConfiguration",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "PressureConfiguration", HFILL }},
+ { &hf_tistpg_frontLeftTyreData,
+ { "frontLeftTyreData", "tistpg.frontLeftTyreData_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TyreData", HFILL }},
+ { &hf_tistpg_frontRightTyreData,
+ { "frontRightTyreData", "tistpg.frontRightTyreData_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TyreData", HFILL }},
+ { &hf_tistpg_rearLeftTyreData,
+ { "rearLeftTyreData", "tistpg.rearLeftTyreData_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TyreData", HFILL }},
+ { &hf_tistpg_rearRightTyreData,
+ { "rearRightTyreData", "tistpg.rearRightTyreData_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TyreData", HFILL }},
+ { &hf_tistpg_spareTyreData,
+ { "spareTyreData", "tistpg.spareTyreData_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TyreData", HFILL }},
+ { &hf_tistpg_eofmManagement,
+ { "management", "tistpg.management_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "TisTpgEOFM_Management", HFILL }},
+ { &hf_tistpg_numberOfAppliedPressure,
+ { "numberOfAppliedPressure", "tistpg.numberOfAppliedPressure",
+ FT_UINT32, BASE_DEC, VALS(tistpg_NumberOfAppliedPressure_vals), 0,
+ NULL, HFILL }},
+ { &hf_tistpg_appliedTyrePressures,
+ { "appliedTyrePressures", "tistpg.appliedTyrePressures",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_PlacardTable_item,
+ { "TyreSetVariant", "tistpg.TyreSetVariant_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_variantID,
+ { "variantID", "tistpg.variantID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "TyreSetVariantID", HFILL }},
+ { &hf_tistpg_frontAxleDimension,
+ { "frontAxleDimension", "tistpg.frontAxleDimension",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "TyreSidewallInformation", HFILL }},
+ { &hf_tistpg_rearAxleDimension,
+ { "rearAxleDimension", "tistpg.rearAxleDimension",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "TyreSidewallInformation", HFILL }},
+ { &hf_tistpg_pressureVariantsList,
+ { "pressureVariantsList", "tistpg.pressureVariantsList",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_PressureVariantsList_item,
+ { "PressureVariant", "tistpg.PressureVariant_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_pressureConfiguration,
+ { "pressureConfiguration", "tistpg.pressureConfiguration",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_frontAxlePressure,
+ { "frontAxlePressure", "tistpg.frontAxlePressure",
+ FT_UINT32, BASE_DEC, VALS(tistpg_AxlePlacardPressure_vals), 0,
+ "AxlePlacardPressure", HFILL }},
+ { &hf_tistpg_rearAxlePressure,
+ { "rearAxlePressure", "tistpg.rearAxlePressure",
+ FT_UINT32, BASE_DEC, VALS(tistpg_AxlePlacardPressure_vals), 0,
+ "AxlePlacardPressure", HFILL }},
+ { &hf_tistpg_currentTyrePressure,
+ { "currentTyrePressure", "tistpg.currentTyrePressure",
+ FT_UINT32, BASE_DEC, VALS(tistpg_T_currentTyrePressure_vals), 0,
+ NULL, HFILL }},
+ { &hf_tistpg_tyrePressureValue,
+ { "tyrePressureValue", "tistpg.tyrePressureValue",
+ FT_UINT32, BASE_DEC, VALS(tistpg_TyrePressure_vals), 0,
+ "TyrePressure", HFILL }},
+ { &hf_tistpg_unavailable,
+ { "unavailable", "tistpg.unavailable_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_tyreSidewallInformation,
+ { "tyreSidewallInformation", "tistpg.tyreSidewallInformation",
+ FT_UINT32, BASE_DEC, VALS(tistpg_T_tyreSidewallInformation_vals), 0,
+ NULL, HFILL }},
+ { &hf_tistpg_tyreSidewallInformationValue,
+ { "tyreSidewallInformationValue", "tistpg.tyreSidewallInformationValue",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "TyreSidewallInformation", HFILL }},
+ { &hf_tistpg_currentInsideAirTemperature,
+ { "currentInsideAirTemperature", "tistpg.currentInsideAirTemperature",
+ FT_UINT32, BASE_DEC, VALS(tistpg_T_currentInsideAirTemperature_vals), 0,
+ NULL, HFILL }},
+ { &hf_tistpg_tyreAirTemperatureValue,
+ { "tyreAirTemperatureValue", "tistpg.tyreAirTemperatureValue",
+ FT_UINT32, BASE_DEC, VALS(tistpg_TyreAirTemperature_vals), 0,
+ "TyreAirTemperature", HFILL }},
+ { &hf_tistpg_recommendedTyrePressure,
+ { "recommendedTyrePressure", "tistpg.recommendedTyrePressure",
+ FT_UINT32, BASE_DEC, VALS(tistpg_T_recommendedTyrePressure_vals), 0,
+ NULL, HFILL }},
+ { &hf_tistpg_axlePlacardPressureValue,
+ { "axlePlacardPressureValue", "tistpg.axlePlacardPressureValue",
+ FT_UINT32, BASE_DEC, VALS(tistpg_AxlePlacardPressure_vals), 0,
+ "AxlePlacardPressure", HFILL }},
+ { &hf_tistpg_tin,
+ { "tin", "tistpg.tin",
+ FT_UINT32, BASE_DEC, VALS(tistpg_T_tin_vals), 0,
+ NULL, HFILL }},
+ { &hf_tistpg_tinValue,
+ { "tinValue", "tistpg.tinValue",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "TIN", HFILL }},
+ { &hf_tistpg_sensorState,
+ { "sensorState", "tistpg.sensorState",
+ FT_UINT32, BASE_DEC, VALS(tistpg_T_sensorState_vals), 0,
+ NULL, HFILL }},
+ { &hf_tistpg_sensorStateValue,
+ { "sensorStateValue", "tistpg.sensorStateValue",
+ FT_UINT32, BASE_DEC, VALS(tistpg_SensorState_vals), 0,
+ "SensorState", HFILL }},
+ { &hf_tistpg_tpgNumber,
+ { "tpgNumber", "tistpg.tpgNumber",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_tpgProvider,
+ { "tpgProvider", "tistpg.tpgProvider",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_accessibility,
+ { "accessibility", "tistpg.accessibility",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_phoneNumber,
+ { "phoneNumber", "tistpg.phoneNumber",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_digitalMap,
+ { "digitalMap", "tistpg.digitalMap",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_openingDaysHours,
+ { "openingDaysHours", "tistpg.openingDaysHours",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_bookingInfo,
+ { "bookingInfo", "tistpg.bookingInfo",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_availableTpgNumber,
+ { "availableTpgNumber", "tistpg.availableTpgNumber",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_AppliedTyrePressures_item,
+ { "AppliedTyrePressure", "tistpg.AppliedTyrePressure",
+ FT_UINT32, BASE_DEC, VALS(tistpg_AppliedTyrePressure_vals), 0,
+ NULL, HFILL }},
+ { &hf_tistpg_TpgNotifContainer_item,
+ { "TpgStationData", "tistpg.TpgStationData_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_tistpg_TpgAutomation_fullAutomated,
+ { "fullAutomated", "tistpg.fullAutomated",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_tistpg_TpgAutomation_semiAutomated,
+ { "semiAutomated", "tistpg.semiAutomated",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_tistpg_TpgAutomation_manual,
+ { "manual", "tistpg.manual",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_tistpg_TpgAutomation_reserved,
+ { "reserved", "tistpg.reserved",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_tistpg_TisProfile_reserved,
+ { "reserved", "tistpg.reserved",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_tistpg_TisProfile_profileOne,
+ { "profileOne", "tistpg.profileOne",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_tistpg_TisProfile_profileTwo,
+ { "profileTwo", "tistpg.profileTwo",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_tistpg_TisProfile_profileThree,
+ { "profileThree", "tistpg.profileThree",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+
+/* --- Module EVCSN-PDU-Descriptions --- --- --- */
+
+ { &hf_evcsn_evcsn_EVChargingSpotNotificationPOIMessage_PDU,
+ { "EVChargingSpotNotificationPOIMessage", "evcsn.EVChargingSpotNotificationPOIMessage_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evcsn_poiHeader,
+ { "poiHeader", "evcsn.poiHeader_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ItsPOIHeader", HFILL }},
+ { &hf_evcsn_evcsnData,
+ { "evcsnData", "evcsn.evcsnData_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ItsEVCSNData", HFILL }},
+ { &hf_evcsn_poiType,
+ { "poiType", "evcsn.poiType",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evcsn_timeStamp,
+ { "timeStamp", "evcsn.timeStamp",
+ FT_UINT64, BASE_DEC, NULL, 0,
+ "TimestampIts", HFILL }},
+ { &hf_evcsn_relayCapable,
+ { "relayCapable", "evcsn.relayCapable",
+ FT_BOOLEAN, BASE_NONE, NULL, 0,
+ "BOOLEAN", HFILL }},
+ { &hf_evcsn_totalNumberOfStations,
+ { "totalNumberOfStations", "evcsn.totalNumberOfStations",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "NumberStations", HFILL }},
+ { &hf_evcsn_chargingStationsData,
+ { "chargingStationsData", "evcsn.chargingStationsData",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SEQUENCE_SIZE_1_256_OF_ItsChargingStationData", HFILL }},
+ { &hf_evcsn_chargingStationsData_item,
+ { "ItsChargingStationData", "evcsn.ItsChargingStationData_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evcsn_chargingStationID,
+ { "chargingStationID", "evcsn.chargingStationID",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "StationID", HFILL }},
+ { &hf_evcsn_utilityDistributorId,
+ { "utilityDistributorId", "evcsn.utilityDistributorId",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "UTF8String_SIZE_1_32", HFILL }},
+ { &hf_evcsn_providerID,
+ { "providerID", "evcsn.providerID",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "UTF8String_SIZE_1_32", HFILL }},
+ { &hf_evcsn_chargingStationLocation,
+ { "chargingStationLocation", "evcsn.chargingStationLocation_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "ReferencePosition", HFILL }},
+ { &hf_evcsn_address,
+ { "address", "evcsn.address",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "UTF8String", HFILL }},
+ { &hf_evcsn_phoneNumber,
+ { "phoneNumber", "evcsn.phoneNumber",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "NumericString_SIZE_1_16", HFILL }},
+ { &hf_evcsn_accessibility,
+ { "accessibility", "evcsn.accessibility",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "UTF8String_SIZE_1_32", HFILL }},
+ { &hf_evcsn_digitalMap,
+ { "digitalMap", "evcsn.digitalMap",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evcsn_openingDaysHours,
+ { "openingDaysHours", "evcsn.openingDaysHours",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "UTF8String", HFILL }},
+ { &hf_evcsn_pricing,
+ { "pricing", "evcsn.pricing",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "UTF8String", HFILL }},
+ { &hf_evcsn_bookingContactInfo,
+ { "bookingContactInfo", "evcsn.bookingContactInfo",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "UTF8String", HFILL }},
+ { &hf_evcsn_payment,
+ { "payment", "evcsn.payment",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "UTF8String", HFILL }},
+ { &hf_evcsn_chargingSpotsAvailable,
+ { "chargingSpotsAvailable", "evcsn.chargingSpotsAvailable",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "ItsChargingSpots", HFILL }},
+ { &hf_evcsn_ItsChargingSpots_item,
+ { "ItsChargingSpotDataElements", "evcsn.ItsChargingSpotDataElements_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evcsn_type,
+ { "type", "evcsn.type",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ "ChargingSpotType", HFILL }},
+ { &hf_evcsn_evEquipmentID,
+ { "evEquipmentID", "evcsn.evEquipmentID",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "UTF8String", HFILL }},
+ { &hf_evcsn_typeOfReceptacle,
+ { "typeOfReceptacle", "evcsn.typeOfReceptacle",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evcsn_energyAvailability,
+ { "energyAvailability", "evcsn.energyAvailability",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "UTF8String", HFILL }},
+ { &hf_evcsn_parkingPlacesData,
+ { "parkingPlacesData", "evcsn.parkingPlacesData",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evcsn_ParkingPlacesData_item,
+ { "SpotAvailability", "evcsn.SpotAvailability_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evcsn_maxWaitingTimeMinutes,
+ { "maxWaitingTimeMinutes", "evcsn.maxWaitingTimeMinutes",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "INTEGER_0_1400", HFILL }},
+ { &hf_evcsn_blocking,
+ { "blocking", "evcsn.blocking",
+ FT_BOOLEAN, BASE_NONE, NULL, 0,
+ "BOOLEAN", HFILL }},
+ { &hf_evcsn_ChargingSpotType_standardChargeMode1,
+ { "standardChargeMode1", "evcsn.standardChargeMode1",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_evcsn_ChargingSpotType_standardChargeMode2,
+ { "standardChargeMode2", "evcsn.standardChargeMode2",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+ { &hf_evcsn_ChargingSpotType_standardOrFastChargeMode3,
+ { "standardOrFastChargeMode3", "evcsn.standardOrFastChargeMode3",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+ { &hf_evcsn_ChargingSpotType_fastChargeWithExternalCharger,
+ { "fastChargeWithExternalCharger", "evcsn.fastChargeWithExternalCharger",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+ { &hf_evcsn_ChargingSpotType_quickDrop,
+ { "quickDrop", "evcsn.quickDrop",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_evcsn_ChargingSpotType_inductiveChargeWhileStationary,
+ { "inductiveChargeWhileStationary", "evcsn.inductiveChargeWhileStationary",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+ { &hf_evcsn_ChargingSpotType_inductiveChargeWhileDriving,
+ { "inductiveChargeWhileDriving", "evcsn.inductiveChargeWhileDriving",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+
+/* --- Module EV-RechargingSpotReservation-PDU-Descriptions --- --- --- */
+
+ { &hf_evrsr_evrsr_EV_RSR_MessageBody_PDU,
+ { "EV-RSR-MessageBody", "evrsr.EV_RSR_MessageBody",
+ FT_UINT32, BASE_DEC, VALS(evrsr_EV_RSR_MessageBody_vals), 0,
+ NULL, HFILL }},
+ { &hf_evrsr_preReservationRequestMessage,
+ { "preReservationRequestMessage", "evrsr.preReservationRequestMessage_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evrsr_preReservationResponseMessage,
+ { "preReservationResponseMessage", "evrsr.preReservationResponseMessage_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evrsr_reservationRequestMessage,
+ { "reservationRequestMessage", "evrsr.reservationRequestMessage_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evrsr_reservationResponseMessage,
+ { "reservationResponseMessage", "evrsr.reservationResponseMessage_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evrsr_cancellationRequestMessage,
+ { "cancellationRequestMessage", "evrsr.cancellationRequestMessage_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evrsr_cancellationResponseMessage,
+ { "cancellationResponseMessage", "evrsr.cancellationResponseMessage_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evrsr_updateRequestMessage,
+ { "updateRequestMessage", "evrsr.updateRequestMessage_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evrsr_updateResponseMessage,
+ { "updateResponseMessage", "evrsr.updateResponseMessage_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evrsr_evse_ID,
+ { "evse-ID", "evrsr.evse_ID",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evrsr_arrivalTime,
+ { "arrivalTime", "evrsr.arrivalTime",
+ FT_INT32, BASE_DEC, VALS(evrsr_TimestampUTC_vals), 0,
+ "TimestampUTC", HFILL }},
+ { &hf_evrsr_departureTime,
+ { "departureTime", "evrsr.departureTime",
+ FT_INT32, BASE_DEC, VALS(evrsr_TimestampUTC_vals), 0,
+ "TimestampUTC", HFILL }},
+ { &hf_evrsr_rechargingType,
+ { "rechargingType", "evrsr.rechargingType_element",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evrsr_batteryType,
+ { "batteryType", "evrsr.batteryType",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evrsr_preReservation_ID,
+ { "preReservation-ID", "evrsr.preReservation_ID",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evrsr_availabilityStatus,
+ { "availabilityStatus", "evrsr.availabilityStatus",
+ FT_UINT32, BASE_DEC, VALS(evrsr_AvailabilityStatus_vals), 0,
+ NULL, HFILL }},
+ { &hf_evrsr_preReservationExpirationTime,
+ { "preReservationExpirationTime", "evrsr.preReservationExpirationTime",
+ FT_INT32, BASE_DEC, VALS(evrsr_TimestampUTC_vals), 0,
+ "TimestampUTC", HFILL }},
+ { &hf_evrsr_supportedPaymentTypes,
+ { "supportedPaymentTypes", "evrsr.supportedPaymentTypes",
+ FT_BYTES, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evrsr_currentTime,
+ { "currentTime", "evrsr.currentTime",
+ FT_INT32, BASE_DEC, VALS(evrsr_TimestampUTC_vals), 0,
+ "TimestampUTC", HFILL }},
+ { &hf_evrsr_eAmount,
+ { "eAmount", "evrsr.eAmount",
+ FT_UINT32, BASE_DEC, VALS(evrsr_EAmount_vals), 0,
+ NULL, HFILL }},
+ { &hf_evrsr_eAmountMin,
+ { "eAmountMin", "evrsr.eAmountMin",
+ FT_UINT32, BASE_DEC, VALS(evrsr_EAmount_vals), 0,
+ "EAmount", HFILL }},
+ { &hf_evrsr_paymentType,
+ { "paymentType", "evrsr.paymentType",
+ FT_UINT32, BASE_DEC, VALS(evrsr_PaymentType_vals), 0,
+ NULL, HFILL }},
+ { &hf_evrsr_payment_ID,
+ { "payment-ID", "evrsr.payment_ID",
+ FT_UINT32, BASE_DEC, VALS(evrsr_Payment_ID_vals), 0,
+ NULL, HFILL }},
+ { &hf_evrsr_secondPayment_ID,
+ { "secondPayment-ID", "evrsr.secondPayment_ID",
+ FT_UINT32, BASE_DEC, VALS(evrsr_Payment_ID_vals), 0,
+ "Payment_ID", HFILL }},
+ { &hf_evrsr_pairing_ID,
+ { "pairing-ID", "evrsr.pairing_ID",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evrsr_reservationResponseCode,
+ { "reservationResponseCode", "evrsr.reservationResponseCode",
+ FT_UINT32, BASE_DEC, VALS(evrsr_ReservationResponseCode_vals), 0,
+ NULL, HFILL }},
+ { &hf_evrsr_reservation_ID,
+ { "reservation-ID", "evrsr.reservation_ID",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evrsr_reservation_Password,
+ { "reservation-Password", "evrsr.reservation_Password",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evrsr_stationDetails,
+ { "stationDetails", "evrsr.stationDetails",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evrsr_chargingSpotLabel,
+ { "chargingSpotLabel", "evrsr.chargingSpotLabel",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evrsr_expirationTime,
+ { "expirationTime", "evrsr.expirationTime",
+ FT_INT32, BASE_DEC, VALS(evrsr_TimestampUTC_vals), 0,
+ "TimestampUTC", HFILL }},
+ { &hf_evrsr_freeCancelTimeLimit,
+ { "freeCancelTimeLimit", "evrsr.freeCancelTimeLimit",
+ FT_INT32, BASE_DEC, VALS(evrsr_TimestampUTC_vals), 0,
+ "TimestampUTC", HFILL }},
+ { &hf_evrsr_cancellationResponseCode,
+ { "cancellationResponseCode", "evrsr.cancellationResponseCode",
+ FT_UINT32, BASE_DEC, VALS(evrsr_CancellationResponseCode_vals), 0,
+ NULL, HFILL }},
+ { &hf_evrsr_updatedArrivalTime,
+ { "updatedArrivalTime", "evrsr.updatedArrivalTime",
+ FT_INT32, BASE_DEC, VALS(evrsr_TimestampUTC_vals), 0,
+ "TimestampUTC", HFILL }},
+ { &hf_evrsr_updatedDepartureTime,
+ { "updatedDepartureTime", "evrsr.updatedDepartureTime",
+ FT_INT32, BASE_DEC, VALS(evrsr_TimestampUTC_vals), 0,
+ "TimestampUTC", HFILL }},
+ { &hf_evrsr_updateResponseCode,
+ { "updateResponseCode", "evrsr.updateResponseCode",
+ FT_UINT32, BASE_DEC, VALS(evrsr_UpdateResponseCode_vals), 0,
+ NULL, HFILL }},
+ { &hf_evrsr_contractID,
+ { "contractID", "evrsr.contractID",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evrsr_externalIdentificationMeans,
+ { "externalIdentificationMeans", "evrsr.externalIdentificationMeans",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+ { &hf_evrsr_rechargingMode,
+ { "rechargingMode", "evrsr.rechargingMode",
+ FT_UINT32, BASE_DEC, VALS(evrsr_RechargingMode_vals), 0,
+ NULL, HFILL }},
+ { &hf_evrsr_powerSource,
+ { "powerSource", "evrsr.powerSource",
+ FT_UINT32, BASE_DEC, VALS(evrsr_PowerSource_vals), 0,
+ NULL, HFILL }},
+ { &hf_evrsr_SupportedPaymentTypes_contract,
+ { "contract", "evrsr.contract",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+ { &hf_evrsr_SupportedPaymentTypes_externalIdentification,
+ { "externalIdentification", "evrsr.externalIdentification",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+
+/*--- End of included file: packet-its-hfarr.c ---*/
+#line 255 "./asn1/its/packet-its-template.c"
+
+ { &hf_its_roadworksSubCauseCode,
+ { "roadworksSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_RoadworksSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_postCrashSubCauseCode,
+ { "postCrashSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_PostCrashSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_vehicleBreakdownSubCauseCode,
+ { "vehicleBreakdownSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_VehicleBreakdownSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_dangerousSituationSubCauseCode,
+ { "dangerousSituationSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_DangerousSituationSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_dangerousEndOfQueueSubCauseCode,
+ { "dangerousEndOfQueueSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_DangerousEndOfQueueSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_rescueAndRecoveryWorkInProgressSubCauseCode,
+ { "rescueAndRecoveryWorkInProgressSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_RescueAndRecoveryWorkInProgressSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_signalViolationSubCauseCode,
+ { "signalViolationSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_SignalViolationSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_collisionRiskSubCauseCode,
+ { "collisionRiskSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_CollisionRiskSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_hazardousLocation_AnimalOnTheRoadSubCauseCode,
+ { "hazardousLocation_AnimalOnTheRoadSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_HazardousLocation_AnimalOnTheRoadSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_hazardousLocation_ObstacleOnTheRoadSubCauseCode,
+ { "hazardousLocation_ObstacleOnTheRoadSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_HazardousLocation_ObstacleOnTheRoadSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_hazardousLocation_SurfaceConditionSubCauseCode,
+ { "hazardousLocation_SurfaceConditionSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_HazardousLocation_SurfaceConditionSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_hazardousLocation_DangerousCurveSubCauseCode,
+ { "hazardousLocation_DangerousCurveSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_HazardousLocation_DangerousCurveSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_emergencyVehicleApproachingSubCauseCode,
+ { "emergencyVehicleApproachingSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_EmergencyVehicleApproachingSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_humanProblemSubCauseCode,
+ { "humanProblemSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_HumanProblemSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_stationaryVehicleSubCauseCode,
+ { "stationaryVehicleSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_StationaryVehicleSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_slowVehicleSubCauseCode,
+ { "slowVehicleSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_SlowVehicleSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_adverseWeatherCondition_PrecipitationSubCauseCode,
+ { "adverseWeatherCondition_PrecipitationSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_AdverseWeatherCondition_PrecipitationSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_adverseWeatherCondition_VisibilitySubCauseCode,
+ { "adverseWeatherCondition_VisibilitySubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_AdverseWeatherCondition_VisibilitySubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_adverseWeatherCondition_AdhesionSubCauseCode,
+ { "adverseWeatherCondition_AdhesionSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_AdverseWeatherCondition_AdhesionSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_adverseWeatherCondition_ExtremeWeatherConditionSubCauseCode,
+ { "adverseWeatherCondition_ExtremeWeatherConditionSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_AdverseWeatherCondition_ExtremeWeatherConditionSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_wrongWayDrivingSubCauseCode,
+ { "wrongWayDrivingSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_WrongWayDrivingSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_humanPresenceOnTheRoadSubCauseCode,
+ { "humanPresenceOnTheRoadSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_HumanPresenceOnTheRoadSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_accidentSubCauseCode,
+ { "accidentSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_AccidentSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ { &hf_its_trafficConditionSubCauseCode,
+ { "trafficConditionSubCauseCode", "its.subCauseCode",
+ FT_UINT32, BASE_DEC, VALS(its_TrafficConditionSubCauseCode_vals), 0,
+ "SubCauseCodeType", HFILL }},
+ };
+
+ static gint *ett[] = {
+ &ett_its,
+
+/*--- Included file: packet-its-ettarr.c ---*/
+#line 1 "./asn1/its/packet-its-ettarr.c"
+
+/* --- Module ITS-Container --- --- --- */
+
+ &ett_its_ItsPduHeader,
+ &ett_its_ReferencePosition,
+ &ett_its_DeltaReferencePosition,
+ &ett_its_Altitude,
+ &ett_its_PosConfidenceEllipse,
+ &ett_its_PathPoint,
+ &ett_its_PtActivation,
+ &ett_its_AccelerationControl,
+ &ett_its_CauseCode,
+ &ett_its_Curvature,
+ &ett_its_Heading,
+ &ett_its_ClosedLanes,
+ &ett_its_Speed,
+ &ett_its_LongitudinalAcceleration,
+ &ett_its_LateralAcceleration,
+ &ett_its_VerticalAcceleration,
+ &ett_its_ExteriorLights,
+ &ett_its_DangerousGoodsExtended,
+ &ett_its_SpecialTransportType,
+ &ett_its_LightBarSirenInUse,
+ &ett_its_PositionOfOccupants,
+ &ett_its_VehicleIdentification,
+ &ett_its_EnergyStorageType,
+ &ett_its_VehicleLength,
+ &ett_its_PathHistory,
+ &ett_its_EmergencyPriority,
+ &ett_its_SteeringWheelAngle,
+ &ett_its_YawRate,
+ &ett_its_ActionID,
+ &ett_its_ItineraryPath,
+ &ett_its_ProtectedCommunicationZone,
+ &ett_its_Traces,
+ &ett_its_PositionOfPillars,
+ &ett_its_RestrictedTypes,
+ &ett_its_EventHistory,
+ &ett_its_EventPoint,
+ &ett_its_ProtectedCommunicationZonesRSU,
+ &ett_its_CenDsrcTollingZone,
+ &ett_its_DigitalMap,
+
+/* --- Module AVIAEINumberingAndDataStructures --- --- --- */
+
+
+/* --- Module ElectronicRegistrationIdentificationVehicleDataModule --- --- --- */
+
+ &ett_erivdm_EuVehicleCategoryCode,
+
+/* --- Module CITSapplMgmtIDs --- --- --- */
+
+ &ett_csmid_VarLengthNumber,
+ &ett_csmid_Ext1,
+ &ett_csmid_Ext2,
+
+/* --- Module EfcDsrcApplication --- --- --- */
+
+ &ett_dsrc_app_AxleWeightLimits,
+ &ett_dsrc_app_DieselEmissionValues,
+ &ett_dsrc_app_T_particulate,
+ &ett_dsrc_app_EnvironmentalCharacteristics,
+ &ett_dsrc_app_ExhaustEmissionValues,
+ &ett_dsrc_app_PassengerCapacity,
+ &ett_dsrc_app_Provider,
+ &ett_dsrc_app_SoundLevel,
+ &ett_dsrc_app_VehicleDimensions,
+ &ett_dsrc_app_VehicleWeightLimits,
+
+/* --- Module IVI --- --- --- */
+
+ &ett_ivi_IviStructure,
+ &ett_ivi_SEQUENCE_SIZE_1_8__OF_IviContainer,
+ &ett_ivi_IviContainer,
+ &ett_ivi_IVIManagementContainer,
+ &ett_ivi_SEQUENCE_SIZE_1_8_OF_IviIdentificationNumber,
+ &ett_ivi_GeographicLocationContainer,
+ &ett_ivi_SEQUENCE_SIZE_1_16__OF_GlcPart,
+ &ett_ivi_GlcPart,
+ &ett_ivi_GeneralIviContainer,
+ &ett_ivi_GicPart,
+ &ett_ivi_T_GicPartDetectionZoneIds,
+ &ett_ivi_T_GicPartRelevanceZoneIds,
+ &ett_ivi_T_GicPartDriverAwarenessZoneIds,
+ &ett_ivi_SEQUENCE_SIZE_1_8__OF_LanePosition,
+ &ett_ivi_SEQUENCE_SIZE_1_8__OF_CompleteVehicleCharacteristics,
+ &ett_ivi_SEQUENCE_SIZE_1_4__OF_RSCode,
+ &ett_ivi_T_GicPartExtraText,
+ &ett_ivi_RoadConfigurationContainer,
+ &ett_ivi_RccPart,
+ &ett_ivi_SEQUENCE_SIZE_1_8__OF_Zid,
+ &ett_ivi_SEQUENCE_SIZE_1_16__OF_LaneInformation,
+ &ett_ivi_TextContainer,
+ &ett_ivi_TcPart,
+ &ett_ivi_T_TcPartDetectionZoneIds,
+ &ett_ivi_T_TcPartRelevanceZoneIds,
+ &ett_ivi_T_TcPartDriverAwarenessZoneIds,
+ &ett_ivi_T_TcPartText,
+ &ett_ivi_LayoutContainer,
+ &ett_ivi_SEQUENCE_SIZE_1_4__OF_LayoutComponent,
+ &ett_ivi_AbsolutePosition,
+ &ett_ivi_AbsolutePositionWAltitude,
+ &ett_ivi_AnyCatalogue,
+ &ett_ivi_CompleteVehicleCharacteristics,
+ &ett_ivi_SEQUENCE_SIZE_1_3_OF_TrailerCharacteristics,
+ &ett_ivi_ComputedSegment,
+ &ett_ivi_DeltaPosition,
+ &ett_ivi_Distance,
+ &ett_ivi_DistanceOrDuration,
+ &ett_ivi_ISO14823Attributes,
+ &ett_ivi_ISO14823Attributes_item,
+ &ett_ivi_ISO14823Code,
+ &ett_ivi_T_icPictogramCode,
+ &ett_ivi_T_serviceCategoryCode,
+ &ett_ivi_T_pictogramCategoryCode,
+ &ett_ivi_LaneInformation,
+ &ett_ivi_LayoutComponent,
+ &ett_ivi_LoadType,
+ &ett_ivi_PolygonalLine,
+ &ett_ivi_SEQUENCE_SIZE_1_32__OF_DeltaPosition,
+ &ett_ivi_SEQUENCE_SIZE_1_32__OF_DeltaReferencePosition,
+ &ett_ivi_SEQUENCE_SIZE_1_8__OF_AbsolutePosition,
+ &ett_ivi_SEQUENCE_SIZE_1_8__OF_AbsolutePositionWAltitude,
+ &ett_ivi_RSCode,
+ &ett_ivi_T_code,
+ &ett_ivi_Segment,
+ &ett_ivi_Text,
+ &ett_ivi_TractorCharacteristics,
+ &ett_ivi_T_TractorCharactEqualTo,
+ &ett_ivi_T_TractorCharactNotEqualTo,
+ &ett_ivi_SEQUENCE_SIZE_1_4__OF_VehicleCharacteristicsRanges,
+ &ett_ivi_TrailerCharacteristics,
+ &ett_ivi_T_TrailerCharactEqualTo,
+ &ett_ivi_T_TrailerCharactNotEqualTo,
+ &ett_ivi_VcCode,
+ &ett_ivi_SEQUENCE_SIZE_1_8__OF_DTM,
+ &ett_ivi_VehicleCharacteristicsFixValues,
+ &ett_ivi_VehicleCharacteristicsRanges,
+ &ett_ivi_T_limits,
+ &ett_ivi_Weight,
+ &ett_ivi_Zone,
+ &ett_ivi_DTM,
+ &ett_ivi_T_year,
+ &ett_ivi_T_month_day,
+ &ett_ivi_T_hourMinutes,
+ &ett_ivi_MonthDay,
+ &ett_ivi_PMD,
+ &ett_ivi_HoursMinutes,
+ &ett_ivi_DayOfWeek,
+ &ett_ivi_VED,
+ &ett_ivi_SPE,
+ &ett_ivi_DDD,
+ &ett_ivi_SEQUENCE_SIZE_1_8__OF_DDD_IO,
+ &ett_ivi_DDD_IO,
+ &ett_ivi_SEQUENCE_SIZE_1_4__OF_DestinationPlace,
+ &ett_ivi_SEQUENCE_SIZE_1_4__OF_DestinationRoad,
+ &ett_ivi_DestinationPlace,
+ &ett_ivi_DestinationRoad,
+
+/* --- Module DSRC --- --- --- */
+
+ &ett_dsrc_RegionalExtension,
+ &ett_dsrc_SPAT,
+ &ett_dsrc_T_SPATRegional,
+ &ett_dsrc_SignalRequestMessage,
+ &ett_dsrc_T_SRMRegional,
+ &ett_dsrc_SignalStatusMessage,
+ &ett_dsrc_T_SSMRegional,
+ &ett_dsrc_MapData,
+ &ett_dsrc_T_MAPRegional,
+ &ett_dsrc_AdvisorySpeed,
+ &ett_dsrc_T_AdvisorySpeedRegional,
+ &ett_dsrc_AdvisorySpeedList,
+ &ett_dsrc_ComputedLane,
+ &ett_dsrc_T_offsetXaxis,
+ &ett_dsrc_T_offsetYaxis,
+ &ett_dsrc_T_ComputedLaneRegional,
+ &ett_dsrc_ConnectsToList,
+ &ett_dsrc_ConnectingLane,
+ &ett_dsrc_Connection,
+ &ett_dsrc_ConnectionManeuverAssist,
+ &ett_dsrc_T_ConnectionManeuverAssistRegional,
+ &ett_dsrc_DataParameters,
+ &ett_dsrc_EnabledLaneList,
+ &ett_dsrc_GenericLane,
+ &ett_dsrc_T_GenericLaneRegional,
+ &ett_dsrc_IntersectionAccessPoint,
+ &ett_dsrc_IntersectionGeometry,
+ &ett_dsrc_T_IntersectionGeometryRegional,
+ &ett_dsrc_IntersectionGeometryList,
+ &ett_dsrc_IntersectionReferenceID,
+ &ett_dsrc_IntersectionState,
+ &ett_dsrc_T_IntersectionStateRegional,
+ &ett_dsrc_IntersectionStateList,
+ &ett_dsrc_LaneAttributes,
+ &ett_dsrc_LaneDataAttribute,
+ &ett_dsrc_T_LaneDataAttributeRegional,
+ &ett_dsrc_LaneDataAttributeList,
+ &ett_dsrc_LaneList,
+ &ett_dsrc_LaneSharing,
+ &ett_dsrc_LaneTypeAttributes,
+ &ett_dsrc_ManeuverAssistList,
+ &ett_dsrc_MovementEventList,
+ &ett_dsrc_MovementEvent,
+ &ett_dsrc_T_MovementEventRegional,
+ &ett_dsrc_MovementList,
+ &ett_dsrc_MovementState,
+ &ett_dsrc_T_MovementStateRegional,
+ &ett_dsrc_NodeAttributeSetXY,
+ &ett_dsrc_T_NodeAttributeSetXYRegional,
+ &ett_dsrc_NodeAttributeXYList,
+ &ett_dsrc_Node_LLmD_64b,
+ &ett_dsrc_Node_XY_20b,
+ &ett_dsrc_Node_XY_22b,
+ &ett_dsrc_Node_XY_24b,
+ &ett_dsrc_Node_XY_26b,
+ &ett_dsrc_Node_XY_28b,
+ &ett_dsrc_Node_XY_32b,
+ &ett_dsrc_NodeListXY,
+ &ett_dsrc_NodeOffsetPointXY,
+ &ett_dsrc_NodeSetXY,
+ &ett_dsrc_NodeXY,
+ &ett_dsrc_OverlayLaneList,
+ &ett_dsrc_Position3D,
+ &ett_dsrc_T_Position3DRegional,
+ &ett_dsrc_PreemptPriorityList,
+ &ett_dsrc_RegulatorySpeedLimit,
+ &ett_dsrc_RequestorDescription,
+ &ett_dsrc_T_RequestorDescriptionRegional,
+ &ett_dsrc_RequestorPositionVector,
+ &ett_dsrc_RequestorType,
+ &ett_dsrc_RestrictionClassAssignment,
+ &ett_dsrc_RestrictionClassList,
+ &ett_dsrc_RestrictionUserTypeList,
+ &ett_dsrc_RestrictionUserType,
+ &ett_dsrc_T_RestrictionUserTypeRegional,
+ &ett_dsrc_RoadLaneSetList,
+ &ett_dsrc_RoadSegmentReferenceID,
+ &ett_dsrc_RoadSegment,
+ &ett_dsrc_T_RoadSegmentRegional,
+ &ett_dsrc_RoadSegmentList,
+ &ett_dsrc_SegmentAttributeXYList,
+ &ett_dsrc_SignalControlZone,
+ &ett_dsrc_SignalRequesterInfo,
+ &ett_dsrc_SignalRequestList,
+ &ett_dsrc_SignalRequestPackage,
+ &ett_dsrc_T_SignalRequestPackageRegional,
+ &ett_dsrc_SignalRequest,
+ &ett_dsrc_T_SignalRequestRegional,
+ &ett_dsrc_SignalStatusList,
+ &ett_dsrc_SignalStatusPackageList,
+ &ett_dsrc_SignalStatusPackage,
+ &ett_dsrc_T_SignalStatusPackageRegional,
+ &ett_dsrc_SignalStatus,
+ &ett_dsrc_T_SignalStatusRegional,
+ &ett_dsrc_SpeedLimitList,
+ &ett_dsrc_TimeChangeDetails,
+ &ett_dsrc_TransmissionAndSpeed,
+ &ett_dsrc_VehicleID,
+ &ett_dsrc_AllowedManeuvers,
+ &ett_dsrc_IntersectionStatusObject,
+ &ett_dsrc_LaneAttributes_Barrier,
+ &ett_dsrc_LaneAttributes_Bike,
+ &ett_dsrc_LaneAttributes_Crosswalk,
+ &ett_dsrc_LaneAttributes_Parking,
+ &ett_dsrc_LaneAttributes_Sidewalk,
+ &ett_dsrc_LaneAttributes_Striping,
+ &ett_dsrc_LaneAttributes_TrackedVehicle,
+ &ett_dsrc_LaneAttributes_Vehicle,
+ &ett_dsrc_LaneDirection,
+ &ett_dsrc_TransitVehicleStatus,
+
+/* --- Module AddGrpC --- --- --- */
+
+ &ett_AddGrpC_ConnectionManeuverAssist_addGrpC,
+ &ett_AddGrpC_ConnectionTrajectory_addGrpC,
+ &ett_AddGrpC_Control_addGrpC,
+ &ett_AddGrpC_IntersectionState_addGrpC,
+ &ett_AddGrpC_MapData_addGrpC,
+ &ett_AddGrpC_Position3D_addGrpC,
+ &ett_AddGrpC_PrioritizationResponseList,
+ &ett_AddGrpC_PrioritizationResponse,
+ &ett_AddGrpC_RestrictionUserType_addGrpC,
+ &ett_AddGrpC_SignalHeadLocationList,
+ &ett_AddGrpC_SignalHeadLocation,
+ &ett_AddGrpC_SignalStatusPackage_addGrpC,
+ &ett_AddGrpC_ItsStationPositionList,
+ &ett_AddGrpC_ItsStationPosition,
+
+/* --- Module REGION --- --- --- */
+
+
+/* --- Module SPATEM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module MAPEM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module IVIM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module SREM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module SSEM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module CAM-PDU-Descriptions --- --- --- */
+
+ &ett_cam_CoopAwareness,
+ &ett_cam_CamParameters,
+ &ett_cam_HighFrequencyContainer,
+ &ett_cam_LowFrequencyContainer,
+ &ett_cam_SpecialVehicleContainer,
+ &ett_cam_BasicContainer,
+ &ett_cam_BasicVehicleContainerHighFrequency,
+ &ett_cam_BasicVehicleContainerLowFrequency,
+ &ett_cam_PublicTransportContainer,
+ &ett_cam_SpecialTransportContainer,
+ &ett_cam_DangerousGoodsContainer,
+ &ett_cam_RoadWorksContainerBasic,
+ &ett_cam_RescueContainer,
+ &ett_cam_EmergencyContainer,
+ &ett_cam_SafetyCarContainer,
+ &ett_cam_RSUContainerHighFrequency,
+
+/* --- Module DENM-PDU-Descriptions --- --- --- */
+
+ &ett_denm_DecentralizedEnvironmentalNotificationMessage,
+ &ett_denm_ManagementContainer,
+ &ett_denm_SituationContainer,
+ &ett_denm_LocationContainer,
+ &ett_denm_ImpactReductionContainer,
+ &ett_denm_RoadWorksContainerExtended,
+ &ett_denm_StationaryVehicleContainer,
+ &ett_denm_AlacarteContainer,
+ &ett_denm_ReferenceDenms,
+
+/* --- Module TIS-TPG-Transactions-Descriptions --- --- --- */
+
+ &ett_tistpg_TisTpgTransaction,
+ &ett_tistpg_TisTpgDRM,
+ &ett_tistpg_TisTpgDRM_Management,
+ &ett_tistpg_TisTpgDRM_Situation,
+ &ett_tistpg_TisTpgDRM_Location,
+ &ett_tistpg_TisTpgSNM,
+ &ett_tistpg_TisTpgSNM_Management,
+ &ett_tistpg_TisTpgTRM,
+ &ett_tistpg_TisTpgTRM_Management,
+ &ett_tistpg_TisTpgTRM_Situation,
+ &ett_tistpg_TisTpgTRM_Location,
+ &ett_tistpg_TisTpgTCM,
+ &ett_tistpg_TisTpgTCM_Management,
+ &ett_tistpg_TisTpgTCM_Situation,
+ &ett_tistpg_TisTpgTCM_Location,
+ &ett_tistpg_TisTpgVDRM,
+ &ett_tistpg_TisTpgVDRM_Management,
+ &ett_tistpg_TisTpgVDPM,
+ &ett_tistpg_TisTpgVDPM_Management,
+ &ett_tistpg_VehicleSpecificData,
+ &ett_tistpg_TisTpgEOFM,
+ &ett_tistpg_TisTpgEOFM_Management,
+ &ett_tistpg_PlacardTable,
+ &ett_tistpg_TyreSetVariant,
+ &ett_tistpg_PressureVariantsList,
+ &ett_tistpg_PressureVariant,
+ &ett_tistpg_TyreData,
+ &ett_tistpg_T_currentTyrePressure,
+ &ett_tistpg_T_tyreSidewallInformation,
+ &ett_tistpg_T_currentInsideAirTemperature,
+ &ett_tistpg_T_recommendedTyrePressure,
+ &ett_tistpg_T_tin,
+ &ett_tistpg_T_sensorState,
+ &ett_tistpg_AppliedTyrePressure,
+ &ett_tistpg_TpgStationData,
+ &ett_tistpg_AppliedTyrePressures,
+ &ett_tistpg_TpgNotifContainer,
+ &ett_tistpg_TpgAutomation,
+ &ett_tistpg_TisProfile,
+
+/* --- Module EVCSN-PDU-Descriptions --- --- --- */
+
+ &ett_evcsn_EVChargingSpotNotificationPOIMessage,
+ &ett_evcsn_ItsPOIHeader,
+ &ett_evcsn_ItsEVCSNData,
+ &ett_evcsn_SEQUENCE_SIZE_1_256_OF_ItsChargingStationData,
+ &ett_evcsn_ItsChargingStationData,
+ &ett_evcsn_ItsChargingSpots,
+ &ett_evcsn_ItsChargingSpotDataElements,
+ &ett_evcsn_ChargingSpotType,
+ &ett_evcsn_ParkingPlacesData,
+ &ett_evcsn_SpotAvailability,
+
+/* --- Module EV-RechargingSpotReservation-PDU-Descriptions --- --- --- */
+
+ &ett_evrsr_EV_RSR_MessageBody,
+ &ett_evrsr_PreReservationRequestMessage,
+ &ett_evrsr_PreReservationResponseMessage,
+ &ett_evrsr_ReservationRequestMessage,
+ &ett_evrsr_ReservationResponseMessage,
+ &ett_evrsr_CancellationRequestMessage,
+ &ett_evrsr_CancellationResponseMessage,
+ &ett_evrsr_UpdateRequestMessage,
+ &ett_evrsr_UpdateResponseMessage,
+ &ett_evrsr_Payment_ID,
+ &ett_evrsr_RechargingType,
+ &ett_evrsr_SupportedPaymentTypes,
+
+/*--- End of included file: packet-its-ettarr.c ---*/
+#line 357 "./asn1/its/packet-its-template.c"
+ };
+
+ proto_its = proto_register_protocol("Intelligent Transport Systems", "ITS", "its");
+
+ proto_register_field_array(proto_its, hf_its, array_length(hf_its));
+
+ proto_register_subtree_array(ett, array_length(ett));
+
+ register_dissector("its", dissect_its_PDU, proto_its);
+
+ // Register subdissector table
+ its_version_subdissector_table = register_dissector_table("its.version", "ITS version", proto_its, FT_UINT8, BASE_DEC);
+ its_msgid_subdissector_table = register_dissector_table("its.msg_id", "ITS message id", proto_its, FT_UINT32, BASE_DEC);
+ regionid_subdissector_table = register_dissector_table("dsrc.regionid", "DSRC RegionId", proto_its, FT_UINT32, BASE_DEC);
+
+ proto_its_denm = proto_register_protocol_in_name_only("ITS message - DENM", "DENM", "its.message.denm", proto_its, FT_BYTES);
+ proto_its_cam = proto_register_protocol_in_name_only("ITS message - CAM", "CAM", "its.message.cam", proto_its, FT_BYTES);
+ proto_its_spatem = proto_register_protocol_in_name_only("ITS message - SPATEM", "SPATEM", "its.message.spatem", proto_its, FT_BYTES);
+ proto_its_mapem = proto_register_protocol_in_name_only("ITS message - MAPEM", "MAPEM", "its.message.mapem", proto_its, FT_BYTES);
+ proto_its_ivim = proto_register_protocol_in_name_only("ITS message - IVIM", "IVIM", "its.message.ivim", proto_its, FT_BYTES);
+ proto_its_evrsr = proto_register_protocol_in_name_only("ITS message - EVRSR", "EVRSR", "its.message.evrsr", proto_its, FT_BYTES);
+ proto_its_srem = proto_register_protocol_in_name_only("ITS message - SREM", "SREM", "its.message.srem", proto_its, FT_BYTES);
+ proto_its_ssem = proto_register_protocol_in_name_only("ITS message - SSEM", "SSEM", "its.message.ssem", proto_its, FT_BYTES);
+ proto_its_evcsn = proto_register_protocol_in_name_only("ITS message - EVCSN", "EVCSN", "its.message.evcsn", proto_its, FT_BYTES);
+ proto_its_tistpg = proto_register_protocol_in_name_only("ITS message - TISTPG", "TISTPG", "its.message.tistpg", proto_its, FT_BYTES);
+
+ proto_addgrpc = proto_register_protocol_in_name_only("DSRC Addition Grp C (EU)", "ADDGRPC", "dsrc.addgrpc", proto_its, FT_BYTES);
+
+ // Decode as
+ static build_valid_func its_da_build_value[1] = {its_msgid_value};
+ static decode_as_value_t its_da_values = {its_msgid_prompt, 1, its_da_build_value};
+ static decode_as_t its_da = {"its", "ITS msg id", "its.msg_id", 1, 0, &its_da_values, NULL, NULL,
+ decode_as_default_populate_list, decode_as_default_reset, decode_as_default_change, NULL};
+
+ register_decode_as(&its_da);
+}
+
+#define BTP_SUBDISS_SZ 2
+#define BTP_PORTS_SZ 10
+void proto_reg_handoff_its(void)
+{
+ const char *subdissector[BTP_SUBDISS_SZ] = { "btpa.port", "btpb.port" };
+ const guint16 ports[BTP_PORTS_SZ] = { ITS_WKP_DEN, ITS_WKP_CA, ITS_WKP_EVCSN, ITS_WKP_CHARGING, ITS_WKP_IVI, ITS_WKP_TPG, ITS_WKP_TLC_SSEM, ITS_WKP_TLC_SREM, ITS_WKP_RLT, ITS_WKP_TLM };
+ int sdIdx, pIdx;
+ dissector_handle_t its_handle_;
+
+ // Register well known ports to btp subdissector table (BTP A and B)
+ its_handle_ = create_dissector_handle(dissect_its_PDU, proto_its);
+ for (sdIdx=0; sdIdx < BTP_SUBDISS_SZ; sdIdx++) {
+ for (pIdx=0; pIdx < BTP_PORTS_SZ; pIdx++) {
+ dissector_add_uint(subdissector[sdIdx], ports[pIdx], its_handle_);
+ }
+ }
+
+ dissector_add_uint("its.msg_id", ITS_DENM, create_dissector_handle( dissect_denm_DecentralizedEnvironmentalNotificationMessage_PDU, proto_its_denm ));
+ dissector_add_uint("its.msg_id", ITS_CAM, create_dissector_handle( dissect_cam_CoopAwareness_PDU, proto_its_cam ));
+ dissector_add_uint("its.msg_id", ITS_SPATEM, create_dissector_handle( dissect_dsrc_SPAT_PDU, proto_its_spatem ));
+ dissector_add_uint("its.msg_id", ITS_MAPEM, create_dissector_handle( dissect_dsrc_MapData_PDU, proto_its_mapem ));
+ dissector_add_uint("its.msg_id", ITS_IVIM, create_dissector_handle( dissect_ivi_IviStructure_PDU, proto_its_ivim ));
+ dissector_add_uint("its.msg_id", ITS_EV_RSR, create_dissector_handle( dissect_evrsr_EV_RSR_MessageBody_PDU, proto_its_evrsr ));
+ dissector_add_uint("its.msg_id", ITS_SREM, create_dissector_handle( dissect_dsrc_SignalRequestMessage_PDU, proto_its_srem ));
+ dissector_add_uint("its.msg_id", ITS_SSEM, create_dissector_handle( dissect_dsrc_SignalStatusMessage_PDU, proto_its_ssem ));
+ dissector_add_uint("its.msg_id", ITS_EVCSN, create_dissector_handle( dissect_evcsn_EVChargingSpotNotificationPOIMessage_PDU, proto_its_evcsn ));
+ dissector_add_uint("its.msg_id", ITS_TISTPGTRANSACTION, create_dissector_handle( dissect_tistpg_TisTpgTransaction_PDU, proto_its_tistpg ));
+
+ /* Missing definitions: ITS_POI, ITS_SAEM, ITS_RTCMEM */
+
+ dissector_add_uint("dsrc.regionid", (addGrpC<<16)+Reg_ConnectionManeuverAssist, create_dissector_handle(dissect_AddGrpC_ConnectionManeuverAssist_addGrpC_PDU, proto_addgrpc ));
+ dissector_add_uint("dsrc.regionid", (addGrpC<<16)+Reg_GenericLane, create_dissector_handle(dissect_AddGrpC_ConnectionTrajectory_addGrpC_PDU, proto_addgrpc ));
+ dissector_add_uint("dsrc.regionid", (addGrpC<<16)+Reg_NodeAttributeSetXY, create_dissector_handle(dissect_AddGrpC_Control_addGrpC_PDU, proto_addgrpc ));
+ dissector_add_uint("dsrc.regionid", (addGrpC<<16)+Reg_IntersectionState, create_dissector_handle(dissect_AddGrpC_IntersectionState_addGrpC_PDU, proto_addgrpc ));
+ dissector_add_uint("dsrc.regionid", (addGrpC<<16)+Reg_MapData, create_dissector_handle(dissect_AddGrpC_MapData_addGrpC_PDU, proto_addgrpc ));
+ dissector_add_uint("dsrc.regionid", (addGrpC<<16)+Reg_Position3D, create_dissector_handle(dissect_AddGrpC_Position3D_addGrpC_PDU, proto_addgrpc ));
+ dissector_add_uint("dsrc.regionid", (addGrpC<<16)+Reg_RestrictionUserType, create_dissector_handle(dissect_AddGrpC_RestrictionUserType_addGrpC_PDU, proto_addgrpc ));
+ dissector_add_uint("dsrc.regionid", (addGrpC<<16)+Reg_SignalStatusPackage, create_dissector_handle(dissect_AddGrpC_SignalStatusPackage_addGrpC_PDU, proto_addgrpc ));
+
+ its_tap = register_tap("its");
+}
+
+/*
+ * Editor modelines - http://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 4
+ * tab-width: 8
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * vi: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
+ */
diff --git a/epan/dissectors/packet-its.h b/epan/dissectors/packet-its.h
new file mode 100644
index 0000000000..01edee9b9c
--- /dev/null
+++ b/epan/dissectors/packet-its.h
@@ -0,0 +1,246 @@
+/* Do not modify this file. Changes will be overwritten. */
+/* Generated automatically by the ASN.1 to Wireshark dissector compiler */
+/* packet-its.h */
+/* asn2wrs.py -o its -c its.cnf -O ../.. -I . -D . -s packet-its-template ITS-Container.asn ISO_TS_14816.asn ISO_TS_24534-3.asn ISO_TS_17419.asn ISO_TS_14906_Application.asn ISO_TS_19321.asn ISO_TS_19091.asn ETSI_TS_103301.asn CAM.asn DENM.asn TIS_TPG_Transactions_Descriptions.asn EVCSN-PDU-Descriptions.asn EV-RSR-PDU-Descriptions.asn */
+
+/* Input file: packet-its-template.h */
+
+#line 1 "./asn1/its/packet-its-template.h"
+/* packet-its-template.h
+ *
+ * Intelligent Transport Systems Applications dissectors
+ * C. Guerber <cguerber@yahoo.com>
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#ifndef __PACKET_ITS_H__
+#define __PACKET_ITS_H__
+
+
+/*--- Included file: packet-its-exp.h ---*/
+#line 1 "./asn1/its/packet-its-exp.h"
+
+/* --- Module ITS-Container --- --- --- */
+
+
+/* --- Module AVIAEINumberingAndDataStructures --- --- --- */
+
+
+/* --- Module ElectronicRegistrationIdentificationVehicleDataModule --- --- --- */
+
+
+/* --- Module CITSapplMgmtIDs --- --- --- */
+
+
+/* --- Module EfcDsrcApplication --- --- --- */
+
+
+/* --- Module IVI --- --- --- */
+
+
+/* --- Module DSRC --- --- --- */
+
+
+/* --- Module AddGrpC --- --- --- */
+
+
+/* --- Module REGION --- --- --- */
+
+
+/* --- Module SPATEM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module MAPEM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module IVIM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module SREM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module SSEM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module CAM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module DENM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module TIS-TPG-Transactions-Descriptions --- --- --- */
+
+
+/* --- Module EVCSN-PDU-Descriptions --- --- --- */
+
+
+/* --- Module EV-RechargingSpotReservation-PDU-Descriptions --- --- --- */
+
+
+/*--- End of included file: packet-its-exp.h ---*/
+#line 17 "./asn1/its/packet-its-template.h"
+
+
+/*--- Included file: packet-its-val.h ---*/
+#line 1 "./asn1/its/packet-its-val.h"
+
+/* --- Module ITS-Container --- --- --- */
+
+
+/* enumerated values for T_messageID */
+#define ITS_DENM 1
+#define ITS_CAM 2
+#define ITS_POI 3
+#define ITS_SPATEM 4
+#define ITS_MAPEM 5
+#define ITS_IVIM 6
+#define ITS_EV_RSR 7
+#define ITS_TISTPGTRANSACTION 8
+#define ITS_SREM 9
+#define ITS_SSEM 10
+#define ITS_EVCSN 11
+#define ITS_SAEM 12
+#define ITS_RTCMEM 13
+
+typedef enum _CauseCodeType_enum {
+ 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
+} CauseCodeType_enum;
+
+/* --- Module AVIAEINumberingAndDataStructures --- --- --- */
+
+
+/* --- Module ElectronicRegistrationIdentificationVehicleDataModule --- --- --- */
+
+
+/* --- Module CITSapplMgmtIDs --- --- --- */
+
+
+/* --- Module EfcDsrcApplication --- --- --- */
+
+
+/* --- Module IVI --- --- --- */
+
+
+/* --- Module DSRC --- --- --- */
+
+#define mapData 18
+#define signalPhaseAndTimingMessage 19
+#define signalRequestMessage 29
+#define signalStatusMessage 30
+
+typedef enum _RegionId_enum {
+ noRegion = 0,
+ addGrpA = 1,
+ addGrpB = 2,
+ addGrpC = 3
+} RegionId_enum;
+
+/* --- Module AddGrpC --- --- --- */
+
+
+/* --- Module REGION --- --- --- */
+
+
+/* --- Module SPATEM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module MAPEM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module IVIM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module SREM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module SSEM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module CAM-PDU-Descriptions --- --- --- */
+
+
+/* --- Module DENM-PDU-Descriptions --- --- --- */
+
+#define defaultValidity 600
+
+/* --- Module TIS-TPG-Transactions-Descriptions --- --- --- */
+
+
+/* --- Module EVCSN-PDU-Descriptions --- --- --- */
+
+
+/* --- Module EV-RechargingSpotReservation-PDU-Descriptions --- --- --- */
+
+
+/*--- End of included file: packet-its-val.h ---*/
+#line 19 "./asn1/its/packet-its-template.h"
+
+typedef struct its_header {
+ guint32 version;
+ guint32 msgId;
+ guint32 stationId;
+} its_header_t;
+
+enum regext_type_enum {
+ Reg_AdvisorySpeed,
+ Reg_ComputedLane,
+ Reg_ConnectionManeuverAssist,
+ Reg_GenericLane,
+ Reg_IntersectionGeometry,
+ Reg_IntersectionState,
+ Reg_LaneAttributes,
+ Reg_LaneDataAttribute,
+ Reg_MapData,
+ Reg_MovementEvent,
+ Reg_MovementState,
+ Reg_NodeAttributeSetLL,
+ Reg_NodeAttributeSetXY,
+ Reg_NodeOffsetPointLL,
+ Reg_NodeOffsetPointXY,
+ Reg_Position3D,
+ Reg_RequestorDescription,
+ Reg_RequestorType,
+ Reg_RestrictionUserType,
+ Reg_RoadSegment,
+ Reg_SignalControlZone,
+ Reg_SignalRequest,
+ Reg_SignalRequestMessage,
+ Reg_SignalRequestPackage,
+ Reg_SignalStatus,
+ Reg_SignalStatusMessage,
+ Reg_SignalStatusPackage,
+ Reg_SPAT,
+};
+
+#endif /* __PACKET_ITS_H__ */