Skip to content

Commit e0289a4

Browse files
committed
Add embedded_dma feature
1 parent 644653b commit e0289a4

File tree

3 files changed

+30
-0
lines changed

3 files changed

+30
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1515
- Implemented `retain` for `IndexMap` and `IndexSet`.
1616
- Recover `StableDeref` trait for `pool::object::Object` and `pool::boxed::Box`.
1717
- Add polyfills for ESP32S2
18+
- Add `embedded_dma` feature to one can send `Vec`, `pool::object::Object` and `pool::boxed::Box` to DMA as read/write buffers [#362].
1819

1920
### Changed
2021

Cargo.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ __trybuild = []
2424
mpmc_large = []
2525
# This flag has no version guarantee, the `defmt` dependency can be updated in a patch release
2626
defmt-impl = ["defmt"]
27+
embedded-dma = ["dep:embedded-dma"]
2728

2829
[target.thumbv6m-none-eabi.dependencies]
2930
atomic-polyfill = { version = "1.0.1", optional = true }
@@ -59,6 +60,10 @@ default-features = false
5960
version = "0.1"
6061
optional = true
6162

63+
[dependencies.embedded-dma]
64+
version = "0.2"
65+
optional = true
66+
6267
[dev-dependencies.ufmt]
6368
version = "0.1"
6469

src/vec.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1181,6 +1181,30 @@ where
11811181
}
11821182
}
11831183

1184+
#[cfg(feature = "embedded-dma")]
1185+
unsafe impl<T, const N: usize> embedded_dma::ReadTarget for Vec<T, N>
1186+
where
1187+
T: embedded_dma::ReadTarget,
1188+
{
1189+
type Word = T::Word;
1190+
1191+
// Replace default implementation to return self.len() as buffer size
1192+
fn as_read_buffer(&self) -> (*const Self::Word, usize) {
1193+
use ops::Deref;
1194+
self.deref().as_read_buffer()
1195+
}
1196+
}
1197+
1198+
#[cfg(feature = "embedded-dma")]
1199+
unsafe impl<T, const N: usize> embedded_dma::WriteTarget for Vec<T, N>
1200+
where
1201+
T: embedded_dma::WriteTarget,
1202+
{
1203+
type Word = T::Word;
1204+
1205+
// Use default implementation to return N as buffer size
1206+
}
1207+
11841208
#[cfg(test)]
11851209
mod tests {
11861210
use crate::Vec;

0 commit comments

Comments
 (0)