Skip to content

A CAN signal and definition parser

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

jmagnuson/canparse

Folders and files

NameName
Last commit message
Last commit date

Latest commit

116c4cd · Nov 13, 2021

History

86 Commits
Nov 12, 2021
Nov 11, 2021
Nov 10, 2021
Feb 12, 2019
Jun 12, 2017
Jan 8, 2020
Nov 11, 2021
Jun 12, 2017
Jun 12, 2017
Nov 13, 2021

Repository files navigation

canparse

crates.io Build Status codecov

A CAN signal and definition parser, written in Rust.

The goal of canparse is to provide a means of converting CAN frames into pre-defined signals, via CANdb definition input (DBC). One common application is the J1939 spec, which defines a set of common parameters for heavy-duty trucks and other vehicles. PgnLibrary is also included as an application of DBC, to give first-class support for the PGN/SPN schema.

Documentation

Usage

Add canparse to your Cargo.toml with:

[dependencies]
canparse = "0.1"

Example

For a predefined DBC file, a simple program which utilizes PgnLibrary can be implemented as folows:

extern crate canparse;

use canparse::pgn::{PgnLibrary, SpnDefinition, ParseMessage};

fn main() {

    // Parse dbc file into PgnLibrary
    let lib = PgnLibrary::from_dbc_file("./j1939.dbc").unwrap();

    // Pull signal definition for engine speed
    let enginespeed_def: &SpnDefinition = lib
        .get_spn("Engine_Speed").unwrap();

    // Parse frame containing engine speed
    let msg: [u8; 8] = [0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88];
    let engine_speed: f32 = enginespeed_def.parse_message(&msg).unwrap();

    println!("Engine speed: {}", engine_speed);
}

Feature flags

  • use-socketcan - Support for socketcan-rs has been included for Linux systems requiring a translation from CANFrame messages, using SpnDefinition values.

Alternatives

License

Licensed under either of

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.