summaryrefslogtreecommitdiff
path: root/src/libs/lvgl/tests/lv_test_main.c
blob: c590c62fea9724bb1c7eca282e6dcf6ab94e7cf2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include "../lvgl.h"
#include <stdio.h>
#include <stdlib.h>
#include "lv_test_core/lv_test_core.h"
#include "lv_test_widgets/lv_test_label.h"

#if LV_BUILD_TEST
#include <sys/time.h>

static void hal_init(void);
static void dummy_flush_cb(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p);

lv_color_t test_fb[LV_HOR_RES_MAX * LV_VER_RES_MAX];

int main(void)
{
    printf("Call lv_init...\n");
    lv_init();

    hal_init();

    lv_test_core();
    lv_test_label();

    printf("Exit with success!\n");
    return 0;
}

#if LV_USE_FILESYSTEM
static lv_fs_res_t open_cb(struct _lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t mode)
{
    (void) drv;
    (void) mode;

    FILE * fp = fopen(path, "rb"); // only reading is supported

    *((FILE **)file_p) = fp;
    return NULL == fp ? LV_FS_RES_UNKNOWN : LV_FS_RES_OK;
}

static lv_fs_res_t close_cb(struct _lv_fs_drv_t * drv, void * file_p)
{
    (void) drv;

    FILE * fp = *((FILE **) file_p);
    fclose(fp);
    return LV_FS_RES_OK;
}

static lv_fs_res_t read_cb(struct _lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br)
{
    (void) drv;

    FILE * fp = *((FILE **) file_p);
    *br = fread(buf, 1, btr, fp);
    return (*br <= 0) ? LV_FS_RES_UNKNOWN : LV_FS_RES_OK;
}

static lv_fs_res_t seek_cb(struct _lv_fs_drv_t * drv, void * file_p, uint32_t pos)
{
    (void) drv;

    FILE * fp = *((FILE **) file_p);
    fseek (fp, pos, SEEK_SET);

    return LV_FS_RES_OK;
}

static lv_fs_res_t tell_cb(struct _lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p)
{
    (void) drv;

    FILE * fp = *((FILE **) file_p);
    *pos_p = ftell(fp);

    return LV_FS_RES_OK;
}

static bool ready_cb(struct _lv_fs_drv_t * drv)
{
    (void) drv;
    return true;
}
#endif

static void hal_init(void)
{
    static lv_disp_buf_t disp_buf;
    lv_color_t * disp_buf1 = (lv_color_t *)malloc(LV_HOR_RES * LV_VER_RES * sizeof(lv_color_t));

    lv_disp_buf_init(&disp_buf, disp_buf1, NULL, LV_HOR_RES * LV_VER_RES);

    lv_disp_drv_t disp_drv;
    lv_disp_drv_init(&disp_drv);
    disp_drv.buffer = &disp_buf;
    disp_drv.flush_cb = dummy_flush_cb;
    lv_disp_drv_register(&disp_drv);

#if LV_USE_FILESYSTEM
    lv_fs_drv_t drv;
    lv_fs_drv_init(&drv);                     /*Basic initialization*/

    drv.letter = 'f';                         /*An uppercase letter to identify the drive */
    drv.file_size = sizeof(FILE *);   /*Size required to store a file object*/
    drv.ready_cb = ready_cb;               /*Callback to tell if the drive is ready to use */
    drv.open_cb = open_cb;                 /*Callback to open a file */
    drv.close_cb = close_cb;               /*Callback to close a file */
    drv.read_cb = read_cb;                 /*Callback to read a file */
    drv.seek_cb = seek_cb;                 /*Callback to seek in a file (Move cursor) */
    drv.tell_cb = tell_cb;                 /*Callback to tell the cursor position  */

    lv_fs_drv_register(&drv);                 /*Finally register the drive*/
#endif
}
#include <stdio.h>

static void dummy_flush_cb(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
{
    LV_UNUSED(area);
    LV_UNUSED(color_p);

    memcpy(test_fb, color_p, lv_area_get_size(area) * sizeof(lv_color_t));

    lv_disp_flush_ready(disp_drv);
}

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;
}

#endif