Skip to content

Commit 6d04d69

Browse files
committed
Create pairingDelegate for each DeviceController
1 parent 9db02a8 commit 6d04d69

5 files changed

+100
-84
lines changed

src/controller/python/ChipDeviceController-ScriptBinding.cpp

+42-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,40 @@ 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);
196197
PyChipError
197-
pychip_ScriptDevicePairingDelegate_SetFabricCheckCallback(chip::Controller::DevicePairingDelegate_OnFabricCheckFunct callback);
198+
pychip_ScriptDevicePairingDelegate_SetFabricCheckCallback(chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
199+
chip::Controller::DevicePairingDelegate_OnFabricCheckFunct callback);
198200
PyChipError pychip_ScriptDevicePairingDelegate_SetOpenWindowCompleteCallback(
199-
chip::Controller::DeviceCommissioner * devCtrl, chip::Controller::DevicePairingDelegate_OnWindowOpenCompleteFunct callback);
201+
chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
202+
chip::Controller::DevicePairingDelegate_OnWindowOpenCompleteFunct callback);
200203

201204
// BLE
202205
PyChipError pychip_DeviceCommissioner_CloseBleConnection(chip::Controller::DeviceCommissioner * devCtrl);
@@ -354,7 +357,6 @@ const char * pychip_DeviceController_StatusReportToString(uint32_t profileId, ui
354357
PyChipError pychip_DeviceController_ConnectBLE(chip::Controller::DeviceCommissioner * devCtrl, uint16_t discriminator,
355358
uint32_t setupPINCode, chip::NodeId nodeid)
356359
{
357-
sPairingDelegate.SetExpectingPairingComplete(true);
358360
return ToPyChipError(devCtrl->PairDevice(nodeid,
359361
chip::RendezvousParameters()
360362
.SetPeerAddress(Transport::PeerAddress(Transport::Type::kBle))
@@ -378,14 +380,12 @@ PyChipError pychip_DeviceController_ConnectIP(chip::Controller::DeviceCommission
378380
addr.SetTransportType(chip::Transport::Type::kUdp).SetIPAddress(peerAddr).SetInterface(ifaceOutput);
379381
params.SetPeerAddress(addr).SetDiscriminator(0);
380382

381-
sPairingDelegate.SetExpectingPairingComplete(true);
382383
return ToPyChipError(devCtrl->PairDevice(nodeid, params, sCommissioningParameters));
383384
}
384385

385386
PyChipError pychip_DeviceController_ConnectWithCode(chip::Controller::DeviceCommissioner * devCtrl, const char * onboardingPayload,
386387
chip::NodeId nodeid, uint8_t discoveryType)
387388
{
388-
sPairingDelegate.SetExpectingPairingComplete(true);
389389
return ToPyChipError(devCtrl->PairDevice(nodeid, onboardingPayload, sCommissioningParameters,
390390
static_cast<chip::Controller::DiscoveryType>(discoveryType)));
391391
}
@@ -430,9 +430,10 @@ PyChipError pychip_DeviceController_UnpairDevice(chip::Controller::DeviceCommiss
430430
return ToPyChipError(err);
431431
}
432432

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)
433+
PyChipError pychip_DeviceController_OnNetworkCommission(chip::Controller::DeviceCommissioner * devCtrl,
434+
chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
435+
uint64_t nodeId, uint32_t setupPasscode, const uint8_t filterType,
436+
const char * filterParam, uint32_t discoveryTimeoutMsec)
436437
{
437438
Dnssd::DiscoveryFilter filter(static_cast<Dnssd::DiscoveryFilterType>(filterType));
438439
switch (static_cast<Dnssd::DiscoveryFilterType>(filterType))
@@ -467,9 +468,8 @@ PyChipError pychip_DeviceController_OnNetworkCommission(chip::Controller::Device
467468
return ToPyChipError(CHIP_ERROR_INVALID_ARGUMENT);
468469
}
469470

470-
sPairingDelegate.SetExpectingPairingComplete(true);
471-
CHIP_ERROR err = sPairingDeviceDiscoveryDelegate.Init(nodeId, setupPasscode, sCommissioningParameters, &sPairingDelegate,
472-
devCtrl, discoveryTimeoutMsec);
471+
CHIP_ERROR err = sPairingDeviceDiscoveryDelegate.Init(nodeId, setupPasscode, sCommissioningParameters, pairingDelegate, devCtrl,
472+
discoveryTimeoutMsec);
473473
VerifyOrReturnError(err == CHIP_NO_ERROR, ToPyChipError(err));
474474
return ToPyChipError(devCtrl->DiscoverCommissionableNodes(filter));
475475
}
@@ -587,7 +587,6 @@ PyChipError pychip_DeviceController_EstablishPASESessionIP(chip::Controller::Dev
587587
addr.SetPort(port);
588588
}
589589
params.SetPeerAddress(addr).SetDiscriminator(0);
590-
sPairingDelegate.SetExpectingPairingComplete(true);
591590
return ToPyChipError(devCtrl->EstablishPASEConnection(nodeid, params));
592591
}
593592

@@ -598,14 +597,12 @@ PyChipError pychip_DeviceController_EstablishPASESessionBLE(chip::Controller::De
598597
RendezvousParameters params = chip::RendezvousParameters().SetSetupPINCode(setupPINCode);
599598
addr.SetTransportType(chip::Transport::Type::kBle);
600599
params.SetPeerAddress(addr).SetDiscriminator(discriminator);
601-
sPairingDelegate.SetExpectingPairingComplete(true);
602600
return ToPyChipError(devCtrl->EstablishPASEConnection(nodeid, params));
603601
}
604602

605603
PyChipError pychip_DeviceController_EstablishPASESession(chip::Controller::DeviceCommissioner * devCtrl, const char * setUpCode,
606604
chip::NodeId nodeid)
607605
{
608-
sPairingDelegate.SetExpectingPairingComplete(true);
609606
return ToPyChipError(devCtrl->EstablishPASEConnection(nodeid, setUpCode));
610607
}
611608

@@ -656,15 +653,17 @@ PyChipError pychip_DeviceController_DiscoverCommissionableNodesCommissioningEnab
656653
}
657654

658655
PyChipError pychip_ScriptDevicePairingDelegate_SetOpenWindowCompleteCallback(
659-
chip::Controller::DeviceCommissioner * devCtrl, chip::Controller::DevicePairingDelegate_OnWindowOpenCompleteFunct callback)
656+
chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
657+
chip::Controller::DevicePairingDelegate_OnWindowOpenCompleteFunct callback)
660658
{
661-
sPairingDelegate.SetCommissioningWindowOpenCallback(callback);
659+
pairingDelegate->SetCommissioningWindowOpenCallback(callback);
662660
return ToPyChipError(CHIP_NO_ERROR);
663661
}
664662

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)
663+
PyChipError pychip_DeviceController_OpenCommissioningWindow(chip::Controller::DeviceCommissioner * devCtrl,
664+
chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
665+
chip::NodeId nodeid, uint16_t timeout, uint32_t iteration,
666+
uint16_t discriminator, uint8_t optionInt)
668667
{
669668
const auto option = static_cast<Controller::CommissioningWindowOpener::CommissioningWindowOption>(optionInt);
670669
if (option == Controller::CommissioningWindowOpener::CommissioningWindowOption::kOriginalSetupCode)
@@ -680,40 +679,42 @@ PyChipError pychip_DeviceController_OpenCommissioningWindow(chip::Controller::De
680679
Platform::New<Controller::CommissioningWindowOpener>(static_cast<chip::Controller::DeviceController *>(devCtrl));
681680
PyChipError err = ToPyChipError(opener->OpenCommissioningWindow(nodeid, System::Clock::Seconds16(timeout), iteration,
682681
discriminator, NullOptional, NullOptional,
683-
sPairingDelegate.GetOpenWindowCallback(opener), payload));
682+
pairingDelegate->GetOpenWindowCallback(opener), payload));
684683
return err;
685684
}
686685

687686
return ToPyChipError(CHIP_ERROR_INVALID_ARGUMENT);
688687
}
689688

690689
PyChipError
691-
pychip_ScriptDevicePairingDelegate_SetKeyExchangeCallback(chip::Controller::DeviceCommissioner * devCtrl,
690+
pychip_ScriptDevicePairingDelegate_SetKeyExchangeCallback(chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
692691
chip::Controller::DevicePairingDelegate_OnPairingCompleteFunct callback)
693692
{
694-
sPairingDelegate.SetKeyExchangeCallback(callback);
693+
pairingDelegate->SetKeyExchangeCallback(callback);
695694
return ToPyChipError(CHIP_NO_ERROR);
696695
}
697696

698697
PyChipError pychip_ScriptDevicePairingDelegate_SetCommissioningCompleteCallback(
699-
chip::Controller::DeviceCommissioner * devCtrl, chip::Controller::DevicePairingDelegate_OnCommissioningCompleteFunct callback)
698+
chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
699+
chip::Controller::DevicePairingDelegate_OnCommissioningCompleteFunct callback)
700700
{
701-
sPairingDelegate.SetCommissioningCompleteCallback(callback);
701+
pairingDelegate->SetCommissioningCompleteCallback(callback);
702702
return ToPyChipError(CHIP_NO_ERROR);
703703
}
704704

705705
PyChipError pychip_ScriptDevicePairingDelegate_SetCommissioningStatusUpdateCallback(
706-
chip::Controller::DeviceCommissioner * devCtrl,
706+
chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
707707
chip::Controller::DevicePairingDelegate_OnCommissioningStatusUpdateFunct callback)
708708
{
709-
sPairingDelegate.SetCommissioningStatusUpdateCallback(callback);
709+
pairingDelegate->SetCommissioningStatusUpdateCallback(callback);
710710
return ToPyChipError(CHIP_NO_ERROR);
711711
}
712712

713713
PyChipError
714-
pychip_ScriptDevicePairingDelegate_SetFabricCheckCallback(chip::Controller::DevicePairingDelegate_OnFabricCheckFunct callback)
714+
pychip_ScriptDevicePairingDelegate_SetFabricCheckCallback(chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
715+
chip::Controller::DevicePairingDelegate_OnFabricCheckFunct callback)
715716
{
716-
sPairingDelegate.SetFabricCheckCallback(callback);
717+
pairingDelegate->SetFabricCheckCallback(callback);
717718
return ToPyChipError(CHIP_NO_ERROR);
718719
}
719720

src/controller/python/ChipDeviceController-ScriptDevicePairingDelegate.cpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,11 @@ void ScriptDevicePairingDelegate::OnStatusUpdate(DevicePairingDelegate::Status s
8080
break;
8181
case DevicePairingDelegate::Status::SecurePairingFailed:
8282
ChipLogError(Zcl, "Secure Pairing Failed");
83-
if (mOnPairingCompleteCallback != nullptr && expectingPairingComplete)
83+
if (mOnPairingCompleteCallback != nullptr)
8484
{
8585
// Incorrect state is the same error that chip-tool sends. We are also
8686
// leveraging the on pairing complete callback to indicate that pairing
8787
// has failed.
88-
expectingPairingComplete = false;
8988
mOnPairingCompleteCallback(ToPyChipError(CHIP_ERROR_INCORRECT_STATE));
9089
}
9190
break;
@@ -94,9 +93,8 @@ void ScriptDevicePairingDelegate::OnStatusUpdate(DevicePairingDelegate::Status s
9493

9594
void ScriptDevicePairingDelegate::OnPairingComplete(CHIP_ERROR error)
9695
{
97-
if (mOnPairingCompleteCallback != nullptr && expectingPairingComplete)
96+
if (mOnPairingCompleteCallback != nullptr)
9897
{
99-
expectingPairingComplete = false;
10098
mOnPairingCompleteCallback(ToPyChipError(error));
10199
}
102100
}

src/controller/python/ChipDeviceController-ScriptDevicePairingDelegate.h

-2
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ class ScriptDevicePairingDelegate final : public Controller::DevicePairingDelega
7272
Callback::Callback<Controller::OnOpenCommissioningWindow> *
7373
GetOpenWindowCallback(Controller::CommissioningWindowOpener * context);
7474
void OnOpenCommissioningWindow(NodeId deviceId, CHIP_ERROR status, SetupPayload payload);
75-
void SetExpectingPairingComplete(bool value) { expectingPairingComplete = value; }
7675

7776
private:
7877
DevicePairingDelegate_OnPairingCompleteFunct mOnPairingCompleteCallback = nullptr;
@@ -84,7 +83,6 @@ class ScriptDevicePairingDelegate final : public Controller::DevicePairingDelega
8483
DevicePairingDelegate_OnFabricCheckFunct mOnFabricCheckCallback = nullptr;
8584
Callback::Callback<Controller::OnOpenCommissioningWindow> mOpenWindowCallback;
8685
Controller::CommissioningWindowOpener * mWindowOpener = nullptr;
87-
bool expectingPairingComplete = false;
8886
};
8987

9088
} // namespace Controller

0 commit comments

Comments
 (0)