#![no_std]
pub use blinksy;
pub use blinksy_esp;
pub use blinksy_esp::time::elapsed;
pub use esp_hal as hal;
pub use hal::main;
#[cfg(feature = "embassy")]
pub use esp_rtos as rtos;
#[cfg(feature = "embassy")]
pub use rtos::main as main_embassy;
#[cfg(feature = "alloc")]
pub use esp_alloc as alloc;
pub use esp_bootloader_esp_idf as bootloader;
#[cfg(feature = "backtrace")]
pub use esp_backtrace as backtrace;
#[cfg(any(feature = "println", feature = "defmt"))]
pub use esp_println as println;
pub mod button;
#[cfg(feature = "alloc")]
#[macro_export]
macro_rules! heap_allocator {
() => {
$crate::alloc::heap_allocator!(size: 72 * 1024);
};
}
#[macro_export]
macro_rules! bootloader {
() => {
$crate::bootloader::esp_app_desc!();
};
}
#[macro_export]
macro_rules! board {
() => {{
let cpu_clock = $crate::hal::clock::CpuClock::max();
let config = $crate::hal::Config::default().with_cpu_clock(cpu_clock);
$crate::hal::init(config)
}};
}
#[macro_export]
macro_rules! function_button {
($peripherals:ident) => {
$crate::button::FunctionButton::new($peripherals.GPIO0)
};
}
#[cfg(feature = "embassy")]
#[macro_export]
macro_rules! init_embassy {
($peripherals:ident) => {{
let timg0 = $crate::hal::timer::timg::TimerGroup::new($peripherals.TIMG0);
$crate::rtos::start(timg0.timer0);
}};
}
#[macro_export]
macro_rules! spi {
($peripherals:ident) => {{
let clock_pin = $peripherals.GPIO16;
let data_pin = $peripherals.GPIO2;
let data_rate = $crate::hal::time::Rate::from_mhz(4);
$crate::hal::spi::master::Spi::new(
$peripherals.SPI2,
$crate::hal::spi::master::Config::default()
.with_frequency(data_rate)
.with_mode($crate::hal::spi::Mode::_0),
)
.expect("Failed to setup SPI")
.with_sck(clock_pin)
.with_mosi(data_pin)
}};
}
#[macro_export]
macro_rules! clocked {
($peripherals:ident, $led:ty) => {{
let spi = $crate::spi!($peripherals);
$crate::blinksy::driver::ClockedDriver::default()
.with_led::<$led>()
.with_writer(spi)
}};
}
#[macro_export]
macro_rules! apa102 {
($peripherals:ident) => {{
$crate::clocked!($peripherals, $crate::blinksy::leds::Apa102)
}};
}
#[cfg(feature = "async")]
#[macro_export]
macro_rules! clocked_async {
($peripherals:ident, $led:ty) => {{
let spi = $crate::spi!($peripherals).into_async();
$crate::blinksy::driver::ClockedDriver::default()
.with_led::<$led>()
.with_writer(spi)
}};
}
#[cfg(feature = "async")]
#[macro_export]
macro_rules! apa102_async {
($peripherals:ident) => {{
$crate::clocked_async!($peripherals, $crate::blinksy::leds::Apa102)
}};
}
#[macro_export]
macro_rules! rmt {
($peripherals:ident) => {{
let freq = $crate::hal::time::Rate::from_mhz(80);
$crate::hal::rmt::Rmt::new($peripherals.RMT, freq).unwrap()
}};
}
#[macro_export]
macro_rules! clockless {
($peripherals:ident, $pixel_count:expr, $led:ty) => {{
$crate::clockless!($peripherals, $pixel_count, $led, {
$crate::blinksy_esp::rmt::rmt_buffer_size::<$led>($pixel_count)
})
}};
($peripherals:ident, $pixel_count:expr, $led:ty, $rmt_buffer_size:expr) => {{
let led_pin = $peripherals.GPIO16;
let rmt = $crate::rmt!($peripherals);
$crate::blinksy::driver::ClocklessDriver::default()
.with_led::<$led>()
.with_writer(
$crate::blinksy_esp::ClocklessRmtBuilder::default()
.with_rmt_buffer_size::<$rmt_buffer_size>()
.with_led::<$led>()
.with_channel(rmt.channel0)
.with_pin(led_pin)
.build(),
)
}};
}
#[macro_export]
macro_rules! ws2812 {
($peripherals:ident, $pixel_count:expr) => {{
$crate::clockless!($peripherals, $pixel_count, $crate::blinksy::leds::Ws2812)
}};
($peripherals:ident, $pixel_count:expr, $rmt_buffer_size:expr) => {{
$crate::clockless!(
$peripherals,
$pixel_count,
$crate::blinksy::leds::Ws2812,
$rmt_buffer_size
)
}};
}
#[cfg(feature = "async")]
#[macro_export]
macro_rules! clockless_async {
($peripherals:ident, $pixel_count:expr, $led:ty) => {{
$crate::clockless_async!($peripherals, $pixel_count, $led, {
$crate::blinksy_esp::rmt::rmt_buffer_size::<$led>($pixel_count)
})
}};
($peripherals:ident, $pixel_count:expr, $led:ty, $rmt_buffer_size:expr) => {{
let led_pin = $peripherals.GPIO16;
let rmt = $crate::rmt!($peripherals).into_async();
$crate::blinksy::driver::ClocklessDriver::default()
.with_led::<$led>()
.with_writer(
$crate::blinksy_esp::ClocklessRmtBuilder::default()
.with_rmt_buffer_size::<$rmt_buffer_size>()
.with_led::<$led>()
.with_channel(rmt.channel0)
.with_pin(led_pin)
.build(),
)
}};
}
#[cfg(feature = "async")]
#[macro_export]
macro_rules! ws2812_async {
($peripherals:ident, $pixel_count:expr) => {{
$crate::clockless_async!($peripherals, $pixel_count, $crate::blinksy::leds::Ws2812)
}};
($peripherals:ident, $pixel_count:expr, $rmt_buffer_size:expr) => {{
$crate::clockless_async!(
$peripherals,
$pixel_count,
$crate::blinksy::leds::Ws2812,
$rmt_buffer_size
)
}};
}