blob: c19e5833511c112eb18c8c8eb07b2a41de3e73d6 [file] [log] [blame]
#![no_std]
use futures::future;
use libtock::led;
use libtock::result::TockResult;
use libtock::timer;
use libtock::timer::Duration;
use libtock::timer::ParallelSleepDriver;
async fn blink<'a>(
timer_driver: &'a ParallelSleepDriver<'a>,
duration: Duration<usize>,
led_number: usize,
) -> TockResult<()> {
loop {
led::get(led_number).unwrap().toggle()?;
timer_driver.sleep(duration).await?;
}
}
#[libtock::main]
async fn main() -> TockResult<()> {
let context = timer::DriverContext::create()?;
let mut driver = context.create_timer_driver()?;
let timer_driver = driver.activate()?;
let fut_1 = blink(&timer_driver, Duration::from_ms(500), 0);
let fut_2 = blink(&timer_driver, Duration::from_ms(333), 1);
let fut_3 = blink(&timer_driver, Duration::from_ms(250), 2);
future::try_join3(fut_1, fut_2, fut_3).await?;
Ok(())
}