diff options
Diffstat (limited to 'src/events/event_queue.cpp')
| -rw-r--r-- | src/events/event_queue.cpp | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/src/events/event_queue.cpp b/src/events/event_queue.cpp index 8d60218a..d3a62ef6 100644 --- a/src/events/event_queue.cpp +++ b/src/events/event_queue.cpp @@ -6,34 +6,42 @@ #include "event_queue.hpp" +#include "audio_fsm.hpp" #include "freertos/FreeRTOS.h" #include "freertos/portmacro.h" #include "freertos/queue.h" +#include "system_fsm.hpp" +#include "ui_fsm.hpp" namespace events { -static const std::size_t kMaxPendingEvents = 16; +namespace queues { +static Queue sSystemAndAudio; +static Queue sUi; -EventQueue::EventQueue() - : system_handle_(xQueueCreate(kMaxPendingEvents, sizeof(WorkItem*))), - ui_handle_(xQueueCreate(kMaxPendingEvents, sizeof(WorkItem*))) {} +auto SystemAndAudio() -> Queue* { + return &sSystemAndAudio; +} + +auto Ui() -> Queue* { + return &sUi; +} +} // namespace queues + +static Dispatcher<system_fsm::SystemState> sSystem{queues::SystemAndAudio()}; +static Dispatcher<audio::AudioState> sAudio{queues::SystemAndAudio()}; +static Dispatcher<ui::UiState> sUi{queues::Ui()}; -auto ServiceQueue(QueueHandle_t queue, TickType_t max_wait_time) -> bool { - WorkItem* item; - if (xQueueReceive(queue, &item, max_wait_time)) { - (*item)(); - delete item; - return true; - } - return false; +auto System() -> Dispatcher<system_fsm::SystemState>& { + return sSystem; } -auto EventQueue::ServiceSystemAndAudio(TickType_t max_wait_time) -> bool { - return ServiceQueue(system_handle_, max_wait_time); +auto Audio() -> Dispatcher<audio::AudioState>& { + return sAudio; } -auto EventQueue::ServiceUi(TickType_t max_wait_time) -> bool { - return ServiceQueue(ui_handle_, max_wait_time); +auto Ui() -> Dispatcher<ui::UiState>& { + return sUi; } } // namespace events |
