Add option 'discover-once' for chip-tool. (#21712)
diff --git a/examples/chip-tool/commands/pairing/PairingCommand.cpp b/examples/chip-tool/commands/pairing/PairingCommand.cpp
index 557f25a..6bc5fc9 100644
--- a/examples/chip-tool/commands/pairing/PairingCommand.cpp
+++ b/examples/chip-tool/commands/pairing/PairingCommand.cpp
@@ -150,6 +150,17 @@
ChipLogError(chipTool, "Secure Pairing Failed");
SetCommandExitStatus(CHIP_ERROR_INCORRECT_STATE);
break;
+ case DevicePairingDelegate::Status::SecurePairingDiscoveringMoreDevices:
+ if (IsDiscoverOnce())
+ {
+ ChipLogError(chipTool, "Secure Pairing Failed");
+ SetCommandExitStatus(CHIP_ERROR_INCORRECT_STATE);
+ }
+ else
+ {
+ ChipLogProgress(chipTool, "Secure Pairing Discovering More Devices");
+ }
+ break;
}
}
diff --git a/examples/chip-tool/commands/pairing/PairingCommand.h b/examples/chip-tool/commands/pairing/PairingCommand.h
index 49e9675..8a7ee89 100644
--- a/examples/chip-tool/commands/pairing/PairingCommand.h
+++ b/examples/chip-tool/commands/pairing/PairingCommand.h
@@ -80,6 +80,7 @@
case PairingMode::Code:
case PairingMode::CodePaseOnly:
AddArgument("payload", &mOnboardingPayload);
+ AddArgument("discover-once", 0, 1, &mDiscoverOnce);
break;
case PairingMode::Ble:
AddArgument("setup-pin-code", 0, 134217727, &mSetupPINCode);
@@ -144,6 +145,7 @@
/////////// DeviceDiscoveryDelegate Interface /////////
void OnDiscoveredDevice(const chip::Dnssd::DiscoveredNodeData & nodeData) override;
+ bool IsDiscoverOnce() { return mDiscoverOnce.ValueOr(false); }
private:
CHIP_ERROR RunInternal(NodeId remoteId);
@@ -160,6 +162,7 @@
Command::AddressWithInterface mRemoteAddr;
NodeId mNodeId;
chip::Optional<uint16_t> mTimeout;
+ chip::Optional<bool> mDiscoverOnce;
uint16_t mRemotePort;
uint16_t mDiscriminator;
uint32_t mSetupPINCode;
diff --git a/examples/darwin-framework-tool/commands/pairing/PairingDelegateBridge.mm b/examples/darwin-framework-tool/commands/pairing/PairingDelegateBridge.mm
index 5aee425..b2dae79 100644
--- a/examples/darwin-framework-tool/commands/pairing/PairingDelegateBridge.mm
+++ b/examples/darwin-framework-tool/commands/pairing/PairingDelegateBridge.mm
@@ -35,6 +35,9 @@
ChipLogError(chipTool, "Secure Pairing Failed");
_commandBridge->SetCommandExitStatus(CHIP_ERROR_INCORRECT_STATE);
break;
+ case MTRPairingStatusDiscoveringMoreDevices:
+ ChipLogProgress(chipTool, "Secure Pairing Discovering More Devices");
+ break;
case MTRPairingStatusUnknown:
ChipLogError(chipTool, "Uknown Pairing Status");
break;
diff --git a/examples/platform/linux/CommissionerMain.cpp b/examples/platform/linux/CommissionerMain.cpp
index b1b096b..7e8bdbc 100644
--- a/examples/platform/linux/CommissionerMain.cpp
+++ b/examples/platform/linux/CommissionerMain.cpp
@@ -255,6 +255,9 @@
case DevicePairingDelegate::Status::SecurePairingFailed:
ChipLogError(AppServer, "Secure Pairing Failed");
break;
+ case DevicePairingDelegate::Status::SecurePairingDiscoveringMoreDevices:
+ ChipLogProgress(AppServer, "Secure Pairing Discovering More Device");
+ break;
}
}
diff --git a/src/app/tests/suites/commands/commissioner/CommissionerCommands.cpp b/src/app/tests/suites/commands/commissioner/CommissionerCommands.cpp
index dfd0dd7..c41d892 100644
--- a/src/app/tests/suites/commands/commissioner/CommissionerCommands.cpp
+++ b/src/app/tests/suites/commands/commissioner/CommissionerCommands.cpp
@@ -83,6 +83,8 @@
ChipLogError(chipTool, "Secure Pairing Failed");
OnResponse(ConvertToStatusIB(CHIP_ERROR_INCORRECT_STATE), nullptr);
break;
+ case DevicePairingDelegate::Status::SecurePairingDiscoveringMoreDevices:
+ break;
}
}
diff --git a/src/controller/DevicePairingDelegate.h b/src/controller/DevicePairingDelegate.h
index 2e9fc05..186e3dc 100644
--- a/src/controller/DevicePairingDelegate.h
+++ b/src/controller/DevicePairingDelegate.h
@@ -40,6 +40,7 @@
{
SecurePairingSuccess = 0,
SecurePairingFailed,
+ SecurePairingDiscoveringMoreDevices,
};
/**
diff --git a/src/controller/SetUpCodePairer.cpp b/src/controller/SetUpCodePairer.cpp
index c24ecc5..3ab62af 100644
--- a/src/controller/SetUpCodePairer.cpp
+++ b/src/controller/SetUpCodePairer.cpp
@@ -405,14 +405,14 @@
if (!mDiscoveredParameters.empty())
{
ChipLogProgress(Controller, "Ignoring SecurePairingFailed status for now; we have more discovered devices to try");
- return;
+ status = DevicePairingDelegate::Status::SecurePairingDiscoveringMoreDevices;
}
if (DiscoveryInProgress())
{
ChipLogProgress(Controller,
"Ignoring SecurePairingFailed status for now; we are waiting to see if we discover more devices");
- return;
+ status = DevicePairingDelegate::Status::SecurePairingDiscoveringMoreDevices;
}
}
diff --git a/src/darwin/Framework/CHIP/MTRDevicePairingDelegate.h b/src/darwin/Framework/CHIP/MTRDevicePairingDelegate.h
index eeb7a4f..b4bd256 100644
--- a/src/darwin/Framework/CHIP/MTRDevicePairingDelegate.h
+++ b/src/darwin/Framework/CHIP/MTRDevicePairingDelegate.h
@@ -22,7 +22,8 @@
typedef NS_ENUM(NSUInteger, MTRPairingStatus) {
MTRPairingStatusUnknown = 0,
MTRPairingStatusSuccess = 1,
- MTRPairingStatusFailed = 2
+ MTRPairingStatusFailed = 2,
+ MTRPairingStatusDiscoveringMoreDevices = 3
};
/**
diff --git a/src/darwin/Framework/CHIP/MTRDevicePairingDelegateBridge.mm b/src/darwin/Framework/CHIP/MTRDevicePairingDelegateBridge.mm
index bd05a12..f0393f5 100644
--- a/src/darwin/Framework/CHIP/MTRDevicePairingDelegateBridge.mm
+++ b/src/darwin/Framework/CHIP/MTRDevicePairingDelegateBridge.mm
@@ -46,6 +46,9 @@
case chip::Controller::DevicePairingDelegate::Status::SecurePairingFailed:
rv = MTRPairingStatusFailed;
break;
+ case chip::Controller::DevicePairingDelegate::Status::SecurePairingDiscoveringMoreDevices:
+ rv = MTRPairingStatusDiscoveringMoreDevices;
+ break;
}
return rv;
}