aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorey Schuhen <[email protected]>2024-02-24 20:23:34 +1000
committerCorey Schuhen <[email protected]>2024-02-25 10:14:12 +1000
commita061cf31334d7c1912528edecb4738c84d98e17a (patch)
tree50e881fd75820c7839258fdf7cc3250079a93209
parent779898c0e74d850f324528d2b2db3c9d76ec86d1 (diff)
FDCAN: Allow access to buffered senders and receivers.
-rw-r--r--embassy-stm32/src/can/fdcan.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/embassy-stm32/src/can/fdcan.rs b/embassy-stm32/src/can/fdcan.rs
index 817ee2115..d290295f5 100644
--- a/embassy-stm32/src/can/fdcan.rs
+++ b/embassy-stm32/src/can/fdcan.rs
@@ -434,6 +434,12 @@ pub struct BufferedCan<'d, T: Instance, const TX_BUF_SIZE: usize, const RX_BUF_S
434 rx_buf: &'static RxBuf<RX_BUF_SIZE>, 434 rx_buf: &'static RxBuf<RX_BUF_SIZE>,
435} 435}
436 436
437/// Sender that can be used for sending CAN frames.
438pub type BufferedCanSender = embassy_sync::channel::DynamicSender<'static, ClassicFrame>;
439
440/// Receiver that can be used for receiving CAN frames. Note, each CAN frame will only be received by one receiver.
441pub type BufferedCanReceiver = embassy_sync::channel::DynamicReceiver<'static, (ClassicFrame, Timestamp)>;
442
437impl<'c, 'd, T: Instance, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize> 443impl<'c, 'd, T: Instance, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize>
438 BufferedCan<'d, T, TX_BUF_SIZE, RX_BUF_SIZE> 444 BufferedCan<'d, T, TX_BUF_SIZE, RX_BUF_SIZE>
439{ 445{
@@ -479,6 +485,16 @@ impl<'c, 'd, T: Instance, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize>
479 pub async fn read(&mut self) -> Result<(ClassicFrame, Timestamp), BusError> { 485 pub async fn read(&mut self) -> Result<(ClassicFrame, Timestamp), BusError> {
480 Ok(self.rx_buf.receive().await) 486 Ok(self.rx_buf.receive().await)
481 } 487 }
488
489 /// Returns a sender that can be used for sending CAN frames.
490 pub fn writer(&self) -> BufferedCanSender {
491 self.tx_buf.sender().into()
492 }
493
494 /// Returns a receiver that can be used for receiving CAN frames. Note, each CAN frame will only be received by one receiver.
495 pub fn reader(&self) -> BufferedCanReceiver {
496 self.rx_buf.receiver().into()
497 }
482} 498}
483 499
484impl<'c, 'd, T: Instance, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize> Drop 500impl<'c, 'd, T: Instance, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize> Drop
@@ -507,6 +523,12 @@ pub struct BufferedCanFd<'d, T: Instance, const TX_BUF_SIZE: usize, const RX_BUF
507 rx_buf: &'static RxFdBuf<RX_BUF_SIZE>, 523 rx_buf: &'static RxFdBuf<RX_BUF_SIZE>,
508} 524}
509 525
526/// Sender that can be used for sending CAN frames.
527pub type BufferedFdCanSender = embassy_sync::channel::DynamicSender<'static, FdFrame>;
528
529/// Receiver that can be used for receiving CAN frames. Note, each CAN frame will only be received by one receiver.
530pub type BufferedFdCanReceiver = embassy_sync::channel::DynamicReceiver<'static, (FdFrame, Timestamp)>;
531
510impl<'c, 'd, T: Instance, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize> 532impl<'c, 'd, T: Instance, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize>
511 BufferedCanFd<'d, T, TX_BUF_SIZE, RX_BUF_SIZE> 533 BufferedCanFd<'d, T, TX_BUF_SIZE, RX_BUF_SIZE>
512{ 534{
@@ -552,6 +574,16 @@ impl<'c, 'd, T: Instance, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize>
552 pub async fn read(&mut self) -> Result<(FdFrame, Timestamp), BusError> { 574 pub async fn read(&mut self) -> Result<(FdFrame, Timestamp), BusError> {
553 Ok(self.rx_buf.receive().await) 575 Ok(self.rx_buf.receive().await)
554 } 576 }
577
578 /// Returns a sender that can be used for sending CAN frames.
579 pub fn writer(&self) -> BufferedFdCanSender {
580 self.tx_buf.sender().into()
581 }
582
583 /// Returns a receiver that can be used for receiving CAN frames. Note, each CAN frame will only be received by one receiver.
584 pub fn reader(&self) -> BufferedFdCanReceiver {
585 self.rx_buf.receiver().into()
586 }
555} 587}
556 588
557impl<'c, 'd, T: Instance, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize> Drop 589impl<'c, 'd, T: Instance, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize> Drop