5个不稳定版本
0.9.1 | 2024年7月17日 |
---|---|
0.9.0 | 2024年7月17日 |
0.2.0 | 2024年6月26日 |
0.1.1 | 2024年6月23日 |
0.1.0 | 2024年6月23日 |
#73 in 无标准库
每月249次下载
87KB
1.5K SLoC
用于编码或解码各种控制器区域网络(CAN)数据类型(包括SAE J1939标准)的rust crate。
支持的CAN协议
此crate提供了解码11位和29位标识符的控制器区域网络(CAN)协议的能力。
- CAN 2.0(经典CAN):常用于汽车应用和工业自动化。
- SAE J1939:常用于重型卡车和公交车。
no_std
支持
此crate支持 no_std
,这意味着它可以在资源受限的环境中(如嵌入式系统和 IoT 设备)使用,允许最小化内存使用,同时不牺牲功能。
要启用 no_std
,请使用 --no-default-features
标志
$ cargo add can_types --no-default-features
no_std
限制
- 此模式不支持生成提供的数据结构的
String
或字符串切片的十六进制表示形式。
示例
十六进制到J1939标识符
let id_a = IdJ1939::try_from_hex("0CF00400")?;
assert_eq!(3, id_a.priority());
assert_eq!(SourceAddr::Some(0), id_a.source_address());
assert_eq!(Some(Addr::PrimaryEngineController), id_a.source_address().lookup());
解码J1939 PGN
let id_a = IdJ1939::try_from_hex("18FEF200")?;
assert_eq!(CommunicationMode::Broadcast, id_a.pgn().communication_mode());
assert_eq!(GroupExtension::Some(242), id_a.pgn().group_extension());
let id_b = IdJ1939::try_from_hex("0C00290B")?;
// SA 11 = Brakes
assert_eq!(SourceAddr::Some(11), id_b.source_address());
assert_eq!(Some(Addr::Brakes), id_b.source_address().lookup());
assert_eq!(PduFormat::Pdu1(0), id_b.pgn().pdu_format());
assert_eq!(CommunicationMode::P2P, id_b.pgn().communication_mode());
assert_eq!(GroupExtension::None, id_b.pgn().group_extension());
// DA 41 = Retarder, Exhaust, Engine
assert_eq!(DestinationAddr::Some(41), id_b.pgn().destination_address());
assert_eq!(Some(Addr::RetarderExhaustEngine1), id_b.pgn().destination_address().lookup());
依赖项
~0.4–0.9MB
~20K SLoC