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.