@@ -3,8 +3,8 @@ use core::marker::PhantomData;
3
3
use embedded_dma:: { ReadBuffer , WriteBuffer } ;
4
4
5
5
use crate :: gpdma:: {
6
- config:: { Config as DmaConfig , MemoryToPeripheral , PeripheralToMemory } ,
7
- Channel , ChannelRegs , Transfer as DmaTransfer , Word as DmaWord ,
6
+ config:: { DmaConfig , MemoryToPeripheral , PeripheralToMemory } ,
7
+ Channel , ChannelRegs , DmaTransfer , DmaTransferBuilder , Word as DmaWord ,
8
8
} ;
9
9
10
10
use super :: { Error , Instance , Spi , Word } ;
73
73
let ( _, len) = unsafe { destination. write_buffer ( ) } ;
74
74
let config = DmaConfig :: new ( ) . with_request ( SPI :: rx_dma_request ( ) ) ;
75
75
let source = DmaRx :: new ( ) ;
76
- let transfer = DmaTransfer :: peripheral_to_memory (
76
+ let transfer = DmaTransferBuilder :: peripheral_to_memory (
77
77
config,
78
78
channel,
79
79
source,
@@ -109,27 +109,26 @@ where
109
109
}
110
110
}
111
111
112
- pub struct TxDmaTransfer < ' a , SPI , W : Word , CH , S > {
112
+ pub struct TxDmaTransfer < ' a , SPI , W : Word , CH : ChannelRegs > {
113
113
spi : & ' a mut Spi < SPI , W > ,
114
- transfer : DmaTransfer < CH , S , DmaTx < SPI , W > , MemoryToPeripheral > ,
114
+ transfer : DmaTransfer < ' a , CH > ,
115
115
}
116
116
117
- impl < ' a , SPI , W , CH , S > TxDmaTransfer < ' a , SPI , W , CH , S >
117
+ impl < ' a , SPI , W , CH > TxDmaTransfer < ' a , SPI , W , CH >
118
118
where
119
119
SPI : Instance ,
120
120
W : DmaWord + Word ,
121
121
CH : ChannelRegs ,
122
- S : ReadBuffer < Word = W > ,
123
122
{
124
- pub fn new (
123
+ pub fn new < S : ReadBuffer < Word = W > > (
125
124
spi : & ' a mut Spi < SPI , W > ,
126
- channel : Channel < CH > ,
125
+ channel : & ' a Channel < CH > ,
127
126
source : S ,
128
127
) -> Self {
129
128
let ( _, len) = unsafe { source. read_buffer ( ) } ;
130
129
let config = DmaConfig :: new ( ) . with_request ( SPI :: tx_dma_request ( ) ) ;
131
130
let destination = DmaTx :: new ( ) ;
132
- let transfer = DmaTransfer :: memory_to_peripheral (
131
+ let transfer = DmaTransferBuilder :: memory_to_peripheral (
133
132
config,
134
133
channel,
135
134
source,
@@ -165,41 +164,44 @@ where
165
164
}
166
165
}
167
166
168
- pub struct DuplexDmaTransfer < ' a , SPI , W : Word , TX , RX , S , D > {
167
+ pub struct DuplexDmaTransfer < ' a , SPI , W : Word , TX : ChannelRegs , RX : ChannelRegs >
168
+ {
169
169
spi : & ' a mut Spi < SPI , W > ,
170
- tx_transfer : DmaTransfer < TX , S , DmaTx < SPI , W > , MemoryToPeripheral > ,
171
- rx_transfer : DmaTransfer < RX , DmaRx < SPI , W > , D , PeripheralToMemory > ,
170
+ tx_transfer : DmaTransfer < ' a , TX > ,
171
+ rx_transfer : DmaTransfer < ' a , RX > ,
172
172
}
173
173
174
- impl < ' a , SPI , W , RX , TX , S , D > DuplexDmaTransfer < ' a , SPI , W , TX , RX , S , D >
174
+ impl < ' a , SPI , W , RX , TX > DuplexDmaTransfer < ' a , SPI , W , TX , RX >
175
175
where
176
176
SPI : Instance ,
177
177
W : Word + DmaWord ,
178
178
TX : ChannelRegs ,
179
179
RX : ChannelRegs ,
180
- S : ReadBuffer < Word = W > ,
181
- D : WriteBuffer < Word = W > ,
182
180
{
183
- pub fn new (
181
+ pub fn new < S , D > (
184
182
spi : & ' a mut Spi < SPI , W > ,
185
- tx_channel : Channel < TX > ,
186
- rx_channel : Channel < RX > ,
183
+ tx_channel : & Channel < TX > ,
184
+ rx_channel : & Channel < RX > ,
187
185
source : S ,
188
186
mut destination : D ,
189
- ) -> Self {
187
+ ) -> Self
188
+ where
189
+ S : ReadBuffer < Word = W > ,
190
+ D : WriteBuffer < Word = W > ,
191
+ {
190
192
let ( _, dest_len) = unsafe { destination. write_buffer ( ) } ;
191
193
192
194
let tx_config = DmaConfig :: new ( ) . with_request ( SPI :: tx_dma_request ( ) ) ;
193
195
let tx_destination = DmaTx :: new ( ) ;
194
- let tx_transfer = DmaTransfer :: memory_to_peripheral (
196
+ let tx_transfer = DmaTransferBuilder :: memory_to_peripheral (
195
197
tx_config,
196
198
tx_channel,
197
199
source,
198
200
tx_destination,
199
201
) ;
200
202
let rx_source = DmaRx :: new ( ) ;
201
203
let rx_config = DmaConfig :: new ( ) . with_request ( SPI :: rx_dma_request ( ) ) ;
202
- let rx_transfer = DmaTransfer :: peripheral_to_memory (
204
+ let rx_transfer = DmaTransferBuilder :: peripheral_to_memory (
203
205
rx_config,
204
206
rx_channel,
205
207
rx_source,
0 commit comments