[mac-frame] add util functions to generate ack (#4884)

This commit adds mac frame util functions to generate acks (both Imm
and Enh acks) from a received frame. These funtions are utils APIs for
platforms which don't provide ack generation.

This commit also introduces compile options for CSL to control the CSL
IE related part.
This commit is contained in:
Li Cao
2020-05-12 22:20:03 -07:00
committed by GitHub
parent 8e84e05429
commit cd9558ca91
11 changed files with 518 additions and 3 deletions
+34
View File
@@ -28,6 +28,7 @@
#include "mac_frame.h"
#include <assert.h>
#include "mac/mac_frame.hpp"
using namespace ot;
@@ -125,3 +126,36 @@ void otMacFrameProcessTransmitAesCcm(otRadioFrame *aFrame, const otExtAddress *a
{
static_cast<Mac::TxFrame *>(aFrame)->ProcessTransmitAesCcm(*static_cast<const Mac::ExtAddress *>(aExtAddress));
}
bool otMacFrameIsVersion2015(const otRadioFrame *aFrame)
{
return static_cast<const Mac::Frame *>(aFrame)->IsVersion2015();
}
void otMacFrameGenerateImmAck(const otRadioFrame *aFrame, bool aIsFramePending, otRadioFrame *aAckFrame)
{
assert(aFrame != NULL && aAckFrame != NULL);
static_cast<Mac::TxFrame *>(aAckFrame)->GenerateImmAck(*static_cast<const Mac::RxFrame *>(aFrame), aIsFramePending);
}
#if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT
otError otMacFrameGenerateEnhAck(const otRadioFrame *aFrame,
bool aIsFramePending,
const uint8_t * aIeData,
uint8_t aIeLength,
otRadioFrame * aAckFrame)
{
assert(aFrame != NULL && aAckFrame != NULL);
return static_cast<Mac::TxFrame *>(aAckFrame)->GenerateEnhAck(*static_cast<const Mac::RxFrame *>(aFrame),
aIsFramePending, aIeData, aIeLength);
}
#if OPENTHREAD_CONFIG_CSL_RECEIVER_ENABLE
void otMacFrameSetCslIe(otRadioFrame *aFrame, uint16_t aCslPeriod, uint16_t aCslPhase)
{
static_cast<Mac::Frame *>(aFrame)->SetCslIe(aCslPeriod, aCslPhase);
}
#endif // OPENTHREAD_CONFIG_CSL_RECEIVER_ENABLE
#endif // OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT