Skip to content

Commit d8e7e43

Browse files
authored
[python] Add ICD support to Python binding (#33533)
* [icd] Add ICD support to python * [python] Add ICD support to Python binding * Update * update * update * Update * Use ScopedNodeId in ICD commissioning callbacks * update * fix
1 parent a42570b commit d8e7e43

18 files changed

+419
-39
lines changed

examples/chip-tool/commands/pairing/PairingCommand.cpp

+7-7
Original file line numberDiff line numberDiff line change
@@ -436,15 +436,15 @@ void PairingCommand::OnReadCommissioningInfo(const Controller::ReadCommissioning
436436
info.icd.idleModeDuration, info.icd.activeModeDuration, info.icd.activeModeThreshold);
437437
}
438438

439-
void PairingCommand::OnICDRegistrationComplete(NodeId nodeId, uint32_t icdCounter)
439+
void PairingCommand::OnICDRegistrationComplete(ScopedNodeId nodeId, uint32_t icdCounter)
440440
{
441441
char icdSymmetricKeyHex[chip::Crypto::kAES_CCM128_Key_Length * 2 + 1];
442442

443443
chip::Encoding::BytesToHex(mICDSymmetricKey.Value().data(), mICDSymmetricKey.Value().size(), icdSymmetricKeyHex,
444444
sizeof(icdSymmetricKeyHex), chip::Encoding::HexFlags::kNullTerminate);
445445

446446
app::ICDClientInfo clientInfo;
447-
clientInfo.peer_node = ScopedNodeId(nodeId, CurrentCommissioner().GetFabricIndex());
447+
clientInfo.peer_node = nodeId;
448448
clientInfo.monitored_subject = mICDMonitoredSubject.Value();
449449
clientInfo.start_icd_counter = icdCounter;
450450

@@ -457,26 +457,26 @@ void PairingCommand::OnICDRegistrationComplete(NodeId nodeId, uint32_t icdCounte
457457
if (err != CHIP_NO_ERROR)
458458
{
459459
CHIPCommand::sICDClientStorage.RemoveKey(clientInfo);
460-
ChipLogError(chipTool, "Failed to persist symmetric key for " ChipLogFormatX64 ": %s", ChipLogValueX64(nodeId),
460+
ChipLogError(chipTool, "Failed to persist symmetric key for " ChipLogFormatX64 ": %s", ChipLogValueX64(nodeId.GetNodeId()),
461461
err.AsString());
462462
SetCommandExitStatus(err);
463463
return;
464464
}
465465

466466
mDeviceIsICD = true;
467467

468-
ChipLogProgress(chipTool, "Saved ICD Symmetric key for " ChipLogFormatX64, ChipLogValueX64(nodeId));
468+
ChipLogProgress(chipTool, "Saved ICD Symmetric key for " ChipLogFormatX64, ChipLogValueX64(nodeId.GetNodeId()));
469469
ChipLogProgress(chipTool,
470470
"ICD Registration Complete for device " ChipLogFormatX64 " / Check-In NodeID: " ChipLogFormatX64
471471
" / Monitored Subject: " ChipLogFormatX64 " / Symmetric Key: %s / ICDCounter %u",
472-
ChipLogValueX64(nodeId), ChipLogValueX64(mICDCheckInNodeId.Value()),
472+
ChipLogValueX64(nodeId.GetNodeId()), ChipLogValueX64(mICDCheckInNodeId.Value()),
473473
ChipLogValueX64(mICDMonitoredSubject.Value()), icdSymmetricKeyHex, icdCounter);
474474
}
475475

476-
void PairingCommand::OnICDStayActiveComplete(NodeId deviceId, uint32_t promisedActiveDuration)
476+
void PairingCommand::OnICDStayActiveComplete(ScopedNodeId deviceId, uint32_t promisedActiveDuration)
477477
{
478478
ChipLogProgress(chipTool, "ICD Stay Active Complete for device " ChipLogFormatX64 " / promisedActiveDuration: %u",
479-
ChipLogValueX64(deviceId), promisedActiveDuration);
479+
ChipLogValueX64(deviceId.GetNodeId()), promisedActiveDuration);
480480
}
481481

482482
void PairingCommand::OnDiscoveredDevice(const chip::Dnssd::CommissionNodeData & nodeData)

examples/chip-tool/commands/pairing/PairingCommand.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,8 @@ class PairingCommand : public CHIPCommand,
197197
void OnPairingDeleted(CHIP_ERROR error) override;
198198
void OnReadCommissioningInfo(const chip::Controller::ReadCommissioningInfo & info) override;
199199
void OnCommissioningComplete(NodeId deviceId, CHIP_ERROR error) override;
200-
void OnICDRegistrationComplete(NodeId deviceId, uint32_t icdCounter) override;
201-
void OnICDStayActiveComplete(NodeId deviceId, uint32_t promisedActiveDuration) override;
200+
void OnICDRegistrationComplete(chip::ScopedNodeId deviceId, uint32_t icdCounter) override;
201+
void OnICDStayActiveComplete(chip::ScopedNodeId deviceId, uint32_t promisedActiveDuration) override;
202202

203203
/////////// DeviceDiscoveryDelegate Interface /////////
204204
void OnDiscoveredDevice(const chip::Dnssd::CommissionNodeData & nodeData) override;

examples/fabric-admin/commands/pairing/PairingCommand.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -436,15 +436,15 @@ void PairingCommand::OnReadCommissioningInfo(const Controller::ReadCommissioning
436436
info.icd.idleModeDuration, info.icd.activeModeDuration, info.icd.activeModeThreshold);
437437
}
438438

439-
void PairingCommand::OnICDRegistrationComplete(NodeId nodeId, uint32_t icdCounter)
439+
void PairingCommand::OnICDRegistrationComplete(ScopedNodeId nodeId, uint32_t icdCounter)
440440
{
441441
char icdSymmetricKeyHex[chip::Crypto::kAES_CCM128_Key_Length * 2 + 1];
442442

443443
chip::Encoding::BytesToHex(mICDSymmetricKey.Value().data(), mICDSymmetricKey.Value().size(), icdSymmetricKeyHex,
444444
sizeof(icdSymmetricKeyHex), chip::Encoding::HexFlags::kNullTerminate);
445445

446446
app::ICDClientInfo clientInfo;
447-
clientInfo.peer_node = ScopedNodeId(nodeId, CurrentCommissioner().GetFabricIndex());
447+
clientInfo.peer_node = nodeId;
448448
clientInfo.monitored_subject = mICDMonitoredSubject.Value();
449449
clientInfo.start_icd_counter = icdCounter;
450450

@@ -457,26 +457,26 @@ void PairingCommand::OnICDRegistrationComplete(NodeId nodeId, uint32_t icdCounte
457457
if (err != CHIP_NO_ERROR)
458458
{
459459
CHIPCommand::sICDClientStorage.RemoveKey(clientInfo);
460-
ChipLogError(NotSpecified, "Failed to persist symmetric key for " ChipLogFormatX64 ": %s", ChipLogValueX64(nodeId),
461-
err.AsString());
460+
ChipLogError(NotSpecified, "Failed to persist symmetric key for " ChipLogFormatX64 ": %s",
461+
ChipLogValueX64(nodeId.GetNodeId()), err.AsString());
462462
SetCommandExitStatus(err);
463463
return;
464464
}
465465

466466
mDeviceIsICD = true;
467467

468-
ChipLogProgress(NotSpecified, "Saved ICD Symmetric key for " ChipLogFormatX64, ChipLogValueX64(nodeId));
468+
ChipLogProgress(NotSpecified, "Saved ICD Symmetric key for " ChipLogFormatX64, ChipLogValueX64(nodeId.GetNodeId()));
469469
ChipLogProgress(NotSpecified,
470470
"ICD Registration Complete for device " ChipLogFormatX64 " / Check-In NodeID: " ChipLogFormatX64
471471
" / Monitored Subject: " ChipLogFormatX64 " / Symmetric Key: %s / ICDCounter %u",
472-
ChipLogValueX64(nodeId), ChipLogValueX64(mICDCheckInNodeId.Value()),
472+
ChipLogValueX64(nodeId.GetNodeId()), ChipLogValueX64(mICDCheckInNodeId.Value()),
473473
ChipLogValueX64(mICDMonitoredSubject.Value()), icdSymmetricKeyHex, icdCounter);
474474
}
475475

476-
void PairingCommand::OnICDStayActiveComplete(NodeId deviceId, uint32_t promisedActiveDuration)
476+
void PairingCommand::OnICDStayActiveComplete(ScopedNodeId deviceId, uint32_t promisedActiveDuration)
477477
{
478478
ChipLogProgress(NotSpecified, "ICD Stay Active Complete for device " ChipLogFormatX64 " / promisedActiveDuration: %u",
479-
ChipLogValueX64(deviceId), promisedActiveDuration);
479+
ChipLogValueX64(deviceId.GetNodeId()), promisedActiveDuration);
480480
}
481481

482482
void PairingCommand::OnDiscoveredDevice(const chip::Dnssd::CommissionNodeData & nodeData)

examples/fabric-admin/commands/pairing/PairingCommand.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,8 @@ class PairingCommand : public CHIPCommand,
196196
void OnPairingDeleted(CHIP_ERROR error) override;
197197
void OnReadCommissioningInfo(const chip::Controller::ReadCommissioningInfo & info) override;
198198
void OnCommissioningComplete(NodeId deviceId, CHIP_ERROR error) override;
199-
void OnICDRegistrationComplete(NodeId deviceId, uint32_t icdCounter) override;
200-
void OnICDStayActiveComplete(NodeId deviceId, uint32_t promisedActiveDuration) override;
199+
void OnICDRegistrationComplete(chip::ScopedNodeId deviceId, uint32_t icdCounter) override;
200+
void OnICDStayActiveComplete(chip::ScopedNodeId deviceId, uint32_t promisedActiveDuration) override;
201201

202202
/////////// DeviceDiscoveryDelegate Interface /////////
203203
void OnDiscoveredDevice(const chip::Dnssd::CommissionNodeData & nodeData) override;

src/controller/CHIPDeviceController.cpp

+6-4
Original file line numberDiff line numberDiff line change
@@ -1326,8 +1326,8 @@ void DeviceCommissioner::OnICDManagementRegisterClientResponse(
13261326

13271327
if (commissioner->mPairingDelegate != nullptr)
13281328
{
1329-
commissioner->mPairingDelegate->OnICDRegistrationComplete(commissioner->mDeviceBeingCommissioned->GetDeviceId(),
1330-
data.ICDCounter);
1329+
commissioner->mPairingDelegate->OnICDRegistrationComplete(
1330+
ScopedNodeId(commissioner->mDeviceBeingCommissioned->GetDeviceId(), commissioner->GetFabricIndex()), data.ICDCounter);
13311331
}
13321332

13331333
exit:
@@ -1346,8 +1346,10 @@ void DeviceCommissioner::OnICDManagementStayActiveResponse(
13461346

13471347
if (commissioner->mPairingDelegate != nullptr)
13481348
{
1349-
commissioner->mPairingDelegate->OnICDStayActiveComplete(commissioner->mDeviceBeingCommissioned->GetDeviceId(),
1350-
data.promisedActiveDuration);
1349+
commissioner->mPairingDelegate->OnICDStayActiveComplete(
1350+
1351+
ScopedNodeId(commissioner->mDeviceBeingCommissioned->GetDeviceId(), commissioner->GetFabricIndex()),
1352+
data.promisedActiveDuration);
13511353
}
13521354

13531355
exit:

src/controller/DevicePairingDelegate.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ class DLL_EXPORT DevicePairingDelegate
136136
* @param[in] icdNodeId The node id of the ICD.
137137
* @param[in] icdCounter The ICD Counter received from the device.
138138
*/
139-
virtual void OnICDRegistrationComplete(NodeId icdNodeId, uint32_t icdCounter) {}
139+
virtual void OnICDRegistrationComplete(ScopedNodeId icdNodeId, uint32_t icdCounter) {}
140140

141141
/**
142142
* @brief
@@ -147,7 +147,7 @@ class DLL_EXPORT DevicePairingDelegate
147147
* @param[in] promisedActiveDurationMsec The actual duration that the ICD server can stay active
148148
* from the time it receives the StayActiveRequest command.
149149
*/
150-
virtual void OnICDStayActiveComplete(NodeId icdNodeId, uint32_t promisedActiveDurationMsec) {}
150+
virtual void OnICDStayActiveComplete(ScopedNodeId icdNodeId, uint32_t promisedActiveDurationMsec) {}
151151
};
152152

153153
} // namespace Controller

src/controller/java/AndroidDeviceControllerWrapper.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -994,13 +994,13 @@ void AndroidDeviceControllerWrapper::OnICDRegistrationInfoRequired()
994994
env->CallVoidMethod(mJavaObjectRef.ObjectRef(), onICDRegistrationInfoRequiredMethod);
995995
}
996996

997-
void AndroidDeviceControllerWrapper::OnICDRegistrationComplete(chip::NodeId icdNodeId, uint32_t icdCounter)
997+
void AndroidDeviceControllerWrapper::OnICDRegistrationComplete(chip::ScopedNodeId icdNodeId, uint32_t icdCounter)
998998
{
999999
chip::DeviceLayer::StackUnlock unlock;
10001000

10011001
CHIP_ERROR err = CHIP_NO_ERROR;
10021002
chip::app::ICDClientInfo clientInfo;
1003-
clientInfo.peer_node = ScopedNodeId(icdNodeId, Controller()->GetFabricIndex());
1003+
clientInfo.peer_node = icdNodeId;
10041004
clientInfo.monitored_subject = mAutoCommissioner.GetCommissioningParameters().GetICDMonitoredSubject().Value();
10051005
clientInfo.start_icd_counter = icdCounter;
10061006

@@ -1014,13 +1014,13 @@ void AndroidDeviceControllerWrapper::OnICDRegistrationComplete(chip::NodeId icdN
10141014

10151015
if (err == CHIP_NO_ERROR)
10161016
{
1017-
ChipLogProgress(Controller, "Saved ICD Symmetric key for " ChipLogFormatX64, ChipLogValueX64(icdNodeId));
1017+
ChipLogProgress(Controller, "Saved ICD Symmetric key for " ChipLogFormatX64, ChipLogValueX64(icdNodeId.GetNodeId()));
10181018
}
10191019
else
10201020
{
10211021
getICDClientStorage()->RemoveKey(clientInfo);
1022-
ChipLogError(Controller, "Failed to persist symmetric key for " ChipLogFormatX64 ": %s", ChipLogValueX64(icdNodeId),
1023-
err.AsString());
1022+
ChipLogError(Controller, "Failed to persist symmetric key for " ChipLogFormatX64 ": %s",
1023+
ChipLogValueX64(icdNodeId.GetNodeId()), err.AsString());
10241024
}
10251025

10261026
mDeviceIsICD = true;
@@ -1055,7 +1055,7 @@ void AndroidDeviceControllerWrapper::OnICDRegistrationComplete(chip::NodeId icdN
10551055
icdDeviceInfoObj = env->NewObject(
10561056
icdDeviceInfoClass, icdDeviceInfoStructCtor, jSymmetricKey, static_cast<jint>(mUserActiveModeTriggerHint.Raw()),
10571057
jUserActiveModeTriggerInstruction, static_cast<jlong>(mIdleModeDuration), static_cast<jlong>(mActiveModeDuration),
1058-
static_cast<jint>(mActiveModeThreshold), static_cast<jlong>(icdNodeId), static_cast<jlong>(icdCounter),
1058+
static_cast<jint>(mActiveModeThreshold), static_cast<jlong>(icdNodeId.GetNodeId()), static_cast<jlong>(icdCounter),
10591059
static_cast<jlong>(mAutoCommissioner.GetCommissioningParameters().GetICDMonitoredSubject().Value()),
10601060
static_cast<jlong>(Controller()->GetFabricId()), static_cast<jint>(Controller()->GetFabricIndex()));
10611061

src/controller/java/AndroidDeviceControllerWrapper.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ class AndroidDeviceControllerWrapper : public chip::Controller::DevicePairingDel
118118
const chip::app::Clusters::NetworkCommissioning::Commands::ScanNetworksResponse::DecodableType & dataResponse) override;
119119
void OnScanNetworksFailure(CHIP_ERROR error) override;
120120
void OnICDRegistrationInfoRequired() override;
121-
void OnICDRegistrationComplete(chip::NodeId icdNodeId, uint32_t icdCounter) override;
121+
void OnICDRegistrationComplete(chip::ScopedNodeId icdNodeId, uint32_t icdCounter) override;
122122

123123
// PersistentStorageDelegate implementation
124124
CHIP_ERROR SyncSetKeyValue(const char * key, const void * value, uint16_t size) override;

src/controller/python/BUILD.gn

+3
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ shared_library("ChipDeviceCtrl") {
7676
"chip/crypto/p256keypair.cpp",
7777
"chip/crypto/p256keypair.h",
7878
"chip/discovery/NodeResolution.cpp",
79+
"chip/icd/PyChipCheckInDelegate.cpp",
80+
"chip/icd/PyChipCheckInDelegate.h",
7981
"chip/interaction_model/Delegate.cpp",
8082
"chip/interaction_model/Delegate.h",
8183
"chip/internal/ChipThreadWork.cpp",
@@ -121,6 +123,7 @@ shared_library("ChipDeviceCtrl") {
121123

122124
public_deps = [
123125
"${chip_root}/src/app",
126+
"${chip_root}/src/app/icd/client:handler",
124127
"${chip_root}/src/app/server",
125128
"${chip_root}/src/credentials:default_attestation_verifier",
126129
"${chip_root}/src/lib",

0 commit comments

Comments
 (0)