VSF Documented
vsf_disp.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17#ifndef __VSF_DISP_H__
18#define __VSF_DISP_H__
19
20/*============================ INCLUDES ======================================*/
21
23
24#if VSF_USE_UI == ENABLED
25
27#include "kernel/vsf_kernel.h"
28
29#if defined(__VSF_DISP_CLASS_IMPLEMENT)
30# define __VSF_CLASS_IMPLEMENT__
31#elif defined(__VSF_DISP_CLASS_INHERIT__)
32# define __VSF_CLASS_INHERIT__
33#endif
34
35#include "utilities/ooc_class.h"
36
37#ifdef __cplusplus
38extern "C" {
39#endif
40
41/*============================ MACROS ========================================*/
42
43#define VSF_DISP_COLOR_IDX_DEF(__NAME) \
44 VSF_DISP_COLOR_IDX_##__NAME
45
46// bit0 - 7: index
47// bit8 - 12: bitlen - 1
48// bit13 - 14: bytelen - 1
49// bit15: has_alpha
50#define VSF_DISP_COLOR_VALUE(__INDEX, __BITLEN, __BYTELEN, __HAS_ALPHA) \
51 ( (__INDEX) \
52 | ((((__BITLEN) - 1) & 0x1F) << 8) \
53 | ((((__BYTELEN) - 1) & 0x03) << 13) \
54 | ((__HAS_ALPHA) ? 1 << 15 : 0) \
55 )
56
57#define VSF_DISP_COLOR_DEF(__NAME, __BITLEN, __BYTELEN, __HAS_ALPHA) \
58 VSF_DISP_COLOR_##__NAME = VSF_DISP_COLOR_VALUE( \
59 (VSF_DISP_COLOR_IDX_##__NAME), __BITLEN, __BYTELEN, __HAS_ALPHA)
60
61#define vsf_disp_get_pixel_format_bytesize(__color_format) \
62 ((((__color_format) >> 13) & 0x03) + 1)
63#define vsf_disp_get_pixel_format_bitsize(__color_format) \
64 ((((__color_format) >> 8) & 0x1F) + 1)
65#define vsf_disp_get_pixel_format_has_alpha(__color_format) \
66 ((__color_format) & (1 << 15))
67
68#define vsf_disp_get_pixel_format(__disp) \
69 ((vk_disp_t *)(__disp))->param.color
70
71#define vsf_disp_get_width(__disp) ((__disp)->param.width)
72#define vsf_disp_get_height(__disp) ((__disp)->param.height)
73#define vsf_disp_get_pixel_bitsize(__disp) \
74 vsf_disp_get_pixel_format_bitsize(vsf_disp_get_pixel_format(__disp))
75#define vsf_disp_get_pixel_bytesize(__disp) \
76 vsf_disp_get_pixel_format_bytesize(vsf_disp_get_pixel_format(__disp))
77#define vsf_disp_get_has_alpha(__disp) \
78 vsf_disp_get_pixel_format_has_alpha(vsf_disp_get_pixel_format(__disp))
79#define vsf_disp_get_pitch(__disp) \
80 ((__disp)->param.width * vsf_disp_get_pixel_bytesize(__disp))
81#define vsf_disp_get_frame_size(__disp) \
82 ((__disp)->param.height * vsf_disp_get_pitch(__disp))
83
84#ifndef vk_disp_coord_t
85// use signed value so that in some coord calculations, value < 0 is acceptable
86# define vk_disp_coord_t int16_t
87#endif
88#ifndef vk_disp_fast_coord_t
89# define vk_disp_fast_coord_t uint_fast16_t
90#endif
91
92/*============================ MACROFIED FUNCTIONS ===========================*/
93/*============================ TYPES =========================================*/
94
97
98typedef enum vk_disp_color_idx_t {
100 VSF_DISP_COLOR_IDX_DEF(PALETTE),
103 VSF_DISP_COLOR_IDX_DEF(RGBA8888),
104 VSF_DISP_COLOR_IDX_DEF(ARGB8888),
105 VSF_DISP_COLOR_IDX_DEF(ABGR8888),
106 VSF_DISP_COLOR_IDX_DEF(BGRA8888),
107
108 VSF_DISP_COLOR_IDX_DEF(RGB666_32),
109
110 VSF_DISP_COLOR_IDX_DEF(RGB888_32),
111 VSF_DISP_COLOR_IDX_DEF(RGB888_24),
112
113 VSF_DISP_COLOR_IDX_DEF(BGR888_32),
114 VSF_DISP_COLOR_IDX_DEF(BGR888_24),
116
118 // avoid vk_disp_color_type_t to be optimized to 8bit
121 VSF_DISP_COLOR_DEF(INVALID, 0, 0, 0),
122 VSF_DISP_COLOR_DEF(PALETTE, 8, 1, 0),
123 VSF_DISP_COLOR_DEF(RGB332, 8, 1, 0),
124 VSF_DISP_COLOR_DEF(RGB565, 16, 2, 0),
125 VSF_DISP_COLOR_DEF(RGBA8888, 32, 4, 1),
126 VSF_DISP_COLOR_DEF(ARGB8888, 32, 4, 1),
127 VSF_DISP_COLOR_DEF(ABGR8888, 32, 4, 1),
128 VSF_DISP_COLOR_DEF(BGRA8888, 32, 4, 1),
129
130 VSF_DISP_COLOR_DEF(RGB666_32, 18, 4, 0),
131
132 VSF_DISP_COLOR_DEF(RGB888_32, 32, 4, 0),
133 VSF_DISP_COLOR_DEF(RGB888_24, 24, 3, 0),
134
135 VSF_DISP_COLOR_DEF(BGR888_32, 32, 4, 0),
136 VSF_DISP_COLOR_DEF(BGR888_24, 24, 3, 0),
138
139typedef struct vk_disp_point_t {
143
144typedef struct vk_disp_area_t {
148
150 protected_member(
151 vsf_err_t (*init)(vk_disp_t *pthis);
152 vsf_err_t (*refresh)(vk_disp_t *pthis, vk_disp_area_t *area, void *disp_buff);
153
154 // interfaces for gpu acceleration
155#if VSF_DISP_USE_GPU == ENABLED
156 void (*blend)(vk_disp_t *pthis, void *target_buff, vk_disp_fast_coord_t target_width,
157 vk_disp_area_t *area, void *disp_buff);
158 void (*fill)(vk_disp_t *pthis, void *target_buff, vk_disp_fast_coord_t target_width,
160#endif
162};
163
164typedef struct vk_disp_param_t {
170
171typedef void (*vk_disp_on_ready_t)(vk_disp_t *disp);
172
174 public_member(
175 const vk_disp_param_t param;
176 void *ui_data;
178 protected_member(
179 vk_disp_on_ready_t ui_on_ready;
181};
182
183#if VSF_KERNEL_CFG_SUPPORT_SYNC == ENABLED
184// vk_reentrant_disp_t can be used to make a vk_disp_t reentrant
185// by implementint multiple vk_reentrant_disp_t with same mutex
187 public_member(
188 implement(vk_disp_t)
189
190 // disp should be already initialized
191 vk_disp_t *disp;
192 // same initialized mutex MUST be used for the same disp above
194 vk_disp_point_t pos;
196 private_member(
197 vsf_eda_t eda;
198
199 void *buffer;
200 vk_disp_area_t area;
201 )
202};
203#endif
204
205/*============================ GLOBAL VARIABLES ==============================*/
206
207#if VSF_KERNEL_CFG_SUPPORT_SYNC == ENABLED
209#endif
210
211/*============================ PROTOTYPES ====================================*/
212
213extern vsf_err_t vk_disp_init(vk_disp_t *pthis);
214extern vsf_err_t vk_disp_refresh(vk_disp_t *pthis, vk_disp_area_t *area, void *disp_buff);
215
216#ifdef __VSF_DISP_CLASS_INHERIT__
217extern void vk_disp_on_ready(vk_disp_t *pthis);
218#endif
219
220#ifdef __cplusplus
221}
222#endif
223
224/*============================ INCLUDES ======================================*/
225
235#if VSF_DISP_USE_WINGDI == ENABLED && defined(__WIN__)
237#endif
238
239#undef __VSF_DISP_CLASS_IMPLEMENT
240#undef __VSF_DISP_CLASS_INHERIT__
241
242#endif // VSF_USE_UI
243#endif // __VSF_DISP_H__
vsf_err_t
Definition __type.h:42
Definition vsf_disp.h:149
Definition vsf_disp.h:173
Definition vsf_disp.h:186
Definition vsf_eda.h:766
Definition vsf_eda.h:892
#define vsf_dcl_class
Definition ooc_class.h:46
#define vsf_class(__name)
Definition ooc_class.h:48
unsigned short uint16_t
Definition stdint.h:7
unsigned int uint_fast32_t
Definition stdint.h:27
#define INT16_MAX
Definition stdint.h:50
#define INT16_MIN
Definition stdint.h:45
Definition mutex.h:10
Definition vsf_disp.h:144
vk_disp_point_t pos
Definition vsf_disp.h:145
vk_disp_point_t size
Definition vsf_disp.h:146
Definition vsf_disp.h:164
uint16_t width
Definition vsf_disp.h:166
uint16_t height
Definition vsf_disp.h:167
const vk_disp_drv_t * drv
Definition vsf_disp.h:165
vk_disp_color_type_t color
Definition vsf_disp.h:168
Definition vsf_disp.h:139
vk_disp_coord_t x
Definition vsf_disp.h:140
vk_disp_coord_t y
Definition vsf_disp.h:141
void vk_disp_on_ready(vk_disp_t *pthis)
Definition vsf_disp.c:60
vsf_err_t vk_disp_init(vk_disp_t *pthis)
Definition vsf_disp.c:67
#define VSF_DISP_COLOR_DEF(__NAME, __BITLEN, __BYTELEN, __HAS_ALPHA)
Definition vsf_disp.h:57
#define VSF_DISP_COLOR_IDX_DEF(__NAME)
Definition vsf_disp.h:43
vk_disp_color_type_t
Definition vsf_disp.h:117
@ __VSF_DISP_COLOR_LEAST_MAX
Definition vsf_disp.h:119
@ __VSF_DISP_COLOR_LEAST_MIN
Definition vsf_disp.h:120
const vk_disp_drv_t vk_reentrant_disp_drv
Definition vsf_disp.c:51
#define vk_disp_coord_t
Definition vsf_disp.h:86
#define vk_disp_fast_coord_t
Definition vsf_disp.h:89
vsf_err_t vk_disp_refresh(vk_disp_t *pthis, vk_disp_area_t *area, void *disp_buff)
Definition vsf_disp.c:81
void(* vk_disp_on_ready_t)(vk_disp_t *disp)
Definition vsf_disp.h:171
vk_disp_color_idx_t
Definition vsf_disp.h:98
uint32_t color
Definition vsf_sdl2_pixelformat.c:31