From 0032896251d8ddc6c2775495445da8fceffba98e Mon Sep 17 00:00:00 2001 From: jacqueline Date: Tue, 5 Sep 2023 09:51:10 +1000 Subject: Move UI task to priority 0 during playback Also other misc task cleanup --- src/drivers/display.cpp | 52 ++++++----------------------------------- src/drivers/include/display.hpp | 2 -- 2 files changed, 7 insertions(+), 47 deletions(-) (limited to 'src/drivers') diff --git a/src/drivers/display.cpp b/src/drivers/display.cpp index e04de477..0664638b 100644 --- a/src/drivers/display.cpp +++ b/src/drivers/display.cpp @@ -60,19 +60,6 @@ static const int kDisplayBufferSize = (kDisplayWidth * kDisplayHeight) / 10; DMA_ATTR static lv_color_t sBuffer1[kDisplayBufferSize]; DMA_ATTR static lv_color_t sBuffer2[kDisplayBufferSize]; -struct RenderTaskArgs { - std::atomic* quit; - QueueHandle_t work_queue; -}; - -struct FlushArgs { - lv_disp_drv_t* driver; - const lv_area_t* area; - lv_color_t* color_map; -}; - -void RenderMain(void* raw_args); - namespace drivers { /* @@ -81,8 +68,10 @@ namespace drivers { extern "C" void FlushDataCallback(lv_disp_drv_t* disp_drv, const lv_area_t* area, lv_color_t* color_map) { + taskYIELD(); Display* instance = static_cast(disp_drv->user_data); instance->OnLvglFlush(disp_drv, area, color_map); + taskYIELD(); } auto Display::Create(IGpios& expander, @@ -155,7 +144,6 @@ auto Display::Create(IGpios& expander, auto display = std::make_unique(expander, handle); // Now we reset the display into a known state, then configure it - // TODO(jacqueline): set rotation ESP_LOGI(kTag, "Sending init sequences"); for (int i = 0; i < init_data.num_sequences; i++) { display->SendInitialisationSequence(init_data.sequences[i]); @@ -183,13 +171,7 @@ auto Display::Create(IGpios& expander, } Display::Display(IGpios& gpio, spi_device_handle_t handle) - : gpio_(gpio), - handle_(handle), - worker_task_(tasks::Worker::Start()), - display_on_(false), - brightness_(0) { - SetBrightness(50); -} + : gpio_(gpio), handle_(handle), display_on_(false), brightness_(0) {} Display::~Display() { ledc_fade_func_uninstall(); @@ -303,10 +285,6 @@ void Display::SendTransaction(TransactionType type, void Display::OnLvglFlush(lv_disp_drv_t* disp_drv, const lv_area_t* area, lv_color_t* color_map) { - // area is stack-allocated, so it isn't safe to reference from the flush - // thread. - lv_area_t area_copy = *area; - // worker_task_->Dispatch([=, this]() { // Ideally we want to complete a single flush as quickly as possible, so // grab the bus for this entire transaction sequence. spi_device_acquire_bus(handle_, portMAX_DELAY); @@ -314,13 +292,13 @@ void Display::OnLvglFlush(lv_disp_drv_t* disp_drv, // First we need to specify the rectangle of the display we're writing into. uint16_t data[2] = {0, 0}; - data[0] = SPI_SWAP_DATA_TX(area_copy.x1, 16); - data[1] = SPI_SWAP_DATA_TX(area_copy.x2, 16); + data[0] = SPI_SWAP_DATA_TX(area->x1, 16); + data[1] = SPI_SWAP_DATA_TX(area->x2, 16); SendCommandWithData(displays::ST77XX_CASET, reinterpret_cast(data), 4); - data[0] = SPI_SWAP_DATA_TX(area_copy.y1, 16); - data[1] = SPI_SWAP_DATA_TX(area_copy.y2, 16); + data[0] = SPI_SWAP_DATA_TX(area->y1, 16); + data[1] = SPI_SWAP_DATA_TX(area->y2, 16); SendCommandWithData(displays::ST77XX_RASET, reinterpret_cast(data), 4); @@ -332,22 +310,6 @@ void Display::OnLvglFlush(lv_disp_drv_t* disp_drv, spi_device_release_bus(handle_); lv_disp_flush_ready(&driver_); - //}); -} - -void RenderMain(void* raw_args) { - RenderTaskArgs* args = reinterpret_cast(raw_args); - QueueHandle_t queue = args->work_queue; - std::atomic* quit = args->quit; - delete args; - - while (!quit->load()) { - // TODO: flush data here! Yay speed. - } - - vQueueDelete(queue); - delete quit; - vTaskDelete(NULL); } } // namespace drivers diff --git a/src/drivers/include/display.hpp b/src/drivers/include/display.hpp index 766fc4ea..b0aa5d58 100644 --- a/src/drivers/include/display.hpp +++ b/src/drivers/include/display.hpp @@ -52,8 +52,6 @@ class Display { IGpios& gpio_; spi_device_handle_t handle_; - std::unique_ptr worker_task_; - bool display_on_; uint_fast8_t brightness_; -- cgit v1.2.3