Skip to content

Commit 3354781

Browse files
committed
patch for all the virtualizers, except I2C
1 parent 66a95fd commit 3354781

19 files changed

Lines changed: 679 additions & 282 deletions

boards/components/src/adc.rs

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
77
use capsules_core::adc::AdcDedicated;
88
use capsules_core::adc::AdcVirtualized;
9+
use capsules_core::virtualizers::selection_policy::RoundRobinPolicy;
910
use capsules_core::virtualizers::selection_policy::SelectionPolicy;
1011
use capsules_core::virtualizers::virtual_adc::{AdcDevice, MuxAdc};
11-
use core::marker::PhantomData;
1212
use core::mem::MaybeUninit;
1313
use kernel::capabilities;
1414
use kernel::component::Component;
@@ -17,13 +17,19 @@ use kernel::hil::adc;
1717

1818
#[macro_export]
1919
macro_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]
2629
macro_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

6268
pub 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

7085
impl<
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

98113
pub 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));

boards/components/src/adc_microphone.rs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
//! ));
3131
//! ```
3232
33+
use capsules_core::virtualizers::selection_policy::SelectionPolicy;
3334
use capsules_core::virtualizers::virtual_adc::AdcDevice;
3435
use capsules_extra::adc_microphone::AdcMicrophone;
3536
use core::mem::MaybeUninit;
@@ -52,21 +53,26 @@ macro_rules! adc_microphone_component_static {
5253
pub struct AdcMicrophoneComponent<
5354
A: 'static + adc::Adc<'static>,
5455
P: 'static + gpio::Pin,
56+
SP: 'static + SelectionPolicy<&'static AdcDevice<'static, A, SP>>,
5557
const BUF_LEN: usize,
5658
> {
57-
adc_mux: &'static capsules_core::virtualizers::virtual_adc::MuxAdc<'static, A>,
59+
adc_mux: &'static capsules_core::virtualizers::virtual_adc::MuxAdc<'static, A, SP>,
5860
adc_channel: A::Channel,
5961
pin: Option<&'static P>,
6062
}
6163

62-
impl<A: 'static + adc::Adc<'static>, P: 'static + gpio::Pin, const BUF_LEN: usize>
63-
AdcMicrophoneComponent<A, P, BUF_LEN>
64+
impl<
65+
A: 'static + adc::Adc<'static>,
66+
P: 'static + gpio::Pin,
67+
SP: 'static + SelectionPolicy<&'static AdcDevice<'static, A, SP>>,
68+
const BUF_LEN: usize,
69+
> AdcMicrophoneComponent<A, P, SP, BUF_LEN>
6470
{
6571
pub fn new(
66-
adc_mux: &'static capsules_core::virtualizers::virtual_adc::MuxAdc<'static, A>,
72+
adc_mux: &'static capsules_core::virtualizers::virtual_adc::MuxAdc<'static, A, SP>,
6773
adc_channel: A::Channel,
6874
pin: Option<&'static P>,
69-
) -> AdcMicrophoneComponent<A, P, BUF_LEN> {
75+
) -> AdcMicrophoneComponent<A, P, SP, BUF_LEN> {
7076
AdcMicrophoneComponent {
7177
adc_mux,
7278
adc_channel,
@@ -75,11 +81,15 @@ impl<A: 'static + adc::Adc<'static>, P: 'static + gpio::Pin, const BUF_LEN: usiz
7581
}
7682
}
7783

78-
impl<A: 'static + adc::Adc<'static>, P: 'static + gpio::Pin, const BUF_LEN: usize> Component
79-
for AdcMicrophoneComponent<A, P, BUF_LEN>
84+
impl<
85+
A: 'static + adc::Adc<'static>,
86+
P: 'static + gpio::Pin,
87+
SP: 'static + SelectionPolicy<&'static AdcDevice<'static, A, SP>>,
88+
const BUF_LEN: usize,
89+
> Component for AdcMicrophoneComponent<A, P, SP, BUF_LEN>
8090
{
8191
type StaticInput = (
82-
&'static mut MaybeUninit<AdcDevice<'static, A>>,
92+
&'static mut MaybeUninit<AdcDevice<'static, A, SP>>,
8393
&'static mut MaybeUninit<[u16; BUF_LEN]>,
8494
&'static mut MaybeUninit<AdcMicrophone<'static, P>>,
8595
);

boards/components/src/aes.rs

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
//! ));
2525
//! ```
2626
27+
use capsules_core::virtualizers::selection_policy::SelectionPolicy;
28+
use capsules_core::virtualizers::virtual_aes_ccm::VirtualAES128CCM;
2729
use core::mem::MaybeUninit;
2830
use kernel::capabilities;
2931
use kernel::component::Component;
@@ -37,6 +39,15 @@ const CRYPT_SIZE: usize = 7 * hil::symmetric_encryption::AES128_BLOCK_SIZE;
3739

3840
#[macro_export]
3941
macro_rules! aes_virtual_component_static {
42+
($A:ty, $SP:ty $(,)?) => {{
43+
const CRYPT_SIZE: usize = 7 * kernel::hil::symmetric_encryption::AES128_BLOCK_SIZE;
44+
let virtual_aes = kernel::static_buf!(
45+
capsules_core::virtualizers::virtual_aes_ccm::VirtualAES128CCM<'static, $A, $SP>
46+
);
47+
let crypt_buf = kernel::static_buf!([u8; CRYPT_SIZE]);
48+
49+
(virtual_aes, crypt_buf)
50+
};};
4051
($A:ty $(,)?) => {{
4152
const CRYPT_SIZE: usize = 7 * kernel::hil::symmetric_encryption::AES128_BLOCK_SIZE;
4253
let virtual_aes = kernel::static_buf!(
@@ -61,29 +72,42 @@ macro_rules! aes_driver_component_static {
6172
};};
6273
}
6374

64-
pub struct AesVirtualComponent<A: 'static + AES128<'static> + AES128Ctr + AES128CBC + AES128ECB> {
65-
aes_mux: &'static capsules_core::virtualizers::virtual_aes_ccm::MuxAES128CCM<'static, A>,
75+
pub struct AesVirtualComponent<
76+
A: 'static + AES128<'static> + AES128Ctr + AES128CBC + AES128ECB,
77+
SP: 'static + SelectionPolicy<&'static VirtualAES128CCM<'static, A, SP>>,
78+
> {
79+
aes_mux: &'static capsules_core::virtualizers::virtual_aes_ccm::MuxAES128CCM<'static, A, SP>,
6680
}
6781

68-
impl<A: 'static + AES128<'static> + AES128Ctr + AES128CBC + AES128ECB> AesVirtualComponent<A> {
82+
impl<
83+
A: 'static + AES128<'static> + AES128Ctr + AES128CBC + AES128ECB,
84+
SP: 'static + SelectionPolicy<&'static VirtualAES128CCM<'static, A, SP>>,
85+
> AesVirtualComponent<A, SP>
86+
{
6987
pub fn new(
70-
aes_mux: &'static capsules_core::virtualizers::virtual_aes_ccm::MuxAES128CCM<'static, A>,
88+
aes_mux: &'static capsules_core::virtualizers::virtual_aes_ccm::MuxAES128CCM<
89+
'static,
90+
A,
91+
SP,
92+
>,
7193
) -> Self {
7294
Self { aes_mux }
7395
}
7496
}
7597

76-
impl<A: 'static + AES128<'static> + AES128Ctr + AES128CBC + AES128ECB> Component
77-
for AesVirtualComponent<A>
98+
impl<
99+
A: 'static + AES128<'static> + AES128Ctr + AES128CBC + AES128ECB,
100+
SP: 'static + SelectionPolicy<&'static VirtualAES128CCM<'static, A, SP>>,
101+
> Component for AesVirtualComponent<A, SP>
78102
{
79103
type StaticInput = (
80104
&'static mut MaybeUninit<
81-
capsules_core::virtualizers::virtual_aes_ccm::VirtualAES128CCM<'static, A>,
105+
capsules_core::virtualizers::virtual_aes_ccm::VirtualAES128CCM<'static, A, SP>,
82106
>,
83107
&'static mut MaybeUninit<[u8; CRYPT_SIZE]>,
84108
);
85109
type Output =
86-
&'static capsules_core::virtualizers::virtual_aes_ccm::VirtualAES128CCM<'static, A>;
110+
&'static capsules_core::virtualizers::virtual_aes_ccm::VirtualAES128CCM<'static, A, SP>;
87111

88112
fn finalize(self, static_buffer: Self::StaticInput) -> Self::Output {
89113
let crypt_buf = static_buffer.1.write([0; CRYPT_SIZE]);

0 commit comments

Comments
 (0)