Commit 5d580c40 authored by mullers's avatar mullers
Browse files

asn definitions from DRIVE

parent 8243dcb2
Loading
Loading
Loading
Loading
+617 −0
Original line number Diff line number Diff line
-- This ASN.1 specification has been checked for conformance with the ASN.1 standard by the Objective Systems ASN.1 Tools

CAM-PDU-Descriptions {
 itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102637) cam (2) version1 (1) 
}

DEFINITIONS AUTOMATIC TAGS ::= 

BEGIN

IMPORTS 
    ItsPduHeader, VehicleCommonParameters, ProfileParameters, StationID, TimeStamp, ReferencePosition 
FROM DENM-PDU-Descriptions { itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102637) denm (3) version2 (2) };

--	The root data frame for cooperative awareness messages

CamPdu ::= SEQUENCE {
	header	ItsPduHeader,
	cam	CoopAwareness

}

CoopAwareness ::= SEQUENCE {

	stationID	StationID,

	-- Basic characterization of an ITS station. A more detailed classification can be given by VehicleType.
	stationCharacteristics	SEQUENCE {
		mobileItsStation			BOOLEAN,	-- will ITS station change position?
		privateItsStation			BOOLEAN,	-- not public authority
		physicalRelevantItsStation	BOOLEAN,	-- can another mobile ITS station crash into this station?
		...
	},
	
	referencePosition ReferencePosition,
	camParameters CamParameters OPTIONAL, -- presently omitted for Irs
	
   ...
}

	
	
	CamParameters ::= SEQUENCE {
	 vehicleCommonParameters	VehicleCommonParameters,
	 profileDependent 		ProfileParameters OPTIONAL,
	 ...
	}
END
	
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

     ...,
     -- Specific data of the event (defined by the Application)
     [[eventSpecificData    OCTET STRING  (SIZE(0..8)) OPTIONAL]]
  }

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 a¬ g 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
}

-- SPAT
SignalPhaseAndTimingData ::=  SEQUENCE { 
	id          IntersectionID,           -- this provided a unique mapping to the intersection map in question 
	status      IntersectionStatusObject, -- general status of the controller 
	states      SEQUENCE (SIZE(1..255)) OF MovementState 
    -- each active Movement/lane is given in turn and contains its state, and  
    -- seconds to the next event etc.  
} 

IntersectionID ::= INTEGER (0..999999)

IntersectionStatusObject ::= BIT STRING{ 
   manual    (0), -- Manual Control is enabled. Timing reported is per programmed values, etc but person at cabinet can manually request that certain intervals are terminated early (e.g. green)  
   stopTime  (1), -- Stop Time is activated and all counting/timing has stopped.  
   conflict  (2), -- Intersection is in Conflict Flash. 
   preempt   (3), -- Preempt is Active  
   transit   (4), -- Transit Signal Priority (TSP) is Active 
   proceedYel(5), 
   reserved1 (6), -- Reserved 
   reserved2    (7), -- Reserved as zero 
   flashYelAll  (8), -- controller is in yellow flash state for all legs (e.g. at night) (see OCIT) 
   flashYelMin (9), -- controller is in yellow flash state for minor legs only, major legs are switched off (see OCIT) 
   partOff    (10), -- controller is partially switched off or partially yellow flashing (see OCIT) 
   problem    (11), -- controller has communication problems (see OCIT) 
   exceptional(12), -- exceptional operation (e.g. during maintenance) (see OCIT) 
   off        (13)  -- controller is switched off (see OCIT) 
 }

MovementState ::=  SEQUENCE { 
	movementId      	[1] INTEGER OPTIONAL, 
    category  			TrafficCategory,           -- indvidualTraffic, public transport, .. 
    lineRef          	IA5String(SIZE(0..32)),    -- see PTLineDescription 
    laneSet          	LaneSet,                   -- the collection of lanes, to which this state data applies  
    currState        	[3]ColorState OPTIONAL,    -- the state of a Motorised lane 
    relevantManeuver	TurnDirection,             -- e.g. right turn 
	nextChanges      	SEQUENCE OF Change        -- description of next phase changes 
}

-- the collection of lanes, by num, to which some state data applies 
LaneSet ::= SET( SIZE(1..127)) OF LaneNumber 

-- LaneNumber: Unique ID of a lane at an intersection or other topology data set. 
LaneNumber ::= INTEGER  
  
-- ColorState 
-- Current color state of a signal group for a certain traffic stream. e.g. red-yellow (b0110), 
-- yellow flashing (b1010) 
-- Color state of a signal group
-- Reference SAE J2735  compare DE_ColorState, SAE defines an Enumeration instead of 
-- the bitfield. The content is identical. 
ColorState ::= BIT STRING { 
 green(0), 
 yellow(1), 
 red(2), 
 flashing(3) 
}  

-- change of signal phase 
Change ::= SEQUENCE { 
    minTimeToChange    TimeToChange,  -- a count of the minimum time remaining in this state  
    maxTimeToChange    TimeToChange,  -- a count of the maximum time remaining in this state 
    likelyTimeToChange TimeToChange,  -- a count of the most propable time remaining in this State 
    confidence   Confidence,   -- a confidence value for likelyTimeToChange 
    passState    BOOLEAN,      -- true, vehicles may pass 
    predCnt      INTEGER,      -- for which state is this valid?  
    ... 
 }

-- time interval until signal state change reserved meanings: 0, 65531, 65532, 65533, 65534, and 65535. 
 TimeToChange ::= INTEGER (0..65535)

TrafficCategory ::= BIT STRING {
	privateTraffic     (0),
	publicTransportRoad(1),
	publicTransportRail(2),
	individualTrafficCyclists (3),
	individualTrafficPedestrians (4)
}

-- TOPO

Intersection ::= SEQUENCE { 
    id           IntersectionID,      
    refPoint     ReferencePosition,
    approaches    [3] SEQUENCE SIZE(1..32) OF ApproachObject  
}

ApproachObject ::=  SEQUENCE { 
    approach     Approach
  }
	
-- Egress or approach of a link containing all lanes 
Approach ::=  SEQUENCE { 
    drivingLanes   SEQUENCE SIZE(0..32) OF VehicleReferenceLane
}

-- lane defined by a point list 
VehicleReferenceLane ::=  SEQUENCE {
	laneNumber       LaneNumber,  
	aneAttributes   VehicleLaneAttributes,
    laneWidth        LaneWidth,
    nodeList         NodeList, 
    connectsTo       ConnectsTo ,
    speedLimit       INTEGER (0..150)
}

LaneWidth ::= Dimension  

-- List of relative positions describing an egress or approach 
-- first point is the the stop line or point at the boarder of the intersection area. 
NodeList ::=  SEQUENCE{ 
    nodes   SEQUENCE SIZE (2..64) OF Offsets 
}

-- providing offsets in an karthesian coordinate system in 1cm granularity 
Offsets ::=  SEQUENCE { 
    xOffset  INTEGER (-32767..32767),  
    yOffset  INTEGER (-32767..32767)
}

-- List of possible connection of a lane 
ConnectsTo ::= SEQUENCE(SIZE(1..48)) OF ConnectionInformation

ConnectionInformation ::= SEQUENCE { 
  lane         LaneNumber, 
  intersection IntersectionID, 
  maneuver     TurnDirection 
}

VehicleLaneAttributes ::= BIT STRING {
	    noData                   (0), 
	    egressPath               (1),
	       -- a two-way path or an outbound path is described 
	    maneuverStraightAllowed  (2),
	    maneuverLeftAllowed      (3),
	    maneuverRightAllowed     (4),
	    yield                    (5),
	    maneuverNoUTurn          (6),
	    maneuverNoTurnOnRed      (7),
	    maneuverNoStop           (8),
	    noStop                   (9),
	    noTurnOnRed             (10),
	    hovLane                 (11),
	    bus                     (12), -- SAE busOnly does not make sense in a Bit Field
	    taxi                    (13), -- SAE busAndTaxiOnly does not make sense in a Bit Field
	    maneuverHOVLane         (14),
	    maneuverSharedLane      (15),  -- a "TWLTL" (two way left turn lane)
	    bike                    (16),  -- SAE comment added maneuverBikeLane
        train                   (17),  -- added from SIM-TD includes train
        individualTraffic       (18),  -- added from SIM-TD to distinguish special lanes
	    vehiclesEntering        (19),  -- for SIM-TD copied from SpecialLaneAttributes
	    vehiclesLeaving         (20)   -- for SIM-TD copied from SpecialLaneAttributes
}

  
END