1 个不稳定版本

0.1.5 2022年12月2日
0.1.4 2022年12月2日

#10 in #receiving

MIT 许可证

12KB
239 代码行(不包括注释)

socketcan2-rs

请参阅文档:https://docs.rs/socketcan2/


lib.rs:

SocketCAN支持。

功能

  • 接收CAN帧
  • 精确的时间戳(时间戳还支持多线程,而通过ioctl调用接收TIMESTAMP则不支持多线程)
  • epoll支持(允许在同一线程中等待多个CAN设备)
  • 发送CAN帧(尚未实现)
  • 过滤CAN帧(尚未实现)

使用示例

#[cfg(test)]
fn on_recv(msg: &Box<Msg>, _user_data: &u64) {
  println!("timestamp: {:?}", msg.timestamp());
  print!("received CAN frame (id: {}): ", msg.can_id());
  for i in 0..msg.len() {
    print!("{} ", msg[i as usize]);
  }
  println!("");
}

#[cfg(test)]
mod tests {
  use super::*;
  #[test]
  fn it_works() {
    let can = Can::open("vcan0").unwrap();
    let mut cg = CanGroup::<u64>::new();
    cg.add(can, 0).unwrap();
    match cg.next(Duration::milliseconds(-1), on_recv) {
      Ok(no_timeout) => if !no_timeout { panic!("timeout"); },
      Err(_) => panic!("error"),
    }
  }
}

依赖项

~1MB
~19K SLoC