| Crates.io | can_decode |
| lib.rs | can_decode |
| version | 0.4.1 |
| created_at | 2025-10-15 02:32:48.099248+00 |
| updated_at | 2026-01-14 01:42:29.976604+00 |
| description | Decode and encode CAN frames into messages/signals in a fast and easy way. |
| homepage | https://github.com/PurdueElectricRacing/can_decode |
| repository | https://github.com/PurdueElectricRacing/can_decode |
| max_upload_size | |
| id | 1883554 |
| size | 40,002 |
Decode and encode CAN frames into messages/signals in a fast and easy way.
use can_decode::Parser;
use std::path::Path;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Load a DBC file
let parser = Parser::from_dbc_file(Path::new("my_can_database.dbc"))?;
// Decode a CAN message
let msg_id = 0x123;
let data = [0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0];
if let Some(decoded) = parser.decode_msg(msg_id, &data) {
println!("Message: {}", decoded.name);
for (signal_name, signal) in &decoded.signals {
println!(" {}: {} {}", signal_name, signal.value, signal.unit);
}
}
Ok(())
}
use can_decode::Parser;
use std::path::Path;
use std::collections::HashMap;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let parser = Parser::from_dbc_file(Path::new("my_can_database.dbc"))?;
// Encode a CAN message from signal values
let mut signal_values = HashMap::from([
("EngineSpeed".to_string(), 2500.0),
("ThrottlePosition".to_string(), 45.5),
]);
if let Some(data) = parser.encode_msg(0x123, &signal_values) {
println!("Encoded CAN data: {:02X?}", data);
}
// Or encode by message name
if let Some((msg_id, data)) = parser.encode_msg_by_name("EngineData", &signal_values) {
println!("Message ID: {:#X}, Data: {:02X?}", msg_id, data);
}
Ok(())
}
Add the following to your Cargo.toml:
[dependencies]
can_decode = "0.4"