| #![no_std] | 
 |  | 
 | use core::fmt::Write; | 
 | use libtock::adc::AdcBuffer; | 
 | use libtock::result::TockResult; | 
 | use libtock::syscalls; | 
 |  | 
 | #[libtock::main] | 
 | /// Reads a 128 byte sample into a buffer and prints the first value to the console. | 
 | async fn main() -> TockResult<()> { | 
 |     let mut drivers = libtock::retrieve_drivers()?; | 
 |  | 
 |     let adc_driver = drivers.adc.init_driver()?; | 
 |     let mut console = drivers.console.create_console(); | 
 |  | 
 |     let mut adc_buffer = AdcBuffer::default(); | 
 |     let mut temp_buffer = [0; libtock::adc::BUFFER_SIZE]; | 
 |  | 
 |     let adc_buffer = adc_driver.init_buffer(&mut adc_buffer)?; | 
 |  | 
 |     let mut callback = |_, _| { | 
 |         adc_buffer.read_bytes(&mut temp_buffer[..]); | 
 |         writeln!(console, "First sample in buffer: {}", temp_buffer[0]).unwrap(); | 
 |     }; | 
 |  | 
 |     let _subscription = adc_driver.subscribe(&mut callback)?; | 
 |  | 
 |     loop { | 
 |         adc_driver.sample_continuous_buffered(0, 128)?; | 
 |         unsafe { syscalls::raw::yieldk() }; | 
 |     } | 
 | } |