| #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); |
| } |