You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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;fnmain(){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");letmut 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
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.
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.