Crate can_dbc

Crate can_dbc 

Source
Expand description

§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 Pest grammar 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(), "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.

Re-exports§

pub use encoding_rs as encodings;

Structs§

AttrDefault
AttributeDefault
AttributeValueForDatabase
AttributeValueForEnvVariable
AttributeValueForMessage
AttributeValueForNode
AttributeValueForRelation
An attribute attached to the relation between a node and a signal
AttributeValueForSignal
Baudrate
Baudrate of network in KBit/s
Dbc
EnvironmentVariable
EnvironmentVariableData
ExtendedMultiplex
Mapping between multiplexors and multiplexed signals
ExtendedMultiplexMapping
Message
CAN message (frame) details including signal details
MessageTransmitter
Node
CAN network nodes, names must be unique
Signal
One or multiple signals are the payload of a CAN frame. To determine the actual value of a signal the following fn applies: let value = |can_signal_value| can_signal_value * factor + offset;
SignalExtendedValueTypeList
SignalGroups
Signal groups define a group of signals within a message
SignalType
SignalTypeRef
Symbol
ValDescription
ValueTable
Global value table
Version
Version identifier of the DBC file.

Enums§

AccessNode
AccessType
AttributeDefinition
AttributeValue
AttributeValueForRelationType
AttributeValueType
ByteOrder
Comment
Object comments
DbcError
Error type for DBC parsing operations
EnvType
env_var_type = '0' | '1' | '2' ; (* 0=integer, 1=float, 2=string *)
MessageId
CAN id in header of CAN frame. Must be unique in DBC file.
MultiplexIndicator
NumericValue
SignalAttributeValue
SignalExtendedValueType
Transmitter
ValueDescription
Encoding for signal raw values.
ValueType

Functions§

decode_cp1252
A helper function to decode cp1252 bytes, as DBC files are often encoded in cp1252.

Type Aliases§

DbcResult