Skip to content

Commit e57274b

Browse files
committed
patched all the virts
1 parent 730d364 commit e57274b

39 files changed

Lines changed: 914 additions & 361 deletions

File tree

boards/clue_nrf52840/src/main.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
use core::ptr::addr_of;
1414

15+
use capsules_core::virtualizers::selection_policy::RoundRobinPolicy;
1516
use capsules_core::virtualizers::virtual_aes_ccm::MuxAES128CCM;
1617

1718
use kernel::capabilities;
@@ -152,6 +153,7 @@ type RngDriver = components::rng::RngComponentType<nrf52840::trng::Trng<'static>
152153
type Ieee802154Driver = components::ieee802154::Ieee802154ComponentType<
153154
nrf52840::ieee802154_radio::Radio<'static>,
154155
nrf52840::aes::AesECB<'static>,
156+
RoundRobinPolicy,
155157
>;
156158

157159
type SchedulerInUse = components::sched::round_robin::RoundRobinComponentType;

boards/components/src/apds9960.rs

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44

55
//! Component for APDS9960 proximity sensor.
66
7+
use capsules_core::virtualizers::selection_policy::{RoundRobinPolicy, SelectionPolicy};
78
use capsules_core::virtualizers::virtual_i2c::{I2CDevice, MuxI2C};
89
use capsules_extra::apds9960::APDS9960;
910
use core::mem::MaybeUninit;
1011
use kernel::component::Component;
1112
use kernel::hil::gpio;
12-
use kernel::hil::i2c;
13+
use kernel::hil::i2c::{self, NoSMBus};
1314

1415
#[macro_export]
1516
macro_rules! apds9960_component_static {
@@ -28,15 +29,22 @@ macro_rules! apds9960_component_static {
2829
};};
2930
}
3031

31-
pub struct Apds9960Component<I: 'static + i2c::I2CMaster<'static>> {
32-
i2c_mux: &'static MuxI2C<'static, I>,
32+
pub struct Apds9960Component<
33+
I: 'static + i2c::I2CMaster<'static>,
34+
SPI: 'static + SelectionPolicy<&'static I2CDevice<'static, I, SPI>> = RoundRobinPolicy,
35+
> {
36+
i2c_mux: &'static MuxI2C<'static, I, NoSMBus, SPI>,
3337
i2c_address: u8,
3438
interrupt_pin: &'static dyn gpio::InterruptPin<'static>,
3539
}
3640

37-
impl<I: 'static + i2c::I2CMaster<'static>> Apds9960Component<I> {
41+
impl<
42+
I: 'static + i2c::I2CMaster<'static>,
43+
SPI: 'static + SelectionPolicy<&'static I2CDevice<'static, I, SPI>>,
44+
> Apds9960Component<I, SPI>
45+
{
3846
pub fn new(
39-
i2c_mux: &'static MuxI2C<'static, I>,
47+
i2c_mux: &'static MuxI2C<'static, I, NoSMBus, SPI>,
4048
i2c_address: u8,
4149
interrupt_pin: &'static dyn gpio::InterruptPin<'static>,
4250
) -> Self {
@@ -48,13 +56,17 @@ impl<I: 'static + i2c::I2CMaster<'static>> Apds9960Component<I> {
4856
}
4957
}
5058

51-
impl<I: 'static + i2c::I2CMaster<'static>> Component for Apds9960Component<I> {
59+
impl<
60+
I: 'static + i2c::I2CMaster<'static>,
61+
SPI: 'static + SelectionPolicy<&'static I2CDevice<'static, I, SPI>>,
62+
> Component for Apds9960Component<I, SPI>
63+
{
5264
type StaticInput = (
53-
&'static mut MaybeUninit<I2CDevice<'static, I>>,
54-
&'static mut MaybeUninit<APDS9960<'static, I2CDevice<'static, I>>>,
65+
&'static mut MaybeUninit<I2CDevice<'static, I, SPI>>,
66+
&'static mut MaybeUninit<APDS9960<'static, I2CDevice<'static, I, SPI>>>,
5567
&'static mut MaybeUninit<[u8; capsules_extra::apds9960::BUF_LEN]>,
5668
);
57-
type Output = &'static APDS9960<'static, I2CDevice<'static, I>>;
69+
type Output = &'static APDS9960<'static, I2CDevice<'static, I, SPI>>;
5870

5971
fn finalize(self, s: Self::StaticInput) -> Self::Output {
6072
let apds9960_i2c = s.0.write(I2CDevice::new(self.i2c_mux, self.i2c_address));

boards/components/src/atecc508a.rs

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,20 @@
1111
//! Atecc508aComponent::new(mux_i2c, 0x60).finalize(components::atecc508a_component_static!());
1212
//! ```
1313
14+
use capsules_core::virtualizers::selection_policy::SelectionPolicy;
1415
use capsules_core::virtualizers::virtual_i2c::{I2CDevice, MuxI2C};
1516
use capsules_extra::atecc508a::Atecc508a;
1617
use core::mem::MaybeUninit;
1718
use kernel::component::Component;
18-
use kernel::hil::i2c;
19+
use kernel::hil::i2c::{self, NoSMBus};
1920

2021
// Setup static space for the objects.
2122
#[macro_export]
2223
macro_rules! atecc508a_component_static {
23-
($I:ty $(,)?) => {{
24-
let i2c_device =
25-
kernel::static_buf!(capsules_core::virtualizers::virtual_i2c::I2CDevice<'static, $I>);
24+
($I:ty, $SP:ty $(,)?) => {{
25+
let i2c_device = kernel::static_buf!(
26+
capsules_core::virtualizers::virtual_i2c::I2CDevice<'static, $I, $SP>
27+
);
2628
let i2c_buffer = kernel::static_buf!([u8; 140]);
2729
let entropy_buffer = kernel::static_buf!([u8; 32]);
2830
let digest_buffer = kernel::static_buf!([u8; 64]);
@@ -38,16 +40,31 @@ macro_rules! atecc508a_component_static {
3840
atecc508a,
3941
)
4042
};};
43+
($I:ty $(,)?) => {{
44+
use capsules_core::virtualizers::selection_policy::RoundRobinPolicy;
45+
$crate::atecc508a_component_static!($I, RoundRobinPolicy)
46+
};};
4147
}
4248

43-
pub struct Atecc508aComponent<I: 'static + i2c::I2CMaster<'static>> {
44-
i2c_mux: &'static MuxI2C<'static, I>,
49+
pub struct Atecc508aComponent<
50+
I: 'static + i2c::I2CMaster<'static>,
51+
SPI: 'static + SelectionPolicy<&'static I2CDevice<'static, I, SPI>>,
52+
> {
53+
i2c_mux: &'static MuxI2C<'static, I, NoSMBus, SPI>,
4554
i2c_address: u8,
4655
wakeup_device: fn(),
4756
}
4857

49-
impl<I: 'static + i2c::I2CMaster<'static>> Atecc508aComponent<I> {
50-
pub fn new(i2c: &'static MuxI2C<'static, I>, i2c_address: u8, wakeup_device: fn()) -> Self {
58+
impl<
59+
I: 'static + i2c::I2CMaster<'static>,
60+
SPI: 'static + SelectionPolicy<&'static I2CDevice<'static, I, SPI>>,
61+
> Atecc508aComponent<I, SPI>
62+
{
63+
pub fn new(
64+
i2c: &'static MuxI2C<'static, I, NoSMBus, SPI>,
65+
i2c_address: u8,
66+
wakeup_device: fn(),
67+
) -> Self {
5168
Atecc508aComponent {
5269
i2c_mux: i2c,
5370
i2c_address,
@@ -56,9 +73,13 @@ impl<I: 'static + i2c::I2CMaster<'static>> Atecc508aComponent<I> {
5673
}
5774
}
5875

59-
impl<I: 'static + i2c::I2CMaster<'static>> Component for Atecc508aComponent<I> {
76+
impl<
77+
I: 'static + i2c::I2CMaster<'static>,
78+
SPI: 'static + SelectionPolicy<&'static I2CDevice<'static, I, SPI>>,
79+
> Component for Atecc508aComponent<I, SPI>
80+
{
6081
type StaticInput = (
61-
&'static mut MaybeUninit<I2CDevice<'static, I>>,
82+
&'static mut MaybeUninit<I2CDevice<'static, I, SPI>>,
6283
&'static mut MaybeUninit<[u8; 140]>,
6384
&'static mut MaybeUninit<[u8; 32]>,
6485
&'static mut MaybeUninit<[u8; 64]>,

boards/components/src/bme280.rs

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,53 +23,70 @@
2323
//! .finalize(components::humidity_component_static!());
2424
//! ```
2525
26+
use capsules_core::virtualizers::selection_policy::SelectionPolicy;
2627
use capsules_core::virtualizers::virtual_i2c::{I2CDevice, MuxI2C};
2728
use capsules_extra::bme280::Bme280;
2829
use core::mem::MaybeUninit;
2930
use kernel::component::Component;
30-
use kernel::hil::i2c;
31+
use kernel::hil::i2c::{self, NoSMBus};
3132

3233
// Setup static space for the objects.
3334
#[macro_export]
3435
macro_rules! bme280_component_static {
35-
($I:ty $(,)?) => {{
36-
let i2c_device =
37-
kernel::static_buf!(capsules_core::virtualizers::virtual_i2c::I2CDevice<'static, $I>);
36+
($I:ty, $SP:ty $(,)?) => {{
37+
let i2c_device = kernel::static_buf!(
38+
capsules_core::virtualizers::virtual_i2c::I2CDevice<'static, $I, $SP>
39+
);
3840
let i2c_buffer = kernel::static_buf!([u8; 26]);
3941
let bme280 = kernel::static_buf!(
4042
capsules_extra::bme280::Bme280<
4143
'static,
42-
capsules_core::virtualizers::virtual_i2c::I2CDevice<$I>,
44+
capsules_core::virtualizers::virtual_i2c::I2CDevice<$I, $SP>,
4345
>
4446
);
4547

4648
(i2c_device, i2c_buffer, bme280)
4749
};};
50+
($I:ty $(,)?) => {{
51+
use capsules_core::virtualizers::selection_policy::RoundRobinPolicy;
52+
$crate::bme280_component_static!($I, RoundRobinPolicy)
53+
};};
4854
}
4955

5056
pub type Bme280ComponentType<I> = capsules_extra::bme280::Bme280<'static, I>;
5157

52-
pub struct Bme280Component<I: 'static + i2c::I2CMaster<'static>> {
53-
i2c_mux: &'static MuxI2C<'static, I>,
58+
pub struct Bme280Component<
59+
I: 'static + i2c::I2CMaster<'static>,
60+
SPI: 'static + SelectionPolicy<&'static I2CDevice<'static, I, SPI>>,
61+
> {
62+
i2c_mux: &'static MuxI2C<'static, I, NoSMBus, SPI>,
5463
i2c_address: u8,
5564
}
5665

57-
impl<I: 'static + i2c::I2CMaster<'static>> Bme280Component<I> {
58-
pub fn new(i2c: &'static MuxI2C<'static, I>, i2c_address: u8) -> Self {
66+
impl<
67+
I: 'static + i2c::I2CMaster<'static>,
68+
SPI: 'static + SelectionPolicy<&'static I2CDevice<'static, I, SPI>>,
69+
> Bme280Component<I, SPI>
70+
{
71+
pub fn new(i2c: &'static MuxI2C<'static, I, NoSMBus, SPI>, i2c_address: u8) -> Self {
5972
Bme280Component {
6073
i2c_mux: i2c,
6174
i2c_address,
6275
}
6376
}
6477
}
6578

66-
impl<I: 'static + i2c::I2CMaster<'static>> Component for Bme280Component<I> {
79+
impl<
80+
I: 'static + i2c::I2CMaster<'static>,
81+
SPI: 'static + SelectionPolicy<&'static I2CDevice<'static, I, SPI>>,
82+
> Component for Bme280Component<I, SPI>
83+
{
6784
type StaticInput = (
68-
&'static mut MaybeUninit<I2CDevice<'static, I>>,
85+
&'static mut MaybeUninit<I2CDevice<'static, I, SPI>>,
6986
&'static mut MaybeUninit<[u8; 26]>,
70-
&'static mut MaybeUninit<Bme280<'static, I2CDevice<'static, I>>>,
87+
&'static mut MaybeUninit<Bme280<'static, I2CDevice<'static, I, SPI>>>,
7188
);
72-
type Output = &'static Bme280<'static, I2CDevice<'static, I>>;
89+
type Output = &'static Bme280<'static, I2CDevice<'static, I, SPI>>;
7390

7491
fn finalize(self, s: Self::StaticInput) -> Self::Output {
7592
let bme280_i2c = s.0.write(I2CDevice::new(self.i2c_mux, self.i2c_address));

boards/components/src/bmm150.rs

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,51 +14,67 @@
1414
//! .finalize(components::ninedof_component_static!(BMM150));
1515
//! ```
1616
17+
use capsules_core::virtualizers::selection_policy::SelectionPolicy;
1718
use capsules_core::virtualizers::virtual_i2c::{I2CDevice, MuxI2C};
1819
use capsules_extra::bmm150::BMM150;
1920
use core::mem::MaybeUninit;
2021
use kernel::component::Component;
21-
use kernel::hil::i2c;
22+
use kernel::hil::i2c::{self, NoSMBus};
2223

2324
// Setup static space for the objects.
2425
#[macro_export]
2526
macro_rules! bmm150_component_static {
26-
($I:ty $(,)?) => {{
27+
($I:ty, $SP:ty $(,)?) => {{
2728
let i2c_device =
28-
kernel::static_buf!(capsules_core::virtualizers::virtual_i2c::I2CDevice<$I>);
29+
kernel::static_buf!(capsules_core::virtualizers::virtual_i2c::I2CDevice<$I, $SP>);
2930
let buffer = kernel::static_buf!([u8; 8]);
3031
let bmm150 = kernel::static_buf!(
3132
capsules_extra::bmm150::BMM150<
3233
'static,
33-
capsules_core::virtualizers::virtual_i2c::I2CDevice<$I>,
34+
capsules_core::virtualizers::virtual_i2c::I2CDevice<$I, $SP>,
3435
>
3536
);
3637

3738
(i2c_device, buffer, bmm150)
3839
};};
40+
($I:ty $(,)?) => {{
41+
use capsules_core::virtualizers::selection_policy::RoundRobinPolicy;
42+
$crate::bmm150_component_static!($I, RoundRobinPolicy)
43+
};};
3944
}
4045

41-
pub struct BMM150Component<I: 'static + i2c::I2CMaster<'static>> {
42-
i2c_mux: &'static MuxI2C<'static, I>,
46+
pub struct BMM150Component<
47+
I: 'static + i2c::I2CMaster<'static>,
48+
SPI: 'static + SelectionPolicy<&'static I2CDevice<'static, I, SPI>>,
49+
> {
50+
i2c_mux: &'static MuxI2C<'static, I, NoSMBus, SPI>,
4351
i2c_address: u8,
4452
}
4553

46-
impl<I: 'static + i2c::I2CMaster<'static>> BMM150Component<I> {
47-
pub fn new(i2c: &'static MuxI2C<'static, I>, i2c_address: u8) -> Self {
54+
impl<
55+
I: 'static + i2c::I2CMaster<'static>,
56+
SPI: 'static + SelectionPolicy<&'static I2CDevice<'static, I, SPI>>,
57+
> BMM150Component<I, SPI>
58+
{
59+
pub fn new(i2c: &'static MuxI2C<'static, I, NoSMBus, SPI>, i2c_address: u8) -> Self {
4860
BMM150Component {
4961
i2c_mux: i2c,
5062
i2c_address,
5163
}
5264
}
5365
}
5466

55-
impl<I: 'static + i2c::I2CMaster<'static>> Component for BMM150Component<I> {
67+
impl<
68+
I: 'static + i2c::I2CMaster<'static>,
69+
SPI: 'static + SelectionPolicy<&'static I2CDevice<'static, I, SPI>>,
70+
> Component for BMM150Component<I, SPI>
71+
{
5672
type StaticInput = (
57-
&'static mut MaybeUninit<I2CDevice<'static, I>>,
73+
&'static mut MaybeUninit<I2CDevice<'static, I, SPI>>,
5874
&'static mut MaybeUninit<[u8; 8]>,
59-
&'static mut MaybeUninit<BMM150<'static, I2CDevice<'static, I>>>,
75+
&'static mut MaybeUninit<BMM150<'static, I2CDevice<'static, I, SPI>>>,
6076
);
61-
type Output = &'static BMM150<'static, I2CDevice<'static, I>>;
77+
type Output = &'static BMM150<'static, I2CDevice<'static, I, SPI>>;
6278

6379
fn finalize(self, static_buffer: Self::StaticInput) -> Self::Output {
6480
let bmm150_i2c = static_buffer

0 commit comments

Comments
 (0)