summaryrefslogtreecommitdiff
path: root/src/main/main.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-07-26 11:23:36 +1000
committerjacqueline <me@jacqueline.id.au>2023-07-26 11:23:36 +1000
commitf94be3db2f2bb6c1b359744cb915683095e4ee80 (patch)
tree79d335db661720947c518a535bdde733fe669032 /src/main/main.cpp
parentd8194135bbaad97d1f3428a74c7fc54ba3f604ec (diff)
downloadtangara-fw-f94be3db2f2bb6c1b359744cb915683095e4ee80.tar.gz
make event queue go faster
Diffstat (limited to 'src/main/main.cpp')
-rw-r--r--src/main/main.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/main/main.cpp b/src/main/main.cpp
index e2c187b1..d283b01d 100644
--- a/src/main/main.cpp
+++ b/src/main/main.cpp
@@ -6,6 +6,9 @@
#include "freertos/portmacro.h"
+#include "gpios.hpp"
+#include "i2c.hpp"
+#include "system_events.hpp"
#include "tinyfsm.hpp"
#include "audio_fsm.hpp"
@@ -14,11 +17,24 @@
#include "ui_fsm.hpp"
extern "C" void app_main(void) {
+ ESP_ERROR_CHECK(drivers::init_i2c());
+ drivers::Gpios* gpios = system_fsm::SystemState::early_init_gpios();
+
+ QueueSetHandle_t set = xQueueCreateSet(2);
+ auto* event_queue = events::queues::SystemAndAudio();
+ xQueueAddToSet(event_queue->has_events(), set);
+ xQueueAddToSet(gpios->IsReadPending(), set);
+
tinyfsm::FsmList<system_fsm::SystemState, ui::UiState,
audio::AudioState>::start();
- auto& queue = events::EventQueue::GetInstance();
while (1) {
- queue.ServiceSystemAndAudio(portMAX_DELAY);
+ QueueSetMemberHandle_t member = xQueueSelectFromSet(set, portMAX_DELAY);
+ if (member == event_queue->has_events()) {
+ event_queue->Service(0);
+ } else if (member == gpios->IsReadPending()) {
+ xSemaphoreTake(member, 0);
+ events::System().Dispatch(system_fsm::internal::GpioInterrupt{});
+ }
}
}