Skip to content

Commit b4a6213

Browse files
[Python] Create pairingDelegate for each DeviceController (#32369)
* Create pairingDelegate for each DeviceController * restore the original pairingcomplete callback logic
1 parent 692e9e1 commit b4a6213

File tree

3 files changed

+128
-78
lines changed

3 files changed

+128
-78
lines changed

src/controller/python/ChipDeviceController-ScriptBinding.cpp

+56-41
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,6 @@ chip::Controller::CommissioningParameters sCommissioningParameters;
105105

106106
} // namespace
107107

108-
chip::Controller::ScriptDevicePairingDelegate sPairingDelegate;
109108
chip::Controller::ScriptPairingDeviceDiscoveryDelegate sPairingDeviceDiscoveryDelegate;
110109
chip::Credentials::GroupDataProviderImpl sGroupDataProvider;
111110
chip::Credentials::PersistentStorageOpCertStore sPersistentStorageOpCertStore;
@@ -121,9 +120,8 @@ extern "C" {
121120
PyChipError pychip_DeviceController_StackInit(Controller::Python::StorageAdapter * storageAdapter, bool enableServerInteractions);
122121
PyChipError pychip_DeviceController_StackShutdown();
123122

124-
PyChipError pychip_DeviceController_NewDeviceController(chip::Controller::DeviceCommissioner ** outDevCtrl,
125-
chip::NodeId localDeviceId, bool useTestCommissioner);
126-
PyChipError pychip_DeviceController_DeleteDeviceController(chip::Controller::DeviceCommissioner * devCtrl);
123+
PyChipError pychip_DeviceController_DeleteDeviceController(chip::Controller::DeviceCommissioner * devCtrl,
124+
chip::Controller::ScriptDevicePairingDelegate * pairingDelegate);
127125
PyChipError pychip_DeviceController_GetAddressAndPort(chip::Controller::DeviceCommissioner * devCtrl, chip::NodeId nodeId,
128126
char * outAddress, uint64_t maxAddressLen, uint16_t * outPort);
129127
PyChipError pychip_DeviceController_GetCompressedFabricId(chip::Controller::DeviceCommissioner * devCtrl, uint64_t * outFabricId);
@@ -168,35 +166,46 @@ PyChipError pychip_DeviceController_DiscoverCommissionableNodesDeviceType(chip::
168166
uint16_t device_type);
169167
PyChipError pychip_DeviceController_DiscoverCommissionableNodesCommissioningEnabled(chip::Controller::DeviceCommissioner * devCtrl);
170168

171-
PyChipError pychip_DeviceController_OnNetworkCommission(chip::Controller::DeviceCommissioner * devCtrl, uint64_t nodeId,
172-
uint32_t setupPasscode, const uint8_t filterType, const char * filterParam,
173-
uint32_t discoveryTimeoutMsec);
169+
PyChipError pychip_DeviceController_OnNetworkCommission(chip::Controller::DeviceCommissioner * devCtrl,
170+
chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
171+
uint64_t nodeId, uint32_t setupPasscode, const uint8_t filterType,
172+
const char * filterParam, uint32_t discoveryTimeoutMsec);
174173

175174
PyChipError pychip_DeviceController_PostTaskOnChipThread(ChipThreadTaskRunnerFunct callback, void * pythonContext);
176175

177-
PyChipError pychip_DeviceController_OpenCommissioningWindow(chip::Controller::DeviceCommissioner * devCtrl, chip::NodeId nodeid,
178-
uint16_t timeout, uint32_t iteration, uint16_t discriminator,
179-
uint8_t optionInt);
176+
PyChipError pychip_DeviceController_OpenCommissioningWindow(chip::Controller::DeviceCommissioner * devCtrl,
177+
chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
178+
chip::NodeId nodeid, uint16_t timeout, uint32_t iteration,
179+
uint16_t discriminator, uint8_t optionInt);
180180

181181
void pychip_DeviceController_PrintDiscoveredDevices(chip::Controller::DeviceCommissioner * devCtrl);
182182
bool pychip_DeviceController_GetIPForDiscoveredDevice(chip::Controller::DeviceCommissioner * devCtrl, int idx, char * addrStr,
183183
uint32_t len);
184184

185185
// Pairing Delegate
186186
PyChipError
187-
pychip_ScriptDevicePairingDelegate_SetKeyExchangeCallback(chip::Controller::DeviceCommissioner * devCtrl,
187+
pychip_ScriptDevicePairingDelegate_SetKeyExchangeCallback(chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
188188
chip::Controller::DevicePairingDelegate_OnPairingCompleteFunct callback);
189189

190190
PyChipError pychip_ScriptDevicePairingDelegate_SetCommissioningCompleteCallback(
191-
chip::Controller::DeviceCommissioner * devCtrl, chip::Controller::DevicePairingDelegate_OnCommissioningCompleteFunct callback);
191+
chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
192+
chip::Controller::DevicePairingDelegate_OnCommissioningCompleteFunct callback);
192193

193194
PyChipError pychip_ScriptDevicePairingDelegate_SetCommissioningStatusUpdateCallback(
194-
chip::Controller::DeviceCommissioner * devCtrl,
195+
chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
195196
chip::Controller::DevicePairingDelegate_OnCommissioningStatusUpdateFunct callback);
197+
196198
PyChipError
197-
pychip_ScriptDevicePairingDelegate_SetFabricCheckCallback(chip::Controller::DevicePairingDelegate_OnFabricCheckFunct callback);
199+
pychip_ScriptDevicePairingDelegate_SetFabricCheckCallback(chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
200+
chip::Controller::DevicePairingDelegate_OnFabricCheckFunct callback);
201+
198202
PyChipError pychip_ScriptDevicePairingDelegate_SetOpenWindowCompleteCallback(
199-
chip::Controller::DeviceCommissioner * devCtrl, chip::Controller::DevicePairingDelegate_OnWindowOpenCompleteFunct callback);
203+
chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
204+
chip::Controller::DevicePairingDelegate_OnWindowOpenCompleteFunct callback);
205+
206+
PyChipError
207+
pychip_ScriptDevicePairingDelegate_SetExpectingPairingComplete(chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
208+
bool value);
200209

201210
// BLE
202211
PyChipError pychip_DeviceCommissioner_CloseBleConnection(chip::Controller::DeviceCommissioner * devCtrl);
@@ -354,7 +363,6 @@ const char * pychip_DeviceController_StatusReportToString(uint32_t profileId, ui
354363
PyChipError pychip_DeviceController_ConnectBLE(chip::Controller::DeviceCommissioner * devCtrl, uint16_t discriminator,
355364
uint32_t setupPINCode, chip::NodeId nodeid)
356365
{
357-
sPairingDelegate.SetExpectingPairingComplete(true);
358366
return ToPyChipError(devCtrl->PairDevice(nodeid,
359367
chip::RendezvousParameters()
360368
.SetPeerAddress(Transport::PeerAddress(Transport::Type::kBle))
@@ -378,14 +386,12 @@ PyChipError pychip_DeviceController_ConnectIP(chip::Controller::DeviceCommission
378386
addr.SetTransportType(chip::Transport::Type::kUdp).SetIPAddress(peerAddr).SetInterface(ifaceOutput);
379387
params.SetPeerAddress(addr).SetDiscriminator(0);
380388

381-
sPairingDelegate.SetExpectingPairingComplete(true);
382389
return ToPyChipError(devCtrl->PairDevice(nodeid, params, sCommissioningParameters));
383390
}
384391

385392
PyChipError pychip_DeviceController_ConnectWithCode(chip::Controller::DeviceCommissioner * devCtrl, const char * onboardingPayload,
386393
chip::NodeId nodeid, uint8_t discoveryType)
387394
{
388-
sPairingDelegate.SetExpectingPairingComplete(true);
389395
return ToPyChipError(devCtrl->PairDevice(nodeid, onboardingPayload, sCommissioningParameters,
390396
static_cast<chip::Controller::DiscoveryType>(discoveryType)));
391397
}
@@ -430,9 +436,10 @@ PyChipError pychip_DeviceController_UnpairDevice(chip::Controller::DeviceCommiss
430436
return ToPyChipError(err);
431437
}
432438

433-
PyChipError pychip_DeviceController_OnNetworkCommission(chip::Controller::DeviceCommissioner * devCtrl, uint64_t nodeId,
434-
uint32_t setupPasscode, const uint8_t filterType, const char * filterParam,
435-
uint32_t discoveryTimeoutMsec)
439+
PyChipError pychip_DeviceController_OnNetworkCommission(chip::Controller::DeviceCommissioner * devCtrl,
440+
chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
441+
uint64_t nodeId, uint32_t setupPasscode, const uint8_t filterType,
442+
const char * filterParam, uint32_t discoveryTimeoutMsec)
436443
{
437444
Dnssd::DiscoveryFilter filter(static_cast<Dnssd::DiscoveryFilterType>(filterType));
438445
switch (static_cast<Dnssd::DiscoveryFilterType>(filterType))
@@ -467,9 +474,8 @@ PyChipError pychip_DeviceController_OnNetworkCommission(chip::Controller::Device
467474
return ToPyChipError(CHIP_ERROR_INVALID_ARGUMENT);
468475
}
469476

470-
sPairingDelegate.SetExpectingPairingComplete(true);
471-
CHIP_ERROR err = sPairingDeviceDiscoveryDelegate.Init(nodeId, setupPasscode, sCommissioningParameters, &sPairingDelegate,
472-
devCtrl, discoveryTimeoutMsec);
477+
CHIP_ERROR err = sPairingDeviceDiscoveryDelegate.Init(nodeId, setupPasscode, sCommissioningParameters, pairingDelegate, devCtrl,
478+
discoveryTimeoutMsec);
473479
VerifyOrReturnError(err == CHIP_NO_ERROR, ToPyChipError(err));
474480
return ToPyChipError(devCtrl->DiscoverCommissionableNodes(filter));
475481
}
@@ -587,7 +593,6 @@ PyChipError pychip_DeviceController_EstablishPASESessionIP(chip::Controller::Dev
587593
addr.SetPort(port);
588594
}
589595
params.SetPeerAddress(addr).SetDiscriminator(0);
590-
sPairingDelegate.SetExpectingPairingComplete(true);
591596
return ToPyChipError(devCtrl->EstablishPASEConnection(nodeid, params));
592597
}
593598

@@ -598,14 +603,12 @@ PyChipError pychip_DeviceController_EstablishPASESessionBLE(chip::Controller::De
598603
RendezvousParameters params = chip::RendezvousParameters().SetSetupPINCode(setupPINCode);
599604
addr.SetTransportType(chip::Transport::Type::kBle);
600605
params.SetPeerAddress(addr).SetDiscriminator(discriminator);
601-
sPairingDelegate.SetExpectingPairingComplete(true);
602606
return ToPyChipError(devCtrl->EstablishPASEConnection(nodeid, params));
603607
}
604608

605609
PyChipError pychip_DeviceController_EstablishPASESession(chip::Controller::DeviceCommissioner * devCtrl, const char * setUpCode,
606610
chip::NodeId nodeid)
607611
{
608-
sPairingDelegate.SetExpectingPairingComplete(true);
609612
return ToPyChipError(devCtrl->EstablishPASEConnection(nodeid, setUpCode));
610613
}
611614

@@ -656,15 +659,17 @@ PyChipError pychip_DeviceController_DiscoverCommissionableNodesCommissioningEnab
656659
}
657660

658661
PyChipError pychip_ScriptDevicePairingDelegate_SetOpenWindowCompleteCallback(
659-
chip::Controller::DeviceCommissioner * devCtrl, chip::Controller::DevicePairingDelegate_OnWindowOpenCompleteFunct callback)
662+
chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
663+
chip::Controller::DevicePairingDelegate_OnWindowOpenCompleteFunct callback)
660664
{
661-
sPairingDelegate.SetCommissioningWindowOpenCallback(callback);
665+
pairingDelegate->SetCommissioningWindowOpenCallback(callback);
662666
return ToPyChipError(CHIP_NO_ERROR);
663667
}
664668

665-
PyChipError pychip_DeviceController_OpenCommissioningWindow(chip::Controller::DeviceCommissioner * devCtrl, chip::NodeId nodeid,
666-
uint16_t timeout, uint32_t iteration, uint16_t discriminator,
667-
uint8_t optionInt)
669+
PyChipError pychip_DeviceController_OpenCommissioningWindow(chip::Controller::DeviceCommissioner * devCtrl,
670+
chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
671+
chip::NodeId nodeid, uint16_t timeout, uint32_t iteration,
672+
uint16_t discriminator, uint8_t optionInt)
668673
{
669674
const auto option = static_cast<Controller::CommissioningWindowOpener::CommissioningWindowOption>(optionInt);
670675
if (option == Controller::CommissioningWindowOpener::CommissioningWindowOption::kOriginalSetupCode)
@@ -680,40 +685,50 @@ PyChipError pychip_DeviceController_OpenCommissioningWindow(chip::Controller::De
680685
Platform::New<Controller::CommissioningWindowOpener>(static_cast<chip::Controller::DeviceController *>(devCtrl));
681686
PyChipError err = ToPyChipError(opener->OpenCommissioningWindow(nodeid, System::Clock::Seconds16(timeout), iteration,
682687
discriminator, NullOptional, NullOptional,
683-
sPairingDelegate.GetOpenWindowCallback(opener), payload));
688+
pairingDelegate->GetOpenWindowCallback(opener), payload));
684689
return err;
685690
}
686691

687692
return ToPyChipError(CHIP_ERROR_INVALID_ARGUMENT);
688693
}
689694

690695
PyChipError
691-
pychip_ScriptDevicePairingDelegate_SetKeyExchangeCallback(chip::Controller::DeviceCommissioner * devCtrl,
696+
pychip_ScriptDevicePairingDelegate_SetKeyExchangeCallback(chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
692697
chip::Controller::DevicePairingDelegate_OnPairingCompleteFunct callback)
693698
{
694-
sPairingDelegate.SetKeyExchangeCallback(callback);
699+
pairingDelegate->SetKeyExchangeCallback(callback);
695700
return ToPyChipError(CHIP_NO_ERROR);
696701
}
697702

698703
PyChipError pychip_ScriptDevicePairingDelegate_SetCommissioningCompleteCallback(
699-
chip::Controller::DeviceCommissioner * devCtrl, chip::Controller::DevicePairingDelegate_OnCommissioningCompleteFunct callback)
704+
chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
705+
chip::Controller::DevicePairingDelegate_OnCommissioningCompleteFunct callback)
700706
{
701-
sPairingDelegate.SetCommissioningCompleteCallback(callback);
707+
pairingDelegate->SetCommissioningCompleteCallback(callback);
702708
return ToPyChipError(CHIP_NO_ERROR);
703709
}
704710

705711
PyChipError pychip_ScriptDevicePairingDelegate_SetCommissioningStatusUpdateCallback(
706-
chip::Controller::DeviceCommissioner * devCtrl,
712+
chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
707713
chip::Controller::DevicePairingDelegate_OnCommissioningStatusUpdateFunct callback)
708714
{
709-
sPairingDelegate.SetCommissioningStatusUpdateCallback(callback);
715+
pairingDelegate->SetCommissioningStatusUpdateCallback(callback);
716+
return ToPyChipError(CHIP_NO_ERROR);
717+
}
718+
719+
PyChipError
720+
pychip_ScriptDevicePairingDelegate_SetFabricCheckCallback(chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
721+
chip::Controller::DevicePairingDelegate_OnFabricCheckFunct callback)
722+
{
723+
pairingDelegate->SetFabricCheckCallback(callback);
710724
return ToPyChipError(CHIP_NO_ERROR);
711725
}
712726

713727
PyChipError
714-
pychip_ScriptDevicePairingDelegate_SetFabricCheckCallback(chip::Controller::DevicePairingDelegate_OnFabricCheckFunct callback)
728+
pychip_ScriptDevicePairingDelegate_SetExpectingPairingComplete(chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
729+
bool value)
715730
{
716-
sPairingDelegate.SetFabricCheckCallback(callback);
731+
pairingDelegate->SetExpectingPairingComplete(value);
717732
return ToPyChipError(CHIP_NO_ERROR);
718733
}
719734

0 commit comments

Comments
 (0)