pub mod can;
pub mod convenience;
pub mod i2c;
pub mod onewire;
pub mod spi;
pub mod uart;
pub mod uspibridge;
pub use convenience::*;
pub use uspibridge::{SegmentMapping, SegmentMappingType, USPIBridgeCommand, USPIBridgeConfig};
#[cfg(test)]
mod tests {
use crate::types::{CanMessage, I2cStatus};
#[test]
fn test_can_message_creation() {
let data = [0x01, 0x02, 0x03, 0x04];
let mut message = CanMessage {
id: 0x123,
data: [0; 8],
len: data.len() as u8,
format: 0,
msg_type: 0,
};
message.data[..data.len()].copy_from_slice(&data);
assert_eq!(message.id, 0x123);
assert_eq!(message.len, 4);
assert_eq!(message.data[0], 0x01);
assert_eq!(message.data[3], 0x04);
}
#[test]
fn test_spi_parameter_validation() {
let _result = std::panic::catch_unwind(|| {
});
let _long_buffer = [0u8; 56];
}
#[test]
fn test_spi_command_structure() {
assert_eq!(0xE5, 0xE5); assert_eq!(0x01, 0x01); assert_eq!(0x10, 0x10); assert_eq!(0x20, 0x20); }
#[test]
fn test_spi_data_limits() {
const MAX_SPI_DATA_LENGTH: usize = 55;
const OVER_LIMIT: usize = 56;
assert_eq!(MAX_SPI_DATA_LENGTH, 55);
assert_eq!(OVER_LIMIT, 56);
let max_val = MAX_SPI_DATA_LENGTH;
let over_val = OVER_LIMIT;
assert!(over_val > max_val);
}
#[test]
fn test_i2c_status_conversion() {
assert_eq!(I2cStatus::Ok as u8, 1);
assert_eq!(I2cStatus::Error as u8, 0);
assert_eq!(I2cStatus::InProgress as u8, 0x10);
}
#[test]
fn test_ds18b20_temperature_conversion() {
let temp_raw = 0x0191i16; let temperature = (temp_raw as f32) * 0.0625;
assert!((temperature - 25.0625).abs() < 0.001);
let temp_raw = 0xFF5Eu16 as i16; let temperature = (temp_raw as f32) * 0.0625;
assert!((temperature - (-10.125)).abs() < 0.001);
}
}