diff options
| author | Univa <[email protected]> | 2024-05-21 19:03:14 -0400 |
|---|---|---|
| committer | Univa <[email protected]> | 2024-05-21 19:03:14 -0400 |
| commit | ddbb6c8c31a558b82f8e2a13ddb364e371ec5776 (patch) | |
| tree | dbec68c5624af513ee3670b43363501ca22b8d91 | |
| parent | 7cdbae2a5d5693a63ce55c08f39a69f2b4f0689c (diff) | |
add back InternalChannel and implement it where its missing
| -rw-r--r-- | embassy-stm32/src/adc/f1.rs | 6 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/f3.rs | 6 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/f3_v1_1.rs | 6 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/g4.rs | 8 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/mod.rs | 5 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/v1.rs | 12 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/v2.rs | 8 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/v3.rs | 12 | ||||
| -rw-r--r-- | embassy-stm32/src/adc/v4.rs | 8 |
9 files changed, 62 insertions, 9 deletions
diff --git a/embassy-stm32/src/adc/f1.rs b/embassy-stm32/src/adc/f1.rs index 3822d5032..cc7ffdea8 100644 --- a/embassy-stm32/src/adc/f1.rs +++ b/embassy-stm32/src/adc/f1.rs | |||
| @@ -4,7 +4,7 @@ use core::task::Poll; | |||
| 4 | 4 | ||
| 5 | use embassy_hal_internal::into_ref; | 5 | use embassy_hal_internal::into_ref; |
| 6 | 6 | ||
| 7 | use super::blocking_delay_us; | 7 | use super::{blocking_delay_us, InternalChannel}; |
| 8 | use crate::adc::{Adc, AdcChannel, Instance, SampleTime}; | 8 | use crate::adc::{Adc, AdcChannel, Instance, SampleTime}; |
| 9 | use crate::time::Hertz; | 9 | use crate::time::Hertz; |
| 10 | use crate::{interrupt, Peripheral}; | 10 | use crate::{interrupt, Peripheral}; |
| @@ -32,6 +32,8 @@ impl<T: Instance> interrupt::typelevel::Handler<T::Interrupt> for InterruptHandl | |||
| 32 | } | 32 | } |
| 33 | 33 | ||
| 34 | pub struct Vref; | 34 | pub struct Vref; |
| 35 | impl<T: Instance> InternalChannel<T> for Vref {} | ||
| 36 | impl<T: Instance> super::SealedInternalChannel<T> for Vref {} | ||
| 35 | impl<T: Instance> AdcChannel<T> for Vref {} | 37 | impl<T: Instance> AdcChannel<T> for Vref {} |
| 36 | impl<T: Instance> super::SealedAdcChannel<T> for Vref { | 38 | impl<T: Instance> super::SealedAdcChannel<T> for Vref { |
| 37 | fn channel(&self) -> u8 { | 39 | fn channel(&self) -> u8 { |
| @@ -40,6 +42,8 @@ impl<T: Instance> super::SealedAdcChannel<T> for Vref { | |||
| 40 | } | 42 | } |
| 41 | 43 | ||
| 42 | pub struct Temperature; | 44 | pub struct Temperature; |
| 45 | impl<T: Instance> InternalChannel<T> for Temperature {} | ||
| 46 | impl<T: Instance> super::SealedInternalChannel<T> for Temperature {} | ||
| 43 | impl<T: Instance> AdcChannel<T> for Temperature {} | 47 | impl<T: Instance> AdcChannel<T> for Temperature {} |
| 44 | impl<T: Instance> super::SealedAdcChannel<T> for Temperature { | 48 | impl<T: Instance> super::SealedAdcChannel<T> for Temperature { |
| 45 | fn channel(&self) -> u8 { | 49 | fn channel(&self) -> u8 { |
diff --git a/embassy-stm32/src/adc/f3.rs b/embassy-stm32/src/adc/f3.rs index 3f076d64b..363ddbe3a 100644 --- a/embassy-stm32/src/adc/f3.rs +++ b/embassy-stm32/src/adc/f3.rs | |||
| @@ -4,7 +4,7 @@ use core::task::Poll; | |||
| 4 | 4 | ||
| 5 | use embassy_hal_internal::into_ref; | 5 | use embassy_hal_internal::into_ref; |
| 6 | 6 | ||
| 7 | use super::blocking_delay_us; | 7 | use super::{blocking_delay_us, InternalChannel}; |
| 8 | use crate::adc::{Adc, AdcChannel, Instance, SampleTime}; | 8 | use crate::adc::{Adc, AdcChannel, Instance, SampleTime}; |
| 9 | use crate::interrupt::typelevel::Interrupt; | 9 | use crate::interrupt::typelevel::Interrupt; |
| 10 | use crate::time::Hertz; | 10 | use crate::time::Hertz; |
| @@ -32,6 +32,8 @@ impl<T: Instance> interrupt::typelevel::Handler<T::Interrupt> for InterruptHandl | |||
| 32 | } | 32 | } |
| 33 | 33 | ||
| 34 | pub struct Vref; | 34 | pub struct Vref; |
| 35 | impl<T: Instance> InternalChannel<T> for Vref {} | ||
| 36 | impl<T: Instance> super::SealedInternalChannel<T> for Vref {} | ||
| 35 | impl<T: Instance> AdcChannel<T> for Vref {} | 37 | impl<T: Instance> AdcChannel<T> for Vref {} |
| 36 | impl<T: Instance> super::SealedAdcChannel<T> for Vref { | 38 | impl<T: Instance> super::SealedAdcChannel<T> for Vref { |
| 37 | fn channel(&self) -> u8 { | 39 | fn channel(&self) -> u8 { |
| @@ -47,6 +49,8 @@ impl Vref { | |||
| 47 | } | 49 | } |
| 48 | 50 | ||
| 49 | pub struct Temperature; | 51 | pub struct Temperature; |
| 52 | impl<T: Instance> InternalChannel<T> for Temperature {} | ||
| 53 | impl<T: Instance> super::SealedInternalChannel<T> for Temperature {} | ||
| 50 | impl<T: Instance> AdcChannel<T> for Temperature {} | 54 | impl<T: Instance> AdcChannel<T> for Temperature {} |
| 51 | impl<T: Instance> super::SealedAdcChannel<T> for Temperature { | 55 | impl<T: Instance> super::SealedAdcChannel<T> for Temperature { |
| 52 | fn channel(&self) -> u8 { | 56 | fn channel(&self) -> u8 { |
diff --git a/embassy-stm32/src/adc/f3_v1_1.rs b/embassy-stm32/src/adc/f3_v1_1.rs index 106956989..73bfe4876 100644 --- a/embassy-stm32/src/adc/f3_v1_1.rs +++ b/embassy-stm32/src/adc/f3_v1_1.rs | |||
| @@ -6,7 +6,7 @@ use embassy_futures::yield_now; | |||
| 6 | use embassy_hal_internal::into_ref; | 6 | use embassy_hal_internal::into_ref; |
| 7 | use embassy_time::Instant; | 7 | use embassy_time::Instant; |
| 8 | 8 | ||
| 9 | use super::Resolution; | 9 | use super::{InternalChannel, Resolution}; |
| 10 | use crate::adc::{Adc, AdcChannel, Instance, SampleTime}; | 10 | use crate::adc::{Adc, AdcChannel, Instance, SampleTime}; |
| 11 | use crate::interrupt::typelevel::Interrupt; | 11 | use crate::interrupt::typelevel::Interrupt; |
| 12 | use crate::time::Hertz; | 12 | use crate::time::Hertz; |
| @@ -64,6 +64,8 @@ fn update_vref<T: Instance>(op: i8) { | |||
| 64 | } | 64 | } |
| 65 | 65 | ||
| 66 | pub struct Vref<T: Instance>(core::marker::PhantomData<T>); | 66 | pub struct Vref<T: Instance>(core::marker::PhantomData<T>); |
| 67 | impl<T: Instance> InternalChannel<T> for Vref<T> {} | ||
| 68 | impl<T: Instance> super::SealedInternalChannel<T> for Vref<T> {} | ||
| 67 | impl<T: Instance> AdcChannel<T> for Vref<T> {} | 69 | impl<T: Instance> AdcChannel<T> for Vref<T> {} |
| 68 | impl<T: Instance> super::SealedAdcChannel<T> for Vref<T> { | 70 | impl<T: Instance> super::SealedAdcChannel<T> for Vref<T> { |
| 69 | fn channel(&self) -> u8 { | 71 | fn channel(&self) -> u8 { |
| @@ -123,6 +125,8 @@ impl<T: Instance> Drop for Vref<T> { | |||
| 123 | } | 125 | } |
| 124 | 126 | ||
| 125 | pub struct Temperature<T: Instance>(core::marker::PhantomData<T>); | 127 | pub struct Temperature<T: Instance>(core::marker::PhantomData<T>); |
| 128 | impl<T: Instance> InternalChannel<T> for Temperature<T> {} | ||
| 129 | impl<T: Instance> super::SealedInternalChannel<T> for Temperature<T> {} | ||
| 126 | impl<T: Instance> AdcChannel<T> for Temperature<T> {} | 130 | impl<T: Instance> AdcChannel<T> for Temperature<T> {} |
| 127 | impl<T: Instance> super::SealedAdcChannel<T> for Temperature<T> { | 131 | impl<T: Instance> super::SealedAdcChannel<T> for Temperature<T> { |
| 128 | fn channel(&self) -> u8 { | 132 | fn channel(&self) -> u8 { |
diff --git a/embassy-stm32/src/adc/g4.rs b/embassy-stm32/src/adc/g4.rs index ce7f5db70..f9751bd92 100644 --- a/embassy-stm32/src/adc/g4.rs +++ b/embassy-stm32/src/adc/g4.rs | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | use pac::adc::vals::{Adcaldif, Difsel, Exten}; | 2 | use pac::adc::vals::{Adcaldif, Difsel, Exten}; |
| 3 | use pac::adccommon::vals::Presc; | 3 | use pac::adccommon::vals::Presc; |
| 4 | 4 | ||
| 5 | use super::{blocking_delay_us, Adc, AdcChannel, Instance, Resolution, SampleTime}; | 5 | use super::{blocking_delay_us, Adc, AdcChannel, Instance, InternalChannel, Resolution, SampleTime}; |
| 6 | use crate::time::Hertz; | 6 | use crate::time::Hertz; |
| 7 | use crate::{pac, Peripheral}; | 7 | use crate::{pac, Peripheral}; |
| 8 | 8 | ||
| @@ -33,6 +33,8 @@ const VBAT_CHANNEL: u8 = 17; | |||
| 33 | // NOTE: Vrefint/Temperature/Vbat are not available on all ADCs, this currently cannot be modeled with stm32-data, so these are available from the software on all ADCs | 33 | // NOTE: Vrefint/Temperature/Vbat are not available on all ADCs, this currently cannot be modeled with stm32-data, so these are available from the software on all ADCs |
| 34 | /// Internal voltage reference channel. | 34 | /// Internal voltage reference channel. |
| 35 | pub struct VrefInt; | 35 | pub struct VrefInt; |
| 36 | impl<T: Instance> InternalChannel<T> for VrefInt {} | ||
| 37 | impl<T: Instance> super::SealedInternalChannel<T> for VrefInt {} | ||
| 36 | impl<T: Instance> AdcChannel<T> for VrefInt {} | 38 | impl<T: Instance> AdcChannel<T> for VrefInt {} |
| 37 | impl<T: Instance> super::SealedAdcChannel<T> for VrefInt { | 39 | impl<T: Instance> super::SealedAdcChannel<T> for VrefInt { |
| 38 | fn channel(&self) -> u8 { | 40 | fn channel(&self) -> u8 { |
| @@ -42,6 +44,8 @@ impl<T: Instance> super::SealedAdcChannel<T> for VrefInt { | |||
| 42 | 44 | ||
| 43 | /// Internal temperature channel. | 45 | /// Internal temperature channel. |
| 44 | pub struct Temperature; | 46 | pub struct Temperature; |
| 47 | impl<T: Instance> InternalChannel<T> for Temperature {} | ||
| 48 | impl<T: Instance> super::SealedInternalChannel<T> for Temperature {} | ||
| 45 | impl<T: Instance> AdcChannel<T> for Temperature {} | 49 | impl<T: Instance> AdcChannel<T> for Temperature {} |
| 46 | impl<T: Instance> super::SealedAdcChannel<T> for Temperature { | 50 | impl<T: Instance> super::SealedAdcChannel<T> for Temperature { |
| 47 | fn channel(&self) -> u8 { | 51 | fn channel(&self) -> u8 { |
| @@ -51,6 +55,8 @@ impl<T: Instance> super::SealedAdcChannel<T> for Temperature { | |||
| 51 | 55 | ||
| 52 | /// Internal battery voltage channel. | 56 | /// Internal battery voltage channel. |
| 53 | pub struct Vbat; | 57 | pub struct Vbat; |
| 58 | impl<T: Instance> InternalChannel<T> for Vbat {} | ||
| 59 | impl<T: Instance> super::SealedInternalChannel<T> for Vbat {} | ||
| 54 | impl<T: Instance> AdcChannel<T> for Vbat {} | 60 | impl<T: Instance> AdcChannel<T> for Vbat {} |
| 55 | impl<T: Instance> super::SealedAdcChannel<T> for Vbat { | 61 | impl<T: Instance> super::SealedAdcChannel<T> for Vbat { |
| 56 | fn channel(&self) -> u8 { | 62 | fn channel(&self) -> u8 { |
diff --git a/embassy-stm32/src/adc/mod.rs b/embassy-stm32/src/adc/mod.rs index 6a3d0f44c..3e62b6f3b 100644 --- a/embassy-stm32/src/adc/mod.rs +++ b/embassy-stm32/src/adc/mod.rs | |||
| @@ -61,7 +61,7 @@ trait SealedInstance { | |||
| 61 | } | 61 | } |
| 62 | 62 | ||
| 63 | pub(crate) trait SealedAdcPin<T: Instance> {} | 63 | pub(crate) trait SealedAdcPin<T: Instance> {} |
| 64 | 64 | pub(crate) trait SealedInternalChannel<T> {} | |
| 65 | pub(crate) trait SealedAdcChannel<T> { | 65 | pub(crate) trait SealedAdcChannel<T> { |
| 66 | #[cfg(any(adc_v1, adc_l0, adc_v2, adc_g4, adc_v4))] | 66 | #[cfg(any(adc_v1, adc_l0, adc_v2, adc_g4, adc_v4))] |
| 67 | fn setup(&mut self) {} | 67 | fn setup(&mut self) {} |
| @@ -126,6 +126,9 @@ pub trait Instance: SealedInstance + crate::Peripheral<P = Self> + crate::rcc::R | |||
| 126 | /// ADC pin. | 126 | /// ADC pin. |
| 127 | #[allow(private_bounds)] | 127 | #[allow(private_bounds)] |
| 128 | pub trait AdcPin<T: Instance>: AdcChannel<T> + SealedAdcPin<T> {} | 128 | pub trait AdcPin<T: Instance>: AdcChannel<T> + SealedAdcPin<T> {} |
| 129 | /// ADC internal channel. | ||
| 130 | #[allow(private_bounds)] | ||
| 131 | pub trait InternalChannel<T>: SealedInternalChannel<T> {} | ||
| 129 | /// ADC channel. | 132 | /// ADC channel. |
| 130 | #[allow(private_bounds)] | 133 | #[allow(private_bounds)] |
| 131 | pub trait AdcChannel<T>: SealedAdcChannel<T> + Sized { | 134 | pub trait AdcChannel<T>: SealedAdcChannel<T> + Sized { |
diff --git a/embassy-stm32/src/adc/v1.rs b/embassy-stm32/src/adc/v1.rs index 090790c39..abd58952d 100644 --- a/embassy-stm32/src/adc/v1.rs +++ b/embassy-stm32/src/adc/v1.rs | |||
| @@ -6,7 +6,7 @@ use embassy_hal_internal::into_ref; | |||
| 6 | #[cfg(adc_l0)] | 6 | #[cfg(adc_l0)] |
| 7 | use stm32_metapac::adc::vals::Ckmode; | 7 | use stm32_metapac::adc::vals::Ckmode; |
| 8 | 8 | ||
| 9 | use super::blocking_delay_us; | 9 | use super::{blocking_delay_us, InternalChannel}; |
| 10 | use crate::adc::{Adc, AdcChannel, Instance, Resolution, SampleTime}; | 10 | use crate::adc::{Adc, AdcChannel, Instance, Resolution, SampleTime}; |
| 11 | use crate::interrupt::typelevel::Interrupt; | 11 | use crate::interrupt::typelevel::Interrupt; |
| 12 | use crate::peripherals::ADC1; | 12 | use crate::peripherals::ADC1; |
| @@ -36,6 +36,12 @@ impl<T: Instance> interrupt::typelevel::Handler<T::Interrupt> for InterruptHandl | |||
| 36 | pub struct Vbat; | 36 | pub struct Vbat; |
| 37 | 37 | ||
| 38 | #[cfg(not(adc_l0))] | 38 | #[cfg(not(adc_l0))] |
| 39 | impl InternalChannel<ADC1> for Vbat {} | ||
| 40 | |||
| 41 | #[cfg(not(adc_l0))] | ||
| 42 | impl super::SealedInternalChannel<ADC1> for Vbat {} | ||
| 43 | |||
| 44 | #[cfg(not(adc_l0))] | ||
| 39 | impl AdcChannel<ADC1> for Vbat {} | 45 | impl AdcChannel<ADC1> for Vbat {} |
| 40 | 46 | ||
| 41 | #[cfg(not(adc_l0))] | 47 | #[cfg(not(adc_l0))] |
| @@ -46,6 +52,8 @@ impl super::SealedAdcChannel<ADC1> for Vbat { | |||
| 46 | } | 52 | } |
| 47 | 53 | ||
| 48 | pub struct Vref; | 54 | pub struct Vref; |
| 55 | impl InternalChannel<ADC1> for Vref {} | ||
| 56 | impl super::SealedInternalChannel<ADC1> for Vref {} | ||
| 49 | impl AdcChannel<ADC1> for Vref {} | 57 | impl AdcChannel<ADC1> for Vref {} |
| 50 | impl super::SealedAdcChannel<ADC1> for Vref { | 58 | impl super::SealedAdcChannel<ADC1> for Vref { |
| 51 | fn channel(&self) -> u8 { | 59 | fn channel(&self) -> u8 { |
| @@ -54,6 +62,8 @@ impl super::SealedAdcChannel<ADC1> for Vref { | |||
| 54 | } | 62 | } |
| 55 | 63 | ||
| 56 | pub struct Temperature; | 64 | pub struct Temperature; |
| 65 | impl InternalChannel<ADC1> for Temperature {} | ||
| 66 | impl super::SealedInternalChannel<ADC1> for Temperature {} | ||
| 57 | impl AdcChannel<ADC1> for Temperature {} | 67 | impl AdcChannel<ADC1> for Temperature {} |
| 58 | impl super::SealedAdcChannel<ADC1> for Temperature { | 68 | impl super::SealedAdcChannel<ADC1> for Temperature { |
| 59 | fn channel(&self) -> u8 { | 69 | fn channel(&self) -> u8 { |
diff --git a/embassy-stm32/src/adc/v2.rs b/embassy-stm32/src/adc/v2.rs index 033108195..f7b791903 100644 --- a/embassy-stm32/src/adc/v2.rs +++ b/embassy-stm32/src/adc/v2.rs | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | use embassy_hal_internal::into_ref; | 1 | use embassy_hal_internal::into_ref; |
| 2 | 2 | ||
| 3 | use super::blocking_delay_us; | 3 | use super::{blocking_delay_us, InternalChannel}; |
| 4 | use crate::adc::{Adc, AdcChannel, Instance, Resolution, SampleTime}; | 4 | use crate::adc::{Adc, AdcChannel, Instance, Resolution, SampleTime}; |
| 5 | use crate::peripherals::ADC1; | 5 | use crate::peripherals::ADC1; |
| 6 | use crate::time::Hertz; | 6 | use crate::time::Hertz; |
| @@ -12,6 +12,8 @@ pub const VREF_DEFAULT_MV: u32 = 3300; | |||
| 12 | pub const VREF_CALIB_MV: u32 = 3300; | 12 | pub const VREF_CALIB_MV: u32 = 3300; |
| 13 | 13 | ||
| 14 | pub struct VrefInt; | 14 | pub struct VrefInt; |
| 15 | impl InternalChannel<ADC1> for VrefInt {} | ||
| 16 | impl super::SealedInternalChannel<ADC1> for VrefInt {} | ||
| 15 | impl AdcChannel<ADC1> for VrefInt {} | 17 | impl AdcChannel<ADC1> for VrefInt {} |
| 16 | impl super::SealedAdcChannel<ADC1> for VrefInt { | 18 | impl super::SealedAdcChannel<ADC1> for VrefInt { |
| 17 | fn channel(&self) -> u8 { | 19 | fn channel(&self) -> u8 { |
| @@ -27,6 +29,8 @@ impl VrefInt { | |||
| 27 | } | 29 | } |
| 28 | 30 | ||
| 29 | pub struct Temperature; | 31 | pub struct Temperature; |
| 32 | impl InternalChannel<ADC1> for Temperature {} | ||
| 33 | impl super::SealedInternalChannel<ADC1> for Temperature {} | ||
| 30 | impl AdcChannel<ADC1> for Temperature {} | 34 | impl AdcChannel<ADC1> for Temperature {} |
| 31 | impl super::SealedAdcChannel<ADC1> for Temperature { | 35 | impl super::SealedAdcChannel<ADC1> for Temperature { |
| 32 | fn channel(&self) -> u8 { | 36 | fn channel(&self) -> u8 { |
| @@ -48,6 +52,8 @@ impl Temperature { | |||
| 48 | } | 52 | } |
| 49 | 53 | ||
| 50 | pub struct Vbat; | 54 | pub struct Vbat; |
| 55 | impl InternalChannel<ADC1> for Vbat {} | ||
| 56 | impl super::SealedInternalChannel<ADC1> for Vbat {} | ||
| 51 | impl AdcChannel<ADC1> for Vbat {} | 57 | impl AdcChannel<ADC1> for Vbat {} |
| 52 | impl super::SealedAdcChannel<ADC1> for Vbat { | 58 | impl super::SealedAdcChannel<ADC1> for Vbat { |
| 53 | fn channel(&self) -> u8 { | 59 | fn channel(&self) -> u8 { |
diff --git a/embassy-stm32/src/adc/v3.rs b/embassy-stm32/src/adc/v3.rs index be857f4dd..36e0e3df3 100644 --- a/embassy-stm32/src/adc/v3.rs +++ b/embassy-stm32/src/adc/v3.rs | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | use cfg_if::cfg_if; | 1 | use cfg_if::cfg_if; |
| 2 | use embassy_hal_internal::into_ref; | 2 | use embassy_hal_internal::into_ref; |
| 3 | 3 | ||
| 4 | use super::blocking_delay_us; | 4 | use super::{blocking_delay_us, InternalChannel}; |
| 5 | use crate::adc::{Adc, AdcChannel, Instance, Resolution, SampleTime}; | 5 | use crate::adc::{Adc, AdcChannel, Instance, Resolution, SampleTime}; |
| 6 | use crate::Peripheral; | 6 | use crate::Peripheral; |
| 7 | 7 | ||
| @@ -11,6 +11,8 @@ pub const VREF_DEFAULT_MV: u32 = 3300; | |||
| 11 | pub const VREF_CALIB_MV: u32 = 3000; | 11 | pub const VREF_CALIB_MV: u32 = 3000; |
| 12 | 12 | ||
| 13 | pub struct VrefInt; | 13 | pub struct VrefInt; |
| 14 | impl<T: Instance> InternalChannel<T> for VrefInt {} | ||
| 15 | impl<T: Instance> super::SealedInternalChannel<T> for VrefInt {} | ||
| 14 | impl<T: Instance> AdcChannel<T> for VrefInt {} | 16 | impl<T: Instance> AdcChannel<T> for VrefInt {} |
| 15 | impl<T: Instance> super::SealedAdcChannel<T> for VrefInt { | 17 | impl<T: Instance> super::SealedAdcChannel<T> for VrefInt { |
| 16 | fn channel(&self) -> u8 { | 18 | fn channel(&self) -> u8 { |
| @@ -30,6 +32,8 @@ impl<T: Instance> super::SealedAdcChannel<T> for VrefInt { | |||
| 30 | } | 32 | } |
| 31 | 33 | ||
| 32 | pub struct Temperature; | 34 | pub struct Temperature; |
| 35 | impl<T: Instance> InternalChannel<T> for Temperature {} | ||
| 36 | impl<T: Instance> super::SealedInternalChannel<T> for Temperature {} | ||
| 33 | impl<T: Instance> AdcChannel<T> for Temperature {} | 37 | impl<T: Instance> AdcChannel<T> for Temperature {} |
| 34 | impl<T: Instance> super::SealedAdcChannel<T> for Temperature { | 38 | impl<T: Instance> super::SealedAdcChannel<T> for Temperature { |
| 35 | fn channel(&self) -> u8 { | 39 | fn channel(&self) -> u8 { |
| @@ -49,6 +53,8 @@ impl<T: Instance> super::SealedAdcChannel<T> for Temperature { | |||
| 49 | } | 53 | } |
| 50 | 54 | ||
| 51 | pub struct Vbat; | 55 | pub struct Vbat; |
| 56 | impl<T: Instance> InternalChannel<T> for Vbat {} | ||
| 57 | impl<T: Instance> super::SealedInternalChannel<T> for Vbat {} | ||
| 52 | impl<T: Instance> AdcChannel<T> for Vbat {} | 58 | impl<T: Instance> AdcChannel<T> for Vbat {} |
| 53 | impl<T: Instance> super::SealedAdcChannel<T> for Vbat { | 59 | impl<T: Instance> super::SealedAdcChannel<T> for Vbat { |
| 54 | fn channel(&self) -> u8 { | 60 | fn channel(&self) -> u8 { |
| @@ -70,6 +76,8 @@ impl<T: Instance> super::SealedAdcChannel<T> for Vbat { | |||
| 70 | cfg_if! { | 76 | cfg_if! { |
| 71 | if #[cfg(adc_h5)] { | 77 | if #[cfg(adc_h5)] { |
| 72 | pub struct VddCore; | 78 | pub struct VddCore; |
| 79 | impl<T: Instance> InternalChannel<T> for VddCore {} | ||
| 80 | impl<T: Instance> super::SealedInternalChannel<T> for VddCore {} | ||
| 73 | impl<T: Instance> AdcChannel<T> for VddCore {} | 81 | impl<T: Instance> AdcChannel<T> for VddCore {} |
| 74 | impl<T: Instance> super::SealedAdcChannel<T> for VddCore { | 82 | impl<T: Instance> super::SealedAdcChannel<T> for VddCore { |
| 75 | fn channel(&self) -> u8 { | 83 | fn channel(&self) -> u8 { |
| @@ -82,6 +90,8 @@ cfg_if! { | |||
| 82 | cfg_if! { | 90 | cfg_if! { |
| 83 | if #[cfg(adc_u0)] { | 91 | if #[cfg(adc_u0)] { |
| 84 | pub struct DacOut; | 92 | pub struct DacOut; |
| 93 | impl<T: Instance> InternalChannel<T> for DacOut {} | ||
| 94 | impl<T: Instance> super::SealedInternalChannel<T> for DacOut {} | ||
| 85 | impl<T: Instance> AdcChannel<T> for DacOut {} | 95 | impl<T: Instance> AdcChannel<T> for DacOut {} |
| 86 | impl<T: Instance> super::SealedAdcChannel<T> for DacOut { | 96 | impl<T: Instance> super::SealedAdcChannel<T> for DacOut { |
| 87 | fn channel(&self) -> u8 { | 97 | fn channel(&self) -> u8 { |
diff --git a/embassy-stm32/src/adc/v4.rs b/embassy-stm32/src/adc/v4.rs index f564114c2..bf3a55797 100644 --- a/embassy-stm32/src/adc/v4.rs +++ b/embassy-stm32/src/adc/v4.rs | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | use pac::adc::vals::{Adcaldif, Boost, Difsel, Exten, Pcsel}; | 2 | use pac::adc::vals::{Adcaldif, Boost, Difsel, Exten, Pcsel}; |
| 3 | use pac::adccommon::vals::Presc; | 3 | use pac::adccommon::vals::Presc; |
| 4 | 4 | ||
| 5 | use super::{blocking_delay_us, Adc, AdcChannel, Instance, Resolution, SampleTime}; | 5 | use super::{blocking_delay_us, Adc, AdcChannel, Instance, InternalChannel, Resolution, SampleTime}; |
| 6 | use crate::time::Hertz; | 6 | use crate::time::Hertz; |
| 7 | use crate::{pac, Peripheral}; | 7 | use crate::{pac, Peripheral}; |
| 8 | 8 | ||
| @@ -33,6 +33,8 @@ const VBAT_CHANNEL: u8 = 17; | |||
| 33 | // NOTE: Vrefint/Temperature/Vbat are not available on all ADCs, this currently cannot be modeled with stm32-data, so these are available from the software on all ADCs | 33 | // NOTE: Vrefint/Temperature/Vbat are not available on all ADCs, this currently cannot be modeled with stm32-data, so these are available from the software on all ADCs |
| 34 | /// Internal voltage reference channel. | 34 | /// Internal voltage reference channel. |
| 35 | pub struct VrefInt; | 35 | pub struct VrefInt; |
| 36 | impl<T: Instance> InternalChannel<T> for VrefInt {} | ||
| 37 | impl<T: Instance> super::SealedInternalChannel<T> for VrefInt {} | ||
| 36 | impl<T: Instance> AdcChannel<T> for VrefInt {} | 38 | impl<T: Instance> AdcChannel<T> for VrefInt {} |
| 37 | impl<T: Instance> super::SealedAdcChannel<T> for VrefInt { | 39 | impl<T: Instance> super::SealedAdcChannel<T> for VrefInt { |
| 38 | fn channel(&self) -> u8 { | 40 | fn channel(&self) -> u8 { |
| @@ -42,6 +44,8 @@ impl<T: Instance> super::SealedAdcChannel<T> for VrefInt { | |||
| 42 | 44 | ||
| 43 | /// Internal temperature channel. | 45 | /// Internal temperature channel. |
| 44 | pub struct Temperature; | 46 | pub struct Temperature; |
| 47 | impl<T: Instance> InternalChannel<T> for Temperature {} | ||
| 48 | impl<T: Instance> super::SealedInternalChannel<T> for Temperature {} | ||
| 45 | impl<T: Instance> AdcChannel<T> for Temperature {} | 49 | impl<T: Instance> AdcChannel<T> for Temperature {} |
| 46 | impl<T: Instance> super::SealedAdcChannel<T> for Temperature { | 50 | impl<T: Instance> super::SealedAdcChannel<T> for Temperature { |
| 47 | fn channel(&self) -> u8 { | 51 | fn channel(&self) -> u8 { |
| @@ -51,6 +55,8 @@ impl<T: Instance> super::SealedAdcChannel<T> for Temperature { | |||
| 51 | 55 | ||
| 52 | /// Internal battery voltage channel. | 56 | /// Internal battery voltage channel. |
| 53 | pub struct Vbat; | 57 | pub struct Vbat; |
| 58 | impl<T: Instance> InternalChannel<T> for Vbat {} | ||
| 59 | impl<T: Instance> super::SealedInternalChannel<T> for Vbat {} | ||
| 54 | impl<T: Instance> AdcChannel<T> for Vbat {} | 60 | impl<T: Instance> AdcChannel<T> for Vbat {} |
| 55 | impl<T: Instance> super::SealedAdcChannel<T> for Vbat { | 61 | impl<T: Instance> super::SealedAdcChannel<T> for Vbat { |
| 56 | fn channel(&self) -> u8 { | 62 | fn channel(&self) -> u8 { |
