diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-05-19 21:21:27 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-05-19 21:21:27 +1000 |
| commit | a6ab1504058304012791281f9eb42c262745888f (patch) | |
| tree | f82379cd1e66a8ae2f1afbae5cf083a8ab7acc53 /src/events/event_queue.cpp | |
| parent | b320a6a863cf1c10dc79254af41f573730935564 (diff) | |
| download | tangara-fw-a6ab1504058304012791281f9eb42c262745888f.tar.gz | |
Add tinyfsm, start converting core functions to an FSM-based event loop
Diffstat (limited to 'src/events/event_queue.cpp')
| -rw-r--r-- | src/events/event_queue.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/events/event_queue.cpp b/src/events/event_queue.cpp new file mode 100644 index 00000000..b0bae857 --- /dev/null +++ b/src/events/event_queue.cpp @@ -0,0 +1,23 @@ +#include "event_queue.hpp" + +#include "freertos/FreeRTOS.h" +#include "freertos/queue.h" + +namespace events { + +static const std::size_t kMaxPendingEvents = 16; + +EventQueue::EventQueue() + : handle_(xQueueCreate(kMaxPendingEvents, sizeof(WorkItem*))) {} + +auto EventQueue::Service(TickType_t max_wait_time) -> bool { + WorkItem* item; + if (xQueueReceive(handle_, &item, max_wait_time)) { + (*item)(); + delete item; + return true; + } + return false; +} + +} // namespace events |
