diff options
| author | Corey Schuhen <[email protected]> | 2024-02-24 20:23:34 +1000 |
|---|---|---|
| committer | Corey Schuhen <[email protected]> | 2024-02-25 10:14:12 +1000 |
| commit | a061cf31334d7c1912528edecb4738c84d98e17a (patch) | |
| tree | 50e881fd75820c7839258fdf7cc3250079a93209 /embassy-stm32/src | |
| parent | 779898c0e74d850f324528d2b2db3c9d76ec86d1 (diff) | |
FDCAN: Allow access to buffered senders and receivers.
Diffstat (limited to 'embassy-stm32/src')
| -rw-r--r-- | embassy-stm32/src/can/fdcan.rs | 32 |
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. | ||
| 438 | pub 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. | ||
| 441 | pub type BufferedCanReceiver = embassy_sync::channel::DynamicReceiver<'static, (ClassicFrame, Timestamp)>; | ||
| 442 | |||
| 437 | impl<'c, 'd, T: Instance, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize> | 443 | impl<'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 | ||
| 484 | impl<'c, 'd, T: Instance, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize> Drop | 500 | impl<'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. | ||
| 527 | pub 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. | ||
| 530 | pub type BufferedFdCanReceiver = embassy_sync::channel::DynamicReceiver<'static, (FdFrame, Timestamp)>; | ||
| 531 | |||
| 510 | impl<'c, 'd, T: Instance, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize> | 532 | impl<'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 | ||
| 557 | impl<'c, 'd, T: Instance, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize> Drop | 589 | impl<'c, 'd, T: Instance, const TX_BUF_SIZE: usize, const RX_BUF_SIZE: usize> Drop |
