diff --git a/src/core/diags/factory_diags.cpp b/src/core/diags/factory_diags.cpp index e315e65fb..cb5dd774c 100644 --- a/src/core/diags/factory_diags.cpp +++ b/src/core/diags/factory_diags.cpp @@ -343,8 +343,12 @@ Error Diags::ProcessChannel(uint8_t aArgsLength, char *aArgs[]) VerifyOrExit(IsChannelValid(channel), error = kErrorInvalidArgs); mChannel = channel; - IgnoreError(Get().Receive(mChannel)); otPlatDiagChannelSet(mChannel); + + if (!mIsSleepOn) + { + IgnoreError(Get().Receive(mChannel)); + } } exit: @@ -620,6 +624,7 @@ Error Diags::RadioReceive(void) SuccessOrExit(error = Get().SetTransmitPower(mTxPower)); otPlatDiagChannelSet(mChannel); otPlatDiagTxPowerSet(mTxPower); + mIsSleepOn = false; exit: return error; @@ -634,6 +639,7 @@ Error Diags::ProcessRadio(uint8_t aArgsLength, char *aArgs[]) if (StringMatch(aArgs[0], "sleep")) { SuccessOrExit(error = Get().Sleep()); + mIsSleepOn = true; } else if (StringMatch(aArgs[0], "receive")) { @@ -861,6 +867,11 @@ void Diags::TransmitDone(Error aError) VerifyOrExit(mDiagSendOn); mDiagSendOn = false; + if (mIsSleepOn) + { + IgnoreError(Get().Sleep()); + } + switch (aError) { case kErrorNone: diff --git a/src/core/diags/factory_diags.hpp b/src/core/diags/factory_diags.hpp index 51dc03335..3ff02f61b 100644 --- a/src/core/diags/factory_diags.hpp +++ b/src/core/diags/factory_diags.hpp @@ -259,6 +259,7 @@ private: bool mIsAsyncSend : 1; bool mRepeatActive : 1; bool mDiagSendOn : 1; + bool mIsSleepOn : 1; #endif ReceiveConfig mReceiveConfig;