1use std::ffi::c_void;
2
3use crate::{
4 CombinationMode, PduCpst, PduErrorEvt, PduFilter, PduInfo, PduIt, PduPc, PduPt, PduQueueMode,
5 PduStatus, TimingSet, VidPreselectMode,
6};
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 item_type: PduIt,
139 pub num_entries: u32,
141 pub p_resource_status_data: *mut RscStatusItem,
143}
144
145#[repr(C)]
146#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
147pub struct RscStatusItem {
149 pub h_mod: u32,
151 pub resource_id: u32,
153 pub resource_status: u32,
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
413#[repr(C)]
414#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
415pub struct CopCtrlData {
417 pub time: u32,
419 pub num_send_cycles: i32,
421 pub num_receive_cycles: i32,
423 pub temp_param_update: u32,
425 pub tx_flag: FlagData,
427 pub num_possible_expected_responses: u32,
429 pub expected_response_array: *mut ExpRespData,
431}
432
433#[repr(C)]
434#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
435pub struct IoEntityAddressData {
437 pub logical_address: u32,
439 pub doip_ctrl_timeout: u32,
441}
442
443#[repr(C)]
444#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
445pub struct IoEntityStatusData {
447 pub entity_type: u32,
449 pub tcp_clients_max: u32,
451 pub tcp_clients: u32,
453 pub max_data_size: u32,
455}
456
457#[repr(C)]
458#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
459pub struct ExpRespData {
461 pub response_type: u32,
463 pub acceptance_id: u32,
465 pub num_mask_pattern_bytes: u32,
467 pub p_mask_data: *mut u8,
469 pub p_pattern_data: *mut u8,
471 pub num_unique_resp_ids: u32,
473 pub p_unique_resp_ids: *mut u32,
475}
476
477#[repr(C)]
478#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
479pub struct ParamByteFieldData {
481 pub param_max_len: u32,
483 pub param_act_len: u32,
485 pub p_data_array: *mut u8,
487}
488
489#[repr(C)]
490#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
491pub struct ParamStructFieldData {
493 pub com_param_struct_type: PduCpst,
495 pub param_max_entries: u32,
497 pub param_act_entries: u32,
499 pub p_struct_array: *mut c_void,
501}
502
503#[repr(C)]
504#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
505pub struct ParamStructSessionTiming {
507 pub session: u16,
509 pub p2_max_high: u8,
511 pub p2_max_low: u8,
513 pub p2_star_high: u8,
515 pub p2_star_low: u8,
517}
518
519#[repr(C)]
520#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
521pub struct ParamStructAccessTiming {
523 pub p2_min: u8,
525 pub p2_max: u8,
527 pub p3_min: u8,
529 pub p3_max: u8,
531 pub p4_min: u8,
533 pub timing_set: TimingSet,
535}
536
537#[repr(C)]
538#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
539pub struct ParamLongFieldData {
541 pub param_max_len: u32,
543 pub param_act_len: u32,
545 pub p_data_array: *mut u32,
547}