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.
custom
jacqueline 2 years ago
parent b0d745d02d
commit 86296c187f
  1. 2
      src/drivers/display.cpp
  2. 3
      src/tasks/tasks.cpp
  3. 4
      src/ui/include/ui_fsm.hpp
  4. 7
      src/ui/ui_fsm.cpp

@ -283,7 +283,7 @@ void Display::SendTransaction(TransactionType type,
gpio_set_level(kDisplayDr, type); gpio_set_level(kDisplayDr, type);
// TODO(jacqueline): Handle these errors. // 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); ESP_ERROR_CHECK(ret);
} }

@ -114,8 +114,7 @@ auto Priority<Type::kAudioConverter>() -> UBaseType_t {
} }
// After audio issues, UI jank is the most noticeable kind of scheduling-induced // 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 // 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 // this task directly below audio in terms of priority.
// playback, this priority will be downgraded.
template <> template <>
auto Priority<Type::kUi>() -> UBaseType_t { auto Priority<Type::kUi>() -> UBaseType_t {
return 10; return 10;

@ -49,8 +49,8 @@ class UiState : public tinyfsm::Fsm<UiState> {
void react(const tinyfsm::Event& ev) {} void react(const tinyfsm::Event& ev) {}
virtual void react(const system_fsm::BatteryStateChanged&); virtual void react(const system_fsm::BatteryStateChanged&);
virtual void react(const audio::PlaybackStarted&); virtual void react(const audio::PlaybackStarted&){};
virtual void react(const audio::PlaybackFinished&); virtual void react(const audio::PlaybackFinished&){};
virtual void react(const audio::PlaybackUpdate&) {} virtual void react(const audio::PlaybackUpdate&) {}
virtual void react(const audio::QueueUpdate&) {} virtual void react(const audio::QueueUpdate&) {}

@ -91,13 +91,6 @@ void UiState::react(const system_fsm::BatteryStateChanged&) {
UpdateTopBar(); UpdateTopBar();
} }
void UiState::react(const audio::PlaybackStarted&) {
vTaskPrioritySet(NULL, 0);
}
void UiState::react(const audio::PlaybackFinished&) {
vTaskPrioritySet(NULL, 10);
}
void UiState::UpdateTopBar() { void UiState::UpdateTopBar() {
auto battery_state = sServices->battery().State(); auto battery_state = sServices->battery().State();
bool has_queue = sServices->track_queue().GetCurrent().has_value(); bool has_queue = sServices->track_queue().GetCurrent().has_value();

Loading…
Cancel
Save