From 86296c187f799eb94fe504e2491d7d991640fadc Mon Sep 17 00:00:00 2001 From: jacqueline Date: Tue, 12 Sep 2023 14:11:40 +1000 Subject: [PATCH] Use interrupt-based spi for the display This solves our "audio stutters while scrolling" problem better! Turns out the real root cause was the polling SPI driver blocking a whole CPU during playback. --- src/drivers/display.cpp | 2 +- src/tasks/tasks.cpp | 3 +-- src/ui/include/ui_fsm.hpp | 4 ++-- src/ui/ui_fsm.cpp | 7 ------- 4 files changed, 4 insertions(+), 12 deletions(-) diff --git a/src/drivers/display.cpp b/src/drivers/display.cpp index e261402d..a0ace021 100644 --- a/src/drivers/display.cpp +++ b/src/drivers/display.cpp @@ -283,7 +283,7 @@ void Display::SendTransaction(TransactionType type, gpio_set_level(kDisplayDr, type); // TODO(jacqueline): Handle these errors. - esp_err_t ret = spi_device_polling_transmit(handle_, transaction_); + esp_err_t ret = spi_device_transmit(handle_, transaction_); ESP_ERROR_CHECK(ret); } diff --git a/src/tasks/tasks.cpp b/src/tasks/tasks.cpp index ae7b9eb2..fccdfd8b 100644 --- a/src/tasks/tasks.cpp +++ b/src/tasks/tasks.cpp @@ -114,8 +114,7 @@ auto Priority() -> UBaseType_t { } // After audio issues, UI jank is the most noticeable kind of scheduling-induced // slowness that the user is likely to notice or care about. Therefore we place -// this task directly below audio in terms of priority. Note that during audio -// playback, this priority will be downgraded. +// this task directly below audio in terms of priority. template <> auto Priority() -> UBaseType_t { return 10; diff --git a/src/ui/include/ui_fsm.hpp b/src/ui/include/ui_fsm.hpp index de97354e..b8d2b1a0 100644 --- a/src/ui/include/ui_fsm.hpp +++ b/src/ui/include/ui_fsm.hpp @@ -49,8 +49,8 @@ class UiState : public tinyfsm::Fsm { void react(const tinyfsm::Event& ev) {} virtual void react(const system_fsm::BatteryStateChanged&); - virtual void react(const audio::PlaybackStarted&); - virtual void react(const audio::PlaybackFinished&); + virtual void react(const audio::PlaybackStarted&){}; + virtual void react(const audio::PlaybackFinished&){}; virtual void react(const audio::PlaybackUpdate&) {} virtual void react(const audio::QueueUpdate&) {} diff --git a/src/ui/ui_fsm.cpp b/src/ui/ui_fsm.cpp index 70a77c2a..eeaea500 100644 --- a/src/ui/ui_fsm.cpp +++ b/src/ui/ui_fsm.cpp @@ -91,13 +91,6 @@ void UiState::react(const system_fsm::BatteryStateChanged&) { UpdateTopBar(); } -void UiState::react(const audio::PlaybackStarted&) { - vTaskPrioritySet(NULL, 0); -} -void UiState::react(const audio::PlaybackFinished&) { - vTaskPrioritySet(NULL, 10); -} - void UiState::UpdateTopBar() { auto battery_state = sServices->battery().State(); bool has_queue = sServices->track_queue().GetCurrent().has_value();