From e562c7307242c3a5a36861204833065109164441 Mon Sep 17 00:00:00 2001 From: Willem Melching Date: Fri, 6 Dec 2024 06:34:21 -0800 Subject: [PATCH 1/3] [Vector XL] set hardcoded bitrate to 500k/2M --- .gitattributes | 1 + src/vector/mod.rs | 20 +++++++++++++++++++- src/vector/types.rs | 4 +++- src/vector/vxlapi.rs | 21 ++++++++++++++++++++- 4 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..23d5fc8 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.rs text eol=lf diff --git a/src/vector/mod.rs b/src/vector/mod.rs index a8b55c9..cb281e5 100644 --- a/src/vector/mod.rs +++ b/src/vector/mod.rs @@ -9,11 +9,26 @@ pub use error::Error; use std::collections::VecDeque; use crate::can::{AsyncCanAdapter, CanAdapter, Frame}; -use crate::vector::types::{PortHandle, XLaccess, XLcanTxEvent}; +use crate::vector::types::{PortHandle, XLaccess, XLcanFdConf, XLcanTxEvent}; use crate::vector::vxlapi::*; use crate::Result; use tracing::info; +const CONFIG_500K_2M_80: XLcanFdConf = XLcanFdConf { + arbitrationBitRate: 500_000, + sjwAbr: 1, + tseg1Abr: 25, + tseg2Abr: 6, + dataBitRate: 2_000_000, + sjwDbr: 1, + tseg1Dbr: 31, + tseg2Dbr: 8, + reserved: 0, + options: 0, + reserved1: [0, 0], + reserved2: 0, +}; + #[derive(Clone)] pub struct VectorCan { port_handle: PortHandle, @@ -42,6 +57,9 @@ impl VectorCan { let channel_mask = xl_get_channel_mask(&config)?; let port_handle = xl_open_port("automotive", channel_mask)?; + // Configure bitrate + xl_can_fd_set_configuration(&port_handle, channel_mask, &CONFIG_500K_2M_80)?; + xl_activate_channel(&port_handle, channel_mask)?; info!("Connected to Vector Device. HW: {:?}", config.hw_type); diff --git a/src/vector/types.rs b/src/vector/types.rs index 84bad3f..c7bb2c4 100644 --- a/src/vector/types.rs +++ b/src/vector/types.rs @@ -1,7 +1,9 @@ use strum_macros::FromRepr; use crate::vector::bindings as xl; -pub use crate::vector::bindings::{XLaccess, XLcanRxEvent, XLcanTxEvent, XLportHandle}; +pub use crate::vector::bindings::{ + XLaccess, XLcanFdConf, XLcanRxEvent, XLcanTxEvent, XLportHandle, +}; pub static DLC_TO_LEN: &[usize] = &[0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 16, 20, 24, 32, 48, 64]; pub static LEN_TO_DLC: &[u8] = &[ diff --git a/src/vector/vxlapi.rs b/src/vector/vxlapi.rs index ab54723..c6d0779 100644 --- a/src/vector/vxlapi.rs +++ b/src/vector/vxlapi.rs @@ -1,7 +1,7 @@ use crate::vector::bindings as xl; use crate::vector::error::Error; use crate::vector::types::{ - ChannelConfig, HwType, PortHandle, XLaccess, XLcanRxEvent, XLcanTxEvent, + ChannelConfig, HwType, PortHandle, XLaccess, XLcanFdConf, XLcanRxEvent, XLcanTxEvent, }; use crate::Result; @@ -104,6 +104,7 @@ pub fn xl_open_port(user_name: &str, access_mask: XLaccess) -> Result } } +pub fn xl_can_fd_set_configuration( + port_handle: &PortHandle, + access_mask: XLaccess, + config: &XLcanFdConf, +) -> Result<()> { + unsafe { + let mut config = config.clone(); + let status = xl::xlCanFdSetConfiguration(port_handle.port_handle, access_mask, &mut config); + match status as u32 { + xl::XL_SUCCESS => Ok(()), + _ => Err( + Error::DriverError(format!("xlCanFdSetConfiguration failed, err {}", status)) + .into(), + ), + } + } +} + pub fn xl_can_transmit_ex( port_handle: &PortHandle, access_mask: XLaccess, From 976923b75a1a8730e8ab4fe130b62754dfc3f545 Mon Sep 17 00:00:00 2001 From: Willem Melching Date: Fri, 6 Dec 2024 06:38:12 -0800 Subject: [PATCH 2/3] Fix tsegX for normal CAN --- src/vector/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vector/mod.rs b/src/vector/mod.rs index cb281e5..08b14ec 100644 --- a/src/vector/mod.rs +++ b/src/vector/mod.rs @@ -17,8 +17,8 @@ use tracing::info; const CONFIG_500K_2M_80: XLcanFdConf = XLcanFdConf { arbitrationBitRate: 500_000, sjwAbr: 1, - tseg1Abr: 25, - tseg2Abr: 6, + tseg1Abr: 15, + tseg2Abr: 4, dataBitRate: 2_000_000, sjwDbr: 1, tseg1Dbr: 31, From 9b84063c0baa7c97a44a555cc1cc4bd163471d11 Mon Sep 17 00:00:00 2001 From: Willem Melching Date: Fri, 6 Dec 2024 06:39:47 -0800 Subject: [PATCH 3/3] Fix warning --- src/vector/vxlapi.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/vector/vxlapi.rs b/src/vector/vxlapi.rs index c6d0779..41084c1 100644 --- a/src/vector/vxlapi.rs +++ b/src/vector/vxlapi.rs @@ -103,8 +103,7 @@ pub fn xl_get_channel_mask(app_config: &ChannelConfig) -> Result { pub fn xl_open_port(user_name: &str, access_mask: XLaccess) -> Result { unsafe { let mut port_handle = std::mem::zeroed(); - let mut permission_mask = std::mem::zeroed(); - permission_mask = access_mask; // Request init access + let mut permission_mask = access_mask; // Request init access so we can change bitrate let status = xl::xlOpenPort( &mut port_handle,