Skip to content
DENM.asn 12.6 KiB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413
-- This ASN.1 specification has been checked for conformance with the ASN.1 standard by the Objective Systems ASN.1 Tools

DENM-PDU-Descriptions {
 itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102637) denm (3) version2 (2) 
}

DEFINITIONS AUTOMATIC TAGS ::= 

BEGIN

DenmPdu ::= SEQUENCE {
	header	ItsPduHeader,	
	denm	DecentralizedEnvironmentalNotificationMessage

}

DecentralizedEnvironmentalNotificationMessage ::= SEQUENCE {
	
	management	DecentralizedSituationManagement,	--  container with DEN management and version control
	situation	DecentralizedSituation,  			-- container with event description, incl. type, severity
	location	DecentralizedSituationLocation,		-- container with event location, location referencing with more detailed location description and the relevance area
	
	...
 }

DecentralizedSituationManagement::= SEQUENCE {
	-- unique identifier about an event from one originator ITS station, combination of node ID and a sequence number
	actionID	ActionID,	-- 6 byte
	
	-- version of the DENM indicating updates from the same originator ITS station; value of 255 is used for the  cancellation message sent from the originator ITS station
	
	dataVersion	DataVersion,  	-- 1 byte
	-- time when the DENM is deleted from the DEN management and the information related to the event is set as invalid.. If it is not provided, it indicates that the expiry time is unkown by the originator ITS station	
	expiryTime	TimeStamp  	OPTIONAL, 	-- 6 byte
	frequency	INTEGER (0..255)	OPTIONAL, 	--units of 0.1 Hz
	-- probability of the detected event to  be true, varies  from 0 to 100, with maximum value as full reliability
	reliability	INTEGER(0..100), 	-- 7 bits
	-- negates the existence of an event at the event position by a third part ITS station that have received DENMs previously.		 
	isNegation	BOOLEAN    		-- 1 bit	
}

-- event description derived from [3]
DecentralizedSituation::= SEQUENCE {
	-- traffic status near the event position, defined based on [3], TPEG table tec001 
	trafficFlowEffect 	TrafficFlowEffect	OPTIONAL,	 -- 1 byte. 
	-- event direct cause and sub cause description as defined in tab6.1 and in [3]
	situation	Situation,
	-- linked cause if information is available.
	linkedCause	Situation		OPTIONAL,	-- 2 Byte, 
	-- severity value of the event, defined in [3], TPEG table tec003			
	severity	Severity,	-- 1 byte
	-- characteristics of the event 
	eventCharact	SEQUENCE -- EventCharact 1 byte 
	{
		-- event mobility description, set to TRUE if the event is in mobility 
		eventmobility	BOOLEAN,
		-- whether the event is caused by the originator ITS station
		causeType   ENUMERATED { itsStation, geographicalRegion },
		-- whether the event is physicalling relevant to the  receiving ITS station.
		relevance ENUMERATED {physicallyRelevant, difficultDrivingConditions },
		-- whether the event is time critical road safety event, set to TRUE if it is the case.
		timeCriticality	BOOLEAN,
		-- more characteristics may be added in future.
		...
	} OPTIONAL,
		
	vehicleCommonParameters	VehicleCommonParameters OPTIONAL,
	profile ProfileParameters    OPTIONAL
}

DecentralizedSituationLocation::= SEQUENCE {
	-- description of the event position
	eventPosition	CHOICE	{
		-- the geographical position of the reference position 
		eventPositionCurrentDefinition	EventPosition,
		...
	},
	-- location referencing of the event position
	locationRef	CHOICE {
		-- consequence position of the trace location referencing mechanism
		trace	TraceLocData,
		-- more location referencing mechanism to be added
		...
	},
	...,
	-- description of  the relevance area for the  DENM dissemination
	[[relevanceArea RelevanceArea]]
}

EventPosition ::= SEQUENCE {
		refPosition	ReferencePosition,
		eventSpeed	Speed OPTIONAL	-- event speed, either equal to or different from the vehicle speed
}

		
ActionID ::= SEQUENCE {
	stationID 	StationID,	-- a 4 byte value
	sequenceNo 	SequenceNo	-- a 2 byte value
}

Elevation ::= INTEGER (-10000..16767215) -- multiples of 0.1 m

ItsPduHeader ::= SEQUENCE {
	-- protocolVersion fixed to 0
	protocolVersion		INTEGER(0..255),

	-- message type ID associated to CAM = 0, DENM=1
	messageID 		INTEGER(0..255),

	-- milliseconds elapsed since midnight January 1st, 1970 UTC
	generationTime	TimeStamp
}

Latitude ::= SEQUENCE {
  hemisphere ENUMERATED { north (0), south (1) },
  degree  INTEGER (0..900000000) -- multiples of 0.1 microdegree
} 

Longitude ::= SEQUENCE {
  hemisphere ENUMERATED { east (0), west (1) },
  degree  INTEGER (0..1800000000) -- multiples of 0.1 microdegree
}

ReferencePosition ::= SEQUENCE {
  longitude Longitude,
  latitude Latitude,
  elevation Elevation,
  heading Direction OPTIONAL, --present if mobileItsStation flag is TRUE
  streetName StreetName OPTIONAL,
  positionConfidence Confidence OPTIONAL, --present if mobileItsStation flag is TRUE
  elevationConfidence Confidence OPTIONAL, --present if mobileItsStation flag is TRUE
  roadSegmentID RoadSegmentID OPTIONAL
}

RelevanceArea ::= SEQUENCE {
  geoAreaCenterLatitude Latitude,
  geoAreaCenterLongitude Longitude,
  shape CHOICE {circle Circle, rectangle Rectangle, ellipse Ellipse},
  directionalityFilter DirectionalityFilter OPTIONAL,
  disseminationAreaSize RelativeSize DEFAULT same,
  ...
}

Circle ::= SEQUENCE {	-- reference EN 302 931
 radius Distance
}

Rectangle ::= SEQUENCE {	-- reference EN 302 931
 aSemiAxis Distance,
 bSemiAxis Distance,
 azimuthAngle Direction		-- aSemiAxis directionality
}

Ellipse ::= SEQUENCE {		-- reference EN 302 931
 aSemiAxis Distance,
 bSemiAxis Distance,
 azimuthAngle Direction		-- aSemiAxis directionality
}

DirectionalityFilter ::= ENUMERATED { noFilter (0), approachingCenter (1), leavingCenter (2) }

RelativeSize ::= ENUMERATED { same (0), oneAndHalfSize (1), doubleSize (2), tripleSize (3) }


SequenceNo ::=	INTEGER (0..65535)		-- increased by 1 each time a new event is detected by the same ITS  station.

DataVersion ::= INTEGER {firstVersion(0),secondVersion(1),cancellation(255) } (0..255)

TrafficFlowEffect ::= 	INTEGER (0..7)

Situation ::= SEQUENCE {
	cause 		CauseCode, 	-- 1 byte
	subCause	SubCauseCode	-- 1 byte
}

-- 1 to 100 indicates causecode defined within [3]
-- 101 – 255 indicates causecode without being defined by [3]
CauseCode ::= INTEGER {reserved(0),dangerousDriving(101),intersectionViolation(102),vehicleProblem(103),intersectionCollision(104),hazardousLocation(105) } (0..255)

SubCauseCode ::= INTEGER {unknown(0)} (0..255)

Severity ::= ENUMERATED 		-- 1 byte
{
	informative		(1), 
	-- Text example: <Attention, there is a dangerous obstruction due to fog>
	obstacles		(2),	--danger level 1
	-- Text example: <Attention, there a danger due to fog>
	danger	(3),			--danger level 2: 
	-- Text example: <Attention, highest danger due to fog>
	highestDanger	(4)		--danger level 3: 
}

Speed ::= INTEGER (-32765..32765)  -- multiples of 0.01 m/s 

StationID ::=   INTEGER(0..4294967295)

TraceLocData ::=	SEQUENCE {
	--3 bits, identifier of the trace
	traceID	INTEGER(0 .. 7),	
	--5 bits, number of waypoint positions included in the trace
	waypoints	SEQUENCE (SIZE(0..31)) OF	Waypoint
}

TimeStamp ::=	INTEGER (0.. 281474976710655)		-- units of milliseconds, 6 byte

Waypoint  ::=		SEQUENCE{
	--  waypoint positions included in the trace.	
	ptLat 	Latitude,							--a 4 bytes value 
	ptLong 	Longitude,						--a 4 bytes value
	ptAlt 	Elevation,
	...
}


-- common and profile dependent parameter definitions follow

ProfileParameters ::= CHOICE {
	basicVehicle	    BasicVehicle,
    emergencyVehicle        EmergencyVehicle,
    publicTransportVehicle  PublicTransportVehicle,
    ...
}

VehicleCommonParameters ::= SEQUENCE {
     vehicleType                     VehicleType,
     stationLength                   StationLength,
     stationLengthConfidence         Confidence OPTIONAL,
     stationWidth                    StationWidth,
     stationWidthConfidence          Confidence OPTIONAL,
     vehicleSpeed                    VehicleSpeed,
     vehicleSpeedConfidence          Confidence,
     longAcceleration                LongAcceleration,
     longAccelerationConfidence	     Confidence,
     accelerationControl             AccelerationControl,
     yawRate			     		 YawRate,
     yawRateConfidence	     	     Confidence,
     exteriorLights                  ExteriorLights,
     turnAdvice                      TurnAdvice OPTIONAL,
     distanceToStopLine              DistanceToStopLine OPTIONAL,
     occupancy                       Occupancy OPTIONAL,
     doorOpen                        DoorOpen OPTIONAL,
     posConfidenceEllipse            PosConfidenceEllipse,
     curvature                       Curvature,
     curvatureChange               	 CurvatureChange OPTIONAL,
     curvatureConfidence	     	 Confidence,
     crashStatus                     CrashStatus OPTIONAL,
     headingConfidence               Confidence,
     dangerousGoods                  DangerousGoods OPTIONAL,
     ...
}


BasicVehicle ::= SEQUENCE {
     ...
}

EmergencyVehicle ::= SEQUENCE {
     lightBarInUse                   LightBarInUse OPTIONAL,
     sireneInUse                     SireneInUse OPTIONAL,
     emergencyResponseType           EmergencyResponseType,
     ...
}

PublicTransportVehicle ::= SEQUENCE {
     publicVehicleType              PublicVehicleType,
     pTLineDescription              PTLineDescription OPTIONAL,
     scheduleDeviation              ScheduleDeviation OPTIONAL,
     trafficLightPriority           TrafficLightPriority OPTIONAL,
     ...
}

AccelerationControl ::= BIT STRING {
 brakePedal    (0),
 throttlePedal (1),
 cruiseControl (2),
 acc           (3),
 limiter       (4),
 brakeAssist   (5)
} 

AmbientAirTemperature ::= Temperature 

Confidence ::= INTEGER (0..15) 

CourseOfJourney ::= IA5String(SIZE(0..32)) 

CrashStatus ::= BOOLEAN

Curvature ::= INTEGER (-32765..32765)

CurvatureChange ::= INTEGER (-1023..1023)

DataReference ::= IA5String(SIZE(1..128))

DangerousGoods ::= INTEGER (0..8191)

Dimension ::= INTEGER (0..16383)

Direction ::= INTEGER{north(0), east(7200), south(14400), west(21600)} (0..28799)

Distance ::= INTEGER (0..65535) -- multiples of 1.0m

DistanceToStopLine ::= Distance

DoorOpen ::= BIT STRING {
  driver (0),
  passenger (1), -- any passenger door
  maintenance (2), -- hood, other access to engine, or similar
  luggage (3)
} 

EmergencyResponseType ::= ENUMERATED {
 none         (0),
 staticSafeguard (1),   -- e.g. at accident spot
 movingSafeguard (2),   -- e.g. convoy or abnormal load
 rightOfWay      (3),   -- claiming right of way
 ...
} 

ExteriorLights ::= BIT STRING {
 lowBeamHeadlightsOn     (0),
 highBeamHeadlightsOn    (1),
 leftTurnSignalOn        (2),
 rightTurnSignalOn       (3),
 automaticLightControlOn (4),
 daytimeRunningLightsOn  (5),
 fogLightOn              (6),
 parkingLightsOn         (7)
 } 

LightBarInUse ::= SimpleSystemState 

LineRef ::= IA5String(SIZE(0..32)) 

LongAcceleration ::= INTEGER (-2000..2000)  -- multiples of 0.01 m/s^2 

Occupancy ::= INTEGER (0..255) 

PosConfidenceEllipse ::= SEQUENCE {
  semiMajorConfidence   Confidence,   -- confidence of the ellipse's major semi-axes
  semiMinorConfidence   Confidence,   -- confidence of the ellipse's minor semi-axes
  semiMajorOrientation   Direction
} 

Priority ::= INTEGER(0..7) 

PTLineDescription ::= SEQUENCE {
  courseOfJourney  CourseOfJourney,
  lineRef          LineRef,
  routeRef         RouteRef
} 

PublicVehicleType ::= INTEGER(0..255) 

RoadSegmentID ::= INTEGER (0..99999999) 

RouteRef ::= IA5String(SIZE(0..32)) 

ScheduleDeviation ::= INTEGER (-900..3600)  -- seconds, positiv delay; negative ahead of schedule 

SimpleSystemState ::= ENUMERATED {
  unavailable  (0), -- not equipped or out of order
  disabled  (1), -- switched off by user or due to driving situation, e.g. ACC below minimum speed
  enabled   (2), -- switched on but no action, e.g. ESP in normal operation, limiter below limit speed
  engaged   (3)  -- switched on and in action, e.g. light bar flashing, limiter limiting speed 
} 

SireneInUse ::= SimpleSystemState 

StationLength ::= Dimension 

StationWidth ::= Dimension 

StreetName ::= IA5String(SIZE(1..32)) 

Temperature ::= INTEGER (-40..215) 

TrafficLightPriority ::= Priority 

TurnAdvice ::= SEQUENCE {
  direction    TurnDirection,
  distance     Distance
} 

TurnDirection ::= BIT STRING {
  uTurn       (0),
  sharpRight  (1),
  right       (2),
  slightRight (3),
  straight    (4),
  slightLeft  (5),
  left        (6),
  sharpLeft   (7)
} 

VehicleSpeed ::= Speed 

VehicleType ::= INTEGER (0..255) 

WiperSystemFront ::= ENUMERATED {
  idle         (0),
  interval     (1),
  normal       (2),
  fast         (3),
  washerActive (4)
}

YawRate ::= SEQUENCE {
  yawDirection ENUMERATED { left (0), right (1) },
  yawRateValue  INTEGER (0..32765)  		-- multiples of 0.01deg/s
}

END