8000 fix(display): fix random crash of ESP32 ili9XXX driver (#330) · basvd/lv_binding_micropython@d4889b9 · GitHub
[go: up one dir, main page]

Skip to content

Commit d4889b9

Browse files
authored
fix(display): fix random crash of ESP32 ili9XXX driver (lvgl#330)
1 parent 40ed109 commit d4889b9

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

driver/esp32/ili9XXX.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
DISPLAY_TYPE_ST7735 = const(5)
5353

5454
_TRANSFER_BUFFER_LENGTH = const(16)
55+
_MALLOC_DMA = esp.MALLOC_CAP.DMA | esp.MALLOC_CAP.INTERNAL
5556

5657
class ili9XXX:
5758

@@ -102,6 +103,8 @@ def __init__(self,
102103
self.swap_rgb565_bytes = swap_rgb565_bytes
103104
self.rgb565_swap_func = lv.draw_sw_rgb565_swap if swap_rgb565_bytes else None
104105

106+
flush_cb = esp.ili9xxx_flush if hybrid and hasattr(esp, 'ili9xxx_flush') else self.flush
107+
105108
if not color_format:
106109
raise RuntimeError(f"No color format defined for display {self.display_name}")
107110

@@ -127,19 +130,19 @@ def __init__(self,
127130
# Allocate display buffer(s)
128131

129132
self.buf_size = (self.width * self.height * self.pixel_size) // factor
130-
self.buf1 = esp.heap_caps_malloc(self.buf_size, esp.MALLOC_CAP.DMA)
133+
self.buf1 = esp.heap_caps_malloc(self.buf_size, _MALLOC_DMA)
131134
if not self.buf1:
132-
free = esp.heap_caps_get_largest_free_block(esp.MALLOC_CAP.DMA)
135+
free = esp.heap_caps_get_largest_free_block(_MALLOC_DMA)
133136
raise RuntimeError(f"Not enough DMA-capable memory to allocate display buffer. Needed: {self.buf_size} bytes, largest free block: {free} bytes")
134-
self.buf2 = esp.heap_caps_malloc(self.buf_size, esp.MALLOC_CAP.DMA) if double_buffer else None
137+
self.buf2 = esp.heap_caps_malloc(self.buf_size, _MALLOC_DMA) if double_buffer else None
135138

136139
# Register display driver
137140

138141
self.disp_spi_init()
139142
self.disp_drv = lv.display_create(self.width, self.height)
140143
self.disp_drv.set_color_format(color_format)
141144
self.disp_drv.set_buffers(self.buf1, self.buf2, self.buf_size, lv.DISPLAY_RENDER_MODE.PARTIAL)
142-
self.disp_drv.set_flush_cb(esp.ili9xxx_flush if hybrid and hasattr(esp, 'ili9xxx_flush') else self.flush)
145+
self.disp_drv.set_flush_cb(flush_cb)
143146
self.disp_drv.set_driver_data({
144147
'dc': self.dc,
145148
'spi': self.spi,
@@ -214,7 +217,7 @@ def disp_spi_init(self):
214217
ret = esp.spi_bus_initialize(self.spihost, buscfg, 1)
215218
if ret != 0: raise RuntimeError("Failed initializing SPI bus")
216219

217-
self.trans_buffer = esp.heap_caps_malloc(_TRANSFER_BUFFER_LENGTH, esp.MALLOC_CAP.DMA)
220+
self.trans_buffer = esp.heap_caps_malloc(_TRANSFER_BUFFER_LENGTH, _MALLOC_DMA)
218221
self.cmd_trans_data = self.trans_buffer.__dereference__(1)
219222
self.word_trans_data = self.trans_buffer.__dereference__(4)
220223

0 commit comments

Comments
 (0)
0