diff --git a/examples/ota-provider-app/ota-provider-common/BdxOtaSender.cpp b/examples/ota-provider-app/ota-provider-common/BdxOtaSender.cpp index f838b4bce98670..1f43aac2655e88 100644 --- a/examples/ota-provider-app/ota-provider-common/BdxOtaSender.cpp +++ b/examples/ota-provider-app/ota-provider-common/BdxOtaSender.cpp @@ -180,6 +180,7 @@ void BdxOtaSender::HandleTransferSessionOutput(TransferSession::OutputEvent & ev break; case TransferSession::OutputEventType::kAckEOFReceived: ChipLogDetail(BDX, "Transfer completed, got AckEOF"); + mStopPolling = true; Reset(); break; case TransferSession::OutputEventType::kStatusReceived: diff --git a/src/protocols/bdx/TransferFacilitator.cpp b/src/protocols/bdx/TransferFacilitator.cpp index 597bdc43e4990c..4fe4ea23544fe3 100644 --- a/src/protocols/bdx/TransferFacilitator.cpp +++ b/src/protocols/bdx/TransferFacilitator.cpp @@ -78,7 +78,15 @@ void TransferFacilitator::PollForOutput() HandleTransferSessionOutput(outEvent); VerifyOrReturn(mSystemLayer != nullptr, ChipLogError(BDX, "%s mSystemLayer is null", __FUNCTION__)); - mSystemLayer->StartTimer(mPollFreq, PollTimerHandler, this); + if (!mStopPolling) + { + mSystemLayer->StartTimer(mPollFreq, PollTimerHandler, this); + } + else + { + mSystemLayer->CancelTimer(PollTimerHandler, this); + mStopPolling = false; + } } void TransferFacilitator::ScheduleImmediatePoll() diff --git a/src/protocols/bdx/TransferFacilitator.h b/src/protocols/bdx/TransferFacilitator.h index 40d38b00c55195..3729b4adec90e3 100644 --- a/src/protocols/bdx/TransferFacilitator.h +++ b/src/protocols/bdx/TransferFacilitator.h @@ -94,6 +94,7 @@ class TransferFacilitator : public Messaging::ExchangeDelegate, public Messaging System::Clock::Timeout mPollFreq; static constexpr System::Clock::Timeout kDefaultPollFreq = System::Clock::Milliseconds32(500); static constexpr System::Clock::Timeout kImmediatePollDelay = System::Clock::Milliseconds32(1); + bool mStopPolling = false; }; /**