Skip to content

Commit 4701244

Browse files
authored
Update to vectorgrp/XCPlite master xcplib (#36)
* Update to XCPlite V0.9.2
1 parent b6e55a7 commit 4701244

File tree

5 files changed

+41
-6
lines changed

5 files changed

+41
-6
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11

22
target
3+
build
34
/Cargo.lock
45

56
# Misc

build.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ fn main() {
1818
// Generate C code bindings for xcplib
1919
if is_posix {
2020
let bindings = bindgen::Builder::default()
21-
.header("xcplib/xcplib.h")
21+
.header("xcplib/src/xcplib.h")
2222
//
2323
//.clang_args(&["-target", "x86_64-pc-windows-msvc"])
2424
.clang_arg("-Ixcplib/src")

src/registry/a2l/a2l_reader.rs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -166,18 +166,25 @@ fn get_conversion(conversion: &str, module: &a2lfile::Module, vector_xcp_mode: b
166166

167167
// Get event number from IF_DATA
168168
fn get_event_id_from_ifdata(if_data_vec: &Vec<a2lfile::IfData>) -> Option<u16> {
169-
let mut event_id = None;
170169
for ifdata in if_data_vec {
171170
let decoded_ifdata = aml_ifdata::A2mlVector::load_from_ifdata(ifdata).unwrap();
172171
if let Some(xcp) = decoded_ifdata.xcp {
173172
if let Some(daq_event) = xcp.daq_event {
174173
if let Some(fixed_event_list) = daq_event.fixed_event_list {
175-
event_id = Some(fixed_event_list.event[0].item);
174+
assert!(!fixed_event_list.event.is_empty());
175+
return Some(fixed_event_list.event[0].item);
176+
}
177+
// @@@@ TODO Improve this workaround to treat the first default event like a fixed event
178+
if let Some(event_lists) = daq_event.variable {
179+
if let Some(default_event_list) = event_lists.default_event_list {
180+
assert!(!default_event_list.event.is_empty());
181+
return Some(default_event_list.event[0].item);
182+
}
176183
}
177184
}
178185
}
179186
}
180-
event_id
187+
None
181188
}
182189

183190
// Always read to A2L address representation
@@ -212,8 +219,13 @@ fn get_mc_address(registry: &Registry, addr: u32, addr_ext: u8, event_id: Option
212219
let addr_offset: i32 = addr as i32;
213220
McAddress::new_event_rel(event_id, addr_offset)
214221
}
222+
McAddress::XCP_ADDR_EXT_ABS => {
223+
let event_id = event_id.unwrap();
224+
let addr_offset: i32 = addr as i32;
225+
McAddress::new_event_abs(event_id, addr_offset)
226+
}
215227
_ => {
216-
warn!("Address extension {} not supported", addr_ext);
228+
warn!("Address extension {} not supported in Vector mode", addr_ext);
217229
McAddress::new_a2l(addr, addr_ext)
218230
}
219231
}

src/registry/mc_address.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,17 @@ impl McAddress {
101101
}
102102
}
103103

104+
pub fn new_event_abs(event_id: u16, addr_offset: i32) -> Self {
105+
McAddress {
106+
calseg_name: None,
107+
event_id: Some(event_id),
108+
addr_offset,
109+
addr_mode: McAddress::ADDR_MODE_ABS,
110+
a2l_addr: 0,
111+
a2l_addr_ext: 0,
112+
}
113+
}
114+
104115
pub fn new_event_rel(event_id: u16, addr_offset: i32) -> Self {
105116
McAddress {
106117
calseg_name: None,
@@ -206,6 +217,13 @@ impl McAddress {
206217
}
207218
}
208219

220+
fn get_abs_ext_addr(offset: u32) -> (u8, u32) {
221+
let a2l_ext = McAddress::XCP_ADDR_EXT_ABS;
222+
#[allow(clippy::cast_sign_loss)]
223+
let a2l_addr: u32 = offset;
224+
(a2l_ext, a2l_addr)
225+
}
226+
209227
fn get_dyn_ext_addr(event_id: u16, offset: i16) -> (u8, u32) {
210228
let a2l_ext = McAddress::XCP_ADDR_EXT_DYN;
211229
#[allow(clippy::cast_sign_loss)]
@@ -248,6 +266,10 @@ impl McAddress {
248266
else if self.addr_mode == McAddress::ADDR_MODE_DYN {
249267
McAddress::get_dyn_ext_addr(self.event_id.unwrap(), self.addr_offset.try_into().expect("offset too large"))
250268
}
269+
// Absolute addressing with default event
270+
else if self.addr_mode == McAddress::ADDR_MODE_ABS {
271+
McAddress::get_abs_ext_addr(self.addr_offset.try_into().expect("addr too large"))
272+
}
251273
// Explicit segment relative addressing
252274
else if self.addr_mode == McAddress::ADDR_MODE_CAL {
253275
let index = registry

xcplib

Submodule xcplib updated 46 files

0 commit comments

Comments
 (0)