pub struct Message { /* private fields */ }Expand description
Represents a CAN message in a DBC file.
A Message contains:
- A unique ID (CAN identifier)
- A name
- A DLC (Data Length Code) specifying the message size in bytes
- A sender node (ECU that transmits this message)
- A collection of signals
§Examples
use dbc_rs::Dbc;
let dbc_content = r#"VERSION "1.0"
BU_: ECM
BO_ 256 EngineData : 8 ECM
SG_ RPM : 0|16@0+ (0.25,0) [0|8000] "rpm" *
"#;
let dbc = Dbc::parse(dbc_content)?;
let message = dbc.messages().at(0).unwrap();
println!("Message: {} (ID: {})", message.name(), message.id());Implementations§
Source§impl Message
impl Message
Sourcepub fn id(&self) -> u32
pub fn id(&self) -> u32
Returns the CAN message ID.
This returns the raw CAN ID as it would appear on the bus (11-bit or 29-bit).
For extended (29-bit) IDs, the internal flag bit is stripped.
Use is_extended() to check if this is an extended ID.
§Examples
use dbc_rs::Dbc;
let dbc = Dbc::parse(r#"VERSION "1.0"\n\nBU_: ECM\n\nBO_ 256 EngineData : 8 ECM"#)?;
let message = dbc.messages().at(0).unwrap();
assert_eq!(message.id(), 256);Sourcepub fn is_extended(&self) -> bool
pub fn is_extended(&self) -> bool
Returns true if this message uses an extended (29-bit) CAN ID.
Standard CAN uses 11-bit identifiers (0-2047), while extended CAN uses 29-bit identifiers (0-536870911).
§Examples
use dbc_rs::Dbc;
// Standard 11-bit ID
let dbc = Dbc::parse(r#"VERSION "1.0"\n\nBU_: ECM\n\nBO_ 256 EngineData : 8 ECM"#)?;
let message = dbc.messages().at(0).unwrap();
assert!(!message.is_extended());
// Extended 29-bit ID (with flag bit set: 0x80000000 | 0x18DAF115)
let dbc = Dbc::parse(r#"VERSION "1.0"\n\nBU_: ECM\n\nBO_ 2564485397 OBD2 : 8 ECM"#)?;
let message = dbc.messages().at(0).unwrap();
assert!(message.is_extended());
assert_eq!(message.id(), 0x18DAF115);Sourcepub fn name(&self) -> &str
pub fn name(&self) -> &str
Returns the message name.
§Examples
use dbc_rs::Dbc;
let dbc = Dbc::parse(r#"VERSION "1.0"\n\nBU_: ECM\n\nBO_ 256 EngineData : 8 ECM"#)?;
let message = dbc.messages().at(0).unwrap();
assert_eq!(message.name(), "EngineData");Sourcepub fn dlc(&self) -> u8
pub fn dlc(&self) -> u8
Returns the Data Length Code (DLC) in bytes.
DLC specifies the size of the message payload. For classic CAN, this is 1-8 bytes. For CAN FD, this can be up to 64 bytes.
§Examples
use dbc_rs::Dbc;
let dbc = Dbc::parse(r#"VERSION "1.0"\n\nBU_: ECM\n\nBO_ 256 EngineData : 8 ECM"#)?;
let message = dbc.messages().at(0).unwrap();
assert_eq!(message.dlc(), 8);Sourcepub fn sender(&self) -> &str
pub fn sender(&self) -> &str
Get the sender node name for this message.
The sender is the node that transmits this message on the CAN bus.
§Examples
use dbc_rs::Dbc;
let dbc = Dbc::parse(r#"VERSION "1.0"
BU_: ECM TCM
BO_ 256 Engine : 8 ECM
SG_ RPM : 0|16@1+ (0.25,0) [0|8000] "rpm" *
"#)?;
let message = dbc.messages().iter().next().unwrap();
assert_eq!(message.sender(), "ECM");Sourcepub fn signals(&self) -> &Signals
pub fn signals(&self) -> &Signals
Returns a reference to the signals collection for this message.
The Signals collection provides methods to iterate, search, and access signals by index.
§Examples
use dbc_rs::Dbc;
let dbc = Dbc::parse(r#"VERSION "1.0"
BU_: ECM
BO_ 256 Engine : 8 ECM
SG_ RPM : 0|16@1+ (0.25,0) [0|8000] "rpm" ECM
SG_ Torque : 16|16@1+ (0.1,0) [0|500] "Nm" ECM
"#)?;
let message = dbc.messages().find("Engine").unwrap();
let signals = message.signals();
assert_eq!(signals.len(), 2);
assert!(signals.find("RPM").is_some());Source§impl Message
impl Message
pub fn to_dbc_string(&self) -> String
pub fn to_string_full(&self) -> String
Trait Implementations§
impl Eq for Message
impl StructuralPartialEq for Message
Auto Trait Implementations§
impl Freeze for Message
impl RefUnwindSafe for Message
impl Send for Message
impl Sync for Message
impl Unpin for Message
impl UnwindSafe for Message
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
clone_to_uninit)