can_tools
Rust utilities for parsing and modeling automotive CAN databases and logs.
Updated 2025-09-03: streaming DBC reader (Windows-1252, single-pass transliteration), ASC absolute-time formatting optimized, latest-frame index maintenance optimized, SlotMap-backed arenas (stable keys), order-aware iteration and caching in sorts.
Features
- DBC parsing → build an in-memory
DatabaseDBC
(nodes, messages, signals). - ASC parsing → parse Vector ASCII traces into a
CanLog
model.
This README documents the library API (no application/UI specifics).
Installation
Add to Cargo.toml
:
[]
= "1.2.15"
Use only the DBC parser (disable default features):
[]
= { = "1.2.15", = false, = ["dbc"] }
Minimal usage with DBC only:
use dbc;
use DatabaseDBC;
Usage Overview
Parse a DBC
use dbc;
use DatabaseDBC;
let db: DatabaseDBC = from_file?;
Iterate in presentation order:
for n in db.iter_nodes
for m in db.iter_messages
for s in db.iter_signals
Sort by name (ASCII case-insensitive):
let mut db = db;
db.sort_db_nodes_by_name;
db.sort_db_messages_by_name;
db.sort_db_signals_by_name;
Lookups:
let by_id = db.get_message_by_id;
let by_hex = db.get_message_by_id_hex;
let by_name = db.get_message_by_name;
let node = db.get_node_by_name;
let sig = db.get_signal_by_name;
Reset:
let mut db = db;
db.clear;
Notes on attributes:
- Attribute definitions come from
BA_DEF_*
and defaults fromBA_DEF_DEF_
. - Assignments
BA_
set values on DB/Node/Message/Signal. - ENUM assignments in
BA_
use numeric indices into the declared enum list.
Parse an ASC trace
use HashMap;
use asc;
use ;
use DatabaseDBC;
// Optional: provide per-channel databases for enrichment
let mut dbs: = new;
dbs.insert;
let log: CanLog = from_file?;
// Iterate all frames in file order and access their messages
for frame in &log.can_frames
Parse ARXML (CAN clusters)
use arxml;
use DatabaseARXML;
let clusters: = parse_from_file?;
for c in &clusters
License
MIT