diff options
| author | xoviat <[email protected]> | 2023-07-15 14:28:42 -0500 |
|---|---|---|
| committer | xoviat <[email protected]> | 2023-07-15 14:28:42 -0500 |
| commit | d11a94e2a7c030dac7a7c4d6967f614104111d5a (patch) | |
| tree | 0db43017247fa2445bc1fc8431c36f073df6e3ef /tests/stm32/src/bin | |
| parent | d6dd5ea5d3ab7309bd5b4bec28afaee68d20b4ae (diff) | |
wpan: add mac test
Diffstat (limited to 'tests/stm32/src/bin')
| -rw-r--r-- | tests/stm32/src/bin/rtc.rs | 2 | ||||
| -rw-r--r-- | tests/stm32/src/bin/wpan_ble.rs (renamed from tests/stm32/src/bin/tl_mbox.rs) | 2 | ||||
| -rw-r--r-- | tests/stm32/src/bin/wpan_mac.rs | 108 |
3 files changed, 111 insertions, 1 deletions
diff --git a/tests/stm32/src/bin/rtc.rs b/tests/stm32/src/bin/rtc.rs index 582df5753..194b153d5 100644 --- a/tests/stm32/src/bin/rtc.rs +++ b/tests/stm32/src/bin/rtc.rs | |||
| @@ -1,3 +1,5 @@ | |||
| 1 | // required-features: chrono | ||
| 2 | |||
| 1 | #![no_std] | 3 | #![no_std] |
| 2 | #![no_main] | 4 | #![no_main] |
| 3 | #![feature(type_alias_impl_trait)] | 5 | #![feature(type_alias_impl_trait)] |
diff --git a/tests/stm32/src/bin/tl_mbox.rs b/tests/stm32/src/bin/wpan_ble.rs index af3832709..3ad8aca4e 100644 --- a/tests/stm32/src/bin/tl_mbox.rs +++ b/tests/stm32/src/bin/wpan_ble.rs | |||
| @@ -64,7 +64,7 @@ async fn main(spawner: Spawner) { | |||
| 64 | version_major, version_minor, subversion, sram2a_size, sram2b_size | 64 | version_major, version_minor, subversion, sram2a_size, sram2b_size |
| 65 | ); | 65 | ); |
| 66 | 66 | ||
| 67 | mbox.sys_subsystem.shci_c2_ble_init(Default::default()).await; | 67 | let _ = mbox.sys_subsystem.shci_c2_ble_init(Default::default()).await; |
| 68 | 68 | ||
| 69 | info!("resetting BLE..."); | 69 | info!("resetting BLE..."); |
| 70 | mbox.ble_subsystem.reset().await; | 70 | mbox.ble_subsystem.reset().await; |
diff --git a/tests/stm32/src/bin/wpan_mac.rs b/tests/stm32/src/bin/wpan_mac.rs new file mode 100644 index 000000000..d97a4d404 --- /dev/null +++ b/tests/stm32/src/bin/wpan_mac.rs | |||
| @@ -0,0 +1,108 @@ | |||
| 1 | // required-features: mac | ||
| 2 | |||
| 3 | #![no_std] | ||
| 4 | #![no_main] | ||
| 5 | #![feature(type_alias_impl_trait)] | ||
| 6 | #[path = "../common.rs"] | ||
| 7 | mod common; | ||
| 8 | |||
| 9 | use common::*; | ||
| 10 | use embassy_executor::Spawner; | ||
| 11 | use embassy_stm32::bind_interrupts; | ||
| 12 | use embassy_stm32::ipcc::{Config, ReceiveInterruptHandler, TransmitInterruptHandler}; | ||
| 13 | use embassy_stm32_wpan::sub::mac::commands::{AssociateRequest, GetRequest, ResetRequest, SetRequest}; | ||
| 14 | use embassy_stm32_wpan::sub::mac::event::MacEvent; | ||
| 15 | use embassy_stm32_wpan::sub::mac::typedefs::{ | ||
| 16 | AddressMode, Capabilities, KeyIdMode, MacAddress, MacChannel, PanId, PibId, SecurityLevel, | ||
| 17 | }; | ||
| 18 | use embassy_stm32_wpan::sub::mm; | ||
| 19 | use embassy_stm32_wpan::TlMbox; | ||
| 20 | use {defmt_rtt as _, panic_probe as _}; | ||
| 21 | |||
| 22 | bind_interrupts!(struct Irqs{ | ||
| 23 | IPCC_C1_RX => ReceiveInterruptHandler; | ||
| 24 | IPCC_C1_TX => TransmitInterruptHandler; | ||
| 25 | }); | ||
| 26 | |||
| 27 | #[embassy_executor::task] | ||
| 28 | async fn run_mm_queue(memory_manager: mm::MemoryManager) { | ||
| 29 | memory_manager.run_queue().await; | ||
| 30 | } | ||
| 31 | |||
| 32 | #[embassy_executor::main] | ||
| 33 | async fn main(spawner: Spawner) { | ||
| 34 | let p = embassy_stm32::init(config()); | ||
| 35 | info!("Hello World!"); | ||
| 36 | |||
| 37 | let config = Config::default(); | ||
| 38 | let mbox = TlMbox::init(p.IPCC, Irqs, config); | ||
| 39 | |||
| 40 | spawner.spawn(run_mm_queue(mbox.mm_subsystem)).unwrap(); | ||
| 41 | |||
| 42 | let sys_event = mbox.sys_subsystem.read().await; | ||
| 43 | info!("sys event: {}", sys_event.payload()); | ||
| 44 | |||
| 45 | core::mem::drop(sys_event); | ||
| 46 | |||
| 47 | let result = mbox.sys_subsystem.shci_c2_mac_802_15_4_init().await; | ||
| 48 | info!("initialized mac: {}", result); | ||
| 49 | |||
| 50 | info!("resetting"); | ||
| 51 | mbox.mac_subsystem | ||
| 52 | .send_command(&ResetRequest { set_default_pib: true }) | ||
| 53 | .await | ||
| 54 | .unwrap(); | ||
| 55 | let evt = mbox.mac_subsystem.read().await; | ||
| 56 | info!("{:#x}", evt); | ||
| 57 | |||
| 58 | info!("setting extended address"); | ||
| 59 | let extended_address: u64 = 0xACDE480000000002; | ||
| 60 | mbox.mac_subsystem | ||
| 61 | .send_command(&SetRequest { | ||
| 62 | pib_attribute_ptr: &extended_address as *const _ as *const u8, | ||
| 63 | pib_attribute: PibId::ExtendedAddress, | ||
| 64 | }) | ||
| 65 | .await | ||
| 66 | .unwrap(); | ||
| 67 | let evt = mbox.mac_subsystem.read().await; | ||
| 68 | info!("{:#x}", evt); | ||
| 69 | |||
| 70 | info!("getting extended address"); | ||
| 71 | mbox.mac_subsystem | ||
| 72 | .send_command(&GetRequest { | ||
| 73 | pib_attribute: PibId::ExtendedAddress, | ||
| 74 | }) | ||
| 75 | .await | ||
| 76 | .unwrap(); | ||
| 77 | let evt = mbox.mac_subsystem.read().await; | ||
| 78 | info!("{:#x}", evt); | ||
| 79 | |||
| 80 | if let Ok(MacEvent::MlmeGetCnf(evt)) = evt { | ||
| 81 | if evt.pib_attribute_value_len == 8 { | ||
| 82 | let value = unsafe { core::ptr::read_unaligned(evt.pib_attribute_value_ptr as *const u64) }; | ||
| 83 | |||
| 84 | info!("value {:#x}", value) | ||
| 85 | } | ||
| 86 | } | ||
| 87 | |||
| 88 | info!("assocation request"); | ||
| 89 | let a = AssociateRequest { | ||
| 90 | channel_number: MacChannel::Channel16, | ||
| 91 | channel_page: 0, | ||
| 92 | coord_addr_mode: AddressMode::Short, | ||
| 93 | coord_address: MacAddress { short: [34, 17] }, | ||
| 94 | capability_information: Capabilities::ALLOCATE_ADDRESS, | ||
| 95 | coord_pan_id: PanId([0x1A, 0xAA]), | ||
| 96 | security_level: SecurityLevel::Unsecure, | ||
| 97 | key_id_mode: KeyIdMode::Implicite, | ||
| 98 | key_source: [0; 8], | ||
| 99 | key_index: 152, | ||
| 100 | }; | ||
| 101 | info!("{}", a); | ||
| 102 | mbox.mac_subsystem.send_command(&a).await.unwrap(); | ||
| 103 | let evt = mbox.mac_subsystem.read().await; | ||
| 104 | info!("{:#x}", evt); | ||
| 105 | |||
| 106 | info!("Test OK"); | ||
| 107 | cortex_m::asm::bkpt(); | ||
| 108 | } | ||
