Skip to content

Commit 4bda663

Browse files
committed
Added Thread autostart configuration and check for Thread interface
1 parent a07b447 commit 4bda663

4 files changed

+31
-11
lines changed

src/include/platform/CHIPDeviceConfig.h

+9
Original file line numberDiff line numberDiff line change
@@ -1101,6 +1101,15 @@ static_assert(CHIP_DEVICE_CONFIG_BLE_EXT_ADVERTISING_INTERVAL_MIN <= CHIP_DEVICE
11011101
#define CHIP_DEVICE_CONFIG_ENABLE_THREAD_DNS_CLIENT 0
11021102
#endif
11031103

1104+
/**
1105+
* CHIP_DEVICE_CONFIG_ENABLE_THREAD_AUTOSTART
1106+
*
1107+
* Enable starting provisioned Thread network automatically after device power-up.
1108+
*/
1109+
#ifndef CHIP_DEVICE_CONFIG_ENABLE_THREAD_AUTOSTART
1110+
#define CHIP_DEVICE_CONFIG_ENABLE_THREAD_AUTOSTART 1
1111+
#endif
1112+
11041113
// -------------------- Network Telemetry Configuration --------------------
11051114

11061115
/**

src/platform/OpenThread/GenericNetworkCommissioningThreadDriver.cpp

+18-3
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ CHIP_ERROR GenericThreadDriver::Init(Internal::BaseDriver::NetworkStatusChangeCa
5454
// must be restored on the boot. If there's no backup, the below function is a no-op.
5555
RevertConfiguration();
5656

57+
CheckInterfaceEnabled();
58+
5759
return CHIP_NO_ERROR;
5860
}
5961

@@ -204,10 +206,9 @@ CHIP_ERROR GenericThreadDriver::SetEnabled(bool enabled)
204206

205207
ReturnErrorOnFailure(PersistedStorage::KeyValueStoreMgr().Put(kInterfaceEnabled, &enabled, sizeof(enabled)));
206208

207-
if ((!enabled && DeviceLayer::ThreadStackMgrImpl().IsThreadEnabled()) ||
208-
(enabled && DeviceLayer::ThreadStackMgrImpl().IsThreadProvisioned()))
209+
if ((!enabled && ThreadStackMgrImpl().IsThreadEnabled()) || (enabled && ThreadStackMgrImpl().IsThreadProvisioned()))
209210
{
210-
ReturnErrorOnFailure(DeviceLayer::ThreadStackMgrImpl().SetThreadEnabled(enabled));
211+
ReturnErrorOnFailure(ThreadStackMgrImpl().SetThreadEnabled(enabled));
211212
}
212213
return CHIP_NO_ERROR;
213214
}
@@ -260,6 +261,20 @@ CHIP_ERROR GenericThreadDriver::BackupConfiguration()
260261
return KeyValueStoreMgr().Put(DefaultStorageKeyAllocator::FailSafeNetworkConfig().KeyName(), dataset.data(), dataset.size());
261262
}
262263

264+
void GenericThreadDriver::CheckInterfaceEnabled()
265+
{
266+
bool enabled = GetEnabled();
267+
ChipLogProgress(DeviceLayer, "OpenThread InterfaceEnabled: %s", enabled ? "true" : "false");
268+
#if !CHIP_DEVICE_CONFIG_ENABLE_THREAD_AUTOSTART
269+
// If the Thread interface is enabled and stack has been provisioned, but is not currently enabled, enable it now.
270+
if (enabled && ThreadStackMgrImpl().IsThreadProvisioned() && !ThreadStackMgrImpl().IsThreadEnabled())
271+
{
272+
ReturnOnFailure(ThreadStackMgrImpl().SetThreadEnabled(true));
273+
ChipLogProgress(DeviceLayer, "OpenThread ifconfig up and thread start");
274+
}
275+
#endif
276+
}
277+
263278
size_t GenericThreadDriver::ThreadNetworkIterator::Count()
264279
{
265280
return driver->mStagingNetwork.IsCommissioned() ? 1 : 0;

src/platform/OpenThread/GenericNetworkCommissioningThreadDriver.h

+1
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ class GenericThreadDriver final : public ThreadDriver
122122
static void OnThreadStateChangeHandler(const ChipDeviceEvent * event, intptr_t arg);
123123
Status MatchesNetworkId(const Thread::OperationalDataset & dataset, const ByteSpan & networkId) const;
124124
CHIP_ERROR BackupConfiguration();
125+
void CheckInterfaceEnabled();
125126

126127
ThreadNetworkIterator mThreadIterator = ThreadNetworkIterator(this);
127128
Thread::OperationalDataset mStagingNetwork = {};

src/platform/OpenThread/GenericThreadStackManagerImpl_OpenThread.hpp

+3-8
Original file line numberDiff line numberDiff line change
@@ -1094,9 +1094,6 @@ CHIP_ERROR GenericThreadStackManagerImpl_OpenThread<ImplClass>::DoInit(otInstanc
10941094
CHIP_ERROR err = CHIP_NO_ERROR;
10951095
otError otErr = OT_ERROR_NONE;
10961096

1097-
// If InterfaceEnabled is false, do not start Thread
1098-
bool InterfaceEnabled = true;
1099-
11001097
// Arrange for OpenThread errors to be translated to text.
11011098
RegisterOpenThreadErrorFormatter();
11021099

@@ -1134,12 +1131,9 @@ CHIP_ERROR GenericThreadStackManagerImpl_OpenThread<ImplClass>::DoInit(otInstanc
11341131
memset(&mSrpClient, 0, sizeof(mSrpClient));
11351132
#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD_SRP_CLIENT
11361133

1137-
#ifndef _NO_NETWORK_COMMISSIONING_DRIVER_
1138-
InterfaceEnabled = sGenericThreadDriver.GetEnabled();
1139-
#endif
1140-
1134+
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD_AUTOSTART
11411135
// If the Thread stack has been provisioned, but is not currently enabled, enable it now.
1142-
if (InterfaceEnabled && otThreadGetDeviceRole(mOTInst) == OT_DEVICE_ROLE_DISABLED && otDatasetIsCommissioned(otInst))
1136+
if (otThreadGetDeviceRole(mOTInst) == OT_DEVICE_ROLE_DISABLED && otDatasetIsCommissioned(otInst))
11431137
{
11441138
// Enable the Thread IPv6 interface.
11451139
otErr = otIp6SetEnabled(otInst, true);
@@ -1150,6 +1144,7 @@ CHIP_ERROR GenericThreadStackManagerImpl_OpenThread<ImplClass>::DoInit(otInstanc
11501144

11511145
ChipLogProgress(DeviceLayer, "OpenThread ifconfig up and thread start");
11521146
}
1147+
#endif
11531148

11541149
initNetworkCommissioningThreadDriver();
11551150

0 commit comments

Comments
 (0)