1use crate::{
2 CombinationMode, PduCpst, PduErrorEvt, PduFilter, PduInfo, PduIt, PduPc, PduPt, PduQueueMode,
3 PduStatus, TimingSet, VidPreselectMode,
4};
5use std::ffi::c_void;
6use std::fmt::Debug;
7
8#[repr(C)]
9#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
10pub struct PduItem {
12 pub item_type: PduIt,
14}
15
16#[repr(C)]
17#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
18pub struct PduDataItem {
20 pub item_type: PduIt,
22 pub p_data: *mut c_void,
24}
25
26#[repr(C)]
27#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
28pub struct IoProgVoltageData {
30 pub prog_voltage_mv: u32,
32 pub pin_on_dlc: u32,
34}
35
36#[repr(C)]
37#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
38pub struct IoByteArrayData {
40 pub data_size: u32,
42 pub p_data: *mut u8,
44}
45
46impl From<&mut [u8]> for IoByteArrayData {
47 fn from(x: &mut [u8]) -> Self {
48 IoByteArrayData {
49 data_size: x.len() as u32,
50 p_data: x.as_mut_ptr(),
51 }
52 }
53}
54
55#[repr(C)]
57#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
58pub struct IoFilter {
59 pub num_filter_entries: u32,
62
63 pub p_filter_data: *mut IoFilterData,
65}
66
67#[repr(C)]
68#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
69pub struct IoFilterData {
73 pub filter_type: PduFilter,
75 pub filter_number: u32,
77 pub filter_compare_size: u32,
79 pub filter_mask_msg: [u8; 12],
81 pub filter_pattern_msg: [u8; 12],
83}
84
85#[repr(C)]
86#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
87pub struct IoEventQueuePropertyData {
89 pub queue_size: u32,
91 pub queue_mode: PduQueueMode,
93}
94
95#[repr(C)]
96#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
97pub struct VehicleIdRequest {
99 pub preselection_mode: VidPreselectMode,
101 pub preselection_value: *mut u8,
103 pub combination_mode: CombinationMode,
105 pub vehicle_discovery_time: u32,
107 pub num_destination_addresses: u32,
109 pub destination_addresses: *mut IpAddrInfo,
111}
112
113#[repr(C)]
114#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
115pub struct IpAddrInfo {
117 pub ip_version: u32,
119 pub p_address: *mut u8,
121}
122
123#[repr(C)]
124#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
125pub struct EthSwitchState {
127 pub eth_sense_state: u32,
129 pub eth_act_pin_num: u32,
131}
132
133#[repr(C)]
134#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
135pub struct RscStatusData {
137 pub h_mod: u32,
139 pub resource_id: u32,
141 pub resource_status: u32,
143}
144
145#[repr(C)]
146#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
147pub struct RscStatusItem {
149 pub item_type: PduIt,
151 pub num_entries: u32,
153 pub p_resource_status_data: *mut RscStatusData,
155}
156
157#[repr(C)]
158#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
159pub struct ParamItem {
161 pub item_type: PduIt,
163 pub com_param_id: u32,
165 pub com_param_data_type: PduPt,
167 pub com_param_class: PduPc,
169 pub p_com_param_data: *mut c_void,
171}
172
173#[repr(C)]
174#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
175pub struct ModuleItem {
177 pub item_type: PduIt,
179 pub num_entries: u32,
181 pub p_module_data: *mut ModuleData,
183}
184
185#[repr(C)]
186#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
187pub struct ModuleData {
189 pub module_type_id: u32,
191 pub h_mod: u32,
193 pub vendor_module_name: *mut u8,
195 pub vendor_additional_info: *mut u8,
197 pub status: PduStatus,
199}
200
201#[repr(C)]
202#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
203pub struct RscIdItem {
205 pub item_type: PduIt,
207 pub num_modules: u32,
209 pub p_id_item_data: *mut RscIdItemData,
211}
212
213#[repr(C)]
214#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
215pub struct RscIdItemData {
217 pub h_mod: u32,
219 pub num_ids: u32,
221 pub p_resource_id_array: *mut u32,
223}
224
225#[repr(C)]
226#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
227pub struct RscData {
229 pub bus_type_id: u32,
231 pub protocol_id: u32,
233 pub num_pin_data: u32,
235 pub p_dlc_pin_data: *mut PinData,
237}
238
239#[repr(C)]
240#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
241pub struct PinData {
243 pub dlc_pin_number: u32,
245 pub dlc_pin_type_id: u32,
247}
248
249#[repr(C)]
250#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
251pub struct RscConflictItem {
253 pub item_type: PduIt,
255 pub num_entries: u32,
257 pub p_rsc_conflict_data: *mut RscConflictData,
259}
260
261#[repr(C)]
262#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
263pub struct RscConflictData {
265 pub h_mod: u32,
267 pub resource_id: u32,
269}
270
271#[repr(C)]
272#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
273pub struct UniqueRespIdTableItem {
275 pub item_type: PduIt,
277 pub num_entries: u32,
279 pub p_unique_data: *mut EcuUniqueRespData,
281}
282
283#[repr(C)]
284#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
285pub struct EcuUniqueRespData {
287 pub unique_resp_identifier: u32,
289 pub num_param_items: u32,
291 pub p_params: *mut ParamItem,
293}
294
295#[repr(C)]
296#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
297pub struct EventItem {
299 pub item_type: PduIt,
301 pub h_cop: u32,
303 pub p_cop_tag: *mut c_void,
305 pub timestamp: u32,
307 pub p_data: *mut c_void,
309}
310
311#[repr(C)]
312#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
313pub struct InfoData {
315 pub info_code: PduInfo,
317 pub extra_info_data: u32,
319}
320
321#[repr(C)]
322#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
323pub struct ErrorData {
325 pub error_code_id: PduErrorEvt,
327 pub extra_error_info_id: u32,
329}
330
331#[repr(C)]
332#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
333pub struct ResultData {
335 pub rx_flag: FlagData,
337 pub unique_resp_identifier: u32,
339 pub acceptance_id: u32,
341 pub timestamp_flags: FlagData,
343 pub tx_msg_done_timestamp: u32,
345 pub start_msg_timestamp: u32,
347 pub p_extra_info: *mut ExtraInfo,
349 pub num_data_bytes: u32,
351 pub p_data_bytes: *mut u8,
353}
354
355#[repr(C)]
356#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
357pub struct ExtraInfo {
359 pub num_header_bytes: u32,
361 pub num_footer_bytes: u32,
363 pub p_header_bytes: *mut u8,
365 pub p_footer_bytes: *mut u8,
367}
368
369#[repr(C)]
370#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
371pub struct FlagData {
373 pub num_flag_bytes: u32,
375 pub p_flag_data: *mut u8,
377}
378
379#[repr(C)]
380#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
381pub struct VersionData {
383 pub mvci_part1_standard_version: u32,
385 pub mvci_part2_standard_version: u32,
387 pub hw_serial_number: u32,
389 pub hw_name: [u8; 64],
391 pub hw_version: u32,
393 pub hw_date: u32,
395 pub hw_interface: u32,
397 pub fw_name: [u8; 64],
399 pub fw_version: u32,
401 pub fw_date: u32,
403 pub vendor_name: [u8; 64],
405 pub pdu_api_sw_name: [u8; 64],
407 pub pdu_api_sw_version: u32,
409 pub pdu_api_sw_date: u32,
411}
412
413impl Default for VersionData {
414 fn default() -> Self {
415 VersionData {
416 mvci_part1_standard_version: 0,
417 mvci_part2_standard_version: 0,
418 hw_serial_number: 0,
419 hw_name: [0u8; 64],
420 hw_version: 0,
421 hw_date: 0,
422 hw_interface: 0,
423 fw_name: [0u8; 64],
424 fw_version: 0,
425 fw_date: 0,
426 vendor_name: [0u8; 64],
427 pdu_api_sw_name: [0u8; 64],
428 pdu_api_sw_version: 0,
429 pdu_api_sw_date: 0,
430 }
431 }
432}
433
434#[repr(C)]
435#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
436pub struct CopCtrlData {
438 pub time: u32,
440 pub num_send_cycles: i32,
442 pub num_receive_cycles: i32,
444 pub temp_param_update: u32,
446 pub tx_flag: FlagData,
448 pub num_possible_expected_responses: u32,
450 pub expected_response_array: *mut ExpRespData,
452}
453
454#[repr(C)]
455#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
456pub struct IoEntityAddressData {
458 pub logical_address: u32,
460 pub doip_ctrl_timeout: u32,
462}
463
464#[repr(C)]
465#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
466pub struct IoEntityStatusData {
468 pub entity_type: u32,
470 pub tcp_clients_max: u32,
472 pub tcp_clients: u32,
474 pub max_data_size: u32,
476}
477
478#[repr(C)]
479#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
480pub struct ExpRespData {
482 pub response_type: u32,
484 pub acceptance_id: u32,
486 pub num_mask_pattern_bytes: u32,
488 pub p_mask_data: *mut u8,
490 pub p_pattern_data: *mut u8,
492 pub num_unique_resp_ids: u32,
494 pub p_unique_resp_ids: *mut u32,
496}
497
498#[repr(C)]
499#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
500pub struct ParamByteFieldData {
502 pub param_max_len: u32,
504 pub param_act_len: u32,
506 pub p_data_array: *mut u8,
508}
509
510#[repr(C)]
511#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
512pub struct ParamStructFieldData {
514 pub com_param_struct_type: PduCpst,
516 pub param_max_entries: u32,
518 pub param_act_entries: u32,
520 pub p_struct_array: *mut c_void,
522}
523
524#[repr(C)]
525#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
526#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
527pub struct ParamStructSessionTiming {
529 #[cfg_attr(feature = "serde", serde(alias = "SessionNumber"))]
531 pub session: u16,
532
533 #[cfg_attr(feature = "serde", serde(alias = "P2Max_High"))]
535 pub p2_max_high: u8,
536
537 #[cfg_attr(feature = "serde", serde(alias = "P2Max_Low"))]
539 pub p2_max_low: u8,
540
541 #[cfg_attr(feature = "serde", serde(alias = "P2Star_High"))]
543 pub p2_star_high: u8,
544
545 #[cfg_attr(feature = "serde", serde(alias = "P2Star_Low"))]
547 pub p2_star_low: u8,
548}
549
550#[repr(C)]
551#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
552#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
553pub struct ParamStructAccessTiming {
555 #[cfg_attr(feature = "serde", serde(alias = "P2Min"))]
557 pub p2_min: u8,
558
559 #[cfg_attr(feature = "serde", serde(alias = "P2Max"))]
561 pub p2_max: u8,
562
563 #[cfg_attr(feature = "serde", serde(alias = "P3Min"))]
565 pub p3_min: u8,
566
567 #[cfg_attr(feature = "serde", serde(alias = "P3Max"))]
569 pub p3_max: u8,
570
571 #[cfg_attr(feature = "serde", serde(alias = "P4Min"))]
573 pub p4_min: u8,
574
575 #[cfg_attr(feature = "serde", serde(alias = "TimingSet"))]
577 pub timing_set: TimingSet,
578}
579
580#[repr(C)]
581#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
582pub struct ParamLongFieldData {
584 pub param_max_len: u32,
586 pub param_act_len: u32,
588 pub p_data_array: *mut u32,
590}