diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-06-01 15:28:32 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-06-01 15:28:54 +1000 |
| commit | 6fd588e970470b15936187980829916d0dbe77bb (patch) | |
| tree | 1b1e73ef52bef2e41499ee5ceadc45efd408050b /src/events/include/event_queue.hpp | |
| parent | db2e29a72d9b934e7b58f1d20ac3768eae484ab5 (diff) | |
| download | tangara-fw-6fd588e970470b15936187980829916d0dbe77bb.tar.gz | |
Add touchwheel -> encoder adapter
Diffstat (limited to 'src/events/include/event_queue.hpp')
| -rw-r--r-- | src/events/include/event_queue.hpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/events/include/event_queue.hpp b/src/events/include/event_queue.hpp index 45d766fd..eb8dd0a0 100644 --- a/src/events/include/event_queue.hpp +++ b/src/events/include/event_queue.hpp @@ -9,6 +9,7 @@ #include <functional> #include <type_traits> +#include "audio_fsm.hpp" #include "freertos/FreeRTOS.h" #include "freertos/portmacro.h" #include "freertos/queue.h" @@ -20,6 +21,11 @@ namespace events { typedef std::function<void(void)> WorkItem; +/* + * Handles communication of events between the system's state machines. Each + * event will be dispatched separately to each FSM, on the correct task for + * that FSM. + */ class EventQueue { public: static EventQueue& GetInstance() { @@ -32,9 +38,11 @@ class EventQueue { WorkItem* item = new WorkItem( [=]() { tinyfsm::FsmList<Machine>::template dispatch<Event>(ev); }); if (std::is_same<Machine, ui::UiState>()) { - xQueueSend(system_handle_, &item, portMAX_DELAY); - } else { xQueueSend(ui_handle_, &item, portMAX_DELAY); + } else if (std::is_same<Machine, audio::AudioState>()) { + xQueueSend(audio_handle_, &item, portMAX_DELAY); + } else { + xQueueSend(system_handle_, &item, portMAX_DELAY); } Dispatch<Event, Machines...>(ev); } @@ -44,6 +52,7 @@ class EventQueue { auto ServiceSystem(TickType_t max_wait_time) -> bool; auto ServiceUi(TickType_t max_wait_time) -> bool; + auto ServiceAudio(TickType_t max_wait_time) -> bool; EventQueue(EventQueue const&) = delete; void operator=(EventQueue const&) = delete; @@ -53,6 +62,7 @@ class EventQueue { QueueHandle_t system_handle_; QueueHandle_t ui_handle_; + QueueHandle_t audio_handle_; }; template <typename Event, typename... Machines> |
