1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun * Copyright (c) 2021 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 static int g_indev_rotation = 90;
25*4882a593Smuzhiyun static int g_disp_rotation = LV_DISP_ROT_90;
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun static int quit = 0;
28*4882a593Smuzhiyun
29*4882a593Smuzhiyun #if LV_USE_DEMO_WIDGETS
30*4882a593Smuzhiyun extern void lv_demo_widgets(void);
31*4882a593Smuzhiyun #elif LV_USE_DEMO_KEYPAD_AND_ENCODER
32*4882a593Smuzhiyun extern void lv_demo_keypad_encoder(void);
33*4882a593Smuzhiyun #elif LV_USE_DEMO_BENCHMARK
34*4882a593Smuzhiyun extern void lv_demo_benchmark(void);
35*4882a593Smuzhiyun #elif LV_USE_DEMO_STRESS
36*4882a593Smuzhiyun extern void lv_demo_stress(void);
37*4882a593Smuzhiyun #elif LV_USE_DEMO_MUSIC
38*4882a593Smuzhiyun extern void lv_demo_music(void);
39*4882a593Smuzhiyun #endif
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
main(int argc,char ** argv)64*4882a593Smuzhiyun int main(int argc, char **argv)
65*4882a593Smuzhiyun {
66*4882a593Smuzhiyun #define FPS 0
67*4882a593Smuzhiyun #if FPS
68*4882a593Smuzhiyun float maxfps = 0.0, minfps = 1000.0;
69*4882a593Smuzhiyun float fps;
70*4882a593Smuzhiyun float fps0 = 0, fps1 = 0;
71*4882a593Smuzhiyun uint32_t st, et;
72*4882a593Smuzhiyun uint32_t st0 = 0, et0;
73*4882a593Smuzhiyun #endif
74*4882a593Smuzhiyun signal(SIGINT, sigterm_handler);
75*4882a593Smuzhiyun lvgl_init();
76*4882a593Smuzhiyun
77*4882a593Smuzhiyun #if LV_USE_DEMO_WIDGETS
78*4882a593Smuzhiyun lv_demo_widgets();
79*4882a593Smuzhiyun #elif LV_USE_DEMO_KEYPAD_AND_ENCODER
80*4882a593Smuzhiyun lv_demo_keypad_encoder();
81*4882a593Smuzhiyun #elif LV_USE_DEMO_BENCHMARK
82*4882a593Smuzhiyun lv_demo_benchmark();
83*4882a593Smuzhiyun #elif LV_USE_DEMO_STRESS
84*4882a593Smuzhiyun lv_demo_stress();
85*4882a593Smuzhiyun #elif LV_USE_DEMO_MUSIC
86*4882a593Smuzhiyun lv_demo_music();
87*4882a593Smuzhiyun #endif
88*4882a593Smuzhiyun
89*4882a593Smuzhiyun while(!quit) {
90*4882a593Smuzhiyun #if FPS
91*4882a593Smuzhiyun st = clock_ms();
92*4882a593Smuzhiyun #endif
93*4882a593Smuzhiyun lv_task_handler();
94*4882a593Smuzhiyun #if FPS
95*4882a593Smuzhiyun et = clock_ms();
96*4882a593Smuzhiyun fps = 1000 / (et - st);
97*4882a593Smuzhiyun if (fps != 0.0 && fps < minfps) {
98*4882a593Smuzhiyun minfps = fps;
99*4882a593Smuzhiyun printf("Update minfps %f\n", minfps);
100*4882a593Smuzhiyun }
101*4882a593Smuzhiyun if (fps < 60 && fps > maxfps) {
102*4882a593Smuzhiyun maxfps = fps;
103*4882a593Smuzhiyun printf("Update maxfps %f\n", maxfps);
104*4882a593Smuzhiyun }
105*4882a593Smuzhiyun if (fps > 0.0 && fps < 60) {
106*4882a593Smuzhiyun fps0 = (fps0 + fps) / 2;
107*4882a593Smuzhiyun fps1 = (fps0 + fps1) / 2;
108*4882a593Smuzhiyun }
109*4882a593Smuzhiyun et0 = clock_ms();
110*4882a593Smuzhiyun if ((et0 - st0) > 1000) {
111*4882a593Smuzhiyun printf("avg:%f\n", fps1);
112*4882a593Smuzhiyun st0 = et0;
113*4882a593Smuzhiyun }
114*4882a593Smuzhiyun #endif
115*4882a593Smuzhiyun usleep(100);
116*4882a593Smuzhiyun }
117*4882a593Smuzhiyun
118*4882a593Smuzhiyun return 0;
119*4882a593Smuzhiyun }
120