diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-05-24 13:30:05 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-05-24 13:30:05 +1000 |
| commit | 65833649f4779754e90760c1f0fc81ed220c84d0 (patch) | |
| tree | 7aa4baa722edb7db80055fdeb9e8053766707259 /src/events/include/event_queue.hpp | |
| parent | 3b371cfc544d4b7c462d0a32d06525ab2b970875 (diff) | |
| download | tangara-fw-65833649f4779754e90760c1f0fc81ed220c84d0.tar.gz | |
Add some placeholder splash and menu screens
Includes a bunch of misc display fixes. Most significantly, our lvgl
tickers was busted.
Diffstat (limited to 'src/events/include/event_queue.hpp')
| -rw-r--r-- | src/events/include/event_queue.hpp | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/events/include/event_queue.hpp b/src/events/include/event_queue.hpp index f57af08e..45d766fd 100644 --- a/src/events/include/event_queue.hpp +++ b/src/events/include/event_queue.hpp @@ -7,12 +7,15 @@ #pragma once #include <functional> +#include <type_traits> #include "freertos/FreeRTOS.h" #include "freertos/portmacro.h" #include "freertos/queue.h" #include "tinyfsm.hpp" +#include "ui_fsm.hpp" + namespace events { typedef std::function<void(void)> WorkItem; @@ -24,14 +27,23 @@ class EventQueue { return instance; } - template <typename Event, typename... Machines> + template <typename Event, typename Machine, typename... Machines> auto Dispatch(const Event& ev) -> void { WorkItem* item = new WorkItem( - [=]() { tinyfsm::FsmList<Machines...>::template dispatch<Event>(ev); }); - xQueueSend(handle_, &item, portMAX_DELAY); + [=]() { 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); + } + Dispatch<Event, Machines...>(ev); } - auto Service(TickType_t max_wait_time) -> bool; + template <typename Event> + auto Dispatch(const Event& ev) -> void {} + + auto ServiceSystem(TickType_t max_wait_time) -> bool; + auto ServiceUi(TickType_t max_wait_time) -> bool; EventQueue(EventQueue const&) = delete; void operator=(EventQueue const&) = delete; @@ -39,7 +51,8 @@ class EventQueue { private: EventQueue(); - QueueHandle_t handle_; + QueueHandle_t system_handle_; + QueueHandle_t ui_handle_; }; template <typename Event, typename... Machines> |
