summaryrefslogtreecommitdiff
path: root/src/events/include/event_queue.hpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-06-30 17:05:11 +1000
committerjacqueline <me@jacqueline.id.au>2023-06-30 17:05:11 +1000
commit0347555d5b2314e1be58261ef29fa13a76c039e6 (patch)
treee38879c0dc8bbf0a58057d22b26f28c0a9b86e93 /src/events/include/event_queue.hpp
parent9763cc955c4f3b2c2af54b61c2c5ad77afef9603 (diff)
downloadtangara-fw-0347555d5b2314e1be58261ef29fa13a76c039e6.tar.gz
Start on converting gpio expander interupts to fsm events
Diffstat (limited to 'src/events/include/event_queue.hpp')
-rw-r--r--src/events/include/event_queue.hpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/events/include/event_queue.hpp b/src/events/include/event_queue.hpp
index eb8dd0a0..01f37896 100644
--- a/src/events/include/event_queue.hpp
+++ b/src/events/include/event_queue.hpp
@@ -13,6 +13,7 @@
#include "freertos/FreeRTOS.h"
#include "freertos/portmacro.h"
#include "freertos/queue.h"
+#include "system_fsm.hpp"
#include "tinyfsm.hpp"
#include "ui_fsm.hpp"
@@ -33,6 +34,16 @@ class EventQueue {
return instance;
}
+ template <typename Event>
+ auto DispatchFromISR(const Event& ev) -> bool {
+ WorkItem* item = new WorkItem([=]() {
+ tinyfsm::FsmList<system_fsm::SystemState>::template dispatch<Event>(ev);
+ });
+ BaseType_t ret;
+ xQueueSendFromISR(system_handle_, &item, &ret);
+ return ret;
+ }
+
template <typename Event, typename Machine, typename... Machines>
auto Dispatch(const Event& ev) -> void {
WorkItem* item = new WorkItem(