modules: lvgl: Introduce Greyscale support

This introduces support glue for L8 greyscale

Signed-off-by: Camille BAUD <mail@massdriver.space>
This commit is contained in:
Camille BAUD 2025-03-10 15:47:46 +01:00 committed by Fabio Baltieri
commit 60914ac654
5 changed files with 38 additions and 0 deletions

View file

@ -313,6 +313,7 @@ zephyr_library_sources(
lvgl.c
lvgl_display.c
lvgl_display_mono.c
lvgl_display_8bit.c
lvgl_display_16bit.c
lvgl_display_24bit.c
lvgl_display_32bit.c

View file

@ -30,6 +30,7 @@ struct lvgl_display_flush {
};
void lvgl_flush_cb_mono(lv_display_t *display, const lv_area_t *area, uint8_t *px_map);
void lvgl_flush_cb_8bit(lv_display_t *display, const lv_area_t *area, uint8_t *px_map);
void lvgl_flush_cb_16bit(lv_display_t *display, const lv_area_t *area, uint8_t *px_map);
void lvgl_flush_cb_24bit(lv_display_t *display, const lv_area_t *area, uint8_t *px_map);
void lvgl_flush_cb_32bit(lv_display_t *display, const lv_area_t *area, uint8_t *px_map);

View file

@ -146,6 +146,9 @@ static int lvgl_allocate_rendering_buffers(lv_display_t *display)
case PIXEL_FORMAT_RGB_565:
buf_size = 2 * buf_nbr_pixels;
break;
case PIXEL_FORMAT_L_8:
buf_size = buf_nbr_pixels;
break;
case PIXEL_FORMAT_MONO01:
case PIXEL_FORMAT_MONO10:
buf_size = buf_nbr_pixels / 8 + 8;

View file

@ -96,6 +96,12 @@ int set_lvgl_rendering_cb(lv_display_t *display)
lv_display_add_event_cb(display, lvgl_rounder_cb, LV_EVENT_INVALIDATE_AREA,
display);
break;
case PIXEL_FORMAT_L_8:
lv_display_set_color_format(display, LV_COLOR_FORMAT_L8);
lv_display_set_flush_cb(display, lvgl_flush_cb_8bit);
lv_display_add_event_cb(display, lvgl_rounder_cb, LV_EVENT_INVALIDATE_AREA,
display);
break;
case PIXEL_FORMAT_MONO01:
case PIXEL_FORMAT_MONO10:
lv_display_set_color_format(display, LV_COLOR_FORMAT_I1);

View file

@ -0,0 +1,27 @@
/*
* Copyright (c) 2025 MASSDRIVER EI (massdriver.space)
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/kernel.h>
#include <lvgl.h>
#include "lvgl_display.h"
void lvgl_flush_cb_8bit(lv_display_t *display, const lv_area_t *area, uint8_t *px_map)
{
uint16_t w = area->x2 - area->x1 + 1;
uint16_t h = area->y2 - area->y1 + 1;
struct lvgl_display_flush flush;
flush.display = display;
flush.x = area->x1;
flush.y = area->y1;
flush.desc.buf_size = w * h;
flush.desc.width = w;
flush.desc.pitch = w;
flush.desc.height = h;
flush.buf = (void *)px_map;
lvgl_flush_display(&flush);
}