diff options
Diffstat (limited to 'src/events/include')
| -rw-r--r-- | src/events/include/event_queue.hpp | 11 |
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( |
