71 lines
1.5 KiB
C++
71 lines
1.5 KiB
C++
#include <lvgl.h>
|
|
#include <SPI.h>
|
|
#include <TFT_eSPI.h>
|
|
#include <Arduino.h>
|
|
|
|
#ifndef SCREEN_WIDTH
|
|
#define SCREEN_WIDTH 320
|
|
#endif
|
|
|
|
#ifndef SCREEN_HEIGHT
|
|
#define SCREEN_HEIGHT 240
|
|
#endif
|
|
|
|
#define DRAW_BUF_SIZE (SCREEN_WIDTH * SCREEN_HEIGHT / 10 * (LV_COLOR_DEPTH / 8))
|
|
uint32_t draw_buf[DRAW_BUF_SIZE / 4];
|
|
|
|
uint32_t get_time();
|
|
void handle_lvgl_logs(lv_log_level_t level, const char *buf);
|
|
void handle_update_values(lv_timer_t *timer);
|
|
|
|
String label_text;
|
|
lv_obj_t *label;
|
|
lv_timer_t *update_values_timer;
|
|
|
|
namespace Display
|
|
{
|
|
void init()
|
|
{
|
|
lv_init();
|
|
lv_log_register_print_cb(handle_lvgl_logs);
|
|
lv_tick_set_cb(get_time);
|
|
|
|
update_values_timer = lv_timer_create(handle_update_values, 5, NULL);
|
|
lv_timer_ready(update_values_timer);
|
|
|
|
lv_display_t *display;
|
|
display = lv_tft_espi_create(SCREEN_HEIGHT, SCREEN_WIDTH, draw_buf, sizeof(draw_buf));
|
|
lv_display_set_rotation(display, LV_DISPLAY_ROTATION_90);
|
|
|
|
label = lv_label_create(lv_screen_active());
|
|
lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
|
|
}
|
|
|
|
void update()
|
|
{
|
|
lv_timer_handler();
|
|
}
|
|
|
|
void set_label_text(String text)
|
|
{
|
|
label_text = text;
|
|
}
|
|
}
|
|
|
|
void handle_lvgl_logs(lv_log_level_t level, const char *buf)
|
|
{
|
|
Serial.printf("LVGL: %s\r\n", buf);
|
|
}
|
|
|
|
uint32_t get_time()
|
|
{
|
|
return esp_timer_get_time() / 1000;
|
|
}
|
|
|
|
void handle_update_values(lv_timer_t *timer)
|
|
{
|
|
if (label != NULL && lv_label_get_text(label) != label_text.c_str())
|
|
{
|
|
lv_label_set_text(label, label_text.c_str());
|
|
}
|
|
} |