From 343618411c00ec496a1b26ab81e461557ca38009 Mon Sep 17 00:00:00 2001 From: Christian Baars Date: Fri, 25 Aug 2023 12:11:23 +0200 Subject: [PATCH] Fix crash of uDisplay on ESP32S3 with IDF5.1 (#19383) * fix compile of uDisplay with IDF5.x on ESP32S3 * fix crash with uDisplay on S3 with IDF5.1 --- lib/lib_display/UDisplay/uDisplay.cpp | 11 ++++++++++- lib/lib_display/UDisplay/uDisplay.h | 7 ++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/lib_display/UDisplay/uDisplay.cpp b/lib/lib_display/UDisplay/uDisplay.cpp index f271457dfc9a..2f48351cc274 100755 --- a/lib/lib_display/UDisplay/uDisplay.cpp +++ b/lib/lib_display/UDisplay/uDisplay.cpp @@ -959,9 +959,16 @@ Renderer *uDisplay::Init(void) { uint16_t color = random(0xffff); ESP_ERROR_CHECK(_panel_handle->draw_bitmap(_panel_handle, 0, 0, 1, 1, &color)); +#if ESP_IDF_VERSION_MAJOR < 5 _rgb_panel = __containerof(_panel_handle, esp_rgb_panel_t, base); - rgb_fb = (uint16_t *)_rgb_panel->fb; +#else + void * buf = NULL; + esp_lcd_rgb_panel_get_frame_buffer(_panel_handle, 1, &buf); + rgb_fb = (uint16_t *)buf; +#endif + + #endif // USE_ESP32_S3 } @@ -1036,7 +1043,9 @@ Renderer *uDisplay::Init(void) { esp_lcd_new_i80_bus(&bus_config, &_i80_bus); +#if ESP_IDF_VERSION_MAJOR < 5 _dma_chan = _i80_bus->dma_chan; +#endif uint32_t div_a, div_b, div_n, clkcnt; calcClockDiv(&div_a, &div_b, &div_n, &clkcnt, 240*1000*1000, spi_speed*1000000); diff --git a/lib/lib_display/UDisplay/uDisplay.h b/lib/lib_display/UDisplay/uDisplay.h index bf36ca0a068e..88bcdce6f5dd 100755 --- a/lib/lib_display/UDisplay/uDisplay.h +++ b/lib/lib_display/UDisplay/uDisplay.h @@ -116,7 +116,7 @@ enum uColorType { uCOLOR_BW, uCOLOR_COLOR }; #define SPI_DC_HIGH if (spi_dc >= 0) GPIO_SET_SLOW(spi_dc); -#ifdef USE_ESP32_S3 +#if defined(USE_ESP32_S3) && ESP_IDF_VERSION_MAJOR < 5 struct esp_lcd_i80_bus_t { int bus_id; // Bus ID, index from 0 portMUX_TYPE spinlock; // spinlock used to protect i80 bus members(hal, device_list, cur_trans) @@ -163,8 +163,7 @@ struct esp_rgb_panel_t } flags; dma_descriptor_t dma_nodes[]; // DMA descriptor pool of size `num_dma_nodes` }; - -#endif +#endif //USE_ESP32_S3 && ESP_IDF_VERSION_MAJOR < 5 class uDisplay : public Renderer { @@ -360,7 +359,9 @@ class uDisplay : public Renderer { uint16_t pclk_active_neg; esp_lcd_panel_handle_t _panel_handle = NULL; +#if ESP_IDF_VERSION_MAJOR < 5 esp_rgb_panel_t *_rgb_panel; +#endif //ESP_IDF_VERSION_MAJOR < 5 uint16_t *rgb_fb;