#![no_main]
#![no_std]

use embedded_hal::digital::{self, StatefulOutputPin};
use embedded_hal::delay::DelayNs;
use nrf52840_hal as hal;
use nrf52840_hal::gpio::Level;
use rtt_target::{rprintln, rtt_init_print};

/// Blinks an LED with a delay.
fn blink_led<E: digital::Error>(
    delay: &mut impl DelayNs,
    led: &mut impl StatefulOutputPin<Error = E>,
)
        -> ! {
    loop {
        led.toggle().expect("Failed to toggle LED");
        delay.delay_ms(500u32);
    }
}

#[cortex_m_rt::entry]
fn main() -> ! {
    rtt_init_print!();
    let p = hal::pac::Peripherals::take().unwrap();
    let port0 = hal::gpio::p0::Parts::new(p.P0);
    let mut led =
      port0.p0_13.into_push_pull_output(Level::Low);

    let mut timer = hal::Timer::new(p.TIMER0);

    rprintln!("Delay example starting");
    blink_led(&mut timer, &mut led);
}
