#![no_std]

use core::fmt::Write;
use libtock::adc;
use libtock::adc::AdcBuffer;
use libtock::result::TockResult;
use libtock::syscalls;
use libtock::Hardware;

#[libtock::main]
/// Reads a 128 byte sample into a buffer and prints the first value to the console.
async fn main() -> TockResult<()> {
    let Hardware { console_driver, .. } = libtock::retrieve_hardware()?;
    let mut console = console_driver.create_console();
    let mut adc_buffer = AdcBuffer::default();
    let mut temp_buffer = [0; libtock::adc::BUFFER_SIZE];

    let adc_buffer = libtock::adc::Adc::init_buffer(&mut adc_buffer)?;

    let mut with_callback = adc::with_callback(|_, _| {
        adc_buffer.read_bytes(&mut temp_buffer[..]);
        writeln!(console, "First sample in buffer: {}", temp_buffer[0]).unwrap();
    });

    let adc = with_callback.init()?;

    loop {
        adc.sample_continuous_buffered(0, 128)?;
        unsafe { syscalls::raw::yieldk() };
    }
}
