Files
luban-lite-t3e-pro/packages/artinchip/lvgl-ui/aic_demo/dashboard_demo/dashboard_ui.c
刘可亮 8bca5e8332 v1.0.4
2024-04-03 16:40:57 +08:00

386 lines
11 KiB
C

/*
* Copyright (C) 2023-2024 ArtinChip Technology Co., Ltd.
* Authors: Ning Fang <ning.fang@artinchip.com>
*/
#include <unistd.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include "lvgl.h"
#include "dashboard_ui.h"
#include "aic_ui.h"
#include "lv_port_disp.h"
#include "mpp_fb.h"
#ifdef LPKG_USING_CPU_USAGE
#include "cpu_usage.h"
#endif
static lv_obj_t *img_bg = NULL;
static lv_obj_t *arc = NULL;
static lv_obj_t *bg_fps = NULL;
#ifdef KERNEL_RTTHREAD
static lv_obj_t *bg_cpu = NULL;
#endif
static lv_obj_t *img_speed_high = NULL;
static lv_obj_t *img_speed_low = NULL;
static lv_obj_t *img_speed_km = NULL;
static lv_obj_t *img_t1 = NULL;
static lv_obj_t *img_t2 = NULL;
static lv_obj_t *img_t3 = NULL;
static lv_obj_t *img_t4 = NULL;
static lv_obj_t *img_t5 = NULL;
static lv_obj_t *img_t6 = NULL;
static lv_obj_t *img_t8 = NULL;
static lv_obj_t *img_t12 = NULL;
static lv_obj_t *img_b1 = NULL;
static lv_obj_t *img_b2 = NULL;
static lv_obj_t *img_b3 = NULL;
static lv_obj_t *img_b4 = NULL;
static lv_obj_t *img_b5 = NULL;
static lv_obj_t *img_b6 = NULL;
static lv_obj_t *img_b7 = NULL;
static lv_obj_t *img_b8 = NULL;
static lv_obj_t *img_b9 = NULL;
static lv_obj_t *img_trip = NULL;
static lv_obj_t *img_trip_0 = NULL;
static lv_obj_t *img_trip_1 = NULL;
static lv_obj_t *img_trip_2 = NULL;
static lv_obj_t *img_trip_3 = NULL;
static lv_obj_t *img_trip_km = NULL;
static int last_high = -1;
static int last_low = -1;
static int end_degree = 250;
static int direct = 0;
static int cur_degree = 0;
static int max_speed = 99;
static lv_obj_t *obj_list[17] = { NULL };
LV_FONT_DECLARE(ui_font_Title);
static void point_callback(lv_timer_t *tmr)
{
lv_arc_set_end_angle(arc, cur_degree);
if (direct == 0) {
cur_degree++;
if (cur_degree > end_degree) {
cur_degree = end_degree - 1;
direct = 1;
}
} else {
cur_degree--;
if (cur_degree < 0) {
cur_degree = 1;
direct = 0;
}
}
return;
}
static void fps_callback(lv_timer_t *tmr)
{
char data_str[128];
#ifdef KERNEL_RTTHREAD
float value;
#endif
(void)tmr;
/* frame rate */
ui_snprintf(data_str, "%2d FPS", fbdev_draw_fps());
lv_label_set_text(bg_fps, data_str);
#ifdef KERNEL_RTTHREAD
/* cpu usage */
#ifdef LPKG_USING_CPU_USAGE
#include "cpu_usage.h"
value = cpu_load_average();
#else
value = 0;
#endif
ui_snprintf(data_str, "%d%% CPU", (int)value);
lv_label_set_text(bg_cpu, data_str);
#endif /* KERNEL_RTTHREAD */
return;
}
static void speed_callback(lv_timer_t *tmr)
{
char data_str[128];
int speed_num = ((cur_degree << 8) / end_degree * max_speed) >> 8;
int cur_low = speed_num % 10;
int cur_high = speed_num / 10;
if (cur_low != last_low) {
ui_snprintf(data_str, "%sspeed_num/s_%d.png", LVGL_DIR, speed_num % 10);
lv_img_set_src(img_speed_low, data_str);
last_low = cur_low;
}
if (cur_high != last_high) {
ui_snprintf(data_str, "%sspeed_num/s_%d.png", LVGL_DIR, speed_num / 10);
lv_img_set_src(img_speed_high, data_str);
last_high = cur_high;
}
}
static void trip_callback(lv_timer_t *tmr)
{
char data_str[128];
int num[4];
int cur;
static int trip = 98;
(void)tmr;
trip++;
if (trip >= 9999)
trip = 0;
num[0] = trip / 1000;
cur = trip % 1000;
num[1] = cur / 100;
cur = cur % 100;
num[2] = cur / 10;
num[3] = cur % 10;
ui_snprintf(data_str, "%smileage/%d.png", LVGL_DIR, num[0]);
lv_img_set_src(img_trip_0, data_str);
ui_snprintf(data_str, "%smileage/%d.png", LVGL_DIR, num[1]);
lv_img_set_src(img_trip_1, data_str);
ui_snprintf(data_str, "%smileage/%d.png", LVGL_DIR, num[2]);
lv_img_set_src(img_trip_2, data_str);
ui_snprintf(data_str, "%smileage/%d.png", LVGL_DIR, num[3]);
lv_img_set_src(img_trip_3, data_str);
}
static void obj_set_clear_hidden_flag(lv_obj_t *obj)
{
if (lv_obj_has_flag(obj, LV_OBJ_FLAG_HIDDEN)) {
lv_obj_clear_flag(obj, LV_OBJ_FLAG_HIDDEN);
} else {
lv_obj_add_flag(obj, LV_OBJ_FLAG_HIDDEN);
}
}
static void signal_callback(lv_timer_t *tmr)
{
static int index = 0;
static int mode = 0;
(void)tmr;
if (obj_list[index]) {
obj_set_clear_hidden_flag(obj_list[index]);
}
mode++;
if (mode == 2) {
mode = 0;
index++;
if (index == 17) {
index = 0;
}
}
}
void dashboard_ui_init()
{
lv_obj_set_style_bg_color(lv_scr_act(), lv_color_hex(0x000000), 0);
img_bg = lv_img_create(lv_scr_act());
lv_img_set_src(img_bg, LVGL_PATH(bg/normal.jpg));
lv_obj_center(img_bg);
bg_fps = lv_label_create(lv_scr_act());
lv_obj_set_width(bg_fps, LV_SIZE_CONTENT);
lv_obj_set_height(bg_fps, LV_SIZE_CONTENT);
lv_obj_align(bg_fps, LV_ALIGN_TOP_LEFT, 0, 0);
lv_obj_set_pos(bg_fps, 20, 30);
lv_label_set_text(bg_fps, "");
lv_obj_set_style_text_color(bg_fps, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_opa(bg_fps, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_font(bg_fps, &ui_font_Title, LV_PART_MAIN | LV_STATE_DEFAULT);
#ifdef KERNEL_RTTHREAD
bg_cpu = lv_label_create(lv_scr_act());
lv_obj_set_width(bg_cpu, LV_SIZE_CONTENT);
lv_obj_set_height(bg_cpu, LV_SIZE_CONTENT);
lv_obj_align(bg_cpu, LV_ALIGN_TOP_LEFT, 0, 0);
lv_obj_set_pos(bg_cpu, 20, 10);
lv_label_set_text(bg_cpu, "");
lv_obj_set_style_text_color(bg_cpu, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_opa(bg_cpu, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_font(bg_cpu, &ui_font_Title, LV_PART_MAIN | LV_STATE_DEFAULT);
#endif
static lv_style_t style_bg;
lv_style_init(&style_bg);
lv_style_set_arc_rounded(&style_bg, 0);
lv_style_set_arc_width(&style_bg, 0);
lv_style_set_arc_opa(&style_bg, LV_OPA_0);
static lv_style_t style_fp;
lv_style_init(&style_fp);
lv_style_set_arc_color(&style_fp, lv_palette_main(LV_PALETTE_RED));
lv_style_set_arc_rounded(&style_fp, 0);
lv_style_set_arc_width(&style_fp, 80);
lv_style_set_arc_img_src(&style_fp, LVGL_PATH(point/normal.png));
// Create an Arc
arc = lv_arc_create(lv_scr_act());
lv_obj_set_size(arc, 540, 540);
lv_arc_set_rotation(arc, 135);
lv_arc_set_angles(arc, 0, end_degree);
lv_arc_set_bg_angles(arc, 0, end_degree);
lv_arc_set_range(arc, 0, max_speed);
lv_arc_set_value(arc, 0);
lv_arc_set_end_angle(arc, 0);
lv_obj_center(arc);
lv_obj_add_style(arc, &style_fp, LV_PART_INDICATOR);
lv_obj_add_style(arc, &style_bg, LV_PART_MAIN);
lv_obj_remove_style(arc, NULL, LV_PART_KNOB);
lv_obj_clear_flag(arc, LV_OBJ_FLAG_CLICKABLE);
// speed
img_speed_high = lv_img_create(lv_scr_act());
lv_img_set_src(img_speed_high, LVGL_PATH(speed_num/s_0.png));
lv_obj_set_pos(img_speed_high, 450, 280);
img_speed_low = lv_img_create(lv_scr_act());
lv_img_set_src(img_speed_low, LVGL_PATH(speed_num/s_0.png));
lv_obj_set_pos(img_speed_low, 520, 280);
img_speed_km = lv_img_create(lv_scr_act());
lv_img_set_src(img_speed_km, LVGL_PATH(speed_num/s_kmh.png));
lv_obj_set_pos(img_speed_km, 470, 370);
img_t1 = lv_img_create(lv_scr_act());
lv_img_set_src(img_t1, LVGL_PATH(head/t_1.png));
lv_obj_set_pos(img_t1, 16, 50);
img_t2 = lv_img_create(lv_scr_act());
lv_img_set_src(img_t2, LVGL_PATH(head/t_2.png));
lv_obj_set_pos(img_t2, 66, 50);
img_t3 = lv_img_create(lv_scr_act());
lv_img_set_src(img_t3, LVGL_PATH(head/t_3.png));
lv_obj_set_pos(img_t3, 160, 8);
img_t4 = lv_img_create(lv_scr_act());
lv_img_set_src(img_t4, LVGL_PATH(head/t_4.png));
lv_obj_set_pos(img_t4, 220, 8);
img_t12 = lv_img_create(lv_scr_act());
lv_img_set_src(img_t12, LVGL_PATH(head/t_12.png));
lv_obj_set_pos(img_t12, 414, 8);
img_t5 = lv_img_create(lv_scr_act());
lv_img_set_src(img_t5, LVGL_PATH(head/t_5.png));
lv_obj_set_pos(img_t5, 770, 8);
img_t6 = lv_img_create(lv_scr_act());
lv_img_set_src(img_t6, LVGL_PATH(head/t_6.png));
lv_obj_set_pos(img_t6, 822, 8);
img_t8 = lv_img_create(lv_scr_act());
lv_img_set_src(img_t8, LVGL_PATH(head/t_8.png));
lv_obj_set_pos(img_t8, 878, 8);
img_b1 = lv_img_create(lv_scr_act());
lv_img_set_src(img_b1, LVGL_PATH(end/b_1.png));
lv_obj_set_pos(img_b1, 82, 528);
img_b2 = lv_img_create(lv_scr_act());
lv_img_set_src(img_b2, LVGL_PATH(end/b_2.png));
lv_obj_set_pos(img_b2, 140, 528);
img_b3 = lv_img_create(lv_scr_act());
lv_img_set_src(img_b3, LVGL_PATH(end/b_3.png));
lv_obj_set_pos(img_b3, 202, 528);
img_b4 = lv_img_create(lv_scr_act());
lv_img_set_src(img_b4, LVGL_PATH(end/b_4.png));
lv_obj_set_pos(img_b4, 262, 528);
img_b5 = lv_img_create(lv_scr_act());
lv_img_set_src(img_b5, LVGL_PATH(end/b_5.png));
lv_obj_set_pos(img_b5, 322, 528);
img_b6 = lv_img_create(lv_scr_act());
lv_img_set_src(img_b6, LVGL_PATH(end/b_6.png));
lv_obj_set_pos(img_b6, 656, 528);
img_b7 = lv_img_create(lv_scr_act());
lv_img_set_src(img_b7, LVGL_PATH(end/b_7.png));
lv_obj_set_pos(img_b7, 720, 528);
img_b8 = lv_img_create(lv_scr_act());
lv_img_set_src(img_b8, LVGL_PATH(end/b_8.png));
lv_obj_set_pos(img_b8, 782, 528);
img_b9 = lv_img_create(lv_scr_act());
lv_img_set_src(img_b9, LVGL_PATH(end/b_9.png));
lv_obj_set_pos(img_b9, 838, 528);
int trip_offset = 429;
img_trip = lv_img_create(lv_scr_act());
lv_img_set_src(img_trip, LVGL_PATH(mileage/trip.png));
lv_obj_set_pos(img_trip, trip_offset, 534);
img_trip_0 = lv_img_create(lv_scr_act());
lv_img_set_src(img_trip_0, LVGL_PATH(mileage/0.png));
lv_obj_set_pos(img_trip_0, 65 + trip_offset, 534);
img_trip_1 = lv_img_create(lv_scr_act());
lv_img_set_src(img_trip_1, LVGL_PATH(mileage/0.png));
lv_obj_set_pos(img_trip_1, 80 + trip_offset, 534);
img_trip_2 = lv_img_create(lv_scr_act());
lv_img_set_src(img_trip_2, LVGL_PATH(mileage/9.png));
lv_obj_set_pos(img_trip_2, 95 + trip_offset, 534);
img_trip_3 = lv_img_create(lv_scr_act());
lv_img_set_src(img_trip_3, LVGL_PATH(mileage/8.png));
lv_obj_set_pos(img_trip_3, 110 + trip_offset, 534);
img_trip_km = lv_img_create(lv_scr_act());
lv_img_set_src(img_trip_km, LVGL_PATH(mileage/km.png));
lv_obj_set_pos(img_trip_km, 130 + trip_offset, 534);
obj_list[0] = img_t1;
obj_list[1] = img_t2;
obj_list[2] = img_t3;
obj_list[3] = img_t4;
obj_list[4] = img_t12;
obj_list[5] = img_t5;
obj_list[6] = img_t6;
obj_list[7] = img_t8;
obj_list[8] = img_b1;
obj_list[9] = img_b2;
obj_list[10] = img_b3;
obj_list[11] = img_b4;
obj_list[12] = img_b5;
obj_list[13] = img_b6;
obj_list[14] = img_b7;
obj_list[15] = img_b8;
obj_list[16] = img_b9;
lv_timer_create(point_callback, 10, 0);
lv_timer_create(fps_callback, 1000, 0);
lv_timer_create(speed_callback, 60, 0);
lv_timer_create(trip_callback, 1000 * 5, 0);
lv_timer_create(signal_callback, 500, 0);
}