summaryrefslogtreecommitdiff
path: root/src/events/include/event_queue.hpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-05-24 13:30:05 +1000
committerjacqueline <me@jacqueline.id.au>2023-05-24 13:30:05 +1000
commit65833649f4779754e90760c1f0fc81ed220c84d0 (patch)
tree7aa4baa722edb7db80055fdeb9e8053766707259 /src/events/include/event_queue.hpp
parent3b371cfc544d4b7c462d0a32d06525ab2b970875 (diff)
downloadtangara-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.hpp23
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>