| #pragma once | |
| #include "FreeRTOS.h" | |
| #include <event.h> | |
| #include <stdint.h> | |
| #include <stdlib.h> | |
| /** | |
| * Type for bits in an event group. | |
| */ | |
| typedef uint32_t EventBits_t; | |
| /** | |
| * Type for event group handles. | |
| */ | |
| typedef struct EventGroup *EventGroupHandle_t; | |
| /** | |
| * Create a new event group on the heap. Returns NULL on allocation failure. | |
| */ | |
| static inline EventGroupHandle_t xEventGroupCreate(void) | |
| { | |
| struct EventGroup *ret; | |
| struct Timeout timeout = {0, UnlimitedTimeout}; | |
| int rv = eventgroup_create(&timeout, MALLOC_CAPABILITY, &ret); | |
| if (rv == 0) | |
| { | |
| return ret; | |
| } | |
| return NULL; | |
| } | |
| /** | |
| * Set bits in an event group. Returns the new value of the event group after | |
| * this call. If the timeout expires, the new bits may not have been set. | |
| */ | |
| static inline EventBits_t xEventGroupSetBits(EventGroupHandle_t xEventGroup, | |
| const EventBits_t uxBitsToSet) | |
| { | |
| EventBits_t ret; | |
| struct Timeout timeout = {0, UnlimitedTimeout}; | |
| eventgroup_set(&timeout, xEventGroup, &ret, uxBitsToSet); | |
| return ret; | |
| } | |
| /** | |
| * Wait for bits in an event group to be set. Returns the new value of the | |
| * bits that are currently set. Blocks until either the timeout expires or | |
| * some or all `uxBitsToWaitFor` are set, depending on the value of | |
| * `xWaitForAllBits`. If `xClearOnExit` is true, the bits that were set are | |
| * cleared before returning. | |
| */ | |
| static inline EventBits_t xEventGroupWaitBits(EventGroupHandle_t xEventGroup, | |
| const EventBits_t uxBitsToWaitFor, | |
| const BaseType_t xClearOnExit, | |
| const BaseType_t xWaitForAllBits, | |
| TickType_t xTicksToWait) | |
| { | |
| uint32_t ret; | |
| struct Timeout timeout = {0, xTicksToWait}; | |
| int rv = eventgroup_wait(&timeout, | |
| xEventGroup, | |
| &ret, | |
| uxBitsToWaitFor, | |
| xWaitForAllBits, | |
| xClearOnExit); | |
| return ret; | |
| } | |
| /** | |
| * Delete an event group. | |
| */ | |
| static inline void vEventGroupDelete(EventGroupHandle_t xEventGroup) | |
| { | |
| eventgroup_destroy(MALLOC_CAPABILITY, xEventGroup); | |
| } |