pub struct CanFrame {
pub id: u32,
pub flags: FrameFlags,
pub len: u8,
/* private fields */
}Expand description
Unified CAN frame: covers both classical CAN (8-byte payload) and CAN-FD (up to 64-byte payload).
The inline [u8; 64] payload buffer is sized for CAN-FD’s maximum DLC;
classical frames use only the first 8 bytes and pay ~56 bytes of latent
memory in exchange for full upper-layer agnosticism between classical and
FD. See openspec/changes/walking-skeleton-single-arm/design.md Decision 14.
Fields§
§id: u32CAN identifier (11-bit base or 29-bit extended; see FrameFlags::EXTENDED_ID).
flags: FrameFlagsMetadata bits (FD/BRS/ESI/EXTENDED/RTR).
len: u8Payload length in bytes. len <= 8 for classical, len <= 64 for FD.
Implementations§
Source§impl CanFrame
impl CanFrame
Sourcepub fn classical(id: u32, payload: &[u8]) -> Result<Self, FrameError>
pub fn classical(id: u32, payload: &[u8]) -> Result<Self, FrameError>
Construct a classical CAN frame with an 11-bit base identifier.
Sourcepub fn classical_extended(id: u32, payload: &[u8]) -> Result<Self, FrameError>
pub fn classical_extended(id: u32, payload: &[u8]) -> Result<Self, FrameError>
Construct a classical CAN frame with a 29-bit extended identifier.
Sourcepub fn fd(id: u32, payload: &[u8]) -> Result<Self, FrameError>
pub fn fd(id: u32, payload: &[u8]) -> Result<Self, FrameError>
Construct a CAN-FD frame. Length must be a valid FD DLC; BRS is set by default.
Sourcepub fn fd_extended(id: u32, payload: &[u8]) -> Result<Self, FrameError>
pub fn fd_extended(id: u32, payload: &[u8]) -> Result<Self, FrameError>
Construct a CAN-FD frame with a 29-bit extended identifier.
Sourcepub fn from_parts(
id: u32,
flags: FrameFlags,
payload: &[u8],
) -> Result<Self, FrameError>
pub fn from_parts( id: u32, flags: FrameFlags, payload: &[u8], ) -> Result<Self, FrameError>
Construct a frame from raw fields. Performs the flag-compatibility
validation that CanFrame::classical / CanFrame::fd enforce
automatically.
Sourcepub fn is_fd(&self) -> bool
pub fn is_fd(&self) -> bool
True iff FrameFlags::FD_FORMAT is set.
Sourcepub fn is_extended(&self) -> bool
pub fn is_extended(&self) -> bool
True iff FrameFlags::EXTENDED_ID is set.