aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/stm32/Cargo.toml18
-rw-r--r--tests/stm32/src/bin/adc.rs39
-rw-r--r--tests/stm32/src/bin/eth.rs13
-rw-r--r--tests/stm32/src/bin/hsem.rs50
-rw-r--r--tests/stm32/src/bin/stop.rs14
-rw-r--r--tests/stm32/src/bin/wpan_ble.rs120
-rw-r--r--tests/stm32/src/bin/wpan_mac.rs29
-rw-r--r--tests/stm32/src/common.rs1
8 files changed, 181 insertions, 103 deletions
diff --git a/tests/stm32/Cargo.toml b/tests/stm32/Cargo.toml
index b92b47be2..496a9de18 100644
--- a/tests/stm32/Cargo.toml
+++ b/tests/stm32/Cargo.toml
@@ -31,9 +31,9 @@ stm32l4r5zi = ["embassy-stm32/stm32l4r5zi", "chrono", "not-gpdma", "rng", "dual-
31stm32l552ze = ["embassy-stm32/stm32l552ze", "not-gpdma", "rng", "hash", "dual-bank"] 31stm32l552ze = ["embassy-stm32/stm32l552ze", "not-gpdma", "rng", "hash", "dual-bank"]
32stm32u585ai = ["embassy-stm32/stm32u585ai", "spi-v345", "chrono", "rng", "hash", "cordic"] 32stm32u585ai = ["embassy-stm32/stm32u585ai", "spi-v345", "chrono", "rng", "hash", "cordic"]
33stm32u5a5zj = ["embassy-stm32/stm32u5a5zj", "spi-v345", "chrono", "rng", "hash"] # FIXME: cordic test cause it crash 33stm32u5a5zj = ["embassy-stm32/stm32u5a5zj", "spi-v345", "chrono", "rng", "hash"] # FIXME: cordic test cause it crash
34stm32wb55rg = ["embassy-stm32/stm32wb55rg", "chrono", "not-gpdma", "ble", "mac" , "rng"] 34stm32wb55rg = ["embassy-stm32/stm32wb55rg", "chrono", "not-gpdma", "ble", "mac" , "rng", "hsem", "stop"]
35stm32wba52cg = ["embassy-stm32/stm32wba52cg", "spi-v345", "chrono", "rng", "hash"] 35stm32wba52cg = ["embassy-stm32/stm32wba52cg", "spi-v345", "chrono", "rng", "hash", "adc"]
36stm32wl55jc = ["embassy-stm32/stm32wl55jc-cm4", "not-gpdma", "rng", "chrono"] 36stm32wl55jc = ["embassy-stm32/stm32wl55jc-cm4", "not-gpdma", "rng", "chrono", "hsem"]
37stm32f091rc = ["embassy-stm32/stm32f091rc", "cm0", "not-gpdma", "chrono"] 37stm32f091rc = ["embassy-stm32/stm32f091rc", "cm0", "not-gpdma", "chrono"]
38stm32h503rb = ["embassy-stm32/stm32h503rb", "spi-v345", "rng", "stop"] 38stm32h503rb = ["embassy-stm32/stm32h503rb", "spi-v345", "rng", "stop"]
39stm32h7s3l8 = ["embassy-stm32/stm32h7s3l8", "spi-v345", "rng", "cordic", "hash-v34"] # TODO: fdcan crashes, cryp dma hangs. 39stm32h7s3l8 = ["embassy-stm32/stm32h7s3l8", "spi-v345", "rng", "cordic", "hash-v34"] # TODO: fdcan crashes, cryp dma hangs.
@@ -56,8 +56,10 @@ mac = ["dep:embassy-stm32-wpan", "embassy-stm32-wpan/mac"]
56embassy-stm32-wpan = [] 56embassy-stm32-wpan = []
57not-gpdma = [] 57not-gpdma = []
58dac = [] 58dac = []
59adc = []
59ucpd = [] 60ucpd = []
60cordic = ["dep:num-traits"] 61cordic = ["dep:num-traits"]
62hsem = []
61dual-bank = ["embassy-stm32/dual-bank"] 63dual-bank = ["embassy-stm32/dual-bank"]
62single-bank = ["embassy-stm32/single-bank"] 64single-bank = ["embassy-stm32/single-bank"]
63eeprom = [] 65eeprom = []
@@ -110,6 +112,11 @@ path = "src/bin/afio.rs"
110required-features = [ "afio",] 112required-features = [ "afio",]
111 113
112[[bin]] 114[[bin]]
115name = "adc"
116path = "src/bin/adc.rs"
117required-features = [ "adc",]
118
119[[bin]]
113name = "can" 120name = "can"
114path = "src/bin/can.rs" 121path = "src/bin/can.rs"
115required-features = [ "can",] 122required-features = [ "can",]
@@ -224,6 +231,11 @@ name = "wpan_mac"
224path = "src/bin/wpan_mac.rs" 231path = "src/bin/wpan_mac.rs"
225required-features = [ "mac",] 232required-features = [ "mac",]
226 233
234[[bin]]
235name = "hsem"
236path = "src/bin/hsem.rs"
237required-features = [ "hsem",]
238
227# END TESTS 239# END TESTS
228 240
229[profile.dev] 241[profile.dev]
diff --git a/tests/stm32/src/bin/adc.rs b/tests/stm32/src/bin/adc.rs
new file mode 100644
index 000000000..6cedc6498
--- /dev/null
+++ b/tests/stm32/src/bin/adc.rs
@@ -0,0 +1,39 @@
1#![no_std]
2#![no_main]
3
4// required-features: dac
5
6#[path = "../common.rs"]
7mod common;
8
9use common::*;
10use embassy_executor::Spawner;
11use embassy_stm32::adc::{Adc, SampleTime};
12use embassy_time::Timer;
13use {defmt_rtt as _, panic_probe as _};
14
15#[embassy_executor::main]
16async fn main(_spawner: Spawner) {
17 // Initialize the board and obtain a Peripherals instance
18 let p: embassy_stm32::Peripherals = init();
19
20 let adc = peri!(p, ADC);
21 let mut adc_pin = peri!(p, DAC_PIN);
22
23 let mut adc = Adc::new_adc4(adc);
24
25 // Now wait a little to obtain a stable value
26 Timer::after_millis(30).await;
27 let _ = adc.blocking_read(&mut adc_pin, SampleTime::from_bits(0));
28
29 for _ in 0..=255 {
30 // Now wait a little to obtain a stable value
31 Timer::after_millis(30).await;
32
33 // Need to steal the peripherals here because PA4 is obviously in use already
34 let _ = adc.blocking_read(&mut adc_pin, SampleTime::from_bits(0));
35 }
36
37 info!("Test OK");
38 cortex_m::asm::bkpt();
39}
diff --git a/tests/stm32/src/bin/eth.rs b/tests/stm32/src/bin/eth.rs
index a65682a02..ffc76b96f 100644
--- a/tests/stm32/src/bin/eth.rs
+++ b/tests/stm32/src/bin/eth.rs
@@ -7,8 +7,8 @@ mod common;
7use common::*; 7use common::*;
8use embassy_executor::Spawner; 8use embassy_executor::Spawner;
9use embassy_net::StackResources; 9use embassy_net::StackResources;
10use embassy_stm32::eth::{Ethernet, GenericPhy, PacketQueue}; 10use embassy_stm32::eth::{Ethernet, GenericPhy, PacketQueue, Sma};
11use embassy_stm32::peripherals::ETH; 11use embassy_stm32::peripherals::{ETH, ETH_SMA};
12use embassy_stm32::rng::Rng; 12use embassy_stm32::rng::Rng;
13use embassy_stm32::{bind_interrupts, eth, peripherals, rng}; 13use embassy_stm32::{bind_interrupts, eth, peripherals, rng};
14use static_cell::StaticCell; 14use static_cell::StaticCell;
@@ -27,7 +27,7 @@ bind_interrupts!(struct Irqs {
27 RNG => rng::InterruptHandler<peripherals::RNG>; 27 RNG => rng::InterruptHandler<peripherals::RNG>;
28}); 28});
29 29
30type Device = Ethernet<'static, ETH, GenericPhy>; 30type Device = Ethernet<'static, ETH, GenericPhy<Sma<'static, ETH_SMA>>>;
31 31
32#[embassy_executor::task] 32#[embassy_executor::task]
33async fn net_task(mut runner: embassy_net::Runner<'static, Device>) -> ! { 33async fn net_task(mut runner: embassy_net::Runner<'static, Device>) -> ! {
@@ -69,13 +69,12 @@ async fn main(spawner: Spawner) {
69 const PACKET_QUEUE_SIZE: usize = 4; 69 const PACKET_QUEUE_SIZE: usize = 4;
70 70
71 static PACKETS: StaticCell<PacketQueue<PACKET_QUEUE_SIZE, PACKET_QUEUE_SIZE>> = StaticCell::new(); 71 static PACKETS: StaticCell<PacketQueue<PACKET_QUEUE_SIZE, PACKET_QUEUE_SIZE>> = StaticCell::new();
72
72 let device = Ethernet::new( 73 let device = Ethernet::new(
73 PACKETS.init(PacketQueue::<PACKET_QUEUE_SIZE, PACKET_QUEUE_SIZE>::new()), 74 PACKETS.init(PacketQueue::<PACKET_QUEUE_SIZE, PACKET_QUEUE_SIZE>::new()),
74 p.ETH, 75 p.ETH,
75 Irqs, 76 Irqs,
76 p.PA1, 77 p.PA1,
77 p.PA2,
78 p.PC1,
79 p.PA7, 78 p.PA7,
80 p.PC4, 79 p.PC4,
81 p.PC5, 80 p.PC5,
@@ -85,8 +84,10 @@ async fn main(spawner: Spawner) {
85 #[cfg(feature = "stm32h563zi")] 84 #[cfg(feature = "stm32h563zi")]
86 p.PB15, 85 p.PB15,
87 p.PG11, 86 p.PG11,
88 GenericPhy::new_auto(),
89 mac_addr, 87 mac_addr,
88 p.ETH_SMA,
89 p.PA2,
90 p.PC1,
90 ); 91 );
91 92
92 let config = embassy_net::Config::dhcpv4(Default::default()); 93 let config = embassy_net::Config::dhcpv4(Default::default());
diff --git a/tests/stm32/src/bin/hsem.rs b/tests/stm32/src/bin/hsem.rs
new file mode 100644
index 000000000..fa69f22b2
--- /dev/null
+++ b/tests/stm32/src/bin/hsem.rs
@@ -0,0 +1,50 @@
1// required-features: hsem
2#![no_std]
3#![no_main]
4
5#[path = "../common.rs"]
6mod common;
7
8use common::*;
9use embassy_executor::Spawner;
10use embassy_stm32::bind_interrupts;
11use embassy_stm32::hsem::{HardwareSemaphore, HardwareSemaphoreInterruptHandler};
12use embassy_stm32::peripherals::HSEM;
13
14bind_interrupts!(struct Irqs{
15 HSEM => HardwareSemaphoreInterruptHandler<HSEM>;
16});
17
18#[embassy_executor::main]
19async fn main(_spawner: Spawner) {
20 let p: embassy_stm32::Peripherals = init();
21
22 let hsem = HardwareSemaphore::new(p.HSEM, Irqs);
23
24 // if hsem.channel_for(SemaphoreNumber::Channel5).is_semaphore_locked() {
25 // defmt::panic!("Semaphore 5 already locked!")
26 // }
27 //
28 // hsem.channel_for(SemaphoreNumber::Channel5).one_step_lock().unwrap();
29 // hsem.channel_for(SemaphoreNumber::Channel1).two_step_lock(0).unwrap();
30 //
31 // hsem.channel_for(SemaphoreNumber::Channel5).unlock(0);
32
33 #[cfg(feature = "stm32wb55rg")]
34 let [_channel1, _channel2, mut channel5, _channel6] = hsem.split();
35 #[cfg(not(feature = "stm32wb55rg"))]
36 let [_channel1, _channel2, _channel3, _channel4, mut channel5, _channel6] = hsem.split();
37
38 info!("Locking channel 5");
39
40 let mutex = channel5.lock(0).await;
41
42 info!("Locked channel 5");
43
44 drop(mutex);
45
46 info!("Unlocked channel 5");
47
48 info!("Test OK");
49 cortex_m::asm::bkpt();
50}
diff --git a/tests/stm32/src/bin/stop.rs b/tests/stm32/src/bin/stop.rs
index 1fe65d867..83c375bc5 100644
--- a/tests/stm32/src/bin/stop.rs
+++ b/tests/stm32/src/bin/stop.rs
@@ -7,21 +7,13 @@ mod common;
7 7
8use chrono::NaiveDate; 8use chrono::NaiveDate;
9use common::*; 9use common::*;
10use cortex_m_rt::entry;
11use embassy_executor::Spawner; 10use embassy_executor::Spawner;
12use embassy_stm32::Config; 11use embassy_stm32::low_power::{StopMode, stop_ready};
13use embassy_stm32::low_power::{Executor, StopMode, stop_ready};
14use embassy_stm32::rcc::LsConfig; 12use embassy_stm32::rcc::LsConfig;
15use embassy_stm32::rtc::Rtc; 13use embassy_stm32::rtc::Rtc;
14use embassy_stm32::{Config, low_power};
16use embassy_time::Timer; 15use embassy_time::Timer;
17 16
18#[entry]
19fn main() -> ! {
20 Executor::take().run(|spawner| {
21 spawner.spawn(unwrap!(async_main(spawner)));
22 });
23}
24
25#[embassy_executor::task] 17#[embassy_executor::task]
26async fn task_1() { 18async fn task_1() {
27 for _ in 0..9 { 19 for _ in 0..9 {
@@ -43,7 +35,7 @@ async fn task_2() {
43 cortex_m::asm::bkpt(); 35 cortex_m::asm::bkpt();
44} 36}
45 37
46#[embassy_executor::task] 38#[embassy_executor::main(executor = "low_power::Executor")]
47async fn async_main(spawner: Spawner) { 39async fn async_main(spawner: Spawner) {
48 let _ = config(); 40 let _ = config();
49 41
diff --git a/tests/stm32/src/bin/wpan_ble.rs b/tests/stm32/src/bin/wpan_ble.rs
index 0f396b848..b4c0cbf56 100644
--- a/tests/stm32/src/bin/wpan_ble.rs
+++ b/tests/stm32/src/bin/wpan_ble.rs
@@ -32,7 +32,7 @@ bind_interrupts!(struct Irqs{
32const BLE_GAP_DEVICE_NAME_LENGTH: u8 = 7; 32const BLE_GAP_DEVICE_NAME_LENGTH: u8 = 7;
33 33
34#[embassy_executor::task] 34#[embassy_executor::task]
35async fn run_mm_queue(memory_manager: mm::MemoryManager) { 35async fn run_mm_queue(mut memory_manager: mm::MemoryManager<'static>) {
36 memory_manager.run_queue().await; 36 memory_manager.run_queue().await;
37} 37}
38 38
@@ -45,14 +45,13 @@ async fn main(spawner: Spawner) {
45 info!("Hello World!"); 45 info!("Hello World!");
46 46
47 let config = Config::default(); 47 let config = Config::default();
48 let mut mbox = TlMbox::init(p.IPCC, Irqs, config); 48 let mbox = TlMbox::init(p.IPCC, Irqs, config).await;
49 let mut sys = mbox.sys_subsystem;
50 let mut ble = mbox.ble_subsystem;
49 51
50 spawner.spawn(run_mm_queue(mbox.mm_subsystem).unwrap()); 52 spawner.spawn(run_mm_queue(mbox.mm_subsystem).unwrap());
51 53
52 let sys_event = mbox.sys_subsystem.read().await; 54 let fw_info = sys.wireless_fw_info().unwrap();
53 info!("sys event: {}", sys_event.payload());
54
55 let fw_info = mbox.sys_subsystem.wireless_fw_info().unwrap();
56 let version_major = fw_info.version_major(); 55 let version_major = fw_info.version_major();
57 let version_minor = fw_info.version_minor(); 56 let version_minor = fw_info.version_minor();
58 let subversion = fw_info.subversion(); 57 let subversion = fw_info.subversion();
@@ -65,121 +64,108 @@ async fn main(spawner: Spawner) {
65 version_major, version_minor, subversion, sram2a_size, sram2b_size 64 version_major, version_minor, subversion, sram2a_size, sram2b_size
66 ); 65 );
67 66
68 let _ = mbox.sys_subsystem.shci_c2_ble_init(Default::default()).await; 67 let _ = sys.shci_c2_ble_init(Default::default()).await;
69 68
70 info!("resetting BLE..."); 69 info!("resetting BLE...");
71 mbox.ble_subsystem.reset().await; 70 ble.reset().await;
72 let response = mbox.ble_subsystem.read().await.unwrap(); 71 let response = ble.read().await.unwrap();
73 info!("{}", response); 72 info!("{}", response);
74 73
75 info!("config public address..."); 74 info!("config public address...");
76 mbox.ble_subsystem 75 ble.write_config_data(&ConfigData::public_address(get_bd_addr()).build())
77 .write_config_data(&ConfigData::public_address(get_bd_addr()).build())
78 .await; 76 .await;
79 let response = mbox.ble_subsystem.read().await.unwrap(); 77 let response = ble.read().await.unwrap();
80 info!("{}", response); 78 info!("{}", response);
81 79
82 info!("config random address..."); 80 info!("config random address...");
83 mbox.ble_subsystem 81 ble.write_config_data(&ConfigData::random_address(get_random_addr()).build())
84 .write_config_data(&ConfigData::random_address(get_random_addr()).build())
85 .await; 82 .await;
86 let response = mbox.ble_subsystem.read().await.unwrap(); 83 let response = ble.read().await.unwrap();
87 info!("{}", response); 84 info!("{}", response);
88 85
89 info!("config identity root..."); 86 info!("config identity root...");
90 mbox.ble_subsystem 87 ble.write_config_data(&ConfigData::identity_root(&get_irk()).build())
91 .write_config_data(&ConfigData::identity_root(&get_irk()).build())
92 .await; 88 .await;
93 let response = mbox.ble_subsystem.read().await.unwrap(); 89 let response = ble.read().await.unwrap();
94 info!("{}", response); 90 info!("{}", response);
95 91
96 info!("config encryption root..."); 92 info!("config encryption root...");
97 mbox.ble_subsystem 93 ble.write_config_data(&ConfigData::encryption_root(&get_erk()).build())
98 .write_config_data(&ConfigData::encryption_root(&get_erk()).build())
99 .await; 94 .await;
100 let response = mbox.ble_subsystem.read().await.unwrap(); 95 let response = ble.read().await.unwrap();
101 info!("{}", response); 96 info!("{}", response);
102 97
103 info!("config tx power level..."); 98 info!("config tx power level...");
104 mbox.ble_subsystem.set_tx_power_level(PowerLevel::ZerodBm).await; 99 ble.set_tx_power_level(PowerLevel::ZerodBm).await;
105 let response = mbox.ble_subsystem.read().await.unwrap(); 100 let response = ble.read().await.unwrap();
106 info!("{}", response); 101 info!("{}", response);
107 102
108 info!("GATT init..."); 103 info!("GATT init...");
109 mbox.ble_subsystem.init_gatt().await; 104 ble.init_gatt().await;
110 let response = mbox.ble_subsystem.read().await.unwrap(); 105 let response = ble.read().await.unwrap();
111 info!("{}", response); 106 info!("{}", response);
112 107
113 info!("GAP init..."); 108 info!("GAP init...");
114 mbox.ble_subsystem 109 ble.init_gap(Role::PERIPHERAL, false, BLE_GAP_DEVICE_NAME_LENGTH).await;
115 .init_gap(Role::PERIPHERAL, false, BLE_GAP_DEVICE_NAME_LENGTH) 110 let response = ble.read().await.unwrap();
116 .await;
117 let response = mbox.ble_subsystem.read().await.unwrap();
118 info!("{}", response); 111 info!("{}", response);
119 112
120 // info!("set scan response..."); 113 // info!("set scan response...");
121 // mbox.ble_subsystem.le_set_scan_response_data(&[]).await.unwrap(); 114 // ble.le_set_scan_response_data(&[]).await.unwrap();
122 // let response = mbox.ble_subsystem.read().await.unwrap(); 115 // let response = ble.read().await.unwrap();
123 // info!("{}", response); 116 // info!("{}", response);
124 117
125 info!("set discoverable..."); 118 info!("set discoverable...");
126 mbox.ble_subsystem 119 ble.set_discoverable(&DiscoverableParameters {
127 .set_discoverable(&DiscoverableParameters { 120 advertising_type: AdvertisingType::NonConnectableUndirected,
128 advertising_type: AdvertisingType::NonConnectableUndirected, 121 advertising_interval: Some((Duration::from_millis(250), Duration::from_millis(250))),
129 advertising_interval: Some((Duration::from_millis(250), Duration::from_millis(250))), 122 address_type: OwnAddressType::Public,
130 address_type: OwnAddressType::Public, 123 filter_policy: AdvertisingFilterPolicy::AllowConnectionAndScan,
131 filter_policy: AdvertisingFilterPolicy::AllowConnectionAndScan, 124 local_name: None,
132 local_name: None, 125 advertising_data: &[],
133 advertising_data: &[], 126 conn_interval: (None, None),
134 conn_interval: (None, None), 127 })
135 }) 128 .await
136 .await 129 .unwrap();
137 .unwrap(); 130
138 131 let response = ble.read().await;
139 let response = mbox.ble_subsystem.read().await;
140 info!("{}", response); 132 info!("{}", response);
141 133
142 // remove some advertisement to decrease the packet size 134 // remove some advertisement to decrease the packet size
143 info!("delete tx power ad type..."); 135 info!("delete tx power ad type...");
144 mbox.ble_subsystem 136 ble.delete_ad_type(AdvertisingDataType::TxPowerLevel).await;
145 .delete_ad_type(AdvertisingDataType::TxPowerLevel) 137 let response = ble.read().await.unwrap();
146 .await;
147 let response = mbox.ble_subsystem.read().await.unwrap();
148 info!("{}", response); 138 info!("{}", response);
149 139
150 info!("delete conn interval ad type..."); 140 info!("delete conn interval ad type...");
151 mbox.ble_subsystem 141 ble.delete_ad_type(AdvertisingDataType::PeripheralConnectionInterval)
152 .delete_ad_type(AdvertisingDataType::PeripheralConnectionInterval)
153 .await; 142 .await;
154 let response = mbox.ble_subsystem.read().await.unwrap(); 143 let response = ble.read().await.unwrap();
155 info!("{}", response); 144 info!("{}", response);
156 145
157 info!("update advertising data..."); 146 info!("update advertising data...");
158 mbox.ble_subsystem 147 ble.update_advertising_data(&eddystone_advertising_data())
159 .update_advertising_data(&eddystone_advertising_data())
160 .await 148 .await
161 .unwrap(); 149 .unwrap();
162 let response = mbox.ble_subsystem.read().await.unwrap(); 150 let response = ble.read().await.unwrap();
163 info!("{}", response); 151 info!("{}", response);
164 152
165 info!("update advertising data type..."); 153 info!("update advertising data type...");
166 mbox.ble_subsystem 154 ble.update_advertising_data(&[3, AdvertisingDataType::UuidCompleteList16 as u8, 0xaa, 0xfe])
167 .update_advertising_data(&[3, AdvertisingDataType::UuidCompleteList16 as u8, 0xaa, 0xfe])
168 .await 155 .await
169 .unwrap(); 156 .unwrap();
170 let response = mbox.ble_subsystem.read().await.unwrap(); 157 let response = ble.read().await.unwrap();
171 info!("{}", response); 158 info!("{}", response);
172 159
173 info!("update advertising data flags..."); 160 info!("update advertising data flags...");
174 mbox.ble_subsystem 161 ble.update_advertising_data(&[
175 .update_advertising_data(&[ 162 2,
176 2, 163 AdvertisingDataType::Flags as u8,
177 AdvertisingDataType::Flags as u8, 164 (0x02 | 0x04) as u8, // BLE general discoverable, without BR/EDR support
178 (0x02 | 0x04) as u8, // BLE general discoverable, without BR/EDR support 165 ])
179 ]) 166 .await
180 .await 167 .unwrap();
181 .unwrap(); 168 let response = ble.read().await.unwrap();
182 let response = mbox.ble_subsystem.read().await.unwrap();
183 info!("{}", response); 169 info!("{}", response);
184 170
185 info!("Test OK"); 171 info!("Test OK");
diff --git a/tests/stm32/src/bin/wpan_mac.rs b/tests/stm32/src/bin/wpan_mac.rs
index f27146c44..42db39e7e 100644
--- a/tests/stm32/src/bin/wpan_mac.rs
+++ b/tests/stm32/src/bin/wpan_mac.rs
@@ -25,7 +25,7 @@ bind_interrupts!(struct Irqs{
25}); 25});
26 26
27#[embassy_executor::task] 27#[embassy_executor::task]
28async fn run_mm_queue(memory_manager: mm::MemoryManager) { 28async fn run_mm_queue(mut memory_manager: mm::MemoryManager<'static>) {
29 memory_manager.run_queue().await; 29 memory_manager.run_queue().await;
30} 30}
31 31
@@ -38,20 +38,17 @@ async fn main(spawner: Spawner) {
38 info!("Hello World!"); 38 info!("Hello World!");
39 39
40 let config = Config::default(); 40 let config = Config::default();
41 let mbox = TlMbox::init(p.IPCC, Irqs, config); 41 let mbox = TlMbox::init(p.IPCC, Irqs, config).await;
42 let mut sys = mbox.sys_subsystem;
43 let (mut mac_rx, mut mac_tx) = mbox.mac_subsystem.split();
42 44
43 spawner.spawn(run_mm_queue(mbox.mm_subsystem).unwrap()); 45 spawner.spawn(run_mm_queue(mbox.mm_subsystem).unwrap());
44 46
45 let sys_event = mbox.sys_subsystem.read().await; 47 let result = sys.shci_c2_mac_802_15_4_init().await;
46 info!("sys event: {}", sys_event.payload());
47
48 core::mem::drop(sys_event);
49
50 let result = mbox.sys_subsystem.shci_c2_mac_802_15_4_init().await;
51 info!("initialized mac: {}", result); 48 info!("initialized mac: {}", result);
52 49
53 info!("resetting"); 50 info!("resetting");
54 mbox.mac_subsystem 51 mac_tx
55 .send_command(&ResetRequest { 52 .send_command(&ResetRequest {
56 set_default_pib: true, 53 set_default_pib: true,
57 ..Default::default() 54 ..Default::default()
@@ -59,13 +56,13 @@ async fn main(spawner: Spawner) {
59 .await 56 .await
60 .unwrap(); 57 .unwrap();
61 { 58 {
62 let evt = mbox.mac_subsystem.read().await.unwrap(); 59 let evt = mac_rx.read().await.unwrap();
63 info!("{:#x}", evt); 60 info!("{:#x}", evt);
64 } 61 }
65 62
66 info!("setting extended address"); 63 info!("setting extended address");
67 let extended_address: u64 = 0xACDE480000000002; 64 let extended_address: u64 = 0xACDE480000000002;
68 mbox.mac_subsystem 65 mac_tx
69 .send_command(&SetRequest { 66 .send_command(&SetRequest {
70 pib_attribute_ptr: &extended_address as *const _ as *const u8, 67 pib_attribute_ptr: &extended_address as *const _ as *const u8,
71 pib_attribute: PibId::ExtendedAddress, 68 pib_attribute: PibId::ExtendedAddress,
@@ -73,12 +70,12 @@ async fn main(spawner: Spawner) {
73 .await 70 .await
74 .unwrap(); 71 .unwrap();
75 { 72 {
76 let evt = mbox.mac_subsystem.read().await.unwrap(); 73 let evt = mac_rx.read().await.unwrap();
77 info!("{:#x}", evt); 74 info!("{:#x}", evt);
78 } 75 }
79 76
80 info!("getting extended address"); 77 info!("getting extended address");
81 mbox.mac_subsystem 78 mac_tx
82 .send_command(&GetRequest { 79 .send_command(&GetRequest {
83 pib_attribute: PibId::ExtendedAddress, 80 pib_attribute: PibId::ExtendedAddress,
84 ..Default::default() 81 ..Default::default()
@@ -87,7 +84,7 @@ async fn main(spawner: Spawner) {
87 .unwrap(); 84 .unwrap();
88 85
89 { 86 {
90 let evt = mbox.mac_subsystem.read().await.unwrap(); 87 let evt = mac_rx.read().await.unwrap();
91 info!("{:#x}", evt); 88 info!("{:#x}", evt);
92 89
93 if let MacEvent::MlmeGetCnf(evt) = evt { 90 if let MacEvent::MlmeGetCnf(evt) = evt {
@@ -113,8 +110,8 @@ async fn main(spawner: Spawner) {
113 key_index: 152, 110 key_index: 152,
114 }; 111 };
115 info!("{}", a); 112 info!("{}", a);
116 mbox.mac_subsystem.send_command(&a).await.unwrap(); 113 mac_tx.send_command(&a).await.unwrap();
117 let short_addr = if let MacEvent::MlmeAssociateCnf(conf) = mbox.mac_subsystem.read().await.unwrap() { 114 let short_addr = if let MacEvent::MlmeAssociateCnf(conf) = mac_rx.read().await.unwrap() {
118 conf.assoc_short_address 115 conf.assoc_short_address
119 } else { 116 } else {
120 defmt::panic!() 117 defmt::panic!()
diff --git a/tests/stm32/src/common.rs b/tests/stm32/src/common.rs
index 096cce947..9f88b182a 100644
--- a/tests/stm32/src/common.rs
+++ b/tests/stm32/src/common.rs
@@ -259,6 +259,7 @@ define_peris!(
259define_peris!( 259define_peris!(
260 UART = LPUART1, UART_TX = PB5, UART_RX = PA10, UART_TX_DMA = GPDMA1_CH0, UART_RX_DMA = GPDMA1_CH1, 260 UART = LPUART1, UART_TX = PB5, UART_RX = PA10, UART_TX_DMA = GPDMA1_CH0, UART_RX_DMA = GPDMA1_CH1,
261 SPI = SPI1, SPI_SCK = PB4, SPI_MOSI = PA15, SPI_MISO = PB3, SPI_TX_DMA = GPDMA1_CH0, SPI_RX_DMA = GPDMA1_CH1, 261 SPI = SPI1, SPI_SCK = PB4, SPI_MOSI = PA15, SPI_MISO = PB3, SPI_TX_DMA = GPDMA1_CH0, SPI_RX_DMA = GPDMA1_CH1,
262 ADC = ADC4, DAC_PIN = PA0,
262 @irq UART = {LPUART1 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::LPUART1>;}, 263 @irq UART = {LPUART1 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::LPUART1>;},
263); 264);
264#[cfg(feature = "stm32h7s3l8")] 265#[cfg(feature = "stm32h7s3l8")]