embedded_can/
nb.rs

1//! Non-blocking CAN API
2
3/// A CAN interface that is able to transmit and receive frames.
4pub trait Can {
5    /// Associated frame type.
6    type Frame: crate::Frame;
7
8    /// Associated error type.
9    type Error: crate::Error;
10
11    /// Puts a frame in the transmit buffer to be sent on the bus.
12    ///
13    /// If the transmit buffer is full, this function will try to replace a pending
14    /// lower priority frame and return the frame that was replaced.
15    /// Returns `Err(WouldBlock)` if the transmit buffer is full and no frame can be
16    /// replaced.
17    ///
18    /// # Notes for implementers
19    ///
20    /// * Frames of equal identifier shall be transmited in FIFO fashion when more
21    ///   than one transmit buffer is available.
22    /// * When replacing pending frames make sure the frame is not in the process of
23    ///   being send to the bus.
24    fn transmit(&mut self, frame: &Self::Frame) -> nb::Result<Option<Self::Frame>, Self::Error>;
25
26    /// Returns a received frame if available.
27    fn receive(&mut self) -> nb::Result<Self::Frame, Self::Error>;
28}