can-dbc
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 fs;
use Dbc;
use Scope;
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.
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
. 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
- 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.
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.