2 个不稳定版本
0.2.0 | 2024年5月1日 |
---|---|
0.1.0 | 2024年1月9日 |
#615 in Unix APIs
用于 uds-rs
31KB
550 代码行数,不包括注释
tokio-socketcan-isotp
此库在 socketcan-isotp 周围创建异步包装器
目前不依赖于原始库,而是依赖于修改过的 socketcan-isotp 库,该库增加了 read_to_vec 方法,以防止在读取时对套接字进行可变借用。
在写入时遇到 io::Error:WouldBlock 时,您可能会遇到忙等待或软锁。这是由于 Linux 内核的错误,现在已被 解决,但您的 Linux 内核维护者可能尚未发布。我在 6.6.5 主线内核上进行了测试,一切正常。如果您遇到提到的错误并且无法升级到较新内核,请参考 src/lib.rs 文件中的 IsoTpWriteFuture 的 poll 方法,那里建议的编辑可能有助于您的情况。
vcan0 上的基本回显服务器示例
use tokio_socketcan_isotp::{IsoTpSocket, StandardId, Error};
#[tokio::main]
async fn main() -> Result<(), Error> {
let mut socket = IsoTpSocket::open(
"vcan0",
StandardId::new(0x123).expect("Invalid src id"),
StandardId::new(0x321).expect("Invalid src id")
)?;
while let Ok(packet) = socket.read_packet().await {
println!("{:?}", packet);
let rx = socket.write_packet(packet).await;
}
}
要设置 vcan0,请运行以下命令
sudo modprobe can
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0
依赖关系
~5–14MB
~159K SLoC