Mark DMA buffer traits as unsafe to implement (#2213)

* Mark DMA buffer traits as unsafe to implement

* update doc

---------

Co-authored-by: Dominic Fischer <git@dominicfischer.me>
This commit is contained in:
Dominic Fischer 2024-09-27 09:02:35 +01:00 committed by GitHub
parent 00d892b214
commit 66f6737697
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 17 additions and 7 deletions

View File

@ -11,7 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
- Introduce traits for the DMA buffer objects (#1976)
- Introduce traits for the DMA buffer objects (#1976, #2213)
- Implement `embedded-hal` output pin traits for `NoPin` (#2019, #2133)
- Added `esp_hal::init` to simplify HAL initialisation (#1970, #1999)
- Added GpioPin::degrade to create ErasePins easily. Same for AnyPin by accident. (#2075)

View File

@ -1962,7 +1962,12 @@ pub struct Preparation {
/// [DmaTxBuffer] is a DMA descriptor + memory combo that can be used for
/// transmitting data from a DMA channel to a peripheral's FIFO.
pub trait DmaTxBuffer {
///
/// # Safety
///
/// The implementing type must keep all its descriptors and the buffers they
/// point to valid while the buffer is being transferred.
pub unsafe trait DmaTxBuffer {
/// Prepares the buffer for an imminent transfer and returns
/// information required to use this buffer.
///
@ -1983,7 +1988,12 @@ pub trait DmaTxBuffer {
/// Note: Implementations of this trait may only support having a single EOF bit
/// which resides in the last descriptor. There will be a separate trait in
/// future to support multiple EOFs.
pub trait DmaRxBuffer {
///
/// # Safety
///
/// The implementing type must keep all its descriptors and the buffers they
/// point to valid while the buffer is being transferred.
pub unsafe trait DmaRxBuffer {
/// Prepares the buffer for an imminent transfer and returns
/// information required to use this buffer.
///
@ -2224,7 +2234,7 @@ impl DmaTxBuf {
}
}
impl DmaTxBuffer for DmaTxBuf {
unsafe impl DmaTxBuffer for DmaTxBuf {
fn prepare(&mut self) -> Preparation {
for desc in self.descriptors.iter_mut() {
// Give ownership to the DMA
@ -2463,7 +2473,7 @@ impl DmaRxBuf {
}
}
impl DmaRxBuffer for DmaRxBuf {
unsafe impl DmaRxBuffer for DmaRxBuf {
fn prepare(&mut self) -> Preparation {
for desc in self.descriptors.iter_mut() {
// Give ownership to the DMA
@ -2664,7 +2674,7 @@ impl DmaRxTxBuf {
}
}
impl DmaTxBuffer for DmaRxTxBuf {
unsafe impl DmaTxBuffer for DmaRxTxBuf {
fn prepare(&mut self) -> Preparation {
for desc in self.tx_descriptors.iter_mut() {
// Give ownership to the DMA
@ -2686,7 +2696,7 @@ impl DmaTxBuffer for DmaRxTxBuf {
}
}
impl DmaRxBuffer for DmaRxTxBuf {
unsafe impl DmaRxBuffer for DmaRxTxBuf {
fn prepare(&mut self) -> Preparation {
for desc in self.rx_descriptors.iter_mut() {
// Give ownership to the DMA