Simplify system events API

This commit is contained in:
Henrik Stickann
2023-01-20 15:07:00 +01:00
parent f866e27081
commit 1c8e427bc3
2 changed files with 48 additions and 30 deletions

View File

@@ -1,43 +1,67 @@
#include <sta/rtos/system/system_event.hpp>
#ifdef STA_RTOS_SYSTEM_EVENTS_ENABLE
#ifdef STA_RTOS_SYSTEM_EVENT_ENABLE
#include <sta/assert.hpp>
#include <cmsis_os2.h>
#define STA_RTOS_SYSTEM_EVENT_HANDLE STA_RTOS_MAKE_HANDLE_NAME(STA_RTOS_SYSTEM_EVENT_NAME)
#include <FreeRTOS.h>
#include <event_groups.h>
// Access handle from freertos.c
extern osEventFlagsId_t STA_RTOS_SYSTEM_EVENT_HANDLE;
namespace
{
// Static memory for system events
StaticEventGroup_t systemEventControlBlock;
// Event handle
osEventFlagsId_t systemEventsHandle = nullptr;
}
namespace sta
{
namespace rtos
{
void initSystemEvents()
{
// Create event using static allocation
const osEventFlagsAttr_t attributes = {
.name = "systemEvent",
.cb_mem = &systemEventControlBlock,
.cb_size = sizeof(systemEventControlBlock),
};
if (systemEventsHandle == nullptr)
{
systemEventsHandle = osEventFlagsNew(&attributes);
}
}
void signalSystemEvents(uint32_t flags)
{
osEventFlagsSet(STA_RTOS_SYSTEM_EVENT_HANDLE, flags);
STA_ASSERT_MSG(systemEventsHandle != nullptr, "System events not initialized");
osEventFlagsSet(systemEventsHandle, flags);
}
void waitForSystemEvents(uint32_t flags, uint32_t options, uint32_t timeout)
{
osEventFlagsWait(STA_RTOS_SYSTEM_EVENT_HANDLE, flags, options | osFlagsNoClear, timeout);
STA_ASSERT_MSG(systemEventsHandle != nullptr, "System events not initialized");
osEventFlagsWait(systemEventsHandle, flags, options | osFlagsNoClear, timeout);
}
void signalStartupEvent()
{
signalSystemEvents(STA_SYSTEM_EVENT_STARTUP);
signalSystemEvents(STA_SYSTEM_EVENTS_STARTUP);
}
void waitForStartupEvent()
{
waitForSystemEvents(STA_SYSTEM_EVENT_STARTUP, osFlagsWaitAll, osWaitForever);
waitForSystemEvents(STA_SYSTEM_EVENTS_STARTUP, osFlagsWaitAll, osWaitForever);
}
} // namespace rtos
} // namespace sta
#endif // STA_RTOS_SYSTEM_EVENT_ENABLE
#endif // STA_RTOS_SYSTEM_EVENTS_ENABLE