aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxoviat <[email protected]>2023-07-16 17:28:34 -0500
committerxoviat <[email protected]>2023-07-16 17:28:34 -0500
commit34217ea797c6bbea6219bb2bc2b611a99212e14b (patch)
tree5c6fdd77632b46b6cc81daefbf0a2c2728748774
parenta0515ca7ac9f4aebeadede7c6a2fa312b60b5d55 (diff)
wpan: add slice data view
-rw-r--r--embassy-stm32-wpan/src/mac/event.rs73
-rw-r--r--embassy-stm32-wpan/src/mac/indications.rs8
-rw-r--r--examples/stm32wb/src/bin/mac_ffd.rs22
3 files changed, 52 insertions, 51 deletions
diff --git a/embassy-stm32-wpan/src/mac/event.rs b/embassy-stm32-wpan/src/mac/event.rs
index 67f207d57..a2bb79222 100644
--- a/embassy-stm32-wpan/src/mac/event.rs
+++ b/embassy-stm32-wpan/src/mac/event.rs
@@ -36,53 +36,40 @@ impl Event {
36 let opcode = u16::from_le_bytes(payload[0..2].try_into().unwrap()); 36 let opcode = u16::from_le_bytes(payload[0..2].try_into().unwrap());
37 37
38 let opcode = OpcodeM0ToM4::try_from(opcode)?; 38 let opcode = OpcodeM0ToM4::try_from(opcode)?;
39 let buf = &payload[2..];
39 40
40 match opcode { 41 match opcode {
41 OpcodeM0ToM4::MlmeAssociateCnf => Ok(MacEvent::MlmeAssociateCnf(AssociateConfirm::from_buffer( 42 OpcodeM0ToM4::MlmeAssociateCnf => Ok(MacEvent::MlmeAssociateCnf(AssociateConfirm::from_buffer(buf)?)),
42 &payload[2..], 43 OpcodeM0ToM4::MlmeDisassociateCnf => {
43 )?)), 44 Ok(MacEvent::MlmeDisassociateCnf(DisassociateConfirm::from_buffer(buf)?))
44 OpcodeM0ToM4::MlmeDisassociateCnf => Ok(MacEvent::MlmeDisassociateCnf(DisassociateConfirm::from_buffer(
45 &payload[2..],
46 )?)),
47 OpcodeM0ToM4::MlmeGetCnf => Ok(MacEvent::MlmeGetCnf(GetConfirm::from_buffer(&payload[2..])?)),
48 OpcodeM0ToM4::MlmeGtsCnf => Ok(MacEvent::MlmeGtsCnf(GtsConfirm::from_buffer(&payload[2..])?)),
49 OpcodeM0ToM4::MlmeResetCnf => Ok(MacEvent::MlmeResetCnf(ResetConfirm::from_buffer(&payload[2..])?)),
50 OpcodeM0ToM4::MlmeRxEnableCnf => {
51 Ok(MacEvent::MlmeRxEnableCnf(RxEnableConfirm::from_buffer(&payload[2..])?))
52 } 45 }
53 OpcodeM0ToM4::MlmeScanCnf => Ok(MacEvent::MlmeScanCnf(ScanConfirm::from_buffer(&payload[2..])?)), 46 OpcodeM0ToM4::MlmeGetCnf => Ok(MacEvent::MlmeGetCnf(GetConfirm::from_buffer(buf)?)),
54 OpcodeM0ToM4::MlmeSetCnf => Ok(MacEvent::MlmeSetCnf(SetConfirm::from_buffer(&payload[2..])?)), 47 OpcodeM0ToM4::MlmeGtsCnf => Ok(MacEvent::MlmeGtsCnf(GtsConfirm::from_buffer(buf)?)),
55 OpcodeM0ToM4::MlmeStartCnf => Ok(MacEvent::MlmeStartCnf(StartConfirm::from_buffer(&payload[2..])?)), 48 OpcodeM0ToM4::MlmeResetCnf => Ok(MacEvent::MlmeResetCnf(ResetConfirm::from_buffer(buf)?)),
56 OpcodeM0ToM4::MlmePollCnf => Ok(MacEvent::MlmePollCnf(PollConfirm::from_buffer(&payload[2..])?)), 49 OpcodeM0ToM4::MlmeRxEnableCnf => Ok(MacEvent::MlmeRxEnableCnf(RxEnableConfirm::from_buffer(buf)?)),
57 OpcodeM0ToM4::MlmeDpsCnf => Ok(MacEvent::MlmeDpsCnf(DpsConfirm::from_buffer(&payload[2..])?)), 50 OpcodeM0ToM4::MlmeScanCnf => Ok(MacEvent::MlmeScanCnf(ScanConfirm::from_buffer(buf)?)),
58 OpcodeM0ToM4::MlmeSoundingCnf => { 51 OpcodeM0ToM4::MlmeSetCnf => Ok(MacEvent::MlmeSetCnf(SetConfirm::from_buffer(buf)?)),
59 Ok(MacEvent::MlmeSoundingCnf(SoundingConfirm::from_buffer(&payload[2..])?)) 52 OpcodeM0ToM4::MlmeStartCnf => Ok(MacEvent::MlmeStartCnf(StartConfirm::from_buffer(buf)?)),
53 OpcodeM0ToM4::MlmePollCnf => Ok(MacEvent::MlmePollCnf(PollConfirm::from_buffer(buf)?)),
54 OpcodeM0ToM4::MlmeDpsCnf => Ok(MacEvent::MlmeDpsCnf(DpsConfirm::from_buffer(buf)?)),
55 OpcodeM0ToM4::MlmeSoundingCnf => Ok(MacEvent::MlmeSoundingCnf(SoundingConfirm::from_buffer(buf)?)),
56 OpcodeM0ToM4::MlmeCalibrateCnf => Ok(MacEvent::MlmeCalibrateCnf(CalibrateConfirm::from_buffer(buf)?)),
57 OpcodeM0ToM4::McpsDataCnf => Ok(MacEvent::McpsDataCnf(DataConfirm::from_buffer(buf)?)),
58 OpcodeM0ToM4::McpsPurgeCnf => Ok(MacEvent::McpsPurgeCnf(PurgeConfirm::from_buffer(buf)?)),
59 OpcodeM0ToM4::MlmeAssociateInd => Ok(MacEvent::MlmeAssociateInd(AssociateIndication::from_buffer(buf)?)),
60 OpcodeM0ToM4::MlmeDisassociateInd => {
61 Ok(MacEvent::MlmeDisassociateInd(DisassociateIndication::from_buffer(buf)?))
60 } 62 }
61 OpcodeM0ToM4::MlmeCalibrateCnf => Ok(MacEvent::MlmeCalibrateCnf(CalibrateConfirm::from_buffer( 63 OpcodeM0ToM4::MlmeBeaconNotifyInd => {
62 &payload[2..], 64 Ok(MacEvent::MlmeBeaconNotifyInd(BeaconNotifyIndication::from_buffer(buf)?))
63 )?)), 65 }
64 OpcodeM0ToM4::McpsDataCnf => Ok(MacEvent::McpsDataCnf(DataConfirm::from_buffer(&payload[2..])?)), 66 OpcodeM0ToM4::MlmeCommStatusInd => Ok(MacEvent::MlmeCommStatusInd(CommStatusIndication::from_buffer(buf)?)),
65 OpcodeM0ToM4::McpsPurgeCnf => Ok(MacEvent::McpsPurgeCnf(PurgeConfirm::from_buffer(&payload[2..])?)), 67 OpcodeM0ToM4::MlmeGtsInd => Ok(MacEvent::MlmeGtsInd(GtsIndication::from_buffer(buf)?)),
66 OpcodeM0ToM4::MlmeAssociateInd => Ok(MacEvent::MlmeAssociateInd(AssociateIndication::from_buffer( 68 OpcodeM0ToM4::MlmeOrphanInd => Ok(MacEvent::MlmeOrphanInd(OrphanIndication::from_buffer(buf)?)),
67 &payload[2..], 69 OpcodeM0ToM4::MlmeSyncLossInd => Ok(MacEvent::MlmeSyncLossInd(SyncLossIndication::from_buffer(buf)?)),
68 )?)), 70 OpcodeM0ToM4::MlmeDpsInd => Ok(MacEvent::MlmeDpsInd(DpsIndication::from_buffer(buf)?)),
69 OpcodeM0ToM4::MlmeDisassociateInd => Ok(MacEvent::MlmeDisassociateInd( 71 OpcodeM0ToM4::McpsDataInd => Ok(MacEvent::McpsDataInd(DataIndication::from_buffer(buf)?)),
70 DisassociateIndication::from_buffer(&payload[2..])?, 72 OpcodeM0ToM4::MlmePollInd => Ok(MacEvent::MlmePollInd(PollIndication::from_buffer(buf)?)),
71 )),
72 OpcodeM0ToM4::MlmeBeaconNotifyInd => Ok(MacEvent::MlmeBeaconNotifyInd(
73 BeaconNotifyIndication::from_buffer(&payload[2..])?,
74 )),
75 OpcodeM0ToM4::MlmeCommStatusInd => Ok(MacEvent::MlmeCommStatusInd(CommStatusIndication::from_buffer(
76 &payload[2..],
77 )?)),
78 OpcodeM0ToM4::MlmeGtsInd => Ok(MacEvent::MlmeGtsInd(GtsIndication::from_buffer(&payload[2..])?)),
79 OpcodeM0ToM4::MlmeOrphanInd => Ok(MacEvent::MlmeOrphanInd(OrphanIndication::from_buffer(&payload[2..])?)),
80 OpcodeM0ToM4::MlmeSyncLossInd => Ok(MacEvent::MlmeSyncLossInd(SyncLossIndication::from_buffer(
81 &payload[2..],
82 )?)),
83 OpcodeM0ToM4::MlmeDpsInd => Ok(MacEvent::MlmeDpsInd(DpsIndication::from_buffer(&payload[2..])?)),
84 OpcodeM0ToM4::McpsDataInd => Ok(MacEvent::McpsDataInd(DataIndication::from_buffer(&payload[2..])?)),
85 OpcodeM0ToM4::MlmePollInd => Ok(MacEvent::MlmePollInd(PollIndication::from_buffer(&payload[2..])?)),
86 } 73 }
87 } 74 }
88} 75}
diff --git a/embassy-stm32-wpan/src/mac/indications.rs b/embassy-stm32-wpan/src/mac/indications.rs
index 66819dc9d..cf795dfa0 100644
--- a/embassy-stm32-wpan/src/mac/indications.rs
+++ b/embassy-stm32-wpan/src/mac/indications.rs
@@ -1,3 +1,5 @@
1use core::slice;
2
1use super::consts::MAX_PENDING_ADDRESS; 3use super::consts::MAX_PENDING_ADDRESS;
2use super::event::ParseableMacEvent; 4use super::event::ParseableMacEvent;
3use super::typedefs::{ 5use super::typedefs::{
@@ -233,6 +235,12 @@ pub struct DataIndication {
233 235
234impl ParseableMacEvent for DataIndication {} 236impl ParseableMacEvent for DataIndication {}
235 237
238impl DataIndication {
239 pub fn payload<'a>(&'a self) -> &'a [u8] {
240 unsafe { slice::from_raw_parts(self.msdu_ptr as *const _ as *const u8, self.msdu_length as usize) }
241 }
242}
243
236/// MLME POLL Indication which will be used for indicating the Data Request 244/// MLME POLL Indication which will be used for indicating the Data Request
237/// reception to upper layer as defined in Zigbee r22 - D.8.2 245/// reception to upper layer as defined in Zigbee r22 - D.8.2
238#[repr(C)] 246#[repr(C)]
diff --git a/examples/stm32wb/src/bin/mac_ffd.rs b/examples/stm32wb/src/bin/mac_ffd.rs
index 86413ea0f..bc71e29aa 100644
--- a/examples/stm32wb/src/bin/mac_ffd.rs
+++ b/examples/stm32wb/src/bin/mac_ffd.rs
@@ -168,9 +168,10 @@ async fn main(spawner: Spawner) {
168 168
169 loop { 169 loop {
170 let evt = mbox.mac_subsystem.read().await; 170 let evt = mbox.mac_subsystem.read().await;
171 defmt::info!("{:#x}", evt.mac_event());
172
173 if let Ok(evt) = evt.mac_event() { 171 if let Ok(evt) = evt.mac_event() {
172 defmt::info!("parsed mac event");
173 defmt::info!("{:#x}", evt);
174
174 match evt { 175 match evt {
175 MacEvent::MlmeAssociateInd(association) => mbox 176 MacEvent::MlmeAssociateInd(association) => mbox
176 .mac_subsystem 177 .mac_subsystem
@@ -184,17 +185,22 @@ async fn main(spawner: Spawner) {
184 .await 185 .await
185 .unwrap(), 186 .unwrap(),
186 MacEvent::McpsDataInd(data_ind) => { 187 MacEvent::McpsDataInd(data_ind) => {
187 let data_addr = data_ind.msdu_ptr; 188 let payload = data_ind.payload();
188 let mut data = [0u8; 256]; 189 let ref_payload = b"Hello from embassy!";
189 unsafe { data_addr.copy_to(&mut data as *mut _, data_ind.msdu_length as usize) } 190 info!("{}", payload);
190 info!("{}", data[..data_ind.msdu_length as usize]);
191 191
192 if &data[..data_ind.msdu_length as usize] == b"Hello from embassy!" { 192 if payload == ref_payload {
193 info!("success"); 193 info!("success");
194 } else {
195 info!("ref payload: {}", ref_payload);
194 } 196 }
195 } 197 }
196 _ => {} 198 _ => {
199 defmt::info!("other mac event");
200 }
197 } 201 }
202 } else {
203 defmt::info!("failed to parse mac event");
198 } 204 }
199 } 205 }
200} 206}