#ecu #decode #vehicle #j1939 #can #industrial-automation #data-structures

无需std can-types

用于编码/解码简单CAN总线数据结构的库

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 无标准库

Download history 167/week @ 2024-06-18 186/week @ 2024-06-25 19/week @ 2024-07-02 232/week @ 2024-07-16 17/week @ 2024-07-23

每月249次下载

MIT/Apache

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