1#![allow(clippy::type_complexity)]
9
10use crate::payload::stable::StablePayloadInit;
11
12pub const PAYLOAD_CONTRACT_FIXTURE_VERSION: u32 = 1;
13
14pub const CAN_FLAG_EFF: u32 = 1 << 0;
15pub const CAN_FLAG_RTR: u32 = 1 << 1;
16pub const CAN_FLAG_ERR: u32 = 1 << 2;
17pub const CAN_FD_FLAG_BRS: u32 = 1 << 8;
18pub const CAN_FD_FLAG_ESI: u32 = 1 << 9;
19
20pub const SOMEIP_IPV4_UDP_SINGLE_MTU_BUDGET: usize = 1_456;
21pub const SOMEIP_MTU_SIGNAL_SAMPLE_COUNT: usize = 59;
22
23pub const RADAR_ARS548_MAX_DETECTIONS: usize = 800;
24pub const RADAR_ARS548_DETECTION_RECORD_BYTES: usize = 44;
25pub const RADAR_ARS548_DETECTION_ARRAY_BYTES: usize =
26 RADAR_ARS548_MAX_DETECTIONS * RADAR_ARS548_DETECTION_RECORD_BYTES;
27pub const RADAR_ARS548_DETECTION_MESSAGE_BYTES: usize = 35_336;
28pub const RADAR_ARS548_MAX_TRACKED_OBJECTS: usize = 50;
29
30pub const LIDAR_POINT_FORMAT_XYZIRCAEDT: u32 = 1;
31pub const LIDAR_XYZIRCAEDT_POINT_BYTES: usize = 32;
32pub const LIDAR_HESAI_AT128_WIDTH: u32 = 1_200;
33pub const LIDAR_HESAI_AT128_HEIGHT: u32 = 128;
34pub const LIDAR_HESAI_AT128_POINT_COUNT: usize = 153_600;
35pub const LIDAR_HESAI_AT128_ROW_STEP_BYTES: u32 = 38_400;
36pub const LIDAR_HESAI_AT128_POINTS_BYTES: usize = 4_915_200;
37pub const LIDAR_HESAI_AT128_POINTS_PER_SECOND: u32 = 1_536_000;
38pub const LIDAR_HESAI_AT128_SCAN_DURATION_NS: u32 = 100_000_000;
39pub const LIDAR_HESAI_AT128_HORIZONTAL_FOV_MDEG: u32 = 120_000;
40pub const LIDAR_HESAI_AT128_VERTICAL_FOV_MDEG: u32 = 25_400;
41pub const LIDAR_HESAI_AT128_HORIZONTAL_RESOLUTION_MDEG: u32 = 100;
42pub const LIDAR_HESAI_AT128_VERTICAL_RESOLUTION_MDEG: u32 = 200;
43pub const LIDAR_HESAI_AT128_RANGE_10PCT_REFLECTIVITY_M: u32 = 210;
44
45pub const CAMERA_8MP_WIDTH: u32 = 3_840;
46pub const CAMERA_8MP_HEIGHT: u32 = 2_160;
47pub const CAMERA_BAYER_RGGB12P_STRIDE_BYTES: u32 = 5_760;
48pub const CAMERA_BAYER_RGGB12P_BYTES: usize = 12_441_600;
49pub const CAMERA_CARLA_BGRA32_BYTES: usize = 33_177_600;
50pub const BAYER_PATTERN_RGGB: u32 = 1;
51pub const PIXEL_FORMAT_BAYER_RGGB12P: u32 = 1;
52pub const BITS_PER_SAMPLE_12: u32 = 12;
53pub const PACKED_LAYOUT_12P_LSB: u32 = 1;
54
55#[repr(C)]
56#[derive(
57 Clone, Copy, crate::StablePayload, crate::ByteBackedStablePayload, crate::StablePayloadInit,
58)]
59#[stable_payload(type_name = "org.eclipse.uprotocol.bench.v1.BenchHeaderV1")]
60pub struct BenchHeaderV1 {
61 pub case_id: u32,
62 pub sequence: u32,
63 pub semantic_reference_len: u32,
64 pub schema_version: u32,
65}
66
67#[repr(C)]
68#[derive(
69 Clone, Copy, crate::StablePayload, crate::ByteBackedStablePayload, crate::StablePayloadInit,
70)]
71#[stable_payload(type_name = "org.eclipse.uprotocol.bench.v1.Vector3fV1")]
72pub struct Vector3fV1 {
73 pub x: f32,
74 pub y: f32,
75 pub z: f32,
76}
77
78#[repr(C)]
79#[derive(
80 Clone, Copy, crate::StablePayload, crate::ByteBackedStablePayload, crate::StablePayloadInit,
81)]
82#[stable_payload(type_name = "org.eclipse.uprotocol.bench.v1.QuaternionfV1")]
83pub struct QuaternionfV1 {
84 pub x: f32,
85 pub y: f32,
86 pub z: f32,
87 pub w: f32,
88}
89
90#[repr(C)]
91#[derive(
92 Clone, Copy, crate::StablePayload, crate::ByteBackedStablePayload, crate::StablePayloadInit,
93)]
94#[stable_payload(type_name = "org.eclipse.uprotocol.bench.v1.Pose3dV1")]
95pub struct Pose3dV1 {
96 pub translation_m: Vector3fV1,
97 pub rotation: QuaternionfV1,
98}
99
100#[repr(C)]
101#[derive(
102 Clone, Copy, crate::StablePayload, crate::ByteBackedStablePayload, crate::StablePayloadInit,
103)]
104#[stable_payload(type_name = "org.eclipse.uprotocol.bench.v1.CameraIntrinsicsV1")]
105pub struct CameraIntrinsicsV1 {
106 pub fx: f32,
107 pub fy: f32,
108 pub cx: f32,
109 pub cy: f32,
110 pub skew: f32,
111 pub distortion_model: u32,
112 pub distortion: [f32; 8],
113}
114
115#[repr(C)]
116#[derive(
117 Clone, Copy, crate::StablePayload, crate::ByteBackedStablePayload, crate::StablePayloadInit,
118)]
119#[stable_payload(type_name = "org.eclipse.uprotocol.bench.v1.RoiV1")]
120pub struct RoiV1 {
121 pub x: u32,
122 pub y: u32,
123 pub width: u32,
124 pub height: u32,
125}
126
127#[repr(C)]
128#[derive(crate::StablePayload, crate::ByteBackedStablePayload, crate::StablePayloadInit)]
129#[stable_payload(type_name = "org.eclipse.uprotocol.bench.v1.CanClassicFrameV1")]
130pub struct CanClassicFrameV1 {
131 pub header: BenchHeaderV1,
132 pub interface_id: u32,
133 pub can_id: u32,
134 pub flags: u32,
135 pub reserved0: u32,
136 pub bus_timestamp_ns: u64,
137 pub len: u8,
138 pub len8_dlc: u8,
139 pub data: [u8; 8],
140 pub reserved1: [u8; 2],
141 pub checksum: u32,
142}
143
144#[repr(C)]
145#[derive(crate::StablePayload, crate::ByteBackedStablePayload, crate::StablePayloadInit)]
146#[stable_payload(type_name = "org.eclipse.uprotocol.bench.v1.CanFdFrameV1")]
147pub struct CanFdFrameV1 {
148 pub header: BenchHeaderV1,
149 pub interface_id: u32,
150 pub can_id: u32,
151 pub flags: u32,
152 pub reserved0: u32,
153 pub bus_timestamp_ns: u64,
154 pub len: u8,
155 pub data: [u8; 64],
156 pub reserved1: [u8; 3],
157 pub checksum: u32,
158}
159
160#[repr(C)]
161#[derive(
162 Clone, Copy, crate::StablePayload, crate::ByteBackedStablePayload, crate::StablePayloadInit,
163)]
164#[stable_payload(type_name = "org.eclipse.uprotocol.bench.v1.SignalSampleV1")]
165pub struct SignalSampleV1 {
166 pub signal_id: u32,
167 pub status: u32,
168 pub timestamp_ns: u64,
169 pub value: f64,
170}
171
172#[repr(C)]
173#[derive(crate::StablePayload, crate::ByteBackedStablePayload, crate::StablePayloadInit)]
174#[stable_payload(type_name = "org.eclipse.uprotocol.bench.v1.SomeIpSignalBatchMtuV1")]
175pub struct SomeIpSignalBatchMtuV1 {
176 pub header: BenchHeaderV1,
177 pub source_timestamp_ns: u64,
178 pub length: u32,
179 pub sample_count: u32,
180 pub service_id: u16,
181 pub method_or_event_id: u16,
182 pub client_id: u16,
183 pub session_id: u16,
184 pub protocol_version: u8,
185 pub interface_version: u8,
186 pub message_type: u8,
187 pub return_code: u8,
188 pub reserved0: u32,
189 pub samples: [SignalSampleV1; SOMEIP_MTU_SIGNAL_SAMPLE_COUNT],
190 pub checksum: u32,
191 pub reserved1: u32,
192}
193
194#[repr(C)]
195#[derive(
196 Clone, Copy, crate::StablePayload, crate::ByteBackedStablePayload, crate::StablePayloadInit,
197)]
198#[stable_payload(type_name = "org.eclipse.uprotocol.bench.v1.StreamChunkHeaderV1")]
199pub struct StreamChunkHeaderV1 {
200 pub header: BenchHeaderV1,
201 pub stream_id: u64,
202 pub codec: u32,
203 pub flags: u32,
204 pub byte_offset: u64,
205 pub chunk_index: u32,
206 pub chunk_count: u32,
207 pub source_timestamp_ns: u64,
208 pub checksum: u32,
209 pub reserved0: u32,
210}
211
212#[repr(C)]
213#[derive(crate::StablePayload, crate::ByteBackedStablePayload, crate::StablePayloadInit)]
214#[stable_payload(type_name = "org.eclipse.uprotocol.bench.v1.StreamChunk4kV1")]
215pub struct StreamChunk4kV1 {
216 pub meta: StreamChunkHeaderV1,
217 pub chunk: [u8; 4_096],
218}
219
220#[repr(C)]
221#[derive(crate::StablePayload, crate::ByteBackedStablePayload, crate::StablePayloadInit)]
222#[stable_payload(type_name = "org.eclipse.uprotocol.bench.v1.StreamChunk64kV1")]
223pub struct StreamChunk64kV1 {
224 pub meta: StreamChunkHeaderV1,
225 pub chunk: [u8; 65_536],
226}
227
228#[repr(C)]
229#[derive(
230 Clone, Copy, crate::StablePayload, crate::ByteBackedStablePayload, crate::StablePayloadInit,
231)]
232#[stable_payload(type_name = "org.eclipse.uprotocol.bench.v1.Ars548DetectionV1")]
233pub struct Ars548DetectionV1 {
234 pub azimuth_angle: f32,
235 pub azimuth_angle_std: f32,
236 pub elevation_angle: f32,
237 pub elevation_angle_std: f32,
238 pub range: f32,
239 pub range_std: f32,
240 pub range_rate: f32,
241 pub range_rate_std: f32,
242 pub measurement_id: u16,
243 pub object_id: u16,
244 pub sort_index: u16,
245 pub invalid_flags: u8,
246 pub rcs: i8,
247 pub positive_predictive_value: u8,
248 pub classification: u8,
249 pub multi_target_probability: u8,
250 pub ambiguity_flag: u8,
251}
252
253#[repr(C)]
254#[derive(crate::StablePayload, crate::ByteBackedStablePayload, crate::StablePayloadInit)]
255#[stable_payload(type_name = "org.eclipse.uprotocol.bench.v1.RadarDetectionListArs548V1")]
256pub struct RadarDetectionListArs548V1 {
257 pub header: BenchHeaderV1,
258 pub measurement_timestamp_ns: u64,
259 pub sensor_id: u32,
260 pub measurement_counter: u32,
261 pub cycle_counter: u32,
262 pub list_numofdetections: u32,
263 pub detections: [Ars548DetectionV1; RADAR_ARS548_MAX_DETECTIONS],
264 pub checksum: u32,
265 pub reserved0: u32,
266}
267
268#[cfg(feature = "payload-contract-large-fixtures")]
269#[repr(C)]
270#[derive(
271 Clone, Copy, crate::StablePayload, crate::ByteBackedStablePayload, crate::StablePayloadInit,
272)]
273#[stable_payload(type_name = "org.eclipse.uprotocol.bench.v1.LidarPointXyzircaedtV1")]
274pub struct LidarPointXyzircaedtV1 {
275 pub x: f32,
276 pub y: f32,
277 pub z: f32,
278 pub intensity: u8,
279 pub return_type: u8,
280 pub channel: u16,
281 pub azimuth: f32,
282 pub elevation: f32,
283 pub distance: f32,
284 pub time_offset_ns: u32,
285}
286
287#[cfg(feature = "payload-contract-large-fixtures")]
288#[repr(C)]
289#[derive(crate::StablePayload, crate::ByteBackedStablePayload, crate::StablePayloadInit)]
290#[stable_payload(type_name = "org.eclipse.uprotocol.bench.v1.LidarPointCloudHesaiAt128V1")]
291pub struct LidarPointCloudHesaiAt128V1 {
292 pub header: BenchHeaderV1,
293 pub frame_counter: u64,
294 pub sensor_timestamp_ns: u64,
295 pub scan_duration_ns: u32,
296 pub lidar_id: u32,
297 pub width: u32,
298 pub height: u32,
299 pub point_count: u32,
300 pub point_step: u32,
301 pub row_step: u32,
302 pub points_per_second: u32,
303 pub horizontal_fov_mdeg: u32,
304 pub vertical_fov_mdeg: u32,
305 pub horizontal_resolution_mdeg: u32,
306 pub vertical_resolution_mdeg: u32,
307 pub range_10pct_reflectivity_m: u32,
308 pub point_format: u32,
309 pub is_bigendian: u8,
310 pub is_dense: u8,
311 pub reserved0: [u8; 2],
312 pub checksum: u32,
313 pub extrinsics: Pose3dV1,
314 pub points: [LidarPointXyzircaedtV1; LIDAR_HESAI_AT128_POINT_COUNT],
315 pub reserved1: u32,
316}
317
318#[cfg(feature = "payload-contract-large-fixtures")]
319#[repr(C)]
320#[derive(crate::StablePayload, crate::ByteBackedStablePayload, crate::StablePayloadInit)]
321#[stable_payload(type_name = "org.eclipse.uprotocol.bench.v1.CameraBayerRggb12pFrame8mpV1")]
322pub struct CameraBayerRggb12pFrame8mpV1 {
323 pub header: BenchHeaderV1,
324 pub frame_counter: u64,
325 pub sensor_timestamp_ns: u64,
326 pub exposure_start_ns: u64,
327 pub camera_id: u32,
328 pub width: u32,
329 pub height: u32,
330 pub stride_bytes: u32,
331 pub bayer_pattern: u32,
332 pub bits_per_sample: u32,
333 pub packed_layout: u32,
334 pub exposure_time_us: u32,
335 pub analog_gain: f32,
336 pub digital_gain: f32,
337 pub intrinsics: CameraIntrinsicsV1,
338 pub extrinsics: Pose3dV1,
339 pub roi: RoiV1,
340 pub checksum: u32,
341 pub pixels: [u8; CAMERA_BAYER_RGGB12P_BYTES],
342}
343
344pub type CanClassicFrameV1Init<'a> = <CanClassicFrameV1 as StablePayloadInit>::Init<'a>;
345pub type CanFdFrameV1Init<'a> = <CanFdFrameV1 as StablePayloadInit>::Init<'a>;
346pub type SomeIpSignalBatchMtuV1Init<'a> = <SomeIpSignalBatchMtuV1 as StablePayloadInit>::Init<'a>;
347pub type StreamChunk4kV1Init<'a> = <StreamChunk4kV1 as StablePayloadInit>::Init<'a>;
348pub type RadarDetectionListArs548V1Init<'a> =
349 <RadarDetectionListArs548V1 as StablePayloadInit>::Init<'a>;
350pub type StreamChunk64kV1Init<'a> = <StreamChunk64kV1 as StablePayloadInit>::Init<'a>;
351
352#[cfg(feature = "payload-contract-large-fixtures")]
353pub type LidarPointCloudHesaiAt128V1Init<'a> =
354 <LidarPointCloudHesaiAt128V1 as StablePayloadInit>::Init<'a>;
355#[cfg(feature = "payload-contract-large-fixtures")]
356pub type CameraBayerRggb12pFrame8mpV1Init<'a> =
357 <CameraBayerRggb12pFrame8mpV1 as StablePayloadInit>::Init<'a>;