Skip to content

Commit 60914ac

Browse files
VynDragonfabiobaltieri
authored andcommitted
modules: lvgl: Introduce Greyscale support
This introduces support glue for L8 greyscale Signed-off-by: Camille BAUD <mail@massdriver.space>
1 parent 9acf8fb commit 60914ac

File tree

5 files changed

+38
-0
lines changed

5 files changed

+38
-0
lines changed

modules/lvgl/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,7 @@ zephyr_library_sources(
313313
lvgl.c
314314
lvgl_display.c
315315
lvgl_display_mono.c
316+
lvgl_display_8bit.c
316317
lvgl_display_16bit.c
317318
lvgl_display_24bit.c
318319
lvgl_display_32bit.c

modules/lvgl/include/lvgl_display.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ struct lvgl_display_flush {
3030
};
3131

3232
void lvgl_flush_cb_mono(lv_display_t *display, const lv_area_t *area, uint8_t *px_map);
33+
void lvgl_flush_cb_8bit(lv_display_t *display, const lv_area_t *area, uint8_t *px_map);
3334
void lvgl_flush_cb_16bit(lv_display_t *display, const lv_area_t *area, uint8_t *px_map);
3435
void lvgl_flush_cb_24bit(lv_display_t *display, const lv_area_t *area, uint8_t *px_map);
3536
void lvgl_flush_cb_32bit(lv_display_t *display, const lv_area_t *area, uint8_t *px_map);

modules/lvgl/lvgl.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,9 @@ static int lvgl_allocate_rendering_buffers(lv_display_t *display)
146146
case PIXEL_FORMAT_RGB_565:
147147
buf_size = 2 * buf_nbr_pixels;
148148
break;
149+
case PIXEL_FORMAT_L_8:
150+
buf_size = buf_nbr_pixels;
151+
break;
149152
case PIXEL_FORMAT_MONO01:
150153
case PIXEL_FORMAT_MONO10:
151154
buf_size = buf_nbr_pixels / 8 + 8;

modules/lvgl/lvgl_display.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,12 @@ int set_lvgl_rendering_cb(lv_display_t *display)
9696
lv_display_add_event_cb(display, lvgl_rounder_cb, LV_EVENT_INVALIDATE_AREA,
9797
display);
9898
break;
99+
case PIXEL_FORMAT_L_8:
100+
lv_display_set_color_format(display, LV_COLOR_FORMAT_L8);
101+
lv_display_set_flush_cb(display, lvgl_flush_cb_8bit);
102+
lv_display_add_event_cb(display, lvgl_rounder_cb, LV_EVENT_INVALIDATE_AREA,
103+
display);
104+
break;
99105
case PIXEL_FORMAT_MONO01:
100106
case PIXEL_FORMAT_MONO10:
101107
lv_display_set_color_format(display, LV_COLOR_FORMAT_I1);

modules/lvgl/lvgl_display_8bit.c

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
* Copyright (c) 2025 MASSDRIVER EI (massdriver.space)
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#include <zephyr/kernel.h>
8+
#include <lvgl.h>
9+
#include "lvgl_display.h"
10+
11+
void lvgl_flush_cb_8bit(lv_display_t *display, const lv_area_t *area, uint8_t *px_map)
12+
{
13+
uint16_t w = area->x2 - area->x1 + 1;
14+
uint16_t h = area->y2 - area->y1 + 1;
15+
struct lvgl_display_flush flush;
16+
17+
flush.display = display;
18+
flush.x = area->x1;
19+
flush.y = area->y1;
20+
flush.desc.buf_size = w * h;
21+
flush.desc.width = w;
22+
flush.desc.pitch = w;
23+
flush.desc.height = h;
24+
flush.buf = (void *)px_map;
25+
26+
lvgl_flush_display(&flush);
27+
}

0 commit comments

Comments
 (0)