62 lines
1.8 KiB
Rust
62 lines
1.8 KiB
Rust
use embassy_hal_internal::PeripheralRef;
|
|
|
|
use super::word::Word;
|
|
use super::{AnyChannel, Request, Transfer, TransferOptions};
|
|
|
|
/// Convenience wrapper, contains a channel and a request number.
|
|
///
|
|
/// Commonly used in peripheral drivers that own DMA channels.
|
|
pub(crate) struct ChannelAndRequest<'d> {
|
|
pub channel: PeripheralRef<'d, AnyChannel>,
|
|
pub request: Request,
|
|
}
|
|
|
|
impl<'d> ChannelAndRequest<'d> {
|
|
pub unsafe fn read<'a, W: Word>(
|
|
&'a mut self,
|
|
peri_addr: *mut W,
|
|
buf: &'a mut [W],
|
|
options: TransferOptions,
|
|
) -> Transfer<'a> {
|
|
Transfer::new_read(&mut self.channel, self.request, peri_addr, buf, options)
|
|
}
|
|
|
|
pub unsafe fn read_raw<'a, W: Word>(
|
|
&'a mut self,
|
|
peri_addr: *mut W,
|
|
buf: *mut [W],
|
|
options: TransferOptions,
|
|
) -> Transfer<'a> {
|
|
Transfer::new_read_raw(&mut self.channel, self.request, peri_addr, buf, options)
|
|
}
|
|
|
|
pub unsafe fn write<'a, W: Word>(
|
|
&'a mut self,
|
|
buf: &'a [W],
|
|
peri_addr: *mut W,
|
|
options: TransferOptions,
|
|
) -> Transfer<'a> {
|
|
Transfer::new_write(&mut self.channel, self.request, buf, peri_addr, options)
|
|
}
|
|
|
|
pub unsafe fn write_raw<'a, W: Word>(
|
|
&'a mut self,
|
|
buf: *const [W],
|
|
peri_addr: *mut W,
|
|
options: TransferOptions,
|
|
) -> Transfer<'a> {
|
|
Transfer::new_write_raw(&mut self.channel, self.request, buf, peri_addr, options)
|
|
}
|
|
|
|
#[allow(dead_code)]
|
|
pub unsafe fn write_repeated<'a, W: Word>(
|
|
&'a mut self,
|
|
repeated: &'a W,
|
|
count: usize,
|
|
peri_addr: *mut W,
|
|
options: TransferOptions,
|
|
) -> Transfer<'a> {
|
|
Transfer::new_write_repeated(&mut self.channel, self.request, repeated, count, peri_addr, options)
|
|
}
|
|
}
|