lvgl_t113 0.1
t113-s3 86盒的LVGL桌面时钟程序
载入中...
搜索中...
未找到
main.c
浏览该文件的文档.
1
57#include "lvgl/lvgl.h"
58#include "lvgl/demos/lv_demos.h"
59#include "lv_drivers/display/sunxifb.h"
60#include "lv_drivers/indev/evdev.h"
61#include <unistd.h>
62#include <pthread.h>
63#include <time.h>
64#include <sys/time.h>
65#include <stdlib.h>
66#include <stdio.h>
67#include "lv_font.h"
68
69#include "page/home_page.h"
70#include "page/calender_page.h"
71#include "page/message_page.h"
72
74
75static void hal_init(void);
76static int tick_thread(void *data);
77
78
79
87int main(int argc, char *argv[])
88{
89 if (argv[1] == NULL || atoi(argv[1]) < 0 || atoi(argv[1]) > 5) {
90 printf("lv_examples 0, is lv_demo_widgets\n");
91 printf("lv_examples 1, is lv_demo_music\n");
92 printf("lv_examples 2, is lv_demo_benchmark\n");
93 printf("lv_examples 3, is lv_demo_keypad_encoder\n");
94 printf("lv_examples 4, is lv_demo_stress\n");
95 return 0;
96 }
97
98 /*LittlevGL init*/
99 lv_init();
100
101 uint32_t rotated = LV_DISP_ROT_NONE;
102
103 /*Linux frame buffer device init*/
104 sunxifb_init(rotated);
105
106 /*A buffer for LittlevGL to draw the screen's content*/
107 static uint32_t width, height;
108 sunxifb_get_sizes(&width, &height);
109
110 static lv_color_t *buf;
111 buf = (lv_color_t*) sunxifb_alloc(width * height * sizeof(lv_color_t),
112 "lv_examples");
113
114 if (buf == NULL) {
115 sunxifb_exit();
116 printf("malloc draw buffer fail\n");
117 return 0;
118 }
119
120 /*Initialize a descriptor for the buffer*/
121 static lv_disp_draw_buf_t disp_buf;
122 lv_disp_draw_buf_init(&disp_buf, buf, NULL, width * height);
123
124 /*Initialize and register a display driver*/
125 static lv_disp_drv_t disp_drv;
126 lv_disp_drv_init(&disp_drv);
127 disp_drv.draw_buf = &disp_buf;
128 disp_drv.flush_cb = sunxifb_flush;
129 disp_drv.hor_res = width;
130 disp_drv.ver_res = height;
131 disp_drv.rotated = rotated;
132#ifndef USE_SUNXIFB_G2D_ROTATE
133 if (rotated != LV_DISP_ROT_NONE)
134 disp_drv.sw_rotate = 1;
135#endif
136 lv_disp_drv_register(&disp_drv);
137
138 evdev_init();
139 static lv_indev_drv_t indev_drv;
140 lv_indev_drv_init(&indev_drv); /*Basic initialization*/
141 indev_drv.type =LV_INDEV_TYPE_POINTER; /*See below.*/
142 indev_drv.read_cb = evdev_read; /*See below.*/
143 /*Register the driver in LVGL and save the created input device object*/
144 lv_indev_t * evdev_indev = lv_indev_drv_register(&indev_drv);
145
146 /*Create a Demo*/
147 switch(atoi(argv[1])) {
148 case 0:
149 lv_demo_widgets();
150 break;
151 case 1:
152 lv_demo_music();
153 break;
154 case 2:
155 lv_demo_benchmark();
156 break;
157 case 3:
158 lv_demo_keypad_encoder();
159 break;
160 case 4:
161 lv_demo_stress();
162 break;
163 case 5:
165 HomePage();
166 CalenderPage();
167 MessagePage();
168 lv_scr_load(HomePage_OBJ);
169 break;
170 default:
171 free(buf);
172 sunxifb_exit();
173 return 0;
174 }
175
176 /*Handle LitlevGL tasks (tickless mode)*/
177 while(1) {
178 lv_task_handler();
179 usleep(5000);
180 }
181
182 /*sunxifb_free((void**) &buf, "lv_examples");*/
183 /*sunxifb_exit();*/
184 return 0;
185}
186
187
193uint32_t custom_tick_get(void) {
194 static uint64_t start_ms = 0;
195 if (start_ms == 0) {
196 struct timeval tv_start;
197 gettimeofday(&tv_start, NULL);
198 start_ms = ((uint64_t) tv_start.tv_sec * 1000000
199 + (uint64_t) tv_start.tv_usec) / 1000;
200 }
201
202 struct timeval tv_now;
203 gettimeofday(&tv_now, NULL);
204 uint64_t now_ms;
205 now_ms = ((uint64_t) tv_now.tv_sec * 1000000 + (uint64_t) tv_now.tv_usec)
206 / 1000;
207
208 uint32_t time_ms = now_ms - start_ms;
209 return time_ms;
210}
void CalenderPage(void)
日历页面
lv_obj_t * HomePage_OBJ
void HomePage(void)
主页面
int main(int argc, char *argv[])
主程序入口函数
定义 main.c:87
uint32_t custom_tick_get(void)
LVGL心跳接口
定义 main.c:193
static int tick_thread(void *data)
static void hal_init(void)
void MessagePage()
消息页面
int start_mqtt_client()
启动MQTT客户端。