Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add background event handling for CASE establish #24099

Merged
merged 47 commits into from
Feb 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
acafb52
Add background event handling for CASE establish
mlepage-google Dec 9, 2022
3a80c45
Remove WIP code
mlepage-google Dec 15, 2022
9743633
Address some comments from code review
mlepage-google Jan 16, 2023
20759c4
Remove cruft from testing.
mlepage-google Jan 16, 2023
85d5c12
Remove some conditional compilation
mlepage-google Jan 17, 2023
dba0871
Remove some conditional compilation
mlepage-google Jan 17, 2023
bc6f1bf
Remove more conditional compilation
mlepage-google Jan 17, 2023
a0ec1e3
Move function back where it was
mlepage-google Jan 17, 2023
397c376
Add some documentation
mlepage-google Jan 17, 2023
2f10b38
Use platform new/delete
mlepage-google Jan 19, 2023
4227532
Undo changes that are merely reordering
mlepage-google Jan 19, 2023
3451a66
Undo changes that are merely reordering
mlepage-google Jan 19, 2023
847aebf
Remove include file fix (C/C++)
mlepage-google Jan 19, 2023
b0d65d8
Add documentation to background processing API
mlepage-google Jan 19, 2023
8ae5359
Use alternate fabrics table API
mlepage-google Jan 19, 2023
55b7846
Merge branch 'master' into async-sigma3
mlepage-google Jan 19, 2023
26b85bf
Merge branch 'master' into async-sigma3
mlepage-google Jan 19, 2023
1fdc61a
Merge branch 'master' into async-sigma3
mlepage-google Jan 20, 2023
6007254
Improve documentation
mlepage-google Jan 20, 2023
788355e
Add assertion
mlepage-google Jan 20, 2023
d15e187
Undo some unrelated cleanup
mlepage-google Jan 20, 2023
f784728
Update src/protocols/secure_channel/CASESession.cpp
mlepage-google Jan 20, 2023
0a1d6d1
Merge branch 'master' into async-sigma3
mlepage-google Jan 23, 2023
eebf6ff
Merge branch 'master' into async-sigma3
mlepage-google Jan 24, 2023
1797bd9
Ensure root cert buf keeps span
mlepage-google Jan 24, 2023
4cce9d8
Restyled by whitespace
restyled-commits Jan 24, 2023
4a491e0
Restyled by clang-format
restyled-commits Jan 24, 2023
1b0e186
Merge branch 'master' into async-sigma3
mlepage-google Jan 24, 2023
f4785ee
Add new functions to GenericPlatformManagerImpl
mlepage-google Jan 24, 2023
62fd9d7
Merge branch 'master' into async-sigma3
mlepage-google Jan 24, 2023
dc1d207
Attempt to fix build errors on some platforms
mlepage-google Jan 24, 2023
66357d3
Improving host test environment
mlepage-google Feb 2, 2023
160208e
Remove log statements and clean up
mlepage-google Feb 3, 2023
ef0a22e
Merge branch 'master' into async-sigma3
mlepage-google Feb 3, 2023
2b7c22a
Merge branch 'master' into async-sigma3
mlepage-google Feb 3, 2023
9b840f2
Update fake PlatformManagerImpl
mlepage-google Feb 3, 2023
e320b38
Merge branch 'master' into async-sigma3
mlepage-google Feb 7, 2023
f7c2027
Increase timeout on fake linux CI
mlepage-google Feb 7, 2023
04a7757
Merge branch 'master' into async-sigma3
mlepage-google Feb 8, 2023
f8905a0
Redo changes to make tests work
mlepage-google Feb 10, 2023
9ffd859
Merge branch 'master' into async-sigma3
mlepage-google Feb 10, 2023
348383c
Undo SetSystemLayerForTesting
mlepage-google Feb 13, 2023
8759d39
Merge branch 'master' into async-sigma3
mlepage-google Feb 13, 2023
77ef3cc
Change fake linux tests timeout back to 15 mins
mlepage-google Feb 13, 2023
7f02ce7
Restyle
mlepage-google Feb 14, 2023
134fed0
Merge branch 'master' into async-sigma3
mlepage-google Feb 14, 2023
42c8fbf
Init/shutdown platform mgr in TestCASESession
mlepage-google Feb 14, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions examples/platform/esp32/common/CHIPDeviceManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,9 @@ CHIP_ERROR CHIPDeviceManager::Init(CHIPDeviceManagerCallbacks * cb)
// this function will happen on the CHIP event loop thread, not the app_main thread.
PlatformMgr().AddEventHandler(CHIPDeviceManager::CommonDeviceEventHandler, reinterpret_cast<intptr_t>(cb));

// Start a task to run the CHIP Device background event loop.
ReturnErrorOnFailure(PlatformMgr().StartBackgroundEventLoopTask());

// Start a task to run the CHIP Device event loop.
return PlatformMgr().StartEventLoopTask();
}
Expand Down
2 changes: 2 additions & 0 deletions src/credentials/FabricTable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include <lib/support/DefaultStorageKeyAllocator.h>
#include <lib/support/SafeInt.h>
#include <lib/support/ScopedBuffer.h>
#include <platform/LockTracker.h>

namespace chip {
using namespace Credentials;
Expand Down Expand Up @@ -342,6 +343,7 @@ CHIP_ERROR FabricTable::VerifyCredentials(FabricIndex fabricIndex, const ByteSpa
FabricId & outFabricId, NodeId & outNodeId, Crypto::P256PublicKey & outNocPubkey,
Crypto::P256PublicKey * outRootPublicKey) const
{
assertChipStackLockedByCurrentThread();
uint8_t rootCertBuf[kMaxCHIPCertLength];
MutableByteSpan rootCertSpan{ rootCertBuf };
ReturnErrorOnFailure(FetchRootCert(fabricIndex, rootCertSpan));
Expand Down
15 changes: 6 additions & 9 deletions src/credentials/FabricTable.h
Original file line number Diff line number Diff line change
Expand Up @@ -912,13 +912,17 @@ class DLL_EXPORT FabricTable
*/
void RevertPendingOpCertsExceptRoot();

// Verifies credentials, with the fabric's root under fabricIndex, and extract critical bits.
// This call is used for CASE.
// Verifies credentials, using the root certificate of the provided fabric index.
CHIP_ERROR VerifyCredentials(FabricIndex fabricIndex, const ByteSpan & noc, const ByteSpan & icac,
Credentials::ValidationContext & context, CompressedFabricId & outCompressedFabricId,
FabricId & outFabricId, NodeId & outNodeId, Crypto::P256PublicKey & outNocPubkey,
Crypto::P256PublicKey * outRootPublicKey = nullptr) const;

// Verifies credentials, using the provided root certificate.
static CHIP_ERROR VerifyCredentials(const ByteSpan & noc, const ByteSpan & icac, const ByteSpan & rcac,
Credentials::ValidationContext & context, CompressedFabricId & outCompressedFabricId,
FabricId & outFabricId, NodeId & outNodeId, Crypto::P256PublicKey & outNocPubkey,
Crypto::P256PublicKey * outRootPublicKey = nullptr);
/**
* @brief Enables FabricInfo instances to collide and reference the same logical fabric (i.e Root Public Key + FabricId).
*
Expand Down Expand Up @@ -1093,13 +1097,6 @@ class DLL_EXPORT FabricTable
mStateFlags.HasAll(StateFlags::kIsPendingFabricDataPresent, StateFlags::kIsUpdatePending);
}

// Verifies credentials, using the provided root certificate.
// This call is done whenever a fabric is "directly" added
static CHIP_ERROR VerifyCredentials(const ByteSpan & noc, const ByteSpan & icac, const ByteSpan & rcac,
Credentials::ValidationContext & context, CompressedFabricId & outCompressedFabricId,
FabricId & outFabricId, NodeId & outNodeId, Crypto::P256PublicKey & outNocPubkey,
Crypto::P256PublicKey * outRootPublicKey);

// Validate an NOC chain at time of adding/updating a fabric (uses VerifyCredentials with additional checks).
// The `existingFabricId` is passed for UpdateNOC, and must match the Fabric, to make sure that we are
// not trying to change FabricID with UpdateNOC. If set to kUndefinedFabricId, we are doing AddNOC and
Expand Down
49 changes: 47 additions & 2 deletions src/include/platform/CHIPDeviceConfig.h
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@
* The priority of the chip task.
*/
#ifndef CHIP_DEVICE_CONFIG_CHIP_TASK_PRIORITY
#define CHIP_DEVICE_CONFIG_CHIP_TASK_PRIORITY 1
#define CHIP_DEVICE_CONFIG_CHIP_TASK_PRIORITY 2
#endif

/**
Expand All @@ -91,6 +91,51 @@
#define CHIP_DEVICE_CONFIG_MAX_EVENT_QUEUE_SIZE 100
#endif

/**
* CHIP_DEVICE_CONFIG_ENABLE_BG_EVENT_PROCESSING
*
* Enable support for background event processing.
*/
#ifndef CHIP_DEVICE_CONFIG_ENABLE_BG_EVENT_PROCESSING
#define CHIP_DEVICE_CONFIG_ENABLE_BG_EVENT_PROCESSING 0
#endif

/**
* CHIP_DEVICE_CONFIG_BG_TASK_NAME
*
* The name of the background task.
*/
#ifndef CHIP_DEVICE_CONFIG_BG_TASK_NAME
#define CHIP_DEVICE_CONFIG_BG_TASK_NAME "BG"
#endif

/**
* CHIP_DEVICE_CONFIG_BG_TASK_STACK_SIZE
*
* The size (in bytes) of the background task stack.
*/
#ifndef CHIP_DEVICE_CONFIG_BG_TASK_STACK_SIZE
#define CHIP_DEVICE_CONFIG_BG_TASK_STACK_SIZE (6 * 1024)
#endif

/**
* CHIP_DEVICE_CONFIG_BG_TASK_PRIORITY
*
* The priority of the background task.
*/
#ifndef CHIP_DEVICE_CONFIG_BG_TASK_PRIORITY
#define CHIP_DEVICE_CONFIG_BG_TASK_PRIORITY 1
tcarmelveilleux marked this conversation as resolved.
Show resolved Hide resolved
#endif

/**
* CHIP_DEVICE_CONFIG_BG_MAX_EVENT_QUEUE_SIZE
*
* The maximum number of events that can be held in the chip background event queue.
*/
#ifndef CHIP_DEVICE_CONFIG_BG_MAX_EVENT_QUEUE_SIZE
#define CHIP_DEVICE_CONFIG_BG_MAX_EVENT_QUEUE_SIZE 1
#endif

/**
* CHIP_DEVICE_CONFIG_ENABLE_SED
*
Expand Down Expand Up @@ -648,7 +693,7 @@
* The priority of the OpenThread task.
*/
#ifndef CHIP_DEVICE_CONFIG_THREAD_TASK_PRIORITY
#define CHIP_DEVICE_CONFIG_THREAD_TASK_PRIORITY 2
#define CHIP_DEVICE_CONFIG_THREAD_TASK_PRIORITY 3
#endif

/**
Expand Down
2 changes: 1 addition & 1 deletion src/include/platform/CHIPDeviceLayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
namespace chip {
namespace DeviceLayer {

void SetSystemLayerForTesting(System::LayerImpl * layer);
void SetSystemLayerForTesting(System::Layer * layer);

// These functions are defined in src/platform/Globals.cpp
chip::System::Layer & SystemLayer();
Expand Down
74 changes: 71 additions & 3 deletions src/include/platform/PlatformManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ class PlatformManager
* other.
*/
CHIP_ERROR InitChipStack();

CHIP_ERROR AddEventHandler(EventHandlerFunct handler, intptr_t arg = 0);
void RemoveEventHandler(EventHandlerFunct handler, intptr_t arg = 0);
void SetDelegate(PlatformManagerDelegate * delegate) { mDelegate = delegate; }
Expand Down Expand Up @@ -137,7 +138,7 @@ class PlatformManager
* processing, the callback function may be called (on the work item
* processing thread) before ScheduleWork returns.
*/
void ScheduleWork(AsyncWorkFunct workFunct, intptr_t arg = 0);
CHIP_ERROR ScheduleWork(AsyncWorkFunct workFunct, intptr_t arg = 0);

/**
* Process work items until StopEventLoopTask is called. RunEventLoop will
Expand Down Expand Up @@ -183,6 +184,7 @@ class PlatformManager
* returns.
*/
CHIP_ERROR StopEventLoopTask();

void LockChipStack();
bool TryLockChipStack();
void UnlockChipStack();
Expand All @@ -201,6 +203,47 @@ class PlatformManager
[[nodiscard]] CHIP_ERROR PostEvent(const ChipDeviceEvent * event);
void PostEventOrDie(const ChipDeviceEvent * event);

/**
* Generally this function has the same semantics as ScheduleWork
* except it applies to background processing.
*
* Delegates to PostBackgroundEvent (which will delegate to PostEvent if
* CHIP_DEVICE_CONFIG_ENABLE_BG_EVENT_PROCESSING is not true).
*/
CHIP_ERROR ScheduleBackgroundWork(AsyncWorkFunct workFunct, intptr_t arg = 0);
bzbarsky-apple marked this conversation as resolved.
Show resolved Hide resolved

/**
* Generally this function has the same semantics as PostEvent
* except it applies to background processing.
*
* If CHIP_DEVICE_CONFIG_ENABLE_BG_EVENT_PROCESSING is not true, will delegate
* to PostEvent.
*
* Only accepts events of type kCallWorkFunct or kNoOp.
*
* Returns CHIP_ERROR_INVALID_ARGUMENT if the event type is not acceptable.
* Returns CHIP_ERROR_NO_MEMORY if resources are exhausted.
*/
CHIP_ERROR PostBackgroundEvent(const ChipDeviceEvent * event);

/**
* Generally this function has the same semantics as RunEventLoop
* except it applies to background processing.
*/
void RunBackgroundEventLoop();

/**
* Generally this function has the same semantics as StartEventLoopTask
* except it applies to background processing.
*/
CHIP_ERROR StartBackgroundEventLoopTask();

/**
* Generally this function has the same semantics as StopEventLoopTask
* except it applies to background processing.
*/
CHIP_ERROR StopBackgroundEventLoopTask();

private:
bool mInitialized = false;
PlatformManagerDelegate * mDelegate = nullptr;
Expand Down Expand Up @@ -352,9 +395,9 @@ inline void PlatformManager::HandleServerShuttingDown()
static_cast<ImplClass *>(this)->_HandleServerShuttingDown();
}

inline void PlatformManager::ScheduleWork(AsyncWorkFunct workFunct, intptr_t arg)
inline CHIP_ERROR PlatformManager::ScheduleWork(AsyncWorkFunct workFunct, intptr_t arg)
{
static_cast<ImplClass *>(this)->_ScheduleWork(workFunct, arg);
return static_cast<ImplClass *>(this)->_ScheduleWork(workFunct, arg);
}

inline void PlatformManager::RunEventLoop()
Expand Down Expand Up @@ -432,6 +475,31 @@ inline void PlatformManager::PostEventOrDie(const ChipDeviceEvent * event)
static_cast<int>(event->Type), status.Format());
}

inline CHIP_ERROR PlatformManager::ScheduleBackgroundWork(AsyncWorkFunct workFunct, intptr_t arg)
{
return static_cast<ImplClass *>(this)->_ScheduleBackgroundWork(workFunct, arg);
}

inline CHIP_ERROR PlatformManager::PostBackgroundEvent(const ChipDeviceEvent * event)
{
return static_cast<ImplClass *>(this)->_PostBackgroundEvent(event);
}

inline void PlatformManager::RunBackgroundEventLoop()
{
static_cast<ImplClass *>(this)->_RunBackgroundEventLoop();
}

inline CHIP_ERROR PlatformManager::StartBackgroundEventLoopTask()
{
return static_cast<ImplClass *>(this)->_StartBackgroundEventLoopTask();
}

inline CHIP_ERROR PlatformManager::StopBackgroundEventLoopTask()
{
return static_cast<ImplClass *>(this)->_StopBackgroundEventLoopTask();
}

inline void PlatformManager::DispatchEvent(const ChipDeviceEvent * event)
{
static_cast<ImplClass *>(this)->_DispatchEvent(event);
Expand Down
7 changes: 6 additions & 1 deletion src/include/platform/internal/GenericPlatformManagerImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,12 @@ class GenericPlatformManagerImpl
void _RemoveEventHandler(PlatformManager::EventHandlerFunct handler, intptr_t arg);
void _HandleServerStarted();
void _HandleServerShuttingDown();
void _ScheduleWork(AsyncWorkFunct workFunct, intptr_t arg);
CHIP_ERROR _ScheduleWork(AsyncWorkFunct workFunct, intptr_t arg);
CHIP_ERROR _ScheduleBackgroundWork(AsyncWorkFunct workFunct, intptr_t arg);
CHIP_ERROR _PostBackgroundEvent(const ChipDeviceEvent * event);
void _RunBackgroundEventLoop(void);
CHIP_ERROR _StartBackgroundEventLoopTask(void);
CHIP_ERROR _StopBackgroundEventLoopTask();
void _DispatchEvent(const ChipDeviceEvent * event);

// ===== Support methods that can be overridden by the implementation subclass.
Expand Down
54 changes: 46 additions & 8 deletions src/include/platform/internal/GenericPlatformManagerImpl.ipp
Original file line number Diff line number Diff line change
Expand Up @@ -216,18 +216,56 @@ void GenericPlatformManagerImpl<ImplClass>::_HandleServerShuttingDown()
}

template <class ImplClass>
void GenericPlatformManagerImpl<ImplClass>::_ScheduleWork(AsyncWorkFunct workFunct, intptr_t arg)
CHIP_ERROR GenericPlatformManagerImpl<ImplClass>::_ScheduleWork(AsyncWorkFunct workFunct, intptr_t arg)
{
ChipDeviceEvent event;
event.Type = DeviceEventType::kCallWorkFunct;
event.CallWorkFunct.WorkFunct = workFunct;
event.CallWorkFunct.Arg = arg;
ChipDeviceEvent event{ .Type = DeviceEventType::kCallWorkFunct };
event.CallWorkFunct = { .WorkFunct = workFunct, .Arg = arg };
CHIP_ERROR err = Impl()->PostEvent(&event);
if (err != CHIP_NO_ERROR)
{
ChipLogError(DeviceLayer, "Failed to schedule work: %" CHIP_ERROR_FORMAT, err.Format());
}
return err;
}

CHIP_ERROR status = Impl()->PostEvent(&event);
if (status != CHIP_NO_ERROR)
template <class ImplClass>
CHIP_ERROR GenericPlatformManagerImpl<ImplClass>::_ScheduleBackgroundWork(AsyncWorkFunct workFunct, intptr_t arg)
{
ChipDeviceEvent event{ .Type = DeviceEventType::kCallWorkFunct };
event.CallWorkFunct = { .WorkFunct = workFunct, .Arg = arg };
CHIP_ERROR err = Impl()->PostBackgroundEvent(&event);
if (err != CHIP_NO_ERROR)
{
ChipLogError(DeviceLayer, "Failed to schedule work: %" CHIP_ERROR_FORMAT, status.Format());
ChipLogError(DeviceLayer, "Failed to schedule background work: %" CHIP_ERROR_FORMAT, err.Format());
}
return err;
}

template <class ImplClass>
CHIP_ERROR GenericPlatformManagerImpl<ImplClass>::_PostBackgroundEvent(const ChipDeviceEvent * event)
{
// Impl class must override to implement background event processing
return Impl()->PostEvent(event);
}

template <class ImplClass>
void GenericPlatformManagerImpl<ImplClass>::_RunBackgroundEventLoop(void)
{
// Impl class must override to implement background event processing
}

template <class ImplClass>
CHIP_ERROR GenericPlatformManagerImpl<ImplClass>::_StartBackgroundEventLoopTask(void)
{
// Impl class must override to implement background event processing
return CHIP_NO_ERROR;
}

template <class ImplClass>
CHIP_ERROR GenericPlatformManagerImpl<ImplClass>::_StopBackgroundEventLoopTask(void)
{
// Impl class must override to implement background event processing
return CHIP_NO_ERROR;
}

template <class ImplClass>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,12 +65,19 @@ class GenericPlatformManagerImpl_FreeRTOS : public GenericPlatformManagerImpl<Im
TaskHandle_t mEventLoopTask = NULL;
bool mChipTimerActive;

#if defined(CHIP_DEVICE_CONFIG_ENABLE_BG_EVENT_PROCESSING) && CHIP_DEVICE_CONFIG_ENABLE_BG_EVENT_PROCESSING
QueueHandle_t mBackgroundEventQueue = NULL;
TaskHandle_t mBackgroundEventLoopTask = NULL;
#endif

// ===== Methods that implement the PlatformManager abstract interface.

CHIP_ERROR _InitChipStack();

void _LockChipStack(void);
bool _TryLockChipStack(void);
void _UnlockChipStack(void);

CHIP_ERROR _PostEvent(const ChipDeviceEvent * event);
void _RunEventLoop(void);
CHIP_ERROR _StartEventLoopTask(void);
Expand All @@ -80,7 +87,12 @@ class GenericPlatformManagerImpl_FreeRTOS : public GenericPlatformManagerImpl<Im

#if CHIP_STACK_LOCK_TRACKING_ENABLED
bool _IsChipStackLockedByCurrentThread() const;
#endif // CHIP_STACK_LOCK_TRACKING_ENABLED
#endif

CHIP_ERROR _PostBackgroundEvent(const ChipDeviceEvent * event);
void _RunBackgroundEventLoop(void);
CHIP_ERROR _StartBackgroundEventLoopTask(void);
CHIP_ERROR _StopBackgroundEventLoopTask();

// ===== Methods available to the implementation subclass.

Expand All @@ -97,11 +109,26 @@ class GenericPlatformManagerImpl_FreeRTOS : public GenericPlatformManagerImpl<Im
uint8_t mEventQueueBuffer[CHIP_DEVICE_CONFIG_MAX_EVENT_QUEUE_SIZE * sizeof(ChipDeviceEvent)];
StaticQueue_t mEventQueueStruct;
#endif
#if defined(CHIP_CONFIG_FREERTOS_USE_STATIC_TASK) && CHIP_CONFIG_FREERTOS_USE_STATIC_TASK
StackType_t mEventLoopStack[CHIP_DEVICE_CONFIG_CHIP_TASK_STACK_SIZE / sizeof(StackType_t)];
StaticTask_t mEventLoopTaskStruct;
#endif

std::atomic<bool> mShouldRunEventLoop;

#if defined(CHIP_DEVICE_CONFIG_ENABLE_BG_EVENT_PROCESSING) && CHIP_DEVICE_CONFIG_ENABLE_BG_EVENT_PROCESSING
static void BackgroundEventLoopTaskMain(void * arg);

#if defined(CHIP_CONFIG_FREERTOS_USE_STATIC_QUEUE) && CHIP_CONFIG_FREERTOS_USE_STATIC_QUEUE
uint8_t mBackgroundQueueBuffer[CHIP_DEVICE_CONFIG_BG_MAX_EVENT_QUEUE_SIZE * sizeof(ChipDeviceEvent)];
StaticQueue_t mBackgroundQueueStruct;
#endif
#if defined(CHIP_CONFIG_FREERTOS_USE_STATIC_TASK) && CHIP_CONFIG_FREERTOS_USE_STATIC_TASK
StackType_t mEventLoopStack[CHIP_DEVICE_CONFIG_CHIP_TASK_STACK_SIZE / sizeof(StackType_t)];
StaticTask_t mventLoopTaskStruct;
StackType_t mBackgroundEventLoopStack[CHIP_DEVICE_CONFIG_BG_TASK_STACK_SIZE / sizeof(StackType_t)];
StaticTask_t mBackgroundEventLoopTaskStruct;
#endif

std::atomic<bool> mShouldRunBackgroundEventLoop;
#endif

#if defined(CHIP_CONFIG_FREERTOS_USE_STATIC_SEMAPHORE) && CHIP_CONFIG_FREERTOS_USE_STATIC_SEMAPHORE
Expand Down
Loading