Skip to main content

c_its_parser/standards/
dsrc_2_2_1.rs

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}