Skip to content

oxibus/can-dbc

Repository files navigation

can-dbc

GitHub repo crates.io version crate usage docs.rs status crates.io license CI build status Codecov

A CAN-dbc format parser written with Rust's nom parser combinator library. CAN databases are used to exchange details about a CAN network, e.g. what messages are being send over the CAN bus and what data do they contain.

Usage example

Read dbc file and generate Rust structs based on the messages/signals defined in the dbc.

use std::fs;
use can_dbc::Dbc;
use codegen::Scope;

fn main() {
    let data = fs::read_to_string("./examples/sample.dbc").expect("Unable to read input file");
    let dbc = Dbc::try_from(data.as_str()).expect("Failed to parse dbc file");

    let mut scope = Scope::new();
    for msg in dbc.messages() {
        let msg_struct = scope.new_struct(msg.name());
        for signal in msg.signals() {
            msg_struct.field(signal.name().to_lowercase().as_str(), "f64");
        }
    }

    println!("{}", scope.to_string());
}

For a proper implementation for reading or writing CAN frames according to the DBC, I recommend you take a look at dbc-codegen.

Running Parser Example

The file parser simply parses a dbc input file and prints the parsed content.

cargo run --example file_parser -- --input examples/sample.dbc

Structure

Diagram

Implemented DBC parts

  • version
  • new_symbols
  • bit_timing (deprecated but mandatory)
  • nodes
  • value_tables
  • messages
  • message_transmitters
  • environment_variables
  • environment_variables_data
  • signal_types
  • comments
  • attribute_definitions
  • sigtype_attr_list (format missing documentation)
  • attribute_defaults
  • attribute_values
  • value_descriptions
  • category_definitions (deprecated)
  • categories (deprecated)
  • filter (deprecated)
  • signal_type_refs
  • signal_groups
  • signal_extended_value_type_list

Deviating from standard

  • multispace between parsers instead of single space allowing e.g. (two spaces) SIG_GROUP 13.
  • VAL_ suffix may be ; or ;

Alternatives

Credits

Test dbcs files were copied from the cantools project.

Development

  • This project is easier to develop with just, a modern alternative to make.
  • To get a list of available commands, run just.
  • To run tests, use just test.
  • This project uses insta for snapshot testing. To update the snapshots run just bless

License

Licensed under either of

Contribution

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.

About

Rust dbc parser

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

No packages published

Contributors 7