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 ### 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) - Implement `embedded-hal` output pin traits for `NoPin` (#2019, #2133)
- Added `esp_hal::init` to simplify HAL initialisation (#1970, #1999) - Added `esp_hal::init` to simplify HAL initialisation (#1970, #1999)
- Added GpioPin::degrade to create ErasePins easily. Same for AnyPin by accident. (#2075) - 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 /// [DmaTxBuffer] is a DMA descriptor + memory combo that can be used for
/// transmitting data from a DMA channel to a peripheral's FIFO. /// 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 /// Prepares the buffer for an imminent transfer and returns
/// information required to use this buffer. /// 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 /// 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 /// which resides in the last descriptor. There will be a separate trait in
/// future to support multiple EOFs. /// 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 /// Prepares the buffer for an imminent transfer and returns
/// information required to use this buffer. /// 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 { fn prepare(&mut self) -> Preparation {
for desc in self.descriptors.iter_mut() { for desc in self.descriptors.iter_mut() {
// Give ownership to the DMA // 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 { fn prepare(&mut self) -> Preparation {
for desc in self.descriptors.iter_mut() { for desc in self.descriptors.iter_mut() {
// Give ownership to the DMA // 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 { fn prepare(&mut self) -> Preparation {
for desc in self.tx_descriptors.iter_mut() { for desc in self.tx_descriptors.iter_mut() {
// Give ownership to the DMA // 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 { fn prepare(&mut self) -> Preparation {
for desc in self.rx_descriptors.iter_mut() { for desc in self.rx_descriptors.iter_mut() {
// Give ownership to the DMA // Give ownership to the DMA