Crates.io | tokio-socketcan-isotp |
lib.rs | tokio-socketcan-isotp |
version | 0.2.0 |
source | src |
created_at | 2024-01-09 10:20:34.462641 |
updated_at | 2024-05-01 13:07:29.505872 |
description | A asynchronous tokio ISO-TP library build on top of socketcan-isotp. |
homepage | https://github.com/japawBlob/tokio-socketcan-isotp |
repository | https://github.com/japawBlob/tokio-socketcan-isotp |
max_upload_size | |
id | 1093755 |
size | 31,100 |
This library creates asynchronous wrapper around socketcan-isotp
Currently not dependent on the original, but rather on the modified of the socketcan-isotp library, which adds read_to_vec method, in order to prevent mutable borrowing of the socket, when reading.
You may experience busy waiting, or soft locks when write encounters io::Error:WouldBlock. This is due to the error in Linux Kernel, which is now solved, but the maintainer of your Linux kernel might not have shipped it yet. I tested it on the mainline Kernel 6.6.5 and everything worked correctly. If you experience mentioned errors and cannot upgrade to newer kernel, refer to the src/lib.rs file to the poll method of the IsoTpWriteFuture, where a edit is suggested that might help with your situation.
Example of basic echoing server on 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;
}
}
To setup vcan0 run following commands:
sudo modprobe can
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0