File tree Expand file tree Collapse file tree 3 files changed +30
-0
lines changed Expand file tree Collapse file tree 3 files changed +30
-0
lines changed Original file line number Diff line number Diff 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
Original file line number Diff line number Diff line change @@ -24,6 +24,7 @@ __trybuild = []
2424mpmc_large = []
2525# This flag has no version guarantee, the `defmt` dependency can be updated in a patch release
2626defmt-impl = [" defmt" ]
27+ embedded-dma = [" dep:embedded-dma" ]
2728
2829[target .thumbv6m-none-eabi .dependencies ]
2930atomic-polyfill = { version = " 1.0.1" , optional = true }
@@ -59,6 +60,10 @@ default-features = false
5960version = " 0.1"
6061optional = true
6162
63+ [dependencies .embedded-dma ]
64+ version = " 0.2"
65+ optional = true
66+
6267[dev-dependencies .ufmt ]
6368version = " 0.1"
6469
Original file line number Diff line number Diff 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) ]
11851209mod tests {
11861210 use crate :: Vec ;
You can’t perform that action at this time.
0 commit comments