summaryrefslogtreecommitdiff
path: root/src/events/include/event_queue.hpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2024-05-02 19:12:26 +1000
committerjacqueline <me@jacqueline.id.au>2024-05-02 19:12:26 +1000
commit1573a8c4cde1cd9528b422b2dcc598e37ffe94a7 (patch)
treed162822b8fd7054f81bace0c7a65ab4d5e6f93ef /src/events/include/event_queue.hpp
parenta231fd1c8afedbeb14b0bc77d76bad61db986059 (diff)
downloadtangara-fw-1573a8c4cde1cd9528b422b2dcc598e37ffe94a7.tar.gz
WIP merge cyclically dependent components into one big component
Diffstat (limited to 'src/events/include/event_queue.hpp')
-rw-r--r--src/events/include/event_queue.hpp103
1 files changed, 0 insertions, 103 deletions
diff --git a/src/events/include/event_queue.hpp b/src/events/include/event_queue.hpp
deleted file mode 100644
index 78b21d53..00000000
--- a/src/events/include/event_queue.hpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright 2023 jacqueline <me@jacqueline.id.au>
- *
- * SPDX-License-Identifier: GPL-3.0-only
- */
-
-#pragma once
-
-#include <functional>
-#include <mutex>
-#include <queue>
-#include <type_traits>
-
-#include "audio_fsm.hpp"
-#include "freertos/FreeRTOS.h"
-#include "freertos/portmacro.h"
-#include "freertos/queue.h"
-#include "system_fsm.hpp"
-#include "tinyfsm.hpp"
-
-#include "ui_fsm.hpp"
-
-namespace events {
-
-class Queue {
- public:
- Queue() : has_events_(xSemaphoreCreateBinary()), mut_(), events_() {}
-
- auto Add(std::function<void(void)> fn) {
- {
- std::lock_guard<std::mutex> lock{mut_};
- events_.push_back(fn);
- }
- xSemaphoreGive(has_events_);
- }
-
- auto Service(TickType_t max_wait) -> bool {
- bool res = xSemaphoreTake(has_events_, max_wait);
- if (!res) {
- return false;
- }
-
- bool had_work = false;
- for (;;) {
- std::function<void(void)> fn;
- {
- std::lock_guard<std::mutex> lock{mut_};
- if (events_.empty()) {
- return had_work;
- }
- had_work = true;
- fn = events_.front();
- events_.pop_front();
- }
- std::invoke(fn);
- }
- }
-
- auto has_events() -> SemaphoreHandle_t { return has_events_; }
-
- Queue(Queue const&) = delete;
- void operator=(Queue const&) = delete;
-
- private:
- SemaphoreHandle_t has_events_;
- std::mutex mut_;
- std::list<std::function<void(void)>> events_;
-};
-
-template <class Machine>
-class Dispatcher {
- public:
- Dispatcher(Queue* queue) : queue_(queue) {}
-
- template <typename Event>
- auto Dispatch(const Event& ev) -> void {
- auto dispatch_fn = [=]() {
- tinyfsm::FsmList<Machine>::template dispatch<Event>(ev);
- };
- queue_->Add(dispatch_fn);
- }
-
- auto RunOnTask(const std::function<void(void)>& fn) -> void {
- queue_->Add(fn);
- }
-
- Dispatcher(Dispatcher const&) = delete;
- void operator=(Dispatcher const&) = delete;
-
- private:
- Queue* queue_;
-};
-
-namespace queues {
-auto SystemAndAudio() -> Queue*;
-auto Ui() -> Queue*;
-} // namespace queues
-
-auto System() -> Dispatcher<system_fsm::SystemState>&;
-auto Audio() -> Dispatcher<audio::AudioState>&;
-auto Ui() -> Dispatcher<ui::UiState>&;
-
-} // namespace events