wpan: add slice data view
This commit is contained in:
parent
a0515ca7ac
commit
34217ea797
3 changed files with 52 additions and 51 deletions
|
@ -36,53 +36,40 @@ impl Event {
|
||||||
let opcode = u16::from_le_bytes(payload[0..2].try_into().unwrap());
|
let opcode = u16::from_le_bytes(payload[0..2].try_into().unwrap());
|
||||||
|
|
||||||
let opcode = OpcodeM0ToM4::try_from(opcode)?;
|
let opcode = OpcodeM0ToM4::try_from(opcode)?;
|
||||||
|
let buf = &payload[2..];
|
||||||
|
|
||||||
match opcode {
|
match opcode {
|
||||||
OpcodeM0ToM4::MlmeAssociateCnf => Ok(MacEvent::MlmeAssociateCnf(AssociateConfirm::from_buffer(
|
OpcodeM0ToM4::MlmeAssociateCnf => Ok(MacEvent::MlmeAssociateCnf(AssociateConfirm::from_buffer(buf)?)),
|
||||||
&payload[2..],
|
OpcodeM0ToM4::MlmeDisassociateCnf => {
|
||||||
)?)),
|
Ok(MacEvent::MlmeDisassociateCnf(DisassociateConfirm::from_buffer(buf)?))
|
||||||
OpcodeM0ToM4::MlmeDisassociateCnf => Ok(MacEvent::MlmeDisassociateCnf(DisassociateConfirm::from_buffer(
|
|
||||||
&payload[2..],
|
|
||||||
)?)),
|
|
||||||
OpcodeM0ToM4::MlmeGetCnf => Ok(MacEvent::MlmeGetCnf(GetConfirm::from_buffer(&payload[2..])?)),
|
|
||||||
OpcodeM0ToM4::MlmeGtsCnf => Ok(MacEvent::MlmeGtsCnf(GtsConfirm::from_buffer(&payload[2..])?)),
|
|
||||||
OpcodeM0ToM4::MlmeResetCnf => Ok(MacEvent::MlmeResetCnf(ResetConfirm::from_buffer(&payload[2..])?)),
|
|
||||||
OpcodeM0ToM4::MlmeRxEnableCnf => {
|
|
||||||
Ok(MacEvent::MlmeRxEnableCnf(RxEnableConfirm::from_buffer(&payload[2..])?))
|
|
||||||
}
|
}
|
||||||
OpcodeM0ToM4::MlmeScanCnf => Ok(MacEvent::MlmeScanCnf(ScanConfirm::from_buffer(&payload[2..])?)),
|
OpcodeM0ToM4::MlmeGetCnf => Ok(MacEvent::MlmeGetCnf(GetConfirm::from_buffer(buf)?)),
|
||||||
OpcodeM0ToM4::MlmeSetCnf => Ok(MacEvent::MlmeSetCnf(SetConfirm::from_buffer(&payload[2..])?)),
|
OpcodeM0ToM4::MlmeGtsCnf => Ok(MacEvent::MlmeGtsCnf(GtsConfirm::from_buffer(buf)?)),
|
||||||
OpcodeM0ToM4::MlmeStartCnf => Ok(MacEvent::MlmeStartCnf(StartConfirm::from_buffer(&payload[2..])?)),
|
OpcodeM0ToM4::MlmeResetCnf => Ok(MacEvent::MlmeResetCnf(ResetConfirm::from_buffer(buf)?)),
|
||||||
OpcodeM0ToM4::MlmePollCnf => Ok(MacEvent::MlmePollCnf(PollConfirm::from_buffer(&payload[2..])?)),
|
OpcodeM0ToM4::MlmeRxEnableCnf => Ok(MacEvent::MlmeRxEnableCnf(RxEnableConfirm::from_buffer(buf)?)),
|
||||||
OpcodeM0ToM4::MlmeDpsCnf => Ok(MacEvent::MlmeDpsCnf(DpsConfirm::from_buffer(&payload[2..])?)),
|
OpcodeM0ToM4::MlmeScanCnf => Ok(MacEvent::MlmeScanCnf(ScanConfirm::from_buffer(buf)?)),
|
||||||
OpcodeM0ToM4::MlmeSoundingCnf => {
|
OpcodeM0ToM4::MlmeSetCnf => Ok(MacEvent::MlmeSetCnf(SetConfirm::from_buffer(buf)?)),
|
||||||
Ok(MacEvent::MlmeSoundingCnf(SoundingConfirm::from_buffer(&payload[2..])?))
|
OpcodeM0ToM4::MlmeStartCnf => Ok(MacEvent::MlmeStartCnf(StartConfirm::from_buffer(buf)?)),
|
||||||
|
OpcodeM0ToM4::MlmePollCnf => Ok(MacEvent::MlmePollCnf(PollConfirm::from_buffer(buf)?)),
|
||||||
|
OpcodeM0ToM4::MlmeDpsCnf => Ok(MacEvent::MlmeDpsCnf(DpsConfirm::from_buffer(buf)?)),
|
||||||
|
OpcodeM0ToM4::MlmeSoundingCnf => Ok(MacEvent::MlmeSoundingCnf(SoundingConfirm::from_buffer(buf)?)),
|
||||||
|
OpcodeM0ToM4::MlmeCalibrateCnf => Ok(MacEvent::MlmeCalibrateCnf(CalibrateConfirm::from_buffer(buf)?)),
|
||||||
|
OpcodeM0ToM4::McpsDataCnf => Ok(MacEvent::McpsDataCnf(DataConfirm::from_buffer(buf)?)),
|
||||||
|
OpcodeM0ToM4::McpsPurgeCnf => Ok(MacEvent::McpsPurgeCnf(PurgeConfirm::from_buffer(buf)?)),
|
||||||
|
OpcodeM0ToM4::MlmeAssociateInd => Ok(MacEvent::MlmeAssociateInd(AssociateIndication::from_buffer(buf)?)),
|
||||||
|
OpcodeM0ToM4::MlmeDisassociateInd => {
|
||||||
|
Ok(MacEvent::MlmeDisassociateInd(DisassociateIndication::from_buffer(buf)?))
|
||||||
}
|
}
|
||||||
OpcodeM0ToM4::MlmeCalibrateCnf => Ok(MacEvent::MlmeCalibrateCnf(CalibrateConfirm::from_buffer(
|
OpcodeM0ToM4::MlmeBeaconNotifyInd => {
|
||||||
&payload[2..],
|
Ok(MacEvent::MlmeBeaconNotifyInd(BeaconNotifyIndication::from_buffer(buf)?))
|
||||||
)?)),
|
}
|
||||||
OpcodeM0ToM4::McpsDataCnf => Ok(MacEvent::McpsDataCnf(DataConfirm::from_buffer(&payload[2..])?)),
|
OpcodeM0ToM4::MlmeCommStatusInd => Ok(MacEvent::MlmeCommStatusInd(CommStatusIndication::from_buffer(buf)?)),
|
||||||
OpcodeM0ToM4::McpsPurgeCnf => Ok(MacEvent::McpsPurgeCnf(PurgeConfirm::from_buffer(&payload[2..])?)),
|
OpcodeM0ToM4::MlmeGtsInd => Ok(MacEvent::MlmeGtsInd(GtsIndication::from_buffer(buf)?)),
|
||||||
OpcodeM0ToM4::MlmeAssociateInd => Ok(MacEvent::MlmeAssociateInd(AssociateIndication::from_buffer(
|
OpcodeM0ToM4::MlmeOrphanInd => Ok(MacEvent::MlmeOrphanInd(OrphanIndication::from_buffer(buf)?)),
|
||||||
&payload[2..],
|
OpcodeM0ToM4::MlmeSyncLossInd => Ok(MacEvent::MlmeSyncLossInd(SyncLossIndication::from_buffer(buf)?)),
|
||||||
)?)),
|
OpcodeM0ToM4::MlmeDpsInd => Ok(MacEvent::MlmeDpsInd(DpsIndication::from_buffer(buf)?)),
|
||||||
OpcodeM0ToM4::MlmeDisassociateInd => Ok(MacEvent::MlmeDisassociateInd(
|
OpcodeM0ToM4::McpsDataInd => Ok(MacEvent::McpsDataInd(DataIndication::from_buffer(buf)?)),
|
||||||
DisassociateIndication::from_buffer(&payload[2..])?,
|
OpcodeM0ToM4::MlmePollInd => Ok(MacEvent::MlmePollInd(PollIndication::from_buffer(buf)?)),
|
||||||
)),
|
|
||||||
OpcodeM0ToM4::MlmeBeaconNotifyInd => Ok(MacEvent::MlmeBeaconNotifyInd(
|
|
||||||
BeaconNotifyIndication::from_buffer(&payload[2..])?,
|
|
||||||
)),
|
|
||||||
OpcodeM0ToM4::MlmeCommStatusInd => Ok(MacEvent::MlmeCommStatusInd(CommStatusIndication::from_buffer(
|
|
||||||
&payload[2..],
|
|
||||||
)?)),
|
|
||||||
OpcodeM0ToM4::MlmeGtsInd => Ok(MacEvent::MlmeGtsInd(GtsIndication::from_buffer(&payload[2..])?)),
|
|
||||||
OpcodeM0ToM4::MlmeOrphanInd => Ok(MacEvent::MlmeOrphanInd(OrphanIndication::from_buffer(&payload[2..])?)),
|
|
||||||
OpcodeM0ToM4::MlmeSyncLossInd => Ok(MacEvent::MlmeSyncLossInd(SyncLossIndication::from_buffer(
|
|
||||||
&payload[2..],
|
|
||||||
)?)),
|
|
||||||
OpcodeM0ToM4::MlmeDpsInd => Ok(MacEvent::MlmeDpsInd(DpsIndication::from_buffer(&payload[2..])?)),
|
|
||||||
OpcodeM0ToM4::McpsDataInd => Ok(MacEvent::McpsDataInd(DataIndication::from_buffer(&payload[2..])?)),
|
|
||||||
OpcodeM0ToM4::MlmePollInd => Ok(MacEvent::MlmePollInd(PollIndication::from_buffer(&payload[2..])?)),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
use core::slice;
|
||||||
|
|
||||||
use super::consts::MAX_PENDING_ADDRESS;
|
use super::consts::MAX_PENDING_ADDRESS;
|
||||||
use super::event::ParseableMacEvent;
|
use super::event::ParseableMacEvent;
|
||||||
use super::typedefs::{
|
use super::typedefs::{
|
||||||
|
@ -233,6 +235,12 @@ pub struct DataIndication {
|
||||||
|
|
||||||
impl ParseableMacEvent for DataIndication {}
|
impl ParseableMacEvent for DataIndication {}
|
||||||
|
|
||||||
|
impl DataIndication {
|
||||||
|
pub fn payload<'a>(&'a self) -> &'a [u8] {
|
||||||
|
unsafe { slice::from_raw_parts(self.msdu_ptr as *const _ as *const u8, self.msdu_length as usize) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// MLME POLL Indication which will be used for indicating the Data Request
|
/// MLME POLL Indication which will be used for indicating the Data Request
|
||||||
/// reception to upper layer as defined in Zigbee r22 - D.8.2
|
/// reception to upper layer as defined in Zigbee r22 - D.8.2
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
|
|
|
@ -168,9 +168,10 @@ async fn main(spawner: Spawner) {
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let evt = mbox.mac_subsystem.read().await;
|
let evt = mbox.mac_subsystem.read().await;
|
||||||
defmt::info!("{:#x}", evt.mac_event());
|
|
||||||
|
|
||||||
if let Ok(evt) = evt.mac_event() {
|
if let Ok(evt) = evt.mac_event() {
|
||||||
|
defmt::info!("parsed mac event");
|
||||||
|
defmt::info!("{:#x}", evt);
|
||||||
|
|
||||||
match evt {
|
match evt {
|
||||||
MacEvent::MlmeAssociateInd(association) => mbox
|
MacEvent::MlmeAssociateInd(association) => mbox
|
||||||
.mac_subsystem
|
.mac_subsystem
|
||||||
|
@ -184,17 +185,22 @@ async fn main(spawner: Spawner) {
|
||||||
.await
|
.await
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
MacEvent::McpsDataInd(data_ind) => {
|
MacEvent::McpsDataInd(data_ind) => {
|
||||||
let data_addr = data_ind.msdu_ptr;
|
let payload = data_ind.payload();
|
||||||
let mut data = [0u8; 256];
|
let ref_payload = b"Hello from embassy!";
|
||||||
unsafe { data_addr.copy_to(&mut data as *mut _, data_ind.msdu_length as usize) }
|
info!("{}", payload);
|
||||||
info!("{}", data[..data_ind.msdu_length as usize]);
|
|
||||||
|
|
||||||
if &data[..data_ind.msdu_length as usize] == b"Hello from embassy!" {
|
if payload == ref_payload {
|
||||||
info!("success");
|
info!("success");
|
||||||
|
} else {
|
||||||
|
info!("ref payload: {}", ref_payload);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {
|
||||||
|
defmt::info!("other mac event");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
defmt::info!("failed to parse mac event");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue