Skip to content

Commit 1444940

Browse files
wgtdkprestyled-commits
authored andcommitted
[chip-tool] fix Thread operational dataset (#6627)
* [chip-tool] fix Thread operational dataset * Restyled by whitespace * Restyled by clang-format * resolve comments Co-authored-by: Restyled.io <[email protected]>
1 parent e8304ee commit 1444940

File tree

3 files changed

+44
-17
lines changed

3 files changed

+44
-17
lines changed

examples/chip-tool/commands/clusters/Commands.h

+19-8
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
#include "gen/CHIPClientCallbacks.h"
2626
#include "gen/CHIPClusters.h"
2727
#include <lib/core/CHIPSafeCasts.h>
28+
#include <lib/support/CHIPArgParser.hpp>
29+
#include <lib/support/ThreadOperationalDataset.h>
2830

2931
static void OnDefaultSuccessResponse(void * context)
3032
{
@@ -9829,7 +9831,7 @@ class NetworkCommissioningAddThreadNetwork : public ModelCommand
98299831
public:
98309832
NetworkCommissioningAddThreadNetwork() : ModelCommand("add-thread-network")
98319833
{
9832-
AddArgument("operationalDataset", &mOperationalDataset);
9834+
AddArgument("operationalDataset", &mThreadOpDatasetArg);
98339835
AddArgument("breadcrumb", 0, UINT64_MAX, &mBreadcrumb);
98349836
AddArgument("timeoutMs", 0, UINT32_MAX, &mTimeoutMs);
98359837
ModelCommand::AddArguments();
@@ -9842,13 +9844,18 @@ class NetworkCommissioningAddThreadNetwork : public ModelCommand
98429844

98439845
CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
98449846
{
9847+
uint8_t opDataset[chip::Thread::kSizeOperationalDataset];
9848+
uint32_t opDatasetLen;
9849+
98459850
ChipLogProgress(chipTool, "Sending cluster (0x0031) command (0x06) on endpoint %" PRIu16, endpointId);
98469851

9852+
chip::ArgParser::ParseHexString(mThreadOpDatasetArg, static_cast<uint32_t>(strlen(mThreadOpDatasetArg)), opDataset,
9853+
static_cast<uint32_t>(sizeof(opDataset)), opDatasetLen);
9854+
98479855
chip::Controller::NetworkCommissioningCluster cluster;
98489856
cluster.Associate(device, endpointId);
98499857
return cluster.AddThreadNetwork(onSuccessCallback->Cancel(), onFailureCallback->Cancel(),
9850-
chip::ByteSpan(chip::Uint8::from_char(mOperationalDataset), strlen(mOperationalDataset)),
9851-
mBreadcrumb, mTimeoutMs);
9858+
chip::ByteSpan(opDataset, opDatasetLen), mBreadcrumb, mTimeoutMs);
98529859
}
98539860

98549861
private:
@@ -9857,7 +9864,7 @@ class NetworkCommissioningAddThreadNetwork : public ModelCommand
98579864
OnNetworkCommissioningClusterAddThreadNetworkResponse, this);
98589865
chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
98599866
new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
9860-
char * mOperationalDataset;
9867+
char * mThreadOpDatasetArg;
98619868
uint64_t mBreadcrumb;
98629869
uint32_t mTimeoutMs;
98639870
};
@@ -10110,7 +10117,7 @@ class NetworkCommissioningUpdateThreadNetwork : public ModelCommand
1011010117
public:
1011110118
NetworkCommissioningUpdateThreadNetwork() : ModelCommand("update-thread-network")
1011210119
{
10113-
AddArgument("operationalDataset", &mOperationalDataset);
10120+
AddArgument("operationalDataset", &mThreadOpDatasetArg);
1011410121
AddArgument("breadcrumb", 0, UINT64_MAX, &mBreadcrumb);
1011510122
AddArgument("timeoutMs", 0, UINT32_MAX, &mTimeoutMs);
1011610123
ModelCommand::AddArguments();
@@ -10123,13 +10130,17 @@ class NetworkCommissioningUpdateThreadNetwork : public ModelCommand
1012310130

1012410131
CHIP_ERROR SendCommand(ChipDevice * device, uint8_t endpointId) override
1012510132
{
10133+
uint8_t opDataset[chip::Thread::kSizeOperationalDataset];
10134+
uint32_t opDatasetLen;
10135+
1012610136
ChipLogProgress(chipTool, "Sending cluster (0x0031) command (0x08) on endpoint %" PRIu16, endpointId);
1012710137

1012810138
chip::Controller::NetworkCommissioningCluster cluster;
1012910139
cluster.Associate(device, endpointId);
10140+
chip::ArgParser::ParseHexString(mThreadOpDatasetArg, static_cast<uint32_t>(strlen(mThreadOpDatasetArg)), opDataset,
10141+
static_cast<uint32_t>(sizeof(opDataset)), opDatasetLen);
1013010142
return cluster.UpdateThreadNetwork(onSuccessCallback->Cancel(), onFailureCallback->Cancel(),
10131-
chip::ByteSpan(chip::Uint8::from_char(mOperationalDataset), strlen(mOperationalDataset)),
10132-
mBreadcrumb, mTimeoutMs);
10143+
chip::ByteSpan(opDataset, opDatasetLen), mBreadcrumb, mTimeoutMs);
1013310144
}
1013410145

1013510146
private:
@@ -10138,7 +10149,7 @@ class NetworkCommissioningUpdateThreadNetwork : public ModelCommand
1013810149
OnNetworkCommissioningClusterUpdateThreadNetworkResponse, this);
1013910150
chip::Callback::Callback<DefaultFailureCallback> * onFailureCallback =
1014010151
new chip::Callback::Callback<DefaultFailureCallback>(OnDefaultFailureResponse, this);
10141-
char * mOperationalDataset;
10152+
char * mThreadOpDatasetArg;
1014210153
uint64_t mBreadcrumb;
1014310154
uint32_t mTimeoutMs;
1014410155
};

examples/chip-tool/commands/pairing/PairingCommand.cpp

+21-7
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@
1919
#include "PairingCommand.h"
2020
#include "gen/enums.h"
2121
#include <lib/core/CHIPSafeCasts.h>
22+
#include <lib/support/CHIPArgParser.hpp>
2223

2324
using namespace ::chip;
2425

25-
constexpr uint16_t kWaitDurationInSeconds = 120;
26-
constexpr uint64_t kBreadcrumb = 0;
27-
constexpr uint32_t kTimeoutMs = 6000;
28-
constexpr uint8_t kTemporaryThreadNetworkId[] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };
26+
constexpr uint16_t kWaitDurationInSeconds = 120;
27+
constexpr uint64_t kBreadcrumb = 0;
28+
constexpr uint32_t kTimeoutMs = 6000;
2929

3030
CHIP_ERROR PairingCommand::Run(PersistentStorage & storage, NodeId localId, NodeId remoteId)
3131
{
@@ -206,11 +206,22 @@ CHIP_ERROR PairingCommand::AddNetwork(PairingNetworkType networkType)
206206

207207
CHIP_ERROR PairingCommand::AddThreadNetwork()
208208
{
209+
CHIP_ERROR error;
210+
uint8_t opDataset[chip::Thread::kSizeOperationalDataset];
211+
uint32_t opDatasetLen;
212+
209213
Callback::Cancelable * successCallback = mOnAddThreadNetworkCallback->Cancel();
210214
Callback::Cancelable * failureCallback = mOnFailureCallback->Cancel();
211-
ByteSpan operationalDataset = ByteSpan(Uint8::from_char(mOperationalDataset), strlen(mOperationalDataset));
212215

213-
return mCluster.AddThreadNetwork(successCallback, failureCallback, operationalDataset, kBreadcrumb, kTimeoutMs);
216+
chip::ArgParser::ParseHexString(mThreadOpDatasetArg, static_cast<uint32_t>(strlen(mThreadOpDatasetArg)), opDataset,
217+
static_cast<uint32_t>(sizeof(opDataset)), opDatasetLen);
218+
error = mThreadOpDataset.Init(ByteSpan(opDataset, opDatasetLen));
219+
if (error != CHIP_NO_ERROR)
220+
{
221+
return error;
222+
}
223+
224+
return mCluster.AddThreadNetwork(successCallback, failureCallback, mThreadOpDataset.AsByteSpan(), kBreadcrumb, kTimeoutMs);
214225
}
215226

216227
CHIP_ERROR PairingCommand::AddWiFiNetwork()
@@ -235,7 +246,10 @@ CHIP_ERROR PairingCommand::EnableNetwork()
235246
}
236247
else
237248
{
238-
networkId = ByteSpan(kTemporaryThreadNetworkId, sizeof(kTemporaryThreadNetworkId));
249+
uint8_t extendedPanId[chip::Thread::kSizeExtendedPanId];
250+
251+
mThreadOpDataset.GetExtendedPanId(extendedPanId);
252+
networkId = ByteSpan(extendedPanId, sizeof(extendedPanId));
239253
}
240254

241255
return mCluster.EnableNetwork(successCallback, failureCallback, networkId, kBreadcrumb, kTimeoutMs);

examples/chip-tool/commands/pairing/PairingCommand.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "../common/Command.h"
2323
#include "gen/CHIPClientCallbacks.h"
2424
#include "gen/CHIPClusters.h"
25+
#include <lib/support/ThreadOperationalDataset.h>
2526

2627
#include <controller/ExampleOperationalCredentialsIssuer.h>
2728

@@ -61,7 +62,7 @@ class PairingCommand : public Command,
6162
AddArgument("password", &mPassword);
6263
break;
6364
case PairingNetworkType::Thread:
64-
AddArgument("operationalDataset", &mOperationalDataset);
65+
AddArgument("operationalDataset", &mThreadOpDatasetArg);
6566
break;
6667
}
6768

@@ -135,7 +136,8 @@ class PairingCommand : public Command,
135136
uint64_t mFabricId;
136137
uint16_t mDiscriminator;
137138
uint32_t mSetupPINCode;
138-
char * mOperationalDataset;
139+
char * mThreadOpDatasetArg;
140+
chip::Thread::OperationalDataset mThreadOpDataset;
139141
char * mSSID;
140142
char * mPassword;
141143

0 commit comments

Comments
 (0)