1616#include "esp_lcd_panel_ops.h"
1717#include "esp_lcd_panel_rgb.h"
1818#include "esp_lvgl_port.h"
19+ #include "esp_lvgl_rgb.h"
1920
2021#include "lvgl.h"
2122
@@ -81,11 +82,6 @@ typedef struct lvgl_port_ctx_s {
8182#endif
8283} lvgl_port_ctx_t ;
8384
84- typedef struct {
85- esp_lcd_panel_handle_t rgb_handle ;
86- uint32_t rgb_ref_period ;
87- } lv_manual_refresh ;
88-
8985#ifdef ESP_LVGL_PORT_TOUCH_COMPONENT
9086typedef struct {
9187 esp_lcd_touch_handle_t handle ; /* LCD touch IO handle */
@@ -126,7 +122,6 @@ typedef struct {
126122static lvgl_port_ctx_t lvgl_port_ctx ;
127123static int lvgl_port_timer_period_ms = 5 ;
128124static TaskHandle_t lvgl_task_handle = NULL ;
129- static TaskHandle_t lcd_task_handle = NULL ;
130125
131126/*******************************************************************************
132127* Function definitions
@@ -137,7 +132,6 @@ static void lvgl_port_task_deinit(void);
137132
138133// LVGL callbacks
139134#if LVGL_PORT_HANDLE_FLUSH_READY
140- static bool lvgl_port_rgb_on_vsync_callback (esp_lcd_panel_handle_t panel , const esp_lcd_rgb_panel_event_data_t * edata , void * user_ctx );
141135static bool lvgl_port_flush_ready_callback (esp_lcd_panel_io_handle_t panel_io , esp_lcd_panel_io_event_data_t * edata , void * user_ctx );
142136#endif
143137static void lvgl_port_flush_callback (lv_disp_drv_t * drv , const lv_area_t * area , lv_color_t * color_map );
@@ -248,37 +242,6 @@ esp_err_t lvgl_port_deinit(void)
248242 return ESP_OK ;
249243}
250244
251- static void lvgl_manual_task (void * arg )
252- {
253- TickType_t tick ;
254- lv_manual_refresh * refresh = (lv_manual_refresh * )arg ;
255-
256- ESP_LOGI (TAG , "Starting LCD refresh task" );
257-
258- for (;;) {
259- esp_lcd_rgb_panel_refresh (refresh -> rgb_handle );
260- tick = xTaskGetTickCount ();
261- ulTaskNotifyTake (pdTRUE , portMAX_DELAY );
262- vTaskDelayUntil (& tick , pdMS_TO_TICKS (refresh -> rgb_ref_period ));
263- }
264- }
265-
266- esp_err_t create_manual_task (const lvgl_port_display_cfg_t * disp_cfg )
267- {
268- static lv_manual_refresh refresh ;
269-
270- refresh .rgb_handle = disp_cfg -> panel_handle ;
271- refresh .rgb_ref_period = disp_cfg -> trans_mode .flags .ref_period ;
272-
273- BaseType_t ret = xTaskCreate (lvgl_manual_task , "LCD" , 2048 , & refresh , disp_cfg -> trans_mode .flags .ref_priority , & lcd_task_handle );
274- if (ret != pdPASS ) {
275- ESP_LOGE (TAG , "Failed to create LCD task" );
276- return ESP_FAIL ;
277- }
278-
279- return ESP_OK ;
280- }
281-
282245lv_disp_t * lvgl_port_add_disp (const lvgl_port_display_cfg_t * disp_cfg )
283246{
284247 esp_err_t ret = ESP_OK ;
@@ -348,20 +311,13 @@ lv_disp_t *lvgl_port_add_disp(const lvgl_port_display_cfg_t *disp_cfg)
348311 disp_ctx -> disp_drv .user_data = disp_ctx ;
349312
350313 if (disp_cfg -> trans_mode .manual_mode ) {
351- create_manual_task (disp_cfg );
314+ lvgl_rgb_create_manual_task (disp_cfg );
352315 }
353316
354317#if LVGL_PORT_HANDLE_FLUSH_READY
355318 /* Register done callback */
356319 if (disp_cfg -> flags .interface_RGB ) {
357- const esp_lcd_rgb_panel_event_callbacks_t cbs = {
358- #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL (5 , 1 , 2 ) && CONFIG_BSP_LCD_RGB_BOUNCE_BUFFER_MODE
359- .on_bounce_frame_finish = lvgl_port_rgb_on_vsync_callback ,
360- #else
361- .on_vsync = lvgl_port_rgb_on_vsync_callback ,
362- #endif
363- };
364- esp_lcd_rgb_panel_register_event_callbacks (disp_ctx -> panel_handle , & cbs , & disp_ctx -> disp_drv );
320+ lvgl_rgb_register_event_callbacks (disp_ctx , disp_cfg );
365321 } else {
366322 const esp_lcd_panel_io_callbacks_t cbs = {
367323 .on_color_trans_done = lvgl_port_flush_ready_callback ,
@@ -736,8 +692,6 @@ void lvgl_port_flush_ready(lv_disp_t *disp)
736692 lv_disp_flush_ready (disp -> driver );
737693}
738694
739-
740-
741695/*******************************************************************************
742696* Private functions
743697*******************************************************************************/
@@ -780,25 +734,6 @@ static void lvgl_port_task_deinit(void)
780734}
781735
782736#if LVGL_PORT_HANDLE_FLUSH_READY
783- IRAM_ATTR static bool lvgl_port_rgb_on_vsync_callback (esp_lcd_panel_handle_t panel_handle , const esp_lcd_rgb_panel_event_data_t * edata , void * user_ctx )
784- {
785- BaseType_t need_yield = pdFALSE ;
786-
787- lv_disp_drv_t * disp_drv = (lv_disp_drv_t * )user_ctx ;
788- assert (disp_drv != NULL );
789- lvgl_port_display_ctx_t * disp_ctx = disp_drv -> user_data ;
790-
791- if (disp_ctx -> lcd_manual_mode ) {
792- xTaskNotifyFromISR (lcd_task_handle , ULONG_MAX , eNoAction , & need_yield );
793- }
794-
795- if (disp_ctx -> lcd_transdone_cb ) {
796- need_yield = disp_ctx -> lcd_transdone_cb (panel_handle , user_ctx );
797- }
798-
799- return (need_yield == pdTRUE );
800- }
801-
802737static bool lvgl_port_flush_ready_callback (esp_lcd_panel_io_handle_t panel_io , esp_lcd_panel_io_event_data_t * edata , void * user_ctx )
803738{
804739 lv_disp_drv_t * disp_drv = (lv_disp_drv_t * )user_ctx ;
0 commit comments