Skip to content

Commit

Permalink
Fix merge issues in CHIPDeviceCommissioner. (#14579)
Browse files Browse the repository at this point in the history
A combination of changes to the state machine, changes to require timed interactions for opening commissioning windows and PR 13371 landed, and the merge does not compile.

Specific fixes:

1. Pass a timed invoke timeout when opening commissioning windows.

2. Restore the endpoint and command timeout bits for those commands
   that used to have them.  This is a different timeout, not a timed
   invoke timeout.
  • Loading branch information
bzbarsky-apple authored Jan 29, 2022
1 parent a117d85 commit 43a1e1a
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 26 deletions.
27 changes: 16 additions & 11 deletions src/controller/CHIPDeviceController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -534,8 +534,10 @@ CHIP_ERROR DeviceController::OpenCommissioningWindowInternal()
request.salt = salt;
request.passcodeID = mPAKEVerifierID++;

ReturnErrorOnFailure(
cluster.InvokeCommand(request, this, OnOpenPairingWindowSuccessResponse, OnOpenPairingWindowFailureResponse));
// TODO: What should the timed invoke timeout here be?
uint16_t timedInvokeTimeoutMs = 10000;
ReturnErrorOnFailure(cluster.InvokeCommand(request, this, OnOpenPairingWindowSuccessResponse,
OnOpenPairingWindowFailureResponse, MakeOptional(timedInvokeTimeoutMs)));

char payloadBuffer[QRCodeBasicSetupPayloadGenerator::kMaxQRCodeBase38RepresentationLength];

Expand All @@ -551,8 +553,10 @@ CHIP_ERROR DeviceController::OpenCommissioningWindowInternal()
{
AdministratorCommissioning::Commands::OpenBasicCommissioningWindow::Type request;
request.commissioningTimeout = mCommissioningWindowTimeout;
ReturnErrorOnFailure(
cluster.InvokeCommand(request, this, OnOpenPairingWindowSuccessResponse, OnOpenPairingWindowFailureResponse));
// TODO: What should the timed invoke timeout here be?
uint16_t timedInvokeTimeoutMs = 10000;
ReturnErrorOnFailure(cluster.InvokeCommand(request, this, OnOpenPairingWindowSuccessResponse,
OnOpenPairingWindowFailureResponse, MakeOptional(timedInvokeTimeoutMs)));
}

return CHIP_NO_ERROR;
Expand Down Expand Up @@ -1668,7 +1672,7 @@ void DeviceCommissioner::PerformCommissioningStep(DeviceProxy * proxy, Commissio
request.expiryLengthSeconds = params.GetFailsafeTimerSeconds();
request.breadcrumb = breadcrumb;
request.timeoutMs = kCommandTimeoutMs;
SendCommand<GeneralCommissioningCluster>(proxy, request, OnArmFailSafe, OnBasicFailure, timeout);
SendCommand<GeneralCommissioningCluster>(proxy, request, OnArmFailSafe, OnBasicFailure, endpoint, timeout);
}
break;
case CommissioningStage::kGetNetworkTechnology: {
Expand Down Expand Up @@ -1721,7 +1725,7 @@ void DeviceCommissioner::PerformCommissioningStep(DeviceProxy * proxy, Commissio
request.countryCode = countryCode;
request.breadcrumb = breadcrumb;
request.timeoutMs = kCommandTimeoutMs;
SendCommand<GeneralCommissioningCluster>(proxy, request, OnSetRegulatoryConfigResponse, OnBasicFailure, timeout);
SendCommand<GeneralCommissioningCluster>(proxy, request, OnSetRegulatoryConfigResponse, OnBasicFailure, endpoint, timeout);
}
break;
case CommissioningStage::kSendPAICertificateRequest:
Expand Down Expand Up @@ -1846,7 +1850,7 @@ void DeviceCommissioner::PerformCommissioningStep(DeviceProxy * proxy, Commissio
request.ssid = params.GetWiFiCredentials().Value().ssid;
request.credentials = params.GetWiFiCredentials().Value().credentials;
request.breadcrumb = breadcrumb;
SendCommand<NetworkCommissioningCluster>(proxy, request, OnNetworkConfigResponse, OnBasicFailure);
SendCommand<NetworkCommissioningCluster>(proxy, request, OnNetworkConfigResponse, OnBasicFailure, endpoint, timeout);
}
break;
case CommissioningStage::kThreadNetworkSetup: {
Expand All @@ -1860,7 +1864,7 @@ void DeviceCommissioner::PerformCommissioningStep(DeviceProxy * proxy, Commissio
NetworkCommissioning::Commands::AddOrUpdateThreadNetwork::Type request;
request.operationalDataset = params.GetThreadOperationalDataset().Value();
request.breadcrumb = breadcrumb;
SendCommand<NetworkCommissioningCluster>(proxy, request, OnNetworkConfigResponse, OnBasicFailure);
SendCommand<NetworkCommissioningCluster>(proxy, request, OnNetworkConfigResponse, OnBasicFailure, endpoint, timeout);
}
break;
case CommissioningStage::kWiFiNetworkEnable: {
Expand All @@ -1874,7 +1878,7 @@ void DeviceCommissioner::PerformCommissioningStep(DeviceProxy * proxy, Commissio
NetworkCommissioning::Commands::ConnectNetwork::Type request;
request.networkID = params.GetWiFiCredentials().Value().ssid;
request.breadcrumb = breadcrumb;
SendCommand<NetworkCommissioningCluster>(proxy, request, OnConnectNetworkResponse, OnBasicFailure);
SendCommand<NetworkCommissioningCluster>(proxy, request, OnConnectNetworkResponse, OnBasicFailure, endpoint, timeout);
}
break;
case CommissioningStage::kThreadNetworkEnable: {
Expand All @@ -1892,7 +1896,7 @@ void DeviceCommissioner::PerformCommissioningStep(DeviceProxy * proxy, Commissio
NetworkCommissioning::Commands::ConnectNetwork::Type request;
request.networkID = extendedPanId;
request.breadcrumb = breadcrumb;
SendCommand<NetworkCommissioningCluster>(proxy, request, OnConnectNetworkResponse, OnBasicFailure);
SendCommand<NetworkCommissioningCluster>(proxy, request, OnConnectNetworkResponse, OnBasicFailure, endpoint, timeout);
}
break;
case CommissioningStage::kFindOperational: {
Expand All @@ -1908,7 +1912,8 @@ void DeviceCommissioner::PerformCommissioningStep(DeviceProxy * proxy, Commissio
case CommissioningStage::kSendComplete: {
ChipLogProgress(Controller, "Calling commissioning complete");
GeneralCommissioning::Commands::CommissioningComplete::Type request;
SendCommand<NetworkCommissioningCluster>(proxy, request, OnCommissioningCompleteResponse, OnBasicFailure, timeout);
SendCommand<NetworkCommissioningCluster>(proxy, request, OnCommissioningCompleteResponse, OnBasicFailure, endpoint,
timeout);
}
break;
case CommissioningStage::kCleanup:
Expand Down
21 changes: 6 additions & 15 deletions src/controller/CHIPDeviceController.h
Original file line number Diff line number Diff line change
Expand Up @@ -831,30 +831,21 @@ class DLL_EXPORT DeviceCommissioner : public DeviceController,
void ReleaseCommissioneeDevice(CommissioneeDeviceProxy * device);

template <typename ClusterObjectT, typename RequestObjectT>
CHIP_ERROR SendCommand(DeviceProxy * device, RequestObjectT request,
CHIP_ERROR SendCommand(DeviceProxy * device, const RequestObjectT & request,
CommandResponseSuccessCallback<typename RequestObjectT::ResponseType> successCb,
CommandResponseFailureCallback failureCb)
{
ClusterObjectT cluster;
cluster.Associate(device, 0);

return cluster.InvokeCommand(request, this, successCb, failureCb);
return SendCommand<ClusterObjectT>(device, request, successCb, failureCb, 0, NullOptional);
}

template <typename ClusterObjectT, typename RequestObjectT>
CHIP_ERROR SendCommand(DeviceProxy * device, RequestObjectT request,
CHIP_ERROR SendCommand(DeviceProxy * device, const RequestObjectT & request,
CommandResponseSuccessCallback<typename RequestObjectT::ResponseType> successCb,
CommandResponseFailureCallback failureCb, chip::Optional<chip::System::Clock::Timeout> timeout)
CommandResponseFailureCallback failureCb, EndpointId endpoint, Optional<System::Clock::Timeout> timeout)
{
ClusterObjectT cluster;
cluster.Associate(device, 0);

if (timeout.HasValue())
{
VerifyOrReturnError(chip::CanCastTo<uint16_t>(timeout.Value().count()), CHIP_ERROR_INVALID_ARGUMENT);
chip::Optional<uint16_t> timedInvokeRequestTimeoutInMs(static_cast<uint16_t>(timeout.Value().count()));
return cluster.InvokeCommand(request, this, successCb, failureCb, timedInvokeRequestTimeoutInMs);
}
cluster.Associate(device, endpoint);
cluster.SetCommandTimeout(timeout);

return cluster.InvokeCommand(request, this, successCb, failureCb);
}
Expand Down

0 comments on commit 43a1e1a

Please sign in to comment.