Skip to content

Commit 43c3a55

Browse files
committed
restore the original pairingcomplete callback logic
1 parent 6d04d69 commit 43c3a55

4 files changed

+36
-2
lines changed

src/controller/python/ChipDeviceController-ScriptBinding.cpp

+14
Original file line numberDiff line numberDiff line change
@@ -194,13 +194,19 @@ PyChipError pychip_ScriptDevicePairingDelegate_SetCommissioningCompleteCallback(
194194
PyChipError pychip_ScriptDevicePairingDelegate_SetCommissioningStatusUpdateCallback(
195195
chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
196196
chip::Controller::DevicePairingDelegate_OnCommissioningStatusUpdateFunct callback);
197+
197198
PyChipError
198199
pychip_ScriptDevicePairingDelegate_SetFabricCheckCallback(chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
199200
chip::Controller::DevicePairingDelegate_OnFabricCheckFunct callback);
201+
200202
PyChipError pychip_ScriptDevicePairingDelegate_SetOpenWindowCompleteCallback(
201203
chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
202204
chip::Controller::DevicePairingDelegate_OnWindowOpenCompleteFunct callback);
203205

206+
PyChipError
207+
pychip_ScriptDevicePairingDelegate_SetExpectingPairingComplete(chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
208+
bool value);
209+
204210
// BLE
205211
PyChipError pychip_DeviceCommissioner_CloseBleConnection(chip::Controller::DeviceCommissioner * devCtrl);
206212

@@ -718,6 +724,14 @@ pychip_ScriptDevicePairingDelegate_SetFabricCheckCallback(chip::Controller::Scri
718724
return ToPyChipError(CHIP_NO_ERROR);
719725
}
720726

727+
PyChipError
728+
pychip_ScriptDevicePairingDelegate_SetExpectingPairingComplete(chip::Controller::ScriptDevicePairingDelegate * pairingDelegate,
729+
bool value)
730+
{
731+
pairingDelegate->SetExpectingPairingComplete(value);
732+
return ToPyChipError(CHIP_NO_ERROR);
733+
}
734+
721735
const char * pychip_Stack_ErrorToString(ChipError::StorageType err)
722736
{
723737
return chip::ErrorStr(CHIP_ERROR(err));

src/controller/python/ChipDeviceController-ScriptDevicePairingDelegate.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,12 @@ void ScriptDevicePairingDelegate::OnStatusUpdate(DevicePairingDelegate::Status s
8080
break;
8181
case DevicePairingDelegate::Status::SecurePairingFailed:
8282
ChipLogError(Zcl, "Secure Pairing Failed");
83-
if (mOnPairingCompleteCallback != nullptr)
83+
if (mOnPairingCompleteCallback != nullptr && expectingPairingComplete)
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;
8889
mOnPairingCompleteCallback(ToPyChipError(CHIP_ERROR_INCORRECT_STATE));
8990
}
9091
break;
@@ -93,8 +94,9 @@ void ScriptDevicePairingDelegate::OnStatusUpdate(DevicePairingDelegate::Status s
9394

9495
void ScriptDevicePairingDelegate::OnPairingComplete(CHIP_ERROR error)
9596
{
96-
if (mOnPairingCompleteCallback != nullptr)
97+
if (mOnPairingCompleteCallback != nullptr && expectingPairingComplete)
9798
{
99+
expectingPairingComplete = false;
98100
mOnPairingCompleteCallback(ToPyChipError(error));
99101
}
100102
}

src/controller/python/ChipDeviceController-ScriptDevicePairingDelegate.h

+2
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ 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; }
7576

7677
private:
7778
DevicePairingDelegate_OnPairingCompleteFunct mOnPairingCompleteCallback = nullptr;
@@ -83,6 +84,7 @@ class ScriptDevicePairingDelegate final : public Controller::DevicePairingDelega
8384
DevicePairingDelegate_OnFabricCheckFunct mOnFabricCheckCallback = nullptr;
8485
Callback::Callback<Controller::OnOpenCommissioningWindow> mOpenWindowCallback;
8586
Controller::CommissioningWindowOpener * mWindowOpener = nullptr;
87+
bool expectingPairingComplete = false;
8688
};
8789

8890
} // namespace Controller

src/controller/python/chip/ChipDeviceCtrl.py

+16
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,11 @@ def _finish_init(self):
357357

358358
ChipDeviceController.activeList.add(self)
359359

360+
def _enablePairingCompeleteCallback(self, value: bool):
361+
self._ChipStack.Call(
362+
lambda: self._dmLib.pychip_ScriptDevicePairingDelegate_SetExpectingPairingComplete(self.pairingDelegate, value)
363+
).raise_on_error()
364+
360365
@property
361366
def fabricAdmin(self) -> FabricAdmin.FabricAdmin:
362367
return self._fabricAdmin
@@ -440,6 +445,7 @@ def ConnectBLE(self, discriminator, setupPinCode, nodeid) -> PyChipError:
440445
self._ChipStack.commissioningCompleteEvent.clear()
441446

442447
self.state = DCState.COMMISSIONING
448+
self._enablePairingCompeleteCallback(True)
443449
self._ChipStack.CallAsync(
444450
lambda: self._dmLib.pychip_DeviceController_ConnectBLE(
445451
self.devCtrl, discriminator, setupPinCode, nodeid)
@@ -490,6 +496,7 @@ def EstablishPASESessionBLE(self, setupPinCode: int, discriminator: int, nodeid:
490496
self.CheckIsActive()
491497

492498
self.state = DCState.RENDEZVOUS_ONGOING
499+
self._enablePairingCompeleteCallback(True)
493500
return self._ChipStack.CallAsync(
494501
lambda: self._dmLib.pychip_DeviceController_EstablishPASESessionBLE(
495502
self.devCtrl, setupPinCode, discriminator, nodeid)
@@ -499,6 +506,7 @@ def EstablishPASESessionIP(self, ipaddr: str, setupPinCode: int, nodeid: int, po
499506
self.CheckIsActive()
500507

501508
self.state = DCState.RENDEZVOUS_ONGOING
509+
self._enablePairingCompeleteCallback(True)
502510
return self._ChipStack.CallAsync(
503511
lambda: self._dmLib.pychip_DeviceController_EstablishPASESessionIP(
504512
self.devCtrl, ipaddr.encode("utf-8"), setupPinCode, nodeid, port)
@@ -508,6 +516,7 @@ def EstablishPASESession(self, setUpCode: str, nodeid: int):
508516
self.CheckIsActive()
509517

510518
self.state = DCState.RENDEZVOUS_ONGOING
519+
self._enablePairingCompeleteCallback(True)
511520
return self._ChipStack.CallAsync(
512521
lambda: self._dmLib.pychip_DeviceController_EstablishPASESession(
513522
self.devCtrl, setUpCode.encode("utf-8"), nodeid)
@@ -1659,6 +1668,10 @@ def _InitLib(self):
16591668
c_void_p, _DevicePairingDelegate_OnFabricCheckFunct]
16601669
self._dmLib.pychip_ScriptDevicePairingDelegate_SetFabricCheckCallback.restype = PyChipError
16611670

1671+
self._dmLib.pychip_ScriptDevicePairingDelegate_SetExpectingPairingComplete.argtypes = [
1672+
c_void_p, c_bool]
1673+
self._dmLib.pychip_ScriptDevicePairingDelegate_SetExpectingPairingComplete.restype = PyChipError
1674+
16621675
self._dmLib.pychip_GetConnectedDeviceByNodeId.argtypes = [
16631676
c_void_p, c_uint64, py_object, _DeviceAvailableCallbackFunct]
16641677
self._dmLib.pychip_GetConnectedDeviceByNodeId.restype = PyChipError
@@ -1930,6 +1943,7 @@ def CommissionOnNetwork(self, nodeId: int, setupPinCode: int,
19301943

19311944
self._ChipStack.commissioningCompleteEvent.clear()
19321945

1946+
self._enablePairingCompeleteCallback(True)
19331947
self._ChipStack.CallAsync(
19341948
lambda: self._dmLib.pychip_DeviceController_OnNetworkCommission(
19351949
self.devCtrl, self.pairingDelegate, nodeId, setupPinCode, int(filterType), str(filter).encode("utf-8") + b"\x00" if filter is not None else None, discoveryTimeoutMsec)
@@ -1953,6 +1967,7 @@ def CommissionWithCode(self, setupPayload: str, nodeid: int, discoveryType: Disc
19531967

19541968
self._ChipStack.commissioningCompleteEvent.clear()
19551969

1970+
self._enablePairingCompeleteCallback(True)
19561971
self._ChipStack.CallAsync(
19571972
lambda: self._dmLib.pychip_DeviceController_ConnectWithCode(
19581973
self.devCtrl, setupPayload, nodeid, discoveryType.value)
@@ -1972,6 +1987,7 @@ def CommissionIP(self, ipaddr: str, setupPinCode: int, nodeid: int) -> PyChipErr
19721987

19731988
self._ChipStack.commissioningCompleteEvent.clear()
19741989

1990+
self._enablePairingCompeleteCallback(True)
19751991
self._ChipStack.CallAsync(
19761992
lambda: self._dmLib.pychip_DeviceController_ConnectIP(
19771993
self.devCtrl, ipaddr.encode("utf-8"), setupPinCode, nodeid)

0 commit comments

Comments
 (0)