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

@ -2,10 +2,8 @@
* @file * @file
* @brief Implementation of system events. * @brief Implementation of system events.
*/ */
#ifndef STA_RTOS_SYSTEM_SYSTEM_EVENT_HPP #ifndef STA_RTOS_SYSTEM_SYSTEM_EVENTS_HPP
#define STA_RTOS_SYSTEM_SYSTEM_EVENT_HPP #define STA_RTOS_SYSTEM_SYSTEM_EVENTS_HPP
#include <sta/rtos/system/names.hpp>
/** /**
@ -22,23 +20,13 @@
* *
* @ingroup STA_RTOS_BuildConfig * @ingroup STA_RTOS_BuildConfig
*/ */
# define STA_RTOS2_SYSTEM_EVENT_ENABLE # define STA_RTOS2_SYSTEM_EVENTS_ENABLE
#endif // DOXYGEN #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 <sta/config.hpp> #include <sta/config.hpp>
#ifdef STA_RTOS_SYSTEM_EVENT_ENABLE #ifdef STA_RTOS_SYSTEM_EVENTS_ENABLE
#include <cstdint> #include <cstdint>
@ -51,13 +39,19 @@
* *
* @ingroup STA_RTOS_SysEvent * @ingroup STA_RTOS_SysEvent
*/ */
#define STA_SYSTEM_EVENT_STARTUP 0x100000U #define STA_SYSTEM_EVENTS_STARTUP 0x100000U
namespace sta namespace sta
{ {
namespace rtos namespace rtos
{ {
/**
* @brief Initialize system events.
*/
void initSystemEvents();
/** /**
* @brief Signal system events. * @brief Signal system events.
* *
@ -98,6 +92,6 @@ namespace sta
} // 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

View File

@ -1,43 +1,67 @@
#include <sta/rtos/system/system_event.hpp> #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> #include <cmsis_os2.h>
#include <FreeRTOS.h>
#define STA_RTOS_SYSTEM_EVENT_HANDLE STA_RTOS_MAKE_HANDLE_NAME(STA_RTOS_SYSTEM_EVENT_NAME) #include <event_groups.h>
// Access handle from freertos.c namespace
extern osEventFlagsId_t STA_RTOS_SYSTEM_EVENT_HANDLE; {
// Static memory for system events
StaticEventGroup_t systemEventControlBlock;
// Event handle
osEventFlagsId_t systemEventsHandle = nullptr;
}
namespace sta namespace sta
{ {
namespace rtos 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) 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) 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() void signalStartupEvent()
{ {
signalSystemEvents(STA_SYSTEM_EVENT_STARTUP); signalSystemEvents(STA_SYSTEM_EVENTS_STARTUP);
} }
void waitForStartupEvent() void waitForStartupEvent()
{ {
waitForSystemEvents(STA_SYSTEM_EVENT_STARTUP, osFlagsWaitAll, osWaitForever); waitForSystemEvents(STA_SYSTEM_EVENTS_STARTUP, osFlagsWaitAll, osWaitForever);
} }
} // namespace rtos } // namespace rtos
} // namespace sta } // namespace sta
#endif // STA_RTOS_SYSTEM_EVENT_ENABLE #endif // STA_RTOS_SYSTEM_EVENTS_ENABLE