/** * @file main * */ /********************* * INCLUDES *********************/ #include #include #include #include "lvgl/lvgl.h" #include "lvgl/demos/widgets/lv_demo_widgets.h" #include "lv_drivers/win32drv/win32drv.h" #include /*******************************字体加载**********************************/ 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); }