Skip to content

Commit b55b4d1

Browse files
committed
fix(bus & lcd): update RGB conf based on esp-idf v5.4
1 parent 9962ef4 commit b55b4d1

File tree

4 files changed

+132
-58
lines changed

4 files changed

+132
-58
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
### Enhancements:
66

77
* feat(lcd): add LCD controller JD9365 @Y1hsiaochunnn (#123)
8+
* fix(bus & lcd): update RGB conf based on esp-idf v5.4
89
* feat(board): add board Waveshare ESP32-P4-NANO @Y1hsiaochunnn (#123)
910
* feat(board): add board Waveshare ESP32-S3-Touch-LCD-4.3B/5/5B/7 @H-sw123 (#124)
1011
* feat(board): add configuration for ignoring board in Kconfig

src/ESP_Panel.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,8 +231,12 @@ bool ESP_Panel::init(void)
231231
.bits_per_pixel = ESP_PANEL_LCD_RGB_PIXEL_BITS,
232232
.num_fbs = 1,
233233
.bounce_buffer_size_px = ESP_PANEL_LCD_RGB_BOUNCE_BUF_SIZE,
234+
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 4, 0)
235+
.dma_burst_size = 64,
236+
#else
234237
.sram_trans_align = 4,
235238
.psram_trans_align = 64,
239+
#endif /* ESP_IDF_VERSION */
236240
.hsync_gpio_num = ESP_PANEL_LCD_RGB_IO_HSYNC,
237241
.vsync_gpio_num = ESP_PANEL_LCD_RGB_IO_VSYNC,
238242
.de_gpio_num = ESP_PANEL_LCD_RGB_IO_DE,

src/bus/RGB.h

Lines changed: 122 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -50,36 +50,69 @@
5050
* @brief Macro for 16-bit RGB565 RGB configuration
5151
*
5252
*/
53+
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 4, 0)
5354
#define ESP_PANEL_RGB_16BIT_CONFIG_DEFAULT(width, height, \
54-
d0_io, d1_io, d2_io, d3_io, d4_io, d5_io, d6_io, d7_io, \
55-
d8_io, d9_io, d10_io, d11_io, d12_io, d13_io, d14_io, d15_io, \
56-
hsync_io, vsync_io, pclk_io, de_io, disp_io) \
57-
{ \
58-
.clk_src = LCD_CLK_SRC_DEFAULT, \
59-
.timings = ESP_PANEL_RGB_TIMING_16BIT_CONFIG_DEFAULT(width, height), \
60-
.data_width = 16, \
61-
.bits_per_pixel = 16, \
62-
.num_fbs = 1, \
63-
.bounce_buffer_size_px = 0, \
64-
.psram_trans_align = 64, \
65-
.hsync_gpio_num = hsync_io, \
66-
.vsync_gpio_num = vsync_io, \
67-
.de_gpio_num = de_io, \
68-
.pclk_gpio_num = pclk_io, \
69-
.disp_gpio_num = disp_io, \
70-
.data_gpio_nums = { \
71-
d0_io, d1_io, d2_io, d3_io, d4_io, d5_io, d6_io, d7_io, \
72-
d8_io, d9_io, d10_io, d11_io, d12_io, d13_io, d14_io, d15_io \
73-
}, \
74-
.flags = { \
75-
.disp_active_low = 0, \
76-
.refresh_on_demand = 0, \
77-
.fb_in_psram = 1, \
78-
.double_fb = 0, \
79-
.no_fb = 0, \
80-
.bb_invalidate_cache = 0, \
81-
}, \
82-
}
55+
d0_io, d1_io, d2_io, d3_io, d4_io, d5_io, d6_io, d7_io, \
56+
d8_io, d9_io, d10_io, d11_io, d12_io, d13_io, d14_io, d15_io, \
57+
hsync_io, vsync_io, pclk_io, de_io, disp_io) \
58+
{ \
59+
.clk_src = LCD_CLK_SRC_DEFAULT, \
60+
.timings = ESP_PANEL_RGB_TIMING_16BIT_CONFIG_DEFAULT(width, height), \
61+
.data_width = 16, \
62+
.bits_per_pixel = 16, \
63+
.num_fbs = 1, \
64+
.bounce_buffer_size_px = 0, \
65+
.dma_burst_size = 64, \
66+
.hsync_gpio_num = hsync_io, \
67+
.vsync_gpio_num = vsync_io, \
68+
.de_gpio_num = de_io, \
69+
.pclk_gpio_num = pclk_io, \
70+
.disp_gpio_num = disp_io, \
71+
.data_gpio_nums = { \
72+
d0_io, d1_io, d2_io, d3_io, d4_io, d5_io, d6_io, d7_io, \
73+
d8_io, d9_io, d10_io, d11_io, d12_io, d13_io, d14_io, d15_io \
74+
}, \
75+
.flags = { \
76+
.disp_active_low = 0, \
77+
.refresh_on_demand = 0, \
78+
.fb_in_psram = 1, \
79+
.double_fb = 0, \
80+
.no_fb = 0, \
81+
.bb_invalidate_cache = 0, \
82+
}, \
83+
}
84+
#else
85+
#define ESP_PANEL_RGB_16BIT_CONFIG_DEFAULT(width, height, \
86+
d0_io, d1_io, d2_io, d3_io, d4_io, d5_io, d6_io, d7_io, \
87+
d8_io, d9_io, d10_io, d11_io, d12_io, d13_io, d14_io, d15_io, \
88+
hsync_io, vsync_io, pclk_io, de_io, disp_io) \
89+
{ \
90+
.clk_src = LCD_CLK_SRC_DEFAULT, \
91+
.timings = ESP_PANEL_RGB_TIMING_16BIT_CONFIG_DEFAULT(width, height), \
92+
.data_width = 16, \
93+
.bits_per_pixel = 16, \
94+
.num_fbs = 1, \
95+
.bounce_buffer_size_px = 0, \
96+
.psram_trans_align = 64, \
97+
.hsync_gpio_num = hsync_io, \
98+
.vsync_gpio_num = vsync_io, \
99+
.de_gpio_num = de_io, \
100+
.pclk_gpio_num = pclk_io, \
101+
.disp_gpio_num = disp_io, \
102+
.data_gpio_nums = { \
103+
d0_io, d1_io, d2_io, d3_io, d4_io, d5_io, d6_io, d7_io, \
104+
d8_io, d9_io, d10_io, d11_io, d12_io, d13_io, d14_io, d15_io \
105+
}, \
106+
.flags = { \
107+
.disp_active_low = 0, \
108+
.refresh_on_demand = 0, \
109+
.fb_in_psram = 1, \
110+
.double_fb = 0, \
111+
.no_fb = 0, \
112+
.bb_invalidate_cache = 0, \
113+
}, \
114+
}
115+
#endif /* ESP_IDF_VERSION */
83116

84117
/**
85118
* @brief Macro for 8-bit RGB timing configuration
@@ -110,35 +143,67 @@
110143
* @brief Macro for 8-bit RGB888 RGB configuration
111144
*
112145
*/
146+
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 4, 0)
113147
#define ESP_PANEL_RGB_8BIT_CONFIG_DEFAULT(width, height, \
114-
d0_io, d1_io, d2_io, d3_io, d4_io, d5_io, d6_io, d7_io, \
115-
hsync_io, vsync_io, pclk_io, de_io, disp_io) \
116-
{ \
117-
.clk_src = LCD_CLK_SRC_DEFAULT, \
118-
.timings = ESP_PANEL_RGB_TIMING_8BIT_CONFIG_DEFAULT(width, height), \
119-
.data_width = 8, \
120-
.bits_per_pixel = 24, \
121-
.num_fbs = 1, \
122-
.bounce_buffer_size_px = 0, \
123-
.psram_trans_align = 64, \
124-
.hsync_gpio_num = hsync_io, \
125-
.vsync_gpio_num = vsync_io, \
126-
.de_gpio_num = de_io, \
127-
.pclk_gpio_num = pclk_io, \
128-
.disp_gpio_num = disp_io, \
129-
.data_gpio_nums = { \
130-
d0_io, d1_io, d2_io, d3_io, d4_io, d5_io, d6_io, d7_io, \
131-
-1, -1, -1, -1, -1, -1, -1, -1, \
132-
}, \
133-
.flags = { \
134-
.disp_active_low = 0, \
135-
.refresh_on_demand = 0, \
136-
.fb_in_psram = 1, \
137-
.double_fb = 0, \
138-
.no_fb = 0, \
139-
.bb_invalidate_cache = 0, \
140-
}, \
141-
}
148+
d0_io, d1_io, d2_io, d3_io, d4_io, d5_io, d6_io, d7_io, \
149+
hsync_io, vsync_io, pclk_io, de_io, disp_io) \
150+
{ \
151+
.clk_src = LCD_CLK_SRC_DEFAULT, \
152+
.timings = ESP_PANEL_RGB_TIMING_8BIT_CONFIG_DEFAULT(width, height), \
153+
.data_width = 8, \
154+
.bits_per_pixel = 24, \
155+
.num_fbs = 1, \
156+
.bounce_buffer_size_px = 0, \
157+
.dma_burst_size = 64, \
158+
.hsync_gpio_num = hsync_io, \
159+
.vsync_gpio_num = vsync_io, \
160+
.de_gpio_num = de_io, \
161+
.pclk_gpio_num = pclk_io, \
162+
.disp_gpio_num = disp_io, \
163+
.data_gpio_nums = { \
164+
d0_io, d1_io, d2_io, d3_io, d4_io, d5_io, d6_io, d7_io, \
165+
-1, -1, -1, -1, -1, -1, -1, -1, \
166+
}, \
167+
.flags = { \
168+
.disp_active_low = 0, \
169+
.refresh_on_demand = 0, \
170+
.fb_in_psram = 1, \
171+
.double_fb = 0, \
172+
.no_fb = 0, \
173+
.bb_invalidate_cache = 0, \
174+
}, \
175+
}
176+
#else
177+
#define ESP_PANEL_RGB_8BIT_CONFIG_DEFAULT(width, height, \
178+
d0_io, d1_io, d2_io, d3_io, d4_io, d5_io, d6_io, d7_io, \
179+
hsync_io, vsync_io, pclk_io, de_io, disp_io) \
180+
{ \
181+
.clk_src = LCD_CLK_SRC_DEFAULT, \
182+
.timings = ESP_PANEL_RGB_TIMING_8BIT_CONFIG_DEFAULT(width, height), \
183+
.data_width = 8, \
184+
.bits_per_pixel = 24, \
185+
.num_fbs = 1, \
186+
.bounce_buffer_size_px = 0, \
187+
.psram_trans_align = 64, \
188+
.hsync_gpio_num = hsync_io, \
189+
.vsync_gpio_num = vsync_io, \
190+
.de_gpio_num = de_io, \
191+
.pclk_gpio_num = pclk_io, \
192+
.disp_gpio_num = disp_io, \
193+
.data_gpio_nums = { \
194+
d0_io, d1_io, d2_io, d3_io, d4_io, d5_io, d6_io, d7_io, \
195+
-1, -1, -1, -1, -1, -1, -1, -1, \
196+
}, \
197+
.flags = { \
198+
.disp_active_low = 0, \
199+
.refresh_on_demand = 0, \
200+
.fb_in_psram = 1, \
201+
.double_fb = 0, \
202+
.no_fb = 0, \
203+
.bb_invalidate_cache = 0, \
204+
}, \
205+
}
206+
#endif /* ESP_IDF_VERSION */
142207

143208
/**
144209
* @brief Macro for 3-wire SPI panel IO configuration

src/lcd/ESP_PanelLcd.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,15 +166,19 @@ bool ESP_PanelLcd::begin(void)
166166
switch (bus->getType()) {
167167
#if SOC_LCD_RGB_SUPPORTED
168168
case ESP_PANEL_BUS_TYPE_RGB: {
169+
esp_lcd_rgb_panel_event_callbacks_t rgb_event_cb = {};
170+
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 4, 0)
171+
rgb_event_cb.on_frame_buf_complete = (esp_lcd_rgb_panel_frame_buf_complete_cb_t)onRefreshFinish;
172+
#else
169173
const esp_lcd_rgb_panel_config_t *rgb_config = static_cast<ESP_PanelBus_RGB *>(bus)->getRgbConfig();
170-
esp_lcd_rgb_panel_event_callbacks_t rgb_event_cb = { NULL };
171174
if (rgb_config->bounce_buffer_size_px == 0) {
172175
// When bounce buffer is disabled, use `on_vsync` callback to notify draw bitmap finish
173176
rgb_event_cb.on_vsync = (esp_lcd_rgb_panel_vsync_cb_t)onRefreshFinish;
174177
} else {
175178
// When bounce buffer is enabled, use `on_bounce_frame_finish` callback to notify draw bitmap finish
176179
rgb_event_cb.on_bounce_frame_finish = (esp_lcd_rgb_panel_bounce_buf_finish_cb_t)onRefreshFinish;
177180
}
181+
#endif
178182
ESP_PANEL_CHECK_ERR_RET(
179183
esp_lcd_rgb_panel_register_event_callbacks(handle, &rgb_event_cb, &_callback_data), false,
180184
"Register RGB callback failed"

0 commit comments

Comments
 (0)