This crate provides low-level no_std structs and enums of
the Unified Diagnostic Services (ISO-14229-1),
KWP2000 (ISO-142330),
OBD-II (ISO-9141)
and DoIP (ISO-13400) diagnostic
specifications for the road vehicles in Rust. Optionally supports defmt, serde, and pyo3. See features section in the Cargo.toml file.
Most features have been implemented and documented to handle the most common diagnostic commands and responses. If you find a missing feature, please open an issue or better yet, a pull request.
The long-term goal is to provide all core functionality for message definitions and (de-)serialization, supporting both the no_std and std environments.
All values are presented as Rust enum, and can be converted to/from their underlying numeric values using
the T::from_repr(u8) and u8::from(value). Most enums also have a corresponding ...Byte enums as
ByteWrapper<T> to
handle the non-standard Extended(u8) values in addition to the defined Standand(T) ones.
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
}
}
}- This project is easier to develop with just, a modern alternative to
make. Install it withcargo install just. - To get a list of available commands, run
just. - To run tests, use
just test.
The code was forked from the amazing rnd-ash/ecu_diagnostics project. The
code was forked from the last MIT-versioned code before the MIT to GPL license migration. Initially, this code was
developed as a deprecated auto_uds crate. The DoIP definitions were adapted from
the MIT-licensed samp-reston/doip-definitions project.
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT) at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual-licensed as above, without any additional terms or conditions.