[mac] add enhanced frame pending (#4334)

This commit adds enhanced frame pending feature of Thread 1.2. This
requires the platform radio driver to correctly set frame pending bit
for Data frames and MAC Data Request frames.
This commit is contained in:
Yakun Xu
2020-03-09 09:08:46 -07:00
committed by GitHub
parent fdcb8553b1
commit 56d0e7212b
14 changed files with 201 additions and 30 deletions
+8 -3
View File
@@ -125,12 +125,11 @@ static void ReverseExtAddress(otExtAddress *aReversed, const otExtAddress *aOrig
}
}
static bool isDataRequestAndHasFramePending(const otRadioFrame *aFrame)
static bool HasFramePending(const otRadioFrame *aFrame)
{
bool rval = false;
otMacAddress src;
otEXPECT(otMacFrameIsDataRequest(aFrame));
otEXPECT_ACTION(sSrcMatchEnabled, rval = true);
otEXPECT(otMacFrameGetSrcAddr(aFrame, &src) == OT_ERROR_NONE);
@@ -715,7 +714,13 @@ void radioSendAck(void)
sAckFrame.mLength = IEEE802154_ACK_LENGTH;
sAckMessage.mPsdu[0] = IEEE802154_FRAME_TYPE_ACK;
if (isDataRequestAndHasFramePending(&sReceiveFrame))
if (
#if OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2
(otMacFrameIsData(&sReceiveFrame) || otMacFrameIsDataRequest(&sReceiveFrame))
#else
otMacFrameIsDataRequest(&sReceiveFrame)
#endif
&& HasFramePending(&sReceiveFrame))
{
sAckMessage.mPsdu[0] |= IEEE802154_FRAME_PENDING;
sReceiveFrame.mInfo.mRxInfo.mAckedWithFramePending = true;