Trait Peripheral

Source
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§

Source

type P

Peripheral singleton type

Required Methods§

Source

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§

Source

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>.

Source

fn map_into<U>(self) -> U
where 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.

Source

fn map<U>(self, transform: impl FnOnce(Self::P) -> U) -> U
where 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 Level

Source§

impl Peripheral for AnyGdmaChannel

Available on crate feature unstable only.
Source§

impl Peripheral for AnyGdmaRxChannel

Available on crate feature unstable only.
Source§

impl Peripheral for AnyGdmaTxChannel

Available on crate feature unstable only.
Source§

impl Peripheral for DmaChannel0

Available on crate feature unstable only.
Source§

impl Peripheral for DmaChannel1

Available on crate feature unstable only.
Source§

impl Peripheral for DmaChannel2

Available on crate feature unstable only.
Source§

impl Peripheral for InputConnection

Available on crate feature unstable only.
Source§

impl Peripheral for InputSignal

Available on crate feature unstable only.
Source§

impl Peripheral for OutputConnection

Available on crate feature unstable only.
Source§

impl Peripheral for OutputSignal

Available on crate feature unstable only.
Source§

impl Peripheral for AnyPin

Source§

impl Peripheral for Flex<'_>

Source§

type P = Flex<'_>

Source§

impl Peripheral for NoPin

Source§

impl Peripheral for AnyI2c

Source§

impl Peripheral for AnyI2s

Available on crate feature unstable only.
Source§

impl Peripheral for ADC1

Source§

impl Peripheral for AES

Source§

type P = AES

Source§

impl Peripheral for APB_SARADC

Source§

impl Peripheral for ASSIST_DEBUG

Source§

impl Peripheral for ATOMIC

Source§

impl Peripheral for BT

Source§

type P = BT

Source§

impl Peripheral for DMA

Source§

type P = DMA

Source§

impl Peripheral for DS

Source§

type P = DS

Source§

impl Peripheral for ECC

Source§

type P = ECC

Source§

impl Peripheral for EFUSE

Source§

impl Peripheral for EXTMEM

Source§

impl Peripheral for GPIO

Source§

impl Peripheral for GPIO_SD

Source§

impl Peripheral for HINF

Source§

impl Peripheral for HMAC

Source§

impl Peripheral for HP_APM

Source§

impl Peripheral for HP_SYS

Source§

impl Peripheral for I2C0

Source§

impl Peripheral for I2C_ANA_MST

Source§

impl Peripheral for I2S0

Source§

impl Peripheral for IEEE802154

Source§

impl Peripheral for INTERRUPT_CORE0

Source§

impl Peripheral for INTPRI

Source§

impl Peripheral for IO_MUX

Source§

impl Peripheral for LEDC

Source§

impl Peripheral for LPWR

Source§

impl Peripheral for LP_ANA

Source§

impl Peripheral for LP_AON

Source§

impl Peripheral for LP_APM0

Source§

impl Peripheral for LP_APM

Source§

impl Peripheral for LP_CORE

Source§

impl Peripheral for LP_I2C0

Source§

impl Peripheral for LP_I2C_ANA_MST

Source§

impl Peripheral for LP_IO

Source§

impl Peripheral for LP_PERI

Source§

impl Peripheral for LP_TEE

Source§

impl Peripheral for LP_TIMER

Source§

impl Peripheral for LP_UART

Source§

impl Peripheral for LP_WDT

Source§

impl Peripheral for MCPWM0

Source§

impl Peripheral for MEM2MEM1

Source§

impl Peripheral for MEM2MEM4

Source§

impl Peripheral for MEM2MEM5

Source§

impl Peripheral for MEM2MEM10

Source§

impl Peripheral for MEM2MEM11

Source§

impl Peripheral for MEM2MEM12

Source§

impl Peripheral for MEM2MEM13

Source§

impl Peripheral for MEM2MEM14

Source§

impl Peripheral for MEM2MEM15

Source§

impl Peripheral for MEM_MONITOR

Source§

impl Peripheral for MODEM_LPCON

Source§

impl Peripheral for MODEM_SYSCON

Source§

impl Peripheral for OTP_DEBUG

Source§

impl Peripheral for PARL_IO

Source§

impl Peripheral for PAU

Source§

type P = PAU

Source§

impl Peripheral for PCNT

Source§

impl Peripheral for PCR

Source§

type P = PCR

Source§

impl Peripheral for PLIC_MX

Source§

impl Peripheral for PMU

Source§

type P = PMU

Source§

impl Peripheral for RADIO_CLK

Source§

impl Peripheral for RMT

Source§

type P = RMT

Source§

impl Peripheral for RNG

Source§

type P = RNG

Source§

impl Peripheral for RSA

Source§

type P = RSA

Source§

impl Peripheral for SHA

Source§

type P = SHA

Source§

impl Peripheral for SLCHOST

Source§

impl Peripheral for SOC_ETM

Source§

impl Peripheral for SPI0

Source§

impl Peripheral for SPI1

Source§

impl Peripheral for SPI2

Source§

impl Peripheral for SW_INTERRUPT

Source§

impl Peripheral for SYSTEM

Source§

impl Peripheral for SYSTIMER

Source§

impl Peripheral for TEE

Source§

type P = TEE

Source§

impl Peripheral for TIMG0

Source§

impl Peripheral for TIMG1

Source§

impl Peripheral for TRACE0

Source§

impl Peripheral for TSENS

Source§

impl Peripheral for TWAI0

Source§

impl Peripheral for TWAI1

Source§

impl Peripheral for UART0

Source§

impl Peripheral for UART1

Source§

impl Peripheral for UHCI0

Source§

impl Peripheral for USB_DEVICE

Source§

impl Peripheral for WIFI

Source§

impl Peripheral for Rng

Available on crate feature unstable only.
Source§

type P = Rng

Source§

impl Peripheral for Trng<'_>

Available on crate feature unstable only.
Source§

type P = Trng<'_>

Source§

impl Peripheral for AnySpi

Source§

impl Peripheral for AnyTimer

Available on crate feature unstable only.
Source§

impl Peripheral for Alarm

Available on crate feature unstable only.
Source§

impl Peripheral for Timer

Available on crate feature unstable only.
Source§

impl Peripheral for AnyTwai

Available on crate feature unstable only.
Source§

impl Peripheral for AnyUart

Source§

impl<'d> Peripheral for Input<'d>

Source§

type P = Flex<'d>

Source§

impl<'d> Peripheral for Output<'d>

Source§

type P = Flex<'d>

Source§

impl<T: Peripheral> Peripheral for PeripheralRef<'_, T>

Source§

type P = <T as Peripheral>::P

Source§

impl<T: DerefMut> Peripheral for T
where T::Target: Peripheral,

Source§

type P = <<T as Deref>::Target as Peripheral>::P

Source§

impl<const GPIONUM: u8> Peripheral for GpioPin<GPIONUM>
where Self: Pin,

Source§

type P = GpioPin<GPIONUM>

Source§

impl<const NUM: u8> Peripheral for SoftwareInterrupt<NUM>

Available on crate feature unstable only.