aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorey Schuhen <[email protected]>2024-03-27 20:29:28 +1000
committerCorey Schuhen <[email protected]>2024-03-28 09:32:13 +1000
commita9f0c8c3a941684c1a610a72dfb2b925535fc8cd (patch)
treef7a2f9ba6abece7d997dd92b797bef54577ae18b
parent8d43fb4da4712dd9bb5a2ae343168e536c2b3129 (diff)
Fixes for no-time.
-rw-r--r--embassy-stm32/src/can/bx/mod.rs13
-rw-r--r--embassy-stm32/src/can/frame.rs19
2 files changed, 20 insertions, 12 deletions
diff --git a/embassy-stm32/src/can/bx/mod.rs b/embassy-stm32/src/can/bx/mod.rs
index 253bcee13..cb83799d3 100644
--- a/embassy-stm32/src/can/bx/mod.rs
+++ b/embassy-stm32/src/can/bx/mod.rs
@@ -622,17 +622,18 @@ impl Registers {
622 let id = (stid << 18) | (exid); 622 let id = (stid << 18) | (exid);
623 embedded_can::ExtendedId::new(id).unwrap().into() 623 embedded_can::ExtendedId::new(id).unwrap().into()
624 }; 624 };
625 let data_len = fifo.rdtr().read().dlc(); 625 let rdtr = fifo.rdtr().read();
626 let data_len = rdtr.dlc();
627
628 #[cfg(not(feature = "time"))]
629 let ts = rdtr.time();
630
626 let mut data: [u8; 8] = [0; 8]; 631 let mut data: [u8; 8] = [0; 8];
627 data[0..4].copy_from_slice(&fifo.rdlr().read().0.to_ne_bytes()); 632 data[0..4].copy_from_slice(&fifo.rdlr().read().0.to_ne_bytes());
628 data[4..8].copy_from_slice(&fifo.rdhr().read().0.to_ne_bytes()); 633 data[4..8].copy_from_slice(&fifo.rdhr().read().0.to_ne_bytes());
629 634
630 let frame = Frame::new(Header::new(id, data_len, false), &data).unwrap(); 635 let frame = Frame::new(Header::new(id, data_len, false), &data).unwrap();
631 let envelope = Envelope { 636 let envelope = Envelope { ts, frame };
632 #[cfg(feature = "time")]
633 ts,
634 frame,
635 };
636 637
637 rfr.modify(|v| v.set_rfom(true)); 638 rfr.modify(|v| v.set_rfom(true));
638 639
diff --git a/embassy-stm32/src/can/frame.rs b/embassy-stm32/src/can/frame.rs
index fb032aee2..d2d1f7aa6 100644
--- a/embassy-stm32/src/can/frame.rs
+++ b/embassy-stm32/src/can/frame.rs
@@ -3,6 +3,14 @@ use bit_field::BitField;
3 3
4use crate::can::enums::FrameCreateError; 4use crate::can::enums::FrameCreateError;
5 5
6/// Calculate proper timestamp when available.
7#[cfg(feature = "time")]
8pub type Timestamp = embassy_time::Instant;
9
10/// Raw register timestamp
11#[cfg(not(feature = "time"))]
12pub type Timestamp = u16;
13
6/// CAN Header, without meta data 14/// CAN Header, without meta data
7#[derive(Debug, Copy, Clone)] 15#[derive(Debug, Copy, Clone)]
8pub struct Header { 16pub struct Header {
@@ -264,15 +272,14 @@ impl CanHeader for Frame {
264#[cfg_attr(feature = "defmt", derive(defmt::Format))] 272#[cfg_attr(feature = "defmt", derive(defmt::Format))]
265pub struct Envelope { 273pub struct Envelope {
266 /// Reception time. 274 /// Reception time.
267 #[cfg(feature = "time")] 275 pub ts: Timestamp,
268 pub ts: embassy_time::Instant,
269 /// The actual CAN frame. 276 /// The actual CAN frame.
270 pub frame: Frame, 277 pub frame: Frame,
271} 278}
272 279
273impl Envelope { 280impl Envelope {
274 /// Convert into a tuple 281 /// Convert into a tuple
275 pub fn parts(self) -> (Frame, embassy_time::Instant) { 282 pub fn parts(self) -> (Frame, Timestamp) {
276 (self.frame, self.ts) 283 (self.frame, self.ts)
277 } 284 }
278} 285}
@@ -442,15 +449,15 @@ impl CanHeader for FdFrame {
442#[cfg_attr(feature = "defmt", derive(defmt::Format))] 449#[cfg_attr(feature = "defmt", derive(defmt::Format))]
443pub struct FdEnvelope { 450pub struct FdEnvelope {
444 /// Reception time. 451 /// Reception time.
445 #[cfg(feature = "time")] 452 pub ts: Timestamp,
446 pub ts: embassy_time::Instant, 453
447 /// The actual CAN frame. 454 /// The actual CAN frame.
448 pub frame: FdFrame, 455 pub frame: FdFrame,
449} 456}
450 457
451impl FdEnvelope { 458impl FdEnvelope {
452 /// Convert into a tuple 459 /// Convert into a tuple
453 pub fn parts(self) -> (FdFrame, embassy_time::Instant) { 460 pub fn parts(self) -> (FdFrame, Timestamp) {
454 (self.frame, self.ts) 461 (self.frame, self.ts)
455 } 462 }
456} 463}