1 /**
2 * @file lv_draw_dave2d_utils.c
3 *
4 */
5
6 /*********************
7 * INCLUDES
8 *********************/
9 #include "lv_draw_dave2d.h"
10
11 #if LV_USE_DRAW_DAVE2D
12
13 /*********************
14 * DEFINES
15 *********************/
16
17 /**********************
18 * TYPEDEFS
19 **********************/
20
21 /**********************
22 * STATIC PROTOTYPES
23 **********************/
24
25 /**********************
26 * STATIC VARIABLES
27 **********************/
28
29 /**********************
30 * MACROS
31 **********************/
32
33 /**********************
34 * GLOBAL FUNCTIONS
35 **********************/
36
lv_draw_dave2d_lv_colour_to_d2_colour(lv_color_t color)37 d2_color lv_draw_dave2d_lv_colour_to_d2_colour(lv_color_t color)
38 {
39 uint8_t alpha, red, green, blue;
40
41 alpha = 0x00;
42 red = color.red ;
43 green = color.green ;
44 blue = color.blue;
45 /*Color depth: 8 (A8), 16 (RGB565), 24 (RGB888), 32 (XRGB8888)*/
46 switch(LV_COLOR_DEPTH) {
47 case(8):
48 LV_ASSERT(0);
49 break;
50 case(16):
51 break;
52 case(24):
53 break;
54 case(32):
55 break;
56
57 default:
58 break;
59 }
60
61 return (alpha) << 24UL
62 | (red) << 16UL
63 | (green) << 8UL
64 | (blue) << 0UL;
65 }
66
lv_draw_dave2d_cf_fb_get(void)67 d2_s32 lv_draw_dave2d_cf_fb_get(void)
68 {
69 d2_s32 d2_fb_mode = 0;
70 switch(g_display0_cfg.input->format) {
71 case DISPLAY_IN_FORMAT_16BITS_RGB565: ///< RGB565, 16 bits
72 d2_fb_mode = d2_mode_rgb565;
73 break;
74 case DISPLAY_IN_FORMAT_32BITS_ARGB8888: ///< ARGB8888, 32 bits
75 d2_fb_mode = d2_mode_argb8888;
76 break;
77 case DISPLAY_IN_FORMAT_32BITS_RGB888: ///< RGB888, 32 bits
78 d2_fb_mode = d2_mode_argb8888; //GLCDC ignores Alpha when configured for RGB888
79 break;
80 case DISPLAY_IN_FORMAT_16BITS_ARGB4444: ///< ARGB4444, 16 bits
81 d2_fb_mode = d2_mode_argb4444;
82 break;
83 case DISPLAY_IN_FORMAT_16BITS_ARGB1555: ///< ARGB1555, 16 bits
84 case DISPLAY_IN_FORMAT_CLUT8 : ///< CLUT8
85 case DISPLAY_IN_FORMAT_CLUT4 : ///< CLUT4
86 case DISPLAY_IN_FORMAT_CLUT1 : ///< CLUT1
87 //Not supported as a FB format by Dave2D
88 break;
89
90 default:
91 break;
92 }
93
94 return d2_fb_mode;
95 }
96
lv_draw_dave2d_lv_colour_fmt_to_d2_fmt(lv_color_format_t colour_format)97 d2_u32 lv_draw_dave2d_lv_colour_fmt_to_d2_fmt(lv_color_format_t colour_format)
98 {
99 d2_u32 d2_lvgl_mode = 0;
100
101 switch(colour_format) {
102 case(LV_COLOR_FORMAT_I1):
103 d2_lvgl_mode = d2_mode_i1;
104 break;
105 case(LV_COLOR_FORMAT_I2):
106 d2_lvgl_mode = d2_mode_i2;
107 break;
108 case(LV_COLOR_FORMAT_I4):
109 d2_lvgl_mode = d2_mode_i4;
110 break;
111 case(LV_COLOR_FORMAT_I8):
112 d2_lvgl_mode = d2_mode_i4;
113 break;
114 case(LV_COLOR_FORMAT_A8):
115 d2_lvgl_mode = d2_mode_alpha8;
116 break;
117 case(LV_COLOR_FORMAT_RGB565):
118 d2_lvgl_mode = d2_mode_rgb565;
119 break;
120 case(LV_COLOR_FORMAT_ARGB1555):
121 d2_lvgl_mode = d2_mode_argb1555;
122 break;
123 case(LV_COLOR_FORMAT_ARGB4444):
124 d2_lvgl_mode = d2_mode_argb4444;
125 break;
126 case(LV_COLOR_FORMAT_ARGB8888):
127 d2_lvgl_mode = d2_mode_argb8888;
128 break;
129 case(LV_COLOR_FORMAT_XRGB8888):
130 d2_lvgl_mode = d2_mode_argb8888;
131 break;
132
133 case(LV_COLOR_FORMAT_RGB888): //LV_COLOR_FORMAT_RGB888 is a 3 byte format, d2_mode_rgb888 is a 4 byte format, not supported
134 default:
135 LV_ASSERT(0);
136 break;
137
138 }
139 return d2_lvgl_mode;
140 }
141
d2_framebuffer_from_layer(d2_device * handle,lv_layer_t * layer)142 void d2_framebuffer_from_layer(d2_device * handle, lv_layer_t * layer)
143 {
144 lv_draw_buf_t * draw_buf = layer->draw_buf;
145 lv_area_t buffer_area = layer->buf_area;
146 lv_area_move(&buffer_area, -layer->buf_area.x1, -layer->buf_area.y1);
147
148 d2_framebuffer(handle, draw_buf->data,
149 (d2_s32) draw_buf->header.stride / lv_color_format_get_size(layer->color_format),
150 (d2_u32)lv_area_get_width(&buffer_area),
151 (d2_u32)lv_area_get_height(&buffer_area),
152 lv_draw_dave2d_lv_colour_fmt_to_d2_fmt(layer->color_format));
153 }
154
lv_draw_dave2d_is_dest_cf_supported(lv_color_format_t cf)155 bool lv_draw_dave2d_is_dest_cf_supported(lv_color_format_t cf)
156 {
157 bool result;
158
159 switch(cf) {
160 case LV_COLOR_FORMAT_A8:
161 case LV_COLOR_FORMAT_RGB565:
162 case LV_COLOR_FORMAT_ARGB8888:
163 case LV_COLOR_FORMAT_XRGB8888:
164 case LV_COLOR_FORMAT_ARGB4444:
165 result = true;
166 break;
167
168 default:
169 result = false;
170 break;
171 }
172
173 return result;
174 }
175
176 /**********************
177 * STATIC FUNCTIONS
178 **********************/
179
180 #endif /*LV_USE_DRAW_DAVE2D*/
181