simulator/lvgl_v8_back/main.c

1384 lines
49 KiB
C
Executable File

/**
* @file main
*
*/
/*********************
* INCLUDES
*********************/
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "lvgl/lvgl.h"
#include "lvgl/demos/widgets/lv_demo_widgets.h"
#include "lv_drivers/win32drv/win32drv.h"
#include <windows.h>
/*******************************字体加载**********************************/
LV_FONT_DECLARE(lv_font_heiti24)
LV_FONT_DECLARE(lv_font_heiti100)
/*******************************屏幕定义、参数**********************************/
#define top() lv_scr_act()
#define scr_act_width() lv_obj_get_width(lv_scr_act())
#define scr_act_height() lv_obj_get_height(lv_scr_act())
/*******************************外部图片定义**********************************/
#define return_img "E:return.png"
#define home_img "E:home.png"
#define vol_img "E:vol.png"
#define light_img "E:light.png"
#define symbol_img "E:dropdown.png"
#define warn_img "E:warning.png"
#define wait_img "E:wait.png"
#define succ_img "E:success.png"
#define fail_img "E:fail.png"
#define accept_img "E:accept.png"
#define refuse_img "E:refuse.png"
#define dial_img "E:dial.png"
#define record_img "E:record.png"
#define onrecord_img "E:onrecord.png"
static void hal_init(void);
/*******************************经常使用到的部件采用样式初始化**********************************/
static lv_style_t btn_style;
static lv_style_t btn_text_style;
static lv_style_t scr_style;
static lv_style_t return_style;
static lv_style_t label_style;
static lv_style_t list_style;
/*******************************按键**********************************/
static lv_obj_t *btn_set;
static lv_obj_t *btn_notify;
static lv_obj_t *btn_msg;
static lv_obj_t *btn_dial;
static lv_obj_t *btn_yes;
static lv_obj_t *btn_no;
static lv_obj_t *btn_accept;
static lv_obj_t *btn_refuse;
static lv_obj_t *btn_app_acpt;
static lv_obj_t *btn_app_rfse;
static lv_obj_t *btn_record;
static lv_obj_t *btn_return;
static lv_obj_t *btn_home;
static lv_obj_t *btn_return_set;
/*******************************滑块**********************************/
static lv_obj_t *slider_vol;
static lv_obj_t *slider_light;
/*******************************文本、定时器、图片**********************************/
static lv_obj_t *label_yes;
static lv_timer_t *timer;
static lv_obj_t *img_record;
static lv_obj_t *img_onrecord;
/*******************************列表**********************************/
static lv_obj_t *msg_list;
static lv_obj_t *notify_list;
static lv_obj_t *setting_list;
static lv_obj_t *door_setting_list;
static lv_obj_t *language_list;
/*******************************日历滚轮**********************************/
static lv_obj_t *roller_year;
static lv_obj_t *roller_month;
static lv_obj_t *roller_day;
/*******************************界面**********************************/
static void main_gui(void);
static void msg_gui(void);
static void notify_gui(void);
static void dial_gui(void);
static void setting_gui(void);
static void door_gui(void);
static void language_gui(void);
static void time_gui(void);
static void wificonfg_gui(void);
static void recovery_gui(void);
static void bond_gui(void);
static void info_gui(void);
/*******************************回调函数**********************************/
static void main_event_cb(lv_event_cb_t *e);
static void msg_event_cb(lv_event_cb_t *e);
static void noitify_event_cb(lv_event_cb_t *e);
static void dial_event_cb(lv_event_cb_t *e);
static void setting_event_cb(lv_event_cb_t *e);
static void door_event_cb(lv_event_cb_t *e);
static void language_event_cb(lv_event_cb_t *e);
static void time_event_cb(lv_event_cb_t *e);
static void recovery_event_cb(lv_event_cb_t *e);
static void wificonfg_event_cb(lv_event_cb_t *e);
static void bond_event_cb(lv_event_cb_t *e);
static void info_event_cb(lv_event_cb_t *e);
static void info_renew_event_cb(lv_event_cb_t *e);
static void timer_callback(lv_timer_t *timer);
/*******************************变量**********************************/
typedef struct
{
int year;
int month;
int day;
int hour;
int min;
char *weekday;
}lv_time_t;
static uint32_t cntdown;
/*******************************封装功能函数**********************************/
static void lv_obj_show_battery(int batterylevel, lv_obj_t *parent);
static void lv_obj_show_wifi(int connect_state, lv_obj_t *parent);
static void lv_obj_show_time(lv_time_t *time, lv_obj_t *parent);
/*样式初始化,只初始化一次就行*/
static void lv_obj_style_init(void)
{
/*创建btn_style*/
lv_style_init(&btn_style);
lv_style_set_radius(&btn_style, 25);
lv_style_set_bg_color(&btn_style, lv_color_hex(0x000000));
lv_style_set_bg_opa(&btn_style, LV_OPA_20);
lv_style_set_border_opa(&btn_style, LV_OPA_TRANSP);
lv_style_set_border_width(&btn_style, 0);
/*创建btn_text_style*/
lv_style_init(&btn_text_style);
lv_style_set_text_color(&btn_text_style, lv_color_hex(0xffffff));
lv_style_set_opa(&btn_text_style, LV_OPA_80);
lv_style_set_align(&btn_text_style, LV_ALIGN_CENTER);
/*创建scr_style*/
lv_style_init(&scr_style);
lv_style_set_width(&scr_style, 720);
lv_style_set_height(&scr_style, 1280);
lv_style_set_text_font(&scr_style, &lv_font_heiti24);
lv_style_set_bg_color(&scr_style, lv_color_hex(0xE0FFFF));
/*创建return_style*/
lv_style_init(&return_style);
lv_style_set_width(&return_style, 38);
lv_style_set_height(&return_style, 38);
/*创建list_style*/
lv_style_init(&list_style);
lv_style_set_width(&list_style, scr_act_width());
lv_style_set_height(&list_style, scr_act_height() - 100);
lv_style_set_bg_opa(&list_style, LV_OPA_TRANSP);
lv_style_set_pad_hor(&list_style, 0); /*填充列表空隙*/
}
/*主界面*/
static void main_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr = lv_obj_create(NULL);
lv_obj_add_style(scr, &scr_style, 0);
lv_scr_load(scr);
lv_obj_t *tileview = lv_tileview_create(scr);
lv_obj_set_style_bg_opa(tileview, LV_OPA_TRANSP, 0);
lv_obj_set_style_opa(tileview, LV_OPA_TRANSP, LV_PART_SCROLLBAR);
lv_obj_t *scr_main = lv_tileview_add_tile(tileview, 1, 1, LV_DIR_HOR );
lv_obj_t *scr_ring = lv_tileview_add_tile(tileview, 2, 1, LV_DIR_LEFT);
lv_obj_set_tile(tileview, scr_main, LV_ANIM_OFF);
/*主屏幕*/
lv_obj_add_style(scr_main, &scr_style, 0);
lv_time_t time;
time.year = 2024;
time.month = 10;
time.day = 24;
time.hour = 11;
time.min = 24;
time.weekday = "星期一";
lv_obj_show_battery(3, scr);
lv_obj_show_wifi(1, scr);
lv_obj_show_time(&time, scr);
btn_notify = lv_btn_create(scr_main);
lv_obj_add_style(btn_notify, &btn_style, 0);
lv_obj_align(btn_notify, LV_ALIGN_LEFT_MID, 50, 150);
lv_obj_set_size(btn_notify, scr_act_width() - 300, 100);
lv_obj_add_event_cb(btn_notify, main_event_cb, LV_EVENT_CLICKED, 0);
lv_obj_t *notiflabel = lv_label_create(btn_notify);
lv_obj_add_style(notiflabel, &btn_text_style, 0);
lv_label_set_text(notiflabel, "今天有人经过门前 ");
lv_obj_set_size(notiflabel, 250, 24);
lv_label_set_long_mode(notiflabel, LV_LABEL_LONG_SCROLL_CIRCULAR);
lv_obj_align(notiflabel, LV_ALIGN_LEFT_MID, 0, 0);
btn_set = lv_btn_create(scr_main);
lv_obj_add_style(btn_set, &btn_style, 0);
lv_obj_set_size(btn_set, 150, 100);
lv_obj_align_to(btn_set, btn_notify, LV_ALIGN_OUT_RIGHT_MID, 50, 0);
lv_obj_set_style_bg_img_src(btn_set, LV_SYMBOL_SETTINGS, 0);
lv_obj_set_style_text_font(btn_set, &lv_font_montserrat_34, 0);
lv_obj_add_event_cb(btn_set, main_event_cb, LV_EVENT_CLICKED, NULL);
btn_msg = lv_btn_create(scr_main);
lv_obj_add_style(btn_msg, &btn_style, 0);
lv_obj_set_size(btn_msg, scr_act_width() - 100, 150);
lv_obj_align_to(btn_msg, btn_notify, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 50);
lv_obj_add_event_cb(btn_msg, main_event_cb, LV_EVENT_CLICKED, NULL);
lv_obj_t *label = lv_label_create(btn_msg);
lv_obj_add_style(label, &btn_text_style, 0);
lv_label_set_text(label, "您有新的留言");
lv_obj_t *reddot = lv_btn_create(btn_msg);
lv_obj_set_style_bg_color(reddot, lv_palette_main(LV_PALETTE_RED), 0);
lv_obj_align(reddot, LV_ALIGN_TOP_RIGHT, 0, 0);
lv_obj_set_size(reddot, 20, 20);
btn_dial = lv_btn_create(scr_main);
lv_obj_add_style(btn_dial, &btn_style, 0);
lv_obj_set_size(btn_dial, scr_act_width() - 300, 150);
lv_obj_align_to(btn_dial, btn_msg, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 50);
lv_obj_set_style_bg_color(btn_dial, lv_palette_main(LV_PALETTE_GREEN), 0);
lv_obj_set_style_bg_img_src(btn_dial, dial_img, 0);
lv_obj_add_event_cb(btn_dial, main_event_cb, LV_EVENT_CLICKED, NULL);
btn_record = lv_btn_create(scr_main);
lv_obj_add_style(btn_record, &btn_style, 0);
lv_obj_set_size(btn_record, 150, 150);
lv_obj_align_to(btn_record, btn_dial, LV_ALIGN_OUT_RIGHT_MID, 50, 0);
lv_obj_set_style_bg_color(btn_record, lv_palette_main(LV_PALETTE_RED), 0);
lv_obj_add_event_cb(btn_record, main_event_cb, LV_EVENT_PRESSED, 0);
lv_obj_add_event_cb(btn_record, main_event_cb, LV_EVENT_RELEASED, 0);
img_record = lv_img_create(btn_record);
lv_img_set_src(img_record, record_img);
lv_obj_center(img_record);
slider_vol = lv_slider_create(scr_main);
lv_slider_set_range(slider_vol, 0, 100);
lv_obj_add_style(slider_vol, &btn_style, 0);
lv_obj_set_size(slider_vol, 150, 300);
lv_obj_align_to(slider_vol, btn_set, LV_ALIGN_OUT_TOP_LEFT, 0, -20);
lv_obj_set_style_opa(slider_vol, LV_OPA_TRANSP, LV_PART_KNOB);
lv_obj_set_style_radius(slider_vol, 0, LV_PART_INDICATOR);
lv_obj_add_event_cb(slider_vol, main_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
lv_obj_t *img_vol = lv_img_create(slider_vol);
lv_img_set_src(img_vol, vol_img);
lv_obj_align_to(img_vol, slider_vol, LV_ALIGN_CENTER, 0, 0);
lv_obj_move_foreground(img_vol);
slider_light = lv_slider_create(scr_main);
lv_slider_set_range(slider_light, 0, 100);
lv_obj_add_style(slider_light, &btn_style, 0);
lv_obj_set_size(slider_light, 150, 300);
lv_obj_align_to(slider_light, slider_vol, LV_ALIGN_OUT_TOP_LEFT, 0, -30);
lv_obj_set_style_opa(slider_light, LV_OPA_TRANSP, LV_PART_KNOB);
lv_obj_set_style_radius(slider_light, 0, LV_PART_INDICATOR);
lv_obj_add_event_cb(slider_light, main_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
lv_obj_t *img_light = lv_img_create(slider_light);
lv_img_set_src(img_light, light_img);
lv_obj_align_to(img_light, slider_light, LV_ALIGN_CENTER, 0, 0);
lv_obj_move_foreground(img_light);
/*门铃响电话*/
lv_obj_add_style(scr_ring, &scr_style, 0);
btn_accept = lv_imgbtn_create(scr_ring);
lv_imgbtn_set_src(btn_accept, LV_IMGBTN_STATE_RELEASED, accept_img, accept_img, accept_img);
lv_obj_align(btn_accept, LV_ALIGN_RIGHT_MID, -100, 200);
lv_obj_add_event_cb(btn_accept, main_event_cb, LV_EVENT_CLICKED, NULL);
lv_obj_t *label_ring = lv_label_create(scr_ring);
lv_label_set_text(label_ring, "接听");
lv_obj_align_to(label_ring, btn_accept, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
btn_refuse = lv_imgbtn_create(scr_ring);
lv_imgbtn_set_src(btn_refuse, LV_IMGBTN_STATE_RELEASED, refuse_img, refuse_img, refuse_img);
lv_obj_align(btn_refuse, LV_ALIGN_LEFT_MID, 100, 200);
lv_obj_add_event_cb(btn_refuse, main_event_cb, LV_EVENT_CLICKED, NULL);
label_ring = lv_label_create(scr_ring);
lv_label_set_text(label_ring, "拒绝");
lv_obj_align_to(label_ring, btn_refuse, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
}
static void main_event_cb(lv_event_cb_t *e)
{
lv_obj_t *target = lv_event_get_target(e);
lv_event_code_t code = lv_event_get_code(e);
if(target == btn_set)
{
setting_gui();
}
else if(target == btn_notify)
{
LV_LOG_USER("notify click");
notify_gui();
}
else if(target == btn_msg)
{
msg_gui();
}
else if(target == btn_dial)
{
dial_gui();
}
else if(target == btn_record)
{
if(code == LV_EVENT_PRESSED)
{
LV_LOG_USER("start press");
lv_obj_add_flag(img_record, LV_OBJ_FLAG_HIDDEN);
img_onrecord = lv_img_create(btn_record);
lv_img_set_src(img_onrecord, onrecord_img);
lv_obj_center(img_onrecord);
lv_anim_t anim;
lv_anim_init(&anim);
lv_anim_set_var(&anim, img_onrecord);
lv_anim_set_exec_cb(&anim, (lv_anim_exec_xcb_t) lv_img_set_angle);
lv_anim_set_time(&anim, 500);
lv_anim_set_values(&anim, 0, 3599);
lv_anim_set_repeat_count(&anim, LV_ANIM_REPEAT_INFINITE);
lv_anim_start(&anim);
}
else if(code == LV_EVENT_RELEASED)
{
LV_LOG_USER("end press");
lv_obj_clear_flag(img_record, LV_OBJ_FLAG_HIDDEN);
lv_obj_del(img_onrecord);
}
}
else if(target == slider_vol)
{
LV_LOG_USER("vol: %d", lv_slider_get_value(slider_vol));
}
else if(target == slider_light)
{
LV_LOG_USER("light: %d", lv_slider_get_value(slider_light));
}
}
static void return_event_cb(lv_event_cb_t *e)
{
lv_obj_t *target = lv_event_get_target(e);
if(target == btn_return)
{
LV_LOG_USER("btn_return");
main_gui();
}
else if(target == btn_home)
{
LV_LOG_USER("btn_home");
main_gui();
}
else if(target == btn_return_set)
{
LV_LOG_USER("btn_return_set");
setting_gui();
}
}
static void notify_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr = lv_obj_create(NULL);
lv_obj_add_style(scr, &scr_style, 0);
lv_scr_load(scr);
lv_obj_show_battery(3, scr);
lv_obj_show_wifi(1, scr);
lv_obj_t *label = lv_label_create(scr);
lv_label_set_text(label, "异常信息");
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 10);
notify_list = lv_list_create(scr);
lv_obj_add_style(notify_list, &list_style, 0);
lv_obj_align(notify_list, LV_ALIGN_TOP_LEFT, 0, 100);
lv_obj_t *notify_btn;
lv_obj_t *reddot;
static const char *notify_items[] = {"异常信息1", "异常信息2", "异常信息3", "异常信息4"};
for(int i = 0; i < sizeof(notify_items)/sizeof(notify_items[0]); i++)
{
notify_btn = lv_list_add_btn(notify_list, NULL, notify_items[i]);
lv_obj_set_height(notify_btn, 100);
lv_obj_set_style_bg_opa(notify_btn, LV_OPA_30, 0);
lv_obj_add_event_cb(notify_btn, noitify_event_cb, LV_EVENT_CLICKED, NULL);
reddot = lv_btn_create(notify_btn);
lv_obj_set_size(reddot, 10, 10);
lv_obj_align(reddot, LV_ALIGN_TOP_RIGHT, 0, 0);
lv_obj_set_style_bg_color(reddot, lv_palette_main(LV_PALETTE_RED), 0);
lv_obj_clear_flag(reddot, LV_OBJ_FLAG_HIDDEN);
}
btn_return = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_return, LV_IMGBTN_STATE_RELEASED, NULL, return_img, NULL);
lv_obj_add_style(btn_return, &return_style, 0);
lv_obj_align(btn_return, LV_ALIGN_TOP_LEFT, 0, 10);
lv_obj_add_event_cb(btn_return, return_event_cb, LV_EVENT_CLICKED, NULL);
}
static void noitify_event_cb(lv_event_cb_t *e)
{
lv_obj_t *target = lv_event_get_target(e);
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t *child = NULL;
if(code == LV_EVENT_CLICKED)
{
LV_LOG_USER("Already read");
child = lv_obj_get_child(target, -1);
lv_obj_add_flag(child, LV_OBJ_FLAG_HIDDEN);
}
}
static void msg_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr = lv_obj_create(NULL);
lv_obj_add_style(scr, &scr_style, 0);
lv_scr_load(scr);
lv_obj_show_battery(3, scr);
lv_obj_show_wifi(1, scr);
lv_obj_t *label = lv_label_create(scr);
lv_label_set_text(label, "留言信息");
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 10);
msg_list = lv_list_create(scr);
lv_obj_add_style(msg_list, &list_style, 0);
lv_obj_align(msg_list, LV_ALIGN_TOP_LEFT, 0, 100);
lv_obj_t *msg_btn;
lv_obj_t *reddot;
static const char *msg_items[] = {"留言信息1", "留言信息2", "留言信息3", "留言信息4"};
for(int i = 0; i < sizeof(msg_items)/sizeof(msg_items[0]); i++)
{
msg_btn = lv_list_add_btn(msg_list, NULL, msg_items[i]);
lv_obj_set_height(msg_btn, 100);
lv_obj_set_style_bg_opa(msg_btn, LV_OPA_30, 0);
lv_obj_add_event_cb(msg_btn, msg_event_cb, LV_EVENT_CLICKED, NULL);
reddot = lv_btn_create(msg_btn);
lv_obj_set_size(reddot, 10, 10);
lv_obj_align(reddot, LV_ALIGN_TOP_RIGHT, 0, 0);
lv_obj_set_style_bg_color(reddot, lv_palette_main(LV_PALETTE_RED), 0);
lv_obj_clear_flag(reddot, LV_OBJ_FLAG_HIDDEN);
}
btn_return = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_return, LV_IMGBTN_STATE_RELEASED, NULL, return_img, NULL);
lv_obj_add_style(btn_return, &return_style, 0);
lv_obj_align(btn_return, LV_ALIGN_TOP_LEFT, 0, 10);
lv_obj_add_event_cb(btn_return, return_event_cb, LV_EVENT_CLICKED, NULL);
}
static void msg_event_cb(lv_event_cb_t *e)
{
lv_obj_t *target = lv_event_get_target(e);
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t *child = NULL;
if(code == LV_EVENT_CLICKED)
{
LV_LOG_USER("Already read");
child = lv_obj_get_child(target, -1);
lv_obj_add_flag(child, LV_OBJ_FLAG_HIDDEN);
}
}
static void dial_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr = lv_obj_create(NULL);
lv_obj_add_style(scr, &scr_style, 0);
lv_scr_load(scr);
lv_obj_t *btn_cancel = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_cancel, LV_IMGBTN_STATE_RELEASED, refuse_img, refuse_img, refuse_img);
lv_obj_align(btn_cancel, LV_ALIGN_CENTER, 0, 300);
lv_obj_set_style_transform_zoom(btn_cancel, 258, LV_STATE_PRESSED);
lv_obj_add_event_cb(btn_cancel, dial_event_cb, LV_EVENT_CLICKED, NULL);
lv_obj_t *label = lv_label_create(scr);
lv_label_set_text(label, "取消");
lv_obj_align_to(label, btn_cancel, LV_ALIGN_OUT_BOTTOM_MID, 0, 50);
}
static void dial_event_cb(lv_event_cb_t *e)
{
lv_obj_t *target = lv_event_get_target(e);
lv_event_code_t code = lv_event_get_code(e);
if(code == LV_EVENT_CLICKED)
{
main_gui();
}
}
static void setting_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr = lv_obj_create(NULL);
lv_obj_add_style(scr, &scr_style, 0);
lv_scr_load(scr);
lv_obj_show_battery(3, scr);
lv_obj_show_wifi(1, scr);
setting_list = lv_list_create(scr);
lv_obj_add_style(setting_list, &list_style, 0);
lv_obj_align(setting_list, LV_ALIGN_TOP_LEFT, 0, 100);
lv_obj_t *setting_btn;
static const char *setting_items[] = {"语言设置", "时间设置", "门锁设置", "恢复出厂", "网络配置", "设备绑定", "关于设备"};
for(int i = 0; i < sizeof(setting_items)/sizeof(setting_items[0]); i++)
{
setting_btn = lv_list_add_btn(setting_list, NULL, setting_items[i]);
lv_obj_set_height(setting_btn, 100);
lv_obj_set_style_bg_opa(setting_btn, LV_OPA_30, 0);
lv_obj_add_event_cb(setting_btn, setting_event_cb, LV_EVENT_CLICKED, NULL);
}
btn_return = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_return, LV_IMGBTN_STATE_RELEASED, NULL, return_img, NULL);
lv_obj_add_style(btn_return, &return_style, 0);
lv_obj_align(btn_return, LV_ALIGN_TOP_LEFT, 0, 10);
lv_obj_add_event_cb(btn_return, return_event_cb, LV_EVENT_CLICKED, NULL);
btn_home = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_home, LV_IMGBTN_STATE_RELEASED, NULL, home_img, NULL);
lv_obj_add_style(btn_home, &return_style, 0);
lv_obj_align_to(btn_home, btn_return, LV_ALIGN_OUT_RIGHT_TOP, 20, 0);
lv_obj_add_event_cb(btn_home, return_event_cb, LV_EVENT_CLICKED, NULL);
}
static void setting_event_cb(lv_event_cb_t *e)
{
lv_obj_t *target = lv_event_get_target(e);
const char *text = lv_list_get_btn_text(setting_list, target);
if(strcmp(text, "语言设置") == 0)
{
language_gui();
}
else if(strcmp(text, "时间设置") == 0)
{
time_gui();
}
else if(strcmp(text, "门锁设置") == 0)
{
door_gui();
}
else if(strcmp(text, "恢复出厂") == 0)
{
recovery_gui();
}
else if(strcmp(text, "网络配置") == 0)
{
LV_LOG_USER("wifi connect");
wificonfg_gui();
}
else if(strcmp(text, "设备绑定") == 0)
{
bond_gui();
}
else if(strcmp(text, "关于设备") == 0)
{
info_gui();
}
}
static void door_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr = lv_obj_create(NULL);
lv_obj_add_style(scr, &scr_style, 0);
lv_scr_load(scr);
lv_obj_show_battery(3, scr);
lv_obj_show_wifi(1, scr);
door_setting_list = lv_list_create(scr);
lv_obj_add_style(door_setting_list, &list_style, 0);
lv_obj_align(door_setting_list, LV_ALIGN_TOP_LEFT, 0, 100);
lv_obj_t *setting_btn;
lv_obj_t *setting_switch;
static const char *door_setting_items[] = {"开门方向翻转","常开模式", "自动反锁", "哨兵模式", "老化测试", "出厂测试"};
for(int i = 0; i < sizeof(door_setting_items)/sizeof(door_setting_items[0]); i++)
{
setting_btn = lv_list_add_btn(door_setting_list, NULL, door_setting_items[i]);
lv_obj_set_height(setting_btn, 100);
lv_obj_set_style_bg_opa(setting_btn, LV_OPA_30, 0);
setting_switch = lv_switch_create(setting_btn);
lv_obj_add_event_cb(setting_switch, door_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
}
btn_return_set = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_return_set, LV_IMGBTN_STATE_RELEASED, NULL, return_img, NULL);
lv_obj_add_style(btn_return_set, &return_style, 0);
lv_obj_align(btn_return_set, LV_ALIGN_TOP_LEFT, 0, 10);
lv_obj_add_event_cb(btn_return_set, return_event_cb, LV_EVENT_CLICKED, NULL);
btn_home = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_home, LV_IMGBTN_STATE_RELEASED, NULL, home_img, NULL);
lv_obj_add_style(btn_home, &return_style, 0);
lv_obj_align_to(btn_home, btn_return, LV_ALIGN_OUT_RIGHT_TOP, 20, 0);
lv_obj_add_event_cb(btn_home, return_event_cb, LV_EVENT_CLICKED, NULL);
}
static void door_event_cb(lv_event_cb_t *e)
{
lv_obj_t *target = lv_event_get_target(e);
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t *parent = lv_obj_get_parent(target);
if(code == LV_EVENT_VALUE_CHANGED)
{
if(lv_obj_get_state(target) & LV_STATE_CHECKED)
{
LV_LOG_USER("turn on");
}
else
{
LV_LOG_USER("turn off");
}
}
}
static const char *lang_items[] = {"中文", "English", "Japanese", "Korean"};
static void language_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr = lv_obj_create(NULL);
lv_obj_add_style(scr, &scr_style, 0);
lv_scr_load(scr);
lv_obj_show_battery(3, scr);
lv_obj_show_wifi(1, scr);
language_list = lv_list_create(scr);
lv_obj_add_style(language_list, &list_style, 0);
lv_obj_align(language_list, LV_ALIGN_TOP_LEFT, 0, 100);
lv_obj_t *lang_btn;
for(int i = 0; i < sizeof(lang_items)/sizeof(lang_items[0]); i++)
{
lang_btn = lv_list_add_btn(language_list, NULL, lang_items[i]);
lv_obj_set_height(lang_btn, 100);
lv_obj_set_style_bg_opa(lang_btn, LV_OPA_30, 0);
lv_obj_add_event_cb(lang_btn, language_event_cb, LV_EVENT_CLICKED, NULL);
}
btn_return_set = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_return_set, LV_IMGBTN_STATE_RELEASED, NULL, return_img, NULL);
lv_obj_add_style(btn_return_set, &return_style, 0);
lv_obj_align(btn_return_set, LV_ALIGN_TOP_LEFT, 0, 10);
lv_obj_add_event_cb(btn_return_set, return_event_cb, LV_EVENT_CLICKED, NULL);
btn_home = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_home, LV_IMGBTN_STATE_RELEASED, NULL, home_img, NULL);
lv_obj_add_style(btn_home, &return_style, 0);
lv_obj_align_to(btn_home, btn_return, LV_ALIGN_OUT_RIGHT_TOP, 20, 0);
lv_obj_add_event_cb(btn_home, return_event_cb, LV_EVENT_CLICKED, NULL);
}
static void language_event_cb(lv_event_cb_t *e)
{
lv_obj_t *target = lv_event_get_target(e);
lv_event_code_t code = lv_event_get_code(e);
const char *text = lv_list_get_btn_text(language_list, target);
if(code == LV_EVENT_CLICKED)
{
for(int i = 0; i < sizeof(lang_items)/sizeof(lang_items[0]); i++)
{
if(strcmp(text, lang_items[i]) == 0)
{
LV_LOG_USER("%s", text);
break;
}
}
}
}
typedef enum MonthType
{
BIGMONTH = 0,
SMALLMONTH,
LEAPFEB,
COMMONFEB
}yearMonth;
const char *MonthDays[] = {"01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31",\
"01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30",\
"01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29",\
"01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28"};
static void time_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr = lv_obj_create(NULL);
lv_obj_add_style(scr, &scr_style, 0);
lv_scr_load(scr);
lv_obj_show_battery(3, scr);
lv_obj_show_wifi(1, scr);
lv_obj_t *label = lv_label_create(scr);
lv_label_set_text(label, "完成");
lv_obj_set_style_text_color(label, lv_palette_main(LV_PALETTE_RED), 0);
lv_obj_align(label, LV_ALIGN_TOP_RIGHT, -30, 50);
lv_obj_add_flag(label, LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_event_cb(label, time_event_cb, LV_EVENT_CLICKED, NULL);
roller_year = lv_roller_create(scr);
lv_roller_set_options(roller_year, "2024\n2025\n2026\n2027\n2028\n2029\n2030\n2031\n2032\n2033\n2034\n2035\n2036\n2037\n2038\n2039\n2040\n2041\n2042\n2043\n2044\n2045\n2046\n2047\n2048\n2049\n2050", LV_ROLLER_MODE_INFINITE);
lv_roller_set_visible_row_count(roller_year, 5);
lv_obj_set_width(roller_year, 80);
lv_obj_align(roller_year, LV_ALIGN_LEFT_MID, 100, -200);
lv_obj_add_event_cb(roller_year, time_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
label = lv_label_create(scr);
lv_label_set_text(label, "");
lv_obj_align_to(label, roller_year, LV_ALIGN_OUT_RIGHT_MID, 20, 0);
roller_month = lv_roller_create(scr);
lv_roller_set_options(roller_month, "01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12", LV_ROLLER_MODE_INFINITE);
lv_roller_set_visible_row_count(roller_month, 5);
lv_obj_set_width(roller_month, 80);
lv_obj_align(roller_month, LV_ALIGN_CENTER, 0, -200);
lv_obj_add_event_cb(roller_month, time_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
label = lv_label_create(scr);
lv_label_set_text(label, "");
lv_obj_align_to(label, roller_month, LV_ALIGN_OUT_RIGHT_MID, 20, 0);
roller_day = lv_roller_create(scr);
lv_roller_set_options(roller_day, "01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31", LV_ROLLER_MODE_INFINITE);
lv_roller_set_visible_row_count(roller_day, 5);
lv_obj_set_width(roller_day, 80);
lv_obj_align(roller_day, LV_ALIGN_RIGHT_MID, -100, -200);
label = lv_label_create(scr);
lv_label_set_text(label, "");
lv_obj_align_to(label, roller_day, LV_ALIGN_OUT_RIGHT_MID, 20, 0);
lv_obj_t *roller_hour = lv_roller_create(scr);
lv_roller_set_options(roller_hour, "00\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23", LV_ROLLER_MODE_INFINITE);
lv_obj_set_width(roller_hour, 80);
lv_obj_align(roller_hour, LV_ALIGN_LEFT_MID, 100, 200);
lv_roller_set_visible_row_count(roller_hour, 5);
label = lv_label_create(scr);
lv_label_set_text(label, "");
lv_obj_align_to(label, roller_hour, LV_ALIGN_OUT_RIGHT_MID, 20, 0);
lv_obj_t *roller_min = lv_roller_create(scr);
lv_roller_set_options(roller_min, "00\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59", LV_ROLLER_MODE_INFINITE);
lv_obj_set_width(roller_min, 80);
lv_obj_align(roller_min, LV_ALIGN_CENTER, 0, 200);
lv_roller_set_visible_row_count(roller_min, 5);
label = lv_label_create(scr);
lv_label_set_text(label, "");
lv_obj_align_to(label, roller_min, LV_ALIGN_OUT_RIGHT_MID, 20, 0);
lv_obj_t *roller_sec = lv_roller_create(scr);
lv_roller_set_options(roller_sec, "00\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59", LV_ROLLER_MODE_INFINITE);
lv_obj_set_width(roller_sec, 80);
lv_obj_align(roller_sec, LV_ALIGN_RIGHT_MID, -100, 200);
lv_roller_set_visible_row_count(roller_sec, 5);
label = lv_label_create(scr);
lv_label_set_text(label, "");
lv_obj_align_to(label, roller_sec, LV_ALIGN_OUT_RIGHT_MID, 20, 0);
btn_return_set = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_return_set, LV_IMGBTN_STATE_RELEASED, NULL, return_img, NULL);
lv_obj_add_style(btn_return_set, &return_style, 0);
lv_obj_align(btn_return_set, LV_ALIGN_TOP_LEFT, 0, 10);
lv_obj_add_event_cb(btn_return_set, return_event_cb, LV_EVENT_CLICKED, NULL);
btn_home = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_home, LV_IMGBTN_STATE_RELEASED, NULL, home_img, NULL);
lv_obj_add_style(btn_home, &return_style, 0);
lv_obj_align_to(btn_home, btn_return, LV_ALIGN_OUT_RIGHT_TOP, 20, 0);
lv_obj_add_event_cb(btn_home, return_event_cb, LV_EVENT_CLICKED, NULL);
}
static void time_anim_ready_cb(lv_anim_t *anim)
{
setting_gui();
}
static void time_event_cb(lv_event_cb_t *e)
{
lv_obj_t *target = lv_event_get_target(e);
lv_event_code_t code = lv_event_get_code(e);
uint16_t month_index;
uint16_t year_index;
if(target == roller_month || target == roller_year)
{
month_index = lv_roller_get_selected(roller_month);
LV_LOG_USER("month_index : %d", month_index);
if(month_index == 0 || month_index == 2 || month_index == 4 || month_index == 6 || month_index == 7 || month_index == 9 || month_index == 11)
{
lv_roller_set_options(roller_day, MonthDays[BIGMONTH], LV_ROLLER_MODE_INFINITE);
}
else if (month_index == 1)
{
year_index = lv_roller_get_selected(roller_year);
LV_LOG_USER("year_index : %d", year_index);
if(year_index % 4 == 0)
{
lv_roller_set_options(roller_day, MonthDays[LEAPFEB], LV_ROLLER_MODE_INFINITE);
}
else
{
lv_roller_set_options(roller_day, MonthDays[COMMONFEB], LV_ROLLER_MODE_INFINITE);
}
}
else
{
lv_roller_set_options(roller_day, MonthDays[SMALLMONTH], LV_ROLLER_MODE_INFINITE);
}
}
if(code == LV_EVENT_CLICKED)
{
lv_obj_clean(top());
lv_obj_t *img = lv_img_create(top());
lv_img_set_src(img, succ_img);
lv_obj_center(img);
lv_obj_t *label = lv_label_create(top());
lv_label_set_text(label, "设置成功");
lv_obj_align_to(label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 50);
lv_anim_t anim;
lv_anim_init(&anim);
lv_anim_set_var(&anim, img);
lv_anim_set_exec_cb(&anim, (lv_anim_exec_xcb_t) lv_img_set_angle);
lv_anim_set_time(&anim, 500);
lv_anim_set_values(&anim, 0, 0);
lv_anim_set_ready_cb(&anim, time_anim_ready_cb);
lv_anim_start(&anim);
}
}
/*恢复出厂界面,特殊:会采用定时器,所以返回的时候要删掉定时器,该界面的返回键不统一处理*/
static void recovery_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr = lv_obj_create(NULL);
lv_obj_add_style(scr, &scr_style, 0);
lv_scr_load(scr);
lv_obj_show_battery(3, scr);
lv_obj_show_wifi(1, scr);
lv_obj_t *img = lv_img_create(scr);
lv_img_set_src(img, warn_img);
lv_obj_align(img, LV_ALIGN_CENTER, 0, -200);
lv_obj_t *label = lv_label_create(scr);
lv_label_set_text(label, "恢复出厂设置,将清空所有用户数据,确定继续?");
lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
timer = lv_timer_create(timer_callback, 1000, NULL);
lv_timer_set_repeat_count(timer, 10);
cntdown = 10;
btn_yes = lv_btn_create(scr);
lv_obj_set_style_bg_color(btn_yes, lv_palette_main(LV_PALETTE_GREY), 0);
lv_obj_set_size(btn_yes, 150, 50);
lv_obj_align_to(btn_yes, label, LV_ALIGN_OUT_BOTTOM_RIGHT, 0, 50);
label_yes = lv_label_create(btn_yes);
lv_obj_add_style(label_yes, &btn_text_style, 0);
lv_label_set_text_fmt(label_yes, "确认(%d)", cntdown);
lv_obj_center(label_yes);
btn_no = lv_btn_create(scr);
lv_obj_set_style_bg_color(btn_no, lv_palette_main(LV_PALETTE_GREEN), 0);
lv_obj_set_size(btn_no, 150, 50);
lv_obj_align_to(btn_no, label, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 50);
lv_obj_add_event_cb(btn_no, recovery_event_cb, LV_EVENT_CLICKED, NULL);
lv_obj_t *label_btn = lv_label_create(btn_no);
lv_obj_add_style(label_btn, &btn_text_style, 0);
lv_label_set_text(label_btn, "取消");
lv_obj_center(label_btn);
btn_return_set = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_return_set, LV_IMGBTN_STATE_RELEASED, return_img, return_img, return_img);
lv_obj_add_style(btn_return_set, &return_style, 0);
lv_obj_align(btn_return_set, LV_ALIGN_TOP_LEFT, 0, 10);
lv_obj_add_event_cb(btn_return_set, recovery_event_cb, LV_EVENT_CLICKED, NULL);
btn_home = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_home, LV_IMGBTN_STATE_RELEASED, home_img, home_img, home_img);
lv_obj_add_style(btn_home, &return_style, 0);
lv_obj_align_to(btn_home, btn_return, LV_ALIGN_OUT_RIGHT_TOP, 20, 0);
lv_obj_add_event_cb(btn_home, recovery_event_cb, LV_EVENT_CLICKED, NULL);
}
static void timer_callback(lv_timer_t *timer_c)
{
if(--cntdown)
{
lv_label_set_text_fmt(label_yes, "确认(%d)", cntdown);
}
else
{
lv_timer_del(timer);
lv_label_set_text(label_yes, "确认");
lv_obj_set_style_bg_color(btn_yes, lv_palette_main(LV_PALETTE_RED), 0);
lv_obj_add_event_cb(btn_yes, recovery_event_cb, LV_EVENT_CLICKED, NULL);
}
}
static void recovery_anim_ready_cb(lv_anim_t *anim)
{
/*现在暂时把触摸当成触发源结束恢复出厂*/
lv_obj_add_event_cb(top(), recovery_event_cb, LV_EVENT_CLICKED, NULL);
lv_anim_del(anim, NULL);
}
static void recovery_event_cb(lv_event_cb_t *e)
{
lv_obj_t *target = lv_event_get_target(e);
lv_obj_t *parent = lv_obj_get_parent(target);
if(target == btn_yes)
{
lv_obj_clean(top());
LV_LOG_USER("recovery yes");
lv_obj_t *label = lv_label_create(top());
lv_label_set_text(label, "正在恢复出厂设置中,请稍等...");
lv_obj_center(label);
lv_anim_t anim;
lv_anim_init(&anim);
lv_anim_set_var(&anim, label);
lv_anim_set_exec_cb(&anim, (lv_anim_exec_xcb_t)lv_img_set_angle);
lv_anim_set_time(&anim, 2500);
lv_anim_set_values(&anim, 0, 0);
lv_anim_set_repeat_count(&anim, LV_ANIM_REPEAT_INFINITE);
lv_anim_set_start_cb(&anim, recovery_anim_ready_cb);
lv_anim_start(&anim);
}
else if(target == btn_no)
{
LV_LOG_USER("recovery quit");
setting_gui();
}
else if(target == btn_return_set)
{
lv_timer_del(timer);
setting_gui();
}
else if(target == btn_home)
{
lv_timer_del(timer);
main_gui();
}
else
{
main_gui();
}
}
static void wificonfg_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr = lv_obj_create(NULL);
lv_obj_add_style(scr, &scr_style, 0);
lv_scr_load(scr);
lv_obj_show_battery(3, scr);
lv_obj_show_wifi(1, scr);
lv_obj_t *label = lv_label_create(scr);
lv_label_set_text(label, "请打开手机app设置网络配置二维码,放置在镜头前扫描");
lv_obj_align(label, LV_ALIGN_CENTER, 0, 100);
/*模拟得到通知*/
lv_obj_add_flag(label, LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_event_cb(label, wificonfg_event_cb, LV_EVENT_CLICKED, NULL);
btn_return_set = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_return_set, LV_IMGBTN_STATE_RELEASED, NULL, return_img, NULL);
lv_obj_add_style(btn_return_set, &return_style, 0);
lv_obj_align(btn_return_set, LV_ALIGN_TOP_LEFT, 0, 10);
lv_obj_add_event_cb(btn_return_set, return_event_cb, LV_EVENT_CLICKED, NULL);
btn_home = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_home, LV_IMGBTN_STATE_RELEASED, NULL, home_img, NULL);
lv_obj_add_style(btn_home, &return_style, 0);
lv_obj_align_to(btn_home, btn_return, LV_ALIGN_OUT_RIGHT_TOP, 20, 0);
lv_obj_add_event_cb(btn_home, return_event_cb, LV_EVENT_CLICKED, NULL);
}
static void wifi_anim_ready_cb(lv_anim_t *anim)
{
lv_obj_clean(top());
lv_obj_t *scr = lv_obj_create(NULL);
lv_obj_add_style(scr, &scr_style, 0);
lv_scr_load(scr);
if(0)
{
lv_obj_set_style_bg_img_src(scr, succ_img, 0);
lv_obj_t *label = lv_label_create(scr);
lv_label_set_text(label, "绑定成功");
lv_obj_align(label, LV_ALIGN_CENTER, 0, 100);
}
else
{
lv_obj_set_style_bg_img_src(scr, fail_img, 0);
lv_obj_t *label = lv_label_create(scr);
lv_label_set_text(label, "绑定失败");
lv_obj_align(label, LV_ALIGN_CENTER, 0, 100);
}
btn_return_set = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_return_set, LV_IMGBTN_STATE_RELEASED, NULL, return_img, NULL);
lv_obj_add_style(btn_return_set, &return_style, 0);
lv_obj_align(btn_return_set, LV_ALIGN_TOP_LEFT, 0, 10);
lv_obj_add_event_cb(btn_return_set, return_event_cb, LV_EVENT_CLICKED, NULL);
}
static void wificonfg_event_cb(lv_event_cb_t *e)
{
lv_obj_t *target = lv_event_get_target(e);
lv_event_code_t code = lv_event_get_code(e);
if(code == LV_EVENT_CLICKED)
{
lv_obj_clean(top());
LV_LOG_USER("ad wifi yes");
lv_obj_t *label = lv_label_create(top());
lv_label_set_text(label, "正在配置中...");
lv_obj_center(label);
lv_anim_t anim;
lv_anim_init(&anim);
lv_anim_set_var(&anim, label);
lv_anim_set_exec_cb(&anim, (lv_anim_exec_xcb_t)lv_img_set_angle);
lv_anim_set_time(&anim, 2500);
lv_anim_set_values(&anim, 0, 0);
lv_anim_set_ready_cb(&anim, wifi_anim_ready_cb);
lv_anim_start(&anim);
}
}
static void bond_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr = lv_obj_create(NULL);
lv_obj_add_style(scr, &scr_style, 0);
lv_scr_load(scr);
lv_obj_show_battery(3, scr);
lv_obj_show_wifi(1, scr);
lv_obj_t *label = lv_label_create(scr);
lv_label_set_text(label, "请打开手机app添加设备绑定二维码,放置在镜头前扫描");
lv_obj_align(label, LV_ALIGN_CENTER, 0, 100);
/*模拟得到通知*/
lv_obj_add_flag(label, LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_event_cb(label, bond_event_cb, LV_EVENT_CLICKED, NULL);
btn_return_set = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_return_set, LV_IMGBTN_STATE_RELEASED, NULL, return_img, NULL);
lv_obj_add_style(btn_return_set, &return_style, 0);
lv_obj_align(btn_return_set, LV_ALIGN_TOP_LEFT, 0, 10);
lv_obj_add_event_cb(btn_return_set, return_event_cb, LV_EVENT_CLICKED, NULL);
btn_home = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_home, LV_IMGBTN_STATE_RELEASED, NULL, home_img, NULL);
lv_obj_add_style(btn_home, &return_style, 0);
lv_obj_align_to(btn_home, btn_return, LV_ALIGN_OUT_RIGHT_TOP, 20, 0);
lv_obj_add_event_cb(btn_home, return_event_cb, LV_EVENT_CLICKED, NULL);
}
static void bond_anim_ready_cb(lv_anim_t *anim)
{
lv_obj_clean(top());
lv_obj_t *scr = lv_obj_create(NULL);
lv_obj_add_style(scr, &scr_style, 0);
lv_scr_load(scr);
if(0)
{
lv_obj_set_style_bg_img_src(scr, succ_img, 0);
lv_obj_t *label = lv_label_create(scr);
lv_label_set_text(label, "绑定成功");
lv_obj_align(label, LV_ALIGN_CENTER, 0, 100);
}
else
{
lv_obj_set_style_bg_img_src(scr, fail_img, 0);
lv_obj_t *label = lv_label_create(scr);
lv_label_set_text(label, "绑定失败");
lv_obj_align(label, LV_ALIGN_CENTER, 0, 100);
}
btn_return_set = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_return_set, LV_IMGBTN_STATE_RELEASED, NULL, return_img, NULL);
lv_obj_add_style(btn_return_set, &return_style, 0);
lv_obj_align(btn_return_set, LV_ALIGN_TOP_LEFT, 0, 10);
lv_obj_add_event_cb(btn_return_set, return_event_cb, LV_EVENT_CLICKED, NULL);
}
static void bond_event_cb(lv_event_cb_t *e)
{
lv_obj_t *target = lv_event_get_target(e);
lv_event_code_t code = lv_event_get_code(e);
if(code == LV_EVENT_CLICKED)
{
lv_obj_clean(top());
LV_LOG_USER("bond yes");
lv_obj_t *label = lv_label_create(top());
lv_label_set_text(label, "正在绑定中...");
lv_obj_center(label);
lv_anim_t anim;
lv_anim_init(&anim);
lv_anim_set_var(&anim, label);
lv_anim_set_exec_cb(&anim, (lv_anim_exec_xcb_t)lv_img_set_angle);
lv_anim_set_time(&anim, 2500);
lv_anim_set_values(&anim, 0, 0);
lv_anim_set_ready_cb(&anim, bond_anim_ready_cb);
lv_anim_start(&anim);
}
}
static void info_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr = lv_obj_create(NULL);
lv_obj_add_style(scr, &scr_style, 0);
lv_scr_load(scr);
lv_obj_show_battery(3, scr);
lv_obj_show_wifi(1, scr);
lv_obj_t *label = lv_label_create(scr);
lv_label_set_text(label, "当前版本");
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 100);
const char *ver[] = {"1.2.3.4", "1.2.0.3", "2.3.0.2", "2.4.0.1"};
label = lv_label_create(scr);
lv_label_set_text_fmt(label, "V851S_FRONT: %s \n\n\n133: %s \n\n\nV851S_BACK: %s \n\n\nXR806: %s", ver[0], ver[1], ver[2], ver[3]);
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 300);
lv_obj_t *btn = lv_btn_create(scr);
lv_obj_set_size(btn, 170, 70);
lv_obj_align_to(btn, label, LV_ALIGN_OUT_BOTTOM_MID, 0, 100);
lv_obj_set_style_bg_color(btn, lv_palette_main(LV_PALETTE_GREEN), 0);
label = lv_label_create(btn);
lv_label_set_text(label, "检测新版本");
lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
lv_obj_add_event_cb(btn, info_event_cb, LV_EVENT_CLICKED, NULL);
btn_return_set = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_return_set, LV_IMGBTN_STATE_RELEASED, NULL, return_img, NULL);
lv_obj_add_style(btn_return_set, &return_style, 0);
lv_obj_align(btn_return_set, LV_ALIGN_TOP_LEFT, 0, 10);
lv_obj_add_event_cb(btn_return_set, return_event_cb, LV_EVENT_CLICKED, NULL);
btn_home = lv_imgbtn_create(scr);
lv_imgbtn_set_src(btn_home, LV_IMGBTN_STATE_RELEASED, NULL, home_img, NULL);
lv_obj_add_style(btn_home, &return_style, 0);
lv_obj_align_to(btn_home, btn_return, LV_ALIGN_OUT_RIGHT_TOP, 20, 0);
lv_obj_add_event_cb(btn_home, return_event_cb, LV_EVENT_CLICKED, NULL);
}
static void info_nonew_anim_ready_cb(lv_anim_t *anim)
{
lv_anim_del(anim, NULL);
info_gui();
}
static void info_renew_anim_ready_cb(lv_anim_t *anim)
{
lv_anim_del(anim, NULL);
lv_obj_t *btn = lv_btn_create(top());
lv_obj_set_size(btn, 500, 200);
lv_obj_center(btn);
lv_obj_set_style_bg_color(btn, lv_palette_main(LV_PALETTE_GREY), 0);
lv_obj_t *label = lv_label_create(btn);
lv_label_set_text(label, "检测到新版本,是否需要更新版本?");
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 50);
btn_yes = lv_btn_create(btn);
lv_obj_set_style_bg_color(btn_yes, lv_palette_main(LV_PALETTE_RED), 0);
lv_obj_set_size(btn_yes, 100, 50);
lv_obj_align_to(btn_yes, label, LV_ALIGN_OUT_BOTTOM_RIGHT, 0, 50);
lv_obj_add_event_cb(btn_yes, info_renew_event_cb, LV_EVENT_CLICKED, 0);
lv_obj_t *label_btn = lv_label_create(btn_yes);
lv_obj_add_style(label_btn, &btn_text_style, 0);
lv_label_set_text(label_btn, "确认");
lv_obj_center(label_btn);
btn_no = lv_btn_create(btn);
lv_obj_set_style_bg_color(btn_no, lv_palette_main(LV_PALETTE_GREEN), 0);
lv_obj_set_size(btn_no, 100, 50);
lv_obj_align_to(btn_no, label, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 50);
lv_obj_add_event_cb(btn_no, info_renew_event_cb, LV_EVENT_CLICKED, 0);
label_btn = lv_label_create(btn_no);
lv_obj_add_style(label_btn, &btn_text_style, 0);
lv_label_set_text(label_btn, "取消");
lv_obj_center(label_btn);
}
static void info_renew_event_cb(lv_event_cb_t *e)
{
lv_obj_t *target = lv_event_get_target(e);
if(target == btn_yes)
{
lv_obj_clean(top());
lv_obj_t *label = lv_label_create(top());
lv_label_set_text(label, "正在更新中...");
lv_obj_center(label);
lv_anim_t anim;
lv_anim_init(&anim);
lv_anim_set_var(&anim, label);
lv_anim_set_exec_cb(&anim, (lv_anim_exec_xcb_t) lv_img_set_angle);
lv_anim_set_time(&anim, 1000);
lv_anim_set_values(&anim, 0, 0);
lv_anim_set_ready_cb(&anim, info_nonew_anim_ready_cb);
lv_anim_start(&anim);
}
else if(target == btn_no)
{
info_gui();
}
}
static void info_event_cb(lv_event_cb_t *e)
{
lv_obj_t *target = lv_event_get_target(e);
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t *parent = lv_obj_get_parent(target);
if(code == LV_EVENT_CLICKED)
{
if(0)
{
LV_LOG_USER("Not Detect New Version");
lv_obj_t *label = lv_label_create(parent);
lv_label_set_text(label, "当前已是最新版本");
lv_obj_align_to(label, target, LV_ALIGN_OUT_BOTTOM_MID, 0, 50);
lv_anim_t anim;
lv_anim_init(&anim);
lv_anim_set_var(&anim, label);
lv_anim_set_exec_cb(&anim, (lv_anim_exec_xcb_t) lv_img_set_angle);
lv_anim_set_time(&anim, 1000);
lv_anim_set_values(&anim, 0, 0);
lv_anim_set_ready_cb(&anim, info_nonew_anim_ready_cb);
lv_anim_start(&anim);
}
else
{
LV_LOG_USER("Detect New Version");
lv_obj_t *img = lv_img_create(parent);
lv_img_set_src(img, wait_img);
lv_obj_center(img);
lv_anim_t anim;
lv_anim_init(&anim);
lv_anim_set_var(&anim, img);
lv_anim_set_exec_cb(&anim, (lv_anim_exec_xcb_t) lv_img_set_angle);
lv_anim_set_time(&anim, 1000);
lv_anim_set_values(&anim, 0, 3599);
lv_anim_set_ready_cb(&anim, info_renew_anim_ready_cb);
lv_anim_start(&anim);
}
}
}
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int nCmdShow)
{
/*Initialize LittlevGL*/
lv_init();
/*Initialize the HAL for LittlevGL*/
lv_win32_init(hInstance, SW_SHOWNORMAL, 720, 1280, NULL);
/*Output prompt information to the console, you can also use printf() to print directly*/
LV_LOG_USER("LVGL initialization completed!");
/*Run the demo*/
lv_obj_style_init();
main_gui();
while(!lv_win32_quit_signal) {
/* Periodically call the lv_task handler.
* It could be done in a timer interrupt or an OS task too.*/
lv_task_handler();
usleep(10000); /*Just to let the system breath*/
}
return 0;
}
/*显示电池电压 分五档*/
static void lv_obj_show_battery(int batterylevel, lv_obj_t *parent)
{
lv_obj_t *battery = lv_label_create(parent);
switch (batterylevel)
{
case 0: lv_label_set_text(battery, LV_SYMBOL_BATTERY_EMPTY);break;
case 1: lv_label_set_text(battery, LV_SYMBOL_BATTERY_1);break;
case 2: lv_label_set_text(battery, LV_SYMBOL_BATTERY_2);break;
case 3: lv_label_set_text(battery, LV_SYMBOL_BATTERY_3);break;
case 4: lv_label_set_text(battery, LV_SYMBOL_BATTERY_FULL);break;
}
lv_obj_align(battery, LV_ALIGN_TOP_RIGHT, -20, 10);
lv_obj_set_style_text_font(battery,&lv_font_montserrat_34, 0);
}
static void lv_obj_show_wifi(int connect_state, lv_obj_t *parent)
{
lv_obj_t *wifi = lv_label_create(parent);
if(connect_state)
{
lv_label_set_text(wifi, LV_SYMBOL_WIFI);
}
else
{
lv_label_set_text(wifi, LV_SYMBOL_WIFI);
lv_obj_set_style_text_color(wifi, lv_palette_main(LV_PALETTE_GREY), 0);
}
lv_obj_align(wifi, LV_ALIGN_TOP_RIGHT, -70, 10);
lv_obj_set_style_text_font(wifi,&lv_font_montserrat_34, 0);
}
static void lv_obj_show_time(lv_time_t *time, lv_obj_t *parent)
{
lv_obj_t *label_time = lv_label_create(parent);
lv_label_set_text_fmt(label_time, "%d:%d", time->hour, time->min);
lv_obj_set_style_text_font(label_time, &lv_font_heiti100, 0);
lv_obj_align(label_time, LV_ALIGN_TOP_LEFT, 50, 50);
lv_obj_t *label_day = lv_label_create(parent);
lv_label_set_text_fmt(label_day, "%d-%d-%d %s", time->year, time->month, time->day, time->weekday);
lv_obj_set_style_text_font(label_day, &lv_font_heiti24, 0);
lv_obj_align_to(label_day, label_time, LV_ALIGN_OUT_BOTTOM_LEFT, 20, 20);
}