diff --git a/src/core/radio/radio_platform.cpp b/src/core/radio/radio_platform.cpp index 61858b348..ea7d207cc 100644 --- a/src/core/radio/radio_platform.cpp +++ b/src/core/radio/radio_platform.cpp @@ -30,6 +30,8 @@ * This file implements the radio platform callbacks into OpenThread and default/weak radio platform APIs. */ +#include +#include #include #include "instance/instance.hpp" @@ -83,6 +85,12 @@ extern "C" void otPlatRadioTxDone(otInstance *aInstance, otRadioFrame *aFrame, o Instance &instance = AsCoreType(aInstance); Mac::TxFrame &txFrame = *static_cast(aFrame); Mac::RxFrame *ackFrame = static_cast(aAckFrame); +#if OPENTHREAD_RADIO + uint8_t channel = txFrame.mInfo.mTxInfo.mRxChannelAfterTxDone; + + OT_ASSERT((otPlatRadioGetSupportedChannelMask(aInstance) & (1UL << channel)) != 0); + IgnoreError(otPlatRadioReceive(aInstance, channel)); +#endif VerifyOrExit(instance.IsInitialized()); @@ -141,7 +149,12 @@ extern "C" void otPlatDiagRadioReceiveDone(otInstance *aInstance, otRadioFrame * extern "C" void otPlatDiagRadioTransmitDone(otInstance *aInstance, otRadioFrame *aFrame, otError aError) { Mac::TxFrame &txFrame = *static_cast(aFrame); +#if OPENTHREAD_RADIO + uint8_t channel = txFrame.mInfo.mTxInfo.mRxChannelAfterTxDone; + OT_ASSERT((otPlatRadioGetSupportedChannelMask(aInstance) & (1UL << channel)) != 0); + IgnoreError(otPlatRadioReceive(aInstance, channel)); +#endif #if OPENTHREAD_CONFIG_MULTI_RADIO txFrame.SetRadioType(Mac::kRadioTypeIeee802154); #endif