115 lines
3.0 KiB
C
Executable File
115 lines
3.0 KiB
C
Executable File
#include "lvgl.h"
|
|
#include "demos/lv_demos.h"
|
|
#include "display/fbdev.h"
|
|
#include "indev/evdev.h"
|
|
#include "ILog.h"
|
|
#include <unistd.h>
|
|
#include <pthread.h>
|
|
#include <time.h>
|
|
#include <sys/time.h>
|
|
|
|
#define DISP_BUF_SIZE (240 * 360)
|
|
|
|
static bool LvglRuning = false;
|
|
|
|
int lvgl_board_main(const unsigned int width, const unsigned int height, void (*appInit)())
|
|
{
|
|
static lv_color_t *DispBuf = NULL;
|
|
/*A small buffer for LittlevGL to draw the screen's content*/
|
|
int dispBufSize = width * height;
|
|
if (NULL == DispBuf)
|
|
{
|
|
DispBuf = (lv_color_t *)malloc(sizeof(lv_color_t) * dispBufSize);
|
|
if (NULL == DispBuf)
|
|
{
|
|
LogError("malloc failed.\n");
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
/*LittlevGL init*/
|
|
lv_init();
|
|
|
|
/*Linux frame buffer device init*/
|
|
fbdev_init();
|
|
|
|
/*Initialize a descriptor for the buffer*/
|
|
static lv_disp_draw_buf_t disp_buf;
|
|
lv_disp_draw_buf_init(&disp_buf, DispBuf, NULL, dispBufSize);
|
|
|
|
/*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 = width;
|
|
disp_drv.ver_res = height;
|
|
lv_disp_drv_register(&disp_drv);
|
|
|
|
// mouse start
|
|
// 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*/
|
|
// mouse end
|
|
|
|
/*Create a Demo*/
|
|
// lv_demo_widgets();
|
|
if (appInit)
|
|
{
|
|
appInit();
|
|
}
|
|
|
|
/*Handle LitlevGL tasks (tickless mode)*/
|
|
LvglRuning = true;
|
|
while (LvglRuning)
|
|
{
|
|
lv_timer_handler();
|
|
usleep(5000);
|
|
}
|
|
// lv_deinit();
|
|
fbdev_exit();
|
|
if (DispBuf)
|
|
{
|
|
free(DispBuf);
|
|
DispBuf = NULL;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int lvgl_board_exit(void)
|
|
{
|
|
LogInfo("lvgl_board_exit.\n");
|
|
LvglRuning = false;
|
|
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;
|
|
}
|