2424//! );
2525//! ```
2626
27+ use capsules_core:: virtualizers:: selection_policy:: SelectionPolicy ;
2728use capsules_core:: virtualizers:: virtual_i2c:: { I2CDevice , MuxI2C } ;
2829use capsules_core:: virtualizers:: virtual_spi:: MuxSpiMaster ;
2930use capsules_core:: virtualizers:: virtual_spi:: VirtualSpiMasterDevice ;
@@ -72,6 +73,18 @@ macro_rules! i2c_master_bus_component_static {
7273 >
7374 ) ;
7475
76+ ( bus, i2c_device, address_buffer)
77+ } ; } ;
78+ ( $D: ty, $P: ty $( , ) ?) => { {
79+ let address_buffer = kernel:: static_buf!( [ u8 ; 1 ] ) ;
80+ let bus = kernel:: static_buf!( capsules_extra:: bus:: I2CMasterBus <' static , $D, $P>) ;
81+ let i2c_device = kernel:: static_buf!(
82+ capsules_core:: virtualizers:: virtual_i2c:: I2CDevice <
83+ ' static ,
84+ capsules_extra:: bus:: I2CMasterBus <' static , $D, $P>,
85+ >
86+ ) ;
87+
7588 ( bus, i2c_device, address_buffer)
7689 } ; } ;
7790}
@@ -98,22 +111,29 @@ impl<B: 'static + bus8080::Bus8080<'static>> Component for Bus8080BusComponent<B
98111 }
99112}
100113
101- pub struct SpiMasterBusComponent < S : ' static + spi:: SpiMaster < ' static > > {
102- spi_mux : & ' static MuxSpiMaster < ' static , S > ,
114+ pub struct SpiMasterBusComponent <
115+ S : ' static + spi:: SpiMaster < ' static > ,
116+ P : ' static + SelectionPolicy < & ' static VirtualSpiMasterDevice < ' static , S , P > > ,
117+ > {
118+ spi_mux : & ' static MuxSpiMaster < ' static , S , P > ,
103119 chip_select : S :: ChipSelect ,
104120 baud_rate : u32 ,
105121 clock_phase : ClockPhase ,
106122 clock_polarity : ClockPolarity ,
107123}
108124
109- impl < S : ' static + spi:: SpiMaster < ' static > > SpiMasterBusComponent < S > {
125+ impl <
126+ S : ' static + spi:: SpiMaster < ' static > ,
127+ P : ' static + SelectionPolicy < & ' static VirtualSpiMasterDevice < ' static , S , P > > ,
128+ > SpiMasterBusComponent < S , P >
129+ {
110130 pub fn new (
111- spi_mux : & ' static MuxSpiMaster < ' static , S > ,
131+ spi_mux : & ' static MuxSpiMaster < ' static , S , P > ,
112132 chip_select : S :: ChipSelect ,
113133 baud_rate : u32 ,
114134 clock_phase : ClockPhase ,
115135 clock_polarity : ClockPolarity ,
116- ) -> SpiMasterBusComponent < S > {
136+ ) -> SpiMasterBusComponent < S , P > {
117137 SpiMasterBusComponent {
118138 spi_mux,
119139 chip_select,
@@ -124,13 +144,17 @@ impl<S: 'static + spi::SpiMaster<'static>> SpiMasterBusComponent<S> {
124144 }
125145}
126146
127- impl < S : ' static + spi:: SpiMaster < ' static > > Component for SpiMasterBusComponent < S > {
147+ impl <
148+ S : ' static + spi:: SpiMaster < ' static > ,
149+ P : ' static + SelectionPolicy < & ' static VirtualSpiMasterDevice < ' static , S , P > > ,
150+ > Component for SpiMasterBusComponent < S , P >
151+ {
128152 type StaticInput = (
129- & ' static mut MaybeUninit < VirtualSpiMasterDevice < ' static , S > > ,
130- & ' static mut MaybeUninit < SpiMasterBus < ' static , VirtualSpiMasterDevice < ' static , S > > > ,
153+ & ' static mut MaybeUninit < VirtualSpiMasterDevice < ' static , S , P > > ,
154+ & ' static mut MaybeUninit < SpiMasterBus < ' static , VirtualSpiMasterDevice < ' static , S , P > > > ,
131155 & ' static mut MaybeUninit < [ u8 ; core:: mem:: size_of :: < usize > ( ) ] > ,
132156 ) ;
133- type Output = & ' static SpiMasterBus < ' static , VirtualSpiMasterDevice < ' static , S > > ;
157+ type Output = & ' static SpiMasterBus < ' static , VirtualSpiMasterDevice < ' static , S , P > > ;
134158
135159 fn finalize ( self , static_buffer : Self :: StaticInput ) -> Self :: Output {
136160 let spi_device = static_buffer
0 commit comments