stm32/wpan: fix bugs
This commit is contained in:
parent
0122b813d3
commit
978e7b5e77
@ -45,15 +45,15 @@ pub struct AsynchEvt {
|
|||||||
payload: [u8; 1],
|
payload: [u8; 1],
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Default)]
|
#[derive(Copy, Clone)]
|
||||||
#[repr(C, packed)]
|
#[repr(C, packed)]
|
||||||
pub struct Evt {
|
pub struct Evt {
|
||||||
pub evt_code: u8,
|
pub evt_code: u8,
|
||||||
pub payload_len: u8,
|
pub payload_len: u8,
|
||||||
pub payload: [u8; 1],
|
pub payload: [u8; 255],
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Default)]
|
#[derive(Copy, Clone)]
|
||||||
#[repr(C, packed)]
|
#[repr(C, packed)]
|
||||||
pub struct EvtSerial {
|
pub struct EvtSerial {
|
||||||
pub kind: u8,
|
pub kind: u8,
|
||||||
@ -75,7 +75,7 @@ pub struct EvtStub {
|
|||||||
/// Be careful that the asynchronous events reported by the CPU2 on the system channel do
|
/// Be careful that the asynchronous events reported by the CPU2 on the system channel do
|
||||||
/// include the header and shall use `EvtPacket` format. Only the command response format on the
|
/// include the header and shall use `EvtPacket` format. Only the command response format on the
|
||||||
/// system channel is different.
|
/// system channel is different.
|
||||||
#[derive(Copy, Clone, Default)]
|
#[derive(Copy, Clone)]
|
||||||
#[repr(C, packed)]
|
#[repr(C, packed)]
|
||||||
pub struct EvtPacket {
|
pub struct EvtPacket {
|
||||||
pub header: PacketHeader,
|
pub header: PacketHeader,
|
||||||
|
@ -8,14 +8,13 @@ use embassy_futures::poll_once;
|
|||||||
use embassy_stm32::ipcc::Ipcc;
|
use embassy_stm32::ipcc::Ipcc;
|
||||||
use embassy_sync::waitqueue::AtomicWaker;
|
use embassy_sync::waitqueue::AtomicWaker;
|
||||||
|
|
||||||
|
use crate::channels;
|
||||||
use crate::cmd::CmdPacket;
|
use crate::cmd::CmdPacket;
|
||||||
use crate::consts::TlPacketType;
|
use crate::consts::TlPacketType;
|
||||||
use crate::evt::{EvtBox, EvtPacket};
|
use crate::evt::{EvtBox, EvtPacket};
|
||||||
use crate::tables::{
|
use crate::tables::{
|
||||||
Mac802_15_4Table, MAC_802_15_4_CMD_BUFFER, MAC_802_15_4_NOTIF_RSP_EVT_BUFFER, TL_MAC_802_15_4_TABLE,
|
Mac802_15_4Table, MAC_802_15_4_CMD_BUFFER, MAC_802_15_4_NOTIF_RSP_EVT_BUFFER, TL_MAC_802_15_4_TABLE,
|
||||||
};
|
};
|
||||||
use crate::unsafe_linked_list::LinkedListNode;
|
|
||||||
use crate::{channels, EVT_QUEUE};
|
|
||||||
|
|
||||||
static MAC_WAKER: AtomicWaker = AtomicWaker::new();
|
static MAC_WAKER: AtomicWaker = AtomicWaker::new();
|
||||||
static MAC_EVT_OUT: AtomicBool = AtomicBool::new(false);
|
static MAC_EVT_OUT: AtomicBool = AtomicBool::new(false);
|
||||||
@ -27,8 +26,6 @@ pub struct Mac {
|
|||||||
impl Mac {
|
impl Mac {
|
||||||
pub(crate) fn new() -> Self {
|
pub(crate) fn new() -> Self {
|
||||||
unsafe {
|
unsafe {
|
||||||
LinkedListNode::init_head(EVT_QUEUE.as_mut_ptr());
|
|
||||||
|
|
||||||
TL_MAC_802_15_4_TABLE.as_mut_ptr().write_volatile(Mac802_15_4Table {
|
TL_MAC_802_15_4_TABLE.as_mut_ptr().write_volatile(Mac802_15_4Table {
|
||||||
p_cmdrsp_buffer: MAC_802_15_4_CMD_BUFFER.as_mut_ptr().cast(),
|
p_cmdrsp_buffer: MAC_802_15_4_CMD_BUFFER.as_mut_ptr().cast(),
|
||||||
p_notack_buffer: MAC_802_15_4_NOTIF_RSP_EVT_BUFFER.as_mut_ptr().cast(),
|
p_notack_buffer: MAC_802_15_4_NOTIF_RSP_EVT_BUFFER.as_mut_ptr().cast(),
|
||||||
@ -42,7 +39,12 @@ impl Mac {
|
|||||||
/// SAFETY: passing a pointer to something other than a managed event packet is UB
|
/// SAFETY: passing a pointer to something other than a managed event packet is UB
|
||||||
pub(crate) unsafe fn drop_event_packet(_: *mut EvtPacket) {
|
pub(crate) unsafe fn drop_event_packet(_: *mut EvtPacket) {
|
||||||
// Write the ack
|
// Write the ack
|
||||||
CmdPacket::write_into(MAC_802_15_4_CMD_BUFFER.as_mut_ptr(), TlPacketType::OtAck, 0, &[]);
|
CmdPacket::write_into(
|
||||||
|
MAC_802_15_4_NOTIF_RSP_EVT_BUFFER.as_mut_ptr() as *mut _,
|
||||||
|
TlPacketType::OtAck,
|
||||||
|
0,
|
||||||
|
&[],
|
||||||
|
);
|
||||||
|
|
||||||
// Clear the rx flag
|
// Clear the rx flag
|
||||||
let _ = poll_once(Ipcc::receive::<bool>(
|
let _ = poll_once(Ipcc::receive::<bool>(
|
||||||
|
@ -4,6 +4,7 @@ use core::ptr;
|
|||||||
use crate::cmd::CmdPacket;
|
use crate::cmd::CmdPacket;
|
||||||
use crate::consts::TlPacketType;
|
use crate::consts::TlPacketType;
|
||||||
use crate::evt::{CcEvt, EvtBox, EvtPacket};
|
use crate::evt::{CcEvt, EvtBox, EvtPacket};
|
||||||
|
#[allow(unused_imports)]
|
||||||
use crate::shci::{SchiCommandStatus, ShciBleInitCmdParam, ShciOpcode};
|
use crate::shci::{SchiCommandStatus, ShciBleInitCmdParam, ShciOpcode};
|
||||||
use crate::tables::{SysTable, WirelessFwInfoTable};
|
use crate::tables::{SysTable, WirelessFwInfoTable};
|
||||||
use crate::unsafe_linked_list::LinkedListNode;
|
use crate::unsafe_linked_list::LinkedListNode;
|
||||||
|
Loading…
Reference in New Issue
Block a user