Skip to content

Commit aa23bce

Browse files
committed
Add embedded_dma feature
1 parent 6cd26cc commit aa23bce

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1818
- Added `Deque::make_contiguous`.
1919
- Added `VecView`, the `!Sized` version of `Vec`.
2020
- Added pool implementations for 64-bit architectures.
21+
- Add `embedded_dma` feature to one can send `Vec`, `pool::object::Object` and `pool::boxed::Box` to DMA as read/write buffers [#362].
2122

2223
### Changed
2324

Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ serde = { version = "1", optional = true, default-features = false }
4848
ufmt-write = { version = "0.1", optional = true }
4949
defmt = { version = ">=0.2.0,<0.4", optional = true }
5050

51+
[dependencies.embedded-dma]
52+
version = "0.2"
53+
optional = true
54+
5155
# for the pool module
5256
[target.'cfg(any(target_arch = "arm", target_pointer_width = "32", target_pointer_width = "64"))'.dependencies]
5357
stable_deref_trait = { version = "1", default-features = false }

src/vec.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2076,6 +2076,32 @@ where
20762076
}
20772077
}
20782078

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

0 commit comments

Comments
 (0)