pub trait Peripheral: Sized {
    type P;
    // Required method
    unsafe fn clone_unchecked(&self) -> Self::P;
    // Provided methods
    fn into_ref<'a>(self) -> PeripheralRef<'a, Self::P>
       where Self: 'a { ... }
    fn map_into<U>(self) -> U
       where Self::P: Into<U>,
             U: Peripheral<P = U> { ... }
    fn map<U>(self, transform: impl FnOnce(Self::P) -> U) -> U
       where U: Peripheral<P = U> { ... }
}Expand description
Trait for any type that can be used as a peripheral of type P.
This is used in driver constructors, to allow passing either owned
peripherals (e.g. UART0), or borrowed peripherals (e.g. &mut UART0).
For example, if you have a driver with a constructor like this:
impl<'d, T> Uart<'d, T, Blocking> {
    pub fn new<TX: PeripheralOutput, RX: PeripheralInput>(
        uart: impl Peripheral<P = T> + 'd,
        rx: impl Peripheral<P = RX> + 'd,
        tx: impl Peripheral<P = TX> + 'd,
    ) -> Result<Self, Error> {
        Ok(Self { .. })
    }
}You may call it with owned peripherals, which yields an instance that can
live forever ('static):
let mut uart: Uart<'static, ...> = Uart::new(p.UART0, p.GPIO0, p.GPIO1);Or you may call it with borrowed peripherals, which yields an instance that can only live for as long as the borrows last:
let mut uart: Uart<'_, ...> = Uart::new(&mut p.UART0, &mut p.GPIO0, &mut p.GPIO1);§Implementation details, for HAL authors
When writing a HAL, the intended way to use this trait is to take impl Peripheral<P = ..> in the HAL’s public API (such as driver constructors),
calling .into_ref() to obtain a PeripheralRef, and storing that in the
driver struct.
.into_ref() on an owned T yields a PeripheralRef<'static, T>.
.into_ref() on an &'a mut T yields a PeripheralRef<'a, T>.
Required Associated Types§
Required Methods§
Sourceunsafe fn clone_unchecked(&self) -> Self::P
 
unsafe fn clone_unchecked(&self) -> Self::P
Unsafely clone (duplicate) a peripheral singleton.
§Safety
This returns an owned clone of the peripheral. You must manually ensure
only one copy of the peripheral is in use at a time. For example, don’t
create two SPI drivers on SPI1, because they will “fight” each other.
You should strongly prefer using into_ref() instead. It returns a
PeripheralRef, which allows the borrow checker to enforce this at
compile time.
Provided Methods§
Sourcefn into_ref<'a>(self) -> PeripheralRef<'a, Self::P>where
    Self: 'a,
 
fn into_ref<'a>(self) -> PeripheralRef<'a, Self::P>where
    Self: 'a,
Convert a value into a PeripheralRef.
When called on an owned T, yields a PeripheralRef<'static, T>.
When called on an &'a mut T, yields a PeripheralRef<'a, T>.
Sourcefn map_into<U>(self) -> Uwhere
    Self::P: Into<U>,
    U: Peripheral<P = U>,
 
fn map_into<U>(self) -> Uwhere
    Self::P: Into<U>,
    U: Peripheral<P = U>,
Map the peripheral using Into.
This converts from Peripheral<P = T> to Peripheral<P = U>,
using an Into impl to convert from T to U.
Sourcefn map<U>(self, transform: impl FnOnce(Self::P) -> U) -> Uwhere
    U: Peripheral<P = U>,
 
fn map<U>(self, transform: impl FnOnce(Self::P) -> U) -> Uwhere
    U: Peripheral<P = U>,
Map the peripheral using Into.
This converts from Peripheral<P = T> to Peripheral<P = U>,
using an Into impl to convert from T to U.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementors§
Source§impl Peripheral for AnyI2sDmaChannel
Available on crate feature unstable only. 
impl Peripheral for AnyI2sDmaChannel
unstable only.type P = AnyI2sDmaChannel
Source§impl Peripheral for AnyI2sDmaRxChannel
Available on crate feature unstable only. 
impl Peripheral for AnyI2sDmaRxChannel
unstable only.type P = AnyI2sDmaRxChannel
Source§impl Peripheral for AnyI2sDmaTxChannel
Available on crate feature unstable only. 
impl Peripheral for AnyI2sDmaTxChannel
unstable only.type P = AnyI2sDmaTxChannel
Source§impl Peripheral for AnySpiDmaChannel
Available on crate feature unstable only. 
impl Peripheral for AnySpiDmaChannel
unstable only.type P = AnySpiDmaChannel
Source§impl Peripheral for AnySpiDmaRxChannel
Available on crate feature unstable only. 
impl Peripheral for AnySpiDmaRxChannel
unstable only.type P = AnySpiDmaRxChannel
Source§impl Peripheral for AnySpiDmaTxChannel
Available on crate feature unstable only. 
impl Peripheral for AnySpiDmaTxChannel
unstable only.type P = AnySpiDmaTxChannel
Source§impl Peripheral for I2s0DmaChannel
Available on crate feature unstable only. 
impl Peripheral for I2s0DmaChannel
unstable only.type P = I2s0DmaChannel
Source§impl Peripheral for I2s1DmaChannel
Available on crate feature unstable only. 
impl Peripheral for I2s1DmaChannel
unstable only.type P = I2s1DmaChannel
Source§impl Peripheral for Spi2DmaChannel
Available on crate feature unstable only. 
impl Peripheral for Spi2DmaChannel
unstable only.type P = Spi2DmaChannel
Source§impl Peripheral for Spi3DmaChannel
Available on crate feature unstable only. 
impl Peripheral for Spi3DmaChannel
unstable only.type P = Spi3DmaChannel
Source§impl Peripheral for InputConnection
Available on crate feature unstable only. 
impl Peripheral for InputConnection
unstable only.type P = InputConnection
Source§impl Peripheral for InputSignal
Available on crate feature unstable only. 
impl Peripheral for InputSignal
unstable only.type P = InputSignal
Source§impl Peripheral for OutputConnection
Available on crate feature unstable only. 
impl Peripheral for OutputConnection
unstable only.type P = OutputConnection
Source§impl Peripheral for OutputSignal
Available on crate feature unstable only. 
impl Peripheral for OutputSignal
unstable only.type P = OutputSignal
Source§impl Peripheral for esp_hal::i2s::master::AnyI2s
Available on crate feature unstable only. 
impl Peripheral for esp_hal::i2s::master::AnyI2s
unstable only.Source§impl Peripheral for esp_hal::i2s::parallel::AnyI2s
Available on crate feature unstable only. 
impl Peripheral for esp_hal::i2s::parallel::AnyI2s
unstable only.Source§impl Peripheral for FLASH_ENCRYPTION
 
impl Peripheral for FLASH_ENCRYPTION
type P = FLASH_ENCRYPTION
Source§impl Peripheral for SW_INTERRUPT
 
impl Peripheral for SW_INTERRUPT
type P = SW_INTERRUPT
Source§impl Peripheral for Trng<'_>
Available on crate feature unstable only. 
impl Peripheral for Trng<'_>
unstable only.Source§impl Peripheral for AnyTimer
Available on crate feature unstable only. 
impl Peripheral for AnyTimer
unstable only.Source§impl<T: Peripheral> Peripheral for PeripheralRef<'_, T>
 
impl<T: Peripheral> Peripheral for PeripheralRef<'_, T>
type P = <T as Peripheral>::P
Source§impl<T: DerefMut> Peripheral for Twhere
    T::Target: Peripheral,
 
impl<T: DerefMut> Peripheral for Twhere
    T::Target: Peripheral,
type P = <<T as Deref>::Target as Peripheral>::P
Source§impl<const GPIONUM: u8> Peripheral for GpioPin<GPIONUM>where
    Self: Pin,
 
impl<const GPIONUM: u8> Peripheral for GpioPin<GPIONUM>where
    Self: Pin,
Source§impl<const NUM: u8> Peripheral for SoftwareInterrupt<NUM>
Available on crate feature unstable only. 
impl<const NUM: u8> Peripheral for SoftwareInterrupt<NUM>
unstable only.