From 424f6ffadbcb7c1f7df995ab98bcafebc941afc2 Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Thu, 21 Jul 2022 16:42:46 +0200 Subject: [PATCH] nrf/saadc: add type-erased AnyInput. --- embassy-nrf/src/saadc.rs | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/embassy-nrf/src/saadc.rs b/embassy-nrf/src/saadc.rs index 7d39e33f..af1aa881 100644 --- a/embassy-nrf/src/saadc.rs +++ b/embassy-nrf/src/saadc.rs @@ -119,6 +119,25 @@ impl sealed::Input for VddhDiv5Input { #[cfg(any(feature = "_nrf5340-app", feature = "nrf52833", feature = "nrf52840"))] impl Input for VddhDiv5Input {} +pub struct AnyInput { + channel: InputChannel, +} + +unsafe impl Unborrow for AnyInput { + type Target = AnyInput; + unsafe fn unborrow(self) -> Self::Target { + self + } +} + +impl sealed::Input for AnyInput { + fn channel(&self) -> InputChannel { + self.channel + } +} + +impl Input for AnyInput {} + impl<'d> ChannelConfig<'d> { /// Default configuration for single ended channel sampling. pub fn single_ended(input: impl Unborrow + 'd) -> Self { @@ -670,7 +689,13 @@ pub(crate) mod sealed { } /// An input that can be used as either or negative end of a ADC differential in the SAADC periperhal. -pub trait Input: sealed::Input + Unborrow {} +pub trait Input: sealed::Input + Unborrow + Sized { + fn degrade_saadc(self) -> AnyInput { + AnyInput { + channel: self.channel(), + } + } +} macro_rules! impl_saadc_input { ($pin:ident, $ch:ident) => {