components/
temperature_rp2040.rs1use capsules_core::virtualizers::virtual_adc::AdcDevice;
8use capsules_extra::temperature_rp2040::TemperatureRp2040;
9use core::mem::MaybeUninit;
10use kernel::component::Component;
11use kernel::hil::adc;
12use kernel::hil::adc::AdcChannel;
13
14#[macro_export]
15macro_rules! temperature_rp2040_adc_component_static {
16 ($A:ty $(,)?) => {{
17 let adc_device = components::adc_component_static!($A);
18 let temperature_rp2040 = kernel::static_buf!(
19 capsules_extra::temperature_rp2040::TemperatureRp2040<
20 'static,
21 capsules_core::virtualizers::virtual_adc::AdcDevice<'static, $A>,
22 >
23 );
24
25 (adc_device, temperature_rp2040)
26 };};
27}
28
29pub type TemperatureRp2040ComponentType<A> =
30 capsules_extra::temperature_rp2040::TemperatureRp2040<'static, A>;
31
32pub struct TemperatureRp2040Component<A: 'static + adc::Adc<'static>> {
33 adc_mux: &'static capsules_core::virtualizers::virtual_adc::MuxAdc<'static, A>,
34 adc_channel: A::Channel,
35 slope: f32,
36 v_27: f32,
37}
38
39impl<A: 'static + adc::Adc<'static>> TemperatureRp2040Component<A> {
40 pub fn new(
41 adc_mux: &'static capsules_core::virtualizers::virtual_adc::MuxAdc<'static, A>,
42 adc_channel: A::Channel,
43 slope: f32,
44 v_27: f32,
45 ) -> TemperatureRp2040Component<A> {
46 TemperatureRp2040Component {
47 adc_mux,
48 adc_channel,
49 slope,
50 v_27,
51 }
52 }
53}
54
55impl<A: 'static + adc::Adc<'static>> Component for TemperatureRp2040Component<A> {
56 type StaticInput = (
57 &'static mut MaybeUninit<AdcDevice<'static, A>>,
58 &'static mut MaybeUninit<TemperatureRp2040<'static, AdcDevice<'static, A>>>,
59 );
60 type Output = &'static TemperatureRp2040<'static, AdcDevice<'static, A>>;
61
62 fn finalize(self, s: Self::StaticInput) -> Self::Output {
63 let adc_device =
64 crate::adc::AdcComponent::new(self.adc_mux, self.adc_channel).finalize(s.0);
65
66 let temperature_rp2040 =
67 s.1.write(TemperatureRp2040::new(adc_device, self.slope, self.v_27));
68
69 adc_device.set_client(temperature_rp2040);
70
71 temperature_rp2040
72 }
73}