File tree 3 files changed +30
-0
lines changed
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/).
15
15
- Implemented ` retain ` for ` IndexMap ` and ` IndexSet ` .
16
16
- Recover ` StableDeref ` trait for ` pool::object::Object ` and ` pool::boxed::Box ` .
17
17
- 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 ] .
18
19
19
20
### Changed
20
21
Original file line number Diff line number Diff line change @@ -24,6 +24,7 @@ __trybuild = []
24
24
mpmc_large = []
25
25
# This flag has no version guarantee, the `defmt` dependency can be updated in a patch release
26
26
defmt-impl = [" defmt" ]
27
+ embedded-dma = [" dep:embedded-dma" ]
27
28
28
29
[target .thumbv6m-none-eabi .dependencies ]
29
30
atomic-polyfill = { version = " 1.0.1" , optional = true }
@@ -59,6 +60,10 @@ default-features = false
59
60
version = " 0.1"
60
61
optional = true
61
62
63
+ [dependencies .embedded-dma ]
64
+ version = " 0.2"
65
+ optional = true
66
+
62
67
[dev-dependencies .ufmt ]
63
68
version = " 0.1"
64
69
Original file line number Diff line number Diff line change @@ -1181,6 +1181,30 @@ where
1181
1181
}
1182
1182
}
1183
1183
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
+
1184
1208
#[ cfg( test) ]
1185
1209
mod tests {
1186
1210
use crate :: Vec ;
You can’t perform that action at this time.
0 commit comments