summaryrefslogtreecommitdiff
path: root/src/events/event_queue.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/events/event_queue.cpp')
-rw-r--r--src/events/event_queue.cpp40
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