Skip to content

Commit cc0f541

Browse files
committed
Add embedded_dma feature
1 parent c593fa5 commit cc0f541

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1717
- Added `Extend` impls for `Deque`.
1818
- Added `Deque::make_contiguous`.
1919
- Added `VecView`, the `!Sized` version of `Vec`.
20+
- Add `embedded_dma` feature to one can send `Vec`, `pool::object::Object` and `pool::boxed::Box` to DMA as read/write buffers [#362].
2021

2122
### Changed
2223

Cargo.toml

+4
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ serde = { version = "1", optional = true, default-features = false }
4646
ufmt-write = { version = "0.1", optional = true }
4747
defmt = { version = ">=0.2.0,<0.4", optional = true }
4848

49+
[dependencies.embedded-dma]
50+
version = "0.2"
51+
optional = true
52+
4953
# for the pool module
5054
[target.'cfg(any(target_arch = "arm", target_arch = "x86"))'.dependencies]
5155
stable_deref_trait = { version = "1", default-features = false }

src/vec.rs

+26
Original file line numberDiff line numberDiff line change
@@ -2078,6 +2078,32 @@ where
20782078
}
20792079
}
20802080

2081+
#[cfg(feature = "embedded-dma")]
2082+
unsafe impl<T, const N: usize> embedded_dma::ReadTarget for Vec<T, N>
2083+
where
2084+
T: embedded_dma::ReadTarget,
2085+
{
2086+
type Word = T::Word;
2087+
2088+
// Replace default implementation to return self.len() as buffer size
2089+
fn as_read_buffer(&self) -> (*const Self::Word, usize) {
2090+
(self.as_ptr() as *const T::Word, self.len)
2091+
}
2092+
}
2093+
2094+
#[cfg(feature = "embedded-dma")]
2095+
unsafe impl<T, const N: usize> embedded_dma::WriteTarget for Vec<T, N>
2096+
where
2097+
T: embedded_dma::WriteTarget,
2098+
{
2099+
type Word = T::Word;
2100+
2101+
// Replace default implementation to return N as buffer size
2102+
fn as_write_buffer(&mut self) -> (*mut Self::Word, usize) {
2103+
(self.as_mut_ptr() as *mut T::Word, N)
2104+
}
2105+
}
2106+
20812107
#[cfg(test)]
20822108
mod tests {
20832109
use crate::Vec;

0 commit comments

Comments
 (0)