pub type u8 = ::std::os::raw::c_uchar;
pub type s8 = ::std::os::raw::c_char;
pub type u16 = ::std::os::raw::c_ushort;
pub type s16 = ::std::os::raw::c_short;
pub type u32 = ::std::os::raw::c_uint;
pub type s32 = ::std::os::raw::c_int;
pub type u64 = ::std::os::raw::c_ulonglong;
pub type s64 = ::std::os::raw::c_longlong;
pub const CHN1: u32 = 0;
pub const CHN2: u32 = 1;
pub const CHN3: u32 = 2;
pub const CHN4: u32 = 3;
pub const CHN5: u32 = 4;
pub const CHN6: u32 = 5;
pub const CHN7: u32 = 6;
pub const CHN8: u32 = 7;
pub const MASK_CANPROP_DIR_TX: u8 = 0x01;
pub const MASK_CANPROP_REMOTE: u8 = 0x02;
pub const MASK_CANPROP_EXTEND: u8 = 0x04;
pub const MASK_CANPROP_ERROR: u8 = 0x80;
pub const MASK_CANFDPROP_IS_FD: u8 = 0x01;
pub const MASK_CANFDPROP_IS_EDL: u8 = 0x01;
pub const MASK_CANFDPROP_IS_BRS: u8 = 0x02;
pub const MASK_CANFDPROP_IS_ESI: u8 = 0x04;
pub const ONLY_RX_MESSAGES: u8 = 0;
pub const TX_RX_MESSAGES: u8 = 1;
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum TLIBCANFDControllerType {
lfdtCAN = 0,
lfdtISOCAN = 1,
lfdtNonISOCAN = 2,
}
#[repr(C)]
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum TLIBCANFDControllerMode {
lfdmNormal = 0,
lfdmACKOff = 1,
lfdmRestricted = 2,
}
#[repr(C, packed)]
#[derive(Debug, Copy, Clone, Default)]
pub struct TLIBCAN {
pub FIdxChn: u8,
pub FProperties: u8,
pub FDLC: u8,
pub FReserved: u8,
pub FIdentifier: s32,
pub FTimeUs: s64,
pub FData: [u8; 8],
}
#[repr(C, packed)]
#[derive(Debug, Copy, Clone)]
pub struct TLIBCANFD {
pub FIdxChn: u8,
pub FProperties: u8,
pub FDLC: u8,
pub FFDProperties: u8,
pub FIdentifier: s32,
pub FTimeUs: s64,
pub FData: [u8; 64],
}
impl Default for TLIBCANFD {
fn default() -> Self {
Self {
FIdxChn: 0,
FProperties: 0,
FDLC: 0,
FFDProperties: 0,
FIdentifier: 0,
FTimeUs: 0,
FData: [0; 64],
}
}
}
pub type TCANQueueEvent_Win32 = Option<unsafe extern "system" fn(AData: *const TLIBCAN)>;
pub type TCANFDQueueEvent_Win32 = Option<unsafe extern "system" fn(AData: *const TLIBCANFD)>;
#[cfg(test)]
mod tests {
use super::*;
use std::mem;
#[test]
fn test_tlibcan_size() {
assert_eq!(mem::size_of::<TLIBCAN>(), 24);
}
#[test]
fn test_tlibcanfd_size() {
assert_eq!(mem::size_of::<TLIBCANFD>(), 80);
}
#[test]
fn test_default_message() {
let msg = TLIBCAN::default();
let idx_chn = msg.FIdxChn;
let properties = msg.FProperties;
let dlc = msg.FDLC;
let identifier = msg.FIdentifier;
assert_eq!(idx_chn, 0);
assert_eq!(properties, 0);
assert_eq!(dlc, 0);
assert_eq!(identifier, 0);
}
}