84 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "lvgl/lvgl.h"
 | |
| #include "lvgl/demos/lv_demos.h"
 | |
| // #include "lvgl/demos/widgets/lv_demo_widgets.h"
 | |
| #include "lv_drivers/display/fbdev.h"
 | |
| #include "lv_drivers/indev/evdev.h"
 | |
| #include <unistd.h>
 | |
| #include <pthread.h>
 | |
| #include <time.h>
 | |
| #include <sys/time.h>
 | |
| 
 | |
| #define DISP_BUF_SIZE (240 * 360)
 | |
| 
 | |
| int main(void)
 | |
| {
 | |
|     /*LittlevGL init*/
 | |
|     lv_init();
 | |
| 
 | |
|     /*Linux frame buffer device init*/
 | |
|     fbdev_init();
 | |
| 
 | |
|     /*A small buffer for LittlevGL to draw the screen's content*/
 | |
|     static lv_color_t buf[DISP_BUF_SIZE];
 | |
| 
 | |
|     /*Initialize a descriptor for the buffer*/
 | |
|     static lv_disp_draw_buf_t disp_buf;
 | |
|     lv_disp_draw_buf_init(&disp_buf, buf, NULL, DISP_BUF_SIZE);
 | |
| 
 | |
|     /*Initialize and register a display driver*/
 | |
|     static lv_disp_drv_t disp_drv;
 | |
|     lv_disp_drv_init(&disp_drv);
 | |
|     disp_drv.draw_buf   = &disp_buf;
 | |
|     disp_drv.flush_cb   = fbdev_flush;
 | |
|     disp_drv.hor_res    = 240;
 | |
|     disp_drv.ver_res    = 360;
 | |
|     lv_disp_drv_register(&disp_drv);
 | |
| 
 | |
|     // evdev_init();
 | |
|     // static lv_indev_drv_t indev_drv_1;
 | |
|     // lv_indev_drv_init(&indev_drv_1); /*Basic initialization*/
 | |
|     // indev_drv_1.type = LV_INDEV_TYPE_POINTER;
 | |
| 
 | |
|     // /*This function will be called periodically (by the library) to get the mouse position and state*/
 | |
|     // indev_drv_1.read_cb = evdev_read;
 | |
|     // lv_indev_t *mouse_indev = lv_indev_drv_register(&indev_drv_1);
 | |
| 
 | |
| 
 | |
|     // /*Set a cursor for the mouse*/
 | |
|     // LV_IMG_DECLARE(mouse_cursor_icon)
 | |
|     // lv_obj_t * cursor_obj = lv_img_create(lv_scr_act()); /*Create an image object for the cursor */
 | |
|     // lv_img_set_src(cursor_obj, &mouse_cursor_icon);           /*Set the image source*/
 | |
|     // lv_indev_set_cursor(mouse_indev, cursor_obj);             /*Connect the image  object to the driver*/
 | |
| 
 | |
| 
 | |
|     /*Create a Demo*/
 | |
|     lv_demo_widgets();
 | |
| 
 | |
|     /*Handle LitlevGL tasks (tickless mode)*/
 | |
|     while(1) {
 | |
|         lv_timer_handler();
 | |
|         usleep(5000);
 | |
|     }
 | |
| 
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| /*Set in lv_conf.h as `LV_TICK_CUSTOM_SYS_TIME_EXPR`*/
 | |
| uint32_t custom_tick_get(void)
 | |
| {
 | |
|     static uint64_t start_ms = 0;
 | |
|     if(start_ms == 0) {
 | |
|         struct timeval tv_start;
 | |
|         gettimeofday(&tv_start, NULL);
 | |
|         start_ms = (tv_start.tv_sec * 1000000 + tv_start.tv_usec) / 1000;
 | |
|     }
 | |
| 
 | |
|     struct timeval tv_now;
 | |
|     gettimeofday(&tv_now, NULL);
 | |
|     uint64_t now_ms;
 | |
|     now_ms = (tv_now.tv_sec * 1000000 + tv_now.tv_usec) / 1000;
 | |
| 
 | |
|     uint32_t time_ms = now_ms - start_ms;
 | |
|     return time_ms;
 | |
| }
 | 
