assign_resources

Macro assign_resources 

Source
macro_rules! assign_resources {
    {
        $(#[$struct_meta:meta])*
        $vis:vis $struct_name:ident<$struct_lt:lifetime> {
            $(
                $(#[$group_meta:meta])*
                $group_name:ident : $group_struct:ident<$group_lt:lifetime> {
                    $(
                        $(#[$resource_meta:meta])*
                        $resource_name:ident : $resource_field:ident
                    ),*
                    $(,)?
                }
            ),+
            $(,)?
        }
    } => { ... };
}
Available on crate feature unstable only.
Expand description

Extract fields from Peripherals into named groups.

ยงExample

use esp_hal::assign_resources;

assign_resources! {
    Resources<'d> {
        display: DisplayResources<'d> {
            spi:  SPI2,
            sda:  GPIO5,
            sclk: GPIO4,
            cs:   GPIO3,
            dc:   GPIO2,
        },
        axl: AccelerometerResources<'d> {
            i2c: I2C0,
            sda: GPIO0,
            scl: GPIO1,
        },
    }
}

fn init_display<'d>(r: DisplayResources<'d>) -> Display<'d> {
    // use `r.spi`, `r.sda`, `r.sclk`, `r.cs`, `r.dc`
    todo!()
}

fn init_accelerometer<'d>(r: AccelerometerResources<'d>) -> Accelerometer<'d> {
    // use `r.i2c`, `r.sda`, `r.scl`
    todo!()
}

// let peripherals = esp_hal::init(...);
let resources = split_resources!(peripherals);

let display = init_display(resources.display);
let axl = init_accelerometer(resources.axl);

// Other fields (`peripherals.UART0`, ...) of the `peripherals` struct can still be accessed.