diff --git a/apis/peripherals/adc/src/lib.rs b/apis/peripherals/adc/src/lib.rs index c7406574..1229dfb0 100644 --- a/apis/peripherals/adc/src/lib.rs +++ b/apis/peripherals/adc/src/lib.rs @@ -23,8 +23,10 @@ impl Adc { .and(Ok(())) } //Returns the number of channels - pub fn get_number_of_channels() -> Result { - S::command(DRIVER_NUM, EXISTS, 0, 0).to_result::() + pub fn get_number_of_channels() -> Result { + S::command(DRIVER_NUM, EXISTS, 0, 0) + .to_result::() + .and_then(|number_channels| number_channels.try_into().map_err(|_| ErrorCode::Fail)) } // Initiate a sample reading diff --git a/apis/peripherals/adc/src/tests.rs b/apis/peripherals/adc/src/tests.rs index d27ebc2a..80026c92 100644 --- a/apis/peripherals/adc/src/tests.rs +++ b/apis/peripherals/adc/src/tests.rs @@ -25,11 +25,13 @@ fn read_single_sample() { let driver = fake::Adc::new(); kernel.add_driver(&driver); - assert_eq!(Adc::read_single_sample(), Ok(())); + let ch = Adc::get_number_of_channels().unwrap(); + + assert_eq!(Adc::read_single_sample(ch), Ok(())); assert!(driver.is_busy()); - assert_eq!(Adc::read_single_sample(), Err(ErrorCode::Busy)); - assert_eq!(Adc::read_single_sample_sync(), Err(ErrorCode::Busy)); + assert_eq!(Adc::read_single_sample(ch), Err(ErrorCode::Busy)); + assert_eq!(Adc::read_single_sample_sync(ch), Err(ErrorCode::Busy)); } #[test] @@ -43,18 +45,20 @@ fn register_unregister_listener() { sample.set(Some(adc_val)); }); share::scope(|subscribe| { - assert_eq!(Adc::read_single_sample(), Ok(())); + let ch = Adc::get_number_of_channels().unwrap(); + + assert_eq!(Adc::read_single_sample(ch), Ok(())); driver.set_value(100); assert_eq!(fake::Syscalls::yield_no_wait(), YieldNoWaitReturn::NoUpcall); assert_eq!(Adc::register_listener(&listener, subscribe), Ok(())); - assert_eq!(Adc::read_single_sample(), Ok(())); + assert_eq!(Adc::read_single_sample(ch), Ok(())); driver.set_value(100); assert_eq!(fake::Syscalls::yield_no_wait(), YieldNoWaitReturn::Upcall); assert_eq!(sample.get(), Some(100)); Adc::unregister_listener(); - assert_eq!(Adc::read_single_sample(), Ok(())); + assert_eq!(Adc::read_single_sample(ch), Ok(())); driver.set_value(100); assert_eq!(fake::Syscalls::yield_no_wait(), YieldNoWaitReturn::NoUpcall); }); @@ -66,6 +70,8 @@ fn read_single_sample_sync() { let driver = fake::Adc::new(); kernel.add_driver(&driver); + let ch = Adc::get_number_of_channels().unwrap(); + driver.set_value_sync(1000); - assert_eq!(Adc::read_single_sample_sync(), Ok(1000)); + assert_eq!(Adc::read_single_sample_sync(ch), Ok(1000)); }