@@ -298,6 +298,19 @@ CommissioningStage AutoCommissioner::GetNextCommissioningStage(CommissioningStag
298
298
299
299
CommissioningStage AutoCommissioner::GetNextCommissioningStageNetworkSetup (CommissioningStage currentStage, CHIP_ERROR & lastErr)
300
300
{
301
+ if (IsSecondaryNetworkSupported ())
302
+ {
303
+ if (IsTriedSecondaryNetwork ())
304
+ {
305
+ // Try secondary network interface.
306
+ return mDeviceCommissioningInfo .network .wifi .endpoint == kRootEndpointId ? CommissioningStage::kThreadNetworkSetup
307
+ : CommissioningStage::kWiFiNetworkSetup ;
308
+ }
309
+ // Try primary network interface
310
+ return mDeviceCommissioningInfo .network .wifi .endpoint == kRootEndpointId ? CommissioningStage::kWiFiNetworkSetup
311
+ : CommissioningStage::kThreadNetworkSetup ;
312
+ }
313
+
301
314
if (mParams .GetWiFiCredentials ().HasValue () && mDeviceCommissioningInfo .network .wifi .endpoint != kInvalidEndpointId )
302
315
{
303
316
return CommissioningStage::kWiFiNetworkSetup ;
@@ -455,35 +468,15 @@ CommissioningStage AutoCommissioner::GetNextCommissioningStageInternal(Commissio
455
468
case CommissioningStage::kNeedsNetworkCreds :
456
469
return GetNextCommissioningStageNetworkSetup (currentStage, lastErr);
457
470
case CommissioningStage::kWiFiNetworkSetup :
458
- if (mParams .GetThreadOperationalDataset ().HasValue () &&
459
- mDeviceCommissioningInfo .network .thread .endpoint != kInvalidEndpointId )
460
- {
461
- return CommissioningStage::kThreadNetworkSetup ;
462
- }
463
- else
464
- {
465
- return CommissioningStage::kFailsafeBeforeWiFiEnable ;
466
- }
471
+ return CommissioningStage::kFailsafeBeforeWiFiEnable ;
467
472
case CommissioningStage::kThreadNetworkSetup :
468
- if (mParams .GetWiFiCredentials ().HasValue () && mDeviceCommissioningInfo .network .wifi .endpoint != kInvalidEndpointId )
469
- {
470
- return CommissioningStage::kFailsafeBeforeWiFiEnable ;
471
- }
472
- else
473
- {
474
- return CommissioningStage::kFailsafeBeforeThreadEnable ;
475
- }
473
+ return CommissioningStage::kFailsafeBeforeThreadEnable ;
476
474
case CommissioningStage::kFailsafeBeforeWiFiEnable :
477
475
return CommissioningStage::kWiFiNetworkEnable ;
478
476
case CommissioningStage::kFailsafeBeforeThreadEnable :
479
477
return CommissioningStage::kThreadNetworkEnable ;
480
478
case CommissioningStage::kWiFiNetworkEnable :
481
- if (mParams .GetThreadOperationalDataset ().HasValue () &&
482
- mDeviceCommissioningInfo .network .thread .endpoint != kInvalidEndpointId )
483
- {
484
- return CommissioningStage::kThreadNetworkEnable ;
485
- }
486
- else if (mParams .GetSkipCommissioningComplete ().ValueOr (false ))
479
+ if (mParams .GetSkipCommissioningComplete ().ValueOr (false ))
487
480
{
488
481
SetCASEFailsafeTimerIfNeeded ();
489
482
return CommissioningStage::kCleanup ;
@@ -502,6 +495,10 @@ CommissioningStage AutoCommissioner::GetNextCommissioningStageInternal(Commissio
502
495
return CommissioningStage::kEvictPreviousCaseSessions ;
503
496
case CommissioningStage::kEvictPreviousCaseSessions :
504
497
return CommissioningStage::kFindOperationalForStayActive ;
498
+ case CommissioningStage::kPrimaryOperationalNetworkFailed :
499
+ return CommissioningStage::kDisablePrimaryNetworkInterface ;
500
+ case CommissioningStage::kDisablePrimaryNetworkInterface :
501
+ return GetNextCommissioningStageNetworkSetup (currentStage, lastErr);
505
502
case CommissioningStage::kFindOperationalForStayActive :
506
503
return CommissioningStage::kICDSendStayActive ;
507
504
case CommissioningStage::kICDSendStayActive :
@@ -564,6 +561,8 @@ EndpointId AutoCommissioner::GetEndpoint(const CommissioningStage & stage) const
564
561
case CommissioningStage::kThreadNetworkSetup :
565
562
case CommissioningStage::kThreadNetworkEnable :
566
563
return mDeviceCommissioningInfo .network .thread .endpoint ;
564
+ case CommissioningStage::kDisablePrimaryNetworkInterface :
565
+ return kRootEndpointId ;
567
566
default :
568
567
return kRootEndpointId ;
569
568
}
@@ -729,6 +728,16 @@ CHIP_ERROR AutoCommissioner::CommissioningStepFinished(CHIP_ERROR err, Commissio
729
728
report.stageCompleted = CommissioningStage::kScanNetworks ;
730
729
}
731
730
}
731
+
732
+ if (err != CHIP_NO_ERROR && IsSecondaryNetworkSupported () && !IsTriedSecondaryNetwork () &&
733
+ completionStatus.failedStage .HasValue () && completionStatus.failedStage .Value () >= kWiFiNetworkSetup &&
734
+ completionStatus.failedStage .Value () <= kICDSendStayActive )
735
+ {
736
+ // Primary network failed, disable primary network interface and try secondary network interface.
737
+ SetTrySecondaryNetwork ();
738
+ err = CHIP_NO_ERROR;
739
+ report.stageCompleted = CommissioningStage::kPrimaryOperationalNetworkFailed ;
740
+ }
732
741
}
733
742
else
734
743
{
0 commit comments