Preview of the proposed up-rust native-frame-model branch (up-rust b6b99c6d, up-spec f0e9b17) — not released documentation. branch · write-up

up_rust/bench_fixtures/payload_contract/
stable.rs

1/********************************************************************************
2 * Copyright (c) 2026 Contributors to the Eclipse Foundation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 ********************************************************************************/
6
7// These benchmark fixtures are intentionally large fixed-layout stable payloads.
8#![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>;