1#[allow(
2 non_camel_case_types,
3 non_snake_case,
4 non_upper_case_globals,
5 unused,
6 clippy::too_many_arguments
7)]
8pub mod etsi_its_dsrc {
9 extern crate alloc;
10 use core::borrow::Borrow;
11
12 use rasn::prelude::*;
13
14 use super::super::cdd_2_2_1::etsi_its_cdd::{
15 Iso3833VehicleType,
16 Latitude,
17 Longitude,
18 StationID,
19 };
20 #[doc = " Anonymous SEQUENCE OF member "]
21 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
22 #[rasn(automatic_tags, identifier = "SEQUENCE")]
23 pub struct AnonymousAdvisorySpeedRegional {
24 #[rasn(value("0..=255"), identifier = "regionId")]
25 pub region_id: u8,
26 #[rasn(identifier = "regExtValue")]
27 pub reg_ext_value: Any,
28 }
29 impl AnonymousAdvisorySpeedRegional {
30 pub fn new(region_id: u8, reg_ext_value: Any) -> Self {
31 Self {
32 region_id,
33 reg_ext_value,
34 }
35 }
36 }
37 #[doc = " Inner type "]
38 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
39 #[rasn(delegate, size("1..=4"))]
40 pub struct AdvisorySpeedRegional(pub SequenceOf<AnonymousAdvisorySpeedRegional>);
41
42 #[doc = "This DF is used to convey a recommended traveling approach speed to an intersection"]
43 #[doc = "from the message issuer to various travelers and vehicle types. Besides support for various eco-driving applications, this"]
44 #[doc = "allows transmitting recommended speeds for specialty vehicles such as transit buses."]
45 #[doc = "- @field type: the type of advisory which this is."]
46 #[doc = "- @field speed: See @ref SpeedAdvice for converting and translating speed expressed in mph into units of m/s."]
47 #[doc = " This element is optional ONLY when superceded by the presence of a regional speed element found in Reg-AdvisorySpeed entry"]
48 #[doc = "- @field confidence: A confidence value for the above speed"]
49 #[doc = "- @field distance: The distance indicates the region for which the advised speed is recommended, it is specified upstream from the stop bar"]
50 #[doc = " along the connected egressing lane. Unit = 1 meter "]
51 #[doc = "- @field class: the vehicle types to which it applies when absent, the AdvisorySpeed applies to all motor vehicle types"]
52 #[doc = "- @field regional: optional region specific data."]
53 #[doc = "\n\n@category: Infrastructure information"]
54 #[doc = "\n\n@revision: V1.3.1"]
55 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
56 #[rasn(automatic_tags)]
57 #[non_exhaustive]
58 pub struct AdvisorySpeed {
59 #[rasn(identifier = "type")]
60 pub r_type: AdvisorySpeedType,
61 pub speed: Option<SpeedAdvice>,
62 pub confidence: Option<SpeedConfidenceDSRC>,
63 pub distance: Option<ZoneLength>,
64 pub class: Option<RestrictionClassID>,
65 pub regional: Option<AdvisorySpeedRegional>,
66 }
67 impl AdvisorySpeed {
68 pub fn new(
69 r_type: AdvisorySpeedType,
70 speed: Option<SpeedAdvice>,
71 confidence: Option<SpeedConfidenceDSRC>,
72 distance: Option<ZoneLength>,
73 class: Option<RestrictionClassID>,
74 regional: Option<AdvisorySpeedRegional>,
75 ) -> Self {
76 Self {
77 r_type,
78 speed,
79 confidence,
80 distance,
81 class,
82 regional,
83 }
84 }
85 }
86
87 #[doc = "This DF consists of a list of @ref AdvisorySpeed entries."]
88 #[doc = "\n\n@category: Infrastructure information"]
89 #[doc = "\n\n@revision: V1.3.1"]
90 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
91 #[rasn(delegate, size("1..=16"))]
92 pub struct AdvisorySpeedList(pub SequenceOf<AdvisorySpeed>);
93
94 #[doc = "This DE relates the type of travel to which a given speed refers. This element is"]
95 #[doc = "typically used as part of an @ref AdvisorySpeed data frame for signal phase and timing data."]
96 #[doc = "\n\n@category: Infrastructure information"]
97 #[doc = "\n\n@revision: V1.3.1"]
98 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
99 #[rasn(enumerated)]
100 #[non_exhaustive]
101 pub enum AdvisorySpeedType {
102 none = 0,
103 greenwave = 1,
104 ecoDrive = 2,
105 transit = 3,
106 }
107
108 #[doc = "This DE relates the allowed (possible) maneuvers from a lane, typically a"]
109 #[doc = "motorized vehicle lane. It should be noted that in practice these values may be further restricted by vehicle class, local"]
110 #[doc = "regulatory environment and other changing conditions."]
111 #[doc = "\n\n@note: When used by data frames, the AllowedManeuvers data concept is used in two places: optionally in the"]
112 #[doc = " generic lane structure to list all possible maneuvers (as in what that lane can do at its stop line point); and within each"]
113 #[doc = " ConnectsTo structure. Each ConnectsTo structure contains a list used to provide a single valid maneuver in the context of"]
114 #[doc = " one lane connecting to another in the context of a signal phase that applies to that maneuver. It should be noted that, in"]
115 #[doc = " some intersections, multiple outbound lanes can be reached by the same maneuver (for example two independent left"]
116 #[doc = " turns might be found in a 5-legged intersection) but that to reach any given lane from the stop line of another lane is"]
117 #[doc = " always a single maneuver item (hence the use of a list). Not all intersection descriptions may contain an exhaustive set of"]
118 #[doc = " ConnectsTo information (unsignalized intersections for example) and in such cases the AllowedManeuvers in the generic"]
119 #[doc = " lane structure can be used. If present in both places, the data expressed in the generic lane shall not conflict with the data"]
120 #[doc = " found in the collection of ConnectsTo entries."]
121 #[doc = "\n\n@category: Infrastructure information"]
122 #[doc = "\n\n@revision: V1.3.1"]
123 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
124 #[rasn(delegate)]
125 pub struct AllowedManeuvers(pub FixedBitString<12usize>);
126
127 #[doc = "This DE is used to describe an angular measurement in units of degrees. This data"]
128 #[doc = "element is often used as a heading direction when in motion. In this use, the current heading of the sending device is"]
129 #[doc = "expressed in unsigned units of 0.0125 degrees from North, such that 28799 such degrees represent 359.9875 degrees."]
130 #[doc = "North shall be defined as the axis defined by the WGS-84 coordinate system and its reference ellipsoid. Any angle \"to the"]
131 #[doc = "east\" is defined as the positive direction. A value of 28800 shall be used when Angle is unavailable."]
132 #[doc = "\n\n@note: Note that other heading and angle data elements of various sizes and precisions are found in other parts of this standard and in ITS."]
133 #[doc = "\n\n@unit: 0.0125 degrees"]
134 #[doc = "\n\n@category: Infrastructure information"]
135 #[doc = "\n\n@revision: V1.3.1"]
136 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
137 #[rasn(delegate, value("0..=28800"))]
138 pub struct Angle(pub u16);
139
140 #[doc = "This DF is a collection of three offset values in an orthogonal coordinate system"]
141 #[doc = "which describe how far the electrical phase center of an antenna is in each axis from a nearby known anchor point in units of 1 cm."]
142 #[doc = "When the antenna being described is on a vehicle, the signed offset shall be in the coordinate system defined in section 11.4."]
143 #[doc = "- @field antOffsetX: a range of +- 20.47 meters."]
144 #[doc = "- @field antOffsetY: a range of +- 2.55 meters."]
145 #[doc = "- @field antOffsetZ: a range of +- 5.11 meters."]
146 #[doc = "\n\n@category: Infrastructure information"]
147 #[doc = "\n\n@revision: V1.3.1"]
148 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
149 #[rasn(automatic_tags)]
150 pub struct AntennaOffsetSet {
151 #[rasn(identifier = "antOffsetX")]
152 pub ant_offset_x: OffsetB12,
153 #[rasn(identifier = "antOffsetY")]
154 pub ant_offset_y: OffsetB09,
155 #[rasn(identifier = "antOffsetZ")]
156 pub ant_offset_z: OffsetB10,
157 }
158 impl AntennaOffsetSet {
159 pub fn new(
160 ant_offset_x: OffsetB12,
161 ant_offset_y: OffsetB09,
162 ant_offset_z: OffsetB10,
163 ) -> Self {
164 Self {
165 ant_offset_x,
166 ant_offset_y,
167 ant_offset_z,
168 }
169 }
170 }
171
172 #[doc = "This DE is used to relate the index of an approach, either ingress or egress within the"]
173 #[doc = "subject lane. In general, an approach index in the context of a timing movement is not of value in the MAP and SPAT"]
174 #[doc = "process because the lane ID and signal group ID concepts handle this with more precision. This value can also be useful"]
175 #[doc = "as an aid as it can be used to indicate the gross position of a moving object (vehicle) when its lane level accuracy is"]
176 #[doc = "unknown. This value can also be used when a deployment represents sets of lanes as groups without further details (as is"]
177 #[doc = "done in Japan)."]
178 #[doc = "\n\n@note: zero to be used when valid value is unknown"]
179 #[doc = "\n\n@category: Infrastructure information"]
180 #[doc = "\n\n@revision: V1.3.1"]
181 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
182 #[rasn(delegate, value("0..=15"))]
183 pub struct ApproachID(pub u8);
184
185 #[doc = "This DE provides a means to indicate the current role that a DSRC device is playing"]
186 #[doc = "This is most commonly employed when a vehicle needs to take on another role in order to send certain DSRC message"]
187 #[doc = "types. As an example, when a public safety vehicle such as a police car wishes to send a signal request message (SRM)"]
188 #[doc = "to an intersection to request a preemption service, the vehicle takes on the role \"police\" from the below list in both the"]
189 #[doc = "SRM message itself and also in the type of security CERT which is sent (the SSP in the CERT it used to identify the"]
190 #[doc = "requester as being of type \"police\" and that they are allowed to send this message in this way). The BasicVehicleRole"]
191 #[doc = "entry is often used and combined with other information about the requester as well, such as details of why the request is"]
192 #[doc = "being made."]
193 #[doc = "- 0 - `basicVehicle` - Light duty passenger vehicle type"]
194 #[doc = "- 1 - `publicTransport` - Used in EU for Transit us"]
195 #[doc = "- 2 - `specialTransport` - Used in EU (e.g. heavy load)"]
196 #[doc = "- 3 - `dangerousGoods` - Used in EU for any HAZMAT"]
197 #[doc = "- 4 - `roadWork` - Used in EU for State and Local DOT uses"]
198 #[doc = "- 5 - `roadRescue` - Used in EU and in the US to include tow trucks."]
199 #[doc = "- 6 - `emergency` - Used in EU for Police, Fire and Ambulance units"]
200 #[doc = "- 7 - `safetyCar` - Used in EU for Escort vehicles"]
201 #[doc = "- 8 - `none-unknown` - added to follow current SAE style guidelines"]
202 #[doc = "- 9 - `truck` - Heavy trucks with additional BSM rights and obligations"]
203 #[doc = "- 10 - `motorcycle` - Motorcycle"]
204 #[doc = "- 11 - `roadSideSource` - For infrastructure generated calls such as fire house, rail infrastructure, roadwork site, etc."]
205 #[doc = "- 12 - `police` - Police vehicle"]
206 #[doc = "- 13 - `fire` - Firebrigade"]
207 #[doc = "- 14 - `ambulance` - (does not include private para-transit etc.)"]
208 #[doc = "- 15 - `dot` - all roadwork vehicles"]
209 #[doc = "- 16 - `transit` - all transit vehicles"]
210 #[doc = "- 17 - `slowMoving` - to also include oversize etc."]
211 #[doc = "- 18 - `stopNgo` - to include trash trucks, school buses and others"]
212 #[doc = "- 19 - `cyclist` - bicycles"]
213 #[doc = "- 20 - `pedestrian` - also includes those with mobility limitations"]
214 #[doc = "- 21 - `nonMotorized` - other, horse drawn, etc."]
215 #[doc = "- 22 - `military` - military vehicles"]
216 #[doc = "\n\n@note: It should be observed that devices can at times change their roles (i.e. a fire operated by a volunteer"]
217 #[doc = " fireman can assume a fire role for a period of time when in service, or a pedestrian may assume a cyclist role when using"]
218 #[doc = " a bicycle). It should be observed that not all devices (or vehicles) can assume all roles, nor that a given"]
219 #[doc = " device in a given role will be provided with a security certificate (CERT) that has suitable SSP credentials to provide the"]
220 #[doc = " ability to send a particular message or message content. The ultimate responsibility to determine what role is to be used,"]
221 #[doc = " and what CERTs would be provided for that role (which in turn controls the messages and message content that can be"]
222 #[doc = " sent within SAE-defined PSIDs) rests with the regional deployment."]
223 #[doc = "\n\n@category: Infrastructure information"]
224 #[doc = "\n\n@revision: V1.3.1"]
225 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
226 #[rasn(enumerated)]
227 #[non_exhaustive]
228 pub enum BasicVehicleRole {
229 basicVehicle = 0,
230 publicTransport = 1,
231 specialTransport = 2,
232 dangerousGoods = 3,
233 roadWork = 4,
234 roadRescue = 5,
235 emergency = 6,
236 safetyCar = 7,
237 #[rasn(identifier = "none-unknown")]
238 none_unknown = 8,
239 truck = 9,
240 motorcycle = 10,
241 roadSideSource = 11,
242 police = 12,
243 fire = 13,
244 ambulance = 14,
245 dot = 15,
246 transit = 16,
247 slowMoving = 17,
248 stopNgo = 18,
249 cyclist = 19,
250 pedestrian = 20,
251 nonMotorized = 21,
252 military = 22,
253 #[rasn(extension_addition)]
254 tram = 23,
255 }
256 #[doc = " Inner type "]
257 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
258 #[rasn(choice, automatic_tags)]
259 pub enum ComputedLaneOffsetXaxis {
260 small(DrivenLineOffsetSm),
261 large(DrivenLineOffsetLg),
262 }
263 #[doc = " Inner type "]
264 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
265 #[rasn(choice, automatic_tags)]
266 pub enum ComputedLaneOffsetYaxis {
267 small(DrivenLineOffsetSm),
268 large(DrivenLineOffsetLg),
269 }
270 #[doc = " Anonymous SEQUENCE OF member "]
271 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
272 #[rasn(automatic_tags, identifier = "SEQUENCE")]
273 pub struct AnonymousComputedLaneRegional {
274 #[rasn(value("0..=255"), identifier = "regionId")]
275 pub region_id: u8,
276 #[rasn(identifier = "regExtValue")]
277 pub reg_ext_value: Any,
278 }
279 impl AnonymousComputedLaneRegional {
280 pub fn new(region_id: u8, reg_ext_value: Any) -> Self {
281 Self {
282 region_id,
283 reg_ext_value,
284 }
285 }
286 }
287 #[doc = " Inner type "]
288 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
289 #[rasn(delegate, size("1..=4"))]
290 pub struct ComputedLaneRegional(pub SequenceOf<AnonymousComputedLaneRegional>);
291
292 #[doc = "This DE is used to contain information needed to compute one lane from another"]
293 #[doc = "(hence the name). This concept is used purely as a means of saving size in the message payload. The new lane is"]
294 #[doc = "expressed as an X,Y offset from the first point of the source lane. It can be optionally rotated and scaled. Any attribute"]
295 #[doc = "information found within the node of the source lane list cannot be changed and must be reused."]
296 #[doc = "- @field referenceLaneId: the lane ID upon which this computed lane will be based Lane Offset in X and Y direction"]
297 #[doc = "- @field offsetXaxis: A path X offset value for translations of the path's points when creating translated lanes."]
298 #[doc = "- @field offsetYaxis: The values found in the reference lane are all offset based on the X and Y values from"]
299 #[doc = " the coordinates of the reference lane's initial path point."]
300 #[doc = "- @field rotateXY: A path rotation value for the entire lane"]
301 #[doc = " Observe that this rotates the existing orientation"]
302 #[doc = " of the referenced lane, it does not replace it."]
303 #[doc = " Rotation occurs about the initial path point."]
304 #[doc = "- @field scaleXaxis: value for translations or zooming of the path's points. The values found in the reference lane"]
305 #[doc = "- @field scaleYaxis: 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."]
306 #[doc = " The Z axis remains untouched."]
307 #[doc = "- @field regional: optional region specific data."]
308 #[doc = "\n\n@note: The specified transformation shall be applied to the reference lane without any intermediary loss of precision"]
309 #[doc = " (truncation). The order of the transformations shall be: the East-West and North-South offsets, the scaling factors, and"]
310 #[doc = " finally the rotation."]
311 #[doc = "\n\n@category: Infrastructure information"]
312 #[doc = "\n\n@revision: V1.3.1"]
313 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
314 #[rasn(automatic_tags)]
315 #[non_exhaustive]
316 pub struct ComputedLane {
317 #[rasn(identifier = "referenceLaneId")]
318 pub reference_lane_id: LaneID,
319 #[rasn(identifier = "offsetXaxis")]
320 pub offset_xaxis: ComputedLaneOffsetXaxis,
321 #[rasn(identifier = "offsetYaxis")]
322 pub offset_yaxis: ComputedLaneOffsetYaxis,
323 #[rasn(identifier = "rotateXY")]
324 pub rotate_xy: Option<Angle>,
325 #[rasn(identifier = "scaleXaxis")]
326 pub scale_xaxis: Option<ScaleB12>,
327 #[rasn(identifier = "scaleYaxis")]
328 pub scale_yaxis: Option<ScaleB12>,
329 pub regional: Option<ComputedLaneRegional>,
330 }
331 impl ComputedLane {
332 pub fn new(
333 reference_lane_id: LaneID,
334 offset_xaxis: ComputedLaneOffsetXaxis,
335 offset_yaxis: ComputedLaneOffsetYaxis,
336 rotate_xy: Option<Angle>,
337 scale_xaxis: Option<ScaleB12>,
338 scale_yaxis: Option<ScaleB12>,
339 regional: Option<ComputedLaneRegional>,
340 ) -> Self {
341 Self {
342 reference_lane_id,
343 offset_xaxis,
344 offset_yaxis,
345 rotate_xy,
346 scale_xaxis,
347 scale_yaxis,
348 regional,
349 }
350 }
351 }
352
353 #[doc = "The data concept ties a single lane to a single maneuver needed to reach it from another lane."]
354 #[doc = "It is typically used to connect the allowed maneuver from the end of a lane to the outbound lane so that these can be"]
355 #[doc = "mapped to the SPAT message to which both lanes apply."]
356 #[doc = "- @field lane: Index of the connecting lane."]
357 #[doc = "- @field maneuver: This data element allows only the description of a subset of possible manoeuvres and therefore"]
358 #[doc = " represents an incomplete list of possible travel directions. The connecting `lane` data element gives the"]
359 #[doc = " exact information about the manoeuvre relation from ingress to egress lane. Therefore the \"maneuver\""]
360 #[doc = " data element may be used only additionally if the travel direction of the manoeuvre is unanmbigoulsy"]
361 #[doc = " represented (e.g. left, right, straight, etc.)."]
362 #[doc = "\n\n@category: Infrastructure information"]
363 #[doc = "\n\n@revision: V1.3.1"]
364 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
365 #[rasn(automatic_tags)]
366 pub struct ConnectingLane {
367 pub lane: LaneID,
368 pub maneuver: Option<AllowedManeuvers>,
369 }
370 impl ConnectingLane {
371 pub fn new(lane: LaneID, maneuver: Option<AllowedManeuvers>) -> Self {
372 Self { lane, maneuver }
373 }
374 }
375
376 #[doc = "This DF is used to combine/connect multiple physical lanes (i.e. within intersections or road"]
377 #[doc = "segments). For signalized movements, the `connectsTo` data frame defines e.g. the relation between"]
378 #[doc = "ingress and egress lanes within an intersection. It describes the allowed manoeuvres and includes the"]
379 #[doc = "link (`signalGroup` identifier) between the @ref MapData and the @ref PAT message. The data frame is also used"]
380 #[doc = "to describe the relation of lanes within a non signalized intersection (e.g. ingress lanes which are"]
381 #[doc = "bypassing the conflict area and ending in an egress lane without signalization). Within a road segment,"]
382 #[doc = "it is used to combine two or multiple physical lanes into a single lane object."]
383 #[doc = "- @field connectingLane: "]
384 #[doc = "- @field remoteIntersection: When the data element `remoteIntersection` is used, it indicates"]
385 #[doc = " that the connecting lane belongs to another intersection. "]
386 #[doc = " (see clause [ISO TS 19091] G.9.1 for further explainations)."]
387 #[doc = "- @field signalGroup: "]
388 #[doc = "- @field userClass: "]
389 #[doc = "- @field connectionID: "]
390 #[doc = "\n\n@category: Infrastructure information"]
391 #[doc = "\n\n@revision: V1.3.1"]
392 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
393 #[rasn(automatic_tags)]
394 pub struct Connection {
395 #[rasn(identifier = "connectingLane")]
396 pub connecting_lane: ConnectingLane,
397 #[rasn(identifier = "remoteIntersection")]
398 pub remote_intersection: Option<IntersectionReferenceID>,
399 #[rasn(identifier = "signalGroup")]
400 pub signal_group: Option<SignalGroupID>,
401 #[rasn(identifier = "userClass")]
402 pub user_class: Option<RestrictionClassID>,
403 #[rasn(identifier = "connectionID")]
404 pub connection_id: Option<LaneConnectionID>,
405 }
406 impl Connection {
407 pub fn new(
408 connecting_lane: ConnectingLane,
409 remote_intersection: Option<IntersectionReferenceID>,
410 signal_group: Option<SignalGroupID>,
411 user_class: Option<RestrictionClassID>,
412 connection_id: Option<LaneConnectionID>,
413 ) -> Self {
414 Self {
415 connecting_lane,
416 remote_intersection,
417 signal_group,
418 user_class,
419 connection_id,
420 }
421 }
422 }
423 #[doc = " Anonymous SEQUENCE OF member "]
424 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
425 #[rasn(automatic_tags, identifier = "SEQUENCE")]
426 pub struct AnonymousConnectionManeuverAssistRegional {
427 #[rasn(value("0..=255"), identifier = "regionId")]
428 pub region_id: u8,
429 #[rasn(identifier = "regExtValue")]
430 pub reg_ext_value: Any,
431 }
432 impl AnonymousConnectionManeuverAssistRegional {
433 pub fn new(region_id: u8, reg_ext_value: Any) -> Self {
434 Self {
435 region_id,
436 reg_ext_value,
437 }
438 }
439 }
440 #[doc = " Inner type "]
441 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
442 #[rasn(delegate, size("1..=4"))]
443 pub struct ConnectionManeuverAssistRegional(
444 pub SequenceOf<AnonymousConnectionManeuverAssistRegional>,
445 );
446
447 #[doc = "This DF contains information about the the dynamic flow of traffic for the lane(s)"]
448 #[doc = "and maneuvers in question (as determined by the @ref LaneConnectionID). Note that this information can be sent regarding"]
449 #[doc = "any lane-to-lane movement; it need not be limited to the lanes with active (non-red) phases when sent."]
450 #[doc = "- @field connectionID: the common connectionID used by all lanes to which this data applies"]
451 #[doc = " (this value traces to ConnectsTo entries in lanes)"]
452 #[doc = "- @field queueLength: The distance from the stop line to the back edge of the last vehicle in the queue,"]
453 #[doc = " as measured along the lane center line. (Unit = 1 meter, 0 = no queue)"]
454 #[doc = "- @field availableStorageLength: Distance (e.g. beginning from the downstream stop-line up to a given distance) with a high"]
455 #[doc = " probability for successfully executing the connecting maneuver between the two lanes"]
456 #[doc = " during the current cycle."]
457 #[doc = " Used for enhancing the awareness of vehicles to anticipate if they can pass the stop line"]
458 #[doc = " of the lane. Used for optimizing the green wave, due to knowledge of vehicles waiting in front"]
459 #[doc = " of a red light (downstream)."]
460 #[doc = " The element nextTime in @ref TimeChangeDetails in the containing data frame contains the next"]
461 #[doc = " timemark at which an active phase is expected, a form of storage flush interval."]
462 #[doc = " (Unit = 1 meter, 0 = no space remains)"]
463 #[doc = "- @field waitOnStop: If true, the vehicles on this specific connecting"]
464 #[doc = " maneuver have to stop on the stop-line and not to enter the collision area"]
465 #[doc = "- @field pedBicycleDetect: true if ANY ped or bicycles are detected crossing the above lanes. Set to false ONLY if there is a"]
466 #[doc = " high certainty that there are none present, otherwise element is not sent."]
467 #[doc = "- @field regional: This data element includes additional data content @ref ConnectionManeuverAssist-addGrpC defined in"]
468 #[doc = " this profile (see [ISO TS 19091] G.5.1.1). The content is included using the regional extension framework as defined in"]
469 #[doc = " @ref ConnectionManeuverAssist-addGrpC is used for position feedback to moving ITS stations for executing"]
470 #[doc = " safe manoeuvres and is included for this purpose in the data element \"intersectionState\""]
471 #[doc = "\n\n@category: Infrastructure information"]
472 #[doc = "\n\n@revision: V1.3.1"]
473 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
474 #[rasn(automatic_tags)]
475 #[non_exhaustive]
476 pub struct ConnectionManeuverAssist {
477 #[rasn(identifier = "connectionID")]
478 pub connection_id: LaneConnectionID,
479 #[rasn(identifier = "queueLength")]
480 pub queue_length: Option<ZoneLength>,
481 #[rasn(identifier = "availableStorageLength")]
482 pub available_storage_length: Option<ZoneLength>,
483 #[rasn(identifier = "waitOnStop")]
484 pub wait_on_stop: Option<WaitOnStopline>,
485 #[rasn(identifier = "pedBicycleDetect")]
486 pub ped_bicycle_detect: Option<PedestrianBicycleDetect>,
487 pub regional: Option<ConnectionManeuverAssistRegional>,
488 }
489 impl ConnectionManeuverAssist {
490 pub fn new(
491 connection_id: LaneConnectionID,
492 queue_length: Option<ZoneLength>,
493 available_storage_length: Option<ZoneLength>,
494 wait_on_stop: Option<WaitOnStopline>,
495 ped_bicycle_detect: Option<PedestrianBicycleDetect>,
496 regional: Option<ConnectionManeuverAssistRegional>,
497 ) -> Self {
498 Self {
499 connection_id,
500 queue_length,
501 available_storage_length,
502 wait_on_stop,
503 ped_bicycle_detect,
504 regional,
505 }
506 }
507 }
508
509 #[doc = "This DF is used in the generic lane descriptions to provide a sequence of other defined"]
510 #[doc = "lanes to which each lane connects beyond its stop point. See the Connection data frame entry for details. Note that this"]
511 #[doc = "data frame is not used in some lane object types."]
512 #[doc = "\n\n@note: The assignment of lanes in the Connection structure shall start with the leftmost lane from the vehicle"]
513 #[doc = " perspective (the u-turn lane in some cases) followed by subsequent lanes in a clockwise assignment order. Therefore, the"]
514 #[doc = " rightmost lane to which this lane connects would always be listed last. Note that this order is observed regardless of which"]
515 #[doc = " side of the road vehicles use. If this structure is used in the lane description, then all valid lanes to which the subject lane"]
516 #[doc = " connects shall be listed."]
517 #[doc = "\n\n@category: Infrastructure information"]
518 #[doc = "\n\n@revision: V1.3.1"]
519 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
520 #[rasn(delegate, size("1..=16"))]
521 pub struct ConnectsToList(pub SequenceOf<Connection>);
522
523 #[doc = "The DSRC style date is a compound value consisting of finite-length sequences of integers (not characters) of the"]
524 #[doc = "form: \"yyyy, mm, dd, hh, mm, ss (sss+)\" - as defined below."]
525 #[doc = "\n\n@note: Note that some elements of this structure may not be sent when not needed. At least one element shall be present."]
526 #[doc = "\n\n@category: Infrastructure information"]
527 #[doc = "\n\n@revision: V1.3.1"]
528 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
529 #[rasn(automatic_tags)]
530 pub struct DDateTime {
531 pub year: Option<DYear>,
532 pub month: Option<DMonth>,
533 pub day: Option<DDay>,
534 pub hour: Option<DHour>,
535 pub minute: Option<DMinute>,
536 pub second: Option<DSecond>,
537 pub offset: Option<DOffset>,
538 }
539 impl DDateTime {
540 pub fn new(
541 year: Option<DYear>,
542 month: Option<DMonth>,
543 day: Option<DDay>,
544 hour: Option<DHour>,
545 minute: Option<DMinute>,
546 second: Option<DSecond>,
547 offset: Option<DOffset>,
548 ) -> Self {
549 Self {
550 year,
551 month,
552 day,
553 hour,
554 minute,
555 second,
556 offset,
557 }
558 }
559 }
560
561 #[doc = "The DSRC style day is a simple value consisting of integer values from zero to 31. The value of zero shall represent an unknown value."]
562 #[doc = "\n\n@unit: days"]
563 #[doc = "\n\n@category: Infrastructure information"]
564 #[doc = "\n\n@revision: V1.3.1"]
565 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
566 #[rasn(delegate, value("0..=31"))]
567 pub struct DDay(pub u8);
568
569 #[doc = "The DSRC hour consists of integer values from zero to 23 representing the hours within a day. The value of 31 shall"]
570 #[doc = "represent an unknown value. The range 24 to 30 is used in some transit applications to represent schedule adherence."]
571 #[doc = "\n\n@unit: hours"]
572 #[doc = "\n\n@category: Infrastructure information"]
573 #[doc = "\n\n@revision: V1.3.1"]
574 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
575 #[rasn(delegate, value("0..=31"))]
576 pub struct DHour(pub u8);
577
578 #[doc = "The DSRC style minute is a simple value consisting of integer values from zero to 59 representing the minutes"]
579 #[doc = "within an hour. The value of 60 shall represent an unknown value."]
580 #[doc = "\n\n@unit: minutes"]
581 #[doc = "\n\n@category: Infrastructure information"]
582 #[doc = "\n\n@revision: V1.3.1"]
583 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
584 #[rasn(delegate, value("0..=60"))]
585 pub struct DMinute(pub u8);
586
587 #[doc = "The DSRC month consists of integer values from one to 12, representing the month within a year. The value of 0"]
588 #[doc = "shall represent an unknown value."]
589 #[doc = "\n\n@unit: months"]
590 #[doc = "\n\n@category: Infrastructure information"]
591 #[doc = "\n\n@revision: V1.3.1"]
592 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
593 #[rasn(delegate, value("0..=12"))]
594 pub struct DMonth(pub u8);
595
596 #[doc = "The DSRC (time zone) offset consists of a signed integer representing an hour and minute value set from -14:00 to"]
597 #[doc = "+14:00, representing all the world’s local time zones in units of minutes. The value of zero (00:00) may also represent an"]
598 #[doc = "unknown value. Note some time zones are do not align to hourly boundaries."]
599 #[doc = "\n\n@unit: minutes from UTC time"]
600 #[doc = "\n\n@category: Infrastructure information"]
601 #[doc = "\n\n@revision: V1.3.1"]
602 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
603 #[rasn(delegate, value("-840..=840"))]
604 pub struct DOffset(pub i16);
605
606 #[doc = "The DSRC second expressed in this DE consists of integer values from zero to 60999, representing the"]
607 #[doc = "milliseconds within a minute. A leap second is represented by the value range 60000 to 60999. The value of 65535 shall"]
608 #[doc = "represent an unavailable value in the range of the minute. The values from 61000 to 65534 are reserved."]
609 #[doc = "\n\n@unit: milliseconds"]
610 #[doc = "\n\n@category: Infrastructure information"]
611 #[doc = "\n\n@revision: V1.3.1"]
612 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
613 #[rasn(delegate, value("0..=65535"))]
614 pub struct DSecond(pub u16);
615
616 #[doc = "The DSRC year consists of integer values from zero to 4095 representing the year according to the Gregorian"]
617 #[doc = "calendar date system. The value of zero shall represent an unknown value."]
618 #[doc = "\n\n@unit: years"]
619 #[doc = "\n\n@category: Infrastructure information"]
620 #[doc = "\n\n@revision: V1.3.1"]
621 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
622 #[rasn(delegate, value("0..=4095"))]
623 pub struct DYear(pub u16);
624
625 #[doc = "This DF is used to provide basic (static) information on how a map fragment was processed or determined."]
626 #[doc = "\n\n@category: Infrastructure information"]
627 #[doc = "\n\n@revision: V1.3.1"]
628 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
629 #[rasn(automatic_tags)]
630 #[non_exhaustive]
631 pub struct DataParameters {
632 #[rasn(size("1..=255"), identifier = "processMethod")]
633 pub process_method: Option<Ia5String>,
634 #[rasn(size("1..=255"), identifier = "processAgency")]
635 pub process_agency: Option<Ia5String>,
636 #[rasn(size("1..=255"), identifier = "lastCheckedDate")]
637 pub last_checked_date: Option<Ia5String>,
638 #[rasn(size("1..=255"), identifier = "geoidUsed")]
639 pub geoid_used: Option<Ia5String>,
640 }
641 impl DataParameters {
642 pub fn new(
643 process_method: Option<Ia5String>,
644 process_agency: Option<Ia5String>,
645 last_checked_date: Option<Ia5String>,
646 geoid_used: Option<Ia5String>,
647 ) -> Self {
648 Self {
649 process_method,
650 process_agency,
651 last_checked_date,
652 geoid_used,
653 }
654 }
655 }
656
657 #[doc = "This DE provides the final angle used in the last point of the lane path. Used to \"cant\" the stop line of the lane."]
658 #[doc = "With an angle range from negative 150 to positive 150 in one degree steps where zero is directly"]
659 #[doc = "along the axis or the lane center line as defined by the two closest points."]
660 #[doc = "\n\n@unit: degree"]
661 #[doc = "\n\n@category: Infrastructure information"]
662 #[doc = "\n\n@revision: V1.3.1"]
663 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
664 #[rasn(delegate, value("-150..=150"))]
665 pub struct DeltaAngle(pub i16);
666
667 #[doc = "This DE provides a time definition for an object's schedule adherence (typically a transit"]
668 #[doc = "vehicle) within a limited range of time. When the reporting object is ahead of schedule, a positive value is used; when"]
669 #[doc = "behind, a negative value is used. A value of zero indicates schedule adherence. This value is typically sent from a vehicle"]
670 #[doc = "to the traffic signal controller's RSU to indicate the urgency of a signal request in the context of being within schedule or"]
671 #[doc = "not. In another use case, the traffic signal controller may advise the transit vehicle to speed up (DeltaTime > 0) or to slow"]
672 #[doc = "down (DeltaTime < 0) to optimize the transit vehicle distribution driving along a specific route (e.g. a Bus route)."]
673 #[doc = "Supporting a range of +/- 20 minute in steps of 10 seconds:"]
674 #[doc = "- the value of `-121` shall be used when more than -20 minutes"]
675 #[doc = "- the value of `+120` shall be used when more than +20 minutes"]
676 #[doc = "- the value `-122` shall be used when the value is unavailable"]
677 #[doc = "\n\n@category: Infrastructure information"]
678 #[doc = "\n\n@revision: V1.3.1"]
679 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
680 #[rasn(delegate, value("-122..=121"))]
681 pub struct DeltaTime(pub i8);
682
683 #[doc = "This DE is used in maps and intersections to provide a human readable and"]
684 #[doc = "recognizable name for the feature that follows. It is typically used when debugging a data flow and not in production use."]
685 #[doc = "One key exception to this general rule is to provide a human-readable string for disabled travelers in the case of"]
686 #[doc = "crosswalks and sidewalk lane objects."]
687 #[doc = "\n\n@category: Infrastructure information"]
688 #[doc = "\n\n@revision: V1.3.1"]
689 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
690 #[rasn(delegate, size("1..=63"))]
691 pub struct DescriptiveName(pub Ia5String);
692
693 #[doc = "This DE is an integer value expressing the offset in a defined axis from a"]
694 #[doc = "reference lane number from which a computed lane is offset. The measurement is taken from the reference lane center"]
695 #[doc = "line to the new center line, independent of any width values. The units are a signed value with an LSB of 1 cm."]
696 #[doc = "\n\n@unit: cm"]
697 #[doc = "\n\n@category: Infrastructure information"]
698 #[doc = "\n\n@revision: V1.3.1"]
699 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
700 #[rasn(delegate, value("-32767..=32767"))]
701 pub struct DrivenLineOffsetLg(pub i16);
702
703 #[doc = "The DrivenLineOffsetSmall data element is an integer value expressing the offset in a defined axis from a reference"]
704 #[doc = "lane number from which a computed lane is offset. The measurement is taken from the reference lane center line to the"]
705 #[doc = "new center line, independent of any width values. The units are a signed value with an LSB of 1 cm."]
706 #[doc = "\n\n@unit: cm"]
707 #[doc = "\n\n@category: Infrastructure information"]
708 #[doc = "\n\n@revision: V1.3.1"]
709 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
710 #[rasn(delegate, value("-2047..=2047"))]
711 pub struct DrivenLineOffsetSm(pub i16);
712
713 #[doc = "This DE represents the geographic position above or below the reference ellipsoid (typically WGS-84)."]
714 #[doc = "The number has a resolution of 1 decimeter and represents an asymmetric range of positive and negative"]
715 #[doc = "values. Any elevation higher than +6143.9 meters is represented as +61439."]
716 #[doc = "Any elevation lower than -409.5 meters is represented as -4095."]
717 #[doc = "If the sending device does not know its elevation, it shall encode the Elevation data element with -4096."]
718 #[doc = "\n\n@note: When a vehicle is being measured, the elevation is taken from the horizontal spatial center of the vehicle"]
719 #[doc = " projected downward, regardless of vehicle tilt, to the point where the vehicle meets the road surface."]
720 #[doc = "\n\n@category: Infrastructure information"]
721 #[doc = "\n\n@revision: V1.3.1"]
722 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
723 #[rasn(delegate, value("-4096..=61439"))]
724 pub struct Elevation(pub i32);
725
726 #[doc = "This DE is used to provide the 95% confidence level for the currently reported value of @ref Elevation,"]
727 #[doc = "taking into account the current calibration and precision of the sensor(s) used to measure and/or"]
728 #[doc = "calculate the value. This data element is only to provide the listener with information on the limitations of the sensing"]
729 #[doc = "system, not to support any type of automatic error correction or to imply a guaranteed maximum error. This data element"]
730 #[doc = "should not be used for fault detection or diagnosis, but if a vehicle is able to detect a fault, the confidence interval should"]
731 #[doc = "be increased accordingly. The frame of reference and axis of rotation used shall be in accordance with that defined in Section 11."]
732 #[doc = "- `unavailable` - 0: B'0000 Not Equipped or unavailable"]
733 #[doc = "- `elev-500-00` - 1: B'0001 (500 m)"]
734 #[doc = "- `elev-200-00` - 2: B'0010 (200 m)"]
735 #[doc = "- `elev-100-00` - 3: B'0011 (100 m)"]
736 #[doc = "- `elev-050-00` - 4: B'0100 (50 m)"]
737 #[doc = "- `elev-020-00` - 5: B'0101 (20 m)"]
738 #[doc = "- `elev-010-00` - 6: B'0110 (10 m)"]
739 #[doc = "- `elev-005-00` - 7: B'0111 (5 m)"]
740 #[doc = "- `elev-002-00` - 8: B'1000 (2 m)"]
741 #[doc = "- `elev-001-00` - 9: B'1001 (1 m)"]
742 #[doc = "- `elev-000-50` - 10: B'1010 (50 cm)"]
743 #[doc = "- `elev-000-20` - 11: B'1011 (20 cm)"]
744 #[doc = "- `elev-000-10` - 12: B'1100 (10 cm)"]
745 #[doc = "- `elev-000-05` - 13: B'1101 (5 cm)"]
746 #[doc = "- `elev-000-02` - 14: B'1110 (2 cm)"]
747 #[doc = "- `elev-000-01` - 15: B'1111 (1 cm)"]
748 #[doc = "\n\n@note: Encoded as a 4 bit value"]
749 #[doc = "\n\n@category: Infrastructure information"]
750 #[doc = "\n\n@revision: V1.3.1"]
751 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
752 #[rasn(enumerated)]
753 pub enum ElevationConfidence {
754 unavailable = 0,
755 #[rasn(identifier = "elev-500-00")]
756 elev_500_00 = 1,
757 #[rasn(identifier = "elev-200-00")]
758 elev_200_00 = 2,
759 #[rasn(identifier = "elev-100-00")]
760 elev_100_00 = 3,
761 #[rasn(identifier = "elev-050-00")]
762 elev_050_00 = 4,
763 #[rasn(identifier = "elev-020-00")]
764 elev_020_00 = 5,
765 #[rasn(identifier = "elev-010-00")]
766 elev_010_00 = 6,
767 #[rasn(identifier = "elev-005-00")]
768 elev_005_00 = 7,
769 #[rasn(identifier = "elev-002-00")]
770 elev_002_00 = 8,
771 #[rasn(identifier = "elev-001-00")]
772 elev_001_00 = 9,
773 #[rasn(identifier = "elev-000-50")]
774 elev_000_50 = 10,
775 #[rasn(identifier = "elev-000-20")]
776 elev_000_20 = 11,
777 #[rasn(identifier = "elev-000-10")]
778 elev_000_10 = 12,
779 #[rasn(identifier = "elev-000-05")]
780 elev_000_05 = 13,
781 #[rasn(identifier = "elev-000-02")]
782 elev_000_02 = 14,
783 #[rasn(identifier = "elev-000-01")]
784 elev_000_01 = 15,
785 }
786
787 #[doc = "This DF is a sequence of lane IDs for lane objects that are activated in the current map"]
788 #[doc = "configuration. These lanes, unlike most lanes, have their RevocableLane bit set to one (asserted). Such lanes are not"]
789 #[doc = "considered to be part of the current map unless they are in the Enabled Lane List. This concept is used to describe all the"]
790 #[doc = "possible regulatory states for a given physical lane. For example, it is not uncommon to enable or disable the ability to"]
791 #[doc = "make a right hand turn on red during different periods of a day. Another similar example would be a lane which is used for"]
792 #[doc = "driving during one period and where parking is allowed at another. Traditionally, this information is conveyed to the vehicle"]
793 #[doc = "driver by local signage. By using the Enabled Lane List data frame in conjunction with the RevocableLane bit and"]
794 #[doc = "constructing a separate lane object in the intersection map for each different configuration, a single unified map can be"]
795 #[doc = "developed and used."]
796 #[doc = "Contents are the unique ID numbers for each lane object which is 'active' as part of the dynamic map contents."]
797 #[doc = "\n\n@category: Infrastructure information"]
798 #[doc = "\n\n@revision: V1.3.1"]
799 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
800 #[rasn(delegate, size("1..=16"))]
801 pub struct EnabledLaneList(pub SequenceOf<LaneID>);
802
803 #[doc = "This DE provides the type of fuel used by a vehicle."]
804 #[doc = "\n\n@category: Infrastructure information"]
805 #[doc = "\n\n@revision: V1.3.1"]
806 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
807 #[rasn(delegate, value("0..=15"))]
808 pub struct FuelType(pub u8);
809
810 #[doc = "A complete report of the vehicle's position, speed, and heading at an instant in time. Used in the probe vehicle"]
811 #[doc = "message (and elsewhere) as the initial position information. Often followed by other data frames that may provide offset"]
812 #[doc = "path data."]
813 #[doc = "- @field utcTime: time with mSec precision"]
814 #[doc = "- @field long: Longitude in 1/10th microdegree"]
815 #[doc = "- @field lat: Latitude in 1/10th microdegree"]
816 #[doc = "- @field elevation: Elevation in units of 0.1 m"]
817 #[doc = "- @field heading: Heading value "]
818 #[doc = "- @field speed: Speed value"]
819 #[doc = "- @field posAccuracy: position accuracy"]
820 #[doc = "- @field timeConfidence: time confidence"]
821 #[doc = "- @field posConfidence: position confidence"]
822 #[doc = "- @field speedConfidence: speed confidence "]
823 #[doc = "\n\n@category: Infrastructure information"]
824 #[doc = "\n\n@revision: V1.3.1"]
825 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
826 #[rasn(automatic_tags)]
827 #[non_exhaustive]
828 pub struct FullPositionVector {
829 #[rasn(identifier = "utcTime")]
830 pub utc_time: Option<DDateTime>,
831 pub long: Longitude,
832 pub lat: Latitude,
833 pub elevation: Option<Elevation>,
834 pub heading: Option<HeadingDSRC>,
835 pub speed: Option<TransmissionAndSpeed>,
836 #[rasn(identifier = "posAccuracy")]
837 pub pos_accuracy: Option<PositionalAccuracy>,
838 #[rasn(identifier = "timeConfidence")]
839 pub time_confidence: Option<TimeConfidence>,
840 #[rasn(identifier = "posConfidence")]
841 pub pos_confidence: Option<PositionConfidenceSet>,
842 #[rasn(identifier = "speedConfidence")]
843 pub speed_confidence: Option<SpeedandHeadingandThrottleConfidence>,
844 }
845 impl FullPositionVector {
846 pub fn new(
847 utc_time: Option<DDateTime>,
848 long: Longitude,
849 lat: Latitude,
850 elevation: Option<Elevation>,
851 heading: Option<HeadingDSRC>,
852 speed: Option<TransmissionAndSpeed>,
853 pos_accuracy: Option<PositionalAccuracy>,
854 time_confidence: Option<TimeConfidence>,
855 pos_confidence: Option<PositionConfidenceSet>,
856 speed_confidence: Option<SpeedandHeadingandThrottleConfidence>,
857 ) -> Self {
858 Self {
859 utc_time,
860 long,
861 lat,
862 elevation,
863 heading,
864 speed,
865 pos_accuracy,
866 time_confidence,
867 pos_confidence,
868 speed_confidence,
869 }
870 }
871 }
872
873 #[doc = "This DE is used to relate the current state of a GPS/GNSS rover or base system in terms"]
874 #[doc = "of its general health, lock on satellites in view, and use of any correction information. Various bits can be asserted (made"]
875 #[doc = "to a value of one) to reflect these values. A GNSS set with unknown health and no tracking or corrections would be"]
876 #[doc = "represented by setting the unavailable bit to one. A value of zero shall be used when a defined data element is"]
877 #[doc = "unavailable. The term \"GPS\" in any data element name in this standard does not imply that it is only to be used for GPS-"]
878 #[doc = "type GNSS systems."]
879 #[doc = "- `unavailable` - 0: Not Equipped or unavailable"]
880 #[doc = "- `isHealthy` - 1:"]
881 #[doc = "- `isMonitored` - 2:"]
882 #[doc = "- `baseStationType` - 3: Set to zero if a moving base station, or if a rover device (an OBU), Set to one if it is a fixed base station"]
883 #[doc = "- `aPDOPofUnder5` - 4: A dilution of precision greater than 5"]
884 #[doc = "- `inViewOfUnder5` - 5: Less than 5 satellites in view"]
885 #[doc = "- `localCorrectionsPresent` - 6: DGPS type corrections used"]
886 #[doc = "- `networkCorrectionsPresen` - 7: RTK type corrections used"]
887 #[doc = "\n\n@category: Infrastructure information"]
888 #[doc = "\n\n@revision: V1.3.1"]
889 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
890 #[rasn(delegate)]
891 pub struct GNSSstatus(pub FixedBitString<8usize>);
892 #[doc = " Anonymous SEQUENCE OF member "]
893 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
894 #[rasn(automatic_tags, identifier = "SEQUENCE")]
895 pub struct AnonymousGenericLaneRegional {
896 #[rasn(value("0..=255"), identifier = "regionId")]
897 pub region_id: u8,
898 #[rasn(identifier = "regExtValue")]
899 pub reg_ext_value: Any,
900 }
901 impl AnonymousGenericLaneRegional {
902 pub fn new(region_id: u8, reg_ext_value: Any) -> Self {
903 Self {
904 region_id,
905 reg_ext_value,
906 }
907 }
908 }
909 #[doc = " Inner type "]
910 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
911 #[rasn(delegate, size("1..=4"))]
912 pub struct GenericLaneRegional(pub SequenceOf<AnonymousGenericLaneRegional>);
913
914 #[doc = "This DF is used for all types of lanes, e.g. motorized vehicle lanes, crosswalks, medians. The"]
915 #[doc = "GenericLane describes the basic attribute information of the lane. The LaneID value for each lane is unique within an"]
916 #[doc = "intersection. One use for the LaneID is in the SPAT message, where a given signal or movement phase is mapped to a"]
917 #[doc = "set of applicable lanes using their respective LaneIDs. The NodeList2 data frame includes a sequence of offset points (or"]
918 #[doc = "node points) representing the center line path of the lane. As described in this standard, node points are sets of variable"]
919 #[doc = "sized delta orthogonal offsets from the prior point in the node path. (The initial point is offset from the LLH anchor point"]
920 #[doc = "used in the intersection.) Each node point may convey optional attribute data as well. The use of attributes is described"]
921 #[doc = "further in the Node definition, and in a later clause, but an example use would be to indicate a node point where the lane"]
922 #[doc = "width changes."]
923 #[doc = "It should be noted that a \"lane\" is an abstract concept that can describe objects other than motorized vehicle lanes, and"]
924 #[doc = "that the generic lane structure (using features drawn from Japanese usage) also allows combining multiple physical lanes"]
925 #[doc = "into a single lane object. In addition, such lanes can describe connectivity points with other lanes beyond a single"]
926 #[doc = "intersection, extending such a lane description over multiple nearby physical intersections and side streets which"]
927 #[doc = "themselves may not be equipped or assigned an index number in the regional intersection numbering system. (See the"]
928 #[doc = "ConnectsTo entry for details) This has value when describing a broader service area in terms of the roadway network,"]
929 #[doc = "probably with less precision and detail."]
930 #[doc = "- @field laneID: The unique ID number assigned to this lane object"]
931 #[doc = "- @field name: often for debug use only but at times used to name ped crossings"]
932 #[doc = "- @field ingressApproach: inbound Approach ID to which this lane belongs"]
933 #[doc = "- @field egressApproach: outbound Approach ID to which this lane belongs"]
934 #[doc = "- @field laneAttributes: All Attribute information about the basic selected lane type"]
935 #[doc = " Directions of use, Geometric co-sharing and Type Specific Attributes"]
936 #[doc = " These Attributes are 'lane - global' that is, they are true for the entire length of the lane"]
937 #[doc = "- @field maneuvers: This data element allows only the description of a subset of possible manoeuvres and therefore"]
938 #[doc = " reperesents an incomplete list of possible travel directions. The connecting `lane` data element gives"]
939 #[doc = " the exact information about the manoeuvre relation from ingress to egress lane. Therefore the"]
940 #[doc = " \"maneuver\" data element is used only additionally if the travel direction of the manoeuvre is"]
941 #[doc = "- @field nodeList: Lane spatial path information as well as various Attribute information along the node path"]
942 #[doc = " Attributes found here are more general and may come and go over the length of the lane."]
943 #[doc = "- @field connectsTo: a list of other lanes and their signal group IDs each connecting lane and its signal group ID"]
944 #[doc = " is given, therefore this element provides the information formerly in \"signalGroups\" in prior editions."]
945 #[doc = "- @field overlays: A list of any lanes which have spatial paths that overlay (run on top of, and not simply cross)"]
946 #[doc = " the path of this lane when used"]
947 #[doc = "- @field regional: optional region specific data."]
948 #[doc = "\n\n@note: The data elements `ingressApproach` and `egressApproach` are used for grouping lanes whin an"]
949 #[doc = " approach (e.g. lanes defined in travel direction towards the intersection, lanes in exiting direction and"]
950 #[doc = " cross walks). For a bidirectrional lane (e.g. bike lane) both dataelements are used for the same lane. The"]
951 #[doc = " integer value used for identifying the `ingressApproach` and the `egressAproach`, based on the"]
952 #[doc = " topology, may be e.g. the same for all lanes within an approach of an intersection."]
953 #[doc = "\n\n@category: Infrastructure information"]
954 #[doc = "\n\n@revision: V1.3.1"]
955 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
956 #[rasn(automatic_tags)]
957 #[non_exhaustive]
958 pub struct GenericLane {
959 #[rasn(identifier = "laneID")]
960 pub lane_id: LaneID,
961 pub name: Option<DescriptiveName>,
962 #[rasn(identifier = "ingressApproach")]
963 pub ingress_approach: Option<ApproachID>,
964 #[rasn(identifier = "egressApproach")]
965 pub egress_approach: Option<ApproachID>,
966 #[rasn(identifier = "laneAttributes")]
967 pub lane_attributes: LaneAttributes,
968 pub maneuvers: Option<AllowedManeuvers>,
969 #[rasn(identifier = "nodeList")]
970 pub node_list: NodeListXY,
971 #[rasn(identifier = "connectsTo")]
972 pub connects_to: Option<ConnectsToList>,
973 pub overlays: Option<OverlayLaneList>,
974 pub regional: Option<GenericLaneRegional>,
975 }
976 impl GenericLane {
977 pub fn new(
978 lane_id: LaneID,
979 name: Option<DescriptiveName>,
980 ingress_approach: Option<ApproachID>,
981 egress_approach: Option<ApproachID>,
982 lane_attributes: LaneAttributes,
983 maneuvers: Option<AllowedManeuvers>,
984 node_list: NodeListXY,
985 connects_to: Option<ConnectsToList>,
986 overlays: Option<OverlayLaneList>,
987 regional: Option<GenericLaneRegional>,
988 ) -> Self {
989 Self {
990 lane_id,
991 name,
992 ingress_approach,
993 egress_approach,
994 lane_attributes,
995 maneuvers,
996 node_list,
997 connects_to,
998 overlays,
999 regional,
1000 }
1001 }
1002 }
1003
1004 #[doc = "The DE_HeadingConfidence data element is used to provide the 95% confidence level for the currently reported"]
1005 #[doc = "calculate the value. This data element is only to provide the listener with information on the limitations of the sensing"]
1006 #[doc = "value of DE_Heading, taking into account the current calibration and precision of the sensor(s) used to measure and/or"]
1007 #[doc = "system, not to support any type of automatic error correction or to imply a guaranteed maximum error. This data element"]
1008 #[doc = "should not be used for fault detection or diagnosis, but if a vehicle is able to detect a fault, the confidence interval should"]
1009 #[doc = "be increased accordingly. The frame of reference and axis of rotation used shall be in accordance with that defined Section 11."]
1010 #[doc = "- `unavailable` - 0: B'000 Not Equipped or unavailable"]
1011 #[doc = "- `prec10deg` - 1: B'010 10 degrees"]
1012 #[doc = "- `prec05deg` - 2: B'011 5 degrees"]
1013 #[doc = "- `prec01deg` - 3: B'100 1 degrees"]
1014 #[doc = "- `prec0-1deg` - 4: B'101 0.1 degrees"]
1015 #[doc = "- `prec0-05deg` - 5: B'110 0.05 degrees"]
1016 #[doc = "- `prec0-01deg` - 6: B'110 0.01 degrees"]
1017 #[doc = "- `prec0-0125deg` - 7: B'111 0.0125 degrees, aligned with heading LSB"]
1018 #[doc = "\n\n@category: Infrastructure information"]
1019 #[doc = "\n\n@revision: V1.3.1"]
1020 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
1021 #[rasn(enumerated)]
1022 pub enum HeadingConfidenceDSRC {
1023 unavailable = 0,
1024 prec10deg = 1,
1025 prec05deg = 2,
1026 prec01deg = 3,
1027 #[rasn(identifier = "prec0-1deg")]
1028 prec0_1deg = 4,
1029 #[rasn(identifier = "prec0-05deg")]
1030 prec0_05deg = 5,
1031 #[rasn(identifier = "prec0-01deg")]
1032 prec0_01deg = 6,
1033 #[rasn(identifier = "prec0-0125deg")]
1034 prec0_0125deg = 7,
1035 }
1036
1037 #[doc = "This DE provides the current heading of the sending device, expressed in unsigned units of"]
1038 #[doc = "0.0125 degrees from North such that 28799 such degrees represent 359.9875 degrees. North shall be defined as the axis"]
1039 #[doc = "prescribed by the WGS-84 coordinate system and its reference ellipsoid. Headings \"to the east\" are defined as the"]
1040 #[doc = "positive direction. A value of 28800 shall be used when unavailable. This element indicates the direction of motion of the"]
1041 #[doc = "device. When the sending device is stopped and the trajectory (path) over which it traveled to reach that location is well"]
1042 #[doc = "known, the past heading may be used."]
1043 #[doc = "Value provides a range of 0 to 359.9875 degrees"]
1044 #[doc = "\n\n@unit: Note that other heading data elements of various sizes and precisions are found in other parts of this standard"]
1045 #[doc = " and in ITS. This element should no longer be used for new work: the @ref Angle entry is preferred."]
1046 #[doc = "\n\n@unit: 0.0125 degrees"]
1047 #[doc = "\n\n@category: Infrastructure information"]
1048 #[doc = "\n\n@revision: V1.3.1"]
1049 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1050 #[rasn(delegate, value("0..=28800"))]
1051 pub struct HeadingDSRC(pub u16);
1052
1053 #[doc = "This DF is used to specify the index of either a single approach or a single lane at"]
1054 #[doc = "which a service is needed. This is used, for example, with the Signal Request Message (SRM) to indicate the inbound"]
1055 #[doc = "and outbound points by which the requestor (such as a public safety vehicle) can traverse an intersection."]
1056 #[doc = "- @field lane: the representation of the point as lane identifier."]
1057 #[doc = "- @field approach: the representation of the point as approach identifier."]
1058 #[doc = "- @field connection: the representation of the point as connection identifier."]
1059 #[doc = "\n\n@note: Note that the value of zero has a reserved meaning for these two indexing systems. In both cases, this value"]
1060 #[doc = " is used to indicate the concept of \"none\" in use. When the value is of zero is used here, it implies the center of the"]
1061 #[doc = " intersection itself. For example, requesting an outbound point of zero implies the requestor wishes to have the intersection"]
1062 #[doc = " itself be the destination. Alternatively, an inbound value of zero implies the requestor is within the intersection itself and"]
1063 #[doc = " wishes to depart for the outbound value provided. This special meaning for the value zero can be used in either the lane"]
1064 #[doc = " or approach with the same results."]
1065 #[doc = "\n\n@category: Infrastructure information"]
1066 #[doc = "\n\n@revision: V1.3.1"]
1067 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1068 #[rasn(choice, automatic_tags)]
1069 #[non_exhaustive]
1070 pub enum IntersectionAccessPoint {
1071 lane(LaneID),
1072 approach(ApproachID),
1073 connection(LaneConnectionID),
1074 }
1075 #[doc = " Anonymous SEQUENCE OF member "]
1076 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1077 #[rasn(automatic_tags, identifier = "SEQUENCE")]
1078 pub struct AnonymousIntersectionGeometryRegional {
1079 #[rasn(value("0..=255"), identifier = "regionId")]
1080 pub region_id: u8,
1081 #[rasn(identifier = "regExtValue")]
1082 pub reg_ext_value: Any,
1083 }
1084 impl AnonymousIntersectionGeometryRegional {
1085 pub fn new(region_id: u8, reg_ext_value: Any) -> Self {
1086 Self {
1087 region_id,
1088 reg_ext_value,
1089 }
1090 }
1091 }
1092 #[doc = " Inner type "]
1093 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1094 #[rasn(delegate, size("1..=4"))]
1095 pub struct IntersectionGeometryRegional(pub SequenceOf<AnonymousIntersectionGeometryRegional>);
1096
1097 #[doc = "A complete description of an intersection's roadway geometry and its allowed navigational paths (independent of"]
1098 #[doc = "any additional regulatory restrictions that may apply over time or from user classification)."]
1099 #[doc = "- @field name: For debug use only"]
1100 #[doc = "- @field id: A globally unique value set, consisting of a regionID and intersection ID assignment"]
1101 #[doc = "- @field revision: This profile extends the purpose of the `revision` data element as defined in SAE J2735 as follows."]
1102 #[doc = " The revision data element is used to communicate the valid release of the intersection geometry"]
1103 #[doc = " description. If there are no changes in the deployed intersection description, the same revision counter"]
1104 #[doc = " is transmitted. Due to a revised deployment of the intersection description (e.g. new lane added, ID's"]
1105 #[doc = " changed, etc.), the revision is increased by one. After revision equal to 127, the increment restarts by 0."]
1106 #[doc = " The intersection geometry and the signal phase and timing information is related each other. Therefore,"]
1107 #[doc = " the revision of the intersection geometry of the MapData message shall be the same as the revision of"]
1108 #[doc = " the intersection state of the SPAT (see data element `revision` of `DF_IntersectionState` in [ISO TS 19091] G.8.2.9)"]
1109 #[doc = "- @field refPoint: The reference from which subsequent data points are offset until a new point is used."]
1110 #[doc = "- @field laneWidth: Reference width used by all subsequent lanes unless a new width is given"]
1111 #[doc = "- @field speedLimits: Reference regulatory speed limits used by all subsequent lanes unless a new speed is given"]
1112 #[doc = "- @field laneSet: Data about one or more lanes (all lane data is found here) Data describing how to use and request preemption and"]
1113 #[doc = " priority services from this intersection (if supported)"]
1114 #[doc = "- @field preemptPriorityData: This DF is not used."]
1115 #[doc = "- @field regional: optional region specific data."]
1116 #[doc = "\n\n@category: Infrastructure information"]
1117 #[doc = "\n\n@revision: V1.3.1"]
1118 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1119 #[rasn(automatic_tags)]
1120 #[non_exhaustive]
1121 pub struct IntersectionGeometry {
1122 pub name: Option<DescriptiveName>,
1123 pub id: IntersectionReferenceID,
1124 pub revision: MsgCount,
1125 #[rasn(identifier = "refPoint")]
1126 pub ref_point: Position3D,
1127 #[rasn(identifier = "laneWidth")]
1128 pub lane_width: Option<LaneWidth>,
1129 #[rasn(identifier = "speedLimits")]
1130 pub speed_limits: Option<SpeedLimitList>,
1131 #[rasn(identifier = "laneSet")]
1132 pub lane_set: LaneList,
1133 #[rasn(identifier = "preemptPriorityData")]
1134 pub preempt_priority_data: Option<PreemptPriorityList>,
1135 pub regional: Option<IntersectionGeometryRegional>,
1136 }
1137 impl IntersectionGeometry {
1138 pub fn new(
1139 name: Option<DescriptiveName>,
1140 id: IntersectionReferenceID,
1141 revision: MsgCount,
1142 ref_point: Position3D,
1143 lane_width: Option<LaneWidth>,
1144 speed_limits: Option<SpeedLimitList>,
1145 lane_set: LaneList,
1146 preempt_priority_data: Option<PreemptPriorityList>,
1147 regional: Option<IntersectionGeometryRegional>,
1148 ) -> Self {
1149 Self {
1150 name,
1151 id,
1152 revision,
1153 ref_point,
1154 lane_width,
1155 speed_limits,
1156 lane_set,
1157 preempt_priority_data,
1158 regional,
1159 }
1160 }
1161 }
1162
1163 #[doc = "This DF consists of a list of IntersectionGeometry entries."]
1164 #[doc = "\n\n@category: Infrastructure information"]
1165 #[doc = "\n\n@revision: V1.3.1"]
1166 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1167 #[rasn(delegate, size("1..=32"))]
1168 pub struct IntersectionGeometryList(pub SequenceOf<IntersectionGeometry>);
1169
1170 #[doc = "This DE is used within a region to uniquely define an intersection within that country or region in a 16-bit"]
1171 #[doc = "field. Assignment rules are established by the regional authority associated with the RoadRegulatorID under which this"]
1172 #[doc = "IntersectionID is assigned. Within the region the policies used to ensure an assigned value’s uniqueness before that value"]
1173 #[doc = "is reused (if ever) is the responsibility of that region. Any such reuse would be expected to occur over a long epoch (many years)."]
1174 #[doc = "The values zero through 255 are allocated for testing purposes"]
1175 #[doc = "\n\n@note: Note that the value assigned to an intersection will be unique within a given regional ID only"]
1176 #[doc = "\n\n@category: Infrastructure information"]
1177 #[doc = "\n\n@revision: V1.3.1"]
1178 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1179 #[rasn(delegate, value("0..=65535"))]
1180 pub struct IntersectionID(pub u16);
1181
1182 #[doc = "This DF conveys the combination of an optional RoadRegulatorID and of an"]
1183 #[doc = "IntersectionID that is unique within that region. When the RoadRegulatorID is present the IntersectionReferenceID is"]
1184 #[doc = "guaranteed to be globally unique."]
1185 #[doc = "- @field region: a globally unique regional assignment value typical assigned to a regional DOT authority"]
1186 #[doc = " the value zero shall be used for testing needs"]
1187 #[doc = "- @field id: a unique mapping to the intersection in question within the above region of use"]
1188 #[doc = "\n\n@note: A fully qualified intersection consists of its regionally unique ID (the IntersectionID) and its region ID (the"]
1189 #[doc = " RoadRegulatorID). Taken together these form a unique value which is never repeated."]
1190 #[doc = "\n\n@category: Infrastructure information"]
1191 #[doc = "\n\n@revision: V1.3.1"]
1192 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1193 #[rasn(automatic_tags)]
1194 pub struct IntersectionReferenceID {
1195 pub region: Option<RoadRegulatorID>,
1196 pub id: IntersectionID,
1197 }
1198 impl IntersectionReferenceID {
1199 pub fn new(region: Option<RoadRegulatorID>, id: IntersectionID) -> Self {
1200 Self { region, id }
1201 }
1202 }
1203 #[doc = " Anonymous SEQUENCE OF member "]
1204 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1205 #[rasn(automatic_tags, identifier = "SEQUENCE")]
1206 pub struct AnonymousIntersectionStateRegional {
1207 #[rasn(value("0..=255"), identifier = "regionId")]
1208 pub region_id: u8,
1209 #[rasn(identifier = "regExtValue")]
1210 pub reg_ext_value: Any,
1211 }
1212 impl AnonymousIntersectionStateRegional {
1213 pub fn new(region_id: u8, reg_ext_value: Any) -> Self {
1214 Self {
1215 region_id,
1216 reg_ext_value,
1217 }
1218 }
1219 }
1220 #[doc = " Inner type "]
1221 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1222 #[rasn(delegate, size("1..=4"))]
1223 pub struct IntersectionStateRegional(pub SequenceOf<AnonymousIntersectionStateRegional>);
1224
1225 #[doc = "This DF is used to convey all the SPAT information for a single intersection. Both current"]
1226 #[doc = "and future data can be sent."]
1227 #[doc = "- @field name: human readable name for intersection to be used only in debug mode"]
1228 #[doc = "- @field id: A globally unique value set, consisting of a regionID and intersection ID assignment"]
1229 #[doc = " provides a unique mapping to the intersection MAP in question which provides complete location"]
1230 #[doc = " and approach/move/lane data"]
1231 #[doc = "- @field revision: The data element `revision` is used to communicate the actual valid release of the intersection"]
1232 #[doc = " description. If there are no changes in the deployed intersection description, almost the same revision"]
1233 #[doc = " counter is transmitted. Due to a revised deployment of the intersection description (e.g. introduction of"]
1234 #[doc = " additional signal state element), the revision is increased by one. After revision equal to 127, the"]
1235 #[doc = " increment leads to 0 (due to the element range)."]
1236 #[doc = " The intersection state and the intersection geometry is related to each other. Therefore, the revision of"]
1237 #[doc = " the intersection state shall be the same as the revision of the intersection geometry (see the data"]
1238 #[doc = " element `revision` of `DF_IntersectionGeometry` in [ISO TS 19091] G.8.2.6)."]
1239 #[doc = "- @field status: general status of the controller(s)"]
1240 #[doc = "- @field moy: Minute of current UTC year, used only with messages to be archived."]
1241 #[doc = "- @field timeStamp: the mSec point in the current UTC minute that this message was constructed."]
1242 #[doc = "- @field enabledLanes: a list of lanes where the RevocableLane bit has been set which are now active and"]
1243 #[doc = " therefore part of the current intersection"]
1244 #[doc = "- @field states: Each Movement is given in turn and contains its signal phase state,"]
1245 #[doc = " mapping to the lanes it applies to, and point in time it will end, and it"]
1246 #[doc = " may contain both active and future states"]
1247 #[doc = "- @field maneuverAssistList: Assist data"]
1248 #[doc = "- @field regional: optional region specific data."]
1249 #[doc = "\n\n@category: Infrastructure information"]
1250 #[doc = "\n\n@revision: V1.3.1"]
1251 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1252 #[rasn(automatic_tags)]
1253 #[non_exhaustive]
1254 pub struct IntersectionState {
1255 pub name: Option<DescriptiveName>,
1256 pub id: IntersectionReferenceID,
1257 pub revision: MsgCount,
1258 pub status: IntersectionStatusObject,
1259 pub moy: Option<MinuteOfTheYear>,
1260 #[rasn(identifier = "timeStamp")]
1261 pub time_stamp: Option<DSecond>,
1262 #[rasn(identifier = "enabledLanes")]
1263 pub enabled_lanes: Option<EnabledLaneList>,
1264 pub states: MovementList,
1265 #[rasn(identifier = "maneuverAssistList")]
1266 pub maneuver_assist_list: Option<ManeuverAssistList>,
1267 pub regional: Option<IntersectionStateRegional>,
1268 }
1269 impl IntersectionState {
1270 pub fn new(
1271 name: Option<DescriptiveName>,
1272 id: IntersectionReferenceID,
1273 revision: MsgCount,
1274 status: IntersectionStatusObject,
1275 moy: Option<MinuteOfTheYear>,
1276 time_stamp: Option<DSecond>,
1277 enabled_lanes: Option<EnabledLaneList>,
1278 states: MovementList,
1279 maneuver_assist_list: Option<ManeuverAssistList>,
1280 regional: Option<IntersectionStateRegional>,
1281 ) -> Self {
1282 Self {
1283 name,
1284 id,
1285 revision,
1286 status,
1287 moy,
1288 time_stamp,
1289 enabled_lanes,
1290 states,
1291 maneuver_assist_list,
1292 regional,
1293 }
1294 }
1295 }
1296
1297 #[doc = "This DF consists of a list of IntersectionState entries."]
1298 #[doc = "\n\n@category: Infrastructure information"]
1299 #[doc = "\n\n@revision: V1.3.1"]
1300 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1301 #[rasn(delegate, size("1..=32"))]
1302 pub struct IntersectionStateList(pub SequenceOf<IntersectionState>);
1303
1304 #[doc = "The Intersection Status Object contains Advanced Traffic Controller (ATC) status information that may be sent to"]
1305 #[doc = "local OBUs as part of the SPAT process."]
1306 #[doc = "With bits as defined:"]
1307 #[doc = "- `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)."]
1308 #[doc = "- `stopTimeIsActivated` - 1: And all counting/timing has stopped."]
1309 #[doc = "- `failureFlash` - 2: Above to be used for any detected hardware failures, e.g. conflict monitor as well as for police flash"]
1310 #[doc = "- `fixedTimeOperation` - 5: Schedule of signals is based on time only (i.e. the state can be calculated)"]
1311 #[doc = "- `trafficDependentOperation` - 6: Operation is based on different levels of traffic parameters (requests, duration of gaps or more complex parameters)"]
1312 #[doc = "- `standbyOperation` - 7: Controller: partially switched off or partially amber flashing"]
1313 #[doc = "- `failureMode` - 8: Controller has a problem or failure in operation"]
1314 #[doc = "- `off` - 9: Controller is switched off"]
1315 #[doc = "- `recentMAPmessageUpdate` - 10: Map revision with content changes"]
1316 #[doc = "- `recentChangeInMAPassignedLanesIDsUsed` - 11: Change in MAP's assigned lanes used (lane changes) Changes in the active lane list description"]
1317 #[doc = "- `noValidMAPisAvailableAtThisTime` - 12: MAP (and various lanes indexes) not available"]
1318 #[doc = "- `noValidSPATisAvailableAtThisTime` - 13: SPAT system is not working at this time"]
1319 #[doc = "- Bits 14,15 reserved at this time and shall be zero"]
1320 #[doc = "\n\n@note: All zeros indicate normal operating mode with no recent changes. The duration of the term 'recent' is defined by the system performance requirement in use."]
1321 #[doc = "\n\n@category: Infrastructure information"]
1322 #[doc = "\n\n@revision: V1.3.1"]
1323 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1324 #[rasn(delegate)]
1325 pub struct IntersectionStatusObject(pub FixedBitString<16usize>);
1326 #[doc = " Inner type "]
1327 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1328 #[rasn(automatic_tags)]
1329 pub struct LaneAttributesRegional {
1330 #[rasn(value("0..=255"), identifier = "regionId")]
1331 pub region_id: u8,
1332 #[rasn(identifier = "regExtValue")]
1333 pub reg_ext_value: Any,
1334 }
1335 impl LaneAttributesRegional {
1336 pub fn new(region_id: u8, reg_ext_value: Any) -> Self {
1337 Self {
1338 region_id,
1339 reg_ext_value,
1340 }
1341 }
1342 }
1343
1344 #[doc = "This DF holds all of the constant attribute information of any lane object (as well as"]
1345 #[doc = "denoting the basic lane type itself) within a single structure. Constant attribute information are those values which do not"]
1346 #[doc = "change over the path of the lane, such as the direction of allowed travel. Other lane attribute information can change at or"]
1347 #[doc = "between each node."]
1348 #[doc = "The structure consists of three element parts as follows: LaneDirection specifies the allowed directions of travel, if any."]
1349 #[doc = "LaneSharing indicates whether this lane type is shared with other types of travel modes or users. The lane type is defined"]
1350 #[doc = "in LaneTypeAttributes, along with additional attributes specific to that type."]
1351 #[doc = "The fundamental type of lane object is described by the element selected in the LaneTypeAttributes data concept."]
1352 #[doc = "Additional information specific or unique to a given lane type can be found there as well. A regional extension is provided"]
1353 #[doc = "as well."]
1354 #[doc = "Note that combinations of regulatory maneuver information such as \"both a left turn and straight ahead movement are"]
1355 #[doc = "allowed, but never a u-turn,\" are expressed by the AllowedManeuvers data concept which typically follows after this"]
1356 #[doc = "element and in the same structure. Note that not all lane objects require this information (for example a median). The"]
1357 #[doc = "various values are set via bit flags to indicate the assertion of a value. Each defined lane type contains the bit flags"]
1358 #[doc = "suitable for its application area."]
1359 #[doc = "Note that the concept of LaneSharing is used to indicate that there are other users of this lane with equal regulatory rights"]
1360 #[doc = "to occupy the lane (which is a term this standard does not formally define since it varies by world region). A typical case is"]
1361 #[doc = "a light rail vehicle running along the same lane path as motorized traffic. In such a case, motor traffic may be allowed"]
1362 #[doc = "equal access to the lane when a train is not present. Another case would be those intersection lanes (at the time of writing"]
1363 #[doc = "rather unusual) where bicycle traffic is given full and equal right of way to an entire width of motorized vehicle lane. This"]
1364 #[doc = "example would not be a bike lane or bike box in the traditional sense."]
1365 #[doc = "- @field directionalUse: directions of lane use"]
1366 #[doc = "- @field sharedWith: co-users of the lane path"]
1367 #[doc = "- @field laneType: specific lane type data"]
1368 #[doc = "- @field regional: optional region specific data."]
1369 #[doc = "\n\n@category: Infrastructure information"]
1370 #[doc = "\n\n@revision: V1.3.1"]
1371 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1372 #[rasn(automatic_tags)]
1373 pub struct LaneAttributes {
1374 #[rasn(identifier = "directionalUse")]
1375 pub directional_use: LaneDirection,
1376 #[rasn(identifier = "sharedWith")]
1377 pub shared_with: LaneSharing,
1378 #[rasn(identifier = "laneType")]
1379 pub lane_type: LaneTypeAttributes,
1380 pub regional: Option<LaneAttributesRegional>,
1381 }
1382 impl LaneAttributes {
1383 pub fn new(
1384 directional_use: LaneDirection,
1385 shared_with: LaneSharing,
1386 lane_type: LaneTypeAttributes,
1387 regional: Option<LaneAttributesRegional>,
1388 ) -> Self {
1389 Self {
1390 directional_use,
1391 shared_with,
1392 lane_type,
1393 regional,
1394 }
1395 }
1396 }
1397
1398 #[doc = "This DE relates specific properties found in a Barrier or Median lane type (a type of lane object used to separate traffic lanes)."]
1399 #[doc = "It should be noted that various common lane attribute properties (such as travel directions and allowed movements or maneuvers) can be found in other entries."]
1400 #[doc = "With bits as defined:"]
1401 #[doc = "- `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"]
1402 #[doc = "- Bits 10-15 reserved and set to zero"]
1403 #[doc = "\n\n@category: Infrastructure information"]
1404 #[doc = "\n\n@revision: V1.3.1"]
1405 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1406 #[rasn(delegate, identifier = "LaneAttributes-Barrier")]
1407 pub struct LaneAttributesBarrier(pub FixedBitString<16usize>);
1408
1409 #[doc = "This DE relates specific properties found in a bicycle lane type. It should be noted that various common lane attribute properties"]
1410 #[doc = "(such as travel directions and allowed movements or maneuvers) can be found in other entries."]
1411 #[doc = "With bits as defined:"]
1412 #[doc = "- `bikeRevocableLane` - 0: this lane may be activated or not based on the current SPAT message contents if not asserted, the lane is ALWAYS present"]
1413 #[doc = "- `pedestrianUseAllowed` - 1: The path allows pedestrian traffic, if not set, this mode is prohibited"]
1414 #[doc = "- `isBikeFlyOverLane` - 2: path of lane is not at grade"]
1415 #[doc = "- `fixedCycleTime` - 3: the phases use preset times, i.e. there is not a 'push to cross' button"]
1416 #[doc = "- `biDirectionalCycleTimes` - 4: ped walk phases use different SignalGroupID for each direction. The first SignalGroupID in the first Connection"]
1417 #[doc = " represents 'inbound' flow (the direction of travel towards the first node point) while second SignalGroupID in the"]
1418 #[doc = " next Connection entry represents the 'outbound' flow. And use of RestrictionClassID entries in the Connect follow this same pattern in pairs."]
1419 #[doc = "-`isolatedByBarrier` - 5: The lane path is isolated by a fixed barrier"]
1420 #[doc = "-`unsignalizedSegmentsPresent` - 6: The lane path consists of one of more segments which are not part of a signal group ID"]
1421 #[doc = "- Bits 7-15 reserved and set to zero"]
1422 #[doc = "\n\n@category: Infrastructure information"]
1423 #[doc = "\n\n@revision: V1.3.1"]
1424 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1425 #[rasn(delegate, identifier = "LaneAttributes-Bike")]
1426 pub struct LaneAttributesBike(pub FixedBitString<16usize>);
1427
1428 #[doc = "This DE relates specific properties found in a crosswalk lane type. It should be noted that various common lane attribute properties"]
1429 #[doc = "(such as travel directions and allowed movements or maneuvers) can be found in other entries."]
1430 #[doc = "With bits as defined:"]
1431 #[doc = "- `crosswalkRevocableLane` - 0: this lane may be activated or not based on the current SPAT message contents if not asserted, the lane is ALWAYS present"]
1432 #[doc = "- `bicyleUseAllowed` - 1: The path allows bicycle traffic, if not set, this mode is prohibited"]
1433 #[doc = "- `isXwalkFlyOverLane` - 2: path of lane is not at grade"]
1434 #[doc = "- `fixedCycleTime` - 3: ped walk phases use preset times. i.e. there is not a 'push to cross' button"]
1435 #[doc = "- `biDirectionalCycleTimes` - 4: ped walk phases use different SignalGroupID for each direction. The first SignalGroupID"]
1436 #[doc = " in the first Connection represents 'inbound' flow (the direction of travel towards the first"]
1437 #[doc = " node point) while second SignalGroupID in the next Connection entry represents the 'outbound'"]
1438 #[doc = " flow. And use of RestrictionClassID entries in the Connect follow this same pattern in pairs."]
1439 #[doc = "- `hasPushToWalkButton` - 5: Has a demand input"]
1440 #[doc = "- `audioSupport` - 6: audio crossing cues present"]
1441 #[doc = "- `rfSignalRequestPresent` - 7: Supports RF push to walk technologies"]
1442 #[doc = "- `unsignalizedSegmentsPresent` - 8: The lane path consists of one of more segments which are not part of a signal group ID"]
1443 #[doc = "- Bits 9-15 reserved and set to zero"]
1444 #[doc = "\n\n@category: Infrastructure information"]
1445 #[doc = "\n\n@revision: V1.3.1"]
1446 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1447 #[rasn(delegate, identifier = "LaneAttributes-Crosswalk")]
1448 pub struct LaneAttributesCrosswalk(pub FixedBitString<16usize>);
1449
1450 #[doc = "This DE relates specific properties found in a vehicle parking lane type. It should be noted that various common lane attribute"]
1451 #[doc = "properties can be found in other entries."]
1452 #[doc = "With bits as defined:"]
1453 #[doc = "- `parkingRevocableLane` - 0: this lane may be activated or not based on the current SPAT message contents if not asserted, the lane is ALWAYS present"]
1454 #[doc = "- `doNotParkZone` - 3: used to denote fire hydrants as well as short disruptions in a parking zone"]
1455 #[doc = "- `noPublicParkingUse` - 6: private parking, as in front of private property"]
1456 #[doc = "- Bits 7-15 reserved and set to zero*"]
1457 #[doc = "\n\n@category: Infrastructure information"]
1458 #[doc = "\n\n@revision: V1.3.1"]
1459 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1460 #[rasn(delegate, identifier = "LaneAttributes-Parking")]
1461 pub struct LaneAttributesParking(pub FixedBitString<16usize>);
1462
1463 #[doc = "This DE relates specific properties found in a sidewalk lane type. It should be noted that various common lane attribute properties"]
1464 #[doc = "(such as travel directions and allowed movements or maneuvers) can be found in other entries."]
1465 #[doc = "With bits as defined:"]
1466 #[doc = "- `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."]
1467 #[doc = "- `bicyleUseAllowed` - 1: The path allows bicycle traffic, if not set, this mode is prohibited"]
1468 #[doc = "- `isSidewalkFlyOverLane` - 2: path of lane is not at grade"]
1469 #[doc = "- `walkBikes` - 3: bike traffic must dismount and walk"]
1470 #[doc = "- Bits 4-15 reserved and set to zero"]
1471 #[doc = "\n\n@category: Infrastructure information"]
1472 #[doc = "\n\n@revision: V1.3.1"]
1473 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1474 #[rasn(delegate, identifier = "LaneAttributes-Sidewalk")]
1475 pub struct LaneAttributesSidewalk(pub FixedBitString<16usize>);
1476
1477 #[doc = "This DE relates specific properties found in various types of ground striping lane"]
1478 #[doc = "types. This includes various types of painted lane ground striping and iconic information needs to convey information in a"]
1479 #[doc = "complex intersection. Typically, this consists of visual guidance for drivers to assist them to connect across the"]
1480 #[doc = "intersection to the correct lane. Such markings are typically used with restraint and only under conditions when the"]
1481 #[doc = "geometry of the intersection makes them more beneficial than distracting. It should be noted that various common lane"]
1482 #[doc = "attribute properties (such as travel directions and allowed movements or maneuvers) can be found in other entries."]
1483 #[doc = "With bits as defined:"]
1484 #[doc = "- `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"]
1485 #[doc = "- `stripeToConnectingLanesAhead` - 5: the stripe type should be presented to the user visually to reflect stripes in the intersection for the type of movement indicated."]
1486 #[doc = "- Bits 6-15 reserved and set to zero"]
1487 #[doc = "\n\n@category: Infrastructure information"]
1488 #[doc = "\n\n@revision: V1.3.1"]
1489 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1490 #[rasn(delegate, identifier = "LaneAttributes-Striping")]
1491 pub struct LaneAttributesStriping(pub FixedBitString<16usize>);
1492
1493 #[doc = "This DE relates specific properties found in a tracked vehicle lane types (trolley"]
1494 #[doc = "and train lanes). The term “rail vehicle” can be considered synonymous. In this case, the term does not relate to vehicle"]
1495 #[doc = "types with tracks or treads. It should be noted that various common lane attribute properties (such as travel directions and"]
1496 #[doc = "allowed movements or maneuvers) can be found in other entries. It should also be noted that often this type of lane object"]
1497 #[doc = "does not clearly relate to an approach in the traditional traffic engineering sense, although the message set allows"]
1498 #[doc = "assigning a value when desired."]
1499 #[doc = "With bits as defined:"]
1500 #[doc = "- `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."]
1501 #[doc = "- Bits 5-15 reserved and set to zero"]
1502 #[doc = "\n\n@category: Infrastructure information"]
1503 #[doc = "\n\n@revision: V1.3.1"]
1504 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1505 #[rasn(delegate, identifier = "LaneAttributes-TrackedVehicle")]
1506 pub struct LaneAttributesTrackedVehicle(pub FixedBitString<16usize>);
1507
1508 #[doc = "This DE relates specific properties found in a vehicle lane type. This data element provides a means to denote that the use of a lane"]
1509 #[doc = "is restricted to certain vehicle types. Various common lane attribute properties (such as travel directions and allowed movements or maneuvers)"]
1510 #[doc = "can be found in other entries."]
1511 #[doc = "With bits as defined:"]
1512 #[doc = "- `isVehicleRevocableLane` - 0: this lane may be activated or not based on the current SPAT message contents if not asserted, the lane is ALWAYS present"]
1513 #[doc = "- `isVehicleFlyOverLane` - 1: path of lane is not at grade"]
1514 #[doc = "- `permissionOnRequest` - 7: e.g. to inform about a lane for e-cars"]
1515 #[doc = "\n\n@category: Infrastructure information"]
1516 #[doc = "\n\n@revision: V1.3.1"]
1517 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1518 #[rasn(delegate, identifier = "LaneAttributes-Vehicle", size("8", extensible))]
1519 pub struct LaneAttributesVehicle(pub BitString);
1520
1521 #[doc = "This DE is used to state a connection index for a lane to lane connection. It is used to"]
1522 #[doc = "relate this connection between the lane (defined in the MAP) and any dynamic clearance data sent in the SPAT. It should"]
1523 #[doc = "be noted that the index may be shared with other lanes (for example, two left turn lanes may share the same dynamic"]
1524 #[doc = "clearance data). It should also be noted that a given lane to lane connection may be part of more than one GroupID due"]
1525 #[doc = "to signal phase considerations, but will only have one ConnectionID. The ConnectionID concept is not used (is not"]
1526 #[doc = "present) when dynamic clearance data is not provided in the SPAT."]
1527 #[doc = "\n\n@note: It should be noted that the LaneConnectionID is used as a means to index to a connection description"]
1528 #[doc = " between two lanes. It is not the same as the laneID, which is the unique index to each lane itself."]
1529 #[doc = "\n\n@category: Infrastructure information"]
1530 #[doc = "\n\n@revision: V1.3.1"]
1531 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1532 #[rasn(delegate, value("0..=255"))]
1533 pub struct LaneConnectionID(pub u8);
1534 #[doc = " Anonymous SEQUENCE OF member "]
1535 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1536 #[rasn(automatic_tags, identifier = "SEQUENCE")]
1537 pub struct AnonymousLaneDataAttributeRegional {
1538 #[rasn(value("0..=255"), identifier = "regionId")]
1539 pub region_id: u8,
1540 #[rasn(identifier = "regExtValue")]
1541 pub reg_ext_value: Any,
1542 }
1543 impl AnonymousLaneDataAttributeRegional {
1544 pub fn new(region_id: u8, reg_ext_value: Any) -> Self {
1545 Self {
1546 region_id,
1547 reg_ext_value,
1548 }
1549 }
1550 }
1551 #[doc = " Inner type "]
1552 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1553 #[rasn(delegate, size("1..=4"))]
1554 pub struct LaneDataAttributeRegional(pub SequenceOf<AnonymousLaneDataAttributeRegional>);
1555
1556 #[doc = "This DF is used to relate an attribute and a control value at a node point or along a"]
1557 #[doc = "lane segment from an enumerated list of defined choices. It is then followed by a defined data value associated with it and"]
1558 #[doc = "which is defined elsewhere in this standard."]
1559 #[doc = "- @field pathEndPointAngle: adjusts final point/width slant of the lane to align with the stop line"]
1560 #[doc = "- @field laneCrownPointCenter: sets the canter of the road bed from centerline point"]
1561 #[doc = "- @field laneCrownPointLeft: sets the canter of the road bed from left edge"]
1562 #[doc = "- @field laneCrownPointRight: sets the canter of the road bed from right edge"]
1563 #[doc = "- @field laneAngle: the angle or direction of another lane this is required when a merge point angle is required"]
1564 #[doc = "- @field speedLimits: Reference regulatory speed limits used by all segments"]
1565 #[doc = "- @field regional: optional region specific data."]
1566 #[doc = "\n\n@note: This data concept handles a variety of use case needs with a common and consistent message pattern. The"]
1567 #[doc = " typical use of this data concept (and several similar others) is to inject the selected Attribute into the spatial description of"]
1568 #[doc = " a lane's center line path (the segment list). In this way, attribute information which is true for a portion of the overall lane"]
1569 #[doc = " can be described when needed. This attribute information applies from the node point in the stream of segment data until"]
1570 #[doc = " changed again. Denoting the porous aspects of a lane along its path as it merges with another lane would be an example"]
1571 #[doc = " of this use case. In this case the start and end node points would be followed by suitable segment attributes. Re-using a"]
1572 #[doc = " lane path (previously called a computed lane) is another example. In this case the reference lane to be re-used appears"]
1573 #[doc = " as a segment attribute followed by the lane value. It is then followed by one or more segment attributes which relate the"]
1574 #[doc = " positional translation factors to be used (offset, rotate, scale) and any further segment attribute changes."]
1575 #[doc = "\n\n@category: Infrastructure information"]
1576 #[doc = "\n\n@revision: V1.3.1"]
1577 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1578 #[rasn(choice, automatic_tags)]
1579 #[non_exhaustive]
1580 pub enum LaneDataAttribute {
1581 pathEndPointAngle(DeltaAngle),
1582 laneCrownPointCenter(RoadwayCrownAngle),
1583 laneCrownPointLeft(RoadwayCrownAngle),
1584 laneCrownPointRight(RoadwayCrownAngle),
1585 laneAngle(MergeDivergeNodeAngle),
1586 speedLimits(SpeedLimitList),
1587 regional(LaneDataAttributeRegional),
1588 }
1589
1590 #[doc = "This DF consists of a list of LaneDataAttribute entries."]
1591 #[doc = "\n\n@category: Infrastructure information"]
1592 #[doc = "\n\n@revision: V1.3.1"]
1593 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1594 #[rasn(delegate, size("1..=8"))]
1595 pub struct LaneDataAttributeList(pub SequenceOf<LaneDataAttribute>);
1596
1597 #[doc = "This DE is used to denote the allowed direction of travel over a lane object. By convention, the lane object is always described"]
1598 #[doc = "from the stop line outwards away from the intersection. Therefore, the ingress direction is from the end of the path to the stop"]
1599 #[doc = "line and the egress direction is from the stop line outwards."]
1600 #[doc = "It should be noted that some lane objects are not used for travel and that some lane objects allow bi-directional travel."]
1601 #[doc = "With bits as defined:"]
1602 #[doc = "- Allowed directions of travel in the lane object"]
1603 #[doc = "- All lanes are described from the stop line outwards"]
1604 #[doc = "- @field ingressPath: travel from rear of path to front is allowed"]
1605 #[doc = "- @field egressPath: travel from front of path to rear is allowed"]
1606 #[doc = "\n\n@note: No Travel, i.e. the lane object type does not support travel (medians, curbs, etc.) is indicated by not"]
1607 #[doc = " asserting any bit value Bi-Directional Travel (such as a ped crosswalk) is indicated by asserting both of the bits."]
1608 #[doc = "\n\n@category: Infrastructure information"]
1609 #[doc = "\n\n@revision: V1.3.1"]
1610 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1611 #[rasn(delegate)]
1612 pub struct LaneDirection(pub FixedBitString<2usize>);
1613
1614 #[doc = "This DE conveys an assigned index that is unique within an intersection. It is used to refer to"]
1615 #[doc = "that lane by other objects in the intersection map data structure. Lanes may be ingress (inbound traffic) or egress"]
1616 #[doc = "(outbound traffic) in nature, as well as barriers and other types of specialty lanes. Each lane (each lane object) is"]
1617 #[doc = "assigned a unique ID. The Lane ID, in conjunction with the intersection ID, forms a regionally unique way to address a"]
1618 #[doc = "specific lane in that region."]
1619 #[doc = "- the value 0 shall be used when the lane ID is not available or not known"]
1620 #[doc = "- the value 255 is reserved for future use"]
1621 #[doc = "\n\n@category: Infrastructure information"]
1622 #[doc = "\n\n@revision: V1.3.1"]
1623 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1624 #[rasn(delegate, value("0..=255"))]
1625 pub struct LaneID(pub u8);
1626
1627 #[doc = "This DF consists of a list of GenericLane entries."]
1628 #[doc = "\n\n@category: Infrastructure information"]
1629 #[doc = "\n\n@revision: V1.3.1"]
1630 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1631 #[rasn(delegate, size("1..=255"))]
1632 pub struct LaneList(pub SequenceOf<GenericLane>);
1633
1634 #[doc = "This DE is used to denote the presence of other user types (travel modes) who have an"]
1635 #[doc = "equal right to access and use the lane. There may also be another lane object describing their use of a lane. This data"]
1636 #[doc = "concept is used to indicate lanes and/or users that travel along the same path, and not those that simply cross over the"]
1637 #[doc = "lane's segments path (such as a pedestrian crosswalk crossing a lane for motor vehicle use). The typical use is to alert"]
1638 #[doc = "the user of the MAP data that additional traffic of another mode may be present in the same spatial lane."]
1639 #[doc = "Bits used:"]
1640 #[doc = "- 0 - overlappingLaneDescriptionProvided: Assert when another lane object is present to describe the"]
1641 #[doc = " path of the overlapping shared lane this construct is not used for lane objects which simply cross"]
1642 #[doc = "- 1 - multipleLanesTreatedAsOneLane: Assert if the lane object path and width details represents multiple lanes within it"]
1643 #[doc = " that are not further described Various modes and type of traffic that may share this lane:"]
1644 #[doc = "- 2 - otherNonMotorizedTrafficTypes: horse drawn etc."]
1645 #[doc = "- 3 - individualMotorizedVehicleTraffic:"]
1646 #[doc = "- 4 - busVehicleTraffic:"]
1647 #[doc = "- 5 - taxiVehicleTraffic:"]
1648 #[doc = "- 6 - pedestriansTraffic:"]
1649 #[doc = "- 7 - cyclistVehicleTraffic:"]
1650 #[doc = "- 8 - trackedVehicleTraffic:"]
1651 #[doc = "- 9 - pedestrianTraffic:"]
1652 #[doc = "\n\n@note: All zeros would indicate `not shared` and `not overlapping`"]
1653 #[doc = "\n\n@category: Infrastructure information"]
1654 #[doc = "\n\n@revision: V1.3.1"]
1655 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1656 #[rasn(delegate)]
1657 pub struct LaneSharing(pub FixedBitString<10usize>);
1658
1659 #[doc = "This DF is used to hold attribute information specific to a given lane type. It is typically"]
1660 #[doc = "used in the DE_LaneAttributes data frame as part of an overall description of a lane object. Information unique to the"]
1661 #[doc = "specific type of lane is found here. Information common to lanes is expressed in other entries. The various values are set"]
1662 #[doc = "by bit flags to indicate the assertion of a value. Each defined lane type contains bit flags suitable for its application area."]
1663 #[doc = "- @field vehicle: motor vehicle lanes"]
1664 #[doc = "- @field crosswalk: pedestrian crosswalks"]
1665 #[doc = "- @field bikeLane: bike lanes"]
1666 #[doc = "- @field sidewalk: pedestrian sidewalk paths"]
1667 #[doc = "- @field median: medians & channelization"]
1668 #[doc = "- @field striping: roadway markings"]
1669 #[doc = "- @field trackedVehicle: trains and trolleys"]
1670 #[doc = "- @field parking: parking and stopping lanes"]
1671 #[doc = "\n\n@category: Infrastructure information"]
1672 #[doc = "\n\n@revision: V1.3.1"]
1673 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1674 #[rasn(choice, automatic_tags)]
1675 #[non_exhaustive]
1676 pub enum LaneTypeAttributes {
1677 vehicle(LaneAttributesVehicle),
1678 crosswalk(LaneAttributesCrosswalk),
1679 bikeLane(LaneAttributesBike),
1680 sidewalk(LaneAttributesSidewalk),
1681 median(LaneAttributesBarrier),
1682 striping(LaneAttributesStriping),
1683 trackedVehicle(LaneAttributesTrackedVehicle),
1684 parking(LaneAttributesParking),
1685 }
1686
1687 #[doc = "This DE conveys the width of a lane in LSB units of 1 cm. Maximum value for a lane is 327.67 meters in width"]
1688 #[doc = "\n\n@units: cm"]
1689 #[doc = "\n\n@category: Infrastructure information"]
1690 #[doc = "\n\n@revision: V1.3.1"]
1691 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1692 #[rasn(delegate, value("0..=32767"))]
1693 pub struct LaneWidth(pub u16);
1694
1695 #[doc = "Large @ref MapData descriptions are not possible to be broadcast with a single message and have to be"]
1696 #[doc = "fragmented using two or more messages over the air. Therefore, the LayerID allows defining an"]
1697 #[doc = "index for fragmentation of large @ref MapData descriptions. The fragmentation of the messages shall be"]
1698 #[doc = "executed on application layer. The fragmentation occurs on an approach base. This means that almost a"]
1699 #[doc = "complete approach (e.g. lanes, connectsTo, etc.) has to be included within a fragment."]
1700 #[doc = "The decimal value of the `layerID` is used to define the amount of maximum @ref MapData fragments. The"]
1701 #[doc = "lower value defines the actual fragment."]
1702 #[doc = "Example:"]
1703 #[doc = "If a MapData consists of three fragments (e.g. three approaches), the fragments are identified as follows:"]
1704 #[doc = "- `31` - first fragment of three (e.g. approach south);"]
1705 #[doc = "- `33` - third fragment of three (e.g. approach north)."]
1706 #[doc = "- `32` - second fragment of three (e.g. approach west);"]
1707 #[doc = "If there are only two fragments, the fragment identification will be 21, 22."]
1708 #[doc = "\n\n@category: Infrastructure information"]
1709 #[doc = "\n\n@revision: V1.3.1"]
1710 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1711 #[rasn(delegate, value("0..=100"))]
1712 pub struct LayerID(pub u8);
1713
1714 #[doc = "This DE is used to uniquely identify the type of information to be found in a layer of a geographic map fragment such as an intersection."]
1715 #[doc = "- @field `mixedContent`: two or more of the below types"]
1716 #[doc = "\n\n@category: Infrastructure information"]
1717 #[doc = "\n\n@revision: V1.3.1"]
1718 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
1719 #[rasn(enumerated)]
1720 #[non_exhaustive]
1721 pub enum LayerType {
1722 none = 0,
1723 mixedContent = 1,
1724 generalMapData = 2,
1725 intersectionData = 3,
1726 curveData = 4,
1727 roadwaySectionData = 5,
1728 parkingAreaData = 6,
1729 sharedLaneData = 7,
1730 }
1731
1732 #[doc = "This DE is used to provide the R09 line information."]
1733 #[doc = "\n\n@category: Infrastructure information"]
1734 #[doc = "\n\n@revision: V2.2.1"]
1735 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1736 #[rasn(delegate, value("0..=4294967295"))]
1737 pub struct LineNumber(pub u32);
1738
1739 #[doc = "This DF consists of a list of @ref ConnectionManeuverAssist entries."]
1740 #[doc = "\n\n@category: Infrastructure information"]
1741 #[doc = "\n\n@revision: V1.3.1"]
1742 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1743 #[rasn(delegate, size("1..=16"))]
1744 pub struct ManeuverAssistList(pub SequenceOf<ConnectionManeuverAssist>);
1745 #[doc = " Anonymous SEQUENCE OF member "]
1746 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1747 #[rasn(automatic_tags, identifier = "SEQUENCE")]
1748 pub struct AnonymousMapDataRegional {
1749 #[rasn(value("0..=255"), identifier = "regionId")]
1750 pub region_id: u8,
1751 #[rasn(identifier = "regExtValue")]
1752 pub reg_ext_value: Any,
1753 }
1754 impl AnonymousMapDataRegional {
1755 pub fn new(region_id: u8, reg_ext_value: Any) -> Self {
1756 Self {
1757 region_id,
1758 reg_ext_value,
1759 }
1760 }
1761 }
1762 #[doc = " Inner type "]
1763 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1764 #[rasn(delegate, size("1..=4"))]
1765 pub struct MapDataRegional(pub SequenceOf<AnonymousMapDataRegional>);
1766
1767 #[doc = "This DF is used to convey many types of geographic road information. At the current time its primary"]
1768 #[doc = "use is to convey one or more intersection lane geometry maps within a single message. The map message content"]
1769 #[doc = "includes such items as complex intersection descriptions, road segment descriptions, high speed curve outlines (used in"]
1770 #[doc = "curve safety messages), and segments of roadway (used in some safety applications). A given single MapData message"]
1771 #[doc = "may convey descriptions of one or more geographic areas or intersections. The contents of this message involve defining"]
1772 #[doc = "the details of indexing systems that are in turn used by other messages to relate additional information (for example, the"]
1773 #[doc = "signal phase and timing via the SPAT message) to events at specific geographic locations on the roadway."]
1774 #[doc = "- @field timeStamp: time reference"]
1775 #[doc = "- @field msgIssueRevision: The MapData revision is defined by the data element `revision` for each intersection"]
1776 #[doc = " geometry (see [ISO TS 19091] G.8.2.4.1). Therefore, an additional revision indication of the overall"]
1777 #[doc = " MapData message is not used in this profile. It shall be set to \"0\" for this profile."]
1778 #[doc = "- @field layerType: There is no need to additionally identify the topological content by an additional identifier. The ASN.1"]
1779 #[doc = " definition of the data frames `intersections` and `roadSegments` are clearly defined and need no"]
1780 #[doc = " additional identifier. Therefore, this optional data element shall not be used in this profile."]
1781 #[doc = "- @field layerID: This profile extends the purpose of the `layerID` data element as defined in SAE J2735 as follows: For"]
1782 #[doc = " large intersections, the length of a MapData description may exceed the maximum data length of the"]
1783 #[doc = " communication message. Therefore, a fragmentation of the MapData message (at application layer) in"]
1784 #[doc = " two or more MapData fragments may be executed. If no MapData fragmentation is needed, the `layerID`"]
1785 #[doc = " shall not be used. For more details, see the definition of the data element @ref LayerID."]
1786 #[doc = "- @field intersections: All Intersection definitions."]
1787 #[doc = "- @field roadSegments: All roadway descriptions."]
1788 #[doc = "- @field dataParameters: Any meta data regarding the map contents."]
1789 #[doc = "- @field restrictionList: Any restriction ID tables which have established for these map entries"]
1790 #[doc = "- @field regional: This profile extends the MapData message with the regional data element @ref MapData-addGrpC"]
1791 #[doc = "\n\n@category: Road topology information"]
1792 #[doc = "\n\n@revision: V1.3.1"]
1793 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1794 #[rasn(automatic_tags)]
1795 #[non_exhaustive]
1796 pub struct MapData {
1797 #[rasn(identifier = "timeStamp")]
1798 pub time_stamp: Option<MinuteOfTheYear>,
1799 #[rasn(identifier = "msgIssueRevision")]
1800 pub msg_issue_revision: MsgCount,
1801 #[rasn(identifier = "layerType")]
1802 pub layer_type: Option<LayerType>,
1803 #[rasn(identifier = "layerID")]
1804 pub layer_id: Option<LayerID>,
1805 pub intersections: Option<IntersectionGeometryList>,
1806 #[rasn(identifier = "roadSegments")]
1807 pub road_segments: Option<RoadSegmentList>,
1808 #[rasn(identifier = "dataParameters")]
1809 pub data_parameters: Option<DataParameters>,
1810 #[rasn(identifier = "restrictionList")]
1811 pub restriction_list: Option<RestrictionClassList>,
1812 pub regional: Option<MapDataRegional>,
1813 }
1814 impl MapData {
1815 pub fn new(
1816 time_stamp: Option<MinuteOfTheYear>,
1817 msg_issue_revision: MsgCount,
1818 layer_type: Option<LayerType>,
1819 layer_id: Option<LayerID>,
1820 intersections: Option<IntersectionGeometryList>,
1821 road_segments: Option<RoadSegmentList>,
1822 data_parameters: Option<DataParameters>,
1823 restriction_list: Option<RestrictionClassList>,
1824 regional: Option<MapDataRegional>,
1825 ) -> Self {
1826 Self {
1827 time_stamp,
1828 msg_issue_revision,
1829 layer_type,
1830 layer_id,
1831 intersections,
1832 road_segments,
1833 data_parameters,
1834 restriction_list,
1835 regional,
1836 }
1837 }
1838 }
1839
1840 #[doc = "The angle at which another lane path meets the current lanes at the node point. Typically found in the node"]
1841 #[doc = "attributes and used to describe the angle of the departing or merging lane. Note that oblique and obtuse angles are allowed."]
1842 #[doc = "The value `-180` shall be used to represent data is not available or unknown"]
1843 #[doc = "\n\n@unit: 1.5 degrees from north"]
1844 #[doc = "\n\n@category: Infrastructure information"]
1845 #[doc = "\n\n@revision: V1.3.1"]
1846 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1847 #[rasn(delegate, value("-180..=180"))]
1848 pub struct MergeDivergeNodeAngle(pub i16);
1849
1850 #[doc = "This DE expresses the number of elapsed minutes of the current year in the time system being used (typically UTC time)."]
1851 #[doc = "It is typically used to provide a longer range time stamp indicating when a message was created."]
1852 #[doc = "Taken together with the DSecond data element, it provides a range of one full year with a resolution of 1 millisecond."]
1853 #[doc = "The value 527040 shall be used for invalid."]
1854 #[doc = "\n\n@note: It should be noted that at the yearly roll-over point there is no \"zero\" minute, in the same way that there was"]
1855 #[doc = " never a \"year zero\" at the very start of the common era (BC -> AD). By using the number of elapsed whole minutes here"]
1856 #[doc = " this issue is avoided and the first valid value of every new year is zero, followed by one, etc. Leap years are"]
1857 #[doc = " accommodated, as are leap seconds in the DSecond data concept."]
1858 #[doc = "\n\n@category: Infrastructure information"]
1859 #[doc = "\n\n@revision: V1.3.1"]
1860 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1861 #[rasn(delegate, value("0..=527040"))]
1862 pub struct MinuteOfTheYear(pub u32);
1863 #[doc = " Anonymous SEQUENCE OF member "]
1864 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1865 #[rasn(automatic_tags, identifier = "SEQUENCE")]
1866 pub struct AnonymousMovementEventRegional {
1867 #[rasn(value("0..=255"), identifier = "regionId")]
1868 pub region_id: u8,
1869 #[rasn(identifier = "regExtValue")]
1870 pub reg_ext_value: Any,
1871 }
1872 impl AnonymousMovementEventRegional {
1873 pub fn new(region_id: u8, reg_ext_value: Any) -> Self {
1874 Self {
1875 region_id,
1876 reg_ext_value,
1877 }
1878 }
1879 }
1880 #[doc = " Inner type "]
1881 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1882 #[rasn(delegate, size("1..=4"))]
1883 pub struct MovementEventRegional(pub SequenceOf<AnonymousMovementEventRegional>);
1884
1885 #[doc = "This DF contains details about a single movement. It is used by the movement state to"]
1886 #[doc = "convey one of number of movements (typically occurring over a sequence of times) for a SignalGroupID."]
1887 #[doc = "- @field eventState: Consisting of: Phase state (the basic 11 states), Directional, protected, or permissive state"]
1888 #[doc = "- @field timing: Timing Data in UTC time stamps for event includes start and min/max end times of phase confidence and estimated next occurrence"]
1889 #[doc = "- @field speeds: various speed advisories for use by general and specific types of vehicles supporting green-wave and other flow needs"]
1890 #[doc = "- @field regional: optional region specific data."]
1891 #[doc = "\n\n@category: Infrastructure information"]
1892 #[doc = "\n\n@revision: V1.3.1"]
1893 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1894 #[rasn(automatic_tags)]
1895 #[non_exhaustive]
1896 pub struct MovementEvent {
1897 #[rasn(identifier = "eventState")]
1898 pub event_state: MovementPhaseState,
1899 pub timing: Option<TimeChangeDetails>,
1900 pub speeds: Option<AdvisorySpeedList>,
1901 pub regional: Option<MovementEventRegional>,
1902 }
1903 impl MovementEvent {
1904 pub fn new(
1905 event_state: MovementPhaseState,
1906 timing: Option<TimeChangeDetails>,
1907 speeds: Option<AdvisorySpeedList>,
1908 regional: Option<MovementEventRegional>,
1909 ) -> Self {
1910 Self {
1911 event_state,
1912 timing,
1913 speeds,
1914 regional,
1915 }
1916 }
1917 }
1918
1919 #[doc = "This DF consists of a list of @ref MovementEvent entries."]
1920 #[doc = "\n\n@category: Infrastructure information"]
1921 #[doc = "\n\n@revision: V1.3.1"]
1922 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1923 #[rasn(delegate, size("1..=16"))]
1924 pub struct MovementEventList(pub SequenceOf<MovementEvent>);
1925
1926 #[doc = "This DF consists of a list of @ref MovementState entries."]
1927 #[doc = "\n\n@category: Infrastructure information"]
1928 #[doc = "\n\n@revision: V1.3.1"]
1929 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
1930 #[rasn(delegate, size("1..=255"))]
1931 pub struct MovementList(pub SequenceOf<MovementState>);
1932
1933 #[doc = "This DE provides the overall current state of the movement (in many cases a signal state), including its core phase state"]
1934 #[doc = " and an indication of whether this state is permissive or protected."]
1935 #[doc = "It is expected that the allowed transitions from one state to another will be defined by regional deployments. Not all"]
1936 #[doc = "regions will use all states; however, no new states are to be defined. In most regions a regulatory body provides precise"]
1937 #[doc = "legal definitions of these state changes. For example, in the US the MUTCD is used, as is indicated in the US regional"]
1938 #[doc = "variant of the above image. In various regions and modes of transportation, the visual expression of these states varies"]
1939 #[doc = "(the precise meaning of various color combinations, shapes, and/or flashing etc.). The below definition is designed to to"]
1940 #[doc = "be independent of these regional conventions."]
1941 #[doc = "Values:"]
1942 #[doc = "- `unavailable` - 0: This state is used for unknown or error"]
1943 #[doc = "- `dark` - 1: The signal head is dark (unlit)"]
1944 #[doc = "- `stop-Then-Proceed` - 2: Often called 'flashing red'"]
1945 #[doc = " Driver Action:"]
1946 #[doc = " - Stop vehicle at stop line."]
1947 #[doc = " - Do not proceed unless it is safe."]
1948 #[doc = " Note that the right to proceed either right or left when it is safe may be contained in the lane description to"]
1949 #[doc = " handle what is called a 'right on red'"]
1950 #[doc = "- `stop-And-Remain` - 3: e.g. called 'red light'"]
1951 #[doc = " Driver Action:"]
1952 #[doc = " - Stop vehicle at stop line."]
1953 #[doc = " - Do not proceed."]
1954 #[doc = " Note that the right to proceed either right or left when it is safe may be contained in the lane description to"]
1955 #[doc = " handle what is called a 'right on red'"]
1956 #[doc = "- `pre-Movement` - 4: Not used in the US, red+yellow partly in EU"]
1957 #[doc = " Driver Action:"]
1958 #[doc = " - Stop vehicle."]
1959 #[doc = " - Prepare to proceed (pending green)"]
1960 #[doc = " - (Prepare for transition to green/go)"]
1961 #[doc = "- `permissive-Movement-Allowed` - 5: Often called 'permissive green'"]
1962 #[doc = " Driver Action:"]
1963 #[doc = " - Proceed with caution,"]
1964 #[doc = " - must yield to all conflicting traffic"]
1965 #[doc = " Conflicting traffic may be present in the intersection conflict area"]
1966 #[doc = "- `protected-Movement-Allowed` - 6: Often called 'protected green'"]
1967 #[doc = " Driver Action:"]
1968 #[doc = " - Proceed, tossing caution to the wind, in indicated (allowed) direction."]
1969 #[doc = "- `permissive-clearance` - 7: Often called 'permissive yellow'."]
1970 #[doc = " The vehicle is not allowed to cross the stop bar if it is possible"]
1971 #[doc = " to stop without danger."]
1972 #[doc = " Driver Action:"]
1973 #[doc = " - Prepare to stop."]
1974 #[doc = " - Proceed if unable to stop,"]
1975 #[doc = " - Clear Intersection."]
1976 #[doc = " Conflicting traffic may be present in the intersection conflict area"]
1977 #[doc = "- `protected-clearance` - 8: Often called 'protected yellow'"]
1978 #[doc = " Driver Action:"]
1979 #[doc = " - Prepare to stop."]
1980 #[doc = " - Proceed if unable to stop, in indicated direction (to connected lane)"]
1981 #[doc = " - Clear Intersection."]
1982 #[doc = "- `caution-Conflicting-Traffic` - 9: Often called 'flashing yellow'"]
1983 #[doc = " Often used for extended periods of time"]
1984 #[doc = " Driver Action:"]
1985 #[doc = " - Proceed with caution,"]
1986 #[doc = " Conflicting traffic may be present in the intersection conflict area"]
1987 #[doc = "\n\n@category: Infrastructure information"]
1988 #[doc = "\n\n@revision: V1.3.1"]
1989 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
1990 #[rasn(enumerated)]
1991 pub enum MovementPhaseState {
1992 unavailable = 0,
1993 dark = 1,
1994 #[rasn(identifier = "stop-Then-Proceed")]
1995 stop_Then_Proceed = 2,
1996 #[rasn(identifier = "stop-And-Remain")]
1997 stop_And_Remain = 3,
1998 #[rasn(identifier = "pre-Movement")]
1999 pre_Movement = 4,
2000 #[rasn(identifier = "permissive-Movement-Allowed")]
2001 permissive_Movement_Allowed = 5,
2002 #[rasn(identifier = "protected-Movement-Allowed")]
2003 protected_Movement_Allowed = 6,
2004 #[rasn(identifier = "permissive-clearance")]
2005 permissive_clearance = 7,
2006 #[rasn(identifier = "protected-clearance")]
2007 protected_clearance = 8,
2008 #[rasn(identifier = "caution-Conflicting-Traffic")]
2009 caution_Conflicting_Traffic = 9,
2010 }
2011 #[doc = " Anonymous SEQUENCE OF member "]
2012 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2013 #[rasn(automatic_tags, identifier = "SEQUENCE")]
2014 pub struct AnonymousMovementStateRegional {
2015 #[rasn(value("0..=255"), identifier = "regionId")]
2016 pub region_id: u8,
2017 #[rasn(identifier = "regExtValue")]
2018 pub reg_ext_value: Any,
2019 }
2020 impl AnonymousMovementStateRegional {
2021 pub fn new(region_id: u8, reg_ext_value: Any) -> Self {
2022 Self {
2023 region_id,
2024 reg_ext_value,
2025 }
2026 }
2027 }
2028 #[doc = " Inner type "]
2029 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2030 #[rasn(delegate, size("1..=4"))]
2031 pub struct MovementStateRegional(pub SequenceOf<AnonymousMovementStateRegional>);
2032
2033 #[doc = "This DF is used to convey various information about the current or future movement state of"]
2034 #[doc = "a designated collection of one or more lanes of a common type. This is referred to as the GroupID. Note that lane object"]
2035 #[doc = "types supported include both motorized vehicle lanes as well as pedestrian lanes and dedicated rail and transit lanes. Of"]
2036 #[doc = "the reported data elements, the time to change (the time remaining in the current state) is often of the most value. Lanes"]
2037 #[doc = "with a common state (typically adjacent sets of lanes in an approach) in a signalized intersection will have individual lane"]
2038 #[doc = "values such as total vehicle counts, summed. It is used in the SPAT message to convey every active movement in a"]
2039 #[doc = "given intersection so that vehicles, when combined with certain map information, can determine the state of the signal phases."]
2040 #[doc = "- @field movementName: uniquely defines movement by name human readable name for intersection to be used only in debug mode."]
2041 #[doc = "- @field signalGroup: is used to map to lists of lanes (and their descriptions) which this MovementState data applies to."]
2042 #[doc = "- @field state-time-speed: Consisting of sets of movement data with @ref SignalPhaseState, @ref TimeChangeDetail and @ref AdvisorySpeed"]
2043 #[doc = " *Note:* one or more of the movement events may be for a future time and that this allows conveying multiple"]
2044 #[doc = " predictive phase and movement timing for various uses for the current signal group."]
2045 #[doc = "- @field maneuverAssistList: This information may also be placed in the @ref IntersectionState when common information applies to different lanes in the same way"]
2046 #[doc = "- @field regional: optional region specific data."]
2047 #[doc = "\n\n@note: Note that the value given for the time to change will vary in many actuated signalized intersections based on"]
2048 #[doc = " the sensor data received during the phase. The data transmitted always reflects the then most current timemark value"]
2049 #[doc = " (which is the point in UTC time when the change will occur). As an example, in a phase which may vary from 15 to 25"]
2050 #[doc = " seconds of duration based on observed traffic flows, a time to change value of 15 seconds in the future might be"]
2051 #[doc = " transmitted for many consecutive seconds (and the time mark value extended for as much as 10 seconds depending on"]
2052 #[doc = " the extension time logic used by the controller before it either times out or gaps out), followed by a final time mark value"]
2053 #[doc = " reflecting the decreasing values as the time runs out, presuming the value was not again extended to a new time mark"]
2054 #[doc = " due to other detection events. The time to change element can therefore generally be regarded as a guaranteed minimum"]
2055 #[doc = " value of the time that will elapse unless a preemption event occurs."]
2056 #[doc = " In use, the @ref SignalGroupID element is matched to lanes that are members of that ID. The type of lane (vehicle, crosswalk,"]
2057 #[doc = " etc.) is known by the lane description as well as its allowed maneuvers and any vehicle class restrictions. Every lane type"]
2058 #[doc = " is treated the same way (cross walks map to suitable meanings, etc.). Lane objects which are not part of the sequence of"]
2059 #[doc = " signalized lanes do not appear in any GroupID. The visual details of how a given signal phase is presented to a mobile"]
2060 #[doc = " user will vary based on lane type and with regional conventions. Not all signal states will be used in all regional"]
2061 #[doc = " deployments. For example, a pre-green visual indication is not generally found in US deployments. Under such operating"]
2062 #[doc = " conditions, the unused phase states are simply skipped."]
2063 #[doc = "\n\n@category: Infrastructure information"]
2064 #[doc = "\n\n@revision: V1.3.1"]
2065 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2066 #[rasn(automatic_tags)]
2067 #[non_exhaustive]
2068 pub struct MovementState {
2069 #[rasn(identifier = "movementName")]
2070 pub movement_name: Option<DescriptiveName>,
2071 #[rasn(identifier = "signalGroup")]
2072 pub signal_group: SignalGroupID,
2073 #[rasn(identifier = "state-time-speed")]
2074 pub state_time_speed: MovementEventList,
2075 #[rasn(identifier = "maneuverAssistList")]
2076 pub maneuver_assist_list: Option<ManeuverAssistList>,
2077 pub regional: Option<MovementStateRegional>,
2078 }
2079 impl MovementState {
2080 pub fn new(
2081 movement_name: Option<DescriptiveName>,
2082 signal_group: SignalGroupID,
2083 state_time_speed: MovementEventList,
2084 maneuver_assist_list: Option<ManeuverAssistList>,
2085 regional: Option<MovementStateRegional>,
2086 ) -> Self {
2087 Self {
2088 movement_name,
2089 signal_group,
2090 state_time_speed,
2091 maneuver_assist_list,
2092 regional,
2093 }
2094 }
2095 }
2096
2097 #[doc = "This DE is used to provide a sequence number within a stream of messages with the same DSRCmsgID and from the same sender."]
2098 #[doc = "A sender may initialize this element to any value in the range 0-127 when sending the first message with a given DSRCmsgID,"]
2099 #[doc = "or if the sender has changed identity (e.g. by changing its TemporaryID) since sending the most recent message with that DSRCmsgID."]
2100 #[doc = "Depending on the application the sequence number may change with every message or may remain fixed during a stream of messages when the content within each"]
2101 #[doc = "message has not changed from the prior message sent. For this element, the value after 127 is zero."]
2102 #[doc = "The receipt of a non-sequential MsgCount value (from the same sending device and message type) implies that one or"]
2103 #[doc = "more messages from that sending device may have been lost, unless MsgCount has been re-initialized due to an identity"]
2104 #[doc = "change."]
2105 #[doc = "\n\n@note: In the absence of additional requirements defined in a standard using this data element, the follow guidelines shall be used."]
2106 #[doc = "In usage, some devices change their Temporary ID frequently, to prevent identity tracking, while others do not. A change"]
2107 #[doc = "in Temporary ID data element value (which also changes the message contents in which it appears) implies that the"]
2108 #[doc = "MsgCount may also change value."]
2109 #[doc = "If a sender is composing a message with new content with a given DSRCmsgID, and the TemporaryID has not changed"]
2110 #[doc = "since it sent the previous message, the sender shall increment the previous value."]
2111 #[doc = "If a sender is composing a message with new content with a given DSRCmsgID, and the TemporaryID has changed since"]
2112 #[doc = "it sent the previous message, the sender may set the MsgCount element to any valid value in the range (including"]
2113 #[doc = "incrementing the previous value)."]
2114 #[doc = "If a sender is composing a message with the same content as the most recent message with the same DSRCmsgID, and"]
2115 #[doc = "less than 10 seconds have elapsed since it sent the previous message with that DSRCmsgID, the sender will use the"]
2116 #[doc = "same MsgCount as sent in the previous message."]
2117 #[doc = "If a sender is composing a message with the same content as the most recent message with the same DSRCmsgID, and"]
2118 #[doc = "at least 10 seconds have elapsed since it sent the previous message with that DSRCmsgID, the sender may set the"]
2119 #[doc = "MsgCount element to any valid value in the range; this includes the re-use of the previous value."]
2120 #[doc = "If a sending device sends more than one stream of messages from message types that utilize the MsgCount element, it"]
2121 #[doc = "shall maintain a separate MsgCount state for each message type so that the MsgCount value in a given message"]
2122 #[doc = "identifies its place in the stream of that message type. The MsgCount element is a function only of the message type in a"]
2123 #[doc = "given sending device, not of the one or more applications in that device which may be sending the same type of message."]
2124 #[doc = "\n\n@category: Infrastructure information"]
2125 #[doc = "\n\n@revision: V1.3.1"]
2126 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2127 #[rasn(delegate, value("0..=127"))]
2128 pub struct MsgCount(pub u8);
2129
2130 #[doc = "A 64-bit node type with lat-long values expressed in one tenth of a micro degree."]
2131 #[doc = "\n\n@category: Infrastructure information"]
2132 #[doc = "\n\n@revision: V1.3.1"]
2133 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2134 #[rasn(automatic_tags, identifier = "Node-LLmD-64b")]
2135 pub struct NodeLLmD64b {
2136 pub lon: Longitude,
2137 pub lat: Latitude,
2138 }
2139 impl NodeLLmD64b {
2140 pub fn new(lon: Longitude, lat: Latitude) -> Self {
2141 Self { lon, lat }
2142 }
2143 }
2144
2145 #[doc = "A 20-bit node type with offset values from the last point in X and Y."]
2146 #[doc = "\n\n@category: Infrastructure information"]
2147 #[doc = "\n\n@revision: V1.3.1"]
2148 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2149 #[rasn(automatic_tags, identifier = "Node-XY-20b")]
2150 pub struct NodeXY20b {
2151 pub x: OffsetB10,
2152 pub y: OffsetB10,
2153 }
2154 impl NodeXY20b {
2155 pub fn new(x: OffsetB10, y: OffsetB10) -> Self {
2156 Self { x, y }
2157 }
2158 }
2159
2160 #[doc = "A 22-bit node type with offset values from the last point in X and Y."]
2161 #[doc = "\n\n@category: Infrastructure information"]
2162 #[doc = "\n\n@revision: V1.3.1"]
2163 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2164 #[rasn(automatic_tags, identifier = "Node-XY-22b")]
2165 pub struct NodeXY22b {
2166 pub x: OffsetB11,
2167 pub y: OffsetB11,
2168 }
2169 impl NodeXY22b {
2170 pub fn new(x: OffsetB11, y: OffsetB11) -> Self {
2171 Self { x, y }
2172 }
2173 }
2174
2175 #[doc = "A 24-bit node type with offset values from the last point in X and Y."]
2176 #[doc = "\n\n@category: Infrastructure information"]
2177 #[doc = "\n\n@revision: V1.3.1"]
2178 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2179 #[rasn(automatic_tags, identifier = "Node-XY-24b")]
2180 pub struct NodeXY24b {
2181 pub x: OffsetB12,
2182 pub y: OffsetB12,
2183 }
2184 impl NodeXY24b {
2185 pub fn new(x: OffsetB12, y: OffsetB12) -> Self {
2186 Self { x, y }
2187 }
2188 }
2189
2190 #[doc = "A 26-bit node type with offset values from the last point in X and Y."]
2191 #[doc = "\n\n@category: Infrastructure information"]
2192 #[doc = "\n\n@revision: V1.3.1"]
2193 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2194 #[rasn(automatic_tags, identifier = "Node-XY-26b")]
2195 pub struct NodeXY26b {
2196 pub x: OffsetB13,
2197 pub y: OffsetB13,
2198 }
2199 impl NodeXY26b {
2200 pub fn new(x: OffsetB13, y: OffsetB13) -> Self {
2201 Self { x, y }
2202 }
2203 }
2204
2205 #[doc = "A 28-bit node type with offset values from the last point in X and Y."]
2206 #[doc = "\n\n@category: Infrastructure information"]
2207 #[doc = "\n\n@revision: V1.3.1"]
2208 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2209 #[rasn(automatic_tags, identifier = "Node-XY-28b")]
2210 pub struct NodeXY28b {
2211 pub x: OffsetB14,
2212 pub y: OffsetB14,
2213 }
2214 impl NodeXY28b {
2215 pub fn new(x: OffsetB14, y: OffsetB14) -> Self {
2216 Self { x, y }
2217 }
2218 }
2219
2220 #[doc = "A 32-bit node type with offset values from the last point in X and Y."]
2221 #[doc = "\n\n@category: Infrastructure information"]
2222 #[doc = "\n\n@revision: V1.3.1"]
2223 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2224 #[rasn(automatic_tags, identifier = "Node-XY-32b")]
2225 pub struct NodeXY32b {
2226 pub x: OffsetB16,
2227 pub y: OffsetB16,
2228 }
2229 impl NodeXY32b {
2230 pub fn new(x: OffsetB16, y: OffsetB16) -> Self {
2231 Self { x, y }
2232 }
2233 }
2234 #[doc = " Anonymous SEQUENCE OF member "]
2235 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2236 #[rasn(automatic_tags, identifier = "SEQUENCE")]
2237 pub struct AnonymousNodeAttributeSetXYRegional {
2238 #[rasn(value("0..=255"), identifier = "regionId")]
2239 pub region_id: u8,
2240 #[rasn(identifier = "regExtValue")]
2241 pub reg_ext_value: Any,
2242 }
2243 impl AnonymousNodeAttributeSetXYRegional {
2244 pub fn new(region_id: u8, reg_ext_value: Any) -> Self {
2245 Self {
2246 region_id,
2247 reg_ext_value,
2248 }
2249 }
2250 }
2251 #[doc = " Inner type "]
2252 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2253 #[rasn(delegate, size("1..=4"))]
2254 pub struct NodeAttributeSetXYRegional(pub SequenceOf<AnonymousNodeAttributeSetXYRegional>);
2255
2256 #[doc = "All the node attributes defined in this DF are valid in the direction of"]
2257 #[doc = "node declaration and not in driving direction (i.e. along the sequence of the declared nodes). E.g. node"]
2258 #[doc = "attributes of an `ingress` or an `egress` lane are defined from the conflict area (first node) to the"]
2259 #[doc = "outside of the intersection (last node). Node attributes with ‘left’ and ‘right’ in their name are also"]
2260 #[doc = "defined in the direction of the node declaration. This allows using attributes in a unambigious way also"]
2261 #[doc = "for lanes with biderctional driving. See the following attribuets examples for additianl explanations."]
2262 #[doc = "- @field localNode: Attribute states which pertain to this node point"]
2263 #[doc = "- @field disabled: Attribute states which are disabled at this node point"]
2264 #[doc = "- @field enabled: Attribute states which are enabled at this node point and which remain enabled until disabled or the lane ends"]
2265 #[doc = "- @field data: Attributes which require an additional data values some of these are local to the node point, while others"]
2266 #[doc = " persist with the provided values until changed and this is indicated in each entry"]
2267 #[doc = "- @field dWidth: A value added to the current lane width at this node and from this node onwards, in 1cm steps"]
2268 #[doc = " lane width between nodes are a linear taper between pts the value of zero shall not be sent here."]
2269 #[doc = "- @field dElevation: A value added to the current Elevation at this node from this node onwards, in 10cm steps"]
2270 #[doc = " elevations between nodes are a linear taper between pts the value of zero shall not be sent here"]
2271 #[doc = "- @field regional: optional region specific data."]
2272 #[doc = "\n\n@category: Infrastructure information"]
2273 #[doc = "\n\n@revision: V1.3.1"]
2274 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2275 #[rasn(automatic_tags)]
2276 #[non_exhaustive]
2277 pub struct NodeAttributeSetXY {
2278 #[rasn(identifier = "localNode")]
2279 pub local_node: Option<NodeAttributeXYList>,
2280 pub disabled: Option<SegmentAttributeXYList>,
2281 pub enabled: Option<SegmentAttributeXYList>,
2282 pub data: Option<LaneDataAttributeList>,
2283 #[rasn(identifier = "dWidth")]
2284 pub d_width: Option<OffsetB10>,
2285 #[rasn(identifier = "dElevation")]
2286 pub d_elevation: Option<OffsetB10>,
2287 pub regional: Option<NodeAttributeSetXYRegional>,
2288 }
2289 impl NodeAttributeSetXY {
2290 pub fn new(
2291 local_node: Option<NodeAttributeXYList>,
2292 disabled: Option<SegmentAttributeXYList>,
2293 enabled: Option<SegmentAttributeXYList>,
2294 data: Option<LaneDataAttributeList>,
2295 d_width: Option<OffsetB10>,
2296 d_elevation: Option<OffsetB10>,
2297 regional: Option<NodeAttributeSetXYRegional>,
2298 ) -> Self {
2299 Self {
2300 local_node,
2301 disabled,
2302 enabled,
2303 data,
2304 d_width,
2305 d_elevation,
2306 regional,
2307 }
2308 }
2309 }
2310
2311 #[doc = "This DE is an enumerated list of attributes which can pertain to the current node"]
2312 #[doc = "point. The 'scope' of these values is limited to the node itself. That is, unlike other types of attributes which can be"]
2313 #[doc = "switched on or off at any given node (and hence pertains to one or more segments), the DE_NodeAttribute is local to the"]
2314 #[doc = "node in which it is found. These attributes are all binary flags in that they do not need to convey any additional data. Other"]
2315 #[doc = "attributes allow sending short data values to reflect a setting which is set and persists in a similar fashion."]
2316 #[doc = " - reserved: do not use"]
2317 #[doc = " - stopLine: point where a mid-path stop line exists. See also 'do not block' for segments"]
2318 #[doc = " - roundedCapStyleA: Used to control final path rounded end shape with edge of curve at final point in a circle"]
2319 #[doc = " - roundedCapStyleB: Used to control final path rounded end shape with edge of curve extending 50% of width past final point in a circle"]
2320 #[doc = " - mergePoint: merge with 1 or more lanes"]
2321 #[doc = " - divergePoint: diverge with 1 or more lanes"]
2322 #[doc = " - downstreamStopLine: downstream intersection (a 2nd intersection) stop line"]
2323 #[doc = " - downstreamStartNode: downstream intersection (a 2nd intersection) start node"]
2324 #[doc = " - closedToTraffic: where a pedestrian may NOT go to be used during construction events"]
2325 #[doc = " - safeIsland: a pedestrian safe stopping point also called a traffic island"]
2326 #[doc = " This usage described a point feature on a path, other entries can describe a path"]
2327 #[doc = " - curbPresentAtStepOff: the sidewalk to street curb is NOT angled where it meets the edge of the roadway (user must step up/down)"]
2328 #[doc = " - hydrantPresent: Or other services access"]
2329 #[doc = "\n\n@note: See usage examples in [ISO TS 19091] G.8.2.8"]
2330 #[doc = "\n\n@category: Infrastructure information"]
2331 #[doc = "\n\n@revision: V1.3.1"]
2332 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
2333 #[rasn(enumerated)]
2334 #[non_exhaustive]
2335 pub enum NodeAttributeXY {
2336 reserved = 0,
2337 stopLine = 1,
2338 roundedCapStyleA = 2,
2339 roundedCapStyleB = 3,
2340 mergePoint = 4,
2341 divergePoint = 5,
2342 downstreamStopLine = 6,
2343 downstreamStartNode = 7,
2344 closedToTraffic = 8,
2345 safeIsland = 9,
2346 curbPresentAtStepOff = 10,
2347 hydrantPresent = 11,
2348 }
2349
2350 #[doc = "This DF consists of a list of @ref NodeAttributeXY entries."]
2351 #[doc = "\n\n@category: Infrastructure information"]
2352 #[doc = "\n\n@revision: V1.3.1"]
2353 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2354 #[rasn(delegate, size("1..=8"))]
2355 pub struct NodeAttributeXYList(pub SequenceOf<NodeAttributeXY>);
2356
2357 #[doc = "This DF provides the sequence of signed offset node point values for determining the Xs and Ys"]
2358 #[doc = "(and possibly Width or Zs when present), using the then current Position3D object to build a path for the centerline of"]
2359 #[doc = "the subject lane type. Each X,Y point is referred to as a Node Point. The straight line paths between these points are"]
2360 #[doc = "referred to as Segments."]
2361 #[doc = "All nodes may have various optional attributes the state of which can vary along the path and which are enabled and"]
2362 #[doc = "disabled by the sequence of objects found in the list of node structures. Refer to the explanatory text in Section 11 for a"]
2363 #[doc = "description of how to correctly encode and decode this type of the data element. As a simple example, a motor vehicle"]
2364 #[doc = "lane may have a section of the overall lane path marked \"do not block\", indicating that vehicles should not come to a stop"]
2365 #[doc = "and remain in that region. This is encoded in the Node data structures by an element in one node to indicate the start of"]
2366 #[doc = "the \"do not block\" lane attributes at a given offset, and then by a termination element when this attribute is set false. Other"]
2367 #[doc = "types of elements in the segment choice allow inserting attributes containing data values affecting the segment or the"]
2368 #[doc = "node."]
2369 #[doc = "- @field nodes: a lane made up of two or more XY node points and any attributes defined in those nodes"]
2370 #[doc = "- @field computed: a lane path computed by translating the data defined by another lane"]
2371 #[doc = "\n\n@category: Infrastructure information"]
2372 #[doc = "\n\n@revision: V1.3.1"]
2373 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2374 #[rasn(choice, automatic_tags)]
2375 #[non_exhaustive]
2376 pub enum NodeListXY {
2377 nodes(NodeSetXY),
2378 computed(ComputedLane),
2379 }
2380 #[doc = " Inner type "]
2381 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2382 #[rasn(automatic_tags)]
2383 pub struct NodeOffsetPointXYRegional {
2384 #[rasn(value("0..=255"), identifier = "regionId")]
2385 pub region_id: u8,
2386 #[rasn(identifier = "regExtValue")]
2387 pub reg_ext_value: Any,
2388 }
2389 impl NodeOffsetPointXYRegional {
2390 pub fn new(region_id: u8, reg_ext_value: Any) -> Self {
2391 Self {
2392 region_id,
2393 reg_ext_value,
2394 }
2395 }
2396 }
2397
2398 #[doc = "This DF presents a structure to hold different sized data frames for a single node"]
2399 #[doc = "point in a lane. Nodes are described in terms of X and Y offsets in units of 1 centimeter (when zoom is 1:1). Changes in"]
2400 #[doc = "elevation and in the lane width can be expressed in a similar way with the optional Attributes data entry which appears"]
2401 #[doc = "alongside the NodeOffsetPoint in use."]
2402 #[doc = "The choice of which node type is driven by the magnitude (size) of the offset data to be encoded. When the distance from"]
2403 #[doc = "the last node point is smaller, the smaller entries can (and should) be chosen"]
2404 #[doc = "Each single selected node is computed as an X and Y offset from the prior node point unless one of the entries reflecting"]
2405 #[doc = "a complete lat-long representation is selected. In this case, subsequent entries become offsets from that point. This ability"]
2406 #[doc = "was added for assistance with the development, storage, and back office exchange of messages where message size is"]
2407 #[doc = "not a concern and should not be sent over the air due to its additional message payload size."]
2408 #[doc = "The general usage guidance is to construct the content of each lane node point with the smallest possible element to"]
2409 #[doc = "conserve message size. However, using an element which is larger than needed is not a violation of the ASN.1 rules."]
2410 #[doc = "- @field node-XY1: node is within 5.11m of last node"]
2411 #[doc = "- @field node-XY2: node is within 10.23m of last node"]
2412 #[doc = "- @field node-XY3: node is within 20.47m of last node"]
2413 #[doc = "- @field node-XY4: node is within 40.96m of last node"]
2414 #[doc = "- @field node-XY5: node is within 81.91m of last node"]
2415 #[doc = "- @field node-XY6: node is within 327.67m of last node"]
2416 #[doc = "- @field node-LatLon: node is a full 32b Lat/Lon range"]
2417 #[doc = "- @field regional: optional region specific data."]
2418 #[doc = "\n\n@category: Infrastructure information"]
2419 #[doc = "\n\n@revision: V1.3.1"]
2420 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2421 #[rasn(choice, automatic_tags)]
2422 pub enum NodeOffsetPointXY {
2423 #[rasn(identifier = "node-XY1")]
2424 node_XY1(NodeXY20b),
2425 #[rasn(identifier = "node-XY2")]
2426 node_XY2(NodeXY22b),
2427 #[rasn(identifier = "node-XY3")]
2428 node_XY3(NodeXY24b),
2429 #[rasn(identifier = "node-XY4")]
2430 node_XY4(NodeXY26b),
2431 #[rasn(identifier = "node-XY5")]
2432 node_XY5(NodeXY28b),
2433 #[rasn(identifier = "node-XY6")]
2434 node_XY6(NodeXY32b),
2435 #[rasn(identifier = "node-LatLon")]
2436 node_LatLon(NodeLLmD64b),
2437 regional(NodeOffsetPointXYRegional),
2438 }
2439
2440 #[doc = "This DF consists of a list of Node entries using XY offsets."]
2441 #[doc = "\n\n@category: Infrastructure information"]
2442 #[doc = "\n\n@revision: V1.3.1"]
2443 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2444 #[rasn(delegate, size("2..=63"))]
2445 pub struct NodeSetXY(pub SequenceOf<NodeXY>);
2446
2447 #[doc = "This DF presents a structure to hold data for a single node point in a path. Each selected node"]
2448 #[doc = "has an X and Y offset from the prior node point (or a complete lat-long representation in some cases) as well as optional"]
2449 #[doc = "attribute information. The node list for a lane (or other object) is made up of a sequence of these to describe the desired"]
2450 #[doc = "path. The X,Y points are selected to reflect the centerline of the path with sufficient accuracy for the intended applications."]
2451 #[doc = "Simple lanes can be adequately described with only two node points, while lanes with curvature may require more points."]
2452 #[doc = "Changes to the lane width and elevation can be expressed in the NodeAttributes entry, as well as various attributes that"]
2453 #[doc = "pertain to either the current node point or to one of more subsequent segments along the list of lane node points. As a"]
2454 #[doc = "broad concept, NodeAttributes are used to describe aspects of the lane that persist for only a portion of the overall lane"]
2455 #[doc = "path (either at a node or over a set of segments)."]
2456 #[doc = "A further description of the use of the NodeOffsetPoint and the Attributes data concepts can be found in the data"]
2457 #[doc = "dictionary entries for each one. Note that each allows regional variants to be supported as well."]
2458 #[doc = "- @field delta: A choice of which X,Y offset value to use this includes various delta values as well a regional choices."]
2459 #[doc = "- @field attributes: Any optional Attributes which are needed. This includes changes to the current lane width and elevation."]
2460 #[doc = "\n\n@category: Infrastructure information"]
2461 #[doc = "\n\n@revision: V1.3.1"]
2462 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2463 #[rasn(automatic_tags)]
2464 #[non_exhaustive]
2465 pub struct NodeXY {
2466 pub delta: NodeOffsetPointXY,
2467 pub attributes: Option<NodeAttributeSetXY>,
2468 }
2469 impl NodeXY {
2470 pub fn new(delta: NodeOffsetPointXY, attributes: Option<NodeAttributeSetXY>) -> Self {
2471 Self { delta, attributes }
2472 }
2473 }
2474 #[doc = "This DF is the ODG Addition for Legancy R09 telegrams."]
2475 #[doc = "- @field reportingPoint: reporting point as of R09 (maps to R09 field M Meldepunktnummer)"]
2476 #[doc = "- @field priorityLevel: priority level as of R09 (maps to R09 field P Prioritaet)"]
2477 #[doc = "- @field length: train length point as of R09 (maps to R09 field A Zuglaenge)"]
2478 #[doc = "- @field route: route as of R09 (maps to R09 field K Kursnummer)"]
2479 #[doc = "- @field line: line as of R09 (maps to R09 field L Liniennummer)"]
2480 #[doc = "- @field direction: direction as of R09 (maps to R09 field H Richtung von Hand)"]
2481 #[doc = "- @field tour: tour as of R09 (maps to R09 field Z Zielnummer)"]
2482 #[doc = "- @field version: version of R09"]
2483 #[doc = "\n\n@category: Infrastructure information"]
2484 #[doc = "\n\n@revision: V2.2.1"]
2485 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2486 #[rasn(automatic_tags)]
2487 #[non_exhaustive]
2488 pub struct OcitRequestorDescriptionContainer {
2489 #[rasn(identifier = "reportingPoint")]
2490 pub reporting_point: Option<ReportingPoint>,
2491 #[rasn(identifier = "priorityLevel")]
2492 pub priority_level: Option<PriorityLevel>,
2493 pub length: Option<TrainLength>,
2494 pub route: Option<RouteNumber>,
2495 pub line: Option<LineNumber>,
2496 pub direction: Option<TransitDirection>,
2497 pub tour: Option<TourNumber>,
2498 pub version: Option<VersionId>,
2499 }
2500 impl OcitRequestorDescriptionContainer {
2501 pub fn new(
2502 reporting_point: Option<ReportingPoint>,
2503 priority_level: Option<PriorityLevel>,
2504 length: Option<TrainLength>,
2505 route: Option<RouteNumber>,
2506 line: Option<LineNumber>,
2507 direction: Option<TransitDirection>,
2508 tour: Option<TourNumber>,
2509 version: Option<VersionId>,
2510 ) -> Self {
2511 Self {
2512 reporting_point,
2513 priority_level,
2514 length,
2515 route,
2516 line,
2517 direction,
2518 tour,
2519 version,
2520 }
2521 }
2522 }
2523
2524 #[doc = "A 9-bit delta offset in X, Y or Z direction from some known point. For non-vehicle centric coordinate frames of"]
2525 #[doc = "reference, offset is positive to the East (X) and to the North (Y) directions. The most negative value shall be used to"]
2526 #[doc = "indicate an unknown value."]
2527 #[doc = "a range of +- 2.55 meters"]
2528 #[doc = "\n\n@category: Infrastructure information"]
2529 #[doc = "\n\n@revision: V1.3.1"]
2530 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2531 #[rasn(delegate, identifier = "Offset-B09", value("-256..=255"))]
2532 pub struct OffsetB09(pub i16);
2533
2534 #[doc = "A 10-bit delta offset in X, Y or Z direction from some known point. For non-vehicle centric coordinate frames of"]
2535 #[doc = "reference, offset is positive to the East (X) and to the North (Y) directions. The most negative value shall be used to"]
2536 #[doc = "indicate an unknown value."]
2537 #[doc = "a range of +- 5.11 meters"]
2538 #[doc = "\n\n@category: Infrastructure information"]
2539 #[doc = "\n\n@revision: V1.3.1"]
2540 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2541 #[rasn(delegate, identifier = "Offset-B10", value("-512..=511"))]
2542 pub struct OffsetB10(pub i16);
2543
2544 #[doc = "An 11-bit delta offset in X or Y direction from some known point. For non-vehicle centric coordinate frames of"]
2545 #[doc = "reference, offset is positive to the East (X) and to the North (Y) directions. The most negative value shall be used to"]
2546 #[doc = "indicate an unknown value."]
2547 #[doc = "a range of +- 10.23 meters"]
2548 #[doc = "\n\n@category: Infrastructure information"]
2549 #[doc = "\n\n@revision: V1.3.1"]
2550 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2551 #[rasn(delegate, identifier = "Offset-B11", value("-1024..=1023"))]
2552 pub struct OffsetB11(pub i16);
2553
2554 #[doc = "A 12-bit delta offset in X, Y or Z direction from some known point. For non-vehicle centric coordinate frames of"]
2555 #[doc = "reference, non-vehicle centric coordinate frames of reference, offset is positive to the East (X) and to the North (Y)"]
2556 #[doc = "directions. The most negative value shall be used to indicate an unknown value."]
2557 #[doc = "a range of +- 20.47 meters"]
2558 #[doc = "\n\n@category: Infrastructure information"]
2559 #[doc = "\n\n@revision: V1.3.1"]
2560 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2561 #[rasn(delegate, identifier = "Offset-B12", value("-2048..=2047"))]
2562 pub struct OffsetB12(pub i16);
2563
2564 #[doc = "A 13-bit delta offset in X or Y direction from some known point. For non-vehicle centric coordinate frames of"]
2565 #[doc = "reference, offset is positive to the East (X) and to the North (Y) directions. The most negative value shall be used to"]
2566 #[doc = "indicate an unknown value."]
2567 #[doc = "a range of +- 40.95 meters"]
2568 #[doc = "\n\n@category: Infrastructure information"]
2569 #[doc = "\n\n@revision: V1.3.1"]
2570 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2571 #[rasn(delegate, identifier = "Offset-B13", value("-4096..=4095"))]
2572 pub struct OffsetB13(pub i16);
2573
2574 #[doc = "A 14-bit delta offset in X or Y direction from some known point. For non-vehicle centric coordinate frames of"]
2575 #[doc = "reference, offset is positive to the East (X) and to the North (Y) directions."]
2576 #[doc = "a range of +- 81.91 meters"]
2577 #[doc = "\n\n@category: Infrastructure information"]
2578 #[doc = "\n\n@revision: V1.3.1"]
2579 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2580 #[rasn(delegate, identifier = "Offset-B14", value("-8192..=8191"))]
2581 pub struct OffsetB14(pub i16);
2582
2583 #[doc = "A 16-bit delta offset in X, Y or Z direction from some known point. For non-vehicle centric coordinate frames of"]
2584 #[doc = "reference, offset is positive to the East (X) and to the North (Y) directions. The most negative value shall be used to"]
2585 #[doc = "indicate an unknown value."]
2586 #[doc = "a range of +- 327.68 meters"]
2587 #[doc = "\n\n@category: Infrastructure information"]
2588 #[doc = "\n\n@revision: V1.3.1"]
2589 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2590 #[rasn(delegate, identifier = "Offset-B16", value("-32768..=32767"))]
2591 pub struct OffsetB16(pub i16);
2592
2593 #[doc = "This DF is a sequence of lane IDs which refers to lane objects that overlap or overlay the current lane's spatial path."]
2594 #[doc = "Contains the unique ID numbers for any lane object which have spatial paths that overlay (run on top of, and not"]
2595 #[doc = "simply cross with) the current lane."]
2596 #[doc = "Such as a train path that overlays a motor vehicle lane object for a roadway segment."]
2597 #[doc = "\n\n@category: Infrastructure information"]
2598 #[doc = "\n\n@revision: V1.3.1"]
2599 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2600 #[rasn(delegate, size("1..=5"))]
2601 pub struct OverlayLaneList(pub SequenceOf<LaneID>);
2602
2603 #[doc = "This DE is used to provide an indication of whether Pedestrians and/or Bicyclists have been detected in the crossing lane."]
2604 #[doc = "true if ANY Pedestrians or Bicyclists are detected crossing the target lane or lanes"]
2605 #[doc = "\n\n@category: Infrastructure information"]
2606 #[doc = "\n\n@revision: V1.3.1"]
2607 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
2608 #[rasn(delegate)]
2609 pub struct PedestrianBicycleDetect(pub bool);
2610 #[doc = " Anonymous SEQUENCE OF member "]
2611 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2612 #[rasn(automatic_tags, identifier = "SEQUENCE")]
2613 pub struct AnonymousPosition3DRegional {
2614 #[rasn(value("0..=255"), identifier = "regionId")]
2615 pub region_id: u8,
2616 #[rasn(identifier = "regExtValue")]
2617 pub reg_ext_value: Any,
2618 }
2619 impl AnonymousPosition3DRegional {
2620 pub fn new(region_id: u8, reg_ext_value: Any) -> Self {
2621 Self {
2622 region_id,
2623 reg_ext_value,
2624 }
2625 }
2626 }
2627 #[doc = " Inner type "]
2628 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2629 #[rasn(delegate, size("1..=4"))]
2630 pub struct Position3DRegional(pub SequenceOf<AnonymousPosition3DRegional>);
2631
2632 #[doc = "This DF provides a precise location in the WGS-84 coordinate system, from which short"]
2633 #[doc = "offsets may be used to create additional data using a flat earth projection centered on this location. Position3D is typically"]
2634 #[doc = "used in the description of maps and intersections, as well as signs and traveler data."]
2635 #[doc = "- @field lat: Latitude in 1/10th microdegrees"]
2636 #[doc = "- @field long: Longitude in 1/10th microdegrees"]
2637 #[doc = "- @field elevation: The elevation information is defined by the regional extension (see module ETSI-ITS-DSRC-AddGrpC). "]
2638 #[doc = " Therefore, the `elevation` data element of `DF_Position3D` is not used."]
2639 #[doc = "- @field regional: optional region specific data."]
2640 #[doc = "\n\n@category: Infrastructure information"]
2641 #[doc = "\n\n@revision: V1.3.1"]
2642 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2643 #[rasn(automatic_tags)]
2644 #[non_exhaustive]
2645 pub struct Position3D {
2646 pub lat: Latitude,
2647 pub long: Longitude,
2648 pub elevation: Option<Elevation>,
2649 pub regional: Option<Position3DRegional>,
2650 }
2651 impl Position3D {
2652 pub fn new(
2653 lat: Latitude,
2654 long: Longitude,
2655 elevation: Option<Elevation>,
2656 regional: Option<Position3DRegional>,
2657 ) -> Self {
2658 Self {
2659 lat,
2660 long,
2661 elevation,
2662 regional,
2663 }
2664 }
2665 }
2666 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
2667 #[rasn(enumerated)]
2668 pub enum PositionConfidence {
2669 unavailable = 0,
2670 a500m = 1,
2671 a200m = 2,
2672 a100m = 3,
2673 a50m = 4,
2674 a20m = 5,
2675 a10m = 6,
2676 a5m = 7,
2677 a2m = 8,
2678 a1m = 9,
2679 a50cm = 10,
2680 a20cm = 11,
2681 a10cm = 12,
2682 a5cm = 13,
2683 a2cm = 14,
2684 a1cm = 15,
2685 }
2686
2687 #[doc = "This DF combines multiple related bit fields into a single concept."]
2688 #[doc = "- @field pos: confidence for both horizontal directions"]
2689 #[doc = "- @field elevation: confidence for vertical direction"]
2690 #[doc = "\n\n@category: Infrastructure information"]
2691 #[doc = "\n\n@revision: V1.3.1"]
2692 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2693 #[rasn(automatic_tags)]
2694 pub struct PositionConfidenceSet {
2695 pub pos: PositionConfidence,
2696 pub elevation: ElevationConfidence,
2697 }
2698 impl PositionConfidenceSet {
2699 pub fn new(pos: PositionConfidence, elevation: ElevationConfidence) -> Self {
2700 Self { pos, elevation }
2701 }
2702 }
2703
2704 #[doc = "This DF consists of various parameters of quality used to model the accuracy of the"]
2705 #[doc = "positional determination with respect to each given axis."]
2706 #[doc = "\n\n@category: Infrastructure information"]
2707 #[doc = "\n\n@revision: V1.3.1"]
2708 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2709 #[rasn(automatic_tags)]
2710 pub struct PositionalAccuracy {
2711 #[rasn(identifier = "semiMajor")]
2712 pub semi_major: SemiMajorAxisAccuracy,
2713 #[rasn(identifier = "semiMinor")]
2714 pub semi_minor: SemiMinorAxisAccuracy,
2715 pub orientation: SemiMajorAxisOrientation,
2716 }
2717 impl PositionalAccuracy {
2718 pub fn new(
2719 semi_major: SemiMajorAxisAccuracy,
2720 semi_minor: SemiMinorAxisAccuracy,
2721 orientation: SemiMajorAxisOrientation,
2722 ) -> Self {
2723 Self {
2724 semi_major,
2725 semi_minor,
2726 orientation,
2727 }
2728 }
2729 }
2730
2731 #[doc = "This DF consists of a list of RegionalSignalControlZone entries."]
2732 #[doc = "\n\n@category: Infrastructure information"]
2733 #[doc = "\n\n@revision: V1.3.1"]
2734 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2735 #[rasn(delegate, size("1..=32"))]
2736 pub struct PreemptPriorityList(pub SequenceOf<SignalControlZone>);
2737
2738 #[doc = "This DE is used in the @ref PrioritizationResponse data frame to indicate the"]
2739 #[doc = "general status of a prior prioritization request."]
2740 #[doc = "- `unknown` - 0: Unknown state"]
2741 #[doc = "- `requested` - 1: This prioritization request was detected by the traffic controller"]
2742 #[doc = "- `processing` - 2: Checking request (request is in queue, other requests are prior)"]
2743 #[doc = "- `watchOtherTraffic` - 3: Cannot give full permission, therefore watch for other traffic. Note that other requests may be present"]
2744 #[doc = "- `granted` - 4: Intervention was successful and now prioritization is active"]
2745 #[doc = "- `rejected` - 5: The prioritization or preemption request was rejected by the traffic controller"]
2746 #[doc = "- `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."]
2747 #[doc = "- `reserviceLocked` - 7: Prior conditions have resulted in a reservice"]
2748 #[doc = " locked event: the controller requires the passage of time before another similar request will be accepted"]
2749 #[doc = "\n\n@category: Infrastructure information"]
2750 #[doc = "\n\n@revision: V1.3.1"]
2751 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
2752 #[rasn(enumerated)]
2753 #[non_exhaustive]
2754 pub enum PrioritizationResponseStatus {
2755 unknown = 0,
2756 requested = 1,
2757 processing = 2,
2758 watchOtherTraffic = 3,
2759 granted = 4,
2760 rejected = 5,
2761 maxPresence = 6,
2762 reserviceLocked = 7,
2763 }
2764
2765 #[doc = "This DE is used to provide the R09 priority."]
2766 #[doc = "\n\n@category: Infrastructure information"]
2767 #[doc = "\n\n@revision: V2.2.1"]
2768 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2769 #[rasn(delegate, value("0..=255"))]
2770 pub struct PriorityLevel(pub u8);
2771
2772 #[doc = "This DE provides a means to indicate if a request (found in the Signal RequestMessage) represents"]
2773 #[doc = "a new service request, a request update, or a request cancellation for either preemption or priority services."]
2774 #[doc = "\n\n@category: Infrastructure information"]
2775 #[doc = "\n\n@revision: V1.3.1"]
2776 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
2777 #[rasn(enumerated)]
2778 #[non_exhaustive]
2779 pub enum PriorityRequestType {
2780 priorityRequestTypeReserved = 0,
2781 priorityRequest = 1,
2782 priorityRequestUpdate = 2,
2783 priorityCancellation = 3,
2784 }
2785
2786 #[doc = "This DE provides the specific revision of the RTCM standard which is being used. This is"]
2787 #[doc = "helpful to know precisely the mapping of the message types to their definitions, as well as some minor transport layer"]
2788 #[doc = "ordering details when received in the mobile unit. All RTCM SC-104 messages follow a common message numbering"]
2789 #[doc = "method (wherein all defined messages are given unique values) which can be decoded from the initial octets of the"]
2790 #[doc = "message. This operation is typically performed by the GNSS rover that consumes the messages, so it is transparent at"]
2791 #[doc = "the DSRC message set level."]
2792 #[doc = "Values:"]
2793 #[doc = "- `rtcmRev2`: Std 10402.x et al"]
2794 #[doc = "- `rtcmRev3`: Std 10403.x et al"]
2795 #[doc = "\n\n@note:: In order to fully support the use of networked transport of RTCM corrections (so-called Ntrip systems), the"]
2796 #[doc = " enumerated list of protocol types provides for all the common types outlined in RTCM Standard 10410.0, Appendix B. It is"]
2797 #[doc = " anticipated that revisions 3.x and 2.3 will predominate in practice as they do today. It should also be noted that RTCM"]
2798 #[doc = " standards use the term `byte` for an 8-bit value, while in this standard the term `octet` is used."]
2799 #[doc = "\n\n@category: Infrastructure information"]
2800 #[doc = "\n\n@revision: V1.3.1"]
2801 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
2802 #[rasn(enumerated, identifier = "RTCM-Revision")]
2803 #[non_exhaustive]
2804 pub enum RTCMRevision {
2805 unknown = 0,
2806 rtcmRev2 = 1,
2807 rtcmRev3 = 2,
2808 reserved = 3,
2809 }
2810 #[doc = " Anonymous SEQUENCE OF member "]
2811 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2812 #[rasn(automatic_tags, identifier = "SEQUENCE")]
2813 pub struct AnonymousRTCMcorrectionsRegional {
2814 #[rasn(value("0..=255"), identifier = "regionId")]
2815 pub region_id: u8,
2816 #[rasn(identifier = "regExtValue")]
2817 pub reg_ext_value: Any,
2818 }
2819 impl AnonymousRTCMcorrectionsRegional {
2820 pub fn new(region_id: u8, reg_ext_value: Any) -> Self {
2821 Self {
2822 region_id,
2823 reg_ext_value,
2824 }
2825 }
2826 }
2827 #[doc = " Inner type "]
2828 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2829 #[rasn(delegate, size("1..=4"))]
2830 pub struct RTCMcorrectionsRegional(pub SequenceOf<AnonymousRTCMcorrectionsRegional>);
2831
2832 #[doc = "This DF is used to encapsulate RTCM differential corrections for GPS and other radio"]
2833 #[doc = "navigation signals as defined by the RTCM (Radio Technical Commission For Maritime Services) special committee"]
2834 #[doc = "number 104 in its various standards. Here, in the work of DSRC, these messages are \"wrapped\" for transport on the"]
2835 #[doc = "DSRC media, and then can be re-constructed back into the final expected formats defined by the RTCM standard and"]
2836 #[doc = "used directly by various positioning systems to increase the absolute and relative accuracy estimates produced."]
2837 #[doc = "- @field msgCnt: monotonic incrementing identifier."]
2838 #[doc = "- @field rev: the specific edition of the standard that is being sent."]
2839 #[doc = "- @field timeStamp: time reference"]
2840 #[doc = "- @field anchorPoint: Observer position, if needed."]
2841 #[doc = "- @field rtcmHeader: Precise antenna position and noise data for a rover"]
2842 #[doc = "- @field msgs: one or more RTCM messages."]
2843 #[doc = "- @field regional: optional region specific data."]
2844 #[doc = "\n\n@category: Infrastructure information"]
2845 #[doc = "\n\n@revision: V1.3.1"]
2846 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2847 #[rasn(automatic_tags)]
2848 #[non_exhaustive]
2849 pub struct RTCMcorrections {
2850 #[rasn(identifier = "msgCnt")]
2851 pub msg_cnt: MsgCount,
2852 pub rev: RTCMRevision,
2853 #[rasn(identifier = "timeStamp")]
2854 pub time_stamp: Option<MinuteOfTheYear>,
2855 #[rasn(identifier = "anchorPoint")]
2856 pub anchor_point: Option<FullPositionVector>,
2857 #[rasn(identifier = "rtcmHeader")]
2858 pub rtcm_header: Option<RTCMheader>,
2859 pub msgs: RTCMmessageList,
2860 pub regional: Option<RTCMcorrectionsRegional>,
2861 }
2862 impl RTCMcorrections {
2863 pub fn new(
2864 msg_cnt: MsgCount,
2865 rev: RTCMRevision,
2866 time_stamp: Option<MinuteOfTheYear>,
2867 anchor_point: Option<FullPositionVector>,
2868 rtcm_header: Option<RTCMheader>,
2869 msgs: RTCMmessageList,
2870 regional: Option<RTCMcorrectionsRegional>,
2871 ) -> Self {
2872 Self {
2873 msg_cnt,
2874 rev,
2875 time_stamp,
2876 anchor_point,
2877 rtcm_header,
2878 msgs,
2879 regional,
2880 }
2881 }
2882 }
2883
2884 #[doc = "This DF is a collection of data values used to convey RTCM information between users. It"]
2885 #[doc = "is not required or used when sending RTCM data from a corrections source to end users (from a base station to devices"]
2886 #[doc = "deployed in the field which are called rovers)."]
2887 #[doc = "\n\n@category: Infrastructure information"]
2888 #[doc = "\n\n@revision: V1.3.1"]
2889 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2890 #[rasn(automatic_tags)]
2891 pub struct RTCMheader {
2892 pub status: GNSSstatus,
2893 #[rasn(identifier = "offsetSet")]
2894 pub offset_set: AntennaOffsetSet,
2895 }
2896 impl RTCMheader {
2897 pub fn new(status: GNSSstatus, offset_set: AntennaOffsetSet) -> Self {
2898 Self { status, offset_set }
2899 }
2900 }
2901
2902 #[doc = "This DE contains the stream of octets of the actual RTCM message that is being sent."]
2903 #[doc = "The message’s contents are defined in RTCM Standard 10403.1 and in RTCM Standard 10402.1 and its successors."]
2904 #[doc = "Note that most RTCM messages are considerably smaller than the size limit defined here, but that some messages may"]
2905 #[doc = "need to be broken into smaller messages (as per the rules defined in the RTCM work) in order to be transmitted over DSRC."]
2906 #[doc = "\n\n@category: Infrastructure information"]
2907 #[doc = "\n\n@revision: V1.3.1"]
2908 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2909 #[rasn(delegate, size("1..=1023"))]
2910 pub struct RTCMmessage(pub OctetString);
2911
2912 #[doc = "This DF consists of a list of @ref RTCMmessage entries."]
2913 #[doc = "\n\n@category: Infrastructure information"]
2914 #[doc = "\n\n@revision: V1.3.1"]
2915 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2916 #[rasn(delegate, size("1..=5"))]
2917 pub struct RTCMmessageList(pub SequenceOf<RTCMmessage>);
2918
2919 #[doc = "This DE is used to define regions where unique additional content may be added and"]
2920 #[doc = "used in the message set. The index values defined below represent various regions known at the time of publication. This"]
2921 #[doc = "list is expected to grow over time. The index values assigned here can be augmented by local (uncoordinated)"]
2922 #[doc = "assignments in the allowed range. It should be noted that such a local value is specified in the \"REGION\" ASN module, so"]
2923 #[doc = "there is no need to edit the DSRC ASN specification of the standard. This process is further described in Section 11.1."]
2924 #[doc = "- `noRegion` - 0: Use default supplied stubs"]
2925 #[doc = "- `addGrpA` - 1: USA"]
2926 #[doc = "- `addGrpB` - 2: Japan"]
2927 #[doc = "- `addGrpC` - 3: EU"]
2928 #[doc = "\n\n@note: new registered regional IDs will be added here"]
2929 #[doc = " The values 128 and above are for local region use"]
2930 #[doc = "\n\n@category: Infrastructure information"]
2931 #[doc = "\n\n@revision: V1.3.1"]
2932 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2933 #[rasn(delegate, value("0..=255"))]
2934 pub struct RegionId(pub u8);
2935
2936 #[doc = "This DF is used to convey a regulatory speed about a lane, lanes, or roadway segment."]
2937 #[doc = "- @field type: The type of regulatory speed which follows"]
2938 #[doc = "- @field speed: The speed in units of 0.02 m/s"]
2939 #[doc = "\n\n@category: Infrastructure information"]
2940 #[doc = "\n\n@revision: V1.3.1"]
2941 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2942 #[rasn(automatic_tags)]
2943 pub struct RegulatorySpeedLimit {
2944 #[rasn(identifier = "type")]
2945 pub r_type: SpeedLimitType,
2946 pub speed: Velocity,
2947 }
2948 impl RegulatorySpeedLimit {
2949 pub fn new(r_type: SpeedLimitType, speed: Velocity) -> Self {
2950 Self { r_type, speed }
2951 }
2952 }
2953
2954 #[doc = "This DE is used to provide the R09 reporting point."]
2955 #[doc = "\n\n@category: Infrastructure information"]
2956 #[doc = "\n\n@revision: V2.2.1"]
2957 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2958 #[rasn(delegate, value("0..=65535"))]
2959 pub struct ReportingPoint(pub u16);
2960
2961 #[doc = "This DE is used to provide a unique ID between two parties for various dialog exchanges."]
2962 #[doc = "Combined with the sender's VehicleID (consisting of a TempID or a Station ID), this provides a unique string for some"]
2963 #[doc = "mutually defined period of time. A typical example of use would be a signal preemption or priority request dialog"]
2964 #[doc = "containing multiple requests from one sender (denoted by the unique RequestID with each). When such a request is"]
2965 #[doc = "processed and reflected in the signal status messages, the original sender and the specific request can both be determined."]
2966 #[doc = "\n\n@note: In typical use, this value is simply incremented in a modulo fashion to ensure a unique stream of values for the"]
2967 #[doc = " device creating it. Any needs for uniqueness across multiple dialogs to one or more parties shall be the responsibility of"]
2968 #[doc = " the device to manage. There are often normative restrictions on the device changing its TempID during various dialogs"]
2969 #[doc = " when this data element is used. Further details of these operational concepts can be found in the relevant standards."]
2970 #[doc = "\n\n@category: Infrastructure information"]
2971 #[doc = "\n\n@revision: V1.3.1"]
2972 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
2973 #[rasn(delegate, value("0..=255"))]
2974 pub struct RequestID(pub u8);
2975
2976 #[doc = "This DE is used to state what type of signal request is being made to a signal"]
2977 #[doc = "controller by a DSRC device in a defined role (such as a police vehicle). The levels of the request typically convey a"]
2978 #[doc = "sense of urgency or importance with respect to other demands to allow the controller to use predefined business rules to"]
2979 #[doc = "determine how to respond. These rules will vary in terms of how details of overall importance and urgency are to be"]
2980 #[doc = "ranked, so they are to be implemented locally. As a result of this regional process, the list below should be assigned well-"]
2981 #[doc = "defined meanings by the local deployment. These meaning will typically result in assigning a set of values to list for each"]
2982 #[doc = "vehicle role type that is to be supported."]
2983 #[doc = "- `requestImportanceLevel1` 1: The least important request"]
2984 #[doc = "- `requestImportanceLevel14` 14: The most important request"]
2985 #[doc = "- `requestImportanceReserved` 15: Reserved for future use"]
2986 #[doc = "\n\n@category: Infrastructure information"]
2987 #[doc = "\n\n@revision: V1.3.1"]
2988 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
2989 #[rasn(enumerated)]
2990 pub enum RequestImportanceLevel {
2991 requestImportanceLevelUnKnown = 0,
2992 requestImportanceLevel1 = 1,
2993 requestImportanceLevel2 = 2,
2994 requestImportanceLevel3 = 3,
2995 requestImportanceLevel4 = 4,
2996 requestImportanceLevel5 = 5,
2997 requestImportanceLevel6 = 6,
2998 requestImportanceLevel7 = 7,
2999 requestImportanceLevel8 = 8,
3000 requestImportanceLevel9 = 9,
3001 requestImportanceLevel10 = 10,
3002 requestImportanceLevel11 = 11,
3003 requestImportanceLevel12 = 12,
3004 requestImportanceLevel13 = 13,
3005 requestImportanceLevel14 = 14,
3006 requestImportanceReserved = 15,
3007 }
3008
3009 #[doc = "This DE is used to further define the details of the role which any DSRC device might"]
3010 #[doc = "play when making a request to a signal controller. This value is not always needed. For example, perhaps in a"]
3011 #[doc = "deployment all police vehicles are to be treated equally. The taxonomy of what details are selected to be entered into the"]
3012 #[doc = "list is a regional choice but should be devised to allow the controller to use predefined business rules to respond using the"]
3013 #[doc = "data. As another example, perhaps in a regional deployment a cross-city express type of transit vehicle is given a different"]
3014 #[doc = "service response for the same request than another type of transit vehicle making an otherwise similar request. As a"]
3015 #[doc = "result of this regional process, the list below should be assigned well-defined meanings by the local deployment. These"]
3016 #[doc = "meanings will typically result in assigning a set of values to list for each vehicle role type that is to be supported."]
3017 #[doc = "- `requestSubRole1` - 1: The first type of sub role"]
3018 #[doc = "- `requestSubRole14` - 14: The last type of sub role"]
3019 #[doc = "- `requestSubRoleReserved` - 15: Reserved for future use"]
3020 #[doc = "\n\n@category: Infrastructure information"]
3021 #[doc = "\n\n@revision: V1.3.1"]
3022 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
3023 #[rasn(enumerated)]
3024 pub enum RequestSubRole {
3025 requestSubRoleUnKnown = 0,
3026 requestSubRole1 = 1,
3027 requestSubRole2 = 2,
3028 requestSubRole3 = 3,
3029 requestSubRole4 = 4,
3030 requestSubRole5 = 5,
3031 requestSubRole6 = 6,
3032 requestSubRole7 = 7,
3033 requestSubRole8 = 8,
3034 requestSubRole9 = 9,
3035 requestSubRole10 = 10,
3036 requestSubRole11 = 11,
3037 requestSubRole12 = 12,
3038 requestSubRole13 = 13,
3039 requestSubRole14 = 14,
3040 requestSubRoleReserved = 15,
3041 }
3042 #[doc = " Anonymous SEQUENCE OF member "]
3043 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3044 #[rasn(automatic_tags, identifier = "SEQUENCE")]
3045 pub struct AnonymousRequestorDescriptionRegional {
3046 #[rasn(identifier = "regionId")]
3047 pub region_id: RegionId,
3048 #[rasn(identifier = "regExtValue")]
3049 pub reg_ext_value: Any,
3050 }
3051 impl AnonymousRequestorDescriptionRegional {
3052 pub fn new(region_id: RegionId, reg_ext_value: Any) -> Self {
3053 Self {
3054 region_id,
3055 reg_ext_value,
3056 }
3057 }
3058 }
3059 #[doc = " Inner type "]
3060 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3061 #[rasn(delegate, size("1..=4"))]
3062 pub struct RequestorDescriptionRegional(pub SequenceOf<AnonymousRequestorDescriptionRegional>);
3063 #[doc = " Inner type "]
3064 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3065 #[rasn(automatic_tags)]
3066 pub struct RequestorDescriptionExtGroupOcit {
3067 pub ocit: OcitRequestorDescriptionContainer,
3068 }
3069 impl RequestorDescriptionExtGroupOcit {
3070 pub fn new(ocit: OcitRequestorDescriptionContainer) -> Self {
3071 Self { ocit }
3072 }
3073 }
3074
3075 #[doc = "This DF is used to provide identity information about a selected vehicle or users."]
3076 #[doc = "This data frame is typically used with fleet type vehicles which can (or which must) safely release such information for use"]
3077 #[doc = "with probe measurements or with other interactions (such as a signal request)."]
3078 #[doc = "- @field id: The ID used in the CAM of the requestor. This ID is presumed not to change during the exchange."]
3079 #[doc = "- @field type: Information regarding all type and class data about the requesting vehicle"]
3080 #[doc = "- @field position: The location of the requesting vehicle"]
3081 #[doc = "- @field name: A human readable name for debugging use"]
3082 #[doc = "- @field routeName: A string for transit operations use"]
3083 #[doc = "- @field transitStatus: current vehicle state (loading, etc.)"]
3084 #[doc = "- @field transitOccupancy: current vehicle occupancy"]
3085 #[doc = "- @field transitSchedule: current vehicle schedule adherence"]
3086 #[doc = "- @field regional: optional region specific data."]
3087 #[doc = "- @field ocit: Extension container for Legacy R09 data (as defined by)."]
3088 #[doc = "\n\n@note: Note that the requestor description elements which are used when the request (the req) is made differ from"]
3089 #[doc = " those used when the status of an active or pending request is reported (the ack). Typically, when reporting the status to"]
3090 #[doc = " other parties, less information is required and only the temporaryID (contained in the VehicleID) and request number (a"]
3091 #[doc = " unique ID used in the orginal request) are used."]
3092 #[doc = "\n\n@category: Infrastructure information"]
3093 #[doc = "\n\n@revision: V1.3.1"]
3094 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3095 #[rasn(automatic_tags)]
3096 #[non_exhaustive]
3097 pub struct RequestorDescription {
3098 pub id: VehicleID,
3099 #[rasn(identifier = "type")]
3100 pub r_type: Option<RequestorType>,
3101 pub position: Option<RequestorPositionVector>,
3102 pub name: Option<DescriptiveName>,
3103 #[rasn(identifier = "routeName")]
3104 pub route_name: Option<DescriptiveName>,
3105 #[rasn(identifier = "transitStatus")]
3106 pub transit_status: Option<TransitVehicleStatus>,
3107 #[rasn(identifier = "transitOccupancy")]
3108 pub transit_occupancy: Option<TransitVehicleOccupancy>,
3109 #[rasn(identifier = "transitSchedule")]
3110 pub transit_schedule: Option<DeltaTime>,
3111 pub regional: Option<RequestorDescriptionRegional>,
3112 #[rasn(extension_addition_group, identifier = "SEQUENCE")]
3113 pub ext_group_ocit: Option<RequestorDescriptionExtGroupOcit>,
3114 }
3115 impl RequestorDescription {
3116 pub fn new(
3117 id: VehicleID,
3118 r_type: Option<RequestorType>,
3119 position: Option<RequestorPositionVector>,
3120 name: Option<DescriptiveName>,
3121 route_name: Option<DescriptiveName>,
3122 transit_status: Option<TransitVehicleStatus>,
3123 transit_occupancy: Option<TransitVehicleOccupancy>,
3124 transit_schedule: Option<DeltaTime>,
3125 regional: Option<RequestorDescriptionRegional>,
3126 ext_group_ocit: Option<RequestorDescriptionExtGroupOcit>,
3127 ) -> Self {
3128 Self {
3129 id,
3130 r_type,
3131 position,
3132 name,
3133 route_name,
3134 transit_status,
3135 transit_occupancy,
3136 transit_schedule,
3137 regional,
3138 ext_group_ocit,
3139 }
3140 }
3141 }
3142
3143 #[doc = "This DF provides a report of the requestor's position, speed, and heading."]
3144 #[doc = "Used by a vehicle or other type of user to request services and at other times when the larger FullPositionVector is not required."]
3145 #[doc = "\n\n@category: Infrastructure information"]
3146 #[doc = "\n\n@revision: V1.3.1"]
3147 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3148 #[rasn(automatic_tags)]
3149 #[non_exhaustive]
3150 pub struct RequestorPositionVector {
3151 pub position: Position3D,
3152 pub heading: Option<Angle>,
3153 pub speed: Option<TransmissionAndSpeed>,
3154 }
3155 impl RequestorPositionVector {
3156 pub fn new(
3157 position: Position3D,
3158 heading: Option<Angle>,
3159 speed: Option<TransmissionAndSpeed>,
3160 ) -> Self {
3161 Self {
3162 position,
3163 heading,
3164 speed,
3165 }
3166 }
3167 }
3168 #[doc = " Inner type "]
3169 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3170 #[rasn(automatic_tags)]
3171 pub struct RequestorTypeRegional {
3172 #[rasn(identifier = "regionId")]
3173 pub region_id: RegionId,
3174 #[rasn(identifier = "regExtValue")]
3175 pub reg_ext_value: Any,
3176 }
3177 impl RequestorTypeRegional {
3178 pub fn new(region_id: RegionId, reg_ext_value: Any) -> Self {
3179 Self {
3180 region_id,
3181 reg_ext_value,
3182 }
3183 }
3184 }
3185
3186 #[doc = "This DF is used when a DSRC-equipped device is requesting service from another"]
3187 #[doc = "device. The most common use case is when a vehicle is requesting a signal preemption or priority service call from the"]
3188 #[doc = "signal controller in an intersection. This data frame provides the details of the requestor class taxonomy required to"]
3189 #[doc = "support the request. Depending on the precise use case and the local implementation, these details can vary"]
3190 #[doc = "considerably. As a result, besides the basic role of the vehicle, the other classification systems supported are optional. It"]
3191 #[doc = "should also be observed that often only a subset of the information in the RequestorType data frame is used to report the"]
3192 #[doc = "\"results\" of such a request to others. As an example, a police vehicle might request service based on being in a police"]
3193 #[doc = "vehicle role (and any further sub-type if required) and on the type of service call to which the vehicle is then responding"]
3194 #[doc = "(perhaps a greater degree of emergency than another type of call), placing these information elements in the"]
3195 #[doc = "RequestorType, which is then part of the Signal Request Message (SRM). This allows the roadway operator to define"]
3196 #[doc = "suitable business rules regarding how to reply. When informing the requestor and other nearby drivers of the outcome,"]
3197 #[doc = "using the Signal Status Message (SSM) message, only the fact that the preemption was granted or denied to some"]
3198 #[doc = "vehicle with a unique request ID is conveyed."]
3199 #[doc = "- @field role: Basic role of this user at this time."]
3200 #[doc = "- @field subrole: A local list with role based items."]
3201 #[doc = "- @field request: A local list with request items"]
3202 #[doc = "- @field iso3883: Additional classification details"]
3203 #[doc = "- @field hpmsType: HPMS classification types"]
3204 #[doc = "- @field regional: optional region specific data."]
3205 #[doc = "\n\n@category: Infrastructure information"]
3206 #[doc = "\n\n@revision: V1.3.1"]
3207 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3208 #[rasn(automatic_tags)]
3209 #[non_exhaustive]
3210 pub struct RequestorType {
3211 pub role: BasicVehicleRole,
3212 pub subrole: Option<RequestSubRole>,
3213 pub request: Option<RequestImportanceLevel>,
3214 pub iso3883: Option<Iso3833VehicleType>,
3215 #[rasn(identifier = "hpmsType")]
3216 pub hpms_type: Option<VehicleType>,
3217 pub regional: Option<RequestorTypeRegional>,
3218 }
3219 impl RequestorType {
3220 pub fn new(
3221 role: BasicVehicleRole,
3222 subrole: Option<RequestSubRole>,
3223 request: Option<RequestImportanceLevel>,
3224 iso3883: Option<Iso3833VehicleType>,
3225 hpms_type: Option<VehicleType>,
3226 regional: Option<RequestorTypeRegional>,
3227 ) -> Self {
3228 Self {
3229 role,
3230 subrole,
3231 request,
3232 iso3883,
3233 hpms_type,
3234 regional,
3235 }
3236 }
3237 }
3238
3239 #[doc = "The RestrictionAppliesTo data element provides a short list of common vehicle types which may have one or more"]
3240 #[doc = "special movements at an intersection. In general, these movements are not visible to other traffic with signal heads, but"]
3241 #[doc = "the SPAT data reflects the state of the movement. Various restricted movements at an intersection can be expressed"]
3242 #[doc = "using this element to indicate where the movement applies."]
3243 #[doc = "- `none` : applies to nothing"]
3244 #[doc = "- `equippedTransit`: buses etc."]
3245 #[doc = "- `equippedTaxis`:"]
3246 #[doc = "- `equippedOther`: other vehicle types with necessary signal phase state reception equipment"]
3247 #[doc = "- `emissionCompliant`: regional variants with more definitive items also exist"]
3248 #[doc = "- `equippedBicycle`:"]
3249 #[doc = "- `weightCompliant`:"]
3250 #[doc = "- `heightCompliant`: Items dealing with traveler needs serviced by the infrastructure. These end users (which are not vehicles) are presumed to be suitably equipped"]
3251 #[doc = "- `pedestrians`:"]
3252 #[doc = "- `slowMovingPersons`:"]
3253 #[doc = "- `wheelchairUsers`:"]
3254 #[doc = "- `visualDisabilities`:"]
3255 #[doc = "- `audioDisabilities`: hearing"]
3256 #[doc = "\n\n@category: Infrastructure information"]
3257 #[doc = "\n\n@revision: V1.3.1"]
3258 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
3259 #[rasn(enumerated)]
3260 #[non_exhaustive]
3261 pub enum RestrictionAppliesTo {
3262 none = 0,
3263 equippedTransit = 1,
3264 equippedTaxis = 2,
3265 equippedOther = 3,
3266 emissionCompliant = 4,
3267 equippedBicycle = 5,
3268 weightCompliant = 6,
3269 heightCompliant = 7,
3270 pedestrians = 8,
3271 slowMovingPersons = 9,
3272 wheelchairUsers = 10,
3273 visualDisabilities = 11,
3274 audioDisabilities = 12,
3275 otherUnknownDisabilities = 13,
3276 }
3277
3278 #[doc = "This DF is used to assign (or bind) a single RestrictionClassID data"]
3279 #[doc = "element to a list of all user classes to which it applies. A collection of these bindings is conveyed in the"]
3280 #[doc = "RestrictionClassList data frame in the MAP message to travelers. The established index is then used in the lane object of"]
3281 #[doc = "the MAP message, in the ConnectTo data frame, to qualify to whom a signal group ID applies when it is sent by the SPAT"]
3282 #[doc = "message about a movement."]
3283 #[doc = "- @field id: the unique value (within an intersection or local region) that is assigned to this group of users."]
3284 #[doc = "- @field users: The list of user types/classes to which this restriction ID applies."]
3285 #[doc = "\n\n@category: Infrastructure information"]
3286 #[doc = "\n\n@revision: V1.3.1"]
3287 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3288 #[rasn(automatic_tags)]
3289 pub struct RestrictionClassAssignment {
3290 pub id: RestrictionClassID,
3291 pub users: RestrictionUserTypeList,
3292 }
3293 impl RestrictionClassAssignment {
3294 pub fn new(id: RestrictionClassID, users: RestrictionUserTypeList) -> Self {
3295 Self { id, users }
3296 }
3297 }
3298
3299 #[doc = "This DE defines an intersection-unique value to convey data about classes of users."]
3300 #[doc = "The mapping used varies with each intersection and is defined in the MAP message if needed. The defined mappings"]
3301 #[doc = "found there are used to determine when a given class is meant. The typical use of this element is to map additional"]
3302 #[doc = "movement restrictions or rights (in both the MAP and SPAT messages) to special classes of users (trucks, high sided"]
3303 #[doc = "vehicles, special vehicles etc.). There is the general presumption that in the absence of this data, any allowed movement"]
3304 #[doc = "extends to all users."]
3305 #[doc = "An index value to identify data about classes of users the value used varies with each intersection's"]
3306 #[doc = "needs and is defined in the map to the assigned classes of supported users."]
3307 #[doc = "\n\n@category: Infrastructure information"]
3308 #[doc = "\n\n@revision: V1.3.1"]
3309 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3310 #[rasn(delegate, value("0..=255"))]
3311 pub struct RestrictionClassID(pub u8);
3312
3313 #[doc = "This DF is used to enumerate a list of user classes which belong to a given"]
3314 #[doc = "assigned index. The resulting collection is treated as a group by the signal controller when it issues movement data"]
3315 #[doc = "(signal phase information) with the GroupID for this group. This data frame is typically static for long periods of time"]
3316 #[doc = "(months) and conveyed to the user by means of the MAP message."]
3317 #[doc = "\n\n@note: The overall restriction class assignment process allows dynamic support within the framework of the common"]
3318 #[doc = " message set for the various special cases that some signalized intersections must support. While the assigned value"]
3319 #[doc = " needs to be unique only within the scope of the intersection that uses it, the resulting assignment lists will tend to be static"]
3320 #[doc = " and stable for regional deployment areas such as a metropolitan area based on their operational practices and needs."]
3321 #[doc = "\n\n@category: Infrastructure information"]
3322 #[doc = "\n\n@revision: V1.3.1"]
3323 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3324 #[rasn(delegate, size("1..=254"))]
3325 pub struct RestrictionClassList(pub SequenceOf<RestrictionClassAssignment>);
3326 #[doc = " Anonymous SEQUENCE OF member "]
3327 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3328 #[rasn(automatic_tags, identifier = "SEQUENCE")]
3329 pub struct AnonymousRestrictionUserTypeRegional {
3330 #[rasn(identifier = "regionId")]
3331 pub region_id: RegionId,
3332 #[rasn(identifier = "regExtValue")]
3333 pub reg_ext_value: Any,
3334 }
3335 impl AnonymousRestrictionUserTypeRegional {
3336 pub fn new(region_id: RegionId, reg_ext_value: Any) -> Self {
3337 Self {
3338 region_id,
3339 reg_ext_value,
3340 }
3341 }
3342 }
3343 #[doc = " Inner type "]
3344 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3345 #[rasn(delegate, size("1..=4"))]
3346 pub struct RestrictionUserTypeRegional(pub SequenceOf<AnonymousRestrictionUserTypeRegional>);
3347
3348 #[doc = "This DF is used to provide a means to select one, and only one, user type or class"]
3349 #[doc = "from a number of well-known lists. The selected entry is then used in the overall Restriction Class assignment process to"]
3350 #[doc = "indicate that a given GroupID (a way of expressing a movement in the SPAT/MAP system) applies to (is restricted to) this"]
3351 #[doc = "class of user."]
3352 #[doc = "- @field basicType: a set of the most commonly used types."]
3353 #[doc = "- @field regional: optional region specific data."]
3354 #[doc = "\n\n@category: Infrastructure information"]
3355 #[doc = "\n\n@revision: V1.3.1"]
3356 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3357 #[rasn(choice, automatic_tags)]
3358 #[non_exhaustive]
3359 pub enum RestrictionUserType {
3360 basicType(RestrictionAppliesTo),
3361 regional(RestrictionUserTypeRegional),
3362 }
3363
3364 #[doc = "This DF consists of a list of @ref RestrictionUserType entries."]
3365 #[doc = "\n\n@category: Infrastructure information"]
3366 #[doc = "\n\n@revision: V1.3.1"]
3367 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3368 #[rasn(delegate, size("1..=16"))]
3369 pub struct RestrictionUserTypeList(pub SequenceOf<RestrictionUserType>);
3370
3371 #[doc = "This DF consists of a list of GenericLane entries used to describe a segment of roadway."]
3372 #[doc = "\n\n@category: Infrastructure information"]
3373 #[doc = "\n\n@revision: V1.3.1"]
3374 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3375 #[rasn(delegate, size("1..=255"))]
3376 pub struct RoadLaneSetList(pub SequenceOf<GenericLane>);
3377
3378 #[doc = "This DE is a 16-bit globally unique identifier assigned to an entity responsible for assigning"]
3379 #[doc = "Intersection IDs in the region over which it has such authority. The value zero shall be used for testing, and should only be"]
3380 #[doc = "used in the absence of a suitable assignment. A single entity which assigns intersection IDs may be assigned several"]
3381 #[doc = "RoadRegulatorIDs. These assignments are presumed to be permanent."]
3382 #[doc = "The value zero shall be used for testing only"]
3383 #[doc = "\n\n@category: Infrastructure information"]
3384 #[doc = "\n\n@revision: V1.3.1"]
3385 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3386 #[rasn(delegate, value("0..=65535"))]
3387 pub struct RoadRegulatorID(pub u16);
3388 #[doc = " Anonymous SEQUENCE OF member "]
3389 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3390 #[rasn(automatic_tags, identifier = "SEQUENCE")]
3391 pub struct AnonymousRoadSegmentRegional {
3392 #[rasn(identifier = "regionId")]
3393 pub region_id: RegionId,
3394 #[rasn(identifier = "regExtValue")]
3395 pub reg_ext_value: Any,
3396 }
3397 impl AnonymousRoadSegmentRegional {
3398 pub fn new(region_id: RegionId, reg_ext_value: Any) -> Self {
3399 Self {
3400 region_id,
3401 reg_ext_value,
3402 }
3403 }
3404 }
3405 #[doc = " Inner type "]
3406 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3407 #[rasn(delegate, size("1..=4"))]
3408 pub struct RoadSegmentRegional(pub SequenceOf<AnonymousRoadSegmentRegional>);
3409
3410 #[doc = "This DF is a complete description of a RoadSegment including its geometry and its"]
3411 #[doc = "allowed navigational paths (independent of any additional regulatory restrictions that may apply over time or from user"]
3412 #[doc = "classification) and any current disruptions such as a work zone or incident event."]
3413 #[doc = "- @field name: some descriptive text."]
3414 #[doc = "- @field id: a globally unique value for the segment."]
3415 #[doc = "- @field revision: ."]
3416 #[doc = "- @field refPoint: the reference from which subsequent data points are offset until a new point is used."]
3417 #[doc = "- @field laneWidth: Reference width used by all subsequent lanes unless a new width is given."]
3418 #[doc = "- @field speedLimits: Reference regulatory speed limits used by all subsequent lanes unless a new speed is given."]
3419 #[doc = "- @field roadLaneSet: Data describing disruptions in the RoadSegment such as work zones etc will be added here."]
3420 #[doc = "- @field regional: optional region specific data."]
3421 #[doc = "\n\n@category: Infrastructure information"]
3422 #[doc = "\n\n@revision: V1.3.1"]
3423 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3424 #[rasn(automatic_tags)]
3425 #[non_exhaustive]
3426 pub struct RoadSegment {
3427 pub name: Option<DescriptiveName>,
3428 pub id: RoadSegmentReferenceID,
3429 pub revision: MsgCount,
3430 #[rasn(identifier = "refPoint")]
3431 pub ref_point: Position3D,
3432 #[rasn(identifier = "laneWidth")]
3433 pub lane_width: Option<LaneWidth>,
3434 #[rasn(identifier = "speedLimits")]
3435 pub speed_limits: Option<SpeedLimitList>,
3436 #[rasn(identifier = "roadLaneSet")]
3437 pub road_lane_set: RoadLaneSetList,
3438 pub regional: Option<RoadSegmentRegional>,
3439 }
3440 impl RoadSegment {
3441 pub fn new(
3442 name: Option<DescriptiveName>,
3443 id: RoadSegmentReferenceID,
3444 revision: MsgCount,
3445 ref_point: Position3D,
3446 lane_width: Option<LaneWidth>,
3447 speed_limits: Option<SpeedLimitList>,
3448 road_lane_set: RoadLaneSetList,
3449 regional: Option<RoadSegmentRegional>,
3450 ) -> Self {
3451 Self {
3452 name,
3453 id,
3454 revision,
3455 ref_point,
3456 lane_width,
3457 speed_limits,
3458 road_lane_set,
3459 regional,
3460 }
3461 }
3462 }
3463
3464 #[doc = "This DE is used to uniquely define a section of roadway within a country or region in a 16-bit field."]
3465 #[doc = "Assignment rules for this value are established elsewhere and may use regional assignment schemas that vary. Within"]
3466 #[doc = "the region the policies used to ensure an assigned value’s uniqueness before that value is reused is the responsibility of"]
3467 #[doc = "that region. Such reuse is expected to occur, but over somewhat lengthy epoch (months)."]
3468 #[doc = "The values zero to 255 shall be used for testing only"]
3469 #[doc = "Note that the value assigned to an RoadSegment will be"]
3470 #[doc = "unique within a given regional ID only during its use"]
3471 #[doc = "\n\n@category: Infrastructure information"]
3472 #[doc = "\n\n@revision: V1.3.1"]
3473 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3474 #[rasn(delegate, value("0..=65535"))]
3475 pub struct RoadSegmentID(pub u16);
3476
3477 #[doc = "This DF consists of a list of @ref RoadSegment entries."]
3478 #[doc = "\n\n@category: Infrastructure information"]
3479 #[doc = "\n\n@revision: V1.3.1"]
3480 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3481 #[rasn(delegate, size("1..=32"))]
3482 pub struct RoadSegmentList(pub SequenceOf<RoadSegment>);
3483
3484 #[doc = "This DF is used to convey theRoadSegmentID which is unique to a given road segment of interest,"]
3485 #[doc = "and also the RoadRegulatorID assigned to the region in which it is operating (when required)."]
3486 #[doc = "- @field region: a globally unique regional assignment value typically assigned to a regional DOT authority the value zero shall be used for testing needs."]
3487 #[doc = "- @field id: a unique mapping to the road segment in question within the above region of use during its period of assignment and use"]
3488 #[doc = " note that unlike intersectionID values, this value can be reused by the region."]
3489 #[doc = "\n\n@category: Infrastructure information"]
3490 #[doc = "\n\n@revision: V1.3.1"]
3491 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3492 #[rasn(automatic_tags)]
3493 pub struct RoadSegmentReferenceID {
3494 pub region: Option<RoadRegulatorID>,
3495 pub id: RoadSegmentID,
3496 }
3497 impl RoadSegmentReferenceID {
3498 pub fn new(region: Option<RoadRegulatorID>, id: RoadSegmentID) -> Self {
3499 Self { region, id }
3500 }
3501 }
3502
3503 #[doc = "The RoadwayCrownAngle data element relates the gross tangential angle of the roadway surface with respect to"]
3504 #[doc = "the local horizontal axis and is measured at the indicated part of the lane. This measurement is typically made at the"]
3505 #[doc = "crown (centerline) or at an edge of the lane path. Its typical use is to relate data used in speed warning and traction"]
3506 #[doc = "calculations for the lane segment or roadway segment in which the measurement is taken."]
3507 #[doc = "- The value -128 shall be used for unknown"]
3508 #[doc = "- The value zero shall be used for angles which are between -0.15 and +0.15"]
3509 #[doc = "\n\n@unit: 0.3 degrees of angle over a range of -38.1 to + 38.1 degrees"]
3510 #[doc = "\n\n@category: Infrastructure information"]
3511 #[doc = "\n\n@revision: V1.3.1"]
3512 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3513 #[rasn(delegate, value("-128..=127"))]
3514 pub struct RoadwayCrownAngle(pub i8);
3515
3516 #[doc = "This DE is used to provide the R09 route information."]
3517 #[doc = "\n\n@category: Infrastructure information"]
3518 #[doc = "\n\n@revision: V2.2.1"]
3519 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3520 #[rasn(delegate, value("0..=4294967295"))]
3521 pub struct RouteNumber(pub u32);
3522 #[doc = " Anonymous SEQUENCE OF member "]
3523 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3524 #[rasn(automatic_tags, identifier = "SEQUENCE")]
3525 pub struct AnonymousSPATRegional {
3526 #[rasn(identifier = "regionId")]
3527 pub region_id: RegionId,
3528 #[rasn(identifier = "regExtValue")]
3529 pub reg_ext_value: Any,
3530 }
3531 impl AnonymousSPATRegional {
3532 pub fn new(region_id: RegionId, reg_ext_value: Any) -> Self {
3533 Self {
3534 region_id,
3535 reg_ext_value,
3536 }
3537 }
3538 }
3539 #[doc = " Inner type "]
3540 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3541 #[rasn(delegate, size("1..=4"))]
3542 pub struct SPATRegional(pub SequenceOf<AnonymousSPATRegional>);
3543
3544 #[doc = "This DF is used to convey the current status of one or more signalized"]
3545 #[doc = "intersections. Along with the MapData message (which describes a full geometric layout of an intersection) the"]
3546 #[doc = "receiver of this message can determine the state of the signal phasing and when the next expected phase will occur."]
3547 #[doc = "The SPAT message sends the current movement state of each active phase in the system as needed (such as values of"]
3548 #[doc = "what states are active and values at what time a state has begun/does begin earliest, is expected to begin most likely and"]
3549 #[doc = "will end latest). The state of inactive movements is not normally transmitted. Movements are mapped to specific"]
3550 #[doc = "approaches and connections of ingress to egress lanes and by use of the SignalGroupID in the MapData message"]
3551 #[doc = "The current signal preemption and priority status values (when present or active) are also sent. A more complete"]
3552 #[doc = "summary of any pending priority or preemption events can be found in the Signal Status message."]
3553 #[doc = "- @field timeStamp: time reference"]
3554 #[doc = "- @field name: human readable name for this collection. to be used only in debug mode."]
3555 #[doc = "- @field intersections: sets of SPAT data (one per intersection)"]
3556 #[doc = "- @field regional: optional region specific data."]
3557 #[doc = "\n\n@category: Infrastructure information"]
3558 #[doc = "\n\n@revision: V1.3.1"]
3559 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3560 #[rasn(automatic_tags)]
3561 #[non_exhaustive]
3562 pub struct SPAT {
3563 #[rasn(identifier = "timeStamp")]
3564 pub time_stamp: Option<MinuteOfTheYear>,
3565 pub name: Option<DescriptiveName>,
3566 pub intersections: IntersectionStateList,
3567 pub regional: Option<SPATRegional>,
3568 }
3569 impl SPAT {
3570 pub fn new(
3571 time_stamp: Option<MinuteOfTheYear>,
3572 name: Option<DescriptiveName>,
3573 intersections: IntersectionStateList,
3574 regional: Option<SPATRegional>,
3575 ) -> Self {
3576 Self {
3577 time_stamp,
3578 name,
3579 intersections,
3580 regional,
3581 }
3582 }
3583 }
3584
3585 #[doc = "A 12-bit signed scaling factor supporting scales from zero (which is not used) to >200%. In this data element, the"]
3586 #[doc = "value zero is taken to represent a value of one (scale 1:1). Values above and below this add or remove exactly 0.05%"]
3587 #[doc = "from the initial value of 100%. Hence, a value of 2047 adds 102.35% to 100%, resulting in a scale of 202.35% exactly (the"]
3588 #[doc = "largest valid scale value). Negative values which would result in an effective final value below zero are not supported. The"]
3589 #[doc = "smallest valid value allowed is -1999 and the remaining negative values are reserved for future definition."]
3590 #[doc = "\n\n@unit: in steps of 0.05 percent"]
3591 #[doc = "\n\n@category: Infrastructure information"]
3592 #[doc = "\n\n@revision: V1.3.1"]
3593 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3594 #[rasn(delegate, identifier = "Scale-B12", value("-2048..=2047"))]
3595 pub struct ScaleB12(pub i16);
3596
3597 #[doc = "This DE is an enumerated list of attributes about the current lane segment which"]
3598 #[doc = "may be enabled or disabled to indicate the presence or absence of the selected attribute on the segment. A segment is"]
3599 #[doc = "one or more of the straight lines formed between each set of node points. It is common for a segment attribute to persist"]
3600 #[doc = "for more than one set of node points if there is any curvature in the lane itself. The described attributes are all binary flags"]
3601 #[doc = "in that they do not need to convey any additional data. Other attributes allow sending short data values to reflect a setting"]
3602 #[doc = "which is set and persists in a similar fashion."]
3603 #[doc = "Various values which can be Enabled and Disabled for a lane segment"]
3604 #[doc = "- reserved:"]
3605 #[doc = "- doNotBlock: segment where a vehicle may not come to a stop"]
3606 #[doc = "- whiteLine: segment where lane crossing not allowed such as the final few meters of a lane "]
3607 #[doc = "- mergingLaneLeft: indicates porous lanes"]
3608 #[doc = "- mergingLaneRight: indicates porous lanes"]
3609 #[doc = "- curbOnLeft: indicates presence of curbs"]
3610 #[doc = "- curbOnRight: indicates presence of curbs"]
3611 #[doc = "- loadingzoneOnLeft: loading or drop off zones"]
3612 #[doc = "- loadingzoneOnRight: loading or drop off zones"]
3613 #[doc = "- turnOutPointOnLeft: opening to adjacent street/alley/road"]
3614 #[doc = "- turnOutPointOnRight: opening to adjacent street/alley/road"]
3615 #[doc = "- adjacentParkingOnLeft: side of road parking"]
3616 #[doc = "- adjacentParkingOnRight: side of road parking"]
3617 #[doc = "- adjacentBikeLaneOnLeft: presence of marked bike lanes"]
3618 #[doc = "- adjacentBikeLaneOnRight: presence of marked bike lanes"]
3619 #[doc = "- sharedBikeLane: right of way is shared with bikes who may occupy entire lane width"]
3620 #[doc = "- bikeBoxInFront:"]
3621 #[doc = "- transitStopOnLeft: any form of bus/transit loading, with pull in-out access to lane on left"]
3622 #[doc = "- transitStopOnRight: any form of bus/transit loading, with pull in-out access to lane on right"]
3623 #[doc = "- transitStopInLane: any form of bus/transit loading, in mid path of the lane"]
3624 #[doc = "- sharedWithTrackedVehicle: lane is shared with train or trolley, not used for crossing tracks "]
3625 #[doc = "- safeIsland: begin/end a safety island in path"]
3626 #[doc = "- lowCurbsPresent: for ADA support"]
3627 #[doc = "- rumbleStripPresent: for ADA support"]
3628 #[doc = "- audibleSignalingPresent: for ADA support"]
3629 #[doc = "- adaptiveTimingPresent: for ADA support"]
3630 #[doc = "- rfSignalRequestPresent: Supports RF push to walk technologies"]
3631 #[doc = "- partialCurbIntrusion: path is blocked by a median or curb but at least 1 meter remains open for use"]
3632 #[doc = " and at-grade passage Lane geometry details"]
3633 #[doc = "- taperToLeft: Used to control final path shape (see standard for defined shapes)"]
3634 #[doc = "- taperToRight: Used to control final path shape (see standard for defined shapes)"]
3635 #[doc = "- taperToCenterLine: Used to control final path shape (see standard for defined shapes)"]
3636 #[doc = "- parallelParking: Parking at an angle with the street"]
3637 #[doc = "- headInParking: Parking at an angle with the street"]
3638 #[doc = "- freeParking: No restriction on use of parking"]
3639 #[doc = "- timeRestrictionsOnParking: Parking is not permitted at all times"]
3640 #[doc = " typically used when the 'parking' lane becomes a driving lane at times"]
3641 #[doc = "- costToPark: Used where parking has a cost"]
3642 #[doc = "- midBlockCurbPresent: a protruding curb near lane edge"]
3643 #[doc = "- unEvenPavementPresent: a disjoint height at lane edge"]
3644 #[doc = "\n\n@category: Infrastructure information"]
3645 #[doc = "\n\n@revision: V1.3.1"]
3646 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
3647 #[rasn(enumerated)]
3648 #[non_exhaustive]
3649 pub enum SegmentAttributeXY {
3650 reserved = 0,
3651 doNotBlock = 1,
3652 whiteLine = 2,
3653 mergingLaneLeft = 3,
3654 mergingLaneRight = 4,
3655 curbOnLeft = 5,
3656 curbOnRight = 6,
3657 loadingzoneOnLeft = 7,
3658 loadingzoneOnRight = 8,
3659 turnOutPointOnLeft = 9,
3660 turnOutPointOnRight = 10,
3661 adjacentParkingOnLeft = 11,
3662 adjacentParkingOnRight = 12,
3663 adjacentBikeLaneOnLeft = 13,
3664 adjacentBikeLaneOnRight = 14,
3665 sharedBikeLane = 15,
3666 bikeBoxInFront = 16,
3667 transitStopOnLeft = 17,
3668 transitStopOnRight = 18,
3669 transitStopInLane = 19,
3670 sharedWithTrackedVehicle = 20,
3671 safeIsland = 21,
3672 lowCurbsPresent = 22,
3673 rumbleStripPresent = 23,
3674 audibleSignalingPresent = 24,
3675 adaptiveTimingPresent = 25,
3676 rfSignalRequestPresent = 26,
3677 partialCurbIntrusion = 27,
3678 taperToLeft = 28,
3679 taperToRight = 29,
3680 taperToCenterLine = 30,
3681 parallelParking = 31,
3682 headInParking = 32,
3683 freeParking = 33,
3684 timeRestrictionsOnParking = 34,
3685 costToPark = 35,
3686 midBlockCurbPresent = 36,
3687 unEvenPavementPresent = 37,
3688 }
3689
3690 #[doc = "This DF consists of a list of @ref SegmentAttributeXY entries."]
3691 #[doc = "\n\n@category: Infrastructure information"]
3692 #[doc = "\n\n@revision: V1.3.1"]
3693 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3694 #[rasn(delegate, size("1..=8"))]
3695 pub struct SegmentAttributeXYList(pub SequenceOf<SegmentAttributeXY>);
3696
3697 #[doc = "This DE is used to express the radius (length) of the semi-major axis of an"]
3698 #[doc = "ellipsoid representing the accuracy which can be expected from a GNSS system in 5cm steps,"]
3699 #[doc = "typically at a one sigma level of confidence."]
3700 #[doc = "Value is semi-major axis accuracy at one standard dev."]
3701 #[doc = "- Range 0-12.7 meter, LSB = .05m"]
3702 #[doc = "- 254 = any value equal or greater than 12.70 meter"]
3703 #[doc = "- 255 = unavailable semi-major axis value"]
3704 #[doc = "\n\n@unit: 0.05m"]
3705 #[doc = "\n\n@category: Infrastructure information"]
3706 #[doc = "\n\n@revision: V1.3.1"]
3707 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3708 #[rasn(delegate, value("0..=255"))]
3709 pub struct SemiMajorAxisAccuracy(pub u8);
3710
3711 #[doc = "This DE is used to orientate the angle of the semi-major axis of an"]
3712 #[doc = "ellipsoid representing the accuracy which can be expected from a GNSS system with respect to the coordinate system."]
3713 #[doc = "Value is orientation of semi-major axis"]
3714 #[doc = "- relative to true north (0-359.9945078786 degrees)"]
3715 #[doc = "- LSB units of 360/65535 deg = 0.0054932479"]
3716 #[doc = "- a value of 0 shall be 0 degrees"]
3717 #[doc = "- a value of 1 shall be 0.0054932479 degrees"]
3718 #[doc = "- a value of 65534 shall be 359.9945078786 deg"]
3719 #[doc = "- a value of 65535 shall be used for orientation unavailable"]
3720 #[doc = "\n\n@unit: 360/65535 degree"]
3721 #[doc = "\n\n@category: Infrastructure information"]
3722 #[doc = "\n\n@revision: V1.3.1"]
3723 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3724 #[rasn(delegate, value("0..=65535"))]
3725 pub struct SemiMajorAxisOrientation(pub u16);
3726
3727 #[doc = "This DE is used to express the radius of the semi-minor axis of an ellipsoid"]
3728 #[doc = "representing the accuracy which can be expected from a GNSS system in 5cm steps, typically at a one sigma level of"]
3729 #[doc = "confidence."]
3730 #[doc = "Value is semi-minor axis accuracy at one standard dev"]
3731 #[doc = "- range 0-12.7 meter, LSB = .05m"]
3732 #[doc = "- 254 = any value equal or greater than 12.70 meter"]
3733 #[doc = "- 255 = unavailable semi-minor axis value"]
3734 #[doc = "\n\n@unit: 0.05m"]
3735 #[doc = "\n\n@category: Infrastructure information"]
3736 #[doc = "\n\n@revision: V1.3.1"]
3737 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3738 #[rasn(delegate, value("0..=255"))]
3739 pub struct SemiMinorAxisAccuracy(pub u8);
3740 #[doc = " Inner type "]
3741 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3742 #[rasn(automatic_tags)]
3743 pub struct SignalControlZoneZone {
3744 #[rasn(identifier = "regionId")]
3745 pub region_id: RegionId,
3746 #[rasn(identifier = "regExtValue")]
3747 pub reg_ext_value: Any,
3748 }
3749 impl SignalControlZoneZone {
3750 pub fn new(region_id: RegionId, reg_ext_value: Any) -> Self {
3751 Self {
3752 region_id,
3753 reg_ext_value,
3754 }
3755 }
3756 }
3757
3758 #[doc = "This DF is a dummy placeholder to contain a regional SignalControlZone DF."]
3759 #[doc = "It is not used, yet here for backwards compatibility."]
3760 #[doc = "- @field regional: optional region specific data."]
3761 #[doc = "\n\n@category: Infrastructure information"]
3762 #[doc = "\n\n@revision: V1.3.1"]
3763 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3764 #[rasn(automatic_tags)]
3765 #[non_exhaustive]
3766 pub struct SignalControlZone {
3767 pub zone: SignalControlZoneZone,
3768 }
3769 impl SignalControlZone {
3770 pub fn new(zone: SignalControlZoneZone) -> Self {
3771 Self { zone }
3772 }
3773 }
3774
3775 #[doc = "This DE is an index used to map between the internal state machine of one or more signal controllers (or"]
3776 #[doc = "other types of traffic flow devices) and a common numbering system that can represent all possible combinations of active"]
3777 #[doc = "states (movements and phases in US traffic terminology). All possible movement variations are assigned a unique value"]
3778 #[doc = "within the intersection. Conceptually, the ID represents a means to provide a list of lanes in a set which would otherwise"]
3779 #[doc = "need to be enumerated in the message. The values zero and 255 are reserved, so there may up to 254 different signal"]
3780 #[doc = "group IDs within one single intersection. The value 255 represents a protected-Movement-Allowed or permissive-"]
3781 #[doc = "Movement-Allowed condition that exists at all times. This value is applied to lanes, with or without traffic control devices,"]
3782 #[doc = "that operate as free-flow lanes. Typically referred to as Channelized Right/Left Turn Lanes (in right/left-hand drive"]
3783 #[doc = "countries)."]
3784 #[doc = "Values:"]
3785 #[doc = "- the value `0` shall be used when the ID is not available or not known"]
3786 #[doc = "- the value `255` is reserved to indicate a permanent green movement state"]
3787 #[doc = "- therefore a simple 8 phase signal controller device might use 1..9 as its groupIDs"]
3788 #[doc = "\n\n@category: Infrastructure information"]
3789 #[doc = "\n\n@revision: V1.3.1"]
3790 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3791 #[rasn(delegate, value("0..=255"))]
3792 pub struct SignalGroupID(pub u8);
3793 #[doc = " Anonymous SEQUENCE OF member "]
3794 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3795 #[rasn(automatic_tags, identifier = "SEQUENCE")]
3796 pub struct AnonymousSignalRequestRegional {
3797 #[rasn(identifier = "regionId")]
3798 pub region_id: RegionId,
3799 #[rasn(identifier = "regExtValue")]
3800 pub reg_ext_value: Any,
3801 }
3802 impl AnonymousSignalRequestRegional {
3803 pub fn new(region_id: RegionId, reg_ext_value: Any) -> Self {
3804 Self {
3805 region_id,
3806 reg_ext_value,
3807 }
3808 }
3809 }
3810 #[doc = " Inner type "]
3811 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3812 #[rasn(delegate, size("1..=4"))]
3813 pub struct SignalRequestRegional(pub SequenceOf<AnonymousSignalRequestRegional>);
3814
3815 #[doc = "This DF is used (as part of a request message) to request either a priority or a preemption service"]
3816 #[doc = "from a signalized intersection. It relates the intersection ID as well as the specific request information. Additional"]
3817 #[doc = "information includes the approach and egress values or lanes to be used."]
3818 #[doc = "- @field id: the unique ID of the target intersection"]
3819 #[doc = "- @field requestID: The unique requestID used by the requestor"]
3820 #[doc = "- @field requestType: The type of request or cancel for priority or preempt use when a prior request is canceled, only the requestID is needed."]
3821 #[doc = "- @field inBoundLane: desired entry approach or lane."]
3822 #[doc = "- @field outBoundLane: desired exit approach or lane. the value zero is used to indicate intent to stop within the intersection."]
3823 #[doc = "- @field regional: optional region specific data."]
3824 #[doc = "\n\n@note: In typical use either an approach or a lane number would be given, this indicates the requested"]
3825 #[doc = " path through the intersection to the degree it is known."]
3826 #[doc = "\n\n@category: Infrastructure information"]
3827 #[doc = "\n\n@revision: V1.3.1"]
3828 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3829 #[rasn(automatic_tags)]
3830 #[non_exhaustive]
3831 pub struct SignalRequest {
3832 pub id: IntersectionReferenceID,
3833 #[rasn(identifier = "requestID")]
3834 pub request_id: RequestID,
3835 #[rasn(identifier = "requestType")]
3836 pub request_type: PriorityRequestType,
3837 #[rasn(identifier = "inBoundLane")]
3838 pub in_bound_lane: IntersectionAccessPoint,
3839 #[rasn(identifier = "outBoundLane")]
3840 pub out_bound_lane: Option<IntersectionAccessPoint>,
3841 pub regional: Option<SignalRequestRegional>,
3842 }
3843 impl SignalRequest {
3844 pub fn new(
3845 id: IntersectionReferenceID,
3846 request_id: RequestID,
3847 request_type: PriorityRequestType,
3848 in_bound_lane: IntersectionAccessPoint,
3849 out_bound_lane: Option<IntersectionAccessPoint>,
3850 regional: Option<SignalRequestRegional>,
3851 ) -> Self {
3852 Self {
3853 id,
3854 request_id,
3855 request_type,
3856 in_bound_lane,
3857 out_bound_lane,
3858 regional,
3859 }
3860 }
3861 }
3862
3863 #[doc = "This DF consists of a list of @ref SignalRequest entries."]
3864 #[doc = "\n\n@category: Infrastructure information"]
3865 #[doc = "\n\n@revision: V1.3.1"]
3866 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3867 #[rasn(delegate, size("1..=32"))]
3868 pub struct SignalRequestList(pub SequenceOf<SignalRequestPackage>);
3869 #[doc = " Anonymous SEQUENCE OF member "]
3870 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3871 #[rasn(automatic_tags, identifier = "SEQUENCE")]
3872 pub struct AnonymousSignalRequestMessageRegional {
3873 #[rasn(identifier = "regionId")]
3874 pub region_id: RegionId,
3875 #[rasn(identifier = "regExtValue")]
3876 pub reg_ext_value: Any,
3877 }
3878 impl AnonymousSignalRequestMessageRegional {
3879 pub fn new(region_id: RegionId, reg_ext_value: Any) -> Self {
3880 Self {
3881 region_id,
3882 reg_ext_value,
3883 }
3884 }
3885 }
3886 #[doc = " Inner type "]
3887 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3888 #[rasn(delegate, size("1..=4"))]
3889 pub struct SignalRequestMessageRegional(pub SequenceOf<AnonymousSignalRequestMessageRegional>);
3890
3891 #[doc = "This DF is a message sent by a DSRC equipped entity (such as a vehicle) to the RSU in a"]
3892 #[doc = "signalized intersection. It is used for either a priority signal request or a preemption signal request depending on the way"]
3893 #[doc = "each request is set. Each request defines a path through the intersection which is desired in terms of lanes and"]
3894 #[doc = "approaches to be used. Each request can also contain the time of arrival and the expected duration of the service."]
3895 #[doc = "Multiple requests to multiple intersections are supported. The requestor identifies itself in various ways (using methods"]
3896 #[doc = "supported by the @refRequestorDescription data frame), and its current speed, heading and location can be placed in this"]
3897 #[doc = "structure as well. The specific request for service is typically based on previously decoding and examining the list of lanes"]
3898 #[doc = "and approaches for that intersection (sent in MAP messages). The outcome of all of the pending requests to a signal can"]
3899 #[doc = "be found in the Signal Status Message (SSM), and may be reflected in the SPAT message contents if successful."]
3900 #[doc = "- @field timeStamp: time reference"]
3901 #[doc = "- @field second: time reference"]
3902 #[doc = "- @field sequenceNumber: monotonic incrementing identifier"]
3903 #[doc = "- @field requests: Request Data for one or more signalized intersections that support SRM dialogs"]
3904 #[doc = "- @field requestor: Requesting Device and other User Data contains vehicle ID (if from a vehicle) as well as type data and current"]
3905 #[doc = " position and may contain additional transit data"]
3906 #[doc = "- @field regional: optional region specific data."]
3907 #[doc = "\n\n@category: Infrastructure information"]
3908 #[doc = "\n\n@revision: V1.3.1"]
3909 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3910 #[rasn(automatic_tags)]
3911 #[non_exhaustive]
3912 pub struct SignalRequestMessage {
3913 #[rasn(identifier = "timeStamp")]
3914 pub time_stamp: Option<MinuteOfTheYear>,
3915 pub second: DSecond,
3916 #[rasn(identifier = "sequenceNumber")]
3917 pub sequence_number: Option<MsgCount>,
3918 pub requests: Option<SignalRequestList>,
3919 pub requestor: RequestorDescription,
3920 pub regional: Option<SignalRequestMessageRegional>,
3921 }
3922 impl SignalRequestMessage {
3923 pub fn new(
3924 time_stamp: Option<MinuteOfTheYear>,
3925 second: DSecond,
3926 sequence_number: Option<MsgCount>,
3927 requests: Option<SignalRequestList>,
3928 requestor: RequestorDescription,
3929 regional: Option<SignalRequestMessageRegional>,
3930 ) -> Self {
3931 Self {
3932 time_stamp,
3933 second,
3934 sequence_number,
3935 requests,
3936 requestor,
3937 regional,
3938 }
3939 }
3940 }
3941 #[doc = " Anonymous SEQUENCE OF member "]
3942 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3943 #[rasn(automatic_tags, identifier = "SEQUENCE")]
3944 pub struct AnonymousSignalRequestPackageRegional {
3945 #[rasn(identifier = "regionId")]
3946 pub region_id: RegionId,
3947 #[rasn(identifier = "regExtValue")]
3948 pub reg_ext_value: Any,
3949 }
3950 impl AnonymousSignalRequestPackageRegional {
3951 pub fn new(region_id: RegionId, reg_ext_value: Any) -> Self {
3952 Self {
3953 region_id,
3954 reg_ext_value,
3955 }
3956 }
3957 }
3958 #[doc = " Inner type "]
3959 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3960 #[rasn(delegate, size("1..=4"))]
3961 pub struct SignalRequestPackageRegional(pub SequenceOf<AnonymousSignalRequestPackageRegional>);
3962
3963 #[doc = "This DF contains both the service request itself (the preemption and priority"]
3964 #[doc = "details and the inbound-outbound path details for an intersection) and the time period (start and end time) over which this"]
3965 #[doc = "service is sought from one single intersection. One or more of these packages are contained in a list in the Signal"]
3966 #[doc = "Request Message (SREM)."]
3967 #[doc = "- @field request: The specific request to the intersection contains IntersectionID, request type, requested action (approach/lane request)."]
3968 #[doc = "- @field minute: Time period start."]
3969 #[doc = "- @field second: Time period start."]
3970 #[doc = "- @field duration: The duration value is used to provide a short interval that extends the ETA so that the requesting vehicle can arrive at"]
3971 #[doc = " the point of service with uncertainty or with some desired duration of service. This concept can be used to avoid needing"]
3972 #[doc = " to frequently update the request. The requester must update the ETA and duration values if the"]
3973 #[doc = " period of services extends beyond the duration time. It should be assumed that if the vehicle does not clear the"]
3974 #[doc = " intersection when the duration is reached, the request will be cancelled and the intersection will revert to normal operation."]
3975 #[doc = "- @field regional: optional region specific data."]
3976 #[doc = "\n\n@category: Infrastructure information"]
3977 #[doc = "\n\n@revision: V1.3.1"]
3978 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
3979 #[rasn(automatic_tags)]
3980 #[non_exhaustive]
3981 pub struct SignalRequestPackage {
3982 pub request: SignalRequest,
3983 pub minute: Option<MinuteOfTheYear>,
3984 pub second: Option<DSecond>,
3985 pub duration: Option<DSecond>,
3986 pub regional: Option<SignalRequestPackageRegional>,
3987 }
3988 impl SignalRequestPackage {
3989 pub fn new(
3990 request: SignalRequest,
3991 minute: Option<MinuteOfTheYear>,
3992 second: Option<DSecond>,
3993 duration: Option<DSecond>,
3994 regional: Option<SignalRequestPackageRegional>,
3995 ) -> Self {
3996 Self {
3997 request,
3998 minute,
3999 second,
4000 duration,
4001 regional,
4002 }
4003 }
4004 }
4005
4006 #[doc = "This DF is used to contain information regarding the entity that requested a given"]
4007 #[doc = "signal behavior. In addition to the VehicleID, the data frame also contains a request reference number used to uniquely"]
4008 #[doc = "refer to the request and some basic type information about the request maker which may be used by other parties."]
4009 #[doc = "- @field id: to uniquely identify the requester and the specific request to all parties."]
4010 #[doc = "- @field request: to uniquely identify the requester and the specific request to all parties."]
4011 #[doc = "- @field sequenceNumber: to uniquely identify the requester and the specific request to all parties."]
4012 #[doc = "- @field role: vehicle role"]
4013 #[doc = "- @field typeData: Used when addition data besides the role is needed, at which point the role entry above is not sent."]
4014 #[doc = "\n\n@category: Infrastructure information"]
4015 #[doc = "\n\n@revision: V1.3.1"]
4016 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4017 #[rasn(automatic_tags)]
4018 #[non_exhaustive]
4019 pub struct SignalRequesterInfo {
4020 pub id: VehicleID,
4021 pub request: RequestID,
4022 #[rasn(identifier = "sequenceNumber")]
4023 pub sequence_number: MsgCount,
4024 pub role: Option<BasicVehicleRole>,
4025 #[rasn(identifier = "typeData")]
4026 pub type_data: Option<RequestorType>,
4027 }
4028 impl SignalRequesterInfo {
4029 pub fn new(
4030 id: VehicleID,
4031 request: RequestID,
4032 sequence_number: MsgCount,
4033 role: Option<BasicVehicleRole>,
4034 type_data: Option<RequestorType>,
4035 ) -> Self {
4036 Self {
4037 id,
4038 request,
4039 sequence_number,
4040 role,
4041 type_data,
4042 }
4043 }
4044 }
4045 #[doc = " Anonymous SEQUENCE OF member "]
4046 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4047 #[rasn(automatic_tags, identifier = "SEQUENCE")]
4048 pub struct AnonymousSignalStatusRegional {
4049 #[rasn(identifier = "regionId")]
4050 pub region_id: RegionId,
4051 #[rasn(identifier = "regExtValue")]
4052 pub reg_ext_value: Any,
4053 }
4054 impl AnonymousSignalStatusRegional {
4055 pub fn new(region_id: RegionId, reg_ext_value: Any) -> Self {
4056 Self {
4057 region_id,
4058 reg_ext_value,
4059 }
4060 }
4061 }
4062 #[doc = " Inner type "]
4063 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4064 #[rasn(delegate, size("1..=4"))]
4065 pub struct SignalStatusRegional(pub SequenceOf<AnonymousSignalStatusRegional>);
4066
4067 #[doc = "This DF is used to provide the status of a single intersection to others, including any active"]
4068 #[doc = "preemption or priority state in effect."]
4069 #[doc = "- @field sequenceNumber: changed whenever the below contents have change"]
4070 #[doc = "- @field id: this provides a unique mapping to the intersection map in question which provides complete location"]
4071 #[doc = " and approach/movement/lane data as well as zones for priority/preemption."]
4072 #[doc = "- @field sigStatus: a list of detailed status containing all priority or preemption state data, both active and pending,"]
4073 #[doc = " and who requested it requests which are denied are also listed here for a short period of time."]
4074 #[doc = "- @field regional: optional region specific data."]
4075 #[doc = "\n\n@category: Infrastructure information"]
4076 #[doc = "\n\n@revision: V1.3.1"]
4077 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4078 #[rasn(automatic_tags)]
4079 #[non_exhaustive]
4080 pub struct SignalStatus {
4081 #[rasn(identifier = "sequenceNumber")]
4082 pub sequence_number: MsgCount,
4083 pub id: IntersectionReferenceID,
4084 #[rasn(identifier = "sigStatus")]
4085 pub sig_status: SignalStatusPackageList,
4086 pub regional: Option<SignalStatusRegional>,
4087 }
4088 impl SignalStatus {
4089 pub fn new(
4090 sequence_number: MsgCount,
4091 id: IntersectionReferenceID,
4092 sig_status: SignalStatusPackageList,
4093 regional: Option<SignalStatusRegional>,
4094 ) -> Self {
4095 Self {
4096 sequence_number,
4097 id,
4098 sig_status,
4099 regional,
4100 }
4101 }
4102 }
4103
4104 #[doc = "This DF consists of a list of @ref SignalStatus entries."]
4105 #[doc = "\n\n@category: Infrastructure information"]
4106 #[doc = "\n\n@revision: V1.3.1"]
4107 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4108 #[rasn(delegate, size("1..=32"))]
4109 pub struct SignalStatusList(pub SequenceOf<SignalStatus>);
4110 #[doc = " Anonymous SEQUENCE OF member "]
4111 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4112 #[rasn(automatic_tags, identifier = "SEQUENCE")]
4113 pub struct AnonymousSignalStatusMessageRegional {
4114 #[rasn(identifier = "regionId")]
4115 pub region_id: RegionId,
4116 #[rasn(identifier = "regExtValue")]
4117 pub reg_ext_value: Any,
4118 }
4119 impl AnonymousSignalStatusMessageRegional {
4120 pub fn new(region_id: RegionId, reg_ext_value: Any) -> Self {
4121 Self {
4122 region_id,
4123 reg_ext_value,
4124 }
4125 }
4126 }
4127 #[doc = " Inner type "]
4128 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4129 #[rasn(delegate, size("1..=4"))]
4130 pub struct SignalStatusMessageRegional(pub SequenceOf<AnonymousSignalStatusMessageRegional>);
4131
4132 #[doc = "This DF is a message sent by an RSU in a signalized intersection. It is used to relate the current"]
4133 #[doc = "status of the signal and the collection of pending or active preemption or priority requests acknowledged by the controller."]
4134 #[doc = "It is also used to send information about preemption or priority requests which were denied. This in turn allows a dialog"]
4135 #[doc = "acknowledgment mechanism between any requester and the signal controller. The data contained in this message allows"]
4136 #[doc = "other users to determine their \"ranking\" for any request they have made as well as to see the currently active events."]
4137 #[doc = "When there have been no recently received requests for service messages, this message may not be sent. While the"]
4138 #[doc = "outcome of all pending requests to a signal can be found in the Signal Status Message, the current active event (if any)"]
4139 #[doc = "will be reflected in the SPAT message contents."]
4140 #[doc = "- @field timeStamp: time reference"]
4141 #[doc = "- @field second: time reference"]
4142 #[doc = "- @field sequenceNumber: monotonic incrementing identifier"]
4143 #[doc = "- @field status: Status Data for one of more signalized intersections."]
4144 #[doc = "- @field regional: optional region specific data."]
4145 #[doc = "\n\n@category: Infrastructure information"]
4146 #[doc = "\n\n@revision: V1.3.1"]
4147 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4148 #[rasn(automatic_tags)]
4149 #[non_exhaustive]
4150 pub struct SignalStatusMessage {
4151 #[rasn(identifier = "timeStamp")]
4152 pub time_stamp: Option<MinuteOfTheYear>,
4153 pub second: DSecond,
4154 #[rasn(identifier = "sequenceNumber")]
4155 pub sequence_number: Option<MsgCount>,
4156 pub status: SignalStatusList,
4157 pub regional: Option<SignalStatusMessageRegional>,
4158 }
4159 impl SignalStatusMessage {
4160 pub fn new(
4161 time_stamp: Option<MinuteOfTheYear>,
4162 second: DSecond,
4163 sequence_number: Option<MsgCount>,
4164 status: SignalStatusList,
4165 regional: Option<SignalStatusMessageRegional>,
4166 ) -> Self {
4167 Self {
4168 time_stamp,
4169 second,
4170 sequence_number,
4171 status,
4172 regional,
4173 }
4174 }
4175 }
4176 #[doc = " Anonymous SEQUENCE OF member "]
4177 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4178 #[rasn(automatic_tags, identifier = "SEQUENCE")]
4179 pub struct AnonymousSignalStatusPackageRegional {
4180 #[rasn(identifier = "regionId")]
4181 pub region_id: RegionId,
4182 #[rasn(identifier = "regExtValue")]
4183 pub reg_ext_value: Any,
4184 }
4185 impl AnonymousSignalStatusPackageRegional {
4186 pub fn new(region_id: RegionId, reg_ext_value: Any) -> Self {
4187 Self {
4188 region_id,
4189 reg_ext_value,
4190 }
4191 }
4192 }
4193 #[doc = " Inner type "]
4194 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4195 #[rasn(delegate, size("1..=4"))]
4196 pub struct SignalStatusPackageRegional(pub SequenceOf<AnonymousSignalStatusPackageRegional>);
4197
4198 #[doc = "This DF contains all the data needed to describe the preemption or priority state"]
4199 #[doc = "of the signal controller with respect to a given request and to uniquely identify the party who requested that state to occur."]
4200 #[doc = "It should be noted that this data frame describes both active and anticipated states of the controller. A requested service"]
4201 #[doc = "may not be active when the message is created and issued. A requested service may be rejected. This structure allows"]
4202 #[doc = "the description of pending requests that have been granted (accepted rather than rejected) but are not yet active and"]
4203 #[doc = "being serviced. It also provides for the description of rejected requests so that the initial message is acknowledged"]
4204 #[doc = "(completing a dialog using the broadcast messages)."]
4205 #[doc = "- @field requester: The party that made the initial SREM request."]
4206 #[doc = "- @field inboundOn: estimated lane / approach of vehicle."]
4207 #[doc = "- @field outboundOn: estimated lane / approach of vehicle."]
4208 #[doc = "- @field minute: The Estimated Time of Arrival (ETA) when the service is requested. This data echos the data of the request."]
4209 #[doc = "- @field second: seconds part of ETA."]
4210 #[doc = "- @field duration: duration part of ETA."]
4211 #[doc = "- @field status: Status of request, this may include rejection."]
4212 #[doc = "- @field regional: optional region specific data."]
4213 #[doc = "\n\n@category: Infrastructure information"]
4214 #[doc = "\n\n@revision: V1.3.1"]
4215 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4216 #[rasn(automatic_tags)]
4217 #[non_exhaustive]
4218 pub struct SignalStatusPackage {
4219 pub requester: Option<SignalRequesterInfo>,
4220 #[rasn(identifier = "inboundOn")]
4221 pub inbound_on: IntersectionAccessPoint,
4222 #[rasn(identifier = "outboundOn")]
4223 pub outbound_on: Option<IntersectionAccessPoint>,
4224 pub minute: Option<MinuteOfTheYear>,
4225 pub second: Option<DSecond>,
4226 pub duration: Option<DSecond>,
4227 pub status: PrioritizationResponseStatus,
4228 pub regional: Option<SignalStatusPackageRegional>,
4229 }
4230 impl SignalStatusPackage {
4231 pub fn new(
4232 requester: Option<SignalRequesterInfo>,
4233 inbound_on: IntersectionAccessPoint,
4234 outbound_on: Option<IntersectionAccessPoint>,
4235 minute: Option<MinuteOfTheYear>,
4236 second: Option<DSecond>,
4237 duration: Option<DSecond>,
4238 status: PrioritizationResponseStatus,
4239 regional: Option<SignalStatusPackageRegional>,
4240 ) -> Self {
4241 Self {
4242 requester,
4243 inbound_on,
4244 outbound_on,
4245 minute,
4246 second,
4247 duration,
4248 status,
4249 regional,
4250 }
4251 }
4252 }
4253
4254 #[doc = "This DF consists of a list of @ref SignalStatusPackage entries."]
4255 #[doc = "\n\n@category: Infrastructure information"]
4256 #[doc = "\n\n@revision: V1.3.1"]
4257 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4258 #[rasn(delegate, size("1..=32"))]
4259 pub struct SignalStatusPackageList(pub SequenceOf<SignalStatusPackage>);
4260
4261 #[doc = "This data element represents the recommended velocity of an object, typically a vehicle speed along a roadway,"]
4262 #[doc = "expressed in unsigned units of 0.1 meters per second."]
4263 #[doc = "- LSB units are 0.1 m/s"]
4264 #[doc = "- the value 499 shall be used for values at or greater than 49.9 m/s"]
4265 #[doc = "- the value 500 shall be used to indicate that speed is unavailable"]
4266 #[doc = "\n\n@unit: 0.1 m/s"]
4267 #[doc = "\n\n@category: Infrastructure information"]
4268 #[doc = "\n\n@revision: V1.3.1"]
4269 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4270 #[rasn(delegate, value("0..=500"))]
4271 pub struct SpeedAdvice(pub u16);
4272
4273 #[doc = "This DE is used to provide the 95% confidence level for the currently reported"]
4274 #[doc = "value of @ref Speed, taking into account the current calibration and precision of the sensor(s) used to measure and/or"]
4275 #[doc = "calculate the value. This data element is only to provide the listener with information on the limitations of the sensing"]
4276 #[doc = "system, not to support any type of automatic error correction or to imply a guaranteed maximum error. This data element"]
4277 #[doc = "should not be used for fault detection or diagnosis, but if a vehicle is able to detect a fault, the confidence interval should"]
4278 #[doc = "be increased accordingly."]
4279 #[doc = "- 0 - `unavailable` : Not Equipped or unavailable"]
4280 #[doc = "- 1 - `prec100ms` : 100 meters / sec"]
4281 #[doc = "- 2 - `prec10ms` : 10 meters / sec"]
4282 #[doc = "- 3 - `prec5ms` : 5 meters / sec"]
4283 #[doc = "- 4 - `prec1ms` : 1 meters / sec"]
4284 #[doc = "- 5 - `prec0-1ms` : 0.1 meters / sec"]
4285 #[doc = "- 6 - `prec0-05ms` : 0.05 meters / sec"]
4286 #[doc = "- 7 - `prec0-01ms` : 0.01 meters / sec"]
4287 #[doc = "\n\n@category: Infrastructure information"]
4288 #[doc = "\n\n@revision: V1.3.1"]
4289 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
4290 #[rasn(enumerated)]
4291 pub enum SpeedConfidenceDSRC {
4292 unavailable = 0,
4293 prec100ms = 1,
4294 prec10ms = 2,
4295 prec5ms = 3,
4296 prec1ms = 4,
4297 #[rasn(identifier = "prec0-1ms")]
4298 prec0_1ms = 5,
4299 #[rasn(identifier = "prec0-05ms")]
4300 prec0_05ms = 6,
4301 #[rasn(identifier = "prec0-01ms")]
4302 prec0_01ms = 7,
4303 }
4304
4305 #[doc = "This DF consists of a list of SpeedLimit entries."]
4306 #[doc = "\n\n@category: Infrastructure information"]
4307 #[doc = "\n\n@revision: V1.3.1"]
4308 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4309 #[rasn(delegate, size("1..=9"))]
4310 pub struct SpeedLimitList(pub SequenceOf<RegulatorySpeedLimit>);
4311
4312 #[doc = "This DE relates the type of speed limit to which a given speed refers."]
4313 #[doc = "- unknown: Speed limit type not available"]
4314 #[doc = "- maxSpeedInSchoolZone: Only sent when the limit is active"]
4315 #[doc = "- maxSpeedInSchoolZoneWhenChildrenArePresent: Sent at any time"]
4316 #[doc = "- maxSpeedInConstructionZone: Used for work zones, incident zones, etc. where a reduced speed is present"]
4317 #[doc = "- vehicleMinSpeed: Regulatory speed limit for general traffic"]
4318 #[doc = "- vehicleMaxSpeed: Regulatory speed limit for general traffic"]
4319 #[doc = "\n\n@category: Infrastructure information"]
4320 #[doc = "\n\n@revision: V1.3.1"]
4321 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
4322 #[rasn(enumerated)]
4323 #[non_exhaustive]
4324 pub enum SpeedLimitType {
4325 unknown = 0,
4326 maxSpeedInSchoolZone = 1,
4327 maxSpeedInSchoolZoneWhenChildrenArePresent = 2,
4328 maxSpeedInConstructionZone = 3,
4329 vehicleMinSpeed = 4,
4330 vehicleMaxSpeed = 5,
4331 vehicleNightMaxSpeed = 6,
4332 truckMinSpeed = 7,
4333 truckMaxSpeed = 8,
4334 truckNightMaxSpeed = 9,
4335 vehiclesWithTrailersMinSpeed = 10,
4336 vehiclesWithTrailersMaxSpeed = 11,
4337 vehiclesWithTrailersNightMaxSpeed = 12,
4338 }
4339
4340 #[doc = "This DF is a single data frame combining multiple related bit fields into one concept."]
4341 #[doc = "- @field heading: confidence for heading values"]
4342 #[doc = "- @field speed: confidence for speed values"]
4343 #[doc = "- @field throttle: confidence for throttle values "]
4344 #[doc = "\n\n@category: Infrastructure information"]
4345 #[doc = "\n\n@revision: V1.3.1"]
4346 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4347 #[rasn(automatic_tags)]
4348 pub struct SpeedandHeadingandThrottleConfidence {
4349 pub heading: HeadingConfidenceDSRC,
4350 pub speed: SpeedConfidenceDSRC,
4351 pub throttle: ThrottleConfidence,
4352 }
4353 impl SpeedandHeadingandThrottleConfidence {
4354 pub fn new(
4355 heading: HeadingConfidenceDSRC,
4356 speed: SpeedConfidenceDSRC,
4357 throttle: ThrottleConfidence,
4358 ) -> Self {
4359 Self {
4360 heading,
4361 speed,
4362 throttle,
4363 }
4364 }
4365 }
4366
4367 #[doc = "This is the 4 octet random device identifier, called the TemporaryID. When used for a mobile OBU device, this value"]
4368 #[doc = "will change periodically to ensure the overall anonymity of the vehicle, unlike a typical wireless or wired 802 device ID."]
4369 #[doc = "Because this value is used as a means to identify the local vehicles that are interacting during an encounter, it is used in"]
4370 #[doc = "the message set. Other devices, such as infrastructure (RSUs), may have a fixed value for the temporary ID value. See"]
4371 #[doc = "also @ref StationId which is used in other deployment regions."]
4372 #[doc = "\n\n@note: The circumstances and times at which various DSRC devices (notably OBUs) create and change their current"]
4373 #[doc = " Temporary ID is a complex application level topic. It should be noted that the Temporary ID is not the same as a device"]
4374 #[doc = " MAC value, although when used as a means to uniquely identify a device, both have many common properties. It should"]
4375 #[doc = " further be noted that the MAC value for a mobile OBU device (unlike a typical wireless or wired 802 device) will"]
4376 #[doc = " periodically change to a new random value to ensure the overall anonymity of the vehicle."]
4377 #[doc = "\n\n@category: Infrastructure information"]
4378 #[doc = "\n\n@revision: V1.3.1"]
4379 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4380 #[rasn(delegate)]
4381 pub struct TemporaryID(pub FixedOctetString<4usize>);
4382
4383 #[doc = "This DE is used to provide the 95% confidence level for the currently reported"]
4384 #[doc = "value of DE @ref Throttle, taking into account the current calibration and precision of the sensor(s) used to measure and/or"]
4385 #[doc = "calculate the value. This data element is only to provide information on the limitations of the sensing system, not to"]
4386 #[doc = "support any type of automatic error correction or to imply a guaranteed maximum error. This data element should not be"]
4387 #[doc = "used for fault detection or diagnosis, but if a vehicle is able to detect a fault, the confidence interval should be increased"]
4388 #[doc = "accordingly. If a fault that triggers the MIL is of a nature to render throttle performance unreliable, then ThrottleConfidence"]
4389 #[doc = "should be represented as \"notEquipped.\""]
4390 #[doc = "- 0 - `unavailable`: B'00 Not Equipped or unavailable"]
4391 #[doc = "- 1 - `prec10percent`: B'01 10 percent Confidence level"]
4392 #[doc = "- 2 - `prec1percent`: B'10 1 percent Confidence level"]
4393 #[doc = "- 3 - `prec0-5percent`: B'11 0.5 percent Confidence level"]
4394 #[doc = "\n\n@category: Infrastructure information"]
4395 #[doc = "\n\n@revision: V1.3.1"]
4396 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
4397 #[rasn(enumerated)]
4398 pub enum ThrottleConfidence {
4399 unavailable = 0,
4400 prec10percent = 1,
4401 prec1percent = 2,
4402 #[rasn(identifier = "prec0-5percent")]
4403 prec0_5percent = 3,
4404 }
4405
4406 #[doc = "This DF conveys details about the timing of a phase within a movement. The core"]
4407 #[doc = "data concept expressed is the time stamp (time mark) at which the related phase will change to the next state. This is"]
4408 #[doc = "often found in the MinEndTime element, but the other elements may be needed to convey the full concept when adaptive"]
4409 #[doc = "timing is employed."]
4410 #[doc = "- @field startTime: is used to relate when the phase itself started or is expected to start. This in turn allows the"]
4411 #[doc = " indication that a set of time change details refers to a future phase, rather than a currently active phase."]
4412 #[doc = " By this method, timing information about \"pre\" phase events (which are the short transitional phase used to alert OBUs to"]
4413 #[doc = " an impending green/go or yellow/caution phase) and the longer yellow-caution phase data is supported in the same form"]
4414 #[doc = " as various green/go phases. In theory, the time change details could be sent for a large sequence of phases if the signal"]
4415 #[doc = " timing was not adaptive and the operator wished to do so. In practice, it is expected only the \"next\" future phase will"]
4416 #[doc = " commonly be sent. It should be noted that this also supports the sending of time periods regarding various red phases;"]
4417 #[doc = " however, this is not expected to be done commonly."]
4418 #[doc = "- @field minEndTime: is used to convey the earliest time possible at which the phase could change, except when"]
4419 #[doc = " unpredictable events relating to a preemption or priority call disrupt a currently active timing plan. In a phase where the"]
4420 #[doc = " time is fixed (as in a fixed yellow or clearance time), this element shall be used alone. This value can be viewed as the"]
4421 #[doc = " earliest possible time at which the phase could change, except when unpredictable events relating to a preemption or"]
4422 #[doc = " priority call come into play and disrupt a currently active timing plan."]
4423 #[doc = "- @field maxEndTime: is used to convey the latest time possible which the phase could change,"]
4424 #[doc = " except when unpredictable events relating to a preemption or priority"]
4425 #[doc = " call come into play and disrupt a currently active timing plan. In a phase where the time is fixed (as in a fixed yellow or"]
4426 #[doc = " clearance time), this element shall be used alone."]
4427 #[doc = "- @field likelyTime: is used to convey the most likely time the phase changes. This occurs between MinEndTime and"]
4428 #[doc = " MaxEndTime and is only relevant for traffic-actuated control programs. This time might be calculated out of logged"]
4429 #[doc = " historical values, detected events (e.g., from inductive loops), or from other sources."]
4430 #[doc = "- @field confidence: is used to convey basic confidence data about the likelyTime."]
4431 #[doc = "- @field nextTime: is used to express a general (and presumably less precise) value regarding when this phase will"]
4432 #[doc = " next occur. This is intended to be used to alert the OBU when the next green/go may occur so that various ECO driving"]
4433 #[doc = " applications can better manage the vehicle during the intervening stopped time."]
4434 #[doc = "\n\n@note: Remarks: It should be noted that all times are expressed as absolute values and not as countdown timer values. When"]
4435 #[doc = " the stated time mark is reached, the state changes to the next state. Several technical reasons led to this choice; among"]
4436 #[doc = " these was that with a countdown embodiment, there is an inherent need to update the remaining time every time a SPAT"]
4437 #[doc = " message is issued. This would require re-formulating the message content as as well as cryptographically signing the"]
4438 #[doc = " message each time. With the use of absolute values (time marks) chosen here, the current count down time when the"]
4439 #[doc = " message is created is added to the then-current time to create an absolute value and can be used thereafter without"]
4440 #[doc = " change. The message content need only change when the signal controller makes a timing decision to be published. This"]
4441 #[doc = " allows a clean separation of the logical functions of message creation from the logical functions of message scheduling"]
4442 #[doc = " and sending, and fulfills the need to minimize further real time processing when possible. This Standard sets no limits on"]
4443 #[doc = " where each of these functions is performed in the overall roadside system."]
4444 #[doc = "\n\n@category: Infrastructure information"]
4445 #[doc = "\n\n@revision: V1.3.1"]
4446 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4447 #[rasn(automatic_tags)]
4448 pub struct TimeChangeDetails {
4449 #[rasn(identifier = "startTime")]
4450 pub start_time: Option<TimeMark>,
4451 #[rasn(identifier = "minEndTime")]
4452 pub min_end_time: TimeMark,
4453 #[rasn(identifier = "maxEndTime")]
4454 pub max_end_time: Option<TimeMark>,
4455 #[rasn(identifier = "likelyTime")]
4456 pub likely_time: Option<TimeMark>,
4457 pub confidence: Option<TimeIntervalConfidence>,
4458 #[rasn(identifier = "nextTime")]
4459 pub next_time: Option<TimeMark>,
4460 }
4461 impl TimeChangeDetails {
4462 pub fn new(
4463 start_time: Option<TimeMark>,
4464 min_end_time: TimeMark,
4465 max_end_time: Option<TimeMark>,
4466 likely_time: Option<TimeMark>,
4467 confidence: Option<TimeIntervalConfidence>,
4468 next_time: Option<TimeMark>,
4469 ) -> Self {
4470 Self {
4471 start_time,
4472 min_end_time,
4473 max_end_time,
4474 likely_time,
4475 confidence,
4476 next_time,
4477 }
4478 }
4479 }
4480
4481 #[doc = "This DE is used to provide the 95% confidence level for the currently reported value"]
4482 #[doc = "of time, taking into account the current calibration and precision of the sensor(s) used to measure and/or calculate the"]
4483 #[doc = "value. This data element is only to provide information on the limitations of the sensing system, not to support any type of"]
4484 #[doc = "automatic error correction or to imply a guaranteed maximum error. This data element should not be used for fault"]
4485 #[doc = "detection or diagnosis, but if a vehicle is able to detect a fault, the confidence interval should be increased accordingly."]
4486 #[doc = "- 0 - `unavailable` : Not Equipped or unavailable"]
4487 #[doc = "- 1 - `time-100-000` : Better than 100 Seconds"]
4488 #[doc = "- 2 - `time-050-000` : Better than 50 Seconds"]
4489 #[doc = "- 3 - `time-020-000` : Better than 20 Seconds"]
4490 #[doc = "- 4 - `time-010-000` : Better than 10 Seconds"]
4491 #[doc = "- 5 - `time-002-000` : Better than 2 Seconds"]
4492 #[doc = "- 6 - `time-001-000` : Better than 1 Second"]
4493 #[doc = "- 7 - `time-000-500` : Better than 0.5 Seconds"]
4494 #[doc = "- 8 - `time-000-200` : Better than 0.2 Seconds"]
4495 #[doc = "- 9 - `time-000-100` : Better than 0.1 Seconds"]
4496 #[doc = "- 10 - `time-000-050` : Better than 0.05 Seconds"]
4497 #[doc = "- 11 - `time-000-020` : Better than 0.02 Seconds"]
4498 #[doc = "- 12 - `time-000-010` : Better than 0.01 Seconds"]
4499 #[doc = "- 13 - `time-000-005` : Better than 0.005 Seconds"]
4500 #[doc = "- 14 - `time-000-002` : Better than 0.001 Seconds"]
4501 #[doc = "- 15 - `time-000-001` : Better than 0.001 Seconds"]
4502 #[doc = "- 16 - `time-000-000-5` : Better than 0.000,5 Seconds"]
4503 #[doc = "- 17 - `time-000-000-2` : Better than 0.000,2 Seconds"]
4504 #[doc = "- 18 - `time-000-000-1` : Better than 0.000,1 Seconds"]
4505 #[doc = "- 19 - `time-000-000-05` : Better than 0.000,05 Seconds"]
4506 #[doc = "- 20 - `time-000-000-02` : Better than 0.000,02 Seconds"]
4507 #[doc = "- 21 - `time-000-000-01` : Better than 0.000,01 Seconds"]
4508 #[doc = "- 22 - `time-000-000-005` : Better than 0.000,005 Seconds"]
4509 #[doc = "- 23 - `time-000-000-002` : Better than 0.000,002 Seconds"]
4510 #[doc = "- 24 - `time-000-000-001` : Better than 0.000,001 Seconds"]
4511 #[doc = "- 25 - `time-000-000-000-5` : Better than 0.000,000,5 Seconds"]
4512 #[doc = "- 26 - `time-000-000-000-2` : Better than 0.000,000,2 Seconds"]
4513 #[doc = "- 27 - `time-000-000-000-1` : Better than 0.000,000,1 Seconds"]
4514 #[doc = "- 28 - `time-000-000-000-05` : Better than 0.000,000,05 Seconds"]
4515 #[doc = "- 29 - `time-000-000-000-02` : Better than 0.000,000,02 Seconds"]
4516 #[doc = "- 30 - `time-000-000-000-01` : Better than 0.000,000,01 Seconds"]
4517 #[doc = "- 31 - `time-000-000-000-005` : Better than 0.000,000,005 Seconds"]
4518 #[doc = "- 32 - `time-000-000-000-002` : Better than 0.000,000,002 Seconds"]
4519 #[doc = "- 33 - `time-000-000-000-001` : Better than 0.000,000,001 Seconds"]
4520 #[doc = "- 34 - `time-000-000-000-000-5` : Better than 0.000,000,000,5 Seconds"]
4521 #[doc = "- 35 - `time-000-000-000-000-2` : Better than 0.000,000,000,2 Seconds"]
4522 #[doc = "- 36 - `time-000-000-000-000-1` : Better than 0.000,000,000,1 Seconds"]
4523 #[doc = "- 37 - `time-000-000-000-000-05` : Better than 0.000,000,000,05 Seconds"]
4524 #[doc = "- 38 - `time-000-000-000-000-02` : Better than 0.000,000,000,02 Seconds"]
4525 #[doc = "- 39 - `time-000-000-000-000-01` : Better than 0.000,000,000,01 Seconds"]
4526 #[doc = "\n\n@category: Infrastructure information"]
4527 #[doc = "\n\n@revision: V1.3.1"]
4528 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
4529 #[rasn(enumerated)]
4530 pub enum TimeConfidence {
4531 unavailable = 0,
4532 #[rasn(identifier = "time-100-000")]
4533 time_100_000 = 1,
4534 #[rasn(identifier = "time-050-000")]
4535 time_050_000 = 2,
4536 #[rasn(identifier = "time-020-000")]
4537 time_020_000 = 3,
4538 #[rasn(identifier = "time-010-000")]
4539 time_010_000 = 4,
4540 #[rasn(identifier = "time-002-000")]
4541 time_002_000 = 5,
4542 #[rasn(identifier = "time-001-000")]
4543 time_001_000 = 6,
4544 #[rasn(identifier = "time-000-500")]
4545 time_000_500 = 7,
4546 #[rasn(identifier = "time-000-200")]
4547 time_000_200 = 8,
4548 #[rasn(identifier = "time-000-100")]
4549 time_000_100 = 9,
4550 #[rasn(identifier = "time-000-050")]
4551 time_000_050 = 10,
4552 #[rasn(identifier = "time-000-020")]
4553 time_000_020 = 11,
4554 #[rasn(identifier = "time-000-010")]
4555 time_000_010 = 12,
4556 #[rasn(identifier = "time-000-005")]
4557 time_000_005 = 13,
4558 #[rasn(identifier = "time-000-002")]
4559 time_000_002 = 14,
4560 #[rasn(identifier = "time-000-001")]
4561 time_000_001 = 15,
4562 #[rasn(identifier = "time-000-000-5")]
4563 time_000_000_5 = 16,
4564 #[rasn(identifier = "time-000-000-2")]
4565 time_000_000_2 = 17,
4566 #[rasn(identifier = "time-000-000-1")]
4567 time_000_000_1 = 18,
4568 #[rasn(identifier = "time-000-000-05")]
4569 time_000_000_05 = 19,
4570 #[rasn(identifier = "time-000-000-02")]
4571 time_000_000_02 = 20,
4572 #[rasn(identifier = "time-000-000-01")]
4573 time_000_000_01 = 21,
4574 #[rasn(identifier = "time-000-000-005")]
4575 time_000_000_005 = 22,
4576 #[rasn(identifier = "time-000-000-002")]
4577 time_000_000_002 = 23,
4578 #[rasn(identifier = "time-000-000-001")]
4579 time_000_000_001 = 24,
4580 #[rasn(identifier = "time-000-000-000-5")]
4581 time_000_000_000_5 = 25,
4582 #[rasn(identifier = "time-000-000-000-2")]
4583 time_000_000_000_2 = 26,
4584 #[rasn(identifier = "time-000-000-000-1")]
4585 time_000_000_000_1 = 27,
4586 #[rasn(identifier = "time-000-000-000-05")]
4587 time_000_000_000_05 = 28,
4588 #[rasn(identifier = "time-000-000-000-02")]
4589 time_000_000_000_02 = 29,
4590 #[rasn(identifier = "time-000-000-000-01")]
4591 time_000_000_000_01 = 30,
4592 #[rasn(identifier = "time-000-000-000-005")]
4593 time_000_000_000_005 = 31,
4594 #[rasn(identifier = "time-000-000-000-002")]
4595 time_000_000_000_002 = 32,
4596 #[rasn(identifier = "time-000-000-000-001")]
4597 time_000_000_000_001 = 33,
4598 #[rasn(identifier = "time-000-000-000-000-5")]
4599 time_000_000_000_000_5 = 34,
4600 #[rasn(identifier = "time-000-000-000-000-2")]
4601 time_000_000_000_000_2 = 35,
4602 #[rasn(identifier = "time-000-000-000-000-1")]
4603 time_000_000_000_000_1 = 36,
4604 #[rasn(identifier = "time-000-000-000-000-05")]
4605 time_000_000_000_000_05 = 37,
4606 #[rasn(identifier = "time-000-000-000-000-02")]
4607 time_000_000_000_000_02 = 38,
4608 #[rasn(identifier = "time-000-000-000-000-01")]
4609 time_000_000_000_000_01 = 39,
4610 }
4611
4612 #[doc = "This is the statistical confidence for the predicted time of signal group state change. For evaluation, the formula"]
4613 #[doc = "10^(x/a)-b with a=82.5 and b=1.3 was used. The values are encoded as probability classes with proposed values listed in"]
4614 #[doc = "the below table in the ASN.1 specification."]
4615 #[doc = "Value: Probability"]
4616 #[doc = "- 0 - 21%"]
4617 #[doc = "- 1 - 36%"]
4618 #[doc = "- 2 - 47%"]
4619 #[doc = "- 3 - 56%"]
4620 #[doc = "- 4 - 62%"]
4621 #[doc = "- 5 - 68%"]
4622 #[doc = "- 6 - 73%"]
4623 #[doc = "- 7 - 77%"]
4624 #[doc = "- 8 - 81%"]
4625 #[doc = "- 9 - 85%"]
4626 #[doc = "- 10 - 88%"]
4627 #[doc = "- 11 - 91%"]
4628 #[doc = "- 12 - 94%"]
4629 #[doc = "- 13 - 96%"]
4630 #[doc = "- 14 - 98%"]
4631 #[doc = "- 15 - 100%"]
4632 #[doc = "\n\n@unit: percent"]
4633 #[doc = "\n\n@category: Infrastructure information"]
4634 #[doc = "\n\n@revision: V1.3.1"]
4635 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4636 #[rasn(delegate, value("0..=15"))]
4637 pub struct TimeIntervalConfidence(pub u8);
4638
4639 #[doc = "This DE is used to relate a moment in UTC (Coordinated Universal Time)-based time when a"]
4640 #[doc = "signal phase is predicted to change, with a precision of 1/10 of a second. A range of 60 full minutes is supported and it"]
4641 #[doc = "can be presumed that the receiver shares a common sense of time with the sender which is kept aligned to within a"]
4642 #[doc = "fraction of a second or better."]
4643 #[doc = "If there is a need to send a value greater than the range allowed by the data element (over one hour in the future), the"]
4644 #[doc = "value 36000 shall be sent and shall be interpreted to indicate an indefinite future time value. When the value to be used is"]
4645 #[doc = "undefined or unknown a value of 36001 shall be sent. Note that leap seconds are also supported."]
4646 #[doc = "The value is tenths of a second in the current or next hour in units of 1/10th second from UTC time"]
4647 #[doc = "- A range of 0-36000 covers one hour"]
4648 #[doc = "- The values 35991..35999 are used when a leap second occurs"]
4649 #[doc = "- The value 36000 is used to indicate time >3600 seconds"]
4650 #[doc = "- 36001 is to be used when value undefined or unknown"]
4651 #[doc = "\n\n@note: Note that this is NOT expressed in GPS time or in local time"]
4652 #[doc = "\n\n@category: Infrastructure information"]
4653 #[doc = "\n\n@revision: V1.3.1"]
4654 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4655 #[rasn(delegate, value("0..=36001"))]
4656 pub struct TimeMark(pub u16);
4657
4658 #[doc = "This DE is used to provide the R09 tour information."]
4659 #[doc = "\n\n@category: Infrastructure information"]
4660 #[doc = "\n\n@revision: V2.2.1"]
4661 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4662 #[rasn(delegate, value("0..=4294967295"))]
4663 pub struct TourNumber(pub u32);
4664
4665 #[doc = "This DE is used to provide the R09 train length."]
4666 #[doc = "\n\n@category: Infrastructure information"]
4667 #[doc = "\n\n@revision: V2.2.1"]
4668 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4669 #[rasn(delegate, value("0..=7"))]
4670 pub struct TrainLength(pub u8);
4671
4672 #[doc = "This DE is used to provide the R09 direction information."]
4673 #[doc = "\n\n@category: Infrastructure information"]
4674 #[doc = "\n\n@revision: V2.2.1"]
4675 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4676 #[rasn(delegate, value("0..=255"))]
4677 pub struct TransitDirection(pub u8);
4678
4679 #[doc = " This DE is used to relate basic level of current ridership."]
4680 #[doc = "\n\n@category: Infrastructure information"]
4681 #[doc = "\n\n@revision: V1.3.1"]
4682 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
4683 #[rasn(enumerated)]
4684 pub enum TransitVehicleOccupancy {
4685 occupancyUnknown = 0,
4686 occupancyEmpty = 1,
4687 occupancyVeryLow = 2,
4688 occupancyLow = 3,
4689 occupancyMed = 4,
4690 occupancyHigh = 5,
4691 occupancyNearlyFull = 6,
4692 occupancyFull = 7,
4693 }
4694
4695 #[doc = "This DE is used to relate basic information about the transit run in progress. This is"]
4696 #[doc = "typically used in a priority request to a signalized system and becomes part of the input processing for how that system"]
4697 #[doc = "will respond to the request."]
4698 #[doc = "- 0 - `loading`: parking and unable to move at this time"]
4699 #[doc = "- 1 - `anADAuse`: an ADA access is in progress (wheelchairs, kneeling, etc.)"]
4700 #[doc = "- 2 - `aBikeLoad`: loading of a bicycle is in progress"]
4701 #[doc = "- 3 - `doorOpen`: a vehicle door is open for passenger access"]
4702 #[doc = "- 4 - `charging`: a vehicle is connected to charging point"]
4703 #[doc = "- 5 - `atStopLine`: a vehicle is at the stop line for the lane it is in"]
4704 #[doc = "\n\n@note: Most of these values are used to detect that the transit vehicle in not in a state where movement can occur"]
4705 #[doc = "(and that therefore any priority signal should be ignored until the vehicle is again ready to depart)."]
4706 #[doc = "\n\n@category: Infrastructure information"]
4707 #[doc = "\n\n@revision: V1.3.1"]
4708 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4709 #[rasn(delegate)]
4710 pub struct TransitVehicleStatus(pub FixedBitString<8usize>);
4711
4712 #[doc = "This DF expresses the speed of the vehicle and the state of the transmission."]
4713 #[doc = "The transmission state of 'reverse' can be used as a sign value for the speed element when needed."]
4714 #[doc = "- @field transmisson: state of the transmission"]
4715 #[doc = "- @field speed: speed of the vehicle"]
4716 #[doc = "\n\n@category: Infrastructure information"]
4717 #[doc = "\n\n@revision: V1.3.1"]
4718 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4719 #[rasn(automatic_tags)]
4720 pub struct TransmissionAndSpeed {
4721 pub transmisson: TransmissionState,
4722 pub speed: Velocity,
4723 }
4724 impl TransmissionAndSpeed {
4725 pub fn new(transmisson: TransmissionState, speed: Velocity) -> Self {
4726 Self { transmisson, speed }
4727 }
4728 }
4729
4730 #[doc = "This DE is used to provide the current state of the vehicle transmission."]
4731 #[doc = "\n\n@category: Infrastructure information"]
4732 #[doc = "\n\n@revision: V1.3.1"]
4733 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
4734 #[rasn(enumerated)]
4735 pub enum TransmissionState {
4736 neutral = 0,
4737 park = 1,
4738 forwardGears = 2,
4739 reverseGears = 3,
4740 reserved1 = 4,
4741 reserved2 = 5,
4742 reserved3 = 6,
4743 unavailable = 7,
4744 }
4745
4746 #[doc = "The height of the vehicle, measured from the ground to the highest surface, excluding any antenna(s), and"]
4747 #[doc = "expressed in units of 5 cm. In cases of vehicles with adjustable ride heights, camper shells, and other devices which may"]
4748 #[doc = "cause the overall height to vary, the largest possible height will be used."]
4749 #[doc = "Value is the height of the vehicle, LSB units of 5 cm, range to 6.35 meters"]
4750 #[doc = "\n\n@unit: 5cm"]
4751 #[doc = "\n\n@category: Infrastructure information"]
4752 #[doc = "\n\n@revision: V1.3.1"]
4753 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4754 #[rasn(delegate, value("0..=127"))]
4755 pub struct VehicleHeight(pub u8);
4756
4757 #[doc = "This DF is used to contain either a (US) TemporaryID or an (EU) StationID in a simple frame."]
4758 #[doc = "These two different value domains are used to uniquely identify a vehicle or other object in these two regional DSRC"]
4759 #[doc = "value is unavailable but needed by another type of user (such as the roadside infrastructure sending data about an"]
4760 #[doc = "environments. In normal use cases, this value changes over time to prevent tracking of the subject vehicle. When this"]
4761 #[doc = "unequipped vehicle), the value zero shall be used. A typical restriction on the use of this value during a dialog or other"]
4762 #[doc = "exchange is that the value remains constant for the duration of that exchange. Refer to the performance requirements for"]
4763 #[doc = "a given application for details."]
4764 #[doc = "- @field entityID: representation for US stations"]
4765 #[doc = "- @field stationID: representation for EU stations"]
4766 #[doc = "\n\n@category: Infrastructure information"]
4767 #[doc = "\n\n@revision: V1.3.1"]
4768 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4769 #[rasn(choice, automatic_tags)]
4770 pub enum VehicleID {
4771 entityID(TemporaryID),
4772 stationID(StationID),
4773 }
4774
4775 #[doc = "This DE is a type list (i.e., a classification list) of the vehicle in terms of overall size. The"]
4776 #[doc = "data element entries follow the definitions defined in the US DOT Highway Performance Monitoring System (HPMS)."]
4777 #[doc = "Many infrastructure roadway operators collect and classify data according to this list for regulatory reporting needs."]
4778 #[doc = "Within the ITS industry and within the DSRC message set standards work, there are many similar lists of types for"]
4779 #[doc = "overlapping needs and uses."]
4780 #[doc = "- 0 - `none`: Not Equipped, Not known or unavailable"]
4781 #[doc = "- 1 - `unknown`: Does not fit any other category"]
4782 #[doc = "- 2 - `special`: Special use"]
4783 #[doc = "- 3 - `moto`: Motorcycle"]
4784 #[doc = "- 4 - `car`: Passenger car"]
4785 #[doc = "- 5 - `carOther`: Four tire single units"]
4786 #[doc = "- 6 - `bus`: Buses"]
4787 #[doc = "- 7 - `axleCnt2`: Two axle, six tire single units"]
4788 #[doc = "- 8 - `axleCnt3`: Three axle, single units"]
4789 #[doc = "- 9 - `axleCnt4`: Four or more axle, single unit"]
4790 #[doc = "- 10 - `axleCnt4Trailer`: Four or less axle, single trailer"]
4791 #[doc = "- 11 - `axleCnt5Trailer`: Five or less axle, single trailer"]
4792 #[doc = "- 12 - `axleCnt6Trailer`: Six or more axle, single trailer"]
4793 #[doc = "- 13 - `axleCnt5MultiTrailer`: Five or less axle, multi-trailer"]
4794 #[doc = "- 14 - `axleCnt6MultiTrailer`: Six axle, multi-trailer"]
4795 #[doc = "- 15 - `axleCnt7MultiTrailer`: Seven or more axle, multi-trailer"]
4796 #[doc = "\n\n@category: Infrastructure information"]
4797 #[doc = "\n\n@revision: V1.3.1"]
4798 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
4799 #[rasn(enumerated)]
4800 #[non_exhaustive]
4801 pub enum VehicleType {
4802 none = 0,
4803 unknown = 1,
4804 special = 2,
4805 moto = 3,
4806 car = 4,
4807 carOther = 5,
4808 bus = 6,
4809 axleCnt2 = 7,
4810 axleCnt3 = 8,
4811 axleCnt4 = 9,
4812 axleCnt4Trailer = 10,
4813 axleCnt5Trailer = 11,
4814 axleCnt6Trailer = 12,
4815 axleCnt5MultiTrailer = 13,
4816 axleCnt6MultiTrailer = 14,
4817 axleCnt7MultiTrailer = 15,
4818 }
4819
4820 #[doc = "This DE represents the velocity of an object, typically a vehicle speed or the recommended speed of"]
4821 #[doc = "travel along a roadway, expressed in unsigned units of 0.02 meters per second. When used with motor vehicles it may be"]
4822 #[doc = "combined with the transmission state to form a data frame for use. A value of 8191 shall be used when the speed is"]
4823 #[doc = "unavailable. Note that Velocity as used here is intended to be a scalar value and not a vector."]
4824 #[doc = "The value 8191 indicates that velocity is unavailable"]
4825 #[doc = "\n\n@unit: 0.02 m/s"]
4826 #[doc = "\n\n@category: Infrastructure information"]
4827 #[doc = "\n\n@revision: V1.3.1"]
4828 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4829 #[rasn(delegate, value("0..=8191"))]
4830 pub struct Velocity(pub u16);
4831
4832 #[doc = "This DE is used to provide the R09 version information."]
4833 #[doc = "\n\n@category: Infrastructure information"]
4834 #[doc = "\n\n@revision: V2.2.1"]
4835 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4836 #[rasn(delegate, value("0..=4294967295"))]
4837 pub struct VersionId(pub u32);
4838
4839 #[doc = "This DE is used to indicate to the vehicle that it must stop at the stop line and not move past."]
4840 #[doc = "If \"true\", the vehicles on this specific connecting maneuver have to stop on the stop-line and not to enter the collision area"]
4841 #[doc = "\n\n@category: Infrastructure information"]
4842 #[doc = "\n\n@revision: V1.3.1"]
4843 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
4844 #[rasn(delegate)]
4845 pub struct WaitOnStopline(pub bool);
4846 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4847 #[rasn(delegate, value("0..=10000"))]
4848 pub struct ZoneLength(pub u16);
4849 pub const ADD_GRP_A: RegionId = RegionId(1);
4850 pub const ADD_GRP_B: RegionId = RegionId(2);
4851 pub const ADD_GRP_C: RegionId = RegionId(3);
4852 pub const DIESEL: FuelType = FuelType(3);
4853 pub const ELECTRIC: FuelType = FuelType(4);
4854 pub const ETHANOL: FuelType = FuelType(2);
4855 pub const GASOLINE: FuelType = FuelType(1);
4856 pub const HYBRID: FuelType = FuelType(5);
4857 pub const HYDROGEN: FuelType = FuelType(6);
4858 pub const NAT_GAS_COMP: FuelType = FuelType(8);
4859 pub const NAT_GAS_LIQUID: FuelType = FuelType(7);
4860 pub const NO_REGION: RegionId = RegionId(0);
4861 pub const PROPANE: FuelType = FuelType(9);
4862 pub const UNKNOWN_FUEL: FuelType = FuelType(0);
4863}
4864#[allow(
4865 non_camel_case_types,
4866 non_snake_case,
4867 non_upper_case_globals,
4868 unused,
4869 clippy::too_many_arguments
4870)]
4871pub mod etsi_its_dsrc_add_grp_c {
4872 extern crate alloc;
4873 use core::borrow::Borrow;
4874
4875 use rasn::prelude::*;
4876
4877 use super::super::cdd_2_2_1::etsi_its_cdd::{Altitude, DeltaAltitude, StationID, VehicleMass};
4878 use super::super::dsrc_2_2_1::etsi_its_dsrc::{
4879 DeltaTime,
4880 FuelType,
4881 IntersectionID,
4882 LaneConnectionID,
4883 LaneID,
4884 NodeOffsetPointXY,
4885 NodeSetXY,
4886 PrioritizationResponseStatus,
4887 SignalGroupID,
4888 VehicleHeight,
4889 };
4890
4891 #[doc = "This DE defines an enumerated list of battery states."]
4892 #[doc = "\n\n@category: Infrastructure information"]
4893 #[doc = "\n\n@revision: V1.3.1"]
4894 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
4895 #[rasn(enumerated)]
4896 #[non_exhaustive]
4897 pub enum BatteryStatus {
4898 unknown = 0,
4899 critical = 1,
4900 low = 2,
4901 good = 3,
4902 }
4903
4904 #[doc = "This DF adds positioning support from the infrastructure to the vehicle."]
4905 #[doc = "- @field itsStationPositions: defines a list of ITS stations (e.g. vehicles) and their corresponding position on"]
4906 #[doc = " the driving lane as defined in the lane topology of the MapData message or the GNSS position"]
4907 #[doc = " deviation of the ITS Station from the high precision reference position in X/Y coordinates. It"]
4908 #[doc = " enables accurate, real-time positioning support to the moving ITS entities by the infrastructure.*"]
4909 #[doc = "\n\n@category: Infrastructure information"]
4910 #[doc = "\n\n@revision: V1.3.1"]
4911 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4912 #[rasn(automatic_tags, identifier = "ConnectionManeuverAssist-addGrpC")]
4913 #[non_exhaustive]
4914 pub struct ConnectionManeuverAssistAddGrpC {
4915 #[rasn(identifier = "itsStationPosition")]
4916 pub its_station_position: Option<ItsStationPositionList>,
4917 }
4918 impl ConnectionManeuverAssistAddGrpC {
4919 pub fn new(its_station_position: Option<ItsStationPositionList>) -> Self {
4920 Self {
4921 its_station_position,
4922 }
4923 }
4924 }
4925
4926 #[doc = "This DF defines the trajectory for travelling through the conflict area of an intersection and connects "]
4927 #[doc = "e.g an ingress with an egress lane. The trajectory is defined by two or more nodes. "]
4928 #[doc = "The starting node overlaps e.g. with the node of the ingress lane towards the"]
4929 #[doc = "conflict zone. The ending node overlaps e.g. with the first node of the connected egress lane. "]
4930 #[doc = "See the example in clause [ISO TS 19091] G.8.2.5."]
4931 #[doc = "- @field nodes: defines a list of nodes for the trajectory. It defines e.g. a geometric trajectory from an ingressing"]
4932 #[doc = " to a connected egressing lane and the X/Y position value of the first node of the trajectory is the same as"]
4933 #[doc = " the node of the ingress lane. The X/Y position of the last node is the same as the X/Y position of the first"]
4934 #[doc = " node of the egressing lane."]
4935 #[doc = "- @field connectionID: defines the identifier of an allowed `maneuver` (e.g. ingress / egress relation). "]
4936 #[doc = " A generic Lane offers one or more allowed `maneuvers`, therefore the trajectory is reference to the related `maneuver`."]
4937 #[doc = "\n\n@note: @ref Reg-GenericLane allows providing up to 4 connecting trajectories. In case a lane has more than 4 connecting trajectories,"]
4938 #[doc = "priority should be given to connecting trajectories of motorized traffic and complex manoeuvres."]
4939 #[doc = "\n\n@category: Infrastructure information"]
4940 #[doc = "\n\n@revision: V1.3.1"]
4941 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
4942 #[rasn(automatic_tags, identifier = "ConnectionTrajectory-addGrpC")]
4943 #[non_exhaustive]
4944 pub struct ConnectionTrajectoryAddGrpC {
4945 pub nodes: NodeSetXY,
4946 #[rasn(identifier = "connectionID")]
4947 pub connection_id: LaneConnectionID,
4948 }
4949 impl ConnectionTrajectoryAddGrpC {
4950 pub fn new(nodes: NodeSetXY, connection_id: LaneConnectionID) -> Self {
4951 Self {
4952 nodes,
4953 connection_id,
4954 }
4955 }
4956 }
4957
4958 #[doc = "This DE defines an enumerated list of toxic emission types for vehicles."]
4959 #[doc = "\n\n@category: Infrastructure information"]
4960 #[doc = "\n\n@revision: V1.3.1"]
4961 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
4962 #[rasn(enumerated)]
4963 #[non_exhaustive]
4964 pub enum EmissionType {
4965 euro1 = 0,
4966 euro2 = 1,
4967 euro3 = 2,
4968 euro4 = 3,
4969 euro5 = 4,
4970 euro6 = 5,
4971 }
4972
4973 #[doc = "This DE defines a list of reasons for sudden changes in"]
4974 #[doc = "eventState parameters, thereby offering a reason for extended waiting times."]
4975 #[doc = "\n\n@category: Infrastructure information"]
4976 #[doc = "\n\n@revision: V1.3.1"]
4977 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
4978 #[rasn(enumerated)]
4979 #[non_exhaustive]
4980 pub enum ExceptionalCondition {
4981 unknown = 0,
4982 publicTransportPriority = 1,
4983 emergencyVehiclePriority = 2,
4984 trainPriority = 3,
4985 bridgeOpen = 4,
4986 vehicleHeight = 5,
4987 weather = 6,
4988 trafficJam = 7,
4989 tunnelClosure = 8,
4990 meteringActive = 9,
4991 truckPriority = 10,
4992 bicyclePlatoonPriority = 11,
4993 vehiclePlatoonPriority = 12,
4994 }
4995
4996 #[doc = "This DF defines a list of prioritization responses e.g. public transport acceleration."]
4997 #[doc = "The signal prioritization (e.g. public transport) procedure in this profile follows two strategies."]
4998 #[doc = "- For simple prioritization requests, the CAM/SPAT messages are used. "]
4999 #[doc = " This allows the migration of old legal systems towards C-ITS."]
5000 #[doc = " In this case, the CAM message is used to trigger the request towards the traffic light controller. "]
5001 #[doc = " The traffic light controller checks the request and broadcasts the status for the priority request with this DF (see [ISO TS 19091] G.5.1.9)."]
5002 #[doc = "- For more complex signal requests, the SignalRequestMessage/SignalStatusMessage messages are to be used."]
5003 #[doc = "- @field activePrioritizations: list of Prioritizations."]
5004 #[doc = "\n\n@category: Infrastructure information"]
5005 #[doc = "\n\n@revision: V1.3.1"]
5006 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
5007 #[rasn(automatic_tags, identifier = "IntersectionState-addGrpC")]
5008 #[non_exhaustive]
5009 pub struct IntersectionStateAddGrpC {
5010 #[rasn(identifier = "activePrioritizations")]
5011 pub active_prioritizations: Option<PrioritizationResponseList>,
5012 }
5013 impl IntersectionStateAddGrpC {
5014 pub fn new(active_prioritizations: Option<PrioritizationResponseList>) -> Self {
5015 Self {
5016 active_prioritizations,
5017 }
5018 }
5019 }
5020
5021 #[doc = "This DF is used to provide real-time positioning information feedback to a specific ITS station "]
5022 #[doc = "(e.g. vehicle, pedestrian, bicycle) by infrastructure equipment."]
5023 #[doc = " The position information includes, for example, the driving, crossing lane and/or the X/Y coordinates in relation to"]
5024 #[doc = "the reference position of the MapData. The `timeReference` indicates the time stamp of the the"]
5025 #[doc = "message (received from an ITS station) for which the positioning feedback has been computed."]
5026 #[doc = "- @field stationID: unique identifier."]
5027 #[doc = "- @field laneID: LaneID."]
5028 #[doc = "- @field nodeXY: NodeOffsetPointXY."]
5029 #[doc = "- @field timeReference: TimeReference."]
5030 #[doc = "\n\n@note: The computation of the positioning feedback is out of focus of this standard."]
5031 #[doc = "\n\n@category: Infrastructure information"]
5032 #[doc = "\n\n@revision: V1.3.1"]
5033 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
5034 #[rasn(automatic_tags)]
5035 #[non_exhaustive]
5036 pub struct ItsStationPosition {
5037 #[rasn(identifier = "stationID")]
5038 pub station_id: StationID,
5039 #[rasn(identifier = "laneID")]
5040 pub lane_id: Option<LaneID>,
5041 #[rasn(identifier = "nodeXY")]
5042 pub node_xy: Option<NodeOffsetPointXY>,
5043 #[rasn(identifier = "timeReference")]
5044 pub time_reference: Option<TimeReference>,
5045 }
5046 impl ItsStationPosition {
5047 pub fn new(
5048 station_id: StationID,
5049 lane_id: Option<LaneID>,
5050 node_xy: Option<NodeOffsetPointXY>,
5051 time_reference: Option<TimeReference>,
5052 ) -> Self {
5053 Self {
5054 station_id,
5055 lane_id,
5056 node_xy,
5057 time_reference,
5058 }
5059 }
5060 }
5061 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
5062 #[rasn(delegate, size("1..=5"))]
5063 pub struct ItsStationPositionList(pub SequenceOf<ItsStationPosition>);
5064
5065 #[doc = "Lanes may have limitations regarding vehicle height (e.g. due to a tunnel) and vehicle weight (e.g. due to a bridge). "]
5066 #[doc = "- @field maxVehicleHeight: maximum allowed vehicle height"]
5067 #[doc = "- @field maxVehicleWeight: maximum allowed vehicle mass"]
5068 #[doc = "\n\n@category: Infrastructure information"]
5069 #[doc = "\n\n@revision: V1.3.1"]
5070 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
5071 #[rasn(automatic_tags, identifier = "LaneAttributes-addGrpC")]
5072 #[non_exhaustive]
5073 pub struct LaneAttributesAddGrpC {
5074 #[rasn(identifier = "maxVehicleHeight")]
5075 pub max_vehicle_height: Option<VehicleHeight>,
5076 #[rasn(identifier = "maxVehicleWeight")]
5077 pub max_vehicle_weight: Option<VehicleMass>,
5078 }
5079 impl LaneAttributesAddGrpC {
5080 pub fn new(
5081 max_vehicle_height: Option<VehicleHeight>,
5082 max_vehicle_weight: Option<VehicleMass>,
5083 ) -> Self {
5084 Self {
5085 max_vehicle_height,
5086 max_vehicle_weight,
5087 }
5088 }
5089 }
5090
5091 #[doc = "This DF defines a list of three-dimensional positions of signal heads in an intersection. "]
5092 #[doc = "It enables vehicles to identify the signal head location for optical evaluation of the traffic light. "]
5093 #[doc = "Combined with the SPAT/MapData messages, it enables e.g. driving vehicles to enhance safety decision in critical situations."]
5094 #[doc = "- @field signalHeadLocations: list of geo positions"]
5095 #[doc = "\n\n@category: Infrastructure information"]
5096 #[doc = "\n\n@revision: V1.3.1"]
5097 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
5098 #[rasn(automatic_tags, identifier = "MapData-addGrpC")]
5099 #[non_exhaustive]
5100 pub struct MapDataAddGrpC {
5101 #[rasn(identifier = "signalHeadLocations")]
5102 pub signal_head_locations: Option<SignalHeadLocationList>,
5103 }
5104 impl MapDataAddGrpC {
5105 pub fn new(signal_head_locations: Option<SignalHeadLocationList>) -> Self {
5106 Self {
5107 signal_head_locations,
5108 }
5109 }
5110 }
5111
5112 #[doc = "Priority and preemption have a considerable impact to the timing parameters in the SPAT message (eventState)."]
5113 #[doc = "User acceptance is expected to increase if the reason for sudden changes in timing parameters is communicated to them."]
5114 #[doc = "- @field stateChangeReason: reason code"]
5115 #[doc = "\n\n@category: Infrastructure information"]
5116 #[doc = "\n\n@revision: V1.3.1"]
5117 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
5118 #[rasn(automatic_tags, identifier = "MovementEvent-addGrpC")]
5119 #[non_exhaustive]
5120 pub struct MovementEventAddGrpC {
5121 #[rasn(identifier = "stateChangeReason")]
5122 pub state_change_reason: Option<ExceptionalCondition>,
5123 }
5124 impl MovementEventAddGrpC {
5125 pub fn new(state_change_reason: Option<ExceptionalCondition>) -> Self {
5126 Self {
5127 state_change_reason,
5128 }
5129 }
5130 }
5131
5132 #[doc = "This DF is used to to identify a node of a lane (waypoint) by its `lane` and node identifier `id`. "]
5133 #[doc = "The `intersectionID` is used if the referenced lane belongs to an adjacent intersection. If the node"]
5134 #[doc = "belongs to a connection trajectory ([ISO TS 19091] G.5.1.2) the `connectionID` is used."]
5135 #[doc = "- @field id: unique identifier."]
5136 #[doc = "- @field lane: identifier from lane."]
5137 #[doc = "- @field connectionID: identifier from connection."]
5138 #[doc = "- @field intersectionID: identifier from intersection."]
5139 #[doc = "\n\n@category: Infrastructure information"]
5140 #[doc = "\n\n@revision: V1.3.1"]
5141 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
5142 #[rasn(automatic_tags)]
5143 #[non_exhaustive]
5144 pub struct Node {
5145 pub id: Integer,
5146 pub lane: Option<LaneID>,
5147 #[rasn(identifier = "connectionID")]
5148 pub connection_id: Option<LaneConnectionID>,
5149 #[rasn(identifier = "intersectionID")]
5150 pub intersection_id: Option<IntersectionID>,
5151 }
5152 impl Node {
5153 pub fn new(
5154 id: Integer,
5155 lane: Option<LaneID>,
5156 connection_id: Option<LaneConnectionID>,
5157 intersection_id: Option<IntersectionID>,
5158 ) -> Self {
5159 Self {
5160 id,
5161 lane,
5162 connection_id,
5163 intersection_id,
5164 }
5165 }
5166 }
5167
5168 #[doc = "This DF defines additional attributes to support public transport and to enable a simple way of defining lane links."]
5169 #[doc = "- @field ptvRequest: defines control types attached to a node on a lane used by public transport for triggering"]
5170 #[doc = " the transmission of messages (e.g. prioritization request). It includes control points for public transport prioritization. "]
5171 #[doc = " These control points are currently implemented by legacy systems using hardware sensors mounted on the roadside."]
5172 #[doc = "- @field nodeLink: defines a link to one or to a set of another node/lane from this node. The nodeLink allows to set a link between specific nodes "]
5173 #[doc = " of generic lanes or trajectories. This supports e.g. lane merging/diverging situations ([ISO TS 19091] G.8.2.7) and the linking of trajectories "]
5174 #[doc = " in the conflict zone to lanes (see example [ISO TS 19091] G.8.2.5)."]
5175 #[doc = "- @field node: defines an identifier of this node."]
5176 #[doc = "\n\n@category: Infrastructure information"]
5177 #[doc = "\n\n@revision: V1.3.1"]
5178 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
5179 #[rasn(automatic_tags, identifier = "NodeAttributeSet-addGrpC")]
5180 #[non_exhaustive]
5181 pub struct NodeAttributeSetAddGrpC {
5182 #[rasn(identifier = "ptvRequest")]
5183 pub ptv_request: Option<PtvRequestType>,
5184 #[rasn(identifier = "nodeLink")]
5185 pub node_link: Option<NodeLink>,
5186 pub node: Option<Node>,
5187 }
5188 impl NodeAttributeSetAddGrpC {
5189 pub fn new(
5190 ptv_request: Option<PtvRequestType>,
5191 node_link: Option<NodeLink>,
5192 node: Option<Node>,
5193 ) -> Self {
5194 Self {
5195 ptv_request,
5196 node_link,
5197 node,
5198 }
5199 }
5200 }
5201 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
5202 #[rasn(delegate, size("1..=5"))]
5203 pub struct NodeLink(pub SequenceOf<Node>);
5204
5205 #[doc = "This DF includes the altitude data element defined in the common data dictionary [ETSI CDD]."]
5206 #[doc = "- @field elevation: the data element is replaced by the ETSI `altitude` data element using the regional extension. "]
5207 #[doc = " The `altitude` data element is defined in Position3D-addGrpC of this profile."]
5208 #[doc = " Position3D-addGrpC extends the @ref Position3D using the regional extension framework."]
5209 #[doc = "\n\n@category: Infrastructure information"]
5210 #[doc = "\n\n@revision: V1.3.1"]
5211 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
5212 #[rasn(automatic_tags, identifier = "Position3D-addGrpC")]
5213 #[non_exhaustive]
5214 pub struct Position3DAddGrpC {
5215 pub altitude: Altitude,
5216 }
5217 impl Position3DAddGrpC {
5218 pub fn new(altitude: Altitude) -> Self {
5219 Self { altitude }
5220 }
5221 }
5222
5223 #[doc = "This DF is used to provide the prioritization status response and the"]
5224 #[doc = "signal group identifier for a specific ITS station (e.g. vehicle)."]
5225 #[doc = "- @field stationID: StationID."]
5226 #[doc = "- @field priorState: PrioritizationResponseStatus."]
5227 #[doc = "- @field signalGroup: SignalGroupID."]
5228 #[doc = "\n\n@category: Infrastructure information"]
5229 #[doc = "\n\n@revision: V1.3.1"]
5230 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
5231 #[rasn(automatic_tags)]
5232 #[non_exhaustive]
5233 pub struct PrioritizationResponse {
5234 #[rasn(identifier = "stationID")]
5235 pub station_id: StationID,
5236 #[rasn(identifier = "priorState")]
5237 pub prior_state: PrioritizationResponseStatus,
5238 #[rasn(identifier = "signalGroup")]
5239 pub signal_group: SignalGroupID,
5240 }
5241 impl PrioritizationResponse {
5242 pub fn new(
5243 station_id: StationID,
5244 prior_state: PrioritizationResponseStatus,
5245 signal_group: SignalGroupID,
5246 ) -> Self {
5247 Self {
5248 station_id,
5249 prior_state,
5250 signal_group,
5251 }
5252 }
5253 }
5254 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
5255 #[rasn(delegate, size("1..=10"))]
5256 pub struct PrioritizationResponseList(pub SequenceOf<PrioritizationResponse>);
5257
5258 #[doc = "This DE defines a list of activation requests used for C-ITS migration of legacy public "]
5259 #[doc = "transport prioritization systems. "]
5260 #[doc = "The activation points are used while approaching to an intersection."]
5261 #[doc = "\n\n@category: Infrastructure information"]
5262 #[doc = "\n\n@revision: V1.3.1"]
5263 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
5264 #[rasn(enumerated)]
5265 #[non_exhaustive]
5266 pub enum PtvRequestType {
5267 preRequest = 0,
5268 mainRequest = 1,
5269 doorCloseRequest = 2,
5270 cancelRequest = 3,
5271 emergencyRequest = 4,
5272 }
5273
5274 #[doc = "This DE defines a list of reasons for rejected priority requests."]
5275 #[doc = "\n\n@category: Infrastructure information"]
5276 #[doc = "\n\n@revision: V1.3.1"]
5277 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash, Copy)]
5278 #[rasn(enumerated)]
5279 #[non_exhaustive]
5280 pub enum RejectedReason {
5281 unknown = 0,
5282 exceptionalCondition = 1,
5283 maxWaitingTimeExceeded = 2,
5284 ptPriorityDisabled = 3,
5285 higherPTPriorityGranted = 4,
5286 vehicleTrackingUnknown = 5,
5287 }
5288
5289 #[doc = "Some road authorities like to give priority to vehicles based on the type of fuel they use. In addition,"]
5290 #[doc = "electric vehicles may receive priority based on their battery status."]
5291 #[doc = "- @field fuel: fuel used by vehicle."]
5292 #[doc = "- @field batteryStatus: current batter status of vehicle."]
5293 #[doc = "\n\n@category: Infrastructure information"]
5294 #[doc = "\n\n@revision: V1.3.1"]
5295 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
5296 #[rasn(automatic_tags, identifier = "RequestorDescription-addGrpC")]
5297 #[non_exhaustive]
5298 pub struct RequestorDescriptionAddGrpC {
5299 pub fuel: Option<FuelType>,
5300 #[rasn(identifier = "batteryStatus")]
5301 pub battery_status: Option<BatteryStatus>,
5302 }
5303 impl RequestorDescriptionAddGrpC {
5304 pub fn new(fuel: Option<FuelType>, battery_status: Option<BatteryStatus>) -> Self {
5305 Self {
5306 fuel,
5307 battery_status,
5308 }
5309 }
5310 }
5311
5312 #[doc = "This DF defines the driving restriction based on toxic emission type. "]
5313 #[doc = "The meaning of the word `restriction` is ambiguous as it may have a double interpretation, being:"]
5314 #[doc = " - only these vehicles are allowed OR "]
5315 #[doc = " - these vehicles are not allowed and all others are. "]
5316 #[doc = "The former is what is intended by the base standard."]
5317 #[doc = "- @field emission: restriction baesed on emission."]
5318 #[doc = "- @field fuel: restriction baesed on fuel."]
5319 #[doc = "\n\n@category: Infrastructure information"]
5320 #[doc = "\n\n@revision: V1.3.1"]
5321 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
5322 #[rasn(automatic_tags, identifier = "RestrictionUserType-addGrpC")]
5323 #[non_exhaustive]
5324 pub struct RestrictionUserTypeAddGrpC {
5325 pub emission: Option<EmissionType>,
5326 pub fuel: Option<FuelType>,
5327 }
5328 impl RestrictionUserTypeAddGrpC {
5329 pub fn new(emission: Option<EmissionType>, fuel: Option<FuelType>) -> Self {
5330 Self { emission, fuel }
5331 }
5332 }
5333
5334 #[doc = "This DF defines the XYZ position of a signal head within an intersection"]
5335 #[doc = "and indicates the related signal group identifier."]
5336 #[doc = "\n\n@category: Infrastructure information"]
5337 #[doc = "\n\n@revision: V1.3.1"]
5338 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
5339 #[rasn(automatic_tags)]
5340 #[non_exhaustive]
5341 pub struct SignalHeadLocation {
5342 #[rasn(identifier = "nodeXY")]
5343 pub node_xy: NodeOffsetPointXY,
5344 #[rasn(identifier = "nodeZ")]
5345 pub node_z: DeltaAltitude,
5346 #[rasn(identifier = "signalGroupID")]
5347 pub signal_group_id: SignalGroupID,
5348 }
5349 impl SignalHeadLocation {
5350 pub fn new(
5351 node_xy: NodeOffsetPointXY,
5352 node_z: DeltaAltitude,
5353 signal_group_id: SignalGroupID,
5354 ) -> Self {
5355 Self {
5356 node_xy,
5357 node_z,
5358 signal_group_id,
5359 }
5360 }
5361 }
5362 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
5363 #[rasn(delegate, size("1..=64"))]
5364 pub struct SignalHeadLocationList(pub SequenceOf<SignalHeadLocation>);
5365
5366 #[doc = "The traffic control centre (TCC) may advice a public transport vehicle (e.g. bus) to synchronize his travel time. "]
5367 #[doc = "This may happen when, for example, two busses, due to special traffic conditions, are out of schedule. "]
5368 #[doc = "The first might be too late, the second too fast. The consequence is that the second is driving"]
5369 #[doc = "just behind the first and is empty as all passengers are within the first one. To avoid this often-occurring"]
5370 #[doc = "situation, the TCC transmits time synchronization advices to the public transport vehicles using the"]
5371 #[doc = "signal status message. "]
5372 #[doc = "- @field synchToSchedule: DeltaTime."]
5373 #[doc = "- @field rejectedReason: RejectedReason."]
5374 #[doc = "\n\n@Note: The @ref PrioritizationResponseStatus provides optionally the reason for prioritization response rejection."]
5375 #[doc = "\n\n@category: Infrastructure information"]
5376 #[doc = "\n\n@revision: V1.3.1"]
5377 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
5378 #[rasn(automatic_tags, identifier = "SignalStatusPackage-addGrpC")]
5379 #[non_exhaustive]
5380 pub struct SignalStatusPackageAddGrpC {
5381 #[rasn(identifier = "synchToSchedule")]
5382 pub synch_to_schedule: Option<DeltaTime>,
5383 #[rasn(identifier = "rejectedReason")]
5384 pub rejected_reason: Option<RejectedReason>,
5385 }
5386 impl SignalStatusPackageAddGrpC {
5387 pub fn new(
5388 synch_to_schedule: Option<DeltaTime>,
5389 rejected_reason: Option<RejectedReason>,
5390 ) -> Self {
5391 Self {
5392 synch_to_schedule,
5393 rejected_reason,
5394 }
5395 }
5396 }
5397
5398 #[doc = "This DE defines a value in milliseconds in the current minute related to UTC time. "]
5399 #[doc = "The range of 60 000 covers one minute (60 seconds * 1 000 milliseconds)"]
5400 #[doc = "\n\n@category: Infrastructure information"]
5401 #[doc = "\n\n@revision: V1.3.1"]
5402 #[derive(AsnType, Debug, Clone, Decode, Encode, PartialEq, Eq, Hash)]
5403 #[rasn(delegate, value("0..=60000"))]
5404 pub struct TimeReference(pub u16);
5405}
5406#[allow(
5407 non_camel_case_types,
5408 non_snake_case,
5409 non_upper_case_globals,
5410 unused,
5411 clippy::too_many_arguments
5412)]
5413pub mod etsi_its_dsrc_region {
5414 extern crate alloc;
5415 use core::borrow::Borrow;
5416
5417 use rasn::prelude::*;
5418
5419 use super::super::dsrc_2_2_1::etsi_its_dsrc::*;
5420 use super::super::dsrc_2_2_1::etsi_its_dsrc_add_grp_c::{
5421 ConnectionManeuverAssistAddGrpC,
5422 ConnectionTrajectoryAddGrpC,
5423 IntersectionStateAddGrpC,
5424 LaneAttributesAddGrpC,
5425 MapDataAddGrpC,
5426 MovementEventAddGrpC,
5427 NodeAttributeSetAddGrpC,
5428 Position3DAddGrpC,
5429 RequestorDescriptionAddGrpC,
5430 RestrictionUserTypeAddGrpC,
5431 SignalStatusPackageAddGrpC,
5432 };
5433}