diff --git a/src/controller/AutoCommissioner.cpp b/src/controller/AutoCommissioner.cpp index 93247c3298b2da..82286e32619f31 100644 --- a/src/controller/AutoCommissioner.cpp +++ b/src/controller/AutoCommissioner.cpp @@ -828,10 +828,10 @@ CHIP_ERROR AutoCommissioner::CommissioningStepFinished(CHIP_ERROR err, Commissio return NOCChainGenerated(report.Get().noc, report.Get().icac, report.Get().rcac, report.Get().ipk, report.Get().adminSubject); case CommissioningStage::kICDGetRegistrationInfo: - // Noting to od. The ICD registation info is handled elsewhere. + // Noting to do. The ICD registation info is handled elsewhere. break; case CommissioningStage::kICDRegistration: - // Noting to od. DevicePairingDelegate will handle this. + // Noting to do. DevicePairingDelegate will handle this. break; case CommissioningStage::kICDSendStayActive: // Nothing to do. diff --git a/src/controller/CHIPDeviceController.cpp b/src/controller/CHIPDeviceController.cpp index 1713564d589ff4..49591966bd247f 100644 --- a/src/controller/CHIPDeviceController.cpp +++ b/src/controller/CHIPDeviceController.cpp @@ -1177,19 +1177,25 @@ void DeviceCommissioner::OnICDManagementRegisterClientResponse( void * context, const app::Clusters::IcdManagement::Commands::RegisterClientResponse::DecodableType & data) { DeviceCommissioner * commissioner = static_cast(context); + VerifyOrReturn(commissioner != nullptr, ChipLogProgress(Controller, "Command response callback with null context. Ignoring")); - CommissioningDelegate::CommissioningReport report; - auto pairingDelegate = commissioner->GetPairingDelegate(); - auto deviceBeingCommissioned = commissioner->mDeviceBeingCommissioned; - if (pairingDelegate != nullptr && deviceBeingCommissioned != nullptr) + if (commissioner->mCommissioningStage != CommissioningStage::kICDRegistration) { - pairingDelegate->OnICDRegistrationComplete(deviceBeingCommissioned->GetDeviceId(), data.ICDCounter); - commissioner->CommissioningStageComplete(CHIP_NO_ERROR, report); + return; } - else + + if (commissioner->mDeviceBeingCommissioned == nullptr) { - commissioner->CommissioningStageComplete(CHIP_ERROR_INCORRECT_STATE, report); + return; } + + if (commissioner->mPairingDelegate != nullptr) + { + commissioner->mPairingDelegate->OnICDRegistrationComplete(commissioner->mDeviceBeingCommissioned->GetDeviceId(), + data.ICDCounter); + } + CommissioningDelegate::CommissioningReport report; + commissioner->CommissioningStageComplete(CHIP_NO_ERROR, report); } bool DeviceCommissioner::ExtendArmFailSafe(DeviceProxy * proxy, CommissioningStage step, uint16_t armFailSafeTimeout,