From 1c8e427bc3f005cd8660d788d6102e8623220730 Mon Sep 17 00:00:00 2001 From: Henrik Stickann <4376396-Mithradir@users.noreply.gitlab.com> Date: Fri, 20 Jan 2023 15:07:00 +0100 Subject: [PATCH] Simplify system events API --- include/sta/rtos/system/system_event.hpp | 34 ++++++++---------- src/system/system_event.cpp | 44 ++++++++++++++++++------ 2 files changed, 48 insertions(+), 30 deletions(-) diff --git a/include/sta/rtos/system/system_event.hpp b/include/sta/rtos/system/system_event.hpp index f6465f3..3018090 100644 --- a/include/sta/rtos/system/system_event.hpp +++ b/include/sta/rtos/system/system_event.hpp @@ -2,10 +2,8 @@ * @file * @brief Implementation of system events. */ -#ifndef STA_RTOS_SYSTEM_SYSTEM_EVENT_HPP -#define STA_RTOS_SYSTEM_SYSTEM_EVENT_HPP - -#include +#ifndef STA_RTOS_SYSTEM_SYSTEM_EVENTS_HPP +#define STA_RTOS_SYSTEM_SYSTEM_EVENTS_HPP /** @@ -22,23 +20,13 @@ * * @ingroup STA_RTOS_BuildConfig */ -# define STA_RTOS2_SYSTEM_EVENT_ENABLE +# define STA_RTOS2_SYSTEM_EVENTS_ENABLE #endif // DOXYGEN -/** - * @def STA_RTOS_SYSTEM_EVENT_NAME - * @brief Set name of system event flags. - * - * @ingroup STA_RTOS_BuildConfig - */ -#ifndef STA_RTOS_SYSTEM_EVENT_NAME -# define STA_RTOS_SYSTEM_EVENT_NAME systemEvent -#endif // !STA_RTOS_SYSTEM_EVENT_NAME - - #include -#ifdef STA_RTOS_SYSTEM_EVENT_ENABLE +#ifdef STA_RTOS_SYSTEM_EVENTS_ENABLE + #include @@ -51,13 +39,19 @@ * * @ingroup STA_RTOS_SysEvent */ -#define STA_SYSTEM_EVENT_STARTUP 0x100000U +#define STA_SYSTEM_EVENTS_STARTUP 0x100000U namespace sta { namespace rtos { + /** + * @brief Initialize system events. + */ + void initSystemEvents(); + + /** * @brief Signal system events. * @@ -98,6 +92,6 @@ namespace sta } // namespace sta -#endif // STA_RTOS_SYSTEM_EVENT_ENABLE +#endif // STA_RTOS_SYSTEM_EVENTS_ENABLE -#endif // STA_RTOS_SYSTEM_SYSTEM_EVENT_HPP +#endif // STA_RTOS_SYSTEM_SYSTEM_EVENTS_HPP diff --git a/src/system/system_event.cpp b/src/system/system_event.cpp index 7e96fa9..b9d86ed 100644 --- a/src/system/system_event.cpp +++ b/src/system/system_event.cpp @@ -1,43 +1,67 @@ #include +#ifdef STA_RTOS_SYSTEM_EVENTS_ENABLE -#ifdef STA_RTOS_SYSTEM_EVENT_ENABLE +#include #include - -#define STA_RTOS_SYSTEM_EVENT_HANDLE STA_RTOS_MAKE_HANDLE_NAME(STA_RTOS_SYSTEM_EVENT_NAME) +#include +#include -// 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