VSF Documented
vsf_disp_fb.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_FRAME_BUFFER_H__
18#define __VSF_DISP_FRAME_BUFFER_H__
19
20/*============================ INCLUDES ======================================*/
21
23
24#if VSF_USE_UI == ENABLED && VSF_DISP_USE_FB == ENABLED
25
26#include "kernel/vsf_kernel.h"
27#include "hal/vsf_hal.h"
28
29#if defined(__VSF_DISP_FB_CLASS_IMPLEMENT)
30# undef __VSF_DISP_FB_CLASS_IMPLEMENT
31# define __VSF_CLASS_IMPLEMENT__
32#endif
33
34#include "utilities/ooc_class.h"
35
36#ifdef __cplusplus
37extern "C" {
38#endif
39
40/*============================ MACROS ========================================*/
41/*============================ MACROFIED FUNCTIONS ===========================*/
42/*============================ TYPES =========================================*/
43
44// keey vk_disp_fb_drv_t independent of ui module, because maybe it's implemented in hal
45typedef struct vk_disp_fb_drv_t {
46 vsf_err_t (*init)(void *fb);
47 vsf_err_t (*fini)(void *fb);
48 vsf_err_t (*enable)(void *fb);
49 vsf_err_t (*disable)(void *fb);
50
51 struct {
52 vsf_err_t (*config)(void *fb, int layer,
54 int color_format, uint_fast8_t alpha,
55 void *initial_pixel_buffer);
56 vsf_err_t (*enable)(void *fb, int layer);
57 vsf_err_t (*disable)(void *fb, int layer);
58 vsf_err_t (*present)(void *fb, int layer, void *pixel_buffer);
60
61 struct {
62 vsf_err_t (*fill_color)(void *fb,
64 uint32_t color, uint32_t color_format);
67 void *colors, uint32_t color_format,
68 uint_fast16_t rotate_degrees, float xscale, float yscale);
71 void *colors0, uint32_t color0_format, uint_fast8_t color0_alpha,
72 void *colors1, uint32_t color1_format, uint_fast8_t color1_alpha);
73 } gpu;
75
77 public_member(
78 implement(vk_disp_t)
79
80 // user can provide the frame buffer here
81 // if NULL, frame buffer will be allocated from heap
82 void *buffer;
83
84 const vk_disp_fb_drv_t *drv;
85 void *drv_param;
86
87 uint8_t fb_num;
88 uint32_t fb_size;
89 uint8_t layer_idx;
90 uint8_t layer_alpha;
91 vk_disp_area_t layer_area;
92 )
93
94 private_member(
95 void *fb_buffer;
96 uint8_t front_buffer_idx;
97 )
98};
99
100/*============================ GLOBAL VARIABLES ==============================*/
101
102extern const vk_disp_drv_t vk_disp_drv_fb;
103
104#if VSF_HAL_USE_FB == ENABLED
105// hal can not include display module, so declare hal structures here
106// vsf_disp_hw_fb_drv is used for the first layer,
107// while vsf_disp_hw_fb_layer_drv is used for other layers, which has only layer APIs
110#endif
111
112/*============================ PROTOTYPES ====================================*/
113
114extern void * vk_disp_fb_get_buffer(vk_disp_t *disp, uint_fast8_t idx);
115extern void * vk_disp_fb_get_front_buffer(vk_disp_t *disp);
116extern void * vk_disp_fb_get_back_buffer(vk_disp_t *disp);
117// if idx < 0, then set back buffer(returned by get_back_buffer) as front buffer
118extern void * vk_disp_fb_set_front_buffer(vk_disp_t *disp, int_fast8_t idx);
119
120#ifdef __cplusplus
121}
122#endif
123
124#endif // VSF_USE_UI && VSF_DISP_USE_FB
125#endif // __VSF_DISP_FRAME_BUFFER_H__
vsf_err_t
Definition __type.h:42
Definition vsf_disp.h:149
Definition vsf_disp_fb.h:76
Definition vsf_disp.h:173
#define vsf_class(__name)
Definition ooc_class.h:48
unsigned short uint16_t
Definition stdint.h:7
unsigned char uint_fast8_t
Definition stdint.h:23
unsigned uint32_t
Definition stdint.h:9
unsigned short uint_fast16_t
Definition stdint.h:25
unsigned char uint8_t
Definition stdint.h:5
char int_fast8_t
Definition stdint.h:22
Definition vsf_disp.h:144
Definition vsf_disp_fb.h:45
vsf_err_t(* fini)(void *fb)
Definition vsf_disp_fb.h:47
vsf_err_t(* present)(void *fb, int layer, void *pixel_buffer)
Definition vsf_disp_fb.h:58
vsf_err_t(* config)(void *fb, int layer, uint16_t x, uint16_t y, uint16_t w, uint16_t h, int color_format, uint_fast8_t alpha, void *initial_pixel_buffer)
Definition vsf_disp_fb.h:52
vsf_err_t(* fill_color)(void *fb, uint_fast16_t x, uint_fast16_t y, uint_fast16_t w, uint_fast16_t h, uint32_t color, uint32_t color_format)
Definition vsf_disp_fb.h:62
vsf_err_t(* enable)(void *fb)
Definition vsf_disp_fb.h:48
vsf_err_t(* fill_colors)(void *fb, uint_fast16_t x, uint_fast16_t y, uint_fast16_t w, uint_fast16_t h, void *colors, uint32_t color_format, uint_fast16_t rotate_degrees, float xscale, float yscale)
Definition vsf_disp_fb.h:65
vsf_err_t(* disable)(void *fb)
Definition vsf_disp_fb.h:49
vsf_err_t(* blend_colors)(void *fb, uint_fast16_t x, uint_fast16_t y, uint_fast16_t w, uint_fast16_t h, void *colors0, uint32_t color0_format, uint_fast8_t color0_alpha, void *colors1, uint32_t color1_format, uint_fast8_t color1_alpha)
Definition vsf_disp_fb.h:69
struct vk_disp_fb_drv_t::@105 gpu
struct vk_disp_fb_drv_t::@104 layer
vsf_err_t(* init)(void *fb)
Definition vsf_disp_fb.h:46
void * vk_disp_fb_get_buffer(vk_disp_t *disp, uint_fast8_t idx)
Definition vsf_disp_fb.c:62
const vk_disp_fb_drv_t vsf_disp_hw_fb_drv
Definition fb.c:46
void * vk_disp_fb_get_front_buffer(vk_disp_t *disp)
Definition vsf_disp_fb.c:77
void * vk_disp_fb_set_front_buffer(vk_disp_t *disp, int_fast8_t idx)
Definition vsf_disp_fb.c:68
const vk_disp_fb_drv_t vsf_disp_hw_fb_layer_drv
Definition fb.c:60
const vk_disp_drv_t vk_disp_drv_fb
Definition vsf_disp_fb.c:46
void * vk_disp_fb_get_back_buffer(vk_disp_t *disp)
Definition vsf_disp_fb.c:82
uint32_t color
Definition vsf_sdl2_pixelformat.c:31