change MacAddress to a union instead of an enum

This commit is contained in:
goueslati 2023-07-12 16:49:37 +01:00
parent d5a4457b5e
commit eccd2ecebf
7 changed files with 168 additions and 96 deletions
examples/stm32wb/src/bin

View file

@ -66,7 +66,7 @@ async fn main(spawner: Spawner) {
info!("resetting");
mbox.mac_subsystem
.send_command(ResetRequest { set_default_pib: true })
.send_command(&ResetRequest { set_default_pib: true })
.await
.unwrap();
let evt = mbox.mac_subsystem.read().await;
@ -75,7 +75,7 @@ async fn main(spawner: Spawner) {
info!("setting extended address");
let extended_address: u64 = 0xACDE480000000001;
mbox.mac_subsystem
.send_command(SetRequest {
.send_command(&SetRequest {
pib_attribute_ptr: &extended_address as *const _ as *const u8,
pib_attribute: PibId::ExtendedAddress,
})
@ -87,7 +87,7 @@ async fn main(spawner: Spawner) {
info!("setting short address");
let short_address: u16 = 0x1122;
mbox.mac_subsystem
.send_command(SetRequest {
.send_command(&SetRequest {
pib_attribute_ptr: &short_address as *const _ as *const u8,
pib_attribute: PibId::ShortAddress,
})
@ -99,7 +99,7 @@ async fn main(spawner: Spawner) {
info!("setting association permit");
let association_permit: bool = true;
mbox.mac_subsystem
.send_command(SetRequest {
.send_command(&SetRequest {
pib_attribute_ptr: &association_permit as *const _ as *const u8,
pib_attribute: PibId::AssociationPermit,
})
@ -111,7 +111,7 @@ async fn main(spawner: Spawner) {
info!("setting TX power");
let transmit_power: i8 = 2;
mbox.mac_subsystem
.send_command(SetRequest {
.send_command(&SetRequest {
pib_attribute_ptr: &transmit_power as *const _ as *const u8,
pib_attribute: PibId::TransmitPower,
})
@ -122,7 +122,8 @@ async fn main(spawner: Spawner) {
info!("starting FFD device");
mbox.mac_subsystem
.send_command(StartRequest {
.send_command(&StartRequest {
pan_id: [0xAA, 0x1A],
channel_number: MacChannel::Channel16,
beacon_order: 0x0F,
superframe_order: 0x0F,
@ -138,7 +139,7 @@ async fn main(spawner: Spawner) {
info!("setting RX on when idle");
let rx_on_while_idle: bool = true;
mbox.mac_subsystem
.send_command(SetRequest {
.send_command(&SetRequest {
pib_attribute_ptr: &rx_on_while_idle as *const _ as *const u8,
pib_attribute: PibId::RxOnWhenIdle,
})
@ -151,7 +152,4 @@ async fn main(spawner: Spawner) {
let evt = mbox.mac_subsystem.read().await;
defmt::info!("{:#x}", evt);
}
info!("Test OK");
cortex_m::asm::bkpt();
}

View file

@ -6,7 +6,8 @@ use defmt::*;
use embassy_executor::Spawner;
use embassy_stm32::bind_interrupts;
use embassy_stm32::ipcc::{Config, ReceiveInterruptHandler, TransmitInterruptHandler};
use embassy_stm32_wpan::sub::mac::commands::{AssociateRequest, ResetRequest, SetRequest, StartRequest};
use embassy_stm32_wpan::sub::mac::commands::{AssociateRequest, GetRequest, ResetRequest, SetRequest};
use embassy_stm32_wpan::sub::mac::event::MacEvent;
use embassy_stm32_wpan::sub::mac::typedefs::{
AddressMode, Capabilities, KeyIdMode, MacAddress, MacChannel, PibId, SecurityLevel,
};
@ -67,52 +68,75 @@ async fn main(spawner: Spawner) {
info!("initialized mac: {}", result);
info!("resetting");
let response = mbox
.mac_subsystem
.send_command(ResetRequest { set_default_pib: true })
.await;
info!("{}", response);
mbox.mac_subsystem
.send_command(&ResetRequest { set_default_pib: true })
.await
.unwrap();
let evt = mbox.mac_subsystem.read().await;
info!("{:#x}", evt);
info!("setting extended address");
let extended_address: u64 = 0xACDE480000000002;
let response = mbox
.mac_subsystem
.send_command(SetRequest {
mbox.mac_subsystem
.send_command(&SetRequest {
pib_attribute_ptr: &extended_address as *const _ as *const u8,
pib_attribute: PibId::ExtendedAddress,
})
.await;
info!("{}", response);
.await
.unwrap();
let evt = mbox.mac_subsystem.read().await;
info!("{:#x}", evt);
info!("getting extended address");
mbox.mac_subsystem
.send_command(&GetRequest {
pib_attribute: PibId::ExtendedAddress,
})
.await
.unwrap();
let evt = mbox.mac_subsystem.read().await;
info!("{:#x}", evt);
if let Ok(MacEvent::MlmeGetCnf(evt)) = evt {
if evt.pib_attribute_value_len == 8 {
let value = unsafe { core::ptr::read_unaligned(evt.pib_attribute_value_ptr as *const u64) };
info!("value {:#x}", value)
}
}
info!("assocation request");
let response = mbox
.mac_subsystem
.send_command(AssociateRequest {
channel_number: MacChannel::Channel16,
channel_page: 0,
coord_addr_mode: AddressMode::Short,
coord_address: MacAddress::Short([0x22, 0x11]),
capability_information: Capabilities::ALLOCATE_ADDRESS,
coord_pan_id: [0xAA, 0x1A],
security_level: SecurityLevel::Unsecure,
key_id_mode: KeyIdMode::Implicite,
key_source: [0; 8],
key_index: 0,
})
.await;
info!("{}", response);
let a = AssociateRequest {
channel_number: MacChannel::Channel16,
channel_page: 0,
coord_addr_mode: AddressMode::Short,
coord_address: MacAddress { short: [34, 17] },
capability_information: Capabilities::ALLOCATE_ADDRESS,
coord_pan_id: [0xAA, 0x1A],
security_level: SecurityLevel::Unsecure,
key_id_mode: KeyIdMode::Implicite,
key_source: [0; 8],
key_index: 152,
};
info!("{}", a);
mbox.mac_subsystem.send_command(&a).await.unwrap();
let evt = mbox.mac_subsystem.read().await;
info!("{:#x}", evt);
info!("setting short address");
let short: u64 = 0xACDE480000000002;
let response = mbox
.mac_subsystem
.send_command(SetRequest {
mbox.mac_subsystem
.send_command(&SetRequest {
pib_attribute_ptr: &short as *const _ as *const u8,
pib_attribute: PibId::ShortAddress,
})
.await;
info!("{}", response);
.await
.unwrap();
let evt = mbox.mac_subsystem.read().await;
info!("{:#x}", evt);
info!("Test OK");
cortex_m::asm::bkpt();
loop {
let evt = mbox.mac_subsystem.read().await;
info!("{:#x}", evt);
}
}