mirror of
https://github.com/espressif/openthread.git
synced 2026-07-31 08:07:47 +00:00
[mac] define TxFrame and RxFrame types (#4040)
This commit defines RxFrame for receiving frames and TxFrame for transmitting frames. The motivation is to prevent invalid uses of Mac::Frame methods, because some of them are only available for rx frames and some only for tx frames.
This commit is contained in:
@@ -177,7 +177,7 @@ COMMONCFLAGS += -DOPENTHREAD_CONFIG_SNTP_CLIENT_ENABLE=1
|
||||
endif
|
||||
|
||||
ifeq ($(TIME_SYNC),1)
|
||||
COMMONCFLAGS += -DOPENTHREAD_CONFIG_TIME_SYNC_ENABLE=1 -DOPENTHREAD_CONFIG_HEADER_IE_SUPPORT=1
|
||||
COMMONCFLAGS += -DOPENTHREAD_CONFIG_TIME_SYNC_ENABLE=1 -DOPENTHREAD_MAC_CONFIG_HEADER_IE_SUPPORT=1
|
||||
endif
|
||||
|
||||
ifeq ($(UDP_FORWARD),1)
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @def OPENTHREAD_CONFIG_HEADER_IE_SUPPORT
|
||||
* @def OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
*
|
||||
* Define as 1 to support IEEE 802.15.4-2015 Header IE (Information Element) generation and parsing, it must be set
|
||||
* to support following features:
|
||||
@@ -221,7 +221,7 @@
|
||||
*
|
||||
*/
|
||||
#if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
|
||||
#define OPENTHREAD_CONFIG_HEADER_IE_SUPPORT 1
|
||||
#define OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT 1
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -233,7 +233,7 @@
|
||||
* context used by Header IE related features.
|
||||
*
|
||||
*/
|
||||
#if OPENTHREAD_CONFIG_COMMISSIONER_ENABLE || OPENTHREAD_CONFIG_JOINER_ENABLE || OPENTHREAD_CONFIG_HEADER_IE_SUPPORT
|
||||
#if OPENTHREAD_CONFIG_COMMISSIONER_ENABLE || OPENTHREAD_CONFIG_JOINER_ENABLE || OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
#define NRF_MBEDTLS_AES_ALT_INTERRUPT_CONTEXT 1
|
||||
#else
|
||||
#define NRF_MBEDTLS_AES_ALT_INTERRUPT_CONTEXT 0
|
||||
|
||||
@@ -444,7 +444,7 @@
|
||||
*
|
||||
*/
|
||||
#ifndef NRF_802154_TX_STARTED_NOTIFY_ENABLED
|
||||
#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT
|
||||
#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
#define NRF_802154_TX_STARTED_NOTIFY_ENABLED 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -84,7 +84,7 @@ static otRadioFrame sReceivedFrames[NRF_802154_RX_BUFFERS];
|
||||
static otRadioFrame sTransmitFrame;
|
||||
static uint8_t sTransmitPsdu[OT_RADIO_FRAME_MAX_SIZE + 1];
|
||||
|
||||
#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT
|
||||
#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
static otRadioIeInfo sTransmitIeInfo;
|
||||
#endif
|
||||
static otInstance *sInstance = NULL;
|
||||
@@ -116,7 +116,7 @@ static void dataInit(void)
|
||||
sDisabled = true;
|
||||
|
||||
sTransmitFrame.mPsdu = sTransmitPsdu + 1;
|
||||
#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT
|
||||
#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
sTransmitFrame.mInfo.mTxInfo.mIeInfo = &sTransmitIeInfo;
|
||||
#endif
|
||||
|
||||
@@ -696,7 +696,7 @@ void nrf5RadioProcess(otInstance *aInstance)
|
||||
}
|
||||
}
|
||||
|
||||
#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT
|
||||
#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
void nrf_802154_received_timestamp_raw(uint8_t *p_data, int8_t power, uint8_t lqi, uint32_t time)
|
||||
#else
|
||||
void nrf_802154_received_raw(uint8_t *p_data, int8_t power, uint8_t lqi)
|
||||
@@ -847,14 +847,14 @@ int8_t otPlatRadioGetReceiveSensitivity(otInstance *aInstance)
|
||||
return NRF52811_RECEIVE_SENSITIVITY;
|
||||
}
|
||||
|
||||
#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT
|
||||
#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
void nrf_802154_tx_started(const uint8_t *aFrame)
|
||||
{
|
||||
bool notifyFrameUpdated = false;
|
||||
assert(aFrame == sTransmitPsdu);
|
||||
|
||||
#if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
|
||||
if (sTransmitFrame.mIeInfo->mTimeIeOffset != 0)
|
||||
if (sTransmitFrame.mInfo.mTxInfo.mIeInfo->mTimeIeOffset != 0)
|
||||
{
|
||||
uint8_t *timeIe = sTransmitFrame.mPsdu + sTransmitFrame.mInfo.mTxInfo.mIeInfo->mTimeIeOffset;
|
||||
uint64_t time = otPlatTimeGet() + sTransmitFrame.mInfo.mTxInfo.mIeInfo->mNetworkTimeOffset;
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @def OPENTHREAD_CONFIG_HEADER_IE_SUPPORT
|
||||
* @def OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
*
|
||||
* Define as 1 to support IEEE 802.15.4-2015 Header IE (Information Element) generation and parsing, it must be set
|
||||
* to support following features:
|
||||
@@ -253,7 +253,7 @@
|
||||
*
|
||||
*/
|
||||
#if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
|
||||
#define OPENTHREAD_CONFIG_HEADER_IE_SUPPORT 1
|
||||
#define OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT 1
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
||||
@@ -461,7 +461,7 @@
|
||||
*
|
||||
*/
|
||||
#ifndef NRF_802154_TX_STARTED_NOTIFY_ENABLED
|
||||
#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT
|
||||
#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
#define NRF_802154_TX_STARTED_NOTIFY_ENABLED 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -84,7 +84,7 @@ static otRadioFrame sReceivedFrames[NRF_802154_RX_BUFFERS];
|
||||
static otRadioFrame sTransmitFrame;
|
||||
static uint8_t sTransmitPsdu[OT_RADIO_FRAME_MAX_SIZE + 1];
|
||||
|
||||
#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT
|
||||
#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
static otRadioIeInfo sTransmitIeInfo;
|
||||
#endif
|
||||
static otInstance *sInstance = NULL;
|
||||
@@ -116,7 +116,7 @@ static void dataInit(void)
|
||||
sDisabled = true;
|
||||
|
||||
sTransmitFrame.mPsdu = sTransmitPsdu + 1;
|
||||
#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT
|
||||
#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
sTransmitFrame.mInfo.mTxInfo.mIeInfo = &sTransmitIeInfo;
|
||||
#endif
|
||||
|
||||
@@ -696,7 +696,7 @@ void nrf5RadioProcess(otInstance *aInstance)
|
||||
}
|
||||
}
|
||||
|
||||
#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT
|
||||
#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
void nrf_802154_received_timestamp_raw(uint8_t *p_data, int8_t power, uint8_t lqi, uint32_t time)
|
||||
#else
|
||||
void nrf_802154_received_raw(uint8_t *p_data, int8_t power, uint8_t lqi)
|
||||
@@ -848,14 +848,14 @@ int8_t otPlatRadioGetReceiveSensitivity(otInstance *aInstance)
|
||||
return NRF52840_RECEIVE_SENSITIVITY;
|
||||
}
|
||||
|
||||
#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT
|
||||
#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
void nrf_802154_tx_started(const uint8_t *aFrame)
|
||||
{
|
||||
bool notifyFrameUpdated = false;
|
||||
assert(aFrame == sTransmitPsdu);
|
||||
|
||||
#if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
|
||||
if (sTransmitFrame.mIeInfo->mTimeIeOffset != 0)
|
||||
if (sTransmitFrame.mInfo.mTxInfo.mIeInfo->mTimeIeOffset != 0)
|
||||
{
|
||||
uint8_t *timeIe = sTransmitFrame.mPsdu + sTransmitFrame.mInfo.mTxInfo.mIeInfo->mTimeIeOffset;
|
||||
uint64_t time = otPlatTimeGet() + sTransmitFrame.mInfo.mTxInfo.mIeInfo->mNetworkTimeOffset;
|
||||
|
||||
@@ -128,7 +128,7 @@ static otRadioFrame sReceiveFrame;
|
||||
static otRadioFrame sTransmitFrame;
|
||||
static otRadioFrame sAckFrame;
|
||||
|
||||
#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT
|
||||
#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
static otRadioIeInfo sTransmitIeInfo;
|
||||
#endif
|
||||
|
||||
@@ -495,7 +495,7 @@ void platformRadioInit(void)
|
||||
sTransmitFrame.mPsdu = sTransmitMessage.mPsdu;
|
||||
sAckFrame.mPsdu = sAckMessage.mPsdu;
|
||||
|
||||
#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT
|
||||
#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
sTransmitFrame.mInfo.mTxInfo.mIeInfo = &sTransmitIeInfo;
|
||||
#else
|
||||
sTransmitFrame.mInfo.mTxInfo.mIeInfo = NULL;
|
||||
@@ -698,7 +698,7 @@ static void radioComputeCrc(struct RadioMessage *aMessage, uint16_t aLength)
|
||||
|
||||
void radioSendMessage(otInstance *aInstance)
|
||||
{
|
||||
#if OPENTHREAD_CONFIG_HEADER_IE_SUPPORT
|
||||
#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
bool notifyFrameUpdated = false;
|
||||
|
||||
#if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
|
||||
@@ -724,7 +724,7 @@ void radioSendMessage(otInstance *aInstance)
|
||||
{
|
||||
otPlatRadioFrameUpdated(aInstance, &sTransmitFrame);
|
||||
}
|
||||
#endif // OPENTHREAD_CONFIG_HEADER_IE_SUPPORT
|
||||
#endif // OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
|
||||
sTransmitMessage.mChannel = sTransmitFrame.mChannel;
|
||||
|
||||
|
||||
@@ -562,7 +562,7 @@ extern void otPlatDiagRadioTransmitDone(otInstance *aInstance, otRadioFrame *aFr
|
||||
* The radio driver calls this method to notify OpenThread to process transmit security for the frame,
|
||||
* this happens when the frame includes Header IE(s) that were updated before transmission.
|
||||
*
|
||||
* This function is used when feature `OPENTHREAD_CONFIG_HEADER_IE_SUPPORT` is enabled.
|
||||
* This function is used when feature `OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT` is enabled.
|
||||
*
|
||||
* @note This function can be called from interrupt context and it would only read/write data passed in
|
||||
* via @p aFrame, but would not read/write any state within OpenThread.
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
using namespace ot;
|
||||
|
||||
static void HandleActiveScanResult(Instance &aInstance, Mac::Frame *aFrame);
|
||||
static void HandleActiveScanResult(Instance &aInstance, Mac::RxFrame *aFrame);
|
||||
static void HandleEnergyScanResult(Instance &aInstance, otEnergyScanResult *aResult);
|
||||
|
||||
uint8_t otLinkGetChannel(otInstance *aInstance)
|
||||
@@ -372,7 +372,7 @@ bool otLinkIsActiveScanInProgress(otInstance *aInstance)
|
||||
return instance.Get<Mac::Mac>().IsActiveScanInProgress();
|
||||
}
|
||||
|
||||
void HandleActiveScanResult(Instance &aInstance, Mac::Frame *aFrame)
|
||||
void HandleActiveScanResult(Instance &aInstance, Mac::RxFrame *aFrame)
|
||||
{
|
||||
if (aFrame == NULL)
|
||||
{
|
||||
|
||||
@@ -47,12 +47,14 @@ DataPollHandler::Callbacks::Callbacks(Instance &aInstance)
|
||||
{
|
||||
}
|
||||
|
||||
inline otError DataPollHandler::Callbacks::PrepareFrameForChild(Mac::Frame &aFrame, Child &aChild)
|
||||
inline otError DataPollHandler::Callbacks::PrepareFrameForChild(Mac::TxFrame &aFrame, Child &aChild)
|
||||
{
|
||||
return Get<IndirectSender>().PrepareFrameForChild(aFrame, aChild);
|
||||
}
|
||||
|
||||
inline void DataPollHandler::Callbacks::HandleSentFrameToChild(const Mac::Frame &aFrame, otError aError, Child &aChild)
|
||||
inline void DataPollHandler::Callbacks::HandleSentFrameToChild(const Mac::TxFrame &aFrame,
|
||||
otError aError,
|
||||
Child & aChild)
|
||||
{
|
||||
Get<IndirectSender>().HandleSentFrameToChild(aFrame, aError, aChild);
|
||||
}
|
||||
@@ -118,7 +120,7 @@ void DataPollHandler::RequestFrameChange(FrameChange aChange, Child &aChild)
|
||||
}
|
||||
}
|
||||
|
||||
void DataPollHandler::HandleDataPoll(Mac::Frame &aFrame)
|
||||
void DataPollHandler::HandleDataPoll(Mac::RxFrame &aFrame)
|
||||
{
|
||||
Mac::Address macSource;
|
||||
Child * child;
|
||||
@@ -164,7 +166,7 @@ exit:
|
||||
return;
|
||||
}
|
||||
|
||||
otError DataPollHandler::HandleFrameRequest(Mac::Frame &aFrame)
|
||||
otError DataPollHandler::HandleFrameRequest(Mac::TxFrame &aFrame)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
|
||||
@@ -196,7 +198,7 @@ exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
void DataPollHandler::HandleSentFrame(const Mac::Frame &aFrame, otError aError)
|
||||
void DataPollHandler::HandleSentFrame(const Mac::TxFrame &aFrame, otError aError)
|
||||
{
|
||||
Child *child = mIndirectTxChild;
|
||||
|
||||
@@ -209,7 +211,7 @@ exit:
|
||||
ProcessPendingPolls();
|
||||
}
|
||||
|
||||
void DataPollHandler::HandleSentFrame(const Mac::Frame &aFrame, otError aError, Child &aChild)
|
||||
void DataPollHandler::HandleSentFrame(const Mac::TxFrame &aFrame, otError aError, Child &aChild)
|
||||
{
|
||||
if (aChild.IsFramePurgePending())
|
||||
{
|
||||
|
||||
@@ -151,7 +151,7 @@ public:
|
||||
* @retval OT_ERROR_ABORT Indirect transmission to child should be aborted (no frame for the child).
|
||||
*
|
||||
*/
|
||||
otError PrepareFrameForChild(Mac::Frame &aFrame, Child &aChild);
|
||||
otError PrepareFrameForChild(Mac::TxFrame &aFrame, Child &aChild);
|
||||
|
||||
/**
|
||||
* This callback method notifies the end of indirect frame transmission to a child.
|
||||
@@ -164,7 +164,7 @@ public:
|
||||
* @param[in] aChild The child to which the frame was transmitted.
|
||||
*
|
||||
*/
|
||||
void HandleSentFrameToChild(const Mac::Frame &aFrame, otError aError, Child &aChild);
|
||||
void HandleSentFrameToChild(const Mac::TxFrame &aFrame, otError aError, Child &aChild);
|
||||
|
||||
/**
|
||||
* This callback method notifies that a requested frame change from `RequestFrameChange()` is processed.
|
||||
@@ -242,11 +242,11 @@ public:
|
||||
|
||||
private:
|
||||
// Callbacks from MAC
|
||||
void HandleDataPoll(Mac::Frame &aFrame);
|
||||
otError HandleFrameRequest(Mac::Frame &aFrame);
|
||||
void HandleSentFrame(const Mac::Frame &aFrame, otError aError);
|
||||
void HandleDataPoll(Mac::RxFrame &aFrame);
|
||||
otError HandleFrameRequest(Mac::TxFrame &aFrame);
|
||||
void HandleSentFrame(const Mac::TxFrame &aFrame, otError aError);
|
||||
|
||||
void HandleSentFrame(const Mac::Frame &aFrame, otError aError, Child &aChild);
|
||||
void HandleSentFrame(const Mac::TxFrame &aFrame, otError aError, Child &aChild);
|
||||
void ProcessPendingPolls(void);
|
||||
|
||||
Child * mIndirectTxChild;
|
||||
|
||||
@@ -196,7 +196,7 @@ uint32_t DataPollSender::GetKeepAlivePollPeriod(void) const
|
||||
return period;
|
||||
}
|
||||
|
||||
void DataPollSender::HandlePollSent(Mac::Frame &aFrame, otError aError)
|
||||
void DataPollSender::HandlePollSent(Mac::TxFrame &aFrame, otError aError)
|
||||
{
|
||||
Mac::Address macDest;
|
||||
bool shouldRecalculatePollPeriod = false;
|
||||
@@ -301,7 +301,7 @@ exit:
|
||||
return;
|
||||
}
|
||||
|
||||
void DataPollSender::CheckFramePending(Mac::Frame &aFrame)
|
||||
void DataPollSender::CheckFramePending(Mac::RxFrame &aFrame)
|
||||
{
|
||||
VerifyOrExit(mEnabled);
|
||||
|
||||
|
||||
@@ -153,7 +153,7 @@ public:
|
||||
* @param[in] aError Error status of a data poll message transmission.
|
||||
*
|
||||
*/
|
||||
void HandlePollSent(Mac::Frame &aFrame, otError aError);
|
||||
void HandlePollSent(Mac::TxFrame &aFrame, otError aError);
|
||||
|
||||
/**
|
||||
* This method informs the data poll sender that a data poll timeout happened, i.e., when the ack in response to
|
||||
@@ -170,7 +170,7 @@ public:
|
||||
* pending frame.
|
||||
*
|
||||
*/
|
||||
void CheckFramePending(Mac::Frame &aFrame);
|
||||
void CheckFramePending(Mac::RxFrame &aFrame);
|
||||
|
||||
/**
|
||||
* This method asks the data poll sender to recalculate the poll period.
|
||||
|
||||
@@ -149,7 +149,7 @@ exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
void LinkRaw::InvokeReceiveDone(Frame *aFrame, otError aError)
|
||||
void LinkRaw::InvokeReceiveDone(RxFrame *aFrame, otError aError)
|
||||
{
|
||||
otLogDebgMac("LinkRaw::ReceiveDone(%d bytes), error:%s", (aFrame != NULL) ? aFrame->mLength : 0,
|
||||
otThreadErrorToString(aError));
|
||||
@@ -173,7 +173,7 @@ exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
void LinkRaw::InvokeTransmitDone(Frame &aFrame, Frame *aAckFrame, otError aError)
|
||||
void LinkRaw::InvokeTransmitDone(TxFrame &aFrame, RxFrame *aAckFrame, otError aError)
|
||||
{
|
||||
otLogDebgMac("LinkRaw::TransmitDone(%d bytes), error:%s", aFrame.mLength, otThreadErrorToString(aError));
|
||||
|
||||
@@ -210,11 +210,11 @@ void LinkRaw::InvokeEnergyScanDone(int8_t aEnergyScanMaxRssi)
|
||||
|
||||
#if (OPENTHREAD_CONFIG_LOG_LEVEL >= OT_LOG_LEVEL_INFO) && (OPENTHREAD_CONFIG_LOG_MAC == 1)
|
||||
|
||||
void LinkRaw::RecordFrameTransmitStatus(const Frame &aFrame,
|
||||
const Frame *aAckFrame,
|
||||
otError aError,
|
||||
uint8_t aRetryCount,
|
||||
bool aWillRetx)
|
||||
void LinkRaw::RecordFrameTransmitStatus(const TxFrame &aFrame,
|
||||
const RxFrame *aAckFrame,
|
||||
otError aError,
|
||||
uint8_t aRetryCount,
|
||||
bool aWillRetx)
|
||||
{
|
||||
OT_UNUSED_VARIABLE(aAckFrame);
|
||||
OT_UNUSED_VARIABLE(aWillRetx);
|
||||
|
||||
@@ -112,7 +112,7 @@ public:
|
||||
* OT_ERROR_NO_BUFS when a frame could not be received due to lack of rx buffer space.
|
||||
*
|
||||
*/
|
||||
void InvokeReceiveDone(Frame *aFrame, otError aError);
|
||||
void InvokeReceiveDone(RxFrame *aFrame, otError aError);
|
||||
|
||||
/**
|
||||
* This method gets the radio transmit frame.
|
||||
@@ -120,7 +120,7 @@ public:
|
||||
* @returns The transmit frame.
|
||||
*
|
||||
*/
|
||||
Frame &GetTransmitFrame(void) { return mSubMac.GetTransmitFrame(); }
|
||||
TxFrame &GetTransmitFrame(void) { return mSubMac.GetTransmitFrame(); }
|
||||
|
||||
/**
|
||||
* This method starts a (single) Transmit on the link-layer.
|
||||
@@ -146,7 +146,7 @@ public:
|
||||
* OT_ERROR_ABORT when transmission was aborted for other reasons.
|
||||
*
|
||||
*/
|
||||
void InvokeTransmitDone(Frame &aFrame, Frame *aAckFrame, otError aError);
|
||||
void InvokeTransmitDone(TxFrame &aFrame, RxFrame *aAckFrame, otError aError);
|
||||
|
||||
/**
|
||||
* This method starts a (single) Energy Scan on the link-layer.
|
||||
@@ -261,13 +261,13 @@ public:
|
||||
*
|
||||
*/
|
||||
#if (OPENTHREAD_CONFIG_LOG_LEVEL >= OT_LOG_LEVEL_INFO) && (OPENTHREAD_CONFIG_LOG_MAC == 1)
|
||||
void RecordFrameTransmitStatus(const Frame &aFrame,
|
||||
const Frame *aAckFrame,
|
||||
otError aError,
|
||||
uint8_t aRetryCount,
|
||||
bool aWillRetx);
|
||||
void RecordFrameTransmitStatus(const TxFrame &aFrame,
|
||||
const RxFrame *aAckFrame,
|
||||
otError aError,
|
||||
uint8_t aRetryCount,
|
||||
bool aWillRetx);
|
||||
#else
|
||||
void RecordFrameTransmitStatus(const Frame &, const Frame *, otError, uint8_t, bool) {}
|
||||
void RecordFrameTransmitStatus(const TxFrame &, const RxFrame *, otError, uint8_t, bool) {}
|
||||
#endif
|
||||
|
||||
private:
|
||||
|
||||
+25
-25
@@ -205,7 +205,7 @@ bool Mac::IsInTransmitState(void) const
|
||||
return retval;
|
||||
}
|
||||
|
||||
otError Mac::ConvertBeaconToActiveScanResult(Frame *aBeaconFrame, otActiveScanResult &aResult)
|
||||
otError Mac::ConvertBeaconToActiveScanResult(RxFrame *aBeaconFrame, otActiveScanResult &aResult)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
Address address;
|
||||
@@ -523,7 +523,7 @@ otError Mac::RequestOutOfBandFrameTransmission(otRadioFrame *aOobFrame)
|
||||
VerifyOrExit(!mPendingTransmitOobFrame && (mOperation != kOperationTransmitOutOfBandFrame),
|
||||
error = OT_ERROR_ALREADY);
|
||||
|
||||
mOobFrame = static_cast<Frame *>(aOobFrame);
|
||||
mOobFrame = static_cast<TxFrame *>(aOobFrame);
|
||||
|
||||
StartOperation(kOperationTransmitOutOfBandFrame);
|
||||
|
||||
@@ -789,7 +789,7 @@ void Mac::GenerateNonce(const ExtAddress &aAddress, uint32_t aFrameCounter, uint
|
||||
aNonce[0] = aSecurityLevel;
|
||||
}
|
||||
|
||||
otError Mac::PrepareDataRequest(Frame &aFrame)
|
||||
otError Mac::PrepareDataRequest(TxFrame &aFrame)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
Address src, dst;
|
||||
@@ -822,7 +822,7 @@ exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
void Mac::PrepareBeaconRequest(Frame &aFrame)
|
||||
void Mac::PrepareBeaconRequest(TxFrame &aFrame)
|
||||
{
|
||||
uint16_t fcf = Frame::kFcfFrameMacCmd | Frame::kFcfDstAddrShort | Frame::kFcfSrcAddrNone;
|
||||
|
||||
@@ -834,7 +834,7 @@ void Mac::PrepareBeaconRequest(Frame &aFrame)
|
||||
otLogInfoMac("Sending Beacon Request");
|
||||
}
|
||||
|
||||
void Mac::PrepareBeacon(Frame &aFrame)
|
||||
void Mac::PrepareBeacon(TxFrame &aFrame)
|
||||
{
|
||||
uint8_t numUnsecurePorts;
|
||||
uint8_t beaconLength;
|
||||
@@ -909,7 +909,7 @@ exit:
|
||||
return shouldSend;
|
||||
}
|
||||
|
||||
void Mac::ProcessTransmitAesCcm(Frame &aFrame, const ExtAddress *aExtAddress)
|
||||
void Mac::ProcessTransmitAesCcm(TxFrame &aFrame, const ExtAddress *aExtAddress)
|
||||
{
|
||||
uint32_t frameCounter = 0;
|
||||
uint8_t securityLevel;
|
||||
@@ -934,7 +934,7 @@ void Mac::ProcessTransmitAesCcm(Frame &aFrame, const ExtAddress *aExtAddress)
|
||||
aesCcm.Finalize(aFrame.GetFooter(), &tagLength);
|
||||
}
|
||||
|
||||
void Mac::ProcessTransmitSecurity(Frame &aFrame, bool aProcessAesCcm)
|
||||
void Mac::ProcessTransmitSecurity(TxFrame &aFrame, bool aProcessAesCcm)
|
||||
{
|
||||
KeyManager & keyManager = Get<KeyManager>();
|
||||
uint8_t keyIdMode;
|
||||
@@ -1005,10 +1005,10 @@ exit:
|
||||
|
||||
void Mac::BeginTransmit(void)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
bool applyTransmitSecurity = true;
|
||||
bool processTransmitAesCcm = true;
|
||||
Frame & sendFrame = mSubMac.GetTransmitFrame();
|
||||
otError error = OT_ERROR_NONE;
|
||||
bool applyTransmitSecurity = true;
|
||||
bool processTransmitAesCcm = true;
|
||||
TxFrame &sendFrame = mSubMac.GetTransmitFrame();
|
||||
#if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
|
||||
uint8_t timeIeOffset = 0;
|
||||
#endif
|
||||
@@ -1135,11 +1135,11 @@ void Mac::RecordCcaStatus(bool aCcaSuccess, uint8_t aChannel)
|
||||
}
|
||||
}
|
||||
|
||||
void Mac::RecordFrameTransmitStatus(const Frame &aFrame,
|
||||
const Frame *aAckFrame,
|
||||
otError aError,
|
||||
uint8_t aRetryCount,
|
||||
bool aWillRetx)
|
||||
void Mac::RecordFrameTransmitStatus(const TxFrame &aFrame,
|
||||
const RxFrame *aAckFrame,
|
||||
otError aError,
|
||||
uint8_t aRetryCount,
|
||||
bool aWillRetx)
|
||||
{
|
||||
bool ackRequested = aFrame.GetAckRequest();
|
||||
Address dstAddr;
|
||||
@@ -1245,7 +1245,7 @@ exit:
|
||||
return;
|
||||
}
|
||||
|
||||
void Mac::HandleTransmitDone(Frame &aFrame, Frame *aAckFrame, otError aError)
|
||||
void Mac::HandleTransmitDone(TxFrame &aFrame, RxFrame *aAckFrame, otError aError)
|
||||
{
|
||||
Address dstAddr;
|
||||
|
||||
@@ -1373,7 +1373,7 @@ void Mac::HandleTimer(void)
|
||||
}
|
||||
}
|
||||
|
||||
otError Mac::ProcessReceiveSecurity(Frame &aFrame, const Address &aSrcAddr, Neighbor *aNeighbor)
|
||||
otError Mac::ProcessReceiveSecurity(RxFrame &aFrame, const Address &aSrcAddr, Neighbor *aNeighbor)
|
||||
{
|
||||
KeyManager & keyManager = Get<KeyManager>();
|
||||
otError error = OT_ERROR_NONE;
|
||||
@@ -1514,7 +1514,7 @@ exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
void Mac::HandleReceivedFrame(Frame *aFrame, otError aError)
|
||||
void Mac::HandleReceivedFrame(RxFrame *aFrame, otError aError)
|
||||
{
|
||||
Address srcaddr;
|
||||
Address dstaddr;
|
||||
@@ -1807,7 +1807,7 @@ exit:
|
||||
}
|
||||
}
|
||||
|
||||
bool Mac::HandleMacCommand(Frame &aFrame)
|
||||
bool Mac::HandleMacCommand(RxFrame &aFrame)
|
||||
{
|
||||
bool didHandle = false;
|
||||
uint8_t commandId;
|
||||
@@ -1919,7 +1919,7 @@ const char *Mac::OperationToString(Operation aOperation)
|
||||
return retval;
|
||||
}
|
||||
|
||||
void Mac::LogFrameRxFailure(const Frame *aFrame, otError aError) const
|
||||
void Mac::LogFrameRxFailure(const RxFrame *aFrame, otError aError) const
|
||||
{
|
||||
otLogLevel logLevel;
|
||||
|
||||
@@ -1947,7 +1947,7 @@ void Mac::LogFrameRxFailure(const Frame *aFrame, otError aError) const
|
||||
}
|
||||
}
|
||||
|
||||
void Mac::LogFrameTxFailure(const Frame &aFrame, otError aError, uint8_t aRetryCount) const
|
||||
void Mac::LogFrameTxFailure(const TxFrame &aFrame, otError aError, uint8_t aRetryCount) const
|
||||
{
|
||||
otLogInfoMac("Frame tx failed, error:%s, retries:%d/%d, %s", otThreadErrorToString(aError), aRetryCount,
|
||||
aFrame.GetMaxFrameRetries(), aFrame.ToInfoString().AsCString());
|
||||
@@ -1960,7 +1960,7 @@ void Mac::LogBeacon(const char *aActionText, const BeaconPayload &aBeaconPayload
|
||||
|
||||
#else // #if (OPENTHREAD_CONFIG_LOG_LEVEL >= OT_LOG_LEVEL_INFO) && (OPENTHREAD_CONFIG_LOG_MAC == 1)
|
||||
|
||||
void Mac::LogFrameRxFailure(const Frame *, otError) const
|
||||
void Mac::LogFrameRxFailure(const RxFrame *, otError) const
|
||||
{
|
||||
}
|
||||
|
||||
@@ -1968,7 +1968,7 @@ void Mac::LogBeacon(const char *, const BeaconPayload &) const
|
||||
{
|
||||
}
|
||||
|
||||
void Mac::LogFrameTxFailure(const Frame &, otError, uint8_t) const
|
||||
void Mac::LogFrameTxFailure(const TxFrame &, otError, uint8_t) const
|
||||
{
|
||||
}
|
||||
|
||||
@@ -1977,7 +1977,7 @@ void Mac::LogFrameTxFailure(const Frame &, otError, uint8_t) const
|
||||
// LCOV_EXCL_STOP
|
||||
|
||||
#if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
|
||||
uint8_t Mac::GetTimeIeOffset(Frame &aFrame)
|
||||
uint8_t Mac::GetTimeIeOffset(const Frame &aFrame)
|
||||
{
|
||||
uint8_t offset = 0;
|
||||
const uint8_t *base = aFrame.GetPsdu();
|
||||
|
||||
+20
-21
@@ -114,7 +114,7 @@ public:
|
||||
* @param[in] aBeaconFrame A pointer to the Beacon frame or NULL to indicate end of Active Scan operation.
|
||||
*
|
||||
*/
|
||||
typedef void (*ActiveScanHandler)(Instance &aInstance, Frame *aBeaconFrame);
|
||||
typedef void (*ActiveScanHandler)(Instance &aInstance, RxFrame *aBeaconFrame);
|
||||
|
||||
/**
|
||||
* This method starts an IEEE 802.15.4 Active Scan.
|
||||
@@ -141,7 +141,7 @@ public:
|
||||
* @retval OT_ERROR_PARSE Failed parsing the beacon frame.
|
||||
*
|
||||
*/
|
||||
otError ConvertBeaconToActiveScanResult(Frame *aBeaconFrame, otActiveScanResult &aResult);
|
||||
otError ConvertBeaconToActiveScanResult(RxFrame *aBeaconFrame, otActiveScanResult &aResult);
|
||||
|
||||
/**
|
||||
* This function pointer is called during an Energy Scan when the result for a channel is ready or the scan
|
||||
@@ -438,7 +438,7 @@ public:
|
||||
* OT_ERROR_ABORT when reception was aborted and a frame was not received.
|
||||
*
|
||||
*/
|
||||
void HandleReceivedFrame(Frame *aFrame, otError aError);
|
||||
void HandleReceivedFrame(RxFrame *aFrame, otError aError);
|
||||
|
||||
/**
|
||||
* This method records CCA status (success/failure) for a frame transmission attempt.
|
||||
@@ -466,11 +466,11 @@ public:
|
||||
* when there was an error in transmission (i.e., `aError` is not NONE).
|
||||
*
|
||||
*/
|
||||
void RecordFrameTransmitStatus(const Frame &aFrame,
|
||||
const Frame *aAckFrame,
|
||||
otError aError,
|
||||
uint8_t aRetryCount,
|
||||
bool aWillRetx);
|
||||
void RecordFrameTransmitStatus(const TxFrame &aFrame,
|
||||
const RxFrame *aAckFrame,
|
||||
otError aError,
|
||||
uint8_t aRetryCount,
|
||||
bool aWillRetx);
|
||||
|
||||
/**
|
||||
* This method is called to handle transmit events.
|
||||
@@ -483,7 +483,7 @@ public:
|
||||
* OT_ERROR_ABORT when transmission was aborted for other reasons.
|
||||
*
|
||||
*/
|
||||
void HandleTransmitDone(Frame &aFrame, Frame *aAckFrame, otError aError);
|
||||
void HandleTransmitDone(TxFrame &aFrame, RxFrame *aAckFrame, otError aError);
|
||||
|
||||
/**
|
||||
* This method returns if an active scan is in progress.
|
||||
@@ -607,7 +607,7 @@ public:
|
||||
* for AES CCM computation.
|
||||
*
|
||||
*/
|
||||
static void ProcessTransmitAesCcm(Frame &aFrame, const ExtAddress *aExtAddress);
|
||||
static void ProcessTransmitAesCcm(TxFrame &aFrame, const ExtAddress *aExtAddress);
|
||||
|
||||
private:
|
||||
enum
|
||||
@@ -643,24 +643,24 @@ private:
|
||||
* @param[in] aProcessAesCcm TRUE to perform AES CCM immediately, FALSE otherwise.
|
||||
*
|
||||
*/
|
||||
void ProcessTransmitSecurity(Frame &aFrame, bool aProcessAesCcm);
|
||||
void ProcessTransmitSecurity(TxFrame &aFrame, bool aProcessAesCcm);
|
||||
|
||||
static void GenerateNonce(const ExtAddress &aAddress,
|
||||
uint32_t aFrameCounter,
|
||||
uint8_t aSecurityLevel,
|
||||
uint8_t * aNonce);
|
||||
|
||||
otError ProcessReceiveSecurity(Frame &aFrame, const Address &aSrcAddr, Neighbor *aNeighbor);
|
||||
otError ProcessReceiveSecurity(RxFrame &aFrame, const Address &aSrcAddr, Neighbor *aNeighbor);
|
||||
void UpdateIdleMode(void);
|
||||
void StartOperation(Operation aOperation);
|
||||
void FinishOperation(void);
|
||||
void PerformNextOperation(void);
|
||||
otError PrepareDataRequest(Frame &aFrame);
|
||||
void PrepareBeaconRequest(Frame &aFrame);
|
||||
void PrepareBeacon(Frame &aFrame);
|
||||
otError PrepareDataRequest(TxFrame &aFrame);
|
||||
void PrepareBeaconRequest(TxFrame &aFrame);
|
||||
void PrepareBeacon(TxFrame &aFrame);
|
||||
bool ShouldSendBeacon(void) const;
|
||||
void BeginTransmit(void);
|
||||
bool HandleMacCommand(Frame &aFrame);
|
||||
bool HandleMacCommand(RxFrame &aFrame);
|
||||
Frame * GetOperationFrame(void);
|
||||
|
||||
static void HandleTimer(Timer &aTimer);
|
||||
@@ -673,13 +673,12 @@ private:
|
||||
void PerformEnergyScan(void);
|
||||
void ReportEnergyScanResult(int8_t aRssi);
|
||||
|
||||
void LogFrameRxFailure(const Frame *aFrame, otError aError) const;
|
||||
void LogFrameTxFailure(const Frame &aFrame, otError aError, uint8_t aRetryCount) const;
|
||||
void LogFrameRxFailure(const RxFrame *aFrame, otError aError) const;
|
||||
void LogFrameTxFailure(const TxFrame &aFrame, otError aError, uint8_t aRetryCount) const;
|
||||
void LogBeacon(const char *aActionText, const BeaconPayload &aBeaconPayload) const;
|
||||
|
||||
#if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
|
||||
void ProcessTimeIe(Frame &aFrame);
|
||||
uint8_t GetTimeIeOffset(Frame &aFrame);
|
||||
uint8_t GetTimeIeOffset(const Frame &aFrame);
|
||||
#endif
|
||||
|
||||
static const char *OperationToString(Operation aOperation);
|
||||
@@ -727,7 +726,7 @@ private:
|
||||
SubMac mSubMac;
|
||||
Tasklet mOperationTask;
|
||||
TimerMilli mTimer;
|
||||
Frame * mOobFrame;
|
||||
TxFrame * mOobFrame;
|
||||
otMacCounters mCounters;
|
||||
uint32_t mKeyIdMode2FrameCounter;
|
||||
SuccessRateTracker mCcaSuccessRateTracker;
|
||||
|
||||
@@ -1033,7 +1033,7 @@ exit:
|
||||
}
|
||||
#endif // OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
|
||||
|
||||
void Frame::CopyFrom(const Frame &aFromFrame)
|
||||
void TxFrame::CopyFrom(const TxFrame &aFromFrame)
|
||||
{
|
||||
uint8_t * psduBuffer = mPsdu;
|
||||
otRadioIeInfo *ieInfoBuffer = mInfo.mTxInfo.mIeInfo;
|
||||
|
||||
+220
-200
@@ -1042,141 +1042,6 @@ public:
|
||||
*/
|
||||
void SetChannel(uint8_t aChannel) { mChannel = aChannel; }
|
||||
|
||||
/**
|
||||
* This method returns the RSSI in dBm used for reception.
|
||||
*
|
||||
* @returns The RSSI in dBm used for reception.
|
||||
*
|
||||
*/
|
||||
int8_t GetRssi(void) const { return mInfo.mRxInfo.mRssi; }
|
||||
|
||||
/**
|
||||
* This method sets the RSSI in dBm used for reception.
|
||||
*
|
||||
* @param[in] aRssi The RSSI in dBm used for reception.
|
||||
*
|
||||
*/
|
||||
void SetRssi(int8_t aRssi) { mInfo.mRxInfo.mRssi = aRssi; }
|
||||
|
||||
/**
|
||||
* This method returns the receive Link Quality Indicator.
|
||||
*
|
||||
* @returns The receive Link Quality Indicator.
|
||||
*
|
||||
*/
|
||||
uint8_t GetLqi(void) const { return mInfo.mRxInfo.mLqi; }
|
||||
|
||||
/**
|
||||
* This method sets the receive Link Quality Indicator.
|
||||
*
|
||||
* @param[in] aLqi The receive Link Quality Indicator.
|
||||
*
|
||||
*/
|
||||
void SetLqi(uint8_t aLqi) { mInfo.mRxInfo.mLqi = aLqi; }
|
||||
|
||||
/**
|
||||
* This method returns the maximum number of backoffs the CSMA-CA algorithm will attempt before declaring a channel
|
||||
* access failure.
|
||||
*
|
||||
* Equivalent to macMaxCSMABackoffs in IEEE 802.15.4-2006.
|
||||
*
|
||||
* @returns The maximum number of backoffs the CSMA-CA algorithm will attempt before declaring a channel access
|
||||
* failure.
|
||||
*
|
||||
*/
|
||||
uint8_t GetMaxCsmaBackoffs(void) const { return mInfo.mTxInfo.mMaxCsmaBackoffs; }
|
||||
|
||||
/**
|
||||
* This method sets the maximum number of backoffs the CSMA-CA algorithm will attempt before declaring a channel
|
||||
* access failure.
|
||||
*
|
||||
* Equivalent to macMaxCSMABackoffs in IEEE 802.15.4-2006.
|
||||
*
|
||||
* @param[in] aMaxCsmaBackoffs The maximum number of backoffs the CSMA-CA algorithm will attempt before declaring
|
||||
* a channel access failure.
|
||||
*
|
||||
*/
|
||||
void SetMaxCsmaBackoffs(uint8_t aMaxCsmaBackoffs) { mInfo.mTxInfo.mMaxCsmaBackoffs = aMaxCsmaBackoffs; }
|
||||
|
||||
/**
|
||||
* This method returns the maximum number of retries allowed after a transmission failure.
|
||||
*
|
||||
* Equivalent to macMaxFrameRetries in IEEE 802.15.4-2006.
|
||||
*
|
||||
* @returns The maximum number of retries allowed after a transmission failure.
|
||||
*
|
||||
*/
|
||||
uint8_t GetMaxFrameRetries(void) const { return mInfo.mTxInfo.mMaxFrameRetries; }
|
||||
|
||||
/**
|
||||
* This method sets the maximum number of retries allowed after a transmission failure.
|
||||
*
|
||||
* Equivalent to macMaxFrameRetries in IEEE 802.15.4-2006.
|
||||
*
|
||||
* @param[in] aMaxFrameRetries The maximum number of retries allowed after a transmission failure.
|
||||
*
|
||||
*/
|
||||
void SetMaxFrameRetries(uint8_t aMaxFrameRetries) { mInfo.mTxInfo.mMaxFrameRetries = aMaxFrameRetries; }
|
||||
|
||||
/**
|
||||
* This method indicates whether or not the frame is a retransmission.
|
||||
*
|
||||
* @retval TRUE Frame is a retransmission
|
||||
* @retval FALSE This is a new frame and not a retransmission of an earlier frame.
|
||||
*
|
||||
*/
|
||||
bool IsARetransmission(void) const { return mInfo.mTxInfo.mIsARetx; }
|
||||
|
||||
/**
|
||||
* This method indicates whether or not the received frame is acknowledged with frame pending set.
|
||||
*
|
||||
* @retval TRUE This frame is acknowledged with frame pending set.
|
||||
* @retval FALSE This frame is acknowledged with frame pending not set.
|
||||
*
|
||||
*/
|
||||
bool IsAckedWithFramePending(void) const { return mInfo.mRxInfo.mAckedWithFramePending; }
|
||||
|
||||
/**
|
||||
* This method sets the retransmission flag attribute.
|
||||
*
|
||||
* @param[in] aIsARetx TRUE if frame is a retransmission of an earlier frame, FALSE otherwise.
|
||||
*
|
||||
*/
|
||||
void SetIsARetransmission(bool aIsARetx) { mInfo.mTxInfo.mIsARetx = aIsARetx; }
|
||||
|
||||
/**
|
||||
* This method indicates whether or not CSMA-CA is enabled.
|
||||
*
|
||||
* @retval TRUE CSMA-CA is enabled.
|
||||
* @retval FALSE CSMA-CA is not enabled is not enabled.
|
||||
*
|
||||
*/
|
||||
bool IsCsmaCaEnabled(void) const { return mInfo.mTxInfo.mCsmaCaEnabled; }
|
||||
|
||||
/**
|
||||
* This method sets the CSMA-CA enabled attribute.
|
||||
*
|
||||
* @param[in] aCsmaCaEnabled TRUE if CSMA-CA must be enabled for this packet, FALSE otherwise.
|
||||
*
|
||||
*/
|
||||
void SetCsmaCaEnabled(bool aCsmaCaEnabled) { mInfo.mTxInfo.mCsmaCaEnabled = aCsmaCaEnabled; }
|
||||
|
||||
/**
|
||||
* This method returns the key used for frame encryption and authentication (AES CCM).
|
||||
*
|
||||
* @returns The pointer to the key.
|
||||
*
|
||||
*/
|
||||
const uint8_t *GetAesKey(void) const { return mInfo.mTxInfo.mAesKey; }
|
||||
|
||||
/**
|
||||
* This method sets the key used for frame encryption and authentication (AES CCM).
|
||||
*
|
||||
* @param[in] aAesKey The pointer to the key.
|
||||
*
|
||||
*/
|
||||
void SetAesKey(const uint8_t *aAesKey) { mInfo.mTxInfo.mAesKey = aAesKey; }
|
||||
|
||||
/**
|
||||
* This method returns the IEEE 802.15.4 PSDU length.
|
||||
*
|
||||
@@ -1257,33 +1122,7 @@ public:
|
||||
*/
|
||||
const uint8_t *GetFooter(void) const;
|
||||
|
||||
/**
|
||||
* This method returns the timestamp when the frame was received.
|
||||
*
|
||||
* @returns The timestamp when the frame was received, in microseconds.
|
||||
*
|
||||
*/
|
||||
const uint64_t &GetTimestamp(void) const { return mInfo.mRxInfo.mTimestamp; }
|
||||
|
||||
#if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
|
||||
/**
|
||||
* This method sets the Time IE offset.
|
||||
*
|
||||
* @param[in] aOffset The Time IE offset, 0 means no Time IE.
|
||||
*
|
||||
*/
|
||||
void SetTimeIeOffset(uint8_t aOffset) { mInfo.mTxInfo.mIeInfo->mTimeIeOffset = aOffset; }
|
||||
|
||||
/**
|
||||
* This method sets the offset to network time.
|
||||
*
|
||||
* @param[in] aNetworkTimeOffset The offset to network time.
|
||||
*
|
||||
*/
|
||||
void SetNetworkTimeOffset(int64_t aNetworkTimeOffset)
|
||||
{
|
||||
mInfo.mTxInfo.mIeInfo->mNetworkTimeOffset = aNetworkTimeOffset;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns a pointer to the vendor specific Time IE.
|
||||
@@ -1300,33 +1139,6 @@ public:
|
||||
*
|
||||
*/
|
||||
const TimeIe *GetTimeIe(void) const;
|
||||
|
||||
/**
|
||||
* This method gets the offset to network time.
|
||||
*
|
||||
* @returns The offset to network time.
|
||||
*
|
||||
*/
|
||||
int64_t ComputeNetworkTimeOffset(void) const
|
||||
{
|
||||
return static_cast<int64_t>(GetTimeIe()->GetTime() - GetTimestamp());
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the time sync sequence.
|
||||
*
|
||||
* @param[in] aTimeSyncSeq The time sync sequence.
|
||||
*
|
||||
*/
|
||||
void SetTimeSyncSeq(uint8_t aTimeSyncSeq) { mInfo.mTxInfo.mIeInfo->mTimeSyncSeq = aTimeSyncSeq; }
|
||||
|
||||
/**
|
||||
* This method gets the time sync sequence.
|
||||
*
|
||||
* @returns The time sync sequence.
|
||||
*
|
||||
*/
|
||||
uint8_t ReadTimeSyncSeq(void) const { return GetTimeIe()->GetSequence(); }
|
||||
#endif // OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
|
||||
|
||||
#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
@@ -1366,17 +1178,6 @@ public:
|
||||
const uint8_t *GetHeaderIe(uint8_t aIeId) const;
|
||||
#endif // OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
|
||||
/**
|
||||
* This method copies the PSDU and all attributes from another frame.
|
||||
*
|
||||
* @note This method performs a deep copy meaning the content of PSDU buffer from the given frame is copied into
|
||||
* the PSDU buffer of the current frame.
|
||||
|
||||
* @param[in] aFromFrame The frame to copy from.
|
||||
*
|
||||
*/
|
||||
void CopyFrom(const Frame &aFromFrame);
|
||||
|
||||
/**
|
||||
* This method returns the maximum transmission unit size (MTU).
|
||||
*
|
||||
@@ -1423,7 +1224,226 @@ private:
|
||||
static uint8_t GetKeySourceLength(uint8_t aKeyIdMode);
|
||||
};
|
||||
|
||||
OT_TOOL_PACKED_BEGIN
|
||||
/**
|
||||
* This class supports received IEEE 802.15.4 MAC frame processing.
|
||||
*
|
||||
*/
|
||||
class RxFrame : public Frame
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* This method returns the RSSI in dBm used for reception.
|
||||
*
|
||||
* @returns The RSSI in dBm used for reception.
|
||||
*
|
||||
*/
|
||||
int8_t GetRssi(void) const { return mInfo.mRxInfo.mRssi; }
|
||||
|
||||
/**
|
||||
* This method sets the RSSI in dBm used for reception.
|
||||
*
|
||||
* @param[in] aRssi The RSSI in dBm used for reception.
|
||||
*
|
||||
*/
|
||||
void SetRssi(int8_t aRssi) { mInfo.mRxInfo.mRssi = aRssi; }
|
||||
|
||||
/**
|
||||
* This method returns the receive Link Quality Indicator.
|
||||
*
|
||||
* @returns The receive Link Quality Indicator.
|
||||
*
|
||||
*/
|
||||
uint8_t GetLqi(void) const { return mInfo.mRxInfo.mLqi; }
|
||||
|
||||
/**
|
||||
* This method sets the receive Link Quality Indicator.
|
||||
*
|
||||
* @param[in] aLqi The receive Link Quality Indicator.
|
||||
*
|
||||
*/
|
||||
void SetLqi(uint8_t aLqi) { mInfo.mRxInfo.mLqi = aLqi; }
|
||||
|
||||
/**
|
||||
* This method indicates whether or not the received frame is acknowledged with frame pending set.
|
||||
*
|
||||
* @retval TRUE This frame is acknowledged with frame pending set.
|
||||
* @retval FALSE This frame is acknowledged with frame pending not set.
|
||||
*
|
||||
*/
|
||||
bool IsAckedWithFramePending(void) const { return mInfo.mRxInfo.mAckedWithFramePending; }
|
||||
|
||||
/**
|
||||
* This method returns the timestamp when the frame was received.
|
||||
*
|
||||
* @returns The timestamp when the frame was received, in microseconds.
|
||||
*
|
||||
*/
|
||||
const uint64_t &GetTimestamp(void) const { return mInfo.mRxInfo.mTimestamp; }
|
||||
|
||||
#if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
|
||||
/**
|
||||
* This method gets the offset to network time.
|
||||
*
|
||||
* @returns The offset to network time.
|
||||
*
|
||||
*/
|
||||
int64_t ComputeNetworkTimeOffset(void) const
|
||||
{
|
||||
return static_cast<int64_t>(GetTimeIe()->GetTime() - GetTimestamp());
|
||||
}
|
||||
|
||||
/**
|
||||
* This method gets the time sync sequence.
|
||||
*
|
||||
* @returns The time sync sequence.
|
||||
*
|
||||
*/
|
||||
uint8_t ReadTimeSyncSeq(void) const { return GetTimeIe()->GetSequence(); }
|
||||
#endif // OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
|
||||
};
|
||||
|
||||
/**
|
||||
* This class supports IEEE 802.15.4 MAC frame generation for transmission.
|
||||
*
|
||||
*/
|
||||
class TxFrame : public Frame
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* This method returns the maximum number of backoffs the CSMA-CA algorithm will attempt before declaring a channel
|
||||
* access failure.
|
||||
*
|
||||
* Equivalent to macMaxCSMABackoffs in IEEE 802.15.4-2006.
|
||||
*
|
||||
* @returns The maximum number of backoffs the CSMA-CA algorithm will attempt before declaring a channel access
|
||||
* failure.
|
||||
*
|
||||
*/
|
||||
uint8_t GetMaxCsmaBackoffs(void) const { return mInfo.mTxInfo.mMaxCsmaBackoffs; }
|
||||
|
||||
/**
|
||||
* This method sets the maximum number of backoffs the CSMA-CA algorithm will attempt before declaring a channel
|
||||
* access failure.
|
||||
*
|
||||
* Equivalent to macMaxCSMABackoffs in IEEE 802.15.4-2006.
|
||||
*
|
||||
* @param[in] aMaxCsmaBackoffs The maximum number of backoffs the CSMA-CA algorithm will attempt before declaring
|
||||
* a channel access failure.
|
||||
*
|
||||
*/
|
||||
void SetMaxCsmaBackoffs(uint8_t aMaxCsmaBackoffs) { mInfo.mTxInfo.mMaxCsmaBackoffs = aMaxCsmaBackoffs; }
|
||||
|
||||
/**
|
||||
* This method returns the maximum number of retries allowed after a transmission failure.
|
||||
*
|
||||
* Equivalent to macMaxFrameRetries in IEEE 802.15.4-2006.
|
||||
*
|
||||
* @returns The maximum number of retries allowed after a transmission failure.
|
||||
*
|
||||
*/
|
||||
uint8_t GetMaxFrameRetries(void) const { return mInfo.mTxInfo.mMaxFrameRetries; }
|
||||
|
||||
/**
|
||||
* This method sets the maximum number of retries allowed after a transmission failure.
|
||||
*
|
||||
* Equivalent to macMaxFrameRetries in IEEE 802.15.4-2006.
|
||||
*
|
||||
* @param[in] aMaxFrameRetries The maximum number of retries allowed after a transmission failure.
|
||||
*
|
||||
*/
|
||||
void SetMaxFrameRetries(uint8_t aMaxFrameRetries) { mInfo.mTxInfo.mMaxFrameRetries = aMaxFrameRetries; }
|
||||
|
||||
/**
|
||||
* This method indicates whether or not the frame is a retransmission.
|
||||
*
|
||||
* @retval TRUE Frame is a retransmission
|
||||
* @retval FALSE This is a new frame and not a retransmission of an earlier frame.
|
||||
*
|
||||
*/
|
||||
bool IsARetransmission(void) const { return mInfo.mTxInfo.mIsARetx; }
|
||||
|
||||
/**
|
||||
* This method sets the retransmission flag attribute.
|
||||
*
|
||||
* @param[in] aIsARetx TRUE if frame is a retransmission of an earlier frame, FALSE otherwise.
|
||||
*
|
||||
*/
|
||||
void SetIsARetransmission(bool aIsARetx) { mInfo.mTxInfo.mIsARetx = aIsARetx; }
|
||||
|
||||
/**
|
||||
* This method indicates whether or not CSMA-CA is enabled.
|
||||
*
|
||||
* @retval TRUE CSMA-CA is enabled.
|
||||
* @retval FALSE CSMA-CA is not enabled is not enabled.
|
||||
*
|
||||
*/
|
||||
bool IsCsmaCaEnabled(void) const { return mInfo.mTxInfo.mCsmaCaEnabled; }
|
||||
|
||||
/**
|
||||
* This method sets the CSMA-CA enabled attribute.
|
||||
*
|
||||
* @param[in] aCsmaCaEnabled TRUE if CSMA-CA must be enabled for this packet, FALSE otherwise.
|
||||
*
|
||||
*/
|
||||
void SetCsmaCaEnabled(bool aCsmaCaEnabled) { mInfo.mTxInfo.mCsmaCaEnabled = aCsmaCaEnabled; }
|
||||
|
||||
/**
|
||||
* This method returns the key used for frame encryption and authentication (AES CCM).
|
||||
*
|
||||
* @returns The pointer to the key.
|
||||
*
|
||||
*/
|
||||
const uint8_t *GetAesKey(void) const { return mInfo.mTxInfo.mAesKey; }
|
||||
|
||||
/**
|
||||
* This method sets the key used for frame encryption and authentication (AES CCM).
|
||||
*
|
||||
* @param[in] aAesKey The pointer to the key.
|
||||
*
|
||||
*/
|
||||
void SetAesKey(const uint8_t *aAesKey) { mInfo.mTxInfo.mAesKey = aAesKey; }
|
||||
|
||||
/**
|
||||
* This method copies the PSDU and all attributes from another frame.
|
||||
*
|
||||
* @note This method performs a deep copy meaning the content of PSDU buffer from the given frame is copied into
|
||||
* the PSDU buffer of the current frame.
|
||||
|
||||
* @param[in] aFromFrame The frame to copy from.
|
||||
*
|
||||
*/
|
||||
void CopyFrom(const TxFrame &aFromFrame);
|
||||
|
||||
#if OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
|
||||
/**
|
||||
* This method sets the Time IE offset.
|
||||
*
|
||||
* @param[in] aOffset The Time IE offset, 0 means no Time IE.
|
||||
*
|
||||
*/
|
||||
void SetTimeIeOffset(uint8_t aOffset) { mInfo.mTxInfo.mIeInfo->mTimeIeOffset = aOffset; }
|
||||
|
||||
/**
|
||||
* This method sets the offset to network time.
|
||||
*
|
||||
* @param[in] aNetworkTimeOffset The offset to network time.
|
||||
*
|
||||
*/
|
||||
void SetNetworkTimeOffset(int64_t aNetworkTimeOffset)
|
||||
{
|
||||
mInfo.mTxInfo.mIeInfo->mNetworkTimeOffset = aNetworkTimeOffset;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method sets the time sync sequence.
|
||||
*
|
||||
* @param[in] aTimeSyncSeq The time sync sequence.
|
||||
*
|
||||
*/
|
||||
void SetTimeSyncSeq(uint8_t aTimeSyncSeq) { mInfo.mTxInfo.mIeInfo->mTimeSyncSeq = aTimeSyncSeq; }
|
||||
#endif // OPENTHREAD_CONFIG_TIME_SYNC_ENABLE
|
||||
};
|
||||
|
||||
class Beacon
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -55,7 +55,7 @@ SubMac::SubMac(Instance &aInstance)
|
||||
, mRxOnWhenBackoff(true)
|
||||
, mEnergyScanMaxRssi(kInvalidRssiValue)
|
||||
, mEnergyScanEndTime(0)
|
||||
, mTransmitFrame(*static_cast<Frame *>(otPlatRadioGetTransmitBuffer(&aInstance)))
|
||||
, mTransmitFrame(*static_cast<TxFrame *>(otPlatRadioGetTransmitBuffer(&aInstance)))
|
||||
, mCallbacks(aInstance)
|
||||
, mPcapCallback(NULL)
|
||||
, mPcapCallbackContext(NULL)
|
||||
@@ -186,7 +186,7 @@ exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
void SubMac::HandleReceiveDone(Frame *aFrame, otError aError)
|
||||
void SubMac::HandleReceiveDone(RxFrame *aFrame, otError aError)
|
||||
{
|
||||
if (mPcapCallback && (aFrame != NULL) && (aError == OT_ERROR_NONE))
|
||||
{
|
||||
@@ -300,7 +300,7 @@ exit:
|
||||
return;
|
||||
}
|
||||
|
||||
void SubMac::HandleTransmitStarted(Frame &aFrame)
|
||||
void SubMac::HandleTransmitStarted(TxFrame &aFrame)
|
||||
{
|
||||
if (ShouldHandleAckTimeout() && aFrame.GetAckRequest())
|
||||
{
|
||||
@@ -312,7 +312,7 @@ void SubMac::HandleTransmitStarted(Frame &aFrame)
|
||||
}
|
||||
}
|
||||
|
||||
void SubMac::HandleTransmitDone(Frame &aFrame, Frame *aAckFrame, otError aError)
|
||||
void SubMac::HandleTransmitDone(TxFrame &aFrame, RxFrame *aAckFrame, otError aError)
|
||||
{
|
||||
bool ccaSuccess = true;
|
||||
bool shouldRetx;
|
||||
@@ -559,7 +559,7 @@ exit:
|
||||
}
|
||||
|
||||
#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
void SubMac::HandleFrameUpdated(Frame &aFrame)
|
||||
void SubMac::HandleFrameUpdated(TxFrame &aFrame)
|
||||
{
|
||||
mCallbacks.FrameUpdated(aFrame);
|
||||
}
|
||||
@@ -616,7 +616,7 @@ extern "C" void otPlatRadioReceiveDone(otInstance *aInstance, otRadioFrame *aFra
|
||||
|
||||
if (instance->IsInitialized())
|
||||
{
|
||||
instance->Get<SubMac>().HandleReceiveDone(static_cast<Frame *>(aFrame), aError);
|
||||
instance->Get<SubMac>().HandleReceiveDone(static_cast<RxFrame *>(aFrame), aError);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -626,7 +626,7 @@ extern "C" void otPlatRadioTxStarted(otInstance *aInstance, otRadioFrame *aFrame
|
||||
|
||||
if (instance->IsInitialized())
|
||||
{
|
||||
instance->Get<SubMac>().HandleTransmitStarted(*static_cast<Frame *>(aFrame));
|
||||
instance->Get<SubMac>().HandleTransmitStarted(*static_cast<TxFrame *>(aFrame));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -636,7 +636,7 @@ extern "C" void otPlatRadioTxDone(otInstance *aInstance, otRadioFrame *aFrame, o
|
||||
|
||||
if (instance->IsInitialized())
|
||||
{
|
||||
instance->Get<SubMac>().HandleTransmitDone(*static_cast<Frame *>(aFrame), static_cast<Frame *>(aAckFrame),
|
||||
instance->Get<SubMac>().HandleTransmitDone(*static_cast<TxFrame *>(aFrame), static_cast<RxFrame *>(aAckFrame),
|
||||
aError);
|
||||
}
|
||||
}
|
||||
@@ -658,7 +658,7 @@ extern "C" void otPlatRadioFrameUpdated(otInstance *aInstance, otRadioFrame *aFr
|
||||
|
||||
if (instance->IsInitialized())
|
||||
{
|
||||
instance->Get<SubMac>().HandleFrameUpdated(*static_cast<Frame *>(aFrame));
|
||||
instance->Get<SubMac>().HandleFrameUpdated(*static_cast<TxFrame *>(aFrame));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
+14
-14
@@ -106,7 +106,7 @@ public:
|
||||
* OT_ERROR_NO_BUFS when a frame could not be received due to lack of rx buffer space.
|
||||
*
|
||||
*/
|
||||
void ReceiveDone(Frame *aFrame, otError aError);
|
||||
void ReceiveDone(RxFrame *aFrame, otError aError);
|
||||
|
||||
/**
|
||||
* This method notifies user of `SubMac` of CCA status (success/failure) for a frame transmission attempt.
|
||||
@@ -138,11 +138,11 @@ public:
|
||||
* when there was an error in current transmission attempt.
|
||||
*
|
||||
*/
|
||||
void RecordFrameTransmitStatus(const Frame &aFrame,
|
||||
const Frame *aAckFrame,
|
||||
otError aError,
|
||||
uint8_t aRetryCount,
|
||||
bool aWillRetx);
|
||||
void RecordFrameTransmitStatus(const TxFrame &aFrame,
|
||||
const RxFrame *aAckFrame,
|
||||
otError aError,
|
||||
uint8_t aRetryCount,
|
||||
bool aWillRetx);
|
||||
|
||||
/**
|
||||
* The method notifies user of `SubMac` that the transmit operation has completed, providing, if applicable,
|
||||
@@ -156,7 +156,7 @@ public:
|
||||
* OT_ERROR_ABORT when transmission was aborted for other reasons.
|
||||
*
|
||||
*/
|
||||
void TransmitDone(Frame &aFrame, Frame *aAckFrame, otError aError);
|
||||
void TransmitDone(TxFrame &aFrame, RxFrame *aAckFrame, otError aError);
|
||||
|
||||
/**
|
||||
* This method notifies user of `SubMac` that energy scan is complete.
|
||||
@@ -177,7 +177,7 @@ public:
|
||||
* @param[in] aFrame The frame which needs to process transmit security.
|
||||
*
|
||||
*/
|
||||
void FrameUpdated(Frame &aFrame);
|
||||
void FrameUpdated(TxFrame &aFrame);
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -307,7 +307,7 @@ public:
|
||||
* @returns The transmit frame.
|
||||
*
|
||||
*/
|
||||
Frame &GetTransmitFrame(void) { return mTransmitFrame; }
|
||||
TxFrame &GetTransmitFrame(void) { return mTransmitFrame; }
|
||||
|
||||
/**
|
||||
* This method sends a prepared frame.
|
||||
@@ -353,7 +353,7 @@ public:
|
||||
* OT_ERROR_NO_BUFS when a frame could not be received due to lack of rx buffer space.
|
||||
*
|
||||
*/
|
||||
void HandleReceiveDone(Frame *aFrame, otError aError);
|
||||
void HandleReceiveDone(RxFrame *aFrame, otError aError);
|
||||
|
||||
/**
|
||||
* This method handles a Transmit Started event from radio platform.
|
||||
@@ -361,7 +361,7 @@ public:
|
||||
* @param[in] aFrame The frame that is being transmitted.
|
||||
*
|
||||
*/
|
||||
void HandleTransmitStarted(Frame &aFrame);
|
||||
void HandleTransmitStarted(TxFrame &aFrame);
|
||||
|
||||
/**
|
||||
* This method handles a "Transmit Done" event from radio platform.
|
||||
@@ -374,7 +374,7 @@ public:
|
||||
* OT_ERROR_ABORT when transmission was aborted for other reasons.
|
||||
*
|
||||
*/
|
||||
void HandleTransmitDone(Frame &aFrame, Frame *aAckFrame, otError aError);
|
||||
void HandleTransmitDone(TxFrame &aFrame, RxFrame *aAckFrame, otError aError);
|
||||
|
||||
/**
|
||||
* This method handles "Energy Scan Done" event from radio platform.
|
||||
@@ -401,7 +401,7 @@ public:
|
||||
* @param[in] aFrame The frame which needs to process transmit security.
|
||||
*
|
||||
*/
|
||||
void HandleFrameUpdated(Frame &aFrame);
|
||||
void HandleFrameUpdated(TxFrame &aFrame);
|
||||
#endif
|
||||
|
||||
private:
|
||||
@@ -463,7 +463,7 @@ private:
|
||||
bool mRxOnWhenBackoff;
|
||||
int8_t mEnergyScanMaxRssi;
|
||||
uint32_t mEnergyScanEndTime;
|
||||
Frame & mTransmitFrame;
|
||||
TxFrame & mTransmitFrame;
|
||||
Callbacks mCallbacks;
|
||||
otLinkPcapCallback mPcapCallback;
|
||||
void * mPcapCallbackContext;
|
||||
|
||||
@@ -48,7 +48,7 @@ SubMac::Callbacks::Callbacks(Instance &aInstance)
|
||||
|
||||
#if OPENTHREAD_FTD || OPENTHREAD_MTD
|
||||
|
||||
void SubMac::Callbacks::ReceiveDone(Frame *aFrame, otError aError)
|
||||
void SubMac::Callbacks::ReceiveDone(RxFrame *aFrame, otError aError)
|
||||
{
|
||||
#if OPENTHREAD_CONFIG_LINK_RAW_ENABLE
|
||||
if (Get<LinkRaw>().IsEnabled())
|
||||
@@ -67,16 +67,16 @@ void SubMac::Callbacks::RecordCcaStatus(bool aCcaSuccess, uint8_t aChannel)
|
||||
Get<Mac>().RecordCcaStatus(aCcaSuccess, aChannel);
|
||||
}
|
||||
|
||||
void SubMac::Callbacks::RecordFrameTransmitStatus(const Frame &aFrame,
|
||||
const Frame *aAckFrame,
|
||||
otError aError,
|
||||
uint8_t aRetryCount,
|
||||
bool aWillRetx)
|
||||
void SubMac::Callbacks::RecordFrameTransmitStatus(const TxFrame &aFrame,
|
||||
const RxFrame *aAckFrame,
|
||||
otError aError,
|
||||
uint8_t aRetryCount,
|
||||
bool aWillRetx)
|
||||
{
|
||||
Get<Mac>().RecordFrameTransmitStatus(aFrame, aAckFrame, aError, aRetryCount, aWillRetx);
|
||||
}
|
||||
|
||||
void SubMac::Callbacks::TransmitDone(Frame &aFrame, Frame *aAckFrame, otError aError)
|
||||
void SubMac::Callbacks::TransmitDone(TxFrame &aFrame, RxFrame *aAckFrame, otError aError)
|
||||
{
|
||||
#if OPENTHREAD_CONFIG_LINK_RAW_ENABLE
|
||||
if (Get<LinkRaw>().IsEnabled())
|
||||
@@ -105,7 +105,7 @@ void SubMac::Callbacks::EnergyScanDone(int8_t aMaxRssi)
|
||||
}
|
||||
|
||||
#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
void SubMac::Callbacks::FrameUpdated(Frame &aFrame)
|
||||
void SubMac::Callbacks::FrameUpdated(TxFrame &aFrame)
|
||||
{
|
||||
/**
|
||||
* This function will be called from interrupt context, it should only read/write data passed in
|
||||
@@ -122,7 +122,7 @@ void SubMac::Callbacks::FrameUpdated(Frame &aFrame)
|
||||
|
||||
#elif OPENTHREAD_RADIO
|
||||
|
||||
void SubMac::Callbacks::ReceiveDone(Frame *aFrame, otError aError)
|
||||
void SubMac::Callbacks::ReceiveDone(RxFrame *aFrame, otError aError)
|
||||
{
|
||||
Get<LinkRaw>().InvokeReceiveDone(aFrame, aError);
|
||||
}
|
||||
@@ -131,16 +131,16 @@ void SubMac::Callbacks::RecordCcaStatus(bool, uint8_t)
|
||||
{
|
||||
}
|
||||
|
||||
void SubMac::Callbacks::RecordFrameTransmitStatus(const Frame &aFrame,
|
||||
const Frame *aAckFrame,
|
||||
otError aError,
|
||||
uint8_t aRetryCount,
|
||||
bool aWillRetx)
|
||||
void SubMac::Callbacks::RecordFrameTransmitStatus(const TxFrame &aFrame,
|
||||
const RxFrame *aAckFrame,
|
||||
otError aError,
|
||||
uint8_t aRetryCount,
|
||||
bool aWillRetx)
|
||||
{
|
||||
Get<LinkRaw>().RecordFrameTransmitStatus(aFrame, aAckFrame, aError, aRetryCount, aWillRetx);
|
||||
}
|
||||
|
||||
void SubMac::Callbacks::TransmitDone(Frame &aFrame, Frame *aAckFrame, otError aError)
|
||||
void SubMac::Callbacks::TransmitDone(TxFrame &aFrame, RxFrame *aAckFrame, otError aError)
|
||||
{
|
||||
Get<LinkRaw>().InvokeTransmitDone(aFrame, aAckFrame, aError);
|
||||
}
|
||||
@@ -151,7 +151,7 @@ void SubMac::Callbacks::EnergyScanDone(int8_t aMaxRssi)
|
||||
}
|
||||
|
||||
#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
void SubMac::Callbacks::FrameUpdated(Frame &)
|
||||
void SubMac::Callbacks::FrameUpdated(TxFrame &)
|
||||
{
|
||||
/**
|
||||
* This function will be called from interrupt context, it should only read/write data passed in
|
||||
|
||||
@@ -320,7 +320,7 @@ void IndirectSender::UpdateIndirectMessage(Child &aChild)
|
||||
}
|
||||
}
|
||||
|
||||
otError IndirectSender::PrepareFrameForChild(Mac::Frame &aFrame, Child &aChild)
|
||||
otError IndirectSender::PrepareFrameForChild(Mac::TxFrame &aFrame, Child &aChild)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
Message *message = aChild.GetIndirectMessage();
|
||||
@@ -353,7 +353,7 @@ exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
uint16_t IndirectSender::PrepareDataFrame(Mac::Frame &aFrame, Child &aChild, Message &aMessage)
|
||||
uint16_t IndirectSender::PrepareDataFrame(Mac::TxFrame &aFrame, Child &aChild, Message &aMessage)
|
||||
{
|
||||
Ip6::Header ip6Header;
|
||||
Mac::Address macSource, macDest;
|
||||
@@ -397,7 +397,7 @@ uint16_t IndirectSender::PrepareDataFrame(Mac::Frame &aFrame, Child &aChild, Mes
|
||||
return nextOffset;
|
||||
}
|
||||
|
||||
void IndirectSender::PrepareEmptyFrame(Mac::Frame &aFrame, Child &aChild, bool aAckRequest)
|
||||
void IndirectSender::PrepareEmptyFrame(Mac::TxFrame &aFrame, Child &aChild, bool aAckRequest)
|
||||
{
|
||||
uint16_t fcf;
|
||||
Mac::Address macSource, macDest;
|
||||
@@ -432,7 +432,7 @@ void IndirectSender::PrepareEmptyFrame(Mac::Frame &aFrame, Child &aChild, bool a
|
||||
aFrame.SetFramePending(false);
|
||||
}
|
||||
|
||||
void IndirectSender::HandleSentFrameToChild(const Mac::Frame &aFrame, otError aError, Child &aChild)
|
||||
void IndirectSender::HandleSentFrameToChild(const Mac::TxFrame &aFrame, otError aError, Child &aChild)
|
||||
{
|
||||
Message *message = aChild.GetIndirectMessage();
|
||||
|
||||
|
||||
@@ -207,15 +207,15 @@ private:
|
||||
};
|
||||
|
||||
// Callbacks from DataPollHandler
|
||||
otError PrepareFrameForChild(Mac::Frame &aFrame, Child &aChild);
|
||||
void HandleSentFrameToChild(const Mac::Frame &aFrame, otError aError, Child &aChild);
|
||||
otError PrepareFrameForChild(Mac::TxFrame &aFrame, Child &aChild);
|
||||
void HandleSentFrameToChild(const Mac::TxFrame &aFrame, otError aError, Child &aChild);
|
||||
void HandleFrameChangeDone(Child &aChild);
|
||||
|
||||
void UpdateIndirectMessage(Child &aChild);
|
||||
Message *FindIndirectMessage(Child &aChild);
|
||||
void RequestMessageUpdate(Child &aChild);
|
||||
uint16_t PrepareDataFrame(Mac::Frame &aFrame, Child &aChild, Message &aMessage);
|
||||
void PrepareEmptyFrame(Mac::Frame &aFrame, Child &aChild, bool aAckRequest);
|
||||
uint16_t PrepareDataFrame(Mac::TxFrame &aFrame, Child &aChild, Message &aMessage);
|
||||
void PrepareEmptyFrame(Mac::TxFrame &aFrame, Child &aChild, bool aAckRequest);
|
||||
void ClearMessagesForRemovedChildren(void);
|
||||
|
||||
bool mEnabled;
|
||||
|
||||
@@ -472,7 +472,7 @@ exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
otError MeshForwarder::HandleFrameRequest(Mac::Frame &aFrame)
|
||||
otError MeshForwarder::HandleFrameRequest(Mac::TxFrame &aFrame)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
|
||||
@@ -555,7 +555,7 @@ exit:
|
||||
// when message is MLE type and requires fragmentation. It returns the
|
||||
// next offset into the message after the prepared frame.
|
||||
//
|
||||
uint16_t MeshForwarder::PrepareDataFrame(Mac::Frame & aFrame,
|
||||
uint16_t MeshForwarder::PrepareDataFrame(Mac::TxFrame & aFrame,
|
||||
Message & aMessage,
|
||||
const Mac::Address &aMacSource,
|
||||
const Mac::Address &aMacDest,
|
||||
@@ -855,7 +855,7 @@ start:
|
||||
return nextOffset;
|
||||
}
|
||||
|
||||
Neighbor *MeshForwarder::UpdateNeighborOnSentFrame(Mac::Frame &aFrame, otError aError, const Mac::Address &aMacDest)
|
||||
Neighbor *MeshForwarder::UpdateNeighborOnSentFrame(Mac::TxFrame &aFrame, otError aError, const Mac::Address &aMacDest)
|
||||
{
|
||||
Neighbor *neighbor = NULL;
|
||||
|
||||
@@ -885,7 +885,7 @@ exit:
|
||||
return neighbor;
|
||||
}
|
||||
|
||||
void MeshForwarder::HandleSentFrame(Mac::Frame &aFrame, otError aError)
|
||||
void MeshForwarder::HandleSentFrame(Mac::TxFrame &aFrame, otError aError)
|
||||
{
|
||||
Neighbor * neighbor = NULL;
|
||||
Mac::Address macDest;
|
||||
@@ -1050,7 +1050,7 @@ void MeshForwarder::HandleDiscoverComplete(void)
|
||||
mDiscoverTimer.Stop();
|
||||
}
|
||||
|
||||
void MeshForwarder::HandleReceivedFrame(Mac::Frame &aFrame)
|
||||
void MeshForwarder::HandleReceivedFrame(Mac::RxFrame &aFrame)
|
||||
{
|
||||
otThreadLinkInfo linkInfo;
|
||||
Mac::Address macDest;
|
||||
|
||||
@@ -376,7 +376,7 @@ private:
|
||||
uint16_t aFrameLength,
|
||||
Lowpan::FragmentHeader &aFragmentHeader);
|
||||
|
||||
uint16_t PrepareDataFrame(Mac::Frame & aFrame,
|
||||
uint16_t PrepareDataFrame(Mac::TxFrame & aFrame,
|
||||
Message & aMessage,
|
||||
const Mac::Address &aMacSource,
|
||||
const Mac::Address &aMacDest,
|
||||
@@ -384,7 +384,7 @@ private:
|
||||
uint16_t aMeshSource = 0xffff,
|
||||
uint16_t aMeshDest = 0xffff);
|
||||
|
||||
void SendMesh(Message &aMessage, Mac::Frame &aFrame);
|
||||
void SendMesh(Message &aMessage, Mac::TxFrame &aFrame);
|
||||
otError UpdateIp6Route(Message &aMessage);
|
||||
otError UpdateIp6RouteFtd(Ip6::Header &ip6Header);
|
||||
otError UpdateMeshRoute(Message &aMessage);
|
||||
@@ -399,10 +399,10 @@ private:
|
||||
void RemoveMessage(Message &aMessage);
|
||||
void HandleDiscoverComplete(void);
|
||||
|
||||
void HandleReceivedFrame(Mac::Frame &aFrame);
|
||||
otError HandleFrameRequest(Mac::Frame &aFrame);
|
||||
Neighbor *UpdateNeighborOnSentFrame(Mac::Frame &aFrame, otError aError, const Mac::Address &aMacDest);
|
||||
void HandleSentFrame(Mac::Frame &aFrame, otError aError);
|
||||
void HandleReceivedFrame(Mac::RxFrame &aFrame);
|
||||
otError HandleFrameRequest(Mac::TxFrame &aFrame);
|
||||
Neighbor *UpdateNeighborOnSentFrame(Mac::TxFrame &aFrame, otError aError, const Mac::Address &aMacDest);
|
||||
void HandleSentFrame(Mac::TxFrame &aFrame, otError aError);
|
||||
|
||||
static void HandleDiscoverTimer(Timer &aTimer);
|
||||
void HandleDiscoverTimer(void);
|
||||
|
||||
@@ -313,7 +313,7 @@ void MeshForwarder::RemoveDataResponseMessages(void)
|
||||
}
|
||||
}
|
||||
|
||||
void MeshForwarder::SendMesh(Message &aMessage, Mac::Frame &aFrame)
|
||||
void MeshForwarder::SendMesh(Message &aMessage, Mac::TxFrame &aFrame)
|
||||
{
|
||||
uint16_t fcf;
|
||||
|
||||
|
||||
@@ -89,12 +89,12 @@ exit:
|
||||
return;
|
||||
}
|
||||
|
||||
void PanIdQueryServer::HandleScanResult(Instance &aInstance, Mac::Frame *aFrame)
|
||||
void PanIdQueryServer::HandleScanResult(Instance &aInstance, Mac::RxFrame *aFrame)
|
||||
{
|
||||
aInstance.Get<PanIdQueryServer>().HandleScanResult(aFrame);
|
||||
}
|
||||
|
||||
void PanIdQueryServer::HandleScanResult(Mac::Frame *aFrame)
|
||||
void PanIdQueryServer::HandleScanResult(Mac::RxFrame *aFrame)
|
||||
{
|
||||
uint16_t panId;
|
||||
|
||||
|
||||
@@ -66,8 +66,8 @@ private:
|
||||
static void HandleQuery(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo);
|
||||
void HandleQuery(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo);
|
||||
|
||||
static void HandleScanResult(Instance &aInstance, Mac::Frame *aFrame);
|
||||
void HandleScanResult(Mac::Frame *aFrame);
|
||||
static void HandleScanResult(Instance &aInstance, Mac::RxFrame *aFrame);
|
||||
void HandleScanResult(Mac::RxFrame *aFrame);
|
||||
|
||||
static void HandleTimer(Timer &aTimer);
|
||||
void HandleTimer(void);
|
||||
|
||||
@@ -116,7 +116,7 @@ void NcpBase::LinkRawTransmitDone(otRadioFrame *aFrame, otRadioFrame *aAckFrame,
|
||||
if (mCurTransmitTID)
|
||||
{
|
||||
uint8_t header = SPINEL_HEADER_FLAG | SPINEL_HEADER_IID_0 | mCurTransmitTID;
|
||||
bool framePending = (aAckFrame != NULL && static_cast<Mac::Frame *>(aAckFrame)->GetFramePending());
|
||||
bool framePending = (aAckFrame != NULL && static_cast<Mac::RxFrame *>(aAckFrame)->GetFramePending());
|
||||
|
||||
// Clear cached transmit TID
|
||||
mCurTransmitTID = 0;
|
||||
|
||||
@@ -78,8 +78,8 @@ void TestMacHeader(void)
|
||||
|
||||
for (unsigned i = 0; i < OT_ARRAY_LENGTH(tests); i++)
|
||||
{
|
||||
uint8_t psdu[Mac::Frame::kMTU];
|
||||
Mac::Frame frame;
|
||||
uint8_t psdu[Mac::Frame::kMTU];
|
||||
Mac::TxFrame frame;
|
||||
|
||||
frame.mPsdu = psdu;
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
* used by Header IE related features.
|
||||
*
|
||||
*/
|
||||
#if OPENTHREAD_CONFIG_COMMISSIONER_ENABLE || OPENTHREAD_CONFIG_JOINER_ENABLE || OPENTHREAD_CONFIG_HEADER_IE_SUPPORT
|
||||
#if OPENTHREAD_CONFIG_COMMISSIONER_ENABLE || OPENTHREAD_CONFIG_JOINER_ENABLE || OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
|
||||
#define NRF_MBEDTLS_AES_ALT_INTERRUPT_CONTEXT 1
|
||||
#else
|
||||
#define NRF_MBEDTLS_AES_ALT_INTERRUPT_CONTEXT 0
|
||||
|
||||
Reference in New Issue
Block a user