66
77use capsules_core:: adc:: AdcDedicated ;
88use capsules_core:: adc:: AdcVirtualized ;
9+ use capsules_core:: virtualizers:: selection_policy:: RoundRobinPolicy ;
910use capsules_core:: virtualizers:: selection_policy:: SelectionPolicy ;
1011use capsules_core:: virtualizers:: virtual_adc:: { AdcDevice , MuxAdc } ;
11- use core:: marker:: PhantomData ;
1212use core:: mem:: MaybeUninit ;
1313use kernel:: capabilities;
1414use kernel:: component:: Component ;
@@ -17,13 +17,19 @@ use kernel::hil::adc;
1717
1818#[ macro_export]
1919macro_rules! adc_mux_component_static {
20+ ( $A: ty, $SP: ty $( , ) ?) => { {
21+ kernel:: static_buf!( capsules_core:: virtualizers:: virtual_adc:: MuxAdc <' static , $A, $SP>)
22+ } ; } ;
2023 ( $A: ty $( , ) ?) => { {
2124 kernel:: static_buf!( capsules_core:: virtualizers:: virtual_adc:: MuxAdc <' static , $A>)
2225 } ; } ;
2326}
2427
2528#[ macro_export]
2629macro_rules! adc_component_static {
30+ ( $A: ty, $SP: ty $( , ) ?) => { {
31+ kernel:: static_buf!( capsules_core:: virtualizers:: virtual_adc:: AdcDevice <' static , $A, $SP>)
32+ } ; } ;
2733 ( $A: ty $( , ) ?) => { {
2834 kernel:: static_buf!( capsules_core:: virtualizers:: virtual_adc:: AdcDevice <' static , $A>)
2935 } ; } ;
@@ -61,33 +67,42 @@ macro_rules! adc_dedicated_component_static {
6167
6268pub struct AdcMuxComponent <
6369 A : ' static + adc:: Adc < ' static > ,
64- P : ' static + SelectionPolicy < & ' static AdcDevice < ' static , A , P > > ,
70+ SP : ' static + SelectionPolicy < & ' static AdcDevice < ' static , A , SP > > = RoundRobinPolicy ,
6571> {
6672 adc : & ' static A ,
67- phantom : PhantomData < P > ,
73+ selection_policy : SP ,
74+ }
75+
76+ impl < A : ' static + adc:: Adc < ' static > > AdcMuxComponent < A > {
77+ pub fn new ( adc : & ' static A ) -> Self {
78+ AdcMuxComponent {
79+ adc,
80+ selection_policy : RoundRobinPolicy :: default ( ) ,
81+ }
82+ }
6883}
6984
7085impl <
7186 A : ' static + adc:: Adc < ' static > ,
72- P : ' static + SelectionPolicy < & ' static AdcDevice < ' static , A , P > > ,
73- > AdcMuxComponent < A , P >
87+ SP : ' static + SelectionPolicy < & ' static AdcDevice < ' static , A , SP > > ,
88+ > AdcMuxComponent < A , SP >
7489{
75- pub fn new ( adc : & ' static A ) -> Self {
90+ pub fn new_with_policy ( adc : & ' static A , policy : SP ) -> Self {
7691 AdcMuxComponent {
7792 adc,
78- phantom : PhantomData ,
93+ selection_policy : policy ,
7994 }
8095 }
8196}
8297
83- impl < A : ' static + adc:: Adc < ' static > , P : SelectionPolicy < & ' static AdcDevice < ' static , A , P > > >
84- Component for AdcMuxComponent < A , P >
98+ impl < A : ' static + adc:: Adc < ' static > , SP : SelectionPolicy < & ' static AdcDevice < ' static , A , SP > > >
99+ Component for AdcMuxComponent < A , SP >
85100{
86- type StaticInput = & ' static mut MaybeUninit < MuxAdc < ' static , A , P > > ;
87- type Output = & ' static MuxAdc < ' static , A , P > ;
101+ type StaticInput = & ' static mut MaybeUninit < MuxAdc < ' static , A , SP > > ;
102+ type Output = & ' static MuxAdc < ' static , A , SP > ;
88103
89104 fn finalize ( self , static_buffer : Self :: StaticInput ) -> Self :: Output {
90- let adc_mux = static_buffer. write ( MuxAdc :: new_with_policy ( self . adc ) ) ;
105+ let adc_mux = static_buffer. write ( MuxAdc :: new_with_policy ( self . adc , self . selection_policy ) ) ;
91106
92107 self . adc . set_client ( adc_mux) ;
93108
@@ -97,9 +112,9 @@ impl<A: 'static + adc::Adc<'static>, P: SelectionPolicy<&'static AdcDevice<'stat
97112
98113pub struct AdcComponent <
99114 A : ' static + adc:: Adc < ' static > ,
100- P : ' static + SelectionPolicy < & ' static AdcDevice < ' static , A , P > > ,
115+ SP : ' static + SelectionPolicy < & ' static AdcDevice < ' static , A , SP > > = RoundRobinPolicy ,
101116> {
102- adc_mux : & ' static MuxAdc < ' static , A , P > ,
117+ adc_mux : & ' static MuxAdc < ' static , A , SP > ,
103118 channel : A :: Channel ,
104119}
105120
@@ -116,11 +131,11 @@ impl<
116131 }
117132}
118133
119- impl < A : ' static + adc:: Adc < ' static > , P : SelectionPolicy < & ' static AdcDevice < ' static , A , P > > >
120- Component for AdcComponent < A , P >
134+ impl < A : ' static + adc:: Adc < ' static > , SP : SelectionPolicy < & ' static AdcDevice < ' static , A , SP > > >
135+ Component for AdcComponent < A , SP >
121136{
122- type StaticInput = & ' static mut MaybeUninit < AdcDevice < ' static , A , P > > ;
123- type Output = & ' static AdcDevice < ' static , A , P > ;
137+ type StaticInput = & ' static mut MaybeUninit < AdcDevice < ' static , A , SP > > ;
138+ type Output = & ' static AdcDevice < ' static , A , SP > ;
124139
125140 fn finalize ( self , static_buffer : Self :: StaticInput ) -> Self :: Output {
126141 let adc_device = static_buffer. write ( AdcDevice :: new ( self . adc_mux , self . channel ) ) ;
0 commit comments