From 4d903a713eb1db05a8465c74e6c6cd71fefc5d4e Mon Sep 17 00:00:00 2001 From: RichardWGNR <171420035+RichardWGNR@users.noreply.github.com> Date: Fri, 11 Apr 2025 04:27:03 +0500 Subject: [PATCH 1/2] Capability to modify CAN frame data without copying. #4075 --- embassy-stm32/src/can/frame.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/embassy-stm32/src/can/frame.rs b/embassy-stm32/src/can/frame.rs index d2d1f7aa6..f1bc81ec3 100644 --- a/embassy-stm32/src/can/frame.rs +++ b/embassy-stm32/src/can/frame.rs @@ -128,6 +128,11 @@ impl ClassicData { pub fn raw(&self) -> &[u8] { &self.bytes } + + /// Raw mutable read access to data. + pub fn raw_mut(&mut self) -> &mut [u8] { + &mut self.bytes + } /// Checks if the length can be encoded in FDCAN DLC field. pub const fn is_valid_len(len: usize) -> bool { @@ -208,6 +213,11 @@ impl Frame { pub fn data(&self) -> &[u8] { &self.data.raw() } + + /// Get mutable reference to data + pub fn data_mut(&mut self) -> &mut [u8] { + self.data.raw_mut() + } /// Get priority of frame pub fn priority(&self) -> u32 { @@ -313,6 +323,11 @@ impl FdData { pub fn raw(&self) -> &[u8] { &self.bytes } + + /// Raw mutable read access to data. + pub fn raw_mut(&mut self) -> &mut [u8] { + &mut self.bytes + } /// Checks if the length can be encoded in FDCAN DLC field. pub const fn is_valid_len(len: usize) -> bool { @@ -392,6 +407,11 @@ impl FdFrame { pub fn data(&self) -> &[u8] { &self.data.raw() } + + /// Get mutable reference to data + pub fn data_mut(&mut self) -> &mut [u8] { + self.data.raw_mut() + } } impl embedded_can::Frame for FdFrame { From aae3f7fb70600851240501c9eced2cbc248ca700 Mon Sep 17 00:00:00 2001 From: RichardWGNR <171420035+RichardWGNR@users.noreply.github.com> Date: Fri, 11 Apr 2025 04:31:32 +0500 Subject: [PATCH 2/2] Fix rustfmt #4075 --- embassy-stm32/src/can/frame.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/embassy-stm32/src/can/frame.rs b/embassy-stm32/src/can/frame.rs index f1bc81ec3..f621b8bd5 100644 --- a/embassy-stm32/src/can/frame.rs +++ b/embassy-stm32/src/can/frame.rs @@ -128,7 +128,7 @@ impl ClassicData { pub fn raw(&self) -> &[u8] { &self.bytes } - + /// Raw mutable read access to data. pub fn raw_mut(&mut self) -> &mut [u8] { &mut self.bytes @@ -213,7 +213,7 @@ impl Frame { pub fn data(&self) -> &[u8] { &self.data.raw() } - + /// Get mutable reference to data pub fn data_mut(&mut self) -> &mut [u8] { self.data.raw_mut() @@ -323,7 +323,7 @@ impl FdData { pub fn raw(&self) -> &[u8] { &self.bytes } - + /// Raw mutable read access to data. pub fn raw_mut(&mut self) -> &mut [u8] { &mut self.bytes @@ -407,7 +407,7 @@ impl FdFrame { pub fn data(&self) -> &[u8] { &self.data.raw() } - + /// Get mutable reference to data pub fn data_mut(&mut self) -> &mut [u8] { self.data.raw_mut()