#automotive #uds #obd #no-std #kwp2000

no-std automotive_diag

各种汽车ECU诊断的核心定义,例如UDS ISO-14229、KWP2000、OBD-II等

10个版本

0.1.9 2024年7月24日
0.1.8 2024年7月1日
0.1.7 2024年6月20日
0.1.6 2023年11月8日
0.1.3 2023年4月15日

78 in 嵌入式开发

Download history 837/week @ 2024-05-03 1031/week @ 2024-05-10 762/week @ 2024-05-17 696/week @ 2024-05-24 940/week @ 2024-05-31 575/week @ 2024-06-07 844/week @ 2024-06-14 817/week @ 2024-06-21 836/week @ 2024-06-28 1080/week @ 2024-07-05 474/week @ 2024-07-12 873/week @ 2024-07-19 593/week @ 2024-07-26 933/week @ 2024-08-02 821/week @ 2024-08-09 740/week @ 2024-08-16

3,173 下载/月
用于ecu_diagnostics

MIT/Apache

70KB
1K SLoC

Rust中的汽车诊断

GitHub crates.io version docs.rs docs crates.io version CI build

此crate提供了Rust中对道路车辆进行统一诊断服务(ISO-14229-1)、KWP2000(ISO-142330)和OBD-II(ISO-9141)规范的底层no_std结构和枚举。

并非所有功能都已实现,但目标是提供一套完整的枚举和结构来处理最常见的诊断命令和响应。如果您需要特定的命令或响应,请打开一个问题或更好的拉取请求。

使用方法

所有值都表示为Rust enum,可以使用T::from_repr(u8)u8::from(value)转换为它们的底层数值。大多数枚举还有相应的...Byte枚举作为ByteWrapper<T>来处理非标准的Extended(u8)值,以及定义的Standand(T)值。

use automotive_diag::ByteWrapper::{Extended, Standard};
use automotive_diag::uds::UdsCommand::{DiagnosticSessionControl, ECUReset};
use automotive_diag::uds::UdsCommandByte;

/// Handle a single command byte on the ECU side
fn handle_cmd_byte(cmd: u8) {
    match UdsCommandByte::from(cmd) {
        Standard(DiagnosticSessionControl) => {
            // handle_diag_session()
        }
        Standard(ECUReset) => {
            // handle_ecu_reset()
        }
        Extended(0x42) => {
            // handle_custom_cmd_42()
        }
        _ => {
            // handle all other commands
        }
    }
}

开发

  • 此项目使用just(make的现代替代品)更容易开发。使用cargo install just安装它。
  • 要获取可用命令的列表,运行just
  • 要运行测试,使用just test
  • git push 操作中,它将运行一些验证,包括 cargo fmtcargo clippycargo test。使用 git push --no-verify 来跳过这些检查。

致谢

代码是从令人惊叹的 rnd-ash/ecu_diagnostics 项目中分叉的。代码是从 MIT 许可证迁移到 GPL 许可证之前的最后一个 MIT 版本的代码中分叉的。最初,这个代码是一个已废弃的 auto_uds 包。

许可证

根据以下任一许可证授权:

贡献

除非你明确表示,否则根据 Apache-2.0 许可证定义的,你提交给该作品的所有有意包含的贡献,应如上双许可,不附加任何额外条款或条件。

依赖关系

~0.3–0.8MB
~19K SLoC