aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgoueslati <[email protected]>2023-06-12 14:44:30 +0100
committergoueslati <[email protected]>2023-06-12 14:44:30 +0100
commita1b27783a645673500833d13bbabb21d4e4202df (patch)
treec97a00a76e54ae70893797f73ec57e3a5e26776a
parentcf83f6820cf2c6ece607cd60cfdab9d5e47efd04 (diff)
fix build
-rw-r--r--embassy-stm32-wpan/Cargo.toml24
-rw-r--r--embassy-stm32-wpan/build.rs34
-rw-r--r--embassy-stm32-wpan/src/lib.rs18
-rw-r--r--examples/stm32wb/Cargo.toml1
-rw-r--r--tests/stm32/src/bin/tl_mbox.rs11
5 files changed, 70 insertions, 18 deletions
diff --git a/embassy-stm32-wpan/Cargo.toml b/embassy-stm32-wpan/Cargo.toml
index a6673d472..058d0e29f 100644
--- a/embassy-stm32-wpan/Cargo.toml
+++ b/embassy-stm32-wpan/Cargo.toml
@@ -5,13 +5,12 @@ edition = "2021"
5license = "MIT OR Apache-2.0" 5license = "MIT OR Apache-2.0"
6 6
7[dependencies] 7[dependencies]
8embassy-stm32 = { version = "0.1.0", path = "../embassy-stm32", features = ["stm32wb55rg"] } 8embassy-stm32 = { version = "0.1.0", path = "../embassy-stm32" }
9embassy-sync = { version = "0.2.0", path = "../embassy-sync" } 9embassy-sync = { version = "0.2.0", path = "../embassy-sync" }
10embassy-time = { version = "0.1.0", path = "../embassy-time", optional = true } 10embassy-time = { version = "0.1.0", path = "../embassy-time", optional = true }
11embassy-futures = { version = "0.1.0", path = "../embassy-futures" } 11embassy-futures = { version = "0.1.0", path = "../embassy-futures" }
12embassy-cortex-m = { version = "0.1.0", path = "../embassy-cortex-m", features = ["prio-bits-4"]} 12embassy-hal-common = { version = "0.1.0", path = "../embassy-hal-common" }
13embassy-hal-common = {version = "0.1.0", path = "../embassy-hal-common" } 13embassy-embedded-hal = { version = "0.1.0", path = "../embassy-embedded-hal" }
14embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" }
15 14
16defmt = { version = "0.3", optional = true } 15defmt = { version = "0.3", optional = true }
17cortex-m = "0.7.6" 16cortex-m = "0.7.6"
@@ -21,3 +20,20 @@ bit_field = "0.10.2"
21 20
22[features] 21[features]
23defmt = ["dep:defmt", "embassy-sync/defmt", "embassy-embedded-hal/defmt", "embassy-hal-common/defmt"] 22defmt = ["dep:defmt", "embassy-sync/defmt", "embassy-embedded-hal/defmt", "embassy-hal-common/defmt"]
23
24stm32wb10cc = [ "embassy-stm32/stm32wb10cc" ]
25stm32wb15cc = [ "embassy-stm32/stm32wb15cc" ]
26stm32wb30ce = [ "embassy-stm32/stm32wb30ce" ]
27stm32wb35cc = [ "embassy-stm32/stm32wb35cc" ]
28stm32wb35ce = [ "embassy-stm32/stm32wb35ce" ]
29stm32wb50cg = [ "embassy-stm32/stm32wb50cg" ]
30stm32wb55cc = [ "embassy-stm32/stm32wb55cc" ]
31stm32wb55ce = [ "embassy-stm32/stm32wb55ce" ]
32stm32wb55cg = [ "embassy-stm32/stm32wb55cg" ]
33stm32wb55rc = [ "embassy-stm32/stm32wb55rc" ]
34stm32wb55re = [ "embassy-stm32/stm32wb55re" ]
35stm32wb55rg = [ "embassy-stm32/stm32wb55rg" ]
36stm32wb55vc = [ "embassy-stm32/stm32wb55vc" ]
37stm32wb55ve = [ "embassy-stm32/stm32wb55ve" ]
38stm32wb55vg = [ "embassy-stm32/stm32wb55vg" ]
39stm32wb55vy = [ "embassy-stm32/stm32wb55vy" ] \ No newline at end of file
diff --git a/embassy-stm32-wpan/build.rs b/embassy-stm32-wpan/build.rs
new file mode 100644
index 000000000..4edf73d59
--- /dev/null
+++ b/embassy-stm32-wpan/build.rs
@@ -0,0 +1,34 @@
1use std::env;
2
3fn main() {
4 match env::vars()
5 .map(|(a, _)| a)
6 .filter(|x| x.starts_with("CARGO_FEATURE_STM32"))
7 .get_one()
8 {
9 Ok(_) => {}
10 Err(GetOneError::None) => panic!("No stm32xx Cargo feature enabled"),
11 Err(GetOneError::Multiple) => panic!("Multiple stm32xx Cargo features enabled"),
12 }
13}
14
15enum GetOneError {
16 None,
17 Multiple,
18}
19
20trait IteratorExt: Iterator {
21 fn get_one(self) -> Result<Self::Item, GetOneError>;
22}
23
24impl<T: Iterator> IteratorExt for T {
25 fn get_one(mut self) -> Result<Self::Item, GetOneError> {
26 match self.next() {
27 None => Err(GetOneError::None),
28 Some(res) => match self.next() {
29 Some(_) => Err(GetOneError::Multiple),
30 None => Ok(res),
31 },
32 }
33 }
34}
diff --git a/embassy-stm32-wpan/src/lib.rs b/embassy-stm32-wpan/src/lib.rs
index b3206428e..c37b67dc4 100644
--- a/embassy-stm32-wpan/src/lib.rs
+++ b/embassy-stm32-wpan/src/lib.rs
@@ -6,10 +6,10 @@ pub mod fmt;
6use core::mem::MaybeUninit; 6use core::mem::MaybeUninit;
7 7
8use cmd::CmdPacket; 8use cmd::CmdPacket;
9use embassy_cortex_m::interrupt::Interrupt;
10use embassy_futures::block_on; 9use embassy_futures::block_on;
11use embassy_hal_common::{into_ref, Peripheral, PeripheralRef}; 10use embassy_hal_common::{into_ref, Peripheral, PeripheralRef};
12use embassy_stm32::interrupt; 11use embassy_stm32::interrupt;
12use embassy_stm32::interrupt::typelevel::Interrupt;
13use embassy_stm32::ipcc::{Config, Ipcc}; 13use embassy_stm32::ipcc::{Config, Ipcc};
14use embassy_stm32::peripherals::IPCC; 14use embassy_stm32::peripherals::IPCC;
15use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; 15use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex;
@@ -37,7 +37,7 @@ pub mod unsafe_linked_list;
37/// Interrupt handler. 37/// Interrupt handler.
38pub struct ReceiveInterruptHandler {} 38pub struct ReceiveInterruptHandler {}
39 39
40impl interrupt::Handler<interrupt::IPCC_C1_RX> for ReceiveInterruptHandler { 40impl interrupt::typelevel::Handler<interrupt::typelevel::IPCC_C1_RX> for ReceiveInterruptHandler {
41 unsafe fn on_interrupt() { 41 unsafe fn on_interrupt() {
42 if Ipcc::is_rx_pending(channels::cpu2::IPCC_SYSTEM_EVENT_CHANNEL) { 42 if Ipcc::is_rx_pending(channels::cpu2::IPCC_SYSTEM_EVENT_CHANNEL) {
43 debug!("RX SYS evt"); 43 debug!("RX SYS evt");
@@ -53,7 +53,7 @@ impl interrupt::Handler<interrupt::IPCC_C1_RX> for ReceiveInterruptHandler {
53 53
54pub struct TransmitInterruptHandler {} 54pub struct TransmitInterruptHandler {}
55 55
56impl interrupt::Handler<interrupt::IPCC_C1_TX> for TransmitInterruptHandler { 56impl interrupt::typelevel::Handler<interrupt::typelevel::IPCC_C1_TX> for TransmitInterruptHandler {
57 unsafe fn on_interrupt() { 57 unsafe fn on_interrupt() {
58 if Ipcc::is_tx_pending(channels::cpu1::IPCC_SYSTEM_CMD_RSP_CHANNEL) { 58 if Ipcc::is_tx_pending(channels::cpu1::IPCC_SYSTEM_CMD_RSP_CHANNEL) {
59 debug!("TX SYS cmd rsp"); 59 debug!("TX SYS cmd rsp");
@@ -182,8 +182,8 @@ pub struct TlMbox<'d> {
182impl<'d> TlMbox<'d> { 182impl<'d> TlMbox<'d> {
183 pub fn init( 183 pub fn init(
184 ipcc: impl Peripheral<P = IPCC> + 'd, 184 ipcc: impl Peripheral<P = IPCC> + 'd,
185 _irqs: impl interrupt::Binding<interrupt::IPCC_C1_RX, ReceiveInterruptHandler> 185 _irqs: impl interrupt::typelevel::Binding<interrupt::typelevel::IPCC_C1_RX, ReceiveInterruptHandler>
186 + interrupt::Binding<interrupt::IPCC_C1_TX, TransmitInterruptHandler>, 186 + interrupt::typelevel::Binding<interrupt::typelevel::IPCC_C1_TX, TransmitInterruptHandler>,
187 config: Config, 187 config: Config,
188 ) -> Self { 188 ) -> Self {
189 into_ref!(ipcc); 189 into_ref!(ipcc);
@@ -223,11 +223,11 @@ impl<'d> TlMbox<'d> {
223 mm::MemoryManager::enable(); 223 mm::MemoryManager::enable();
224 224
225 // enable interrupts 225 // enable interrupts
226 interrupt::IPCC_C1_RX::unpend(); 226 interrupt::typelevel::IPCC_C1_RX::unpend();
227 interrupt::IPCC_C1_TX::unpend(); 227 interrupt::typelevel::IPCC_C1_TX::unpend();
228 228
229 unsafe { interrupt::IPCC_C1_RX::enable() }; 229 unsafe { interrupt::typelevel::IPCC_C1_RX::enable() };
230 unsafe { interrupt::IPCC_C1_TX::enable() }; 230 unsafe { interrupt::typelevel::IPCC_C1_TX::enable() };
231 231
232 STATE.reset(); 232 STATE.reset();
233 233
diff --git a/examples/stm32wb/Cargo.toml b/examples/stm32wb/Cargo.toml
index 14897b171..5b82dd83b 100644
--- a/examples/stm32wb/Cargo.toml
+++ b/examples/stm32wb/Cargo.toml
@@ -9,6 +9,7 @@ embassy-sync = { version = "0.2.0", path = "../../embassy-sync", features = ["de
9embassy-executor = { version = "0.2.0", path = "../../embassy-executor", features = ["nightly", "arch-cortex-m", "executor-thread", "defmt", "integrated-timers"] } 9embassy-executor = { version = "0.2.0", path = "../../embassy-executor", features = ["nightly", "arch-cortex-m", "executor-thread", "defmt", "integrated-timers"] }
10embassy-time = { version = "0.1.0", path = "../../embassy-time", features = ["defmt", "defmt-timestamp-uptime", "tick-hz-32_768"] } 10embassy-time = { version = "0.1.0", path = "../../embassy-time", features = ["defmt", "defmt-timestamp-uptime", "tick-hz-32_768"] }
11embassy-stm32 = { version = "0.1.0", path = "../../embassy-stm32", features = ["nightly", "defmt", "stm32wb55rg", "time-driver-any", "memory-x", "exti"] } 11embassy-stm32 = { version = "0.1.0", path = "../../embassy-stm32", features = ["nightly", "defmt", "stm32wb55rg", "time-driver-any", "memory-x", "exti"] }
12embassy-stm32-wpan = { version = "0.1.0", path = "../../embassy-stm32-wpan", features = ["defmt"] }
12 13
13defmt = "0.3" 14defmt = "0.3"
14defmt-rtt = "0.4" 15defmt-rtt = "0.4"
diff --git a/tests/stm32/src/bin/tl_mbox.rs b/tests/stm32/src/bin/tl_mbox.rs
index fab9f0e1b..0f643d578 100644
--- a/tests/stm32/src/bin/tl_mbox.rs
+++ b/tests/stm32/src/bin/tl_mbox.rs
@@ -8,13 +8,14 @@ mod common;
8 8
9use common::*; 9use common::*;
10use embassy_executor::Spawner; 10use embassy_executor::Spawner;
11use embassy_stm32::tl_mbox::{Config, TlMbox}; 11use embassy_stm32::bind_interrupts;
12use embassy_stm32::{bind_interrupts, tl_mbox}; 12use embassy_stm32::ipcc::Config;
13use embassy_stm32_wpan::TlMbox;
13use embassy_time::{Duration, Timer}; 14use embassy_time::{Duration, Timer};
14 15
15bind_interrupts!(struct Irqs{ 16bind_interrupts!(struct Irqs{
16 IPCC_C1_RX => tl_mbox::ReceiveInterruptHandler; 17 IPCC_C1_RX => embassy_stm32_wpan::ReceiveInterruptHandler;
17 IPCC_C1_TX => tl_mbox::TransmitInterruptHandler; 18 IPCC_C1_TX => embassy_stm32_wpan::TransmitInterruptHandler;
18}); 19});
19 20
20#[embassy_executor::main] 21#[embassy_executor::main]
@@ -23,7 +24,7 @@ async fn main(_spawner: Spawner) {
23 info!("Hello World!"); 24 info!("Hello World!");
24 25
25 let config = Config::default(); 26 let config = Config::default();
26 let mbox = TlMbox::new(p.IPCC, Irqs, config); 27 let mbox = TlMbox::init(p.IPCC, Irqs, config);
27 28
28 loop { 29 loop {
29 let wireless_fw_info = mbox.wireless_fw_info(); 30 let wireless_fw_info = mbox.wireless_fw_info();