blob: e0b42c9cf162b5316d48229f6f472fda42f5af1f [file] [log] [blame]
#![no_std]
use futures::future;
use libtock::led::Led;
use libtock::result::TockResult;
use libtock::timer::Duration;
use libtock::timer::ParallelSleepDriver;
use libtock::Hardware;
async fn blink<'a>(
timer_driver: &'a ParallelSleepDriver<'a>,
duration: Duration<usize>,
led: &'a mut Led<'a>,
) -> TockResult<()> {
loop {
led.toggle()?;
timer_driver.sleep(duration).await?;
}
}
#[libtock::main]
async fn main() -> TockResult<()> {
let Hardware {
mut led_driver,
timer_context,
..
} = libtock::retrieve_hardware()?;
let mut led_iter = led_driver.all();
let mut led_1 = led_iter.next().unwrap();
let mut led_2 = led_iter.next().unwrap();
let mut led_3 = led_iter.next().unwrap();
let mut driver = timer_context.create_timer_driver();
let timer_driver = driver.activate()?;
let fut_1 = blink(&timer_driver, Duration::from_ms(500), &mut led_1);
let fut_2 = blink(&timer_driver, Duration::from_ms(333), &mut led_2);
let fut_3 = blink(&timer_driver, Duration::from_ms(250), &mut led_3);
future::try_join3(fut_1, fut_2, fut_3).await?;
Ok(())
}