5个版本 (3个稳定版)
1.0.2 | 2023年6月28日 |
---|---|
1.0.1 | 2022年5月20日 |
1.0.0 | 2021年8月28日 |
0.1.1 | 2020年2月18日 |
0.1.0 | 2019年12月10日 |
#231 in Unix APIs
每月 2,389 次下载
用于 ecu_diagnostics
24KB
423 行代码
SocketCAN ISO-TP库。基于socketcan-rs和isotp.h。
Linux内核支持通过类似网络API的方式使用CAN设备。此库允许轻松访问此功能,而无需与libc调用纠缠。
ISO-TP或ISO 15762-2允许发送超过默认CAN帧八字节的扩展数据包。ISO-TP的一个常见应用是统一诊断服务(UDS),该服务用于汽车ECU的故障诊断。
can-isotp是一个处理ISO-TP协议的内核模块。有关如何构建和加载can-isotp内核模块的说明,请参阅https://github.com/hartkopp/can-isotp。
use socketcan_isotp::{self, IsoTpSocket, StandardId};
fn main() -> Result<(), socketcan_isotp::Error> {
let mut tp_socket = IsoTpSocket::open(
"vcan0",
StandardId::new(0x123).expect("Invalid src id"),
StandardId::new(0x321).expect("Invalid dst id"),
)?;
let buffer = tp_socket.read()?;
println!("read {} bytes", buffer.len());
for x in buffer {
print!("{:X?} ", x);
}
println!("");
Ok(())
}
开发环境设置
设置Isotp内核模块:https://github.com/hartkopp/can-isotp
设置虚拟CAN接口。
sudo modprobe vcan && \
sudo ip link add dev vcan0 type vcan && \
sudo ip link set up vcan0
依赖项
~2.5MB
~53K SLoC