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