async_hal/can/transmit/
mod.rs1use embedded_hal::can::Frame;
2mod transmitter;
3pub use transmitter::Transmitter;
4
5pub trait Transmit {
6 type Frame: Frame;
7 type Error;
8
9 fn is_ready(&mut self) -> bool;
10
11 fn transmit(&mut self, frame: &Self::Frame) -> nb::Result<(), Self::Error>;
12}
13
14#[cfg(feature = "mock")]
15use super::MockFrame;
16
17#[cfg(feature = "mock")]
18#[derive(Default)]
19pub struct MockTransmit {
20 pub frames: Vec<MockFrame>,
21}
22
23#[cfg(feature = "mock")]
24impl Transmit for MockTransmit {
25 type Frame = MockFrame;
26
27 type Error = ();
28
29 fn is_ready(&mut self) -> bool {
30 true
31 }
32
33 fn transmit(&mut self, frame: &Self::Frame) -> nb::Result<(), Self::Error> {
34 self.frames.push(frame.clone());
35 Ok(())
36 }
37}
38
39#[cfg(feature = "bxcan")]
40impl<I: bxcan::Instance> Transmit for bxcan::Tx<I> {
41 type Frame = bxcan::Frame;
42 type Error = core::convert::Infallible;
43
44 fn is_ready(&mut self) -> bool {
45 !self.is_idle()
46 }
47
48 fn transmit(&mut self, frame: &Self::Frame) -> nb::Result<(), Self::Error> {
49 self.transmit(frame).map(|_| ())
50 }
51}