Skip to content

Commit 897fcb9

Browse files
committed
Merge remote-tracking branch 'upstream/master' into bump_CI_images
2 parents 537fdab + 0460715 commit 897fcb9

27 files changed

+662
-240
lines changed

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

+9
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,14 @@ class PairCodeThread : public PairingCommand
6969
{}
7070
};
7171

72+
class PairCodeWiFiThread : public PairingCommand
73+
{
74+
public:
75+
PairCodeWiFiThread(CredentialIssuerCommands * credsIssuerConfig) :
76+
PairingCommand("code-wifi-thread", PairingMode::Code, PairingNetworkType::WiFiOrThread, credsIssuerConfig)
77+
{}
78+
};
79+
7280
class PairOnNetwork : public PairingCommand
7381
{
7482
public:
@@ -231,6 +239,7 @@ void registerCommandsPairing(Commands & commands, CredentialIssuerCommands * cre
231239
make_unique<PairCodePase>(credsIssuerConfig),
232240
make_unique<PairCodeWifi>(credsIssuerConfig),
233241
make_unique<PairCodeThread>(credsIssuerConfig),
242+
make_unique<PairCodeWiFiThread>(credsIssuerConfig),
234243
make_unique<PairBleWiFi>(credsIssuerConfig),
235244
make_unique<PairBleThread>(credsIssuerConfig),
236245
make_unique<PairSoftAP>(credsIssuerConfig),

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

+18-3
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,10 @@ CommissioningParameters PairingCommand::GetCommissioningParameters()
111111
case PairingNetworkType::Thread:
112112
params.SetThreadOperationalDataset(mOperationalDataset);
113113
break;
114+
case PairingNetworkType::WiFiOrThread:
115+
params.SetWiFiCredentials(Controller::WiFiCredentials(mSSID, mPassword));
116+
params.SetThreadOperationalDataset(mOperationalDataset);
117+
break;
114118
case PairingNetworkType::None:
115119
break;
116120
}
@@ -212,7 +216,12 @@ CHIP_ERROR PairingCommand::PairWithCode(NodeId remoteId)
212216

213217
CHIP_ERROR PairingCommand::Pair(NodeId remoteId, PeerAddress address)
214218
{
215-
auto params = RendezvousParameters().SetSetupPINCode(mSetupPINCode).SetDiscriminator(mDiscriminator).SetPeerAddress(address);
219+
VerifyOrDieWithMsg(mSetupPINCode.has_value(), chipTool, "Using mSetupPINCode in a mode when we have not gotten one");
220+
auto params = RendezvousParameters().SetSetupPINCode(mSetupPINCode.value()).SetPeerAddress(address);
221+
if (mDiscriminator.has_value())
222+
{
223+
params.SetDiscriminator(mDiscriminator.value());
224+
}
216225

217226
CHIP_ERROR err = CHIP_NO_ERROR;
218227
if (mPaseOnly.ValueOr(false))
@@ -232,9 +241,11 @@ CHIP_ERROR PairingCommand::PairWithMdnsOrBleByIndex(NodeId remoteId, uint16_t in
232241
#if CHIP_DEVICE_LAYER_TARGET_DARWIN
233242
VerifyOrReturnError(IsInteractive(), CHIP_ERROR_INCORRECT_STATE);
234243

244+
VerifyOrDieWithMsg(mSetupPINCode.has_value(), chipTool, "Using mSetupPINCode in a mode when we have not gotten one");
245+
235246
RendezvousParameters params;
236247
ReturnErrorOnFailure(GetDeviceScanner().Get(index, params));
237-
params.SetSetupPINCode(mSetupPINCode);
248+
params.SetSetupPINCode(mSetupPINCode.value());
238249

239250
CHIP_ERROR err = CHIP_NO_ERROR;
240251
if (mPaseOnly.ValueOr(false))
@@ -254,6 +265,10 @@ CHIP_ERROR PairingCommand::PairWithMdnsOrBleByIndex(NodeId remoteId, uint16_t in
254265

255266
CHIP_ERROR PairingCommand::PairWithMdnsOrBleByIndexWithCode(NodeId remoteId, uint16_t index)
256267
{
268+
// We might or might not have a setup code. We don't know yet, but if we
269+
// do, we'll emplace it at that point.
270+
mSetupPINCode.reset();
271+
257272
#if CHIP_DEVICE_LAYER_TARGET_DARWIN
258273
VerifyOrReturnError(IsInteractive(), CHIP_ERROR_INCORRECT_STATE);
259274

@@ -277,7 +292,7 @@ CHIP_ERROR PairingCommand::PairWithMdnsOrBleByIndexWithCode(NodeId remoteId, uin
277292
VerifyOrReturnError(payload.isValidManualCode(), CHIP_ERROR_INVALID_ARGUMENT);
278293
}
279294

280-
mSetupPINCode = payload.setUpPINCode;
295+
mSetupPINCode.emplace(payload.setUpPINCode);
281296
return PairWithMdnsOrBleByIndex(remoteId, index);
282297
}
283298

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

+23-9
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
#include <lib/support/Span.h>
2727
#include <lib/support/ThreadOperationalDataset.h>
2828

29+
#include <optional>
30+
2931
enum class PairingMode
3032
{
3133
None,
@@ -44,6 +46,7 @@ enum class PairingNetworkType
4446
None,
4547
WiFi,
4648
Thread,
49+
WiFiOrThread,
4750
};
4851

4952
class PairingCommand : public CHIPCommand,
@@ -85,6 +88,11 @@ class PairingCommand : public CHIPCommand,
8588
case PairingNetworkType::Thread:
8689
AddArgument("operationalDataset", &mOperationalDataset);
8790
break;
91+
case PairingNetworkType::WiFiOrThread:
92+
AddArgument("ssid", &mSSID);
93+
AddArgument("password", &mPassword);
94+
AddArgument("operationalDataset", &mOperationalDataset);
95+
break;
8896
}
8997

9098
switch (mode)
@@ -101,32 +109,32 @@ class PairingCommand : public CHIPCommand,
101109
break;
102110
case PairingMode::Ble:
103111
AddArgument("skip-commissioning-complete", 0, 1, &mSkipCommissioningComplete);
104-
AddArgument("setup-pin-code", 0, 134217727, &mSetupPINCode);
105-
AddArgument("discriminator", 0, 4096, &mDiscriminator);
112+
AddArgument("setup-pin-code", 0, 134217727, &mSetupPINCode.emplace());
113+
AddArgument("discriminator", 0, 4096, &mDiscriminator.emplace());
106114
break;
107115
case PairingMode::OnNetwork:
108116
AddArgument("skip-commissioning-complete", 0, 1, &mSkipCommissioningComplete);
109-
AddArgument("setup-pin-code", 0, 134217727, &mSetupPINCode);
117+
AddArgument("setup-pin-code", 0, 134217727, &mSetupPINCode.emplace());
110118
AddArgument("pase-only", 0, 1, &mPaseOnly);
111119
break;
112120
case PairingMode::SoftAP:
113121
AddArgument("skip-commissioning-complete", 0, 1, &mSkipCommissioningComplete);
114-
AddArgument("setup-pin-code", 0, 134217727, &mSetupPINCode);
115-
AddArgument("discriminator", 0, 4096, &mDiscriminator);
122+
AddArgument("setup-pin-code", 0, 134217727, &mSetupPINCode.emplace());
123+
AddArgument("discriminator", 0, 4096, &mDiscriminator.emplace());
116124
AddArgument("device-remote-ip", &mRemoteAddr);
117125
AddArgument("device-remote-port", 0, UINT16_MAX, &mRemotePort);
118126
AddArgument("pase-only", 0, 1, &mPaseOnly);
119127
break;
120128
case PairingMode::AlreadyDiscovered:
121129
AddArgument("skip-commissioning-complete", 0, 1, &mSkipCommissioningComplete);
122-
AddArgument("setup-pin-code", 0, 134217727, &mSetupPINCode);
130+
AddArgument("setup-pin-code", 0, 134217727, &mSetupPINCode.emplace());
123131
AddArgument("device-remote-ip", &mRemoteAddr);
124132
AddArgument("device-remote-port", 0, UINT16_MAX, &mRemotePort);
125133
AddArgument("pase-only", 0, 1, &mPaseOnly);
126134
break;
127135
case PairingMode::AlreadyDiscoveredByIndex:
128136
AddArgument("skip-commissioning-complete", 0, 1, &mSkipCommissioningComplete);
129-
AddArgument("setup-pin-code", 0, 134217727, &mSetupPINCode);
137+
AddArgument("setup-pin-code", 0, 134217727, &mSetupPINCode.emplace());
130138
AddArgument("index", 0, UINT16_MAX, &mIndex);
131139
AddArgument("pase-only", 0, 1, &mPaseOnly);
132140
break;
@@ -246,8 +254,14 @@ class PairingCommand : public CHIPCommand,
246254
mComplex_DSTOffsets;
247255

248256
uint16_t mRemotePort;
249-
uint16_t mDiscriminator;
250-
uint32_t mSetupPINCode;
257+
// mDiscriminator is only used for some situations, but in those situations
258+
// it's mandatory. Track whether we're actually using it; the cases that do
259+
// will emplace this optional.
260+
std::optional<uint16_t> mDiscriminator;
261+
// mSetupPINCode is only used for some situations, but in those situations
262+
// it's mandatory. Track whether we're actually using it; the cases that do
263+
// will emplace this optional.
264+
std::optional<uint32_t> mSetupPINCode;
251265
uint16_t mIndex;
252266
chip::ByteSpan mOperationalDataset;
253267
chip::ByteSpan mSSID;

examples/lighting-app/nxp/k32w/k32w0/.gn

+2-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ default_args = {
2727
import("//args.gni")
2828

2929
pw_build_PIP_CONSTRAINTS = [ "${chip_root}/scripts/setup/constraints.txt" ]
30-
pw_build_PIP_REQUIREMENTS = [ "${chip_root}/scripts/setup/requirements.build.txt" ]
30+
pw_build_PIP_REQUIREMENTS =
31+
[ "${chip_root}/scripts/setup/requirements.build.txt" ]
3132

3233
# Import default platform configs
3334
import("${chip_root}/src/platform/nxp/k32w/k32w0/args.gni")

examples/platform/silabs/SiWx917/SiWx917/sl_wifi_if.cpp

+7-7
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,10 @@ extern "C" {
7474
#include "sl_wifi.h"
7575
#include "sl_wifi_callback_framework.h"
7676
#include "wfx_host_events.h"
77-
#if SLI_SI91X_MCU_INTERFACE
77+
#if SL_MBEDTLS_USE_TINYCRYPT
78+
#include "sl_si91x_constants.h"
7879
#include "sl_si91x_trng.h"
79-
#define TRNGKEY_SIZE 4
80-
#endif // SLI_SI91X_MCU_INTERFACE
80+
#endif // SL_MBEDTLS_USE_TINYCRYPT
8181
}
8282

8383
WfxRsi_t wfx_rsi;
@@ -456,8 +456,8 @@ static sl_status_t wfx_rsi_init(void)
456456
return status;
457457
}
458458

459-
#ifdef SLI_SI91X_MCU_INTERFACE
460-
const uint32_t trngKey[TRNGKEY_SIZE] = { 0x16157E2B, 0xA6D2AE28, 0x8815F7AB, 0x3C4FCF09 };
459+
#ifdef SL_MBEDTLS_USE_TINYCRYPT
460+
const uint32_t trngKey[TRNG_KEY_SIZE] = { 0x16157E2B, 0xA6D2AE28, 0x8815F7AB, 0x3C4FCF09 };
461461

462462
// To check the Entropy of TRNG and verify TRNG functioning.
463463
status = sl_si91x_trng_entropy();
@@ -468,13 +468,13 @@ static sl_status_t wfx_rsi_init(void)
468468
}
469469

470470
// Initiate and program the key required for TRNG hardware engine
471-
status = sl_si91x_trng_program_key((uint32_t *) trngKey, TRNGKEY_SIZE);
471+
status = sl_si91x_trng_program_key((uint32_t *) trngKey, TRNG_KEY_SIZE);
472472
if (status != SL_STATUS_OK)
473473
{
474474
SILABS_LOG("TRNG Key Programming Failed");
475475
return status;
476476
}
477-
#endif // SLI_SI91X_MCU_INTERFACE
477+
#endif // SL_MBEDTLS_USE_TINYCRYPT
478478

479479
wfx_rsi.events = xEventGroupCreateStatic(&rsiDriverEventGroup);
480480
wfx_rsi.dev_state |= WFX_RSI_ST_DEV_READY;
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
61 : Update env variable in vscode image
1+
62 : Fix ESP32 qemu build

integrations/docker/images/stage-3/chip-build-esp32-qemu/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ RUN set -x \
1313
WORKDIR /opt/espressif/qemu
1414
# Setup QEMU emulator for ESP32 platform
1515
RUN set -x \
16-
&& git clone --depth 1 -b v9.0.0 https://github.com/espressif/qemu.git ../qemu-src \
16+
&& git clone --depth 1 -b esp-develop-9.0.0-20240606 https://github.com/espressif/qemu.git ../qemu-src \
1717
&& ../qemu-src/configure --target-list=xtensa-softmmu --enable-debug --disable-strip --disable-user --disable-capstone --disable-vnc --disable-sdl --disable-gtk \
1818
&& make -j$(nproc) \
1919
&& : # last line

src/controller/AutoCommissioner.cpp

+36-23
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,19 @@ CommissioningStage AutoCommissioner::GetNextCommissioningStage(CommissioningStag
298298

299299
CommissioningStage AutoCommissioner::GetNextCommissioningStageNetworkSetup(CommissioningStage currentStage, CHIP_ERROR & lastErr)
300300
{
301+
if (IsSecondaryNetworkSupported())
302+
{
303+
if (TryingSecondaryNetwork())
304+
{
305+
// Try secondary network interface.
306+
return mDeviceCommissioningInfo.network.wifi.endpoint == kRootEndpointId ? CommissioningStage::kThreadNetworkSetup
307+
: CommissioningStage::kWiFiNetworkSetup;
308+
}
309+
// Try primary network interface
310+
return mDeviceCommissioningInfo.network.wifi.endpoint == kRootEndpointId ? CommissioningStage::kWiFiNetworkSetup
311+
: CommissioningStage::kThreadNetworkSetup;
312+
}
313+
301314
if (mParams.GetWiFiCredentials().HasValue() && mDeviceCommissioningInfo.network.wifi.endpoint != kInvalidEndpointId)
302315
{
303316
return CommissioningStage::kWiFiNetworkSetup;
@@ -455,35 +468,15 @@ CommissioningStage AutoCommissioner::GetNextCommissioningStageInternal(Commissio
455468
case CommissioningStage::kNeedsNetworkCreds:
456469
return GetNextCommissioningStageNetworkSetup(currentStage, lastErr);
457470
case CommissioningStage::kWiFiNetworkSetup:
458-
if (mParams.GetThreadOperationalDataset().HasValue() &&
459-
mDeviceCommissioningInfo.network.thread.endpoint != kInvalidEndpointId)
460-
{
461-
return CommissioningStage::kThreadNetworkSetup;
462-
}
463-
else
464-
{
465-
return CommissioningStage::kFailsafeBeforeWiFiEnable;
466-
}
471+
return CommissioningStage::kFailsafeBeforeWiFiEnable;
467472
case CommissioningStage::kThreadNetworkSetup:
468-
if (mParams.GetWiFiCredentials().HasValue() && mDeviceCommissioningInfo.network.wifi.endpoint != kInvalidEndpointId)
469-
{
470-
return CommissioningStage::kFailsafeBeforeWiFiEnable;
471-
}
472-
else
473-
{
474-
return CommissioningStage::kFailsafeBeforeThreadEnable;
475-
}
473+
return CommissioningStage::kFailsafeBeforeThreadEnable;
476474
case CommissioningStage::kFailsafeBeforeWiFiEnable:
477475
return CommissioningStage::kWiFiNetworkEnable;
478476
case CommissioningStage::kFailsafeBeforeThreadEnable:
479477
return CommissioningStage::kThreadNetworkEnable;
480478
case CommissioningStage::kWiFiNetworkEnable:
481-
if (mParams.GetThreadOperationalDataset().HasValue() &&
482-
mDeviceCommissioningInfo.network.thread.endpoint != kInvalidEndpointId)
483-
{
484-
return CommissioningStage::kThreadNetworkEnable;
485-
}
486-
else if (mParams.GetSkipCommissioningComplete().ValueOr(false))
479+
if (mParams.GetSkipCommissioningComplete().ValueOr(false))
487480
{
488481
SetCASEFailsafeTimerIfNeeded();
489482
return CommissioningStage::kCleanup;
@@ -502,6 +495,10 @@ CommissioningStage AutoCommissioner::GetNextCommissioningStageInternal(Commissio
502495
return CommissioningStage::kEvictPreviousCaseSessions;
503496
case CommissioningStage::kEvictPreviousCaseSessions:
504497
return CommissioningStage::kFindOperationalForStayActive;
498+
case CommissioningStage::kPrimaryOperationalNetworkFailed:
499+
return CommissioningStage::kDisablePrimaryNetworkInterface;
500+
case CommissioningStage::kDisablePrimaryNetworkInterface:
501+
return GetNextCommissioningStageNetworkSetup(currentStage, lastErr);
505502
case CommissioningStage::kFindOperationalForStayActive:
506503
return CommissioningStage::kICDSendStayActive;
507504
case CommissioningStage::kICDSendStayActive:
@@ -564,6 +561,8 @@ EndpointId AutoCommissioner::GetEndpoint(const CommissioningStage & stage) const
564561
case CommissioningStage::kThreadNetworkSetup:
565562
case CommissioningStage::kThreadNetworkEnable:
566563
return mDeviceCommissioningInfo.network.thread.endpoint;
564+
case CommissioningStage::kDisablePrimaryNetworkInterface:
565+
return kRootEndpointId;
567566
default:
568567
return kRootEndpointId;
569568
}
@@ -729,6 +728,16 @@ CHIP_ERROR AutoCommissioner::CommissioningStepFinished(CHIP_ERROR err, Commissio
729728
report.stageCompleted = CommissioningStage::kScanNetworks;
730729
}
731730
}
731+
732+
if (err != CHIP_NO_ERROR && IsSecondaryNetworkSupported() && !TryingSecondaryNetwork() &&
733+
completionStatus.failedStage.HasValue() && completionStatus.failedStage.Value() >= kWiFiNetworkSetup &&
734+
completionStatus.failedStage.Value() <= kICDSendStayActive)
735+
{
736+
// Primary network failed, disable primary network interface and try secondary network interface.
737+
TrySecondaryNetwork();
738+
err = CHIP_NO_ERROR;
739+
report.stageCompleted = CommissioningStage::kPrimaryOperationalNetworkFailed;
740+
}
732741
}
733742
else
734743
{
@@ -847,6 +856,10 @@ CHIP_ERROR AutoCommissioner::CommissioningStepFinished(CHIP_ERROR err, Commissio
847856
mOperationalDeviceProxy = report.Get<OperationalNodeFoundData>().operationalProxy;
848857
break;
849858
case CommissioningStage::kCleanup:
859+
if (IsSecondaryNetworkSupported() && TryingSecondaryNetwork())
860+
{
861+
ResetTryingSecondaryNetwork();
862+
}
850863
ReleasePAI();
851864
ReleaseDAC();
852865
mCommissioneeDeviceProxy = nullptr;

src/controller/AutoCommissioner.h

+16
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,22 @@ class AutoCommissioner : public CommissioningDelegate
9494
mDeviceCommissioningInfo.network.thread.endpoint != kInvalidEndpointId));
9595
};
9696

97+
// Helper function to Determine whether secondary network interface is supported.
98+
// Only true if information is provided for both networks, and the target has endpoint
99+
// for wifi and thread.
100+
bool IsSecondaryNetworkSupported() const
101+
{
102+
return ((mParams.GetSupportsConcurrentConnection().ValueOr(false) && mParams.GetWiFiCredentials().HasValue() &&
103+
mDeviceCommissioningInfo.network.wifi.endpoint != kInvalidEndpointId) &&
104+
mParams.GetThreadOperationalDataset().HasValue() &&
105+
mDeviceCommissioningInfo.network.thread.endpoint != kInvalidEndpointId);
106+
}
107+
108+
void TrySecondaryNetwork() { mTryingSecondaryNetwork = true; }
109+
bool TryingSecondaryNetwork() const { return mTryingSecondaryNetwork; }
110+
void ResetTryingSecondaryNetwork() { mTryingSecondaryNetwork = false; }
111+
bool mTryingSecondaryNetwork = false;
112+
97113
bool mStopCommissioning = false;
98114

99115
DeviceCommissioner * mCommissioner = nullptr;

0 commit comments

Comments
 (0)