1、提供 LVGL 写 LCD 指定区域的函数
当 LVGL 渲染完,调用回调函数 example_lvgl_flush_cb 把数据写入 LCD
// set the callback which can copy the rendered image to an area of the display lv_display_set_flush_cb(display, example_lvgl_flush_cb);
回调函数的函数类型如下
typedef void (*lv_display_flush_cb_t)(lv_display_t * disp, const lv_area_t * area, uint8_t * px_map);
area 指定待显示数据的坐标,px_map 是待显示数据,disp 创建 LVGL 显示返回的对象,所以可以把写 LCD 指定区域的函数记录在 disp 对象内
// associate the mipi panel handle to the display lv_display_set_user_data(display, mipi_dpi_panel); void lv_display_set_user_data(lv_display_t * disp, void * user_data) { if(!disp) disp = lv_display_get_default(); if(!disp) return; disp->user_data = user_data; }
从而实现 LVGL 渲染完,调用回调函数,在回调函数内写 LCD 指定区域,回调函数例子如下
static void example_lvgl_flush_cb(lv_display_t *disp, const lv_area_t *area, uint8_t *px_map) { esp_lcd_panel_handle_t panel_handle = lv_display_get_user_data(disp); int offsetx1 = area->x1; int offsetx2 = area->x2; int offsety1 = area->y1; int offsety2 = area->y2; // pass the draw buffer to the driver esp_lcd_panel_draw_bitmap(panel_handle, offsetx1, offsety1, offsetx2 + 1, offsety2 + 1, px_map); }
标签:disp,lv,area,---,user,LVGL,display,移植 From: https://www.cnblogs.com/god-of-death/p/18189364