1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun * Copyright (c) 2023 Rockchip, Inc. All Rights Reserved.
3*4882a593Smuzhiyun *
4*4882a593Smuzhiyun * Licensed under the Apache License, Version 2.0 (the "License");
5*4882a593Smuzhiyun * you may not use this file except in compliance with the License.
6*4882a593Smuzhiyun * You may obtain a copy of the License at
7*4882a593Smuzhiyun *
8*4882a593Smuzhiyun * http://www.apache.org/licenses/LICENSE-2.0
9*4882a593Smuzhiyun *
10*4882a593Smuzhiyun * Unless required by applicable law or agreed to in writing, software
11*4882a593Smuzhiyun * distributed under the License is distributed on an "AS IS" BASIS,
12*4882a593Smuzhiyun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4882a593Smuzhiyun * See the License for the specific language governing permissions and
14*4882a593Smuzhiyun * limitations under the License.
15*4882a593Smuzhiyun */
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun #include <lvgl/lvgl.h>
18*4882a593Smuzhiyun #include <lvgl/lv_conf.h>
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun #include "main.h"
21*4882a593Smuzhiyun #include "hal_sdl.h"
22*4882a593Smuzhiyun #include "hal_drm.h"
23*4882a593Smuzhiyun
24*4882a593Smuzhiyun #include "ui_resource.h"
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun lv_ft_info_t ttf_main_s;
27*4882a593Smuzhiyun lv_ft_info_t ttf_main_m;
28*4882a593Smuzhiyun lv_ft_info_t ttf_main_l;
29*4882a593Smuzhiyun
30*4882a593Smuzhiyun lv_style_t style_txt_s;
31*4882a593Smuzhiyun lv_style_t style_txt_m;
32*4882a593Smuzhiyun lv_style_t style_txt_l;
33*4882a593Smuzhiyun
34*4882a593Smuzhiyun static int g_indev_rotation = 0;
35*4882a593Smuzhiyun static int g_disp_rotation = LV_DISP_ROT_NONE;
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun static int quit = 0;
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun extern void rk_demo_init(void);
40*4882a593Smuzhiyun
sigterm_handler(int sig)41*4882a593Smuzhiyun static void sigterm_handler(int sig) {
42*4882a593Smuzhiyun fprintf(stderr, "signal %d\n", sig);
43*4882a593Smuzhiyun quit = 1;
44*4882a593Smuzhiyun }
45*4882a593Smuzhiyun
app_disp_rotation(void)46*4882a593Smuzhiyun int app_disp_rotation(void)
47*4882a593Smuzhiyun {
48*4882a593Smuzhiyun return g_disp_rotation;
49*4882a593Smuzhiyun }
50*4882a593Smuzhiyun
lvgl_init(void)51*4882a593Smuzhiyun static void lvgl_init(void)
52*4882a593Smuzhiyun {
53*4882a593Smuzhiyun lv_init();
54*4882a593Smuzhiyun
55*4882a593Smuzhiyun #ifdef USE_SDL_GPU
56*4882a593Smuzhiyun hal_sdl_init(0, 0, g_disp_rotation);
57*4882a593Smuzhiyun #else
58*4882a593Smuzhiyun hal_drm_init(0, 0, g_disp_rotation);
59*4882a593Smuzhiyun #endif
60*4882a593Smuzhiyun lv_port_fs_init();
61*4882a593Smuzhiyun lv_port_indev_init(g_indev_rotation);
62*4882a593Smuzhiyun }
63*4882a593Smuzhiyun
font_init(void)64*4882a593Smuzhiyun static void font_init(void)
65*4882a593Smuzhiyun {
66*4882a593Smuzhiyun lv_freetype_init(64, 1, 0);
67*4882a593Smuzhiyun
68*4882a593Smuzhiyun ttf_main_s.name = MAIN_FONT;
69*4882a593Smuzhiyun ttf_main_s.weight = 26;
70*4882a593Smuzhiyun ttf_main_s.style = FT_FONT_STYLE_NORMAL;
71*4882a593Smuzhiyun lv_ft_font_init(&ttf_main_s);
72*4882a593Smuzhiyun
73*4882a593Smuzhiyun ttf_main_m.name = MAIN_FONT;
74*4882a593Smuzhiyun ttf_main_m.weight = 36;
75*4882a593Smuzhiyun ttf_main_m.style = FT_FONT_STYLE_NORMAL;
76*4882a593Smuzhiyun lv_ft_font_init(&ttf_main_m);
77*4882a593Smuzhiyun
78*4882a593Smuzhiyun ttf_main_l.name = MAIN_FONT;
79*4882a593Smuzhiyun ttf_main_l.weight = 140;
80*4882a593Smuzhiyun ttf_main_l.style = FT_FONT_STYLE_NORMAL;
81*4882a593Smuzhiyun lv_ft_font_init(&ttf_main_l);
82*4882a593Smuzhiyun }
83*4882a593Smuzhiyun
style_init(void)84*4882a593Smuzhiyun static void style_init(void)
85*4882a593Smuzhiyun {
86*4882a593Smuzhiyun lv_style_init(&style_txt_s);
87*4882a593Smuzhiyun lv_style_set_text_font(&style_txt_s, ttf_main_s.font);
88*4882a593Smuzhiyun lv_style_set_text_color(&style_txt_s, lv_color_black());
89*4882a593Smuzhiyun
90*4882a593Smuzhiyun lv_style_init(&style_txt_m);
91*4882a593Smuzhiyun lv_style_set_text_font(&style_txt_m, ttf_main_m.font);
92*4882a593Smuzhiyun lv_style_set_text_color(&style_txt_m, lv_color_black());
93*4882a593Smuzhiyun
94*4882a593Smuzhiyun lv_style_init(&style_txt_l);
95*4882a593Smuzhiyun lv_style_set_text_font(&style_txt_l, ttf_main_l.font);
96*4882a593Smuzhiyun lv_style_set_text_color(&style_txt_l, lv_color_black());
97*4882a593Smuzhiyun }
98*4882a593Smuzhiyun
app_init(void)99*4882a593Smuzhiyun void app_init(void)
100*4882a593Smuzhiyun {
101*4882a593Smuzhiyun font_init();
102*4882a593Smuzhiyun style_init();
103*4882a593Smuzhiyun }
104*4882a593Smuzhiyun
main(int argc,char ** argv)105*4882a593Smuzhiyun int main(int argc, char **argv)
106*4882a593Smuzhiyun {
107*4882a593Smuzhiyun #define FPS 0
108*4882a593Smuzhiyun #if FPS
109*4882a593Smuzhiyun float maxfps = 0.0, minfps = 1000.0;
110*4882a593Smuzhiyun float fps;
111*4882a593Smuzhiyun float fps0 = 0, fps1 = 0;
112*4882a593Smuzhiyun uint32_t st, et;
113*4882a593Smuzhiyun uint32_t st0 = 0, et0;
114*4882a593Smuzhiyun #endif
115*4882a593Smuzhiyun signal(SIGINT, sigterm_handler);
116*4882a593Smuzhiyun lvgl_init();
117*4882a593Smuzhiyun
118*4882a593Smuzhiyun app_init();
119*4882a593Smuzhiyun
120*4882a593Smuzhiyun rk_demo_init();
121*4882a593Smuzhiyun
122*4882a593Smuzhiyun while(!quit) {
123*4882a593Smuzhiyun #if FPS
124*4882a593Smuzhiyun st = clock_ms();
125*4882a593Smuzhiyun #endif
126*4882a593Smuzhiyun lv_task_handler();
127*4882a593Smuzhiyun #if FPS
128*4882a593Smuzhiyun et = clock_ms();
129*4882a593Smuzhiyun fps = 1000 / (et - st);
130*4882a593Smuzhiyun if (fps != 0.0 && fps < minfps) {
131*4882a593Smuzhiyun minfps = fps;
132*4882a593Smuzhiyun printf("Update minfps %f\n", minfps);
133*4882a593Smuzhiyun }
134*4882a593Smuzhiyun if (fps < 60 && fps > maxfps) {
135*4882a593Smuzhiyun maxfps = fps;
136*4882a593Smuzhiyun printf("Update maxfps %f\n", maxfps);
137*4882a593Smuzhiyun }
138*4882a593Smuzhiyun if (fps > 0.0 && fps < 60) {
139*4882a593Smuzhiyun fps0 = (fps0 + fps) / 2;
140*4882a593Smuzhiyun fps1 = (fps0 + fps1) / 2;
141*4882a593Smuzhiyun }
142*4882a593Smuzhiyun et0 = clock_ms();
143*4882a593Smuzhiyun if ((et0 - st0) > 1000) {
144*4882a593Smuzhiyun printf("avg:%f\n", fps1);
145*4882a593Smuzhiyun st0 = et0;
146*4882a593Smuzhiyun }
147*4882a593Smuzhiyun #endif
148*4882a593Smuzhiyun usleep(100);
149*4882a593Smuzhiyun }
150*4882a593Smuzhiyun
151*4882a593Smuzhiyun return 0;
152*4882a593Smuzhiyun }
153