Skip to content

Commit cf49623

Browse files
committed
Do not reset state when commissionNode fail to allow retry
1 parent 96b3e07 commit cf49623

File tree

4 files changed

+29
-24
lines changed

4 files changed

+29
-24
lines changed

examples/fabric-bridge-app/linux/CommissionerControl.cpp

+25-11
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ namespace CommissionerControl {
4949
void CommissionerControlDelegate::ResetDelegateState()
5050
{
5151
// Reset the step to the initial state
52-
mNextStep = Step::kAcceptCommissioningApproval;
52+
mNextStep = Step::kIdle;
5353

5454
// Reset identifiers and product information
5555
mRequestId = 0;
@@ -71,7 +71,7 @@ void CommissionerControlDelegate::ResetDelegateState()
7171

7272
CHIP_ERROR CommissionerControlDelegate::HandleCommissioningApprovalRequest(const CommissioningApprovalRequest & request)
7373
{
74-
VerifyOrReturnError(mNextStep == Step::kAcceptCommissioningApproval, CHIP_ERROR_BUSY);
74+
VerifyOrReturnError(mNextStep == Step::kIdle, CHIP_ERROR_INCORRECT_STATE);
7575

7676
CommissionerControl::Events::CommissioningRequestResult::Type result;
7777
result.requestId = request.requestId;
@@ -113,7 +113,14 @@ CHIP_ERROR CommissionerControlDelegate::HandleCommissioningApprovalRequest(const
113113

114114
CHIP_ERROR err = CommissionerControlServer::Instance().GenerateCommissioningRequestResultEvent(result);
115115

116-
mNextStep = (err == CHIP_NO_ERROR) ? Step::kWaitCommissionNodeRequest : Step::kAcceptCommissioningApproval;
116+
if (err == CHIP_NO_ERROR)
117+
{
118+
mNextStep = Step::kWaitCommissionNodeRequest;
119+
}
120+
else
121+
{
122+
ResetDelegateState();
123+
}
117124

118125
return err;
119126
}
@@ -162,22 +169,29 @@ CHIP_ERROR CommissionerControlDelegate::GetCommissioningWindowParams(Commissioni
162169
CHIP_ERROR CommissionerControlDelegate::HandleCommissionNode(const CommissioningWindowParams & params,
163170
const Optional<ByteSpan> & ipAddress, const Optional<uint16_t> & port)
164171
{
172+
CHIP_ERROR err = CHIP_NO_ERROR;
173+
165174
ChipLogProgress(NotSpecified, "CommissionerControlDelegate::HandleCommissionNode");
166175

167176
VerifyOrReturnError(mNextStep == Step::kStartCommissionNode, CHIP_ERROR_INCORRECT_STATE);
168177

169178
#if defined(PW_RPC_FABRIC_BRIDGE_SERVICE) && PW_RPC_FABRIC_BRIDGE_SERVICE
170-
return CommissionNode(Controller::CommissioningWindowPasscodeParams()
171-
.SetSetupPIN(kSetupPinCode)
172-
.SetTimeout(params.commissioningTimeout)
173-
.SetDiscriminator(params.discriminator)
174-
.SetIteration(params.iterations)
175-
.SetSalt(params.salt),
176-
mVendorId, mProductId);
179+
err = CommissionNode(Controller::CommissioningWindowPasscodeParams()
180+
.SetSetupPIN(kSetupPinCode)
181+
.SetTimeout(params.commissioningTimeout)
182+
.SetDiscriminator(params.discriminator)
183+
.SetIteration(params.iterations)
184+
.SetSalt(params.salt),
185+
mVendorId, mProductId);
177186
#else
178187
ChipLogProgress(NotSpecified, "Failed to reverse commission bridge: PW_RPC_FABRIC_BRIDGE_SERVICE not defined");
179-
return CHIP_ERROR_NOT_IMPLEMENTED;
188+
err = CHIP_ERROR_NOT_IMPLEMENTED;
180189
#endif // defined(PW_RPC_FABRIC_BRIDGE_SERVICE) && PW_RPC_FABRIC_BRIDGE_SERVICE
190+
191+
// Reset the delegate's state to prepare for a new commissioning sequence.
192+
ResetDelegateState();
193+
194+
return err;
181195
}
182196

183197
} // namespace CommissionerControl

examples/fabric-bridge-app/linux/include/CommissionerControl.h

+4-3
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ namespace CommissionerControl {
2929
class CommissionerControlDelegate : public Delegate
3030
{
3131
public:
32-
void ResetDelegateState() override;
3332
CHIP_ERROR HandleCommissioningApprovalRequest(const CommissioningApprovalRequest & request) override;
3433
CHIP_ERROR ValidateCommissionNodeCommand(NodeId clientNodeId, uint64_t requestId) override;
3534
CHIP_ERROR GetCommissioningWindowParams(CommissioningWindowParams & outParams) override;
@@ -42,16 +41,18 @@ class CommissionerControlDelegate : public Delegate
4241
enum class Step : uint8_t
4342
{
4443
// Ready to start reverse commissioning.
45-
kAcceptCommissioningApproval,
44+
kIdle,
4645
// Wait for the commission node command.
4746
kWaitCommissionNodeRequest,
4847
// Need to commission node.
4948
kStartCommissionNode,
5049
};
5150

51+
void ResetDelegateState();
52+
5253
static constexpr size_t kLabelBufferSize = 64;
5354

54-
Step mNextStep = Step::kAcceptCommissioningApproval;
55+
Step mNextStep = Step::kIdle;
5556
uint64_t mRequestId = 0;
5657
NodeId mClientNodeId = kUndefinedNodeId;
5758
VendorId mVendorId = VendorId::Unspecified;

src/app/clusters/commissioner-control-server/commissioner-control-server.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,6 @@ bool emberAfCommissionerControlClusterCommissionNodeCallback(
265265
{
266266
ChipLogError(Zcl, "emberAfCommissionerControlClusterCommissionNodeCallback error: %" CHIP_ERROR_FORMAT, err.Format());
267267
commandObj->AddStatus(commandPath, StatusIB(err).mStatus);
268-
delegate->ResetDelegateState();
269268
}
270269

271270
return true;

src/app/clusters/commissioner-control-server/commissioner-control-server.h

-9
Original file line numberDiff line numberDiff line change
@@ -137,15 +137,6 @@ class Delegate
137137
virtual CHIP_ERROR HandleCommissionNode(const CommissioningWindowParams & params, const Optional<ByteSpan> & ipAddress,
138138
const Optional<uint16_t> & port) = 0;
139139

140-
/**
141-
* @brief Reset the state of the delegate.
142-
*
143-
* This method is used to reset the internal state of the delegate to its initial state.
144-
* It should be called whenever the delegate needs to be reinitialized or cleaned up
145-
* before handling a new commissioning sequence.
146-
*/
147-
virtual void ResetDelegateState() = 0;
148-
149140
virtual ~Delegate() = default;
150141
};
151142

0 commit comments

Comments
 (0)