1941 lines
68 KiB
C
Executable File
1941 lines
68 KiB
C
Executable File
|
|
/**
|
|
* @file main
|
|
*
|
|
*/
|
|
|
|
/*********************
|
|
* INCLUDES
|
|
*********************/
|
|
#include <stdlib.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>
|
|
|
|
static void hal_init(void);
|
|
static int tick_thread(void *data);
|
|
|
|
#define lowpower_img "E:lowpower.png"
|
|
#define bg_img "E:sunset.png"
|
|
#define return_img "E:return.png"
|
|
#define home_img "E:home.png"
|
|
#define bell_img "E:bell.png"
|
|
#define call_img "E:call.png"
|
|
#define answer_img "E:answer.png"
|
|
#define visible_img "E:visible.png"
|
|
#define invisible_img "E:invisible.png"
|
|
#define vol_img "E:vol.png"
|
|
#define light_img "E:light.png"
|
|
#define wait_img "E:wait.png"
|
|
#define keyboard_img "E:keyboard.png"
|
|
#define nfc_img "E:nfc.png"
|
|
#define palm_img "E:palm.png"
|
|
#define face_img "E:face.png"
|
|
|
|
#define add_admin_img "E:add_admin.png"
|
|
#define add_normal_img "E:add_normal.png"
|
|
#define nfc_detect_img "E:nfc_detect.png"
|
|
|
|
#define avatar_img "E:avatar.png"
|
|
#define success_img "E:success.png"
|
|
#define fail_img "E:fail.png"
|
|
#define edit_img "E:edit.png"
|
|
#define finish_img "E:finish.png"
|
|
|
|
#define tick_img "E:tick.png"
|
|
#define fork_img "E:fork.png"
|
|
#define greentick_img "E:greentick.png"
|
|
|
|
|
|
#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())
|
|
|
|
LV_FONT_DECLARE(lv_font_heiti24)
|
|
|
|
|
|
static const char password[] = {"1"};
|
|
static const char *string_map[] = {"0","1","2","3","4","5","6","7","8","9"};
|
|
|
|
typedef enum
|
|
{
|
|
DEL_USER = 0,
|
|
DEL_PASS = 1,
|
|
DEL_NFC,
|
|
DEL_PALM,
|
|
DEL_FACE,
|
|
}delete_type;
|
|
|
|
/********主界面需要静态的部件******/
|
|
static lv_obj_t *tileview;
|
|
|
|
static lv_obj_t *scr_main;
|
|
static lv_obj_t *scr_keyboard;
|
|
static lv_obj_t *scr_login;
|
|
|
|
static lv_obj_t *btn_ring_main;
|
|
static lv_obj_t *btn_return;
|
|
|
|
static lv_obj_t *vol_slider;
|
|
static lv_obj_t *light_slider;
|
|
|
|
static lv_style_t scr_style;
|
|
static lv_style_t btn_style;
|
|
static lv_style_t btn_text_style;
|
|
static lv_style_t return_style;
|
|
static lv_style_t add_style;
|
|
static lv_style_t del_style;
|
|
|
|
|
|
/********密码解锁 界面需要静态的部件******/
|
|
static lv_obj_t *btnmatrix;
|
|
static lv_obj_t *text_keyboard;
|
|
static lv_obj_t *visi_btn;
|
|
static lv_obj_t *invisi_btn;
|
|
static lv_obj_t *btn_msg;
|
|
static lv_obj_t *btn_yes;
|
|
static lv_obj_t *btn_no;
|
|
/********门铃呼叫需要静态的部件******/
|
|
|
|
|
|
/*******管理员登录 界面需要静态的部件******/
|
|
static lv_obj_t *btn_pass_login;
|
|
static lv_obj_t *btn_nfc_login;
|
|
static lv_obj_t *btn_palm_login;
|
|
static lv_obj_t *btn_face_login;
|
|
static lv_obj_t *btn_return_login;
|
|
|
|
|
|
/*******密码登录需要静态的部件******/
|
|
|
|
|
|
/*******用户管理菜单需要静态的部件******/
|
|
static lv_obj_t *btn_admin_menu;
|
|
static lv_obj_t *btn_normal_menu;
|
|
static lv_obj_t *btn_return_menu;
|
|
static lv_obj_t *btn_return_home;
|
|
static lv_obj_t *user_list;
|
|
static lv_obj_t *btn_add;
|
|
static lv_obj_t *btn_edit;
|
|
static lv_obj_t *btn_trash;
|
|
static lv_obj_t *btn_finish;
|
|
static lv_obj_t *checkbox_full;
|
|
|
|
/*用户详情方式 界面需要*/
|
|
static lv_obj_t *btn_add_pass;
|
|
static lv_obj_t *btn_del_pass;
|
|
|
|
static lv_obj_t *btn_add_nfc;
|
|
static lv_obj_t *btn_del_nfc;
|
|
|
|
static lv_obj_t *btn_add_palm;
|
|
static lv_obj_t *btn_del_palm;
|
|
|
|
static lv_obj_t *btn_add_face;
|
|
static lv_obj_t *btn_del_face;
|
|
|
|
static lv_obj_t *btn_return_add_menu;
|
|
static lv_obj_t *btn_return_add_mode;
|
|
|
|
/*添加密码 界面*/
|
|
static lv_obj_t *add_btnmatrix;
|
|
static lv_obj_t *add_text_keyboard;
|
|
static lv_obj_t *add_text_keyboard2;
|
|
static int32_t input_pass_where = 0;
|
|
|
|
static void lv_obj_style_init(void);
|
|
|
|
static void show_main_gui(void);
|
|
static void main_gui(void);
|
|
static void lowpower_gui(void);
|
|
static void ring_gui(void);
|
|
static void pass_login_gui(void);
|
|
static void nfc_login_gui(void);
|
|
static void palm_login_gui(void);
|
|
static void face_login_gui(void);
|
|
static void login_verify_succ(void);
|
|
static void login_verify_fail(void);
|
|
static void menu_gui(void);
|
|
static void user_menu_gui(void);
|
|
static void user_mode_gui(void);
|
|
static void add_pass_gui(void);
|
|
static void add_nfc_gui(void);
|
|
static void add_palm_gui(void);
|
|
static void add_face_gui(void);
|
|
static void add_user_anim(bool result);
|
|
|
|
static void key_msg(void);
|
|
static void key_msg_event_cb(lv_event_cb_t * e);
|
|
static void login_msg(void);
|
|
static void login_msg_event_cb(lv_event_cb_t * e);
|
|
static void del_user_msg(delete_type type);
|
|
static void del_user_msg_event_cb(lv_event_cb_t * e);
|
|
static void del_usermode_msg_event_cb(lv_event_cb_t * e);
|
|
|
|
static void show_main_event_cb(lv_event_cb_t * e);
|
|
static void return_event_cb(lv_event_cb_t * e);
|
|
static void main_event_cb(lv_event_cb_t * e);
|
|
static void ring_event_cb(lv_event_cb_t * e);
|
|
|
|
static void key_event_cb(lv_event_cb_t * e);
|
|
static void login_event_cb(lv_event_cb_t * e);
|
|
static void pass_login_event_cb(lv_event_cb_t * e);
|
|
static void menu_event_cb(lv_event_cb_t * e);
|
|
static void user_menu_event_cb(lv_event_cb_t * e);
|
|
static void user_mode_event_cb(lv_event_cb_t * e);
|
|
static void add_pass_event_cb(lv_event_cb_t * e);
|
|
|
|
/*相关动画*/
|
|
static void wait_open_anim(void);
|
|
static void wait_open_anim_end(lv_anim_t * anim);
|
|
static void open_anim_event_cb(void);
|
|
|
|
|
|
/*功能函数*/
|
|
static void random_map_convert(char **string_map, char **matrix_map);
|
|
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_blink(lv_obj_t *obj, int32_t Value);
|
|
static void lv_obj_display_top_layer(void);
|
|
static void lv_obj_disappear_top_layer(void);
|
|
|
|
|
|
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_10);
|
|
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);
|
|
|
|
/*创建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(0xB0E0E6));
|
|
lv_style_set_bg_img_src(&scr_style, bg_img);
|
|
|
|
/*创建return_style, 返回键、home键*/
|
|
lv_style_init(&return_style);
|
|
lv_style_set_width(&return_style, 48);
|
|
lv_style_set_height(&return_style, 48);
|
|
|
|
/*创建add_style*/
|
|
lv_style_init(&add_style);
|
|
lv_style_set_width(&add_style, 100);
|
|
lv_style_set_height(&add_style, 50);
|
|
lv_style_set_text_font(&add_style, &lv_font_montserrat_24);
|
|
lv_style_set_bg_color(&add_style, lv_palette_main(LV_PALETTE_GREEN));
|
|
|
|
/*创建del_style*/
|
|
lv_style_init(&del_style);
|
|
lv_style_set_width(&del_style, 100);
|
|
lv_style_set_height(&del_style, 50);
|
|
lv_style_set_text_font(&del_style, &lv_font_montserrat_24);
|
|
lv_style_set_bg_color(&del_style, lv_palette_main(LV_PALETTE_RED));
|
|
}
|
|
|
|
static void show_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_add_event_cb(scr, show_main_event_cb, LV_EVENT_CLICKED, NULL);
|
|
}
|
|
|
|
static void show_main_event_cb(lv_event_cb_t * e)
|
|
{
|
|
lv_event_code_t code = lv_event_get_code(e);
|
|
if(code == LV_EVENT_CLICKED)
|
|
{
|
|
main_gui();
|
|
}
|
|
}
|
|
|
|
static void stop_anim_cb(lv_anim_t * animation)
|
|
{
|
|
show_main_gui();
|
|
}
|
|
|
|
/*低电量预警 界面*/
|
|
static void lowpower_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 *img = lv_img_create(scr);
|
|
lv_img_set_src(img, lowpower_img);
|
|
lv_obj_center(img);
|
|
|
|
lv_obj_t *label = lv_label_create(scr);
|
|
lv_obj_align_to(label, img, LV_ALIGN_OUT_BOTTOM_MID, -150, 50);
|
|
lv_label_set_text(label, "电池电量过低,请及时充电");
|
|
|
|
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_obj_blink);
|
|
lv_anim_set_time(&anim, 500);
|
|
lv_anim_set_values(&anim, 0, 100);
|
|
lv_anim_set_repeat_count(&anim, 1);
|
|
lv_anim_set_playback_delay(&anim, 100);
|
|
lv_anim_set_playback_time(&anim, 500);
|
|
lv_anim_set_ready_cb(&anim, stop_anim_cb);
|
|
lv_anim_start(&anim);
|
|
|
|
}
|
|
|
|
static void return_event_cb(lv_event_cb_t * e)
|
|
{
|
|
lv_obj_t * target = lv_event_get_target(e);
|
|
|
|
if(target == btn_return)
|
|
{
|
|
main_gui();
|
|
}
|
|
else if(target == btn_return_login)
|
|
{
|
|
main_gui();
|
|
lv_obj_set_tile(tileview, scr_login, LV_ANIM_OFF);
|
|
}
|
|
else if ( target == btn_return_menu)
|
|
{
|
|
menu_gui();
|
|
}
|
|
else if( target == btn_return_home)
|
|
{
|
|
menu_gui();
|
|
}
|
|
else if( target == btn_return_add_menu)
|
|
{
|
|
LV_LOG_USER("user_menu_gui");
|
|
user_menu_gui();
|
|
}
|
|
else if(target == btn_return_add_mode)
|
|
{
|
|
user_mode_gui();
|
|
}
|
|
}
|
|
|
|
/*主界面框架*/
|
|
static void main_gui(void)
|
|
{
|
|
lv_obj_t *scr = lv_obj_create(NULL);
|
|
lv_obj_add_style(scr, &scr_style, 0);
|
|
lv_scr_load(scr);
|
|
|
|
lv_obj_show_battery(4, top());
|
|
lv_obj_show_wifi(true, top());
|
|
|
|
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);
|
|
scr_keyboard = lv_tileview_add_tile(tileview, 0, 1, LV_DIR_RIGHT);
|
|
scr_main = lv_tileview_add_tile(tileview, 1, 1, LV_DIR_HOR | LV_DIR_TOP);
|
|
scr_login = lv_tileview_add_tile(tileview, 2, 1, LV_DIR_LEFT);
|
|
lv_obj_set_tile(tileview, scr_main, LV_ANIM_OFF);
|
|
|
|
/*创建 主屏幕*/
|
|
lv_obj_set_size(scr_main, scr_act_width(), scr_act_height());
|
|
|
|
/*门铃按钮*/
|
|
btn_ring_main = lv_btn_create(scr_main);
|
|
lv_obj_set_size(btn_ring_main, 640, 150);
|
|
lv_obj_align(btn_ring_main, LV_ALIGN_LEFT_MID, 40, 200);
|
|
lv_obj_add_style(btn_ring_main, &btn_style, 0);
|
|
lv_obj_set_style_bg_img_src(btn_ring_main, bell_img, 0);
|
|
lv_obj_set_style_bg_color(btn_ring_main, lv_palette_main(LV_PALETTE_GREEN), 0);
|
|
lv_obj_add_event_cb(btn_ring_main, main_event_cb, LV_EVENT_CLICKED, NULL);
|
|
|
|
vol_slider = lv_slider_create(scr_main);
|
|
lv_slider_set_range(vol_slider, 0, 100);
|
|
lv_obj_set_size(vol_slider, 300, 100);
|
|
lv_obj_align_to(vol_slider, btn_ring_main, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 50);
|
|
lv_obj_add_style(vol_slider, &btn_style, 0);
|
|
lv_obj_set_style_opa(vol_slider, LV_OPA_TRANSP, LV_PART_KNOB);
|
|
lv_obj_set_style_radius(vol_slider, 0, LV_PART_INDICATOR);
|
|
lv_obj_add_event_cb(vol_slider, main_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
|
|
lv_obj_t *img_vol = lv_img_create(vol_slider);
|
|
lv_img_set_src(img_vol, vol_img);
|
|
lv_obj_center(img_vol);
|
|
lv_obj_move_foreground(img_vol);
|
|
|
|
light_slider = lv_slider_create(scr_main);
|
|
lv_slider_set_range(light_slider, 0, 100);
|
|
lv_obj_set_size(light_slider, 300, 100);
|
|
lv_obj_align_to(light_slider, vol_slider, LV_ALIGN_OUT_RIGHT_TOP, 40, 0);
|
|
lv_obj_add_style(light_slider, &btn_style, 0);
|
|
lv_obj_set_style_opa(light_slider, LV_OPA_TRANSP, LV_PART_KNOB);
|
|
lv_obj_set_style_radius(light_slider, 0, LV_PART_INDICATOR);
|
|
lv_obj_add_event_cb(light_slider, main_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
|
|
lv_obj_t *img_light = lv_img_create(light_slider);
|
|
lv_img_set_src(img_light, light_img);
|
|
lv_obj_center(img_light);
|
|
lv_obj_move_foreground(img_light);
|
|
|
|
/*创建键盘屏幕*/
|
|
lv_obj_set_size(scr_keyboard, scr_act_width(), scr_act_height());
|
|
|
|
/*matrix 矩阵键盘*/
|
|
btnmatrix = lv_btnmatrix_create(scr_keyboard);
|
|
lv_obj_set_size(btnmatrix, scr_act_width(), 900);
|
|
lv_obj_align(btnmatrix, LV_ALIGN_BOTTOM_MID, 0, 0);
|
|
static char *matrixmap[17];
|
|
random_map_convert(string_map, matrixmap);
|
|
lv_btnmatrix_set_map(btnmatrix, matrixmap);
|
|
lv_obj_set_style_text_font(btnmatrix, &lv_font_montserrat_34, 0);
|
|
lv_obj_set_style_bg_opa(btnmatrix, LV_OPA_TRANSP, 0);
|
|
lv_obj_set_style_border_width(btnmatrix, 0, 0); /*消除边框*/
|
|
lv_obj_set_style_pad_gap(btnmatrix, 5, 0); /*设置按钮间距*/
|
|
lv_obj_set_style_opa(btnmatrix, LV_OPA_90, 0);
|
|
lv_obj_add_event_cb(btnmatrix, key_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
|
|
|
|
/*textarea 文本区域*/
|
|
text_keyboard = lv_textarea_create(scr_keyboard);
|
|
lv_obj_set_size(text_keyboard, 500, 200);
|
|
lv_obj_align_to(text_keyboard, btnmatrix, LV_ALIGN_OUT_TOP_MID, 0, 0);
|
|
lv_obj_set_style_text_font(text_keyboard, &lv_font_montserrat_34, 0);
|
|
lv_obj_set_style_bg_opa(text_keyboard, LV_OPA_50, 0);
|
|
lv_textarea_set_max_length(text_keyboard, 32);
|
|
lv_textarea_set_one_line(text_keyboard, true);
|
|
lv_textarea_set_password_mode(text_keyboard, true);
|
|
|
|
/*隐藏/显现 密码*/
|
|
visi_btn = lv_imgbtn_create(scr_keyboard);
|
|
lv_imgbtn_set_src(visi_btn, LV_IMGBTN_STATE_RELEASED, visible_img, visible_img, visible_img);
|
|
lv_obj_set_size(visi_btn, 32, 32);
|
|
lv_obj_align_to(visi_btn, text_keyboard, LV_ALIGN_RIGHT_MID, 0, 0);
|
|
lv_obj_clear_flag(visi_btn, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_set_style_opa(visi_btn, LV_OPA_50, 0);
|
|
lv_obj_add_event_cb(visi_btn, key_event_cb, LV_EVENT_CLICKED, 0);
|
|
|
|
invisi_btn = lv_imgbtn_create(scr_keyboard);
|
|
lv_imgbtn_set_src(invisi_btn, LV_IMGBTN_STATE_RELEASED, invisible_img, invisible_img, invisible_img);
|
|
lv_obj_set_size(invisi_btn, 32, 32);
|
|
lv_obj_align_to(invisi_btn, text_keyboard, LV_ALIGN_RIGHT_MID, 0, 0);
|
|
lv_obj_add_flag(invisi_btn, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_set_style_opa(invisi_btn, LV_OPA_50, 0);
|
|
lv_obj_add_event_cb(invisi_btn, key_event_cb, LV_EVENT_CLICKED, 0);
|
|
|
|
/*创建 登录屏幕*/
|
|
lv_obj_set_size(scr_login, scr_act_width(), scr_act_height());
|
|
|
|
lv_obj_t *scr_login_label = lv_label_create(scr_login);
|
|
lv_obj_align(scr_login_label, LV_ALIGN_TOP_MID, 0 , 15);
|
|
lv_label_set_text(scr_login_label, "管理员登录方式");
|
|
|
|
btn_pass_login = lv_btn_create(scr_login);
|
|
lv_obj_set_size(btn_pass_login, 500, 200);
|
|
lv_obj_align(btn_pass_login, LV_ALIGN_TOP_LEFT, 100, 100);
|
|
lv_obj_set_style_bg_img_src(btn_pass_login, keyboard_img, 0);
|
|
lv_obj_add_style(btn_pass_login, &btn_style, 0);
|
|
lv_obj_add_event_cb(btn_pass_login, login_event_cb, LV_EVENT_CLICKED, NULL);
|
|
lv_obj_t *label_pass = lv_label_create(btn_pass_login);
|
|
lv_label_set_text(label_pass, "密码登录");
|
|
lv_obj_add_style(label_pass, &btn_text_style, 0);
|
|
|
|
btn_nfc_login = lv_btn_create(scr_login);
|
|
lv_obj_set_size(btn_nfc_login, 500, 200);
|
|
lv_obj_align_to(btn_nfc_login, btn_pass_login, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 100);
|
|
lv_obj_set_style_bg_img_src(btn_nfc_login, nfc_img, 0);
|
|
lv_obj_add_style(btn_nfc_login, &btn_style, 0);
|
|
lv_obj_add_event_cb(btn_nfc_login, login_event_cb, LV_EVENT_CLICKED, NULL);
|
|
lv_obj_t *label_nfc = lv_label_create(btn_nfc_login);
|
|
lv_label_set_text(label_nfc, "NFC卡登录");
|
|
lv_obj_add_style(label_nfc, &btn_text_style, 0);
|
|
|
|
btn_palm_login = lv_btn_create(scr_login);
|
|
lv_obj_set_size(btn_palm_login, 500, 200);
|
|
lv_obj_align_to(btn_palm_login, btn_nfc_login, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 100);
|
|
lv_obj_set_style_bg_img_src(btn_palm_login, palm_img, 0);
|
|
lv_obj_add_style(btn_palm_login, &btn_style, 0);
|
|
lv_obj_add_event_cb(btn_palm_login, login_event_cb, LV_EVENT_CLICKED, NULL);
|
|
lv_obj_t *label_palm = lv_label_create(btn_palm_login);
|
|
lv_label_set_text(label_palm, "掌静脉登录");
|
|
lv_obj_add_style(label_palm, &btn_text_style, 0);
|
|
|
|
btn_face_login = lv_btn_create(scr_login);
|
|
lv_obj_set_size(btn_face_login, 500, 200);
|
|
lv_obj_align_to(btn_face_login, btn_palm_login, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 100);
|
|
lv_obj_set_style_bg_img_src(btn_face_login, face_img, 0);
|
|
lv_obj_add_style(btn_face_login, &btn_style, 0);
|
|
lv_obj_add_event_cb(btn_face_login, login_event_cb, LV_EVENT_CLICKED, NULL);
|
|
lv_obj_t *label_face = lv_label_create(btn_face_login);
|
|
lv_label_set_text(label_face, "人脸登录");
|
|
lv_obj_add_style(label_face, &btn_text_style, 0);
|
|
}
|
|
|
|
/*主界面部件回调函数(包含返回键)*/
|
|
static void main_event_cb(lv_event_cb_t * e)
|
|
{
|
|
lv_obj_t * target = lv_event_get_target(e);
|
|
|
|
if(target == btn_ring_main)
|
|
{
|
|
LV_LOG_USER("RING");
|
|
ring_gui();
|
|
}
|
|
else if(target == vol_slider)
|
|
{
|
|
LV_LOG_USER("vol_slider %d",lv_slider_get_value(vol_slider));
|
|
|
|
}
|
|
else if(target == light_slider)
|
|
{
|
|
LV_LOG_USER("light_slider %d",lv_slider_get_value(light_slider));
|
|
}
|
|
}
|
|
|
|
/*密码键盘输入回调函数*/
|
|
static void key_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(target == btnmatrix)
|
|
{
|
|
const char *txt = lv_btnmatrix_get_btn_text(btnmatrix, lv_btnmatrix_get_selected_btn(btnmatrix));
|
|
if(strcmp(txt, LV_SYMBOL_BACKSPACE) == 0)
|
|
{
|
|
lv_textarea_del_char(text_keyboard);
|
|
}
|
|
else if(strcmp(txt, LV_SYMBOL_NEW_LINE) == 0)
|
|
{
|
|
if(strcmp(lv_textarea_get_text(text_keyboard), password) == 0)
|
|
{
|
|
wait_open_anim();
|
|
}
|
|
else
|
|
{
|
|
lv_textarea_set_text(text_keyboard, "");
|
|
key_msg();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
lv_textarea_add_text(text_keyboard, txt);
|
|
}
|
|
}
|
|
else if(target == visi_btn)
|
|
{
|
|
lv_textarea_set_password_mode(text_keyboard, false);
|
|
lv_obj_add_flag(visi_btn, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_clear_flag(invisi_btn, LV_OBJ_FLAG_HIDDEN);
|
|
}
|
|
else if(target == invisi_btn)
|
|
{
|
|
lv_textarea_set_password_mode(text_keyboard, true);
|
|
lv_obj_add_flag(invisi_btn, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_clear_flag(visi_btn, LV_OBJ_FLAG_HIDDEN);
|
|
}
|
|
}
|
|
|
|
static void key_msg(void)
|
|
{
|
|
/* 消息弹窗*/
|
|
lv_obj_display_top_layer();
|
|
|
|
btn_msg = lv_btn_create(lv_layer_top());
|
|
lv_obj_set_size(btn_msg, 400, 200);
|
|
lv_obj_center(btn_msg);
|
|
lv_obj_set_style_bg_color(btn_msg, lv_palette_main(LV_PALETTE_BLUE_GREY), 0);
|
|
lv_obj_t *label = lv_label_create(btn_msg);
|
|
lv_label_set_text(label, "密码错误,请重新输入");
|
|
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 50);
|
|
|
|
btn_yes = lv_btn_create(btn_msg);
|
|
lv_obj_set_style_bg_color(btn_yes, lv_palette_main(LV_PALETTE_GREEN), 0);
|
|
lv_obj_set_size(btn_yes, 150, 50);
|
|
lv_obj_align_to(btn_yes, label, LV_ALIGN_OUT_BOTTOM_RIGHT, 50, 50);
|
|
lv_obj_add_event_cb(btn_yes, key_msg_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_msg);
|
|
lv_obj_set_style_bg_color(btn_no, lv_palette_main(LV_PALETTE_RED), 0);
|
|
lv_obj_set_size(btn_no, 150, 50);
|
|
lv_obj_align_to(btn_no, label, LV_ALIGN_OUT_BOTTOM_LEFT, -50, 50);
|
|
lv_obj_add_event_cb(btn_no, key_msg_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 key_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);
|
|
|
|
if(target == btn_yes)
|
|
{
|
|
lv_obj_disappear_top_layer();
|
|
}
|
|
else if(target == btn_no)
|
|
{
|
|
lv_obj_disappear_top_layer();
|
|
lv_obj_set_tile(tileview, scr_main, LV_ANIM_ON);
|
|
}
|
|
}
|
|
|
|
/*缓冲动画结束后,回调到 开锁界面*/
|
|
static void wait_open_anim(void)
|
|
{
|
|
lv_obj_t *img = lv_img_create(top());
|
|
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, 1500);
|
|
lv_anim_set_values(&anim, 0, 3599);
|
|
lv_anim_set_repeat_count(&anim, LV_ANIM_REPEAT_INFINITE);
|
|
lv_anim_set_start_cb(&anim, wait_open_anim_end);
|
|
lv_anim_start(&anim);
|
|
}
|
|
|
|
static void wait_open_anim_end(lv_anim_t * anim)
|
|
{
|
|
LV_LOG_USER("xxx");
|
|
//lv_anim_del(anim->var, NULL);/*确保删除动画*/
|
|
}
|
|
|
|
/*开锁成功 界面*/
|
|
static void open_anim_event_cb(void)
|
|
{
|
|
lv_obj_clean(top());
|
|
lv_obj_t *scr_open = lv_obj_create(top());
|
|
lv_obj_set_size(scr_open, scr_act_width(), scr_act_height());
|
|
lv_obj_set_style_bg_img_src(scr_open, success_img, 0);
|
|
|
|
lv_obj_t *label = lv_label_create(scr_open);
|
|
lv_obj_align(label, LV_ALIGN_CENTER, 0, 300);
|
|
lv_label_set_text(label, "请开门");
|
|
|
|
btn_return = lv_imgbtn_create(scr_open);
|
|
lv_imgbtn_set_src(btn_return, LV_IMGBTN_STATE_RELEASED, return_img, return_img, return_img);
|
|
lv_obj_add_style(btn_return, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return, return_event_cb, LV_EVENT_CLICKED, NULL);
|
|
}
|
|
|
|
/*门铃呼叫界面*/
|
|
static void ring_gui(void)
|
|
{
|
|
lv_obj_clean(top());
|
|
lv_obj_t *scr_ring = lv_obj_create(NULL);
|
|
lv_obj_add_style(scr_ring, &scr_style, 0);
|
|
lv_scr_load(scr_ring);
|
|
|
|
lv_obj_t *img = lv_img_create(scr_ring);
|
|
lv_img_set_src(img, call_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, 200);
|
|
lv_anim_set_repeat_count(&anim, LV_ANIM_REPEAT_INFINITE);
|
|
lv_anim_set_playback_delay(&anim, 50);
|
|
lv_anim_set_playback_time(&anim, 1000);
|
|
lv_anim_start(&anim);
|
|
|
|
lv_obj_t *label = lv_label_create(scr_ring);
|
|
lv_label_set_text(label, "正在呼叫中...");
|
|
lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL_CIRCULAR);
|
|
lv_obj_set_size(label, 100, 24);
|
|
lv_obj_align(label, LV_ALIGN_CENTER, 0, 200);
|
|
lv_obj_add_flag(label, LV_OBJ_FLAG_CLICKABLE);
|
|
lv_obj_add_event_cb(label, ring_event_cb, LV_EVENT_CLICKED, NULL);
|
|
|
|
btn_return = lv_imgbtn_create(scr_ring);
|
|
lv_imgbtn_set_src(btn_return, LV_IMGBTN_STATE_RELEASED, return_img, return_img, return_img);
|
|
lv_obj_add_style(btn_return, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return, return_event_cb, LV_EVENT_CLICKED, NULL);
|
|
}
|
|
|
|
/*门铃接听回调*/
|
|
static void ring_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_obj_t *scr_ring = lv_obj_create(NULL);
|
|
lv_obj_add_style(scr_ring, &scr_style, 0);
|
|
lv_scr_load(scr_ring);
|
|
|
|
lv_obj_t *img = lv_img_create(scr_ring);
|
|
lv_img_set_src(img, answer_img);
|
|
lv_obj_center(img);
|
|
|
|
lv_obj_t *label = lv_label_create(scr_ring);
|
|
lv_label_set_text(label, "已接听");
|
|
lv_obj_align(label, LV_ALIGN_CENTER, 0, 200);
|
|
|
|
btn_return = lv_imgbtn_create(scr_ring);
|
|
lv_imgbtn_set_src(btn_return, LV_IMGBTN_STATE_RELEASED, return_img, return_img, return_img);
|
|
lv_obj_add_style(btn_return, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return, return_event_cb, LV_EVENT_CLICKED, NULL);
|
|
}
|
|
}
|
|
|
|
static void login_event_cb(lv_event_cb_t * e)
|
|
{
|
|
lv_obj_t *target = lv_event_get_target(e);
|
|
/*判断管理员登录方式时选择的按键*/
|
|
if(target == btn_pass_login)
|
|
{
|
|
pass_login_gui();
|
|
}
|
|
else if(target == btn_nfc_login)
|
|
{
|
|
nfc_login_gui();
|
|
}
|
|
else if(target == btn_palm_login)
|
|
{
|
|
palm_login_gui();
|
|
}
|
|
else if(target == btn_face_login)
|
|
{
|
|
face_login_gui();
|
|
}
|
|
}
|
|
|
|
/*密码登录 界面*/
|
|
static void pass_login_gui(void)
|
|
{
|
|
/*创建键盘屏幕*/
|
|
lv_obj_clean(top());
|
|
lv_obj_t *scr_keyboard = lv_obj_create(NULL);
|
|
lv_obj_add_style(scr_keyboard, &scr_style, 0);
|
|
lv_scr_load(scr_keyboard);
|
|
|
|
/*matrix 矩阵键盘*/
|
|
btnmatrix = lv_btnmatrix_create(scr_keyboard);
|
|
lv_obj_set_size(btnmatrix, scr_act_width(), 900);
|
|
lv_obj_align(btnmatrix, LV_ALIGN_BOTTOM_MID, 0, 0);
|
|
static char *matrixmap[17];
|
|
random_map_convert(string_map, matrixmap);
|
|
lv_btnmatrix_set_map(btnmatrix, matrixmap);
|
|
lv_obj_set_style_text_font(btnmatrix, &lv_font_montserrat_34, 0);
|
|
lv_obj_set_style_bg_opa(btnmatrix, LV_OPA_TRANSP, 0);
|
|
lv_obj_set_style_border_width(btnmatrix, 0, 0); /*消除边框*/
|
|
lv_obj_set_style_pad_gap(btnmatrix, 5, 0); /*设置按钮间距*/
|
|
lv_obj_set_style_opa(btnmatrix, LV_OPA_90, 0);
|
|
lv_obj_add_event_cb(btnmatrix, pass_login_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
|
|
|
|
/*textarea 文本区域*/
|
|
text_keyboard = lv_textarea_create(scr_keyboard);
|
|
lv_obj_set_size(text_keyboard, 500, 200);
|
|
lv_obj_align_to(text_keyboard, btnmatrix, LV_ALIGN_OUT_TOP_MID, 0, 0);
|
|
lv_obj_set_style_text_font(text_keyboard, &lv_font_montserrat_34, 0);
|
|
lv_obj_set_style_bg_opa(text_keyboard, LV_OPA_50, 0);
|
|
lv_textarea_set_max_length(text_keyboard, 32);
|
|
lv_textarea_set_one_line(text_keyboard, true);
|
|
lv_textarea_set_password_mode(text_keyboard, true);
|
|
|
|
/*隐藏/显现 密码*/
|
|
visi_btn = lv_imgbtn_create(scr_keyboard);
|
|
lv_imgbtn_set_src(visi_btn, LV_IMGBTN_STATE_RELEASED, visible_img, visible_img, visible_img);
|
|
lv_obj_set_size(visi_btn, 32, 32);
|
|
lv_obj_align_to(visi_btn, text_keyboard, LV_ALIGN_RIGHT_MID, 0, 0);
|
|
lv_obj_clear_flag(visi_btn, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_set_style_opa(visi_btn, LV_OPA_50, 0);
|
|
lv_obj_add_event_cb(visi_btn, pass_login_event_cb, LV_EVENT_CLICKED, 0);
|
|
|
|
invisi_btn = lv_imgbtn_create(scr_keyboard);
|
|
lv_imgbtn_set_src(invisi_btn, LV_IMGBTN_STATE_RELEASED, invisible_img, invisible_img, invisible_img);
|
|
lv_obj_set_size(invisi_btn, 32, 32);
|
|
lv_obj_align_to(invisi_btn, text_keyboard, LV_ALIGN_RIGHT_MID, 0, 0);
|
|
lv_obj_add_flag(invisi_btn, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_set_style_opa(invisi_btn, LV_OPA_50, 0);
|
|
lv_obj_add_event_cb(invisi_btn, pass_login_event_cb, LV_EVENT_CLICKED, 0);
|
|
|
|
/*返回键*/
|
|
btn_return_login = lv_imgbtn_create(scr_keyboard);
|
|
lv_imgbtn_set_src(btn_return_login, LV_IMGBTN_STATE_RELEASED, return_img, return_img, return_img);
|
|
lv_obj_add_style(btn_return_login, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return_login, return_event_cb , LV_EVENT_CLICKED, NULL);
|
|
}
|
|
|
|
static void pass_login_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 == btnmatrix)
|
|
{
|
|
const char *txt = lv_btnmatrix_get_btn_text(btnmatrix, lv_btnmatrix_get_selected_btn(btnmatrix));
|
|
if(strcmp(txt, LV_SYMBOL_BACKSPACE) == 0)
|
|
{
|
|
lv_textarea_del_char(text_keyboard);
|
|
}
|
|
else if(strcmp(txt, LV_SYMBOL_NEW_LINE) == 0)
|
|
{
|
|
if(strcmp(lv_textarea_get_text(text_keyboard), password) == 0)
|
|
{
|
|
login_verify_succ();
|
|
}
|
|
else
|
|
{
|
|
lv_textarea_set_text(text_keyboard, "");
|
|
login_msg();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
lv_textarea_add_text(text_keyboard, txt);
|
|
}
|
|
}
|
|
else if(target == visi_btn)
|
|
{
|
|
lv_textarea_set_password_mode(text_keyboard, false);
|
|
lv_obj_add_flag(visi_btn, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_clear_flag(invisi_btn, LV_OBJ_FLAG_HIDDEN);
|
|
}
|
|
else if(target == invisi_btn)
|
|
{
|
|
lv_textarea_set_password_mode(text_keyboard, true);
|
|
lv_obj_add_flag(invisi_btn, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_clear_flag(visi_btn, LV_OBJ_FLAG_HIDDEN);
|
|
}
|
|
}
|
|
|
|
/*nfc 登录界面*/
|
|
static void nfc_login_gui(void)
|
|
{
|
|
lv_obj_clean(top());
|
|
lv_obj_t *scr_nfc_login = lv_obj_create(NULL);
|
|
lv_obj_add_style(scr_nfc_login, &scr_style, 0);
|
|
lv_scr_load(scr_nfc_login);
|
|
|
|
lv_obj_t *img = lv_img_create(scr_nfc_login);
|
|
lv_img_set_src(img, nfc_detect_img);
|
|
lv_obj_center(img);
|
|
|
|
lv_obj_t *label = lv_label_create(scr_nfc_login);
|
|
lv_label_set_text(label, "请将NFC卡放到标识区域内");
|
|
lv_obj_align(label, LV_ALIGN_BOTTOM_MID, 0, -300);
|
|
|
|
/*返回键*/
|
|
btn_return_login = lv_imgbtn_create(scr_nfc_login);
|
|
lv_imgbtn_set_src(btn_return_login, LV_IMGBTN_STATE_RELEASED, return_img, return_img, return_img);
|
|
lv_obj_add_style(btn_return_login, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return_login, return_event_cb , LV_EVENT_CLICKED, NULL);
|
|
}
|
|
|
|
/*掌静脉登录界面*/
|
|
static void palm_login_gui(void)
|
|
{
|
|
lv_obj_clean(top());
|
|
lv_obj_t *scr_palm_login = lv_obj_create(NULL);
|
|
lv_obj_add_style(scr_palm_login, &scr_style, 0);
|
|
lv_scr_load(scr_palm_login);
|
|
|
|
/*返回键*/
|
|
btn_return_login = lv_imgbtn_create(scr_palm_login);
|
|
lv_imgbtn_set_src(btn_return_login, LV_IMGBTN_STATE_RELEASED, return_img, return_img, return_img);
|
|
lv_obj_add_style(btn_return_login, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return_login, return_event_cb , LV_EVENT_CLICKED, NULL);
|
|
}
|
|
|
|
/*人脸登录*/
|
|
static void face_login_gui(void)
|
|
{
|
|
lv_obj_clean(top());
|
|
lv_obj_t *scr_face_login = lv_obj_create(NULL);
|
|
lv_obj_add_style(scr_face_login, &scr_style, 0);
|
|
lv_scr_load(scr_face_login);
|
|
|
|
/*返回键*/
|
|
btn_return_login = lv_imgbtn_create(scr_face_login);
|
|
lv_imgbtn_set_src(btn_return_login, LV_IMGBTN_STATE_RELEASED, return_img, return_img, return_img);
|
|
lv_obj_add_style(btn_return_login, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return_login, return_event_cb , LV_EVENT_CLICKED, NULL);
|
|
}
|
|
|
|
/*msgbox 消息弹窗*/
|
|
static void login_msg(void)
|
|
{
|
|
lv_obj_display_top_layer();
|
|
|
|
btn_msg = lv_btn_create(lv_layer_top());
|
|
lv_obj_set_size(btn_msg, 400, 200);
|
|
lv_obj_center(btn_msg);
|
|
lv_obj_set_style_bg_color(btn_msg, lv_palette_main(LV_PALETTE_BLUE_GREY), 0);
|
|
lv_obj_t *label = lv_label_create(btn_msg);
|
|
lv_label_set_text(label, "认证错误,请重新认证");
|
|
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 50);
|
|
|
|
btn_yes = lv_btn_create(btn_msg);
|
|
lv_obj_set_style_bg_color(btn_yes, lv_palette_main(LV_PALETTE_GREEN), 0);
|
|
lv_obj_set_size(btn_yes, 150, 50);
|
|
lv_obj_align_to(btn_yes, label, LV_ALIGN_OUT_BOTTOM_RIGHT, 50, 50);
|
|
lv_obj_add_event_cb(btn_yes, login_msg_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_msg);
|
|
lv_obj_set_style_bg_color(btn_no, lv_palette_main(LV_PALETTE_RED), 0);
|
|
lv_obj_set_size(btn_no, 150, 50);
|
|
lv_obj_align_to(btn_no, label, LV_ALIGN_OUT_BOTTOM_LEFT, -50, 50);
|
|
lv_obj_add_event_cb(btn_no, login_msg_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 login_msg_event_cb(lv_event_cb_t * e)
|
|
{
|
|
lv_obj_t *target = lv_event_get_target(e);
|
|
|
|
if(target == btn_yes)
|
|
{
|
|
lv_obj_disappear_top_layer();
|
|
}
|
|
else if(target == btn_no)
|
|
{
|
|
login_verify_fail();
|
|
lv_obj_disappear_top_layer();
|
|
}
|
|
|
|
}
|
|
|
|
static void login_verify_fail_anim_cb(lv_anim_t *anim)
|
|
{
|
|
main_gui();
|
|
lv_obj_set_tile(tileview, scr_login, LV_ANIM_OFF);
|
|
lv_anim_del(anim, NULL);
|
|
}
|
|
|
|
static void login_verify_fail(void)
|
|
{
|
|
lv_obj_t *showbtn = lv_btn_create(top());
|
|
lv_obj_set_size(showbtn, 300, 200);
|
|
lv_obj_center(showbtn);
|
|
lv_obj_set_style_bg_color(showbtn, lv_palette_main(LV_PALETTE_RED), 0);
|
|
lv_obj_set_style_bg_img_src(showbtn, fork_img, 0);
|
|
|
|
lv_obj_t *label = lv_label_create(showbtn);
|
|
lv_label_set_text(label, "认证失败");
|
|
lv_obj_add_style(label, &btn_text_style, 0);
|
|
lv_obj_align(label, LV_ALIGN_CENTER, 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, 500);
|
|
lv_anim_set_values(&anim, 0, 0);
|
|
lv_anim_set_ready_cb(&anim, login_verify_fail_anim_cb);
|
|
lv_anim_start(&anim);
|
|
}
|
|
|
|
static void login_verify_succ_anim_cb(lv_anim_t *anim)
|
|
{
|
|
menu_gui();
|
|
lv_anim_del(anim, NULL);
|
|
}
|
|
|
|
static void login_verify_succ(void)
|
|
{
|
|
lv_obj_t *showbtn = lv_btn_create(top());
|
|
lv_obj_set_size(showbtn, 300, 200);
|
|
lv_obj_center(showbtn);
|
|
lv_obj_set_style_bg_color(showbtn, lv_palette_main(LV_PALETTE_GREEN), 0);
|
|
lv_obj_set_style_bg_img_src(showbtn, tick_img, 0);
|
|
|
|
lv_obj_t *label = lv_label_create(showbtn);
|
|
lv_label_set_text(label, "认证成功");
|
|
lv_obj_add_style(label, &btn_text_style, 0);
|
|
lv_obj_align(label, LV_ALIGN_CENTER, 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, 500);
|
|
lv_anim_set_values(&anim, 0, 0);
|
|
lv_anim_set_ready_cb(&anim, login_verify_succ_anim_cb);
|
|
lv_anim_start(&anim);
|
|
}
|
|
|
|
|
|
/*管理菜单界面*/
|
|
static void menu_gui(void)
|
|
{
|
|
lv_obj_clean(top());
|
|
lv_obj_t *scr_menu = lv_obj_create(NULL);
|
|
lv_obj_add_style(scr_menu, &scr_style, 0);
|
|
lv_scr_load(scr_menu);
|
|
|
|
lv_obj_t *label = lv_label_create(scr_menu);
|
|
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 15);
|
|
lv_label_set_text(label, "用户管理");
|
|
|
|
btn_admin_menu = lv_btn_create(scr_menu);
|
|
lv_obj_set_size(btn_admin_menu, 500, 200);
|
|
lv_obj_align(btn_admin_menu, LV_ALIGN_TOP_MID, 0, 300);
|
|
lv_obj_set_style_bg_img_src(btn_admin_menu, add_admin_img, 0);
|
|
lv_obj_add_style(btn_admin_menu, &btn_style, 0);
|
|
lv_obj_add_event_cb(btn_admin_menu, menu_event_cb, LV_EVENT_CLICKED, NULL);
|
|
lv_obj_t *label_admin = lv_label_create(btn_admin_menu);
|
|
lv_label_set_text(label_admin, "管理员登记");
|
|
lv_obj_add_style(label_admin, &btn_text_style, 0);
|
|
|
|
btn_normal_menu = lv_btn_create(scr_menu);
|
|
lv_obj_set_size(btn_normal_menu, 500, 200);
|
|
lv_obj_align_to(btn_normal_menu, btn_admin_menu, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 200);
|
|
lv_obj_set_style_bg_img_src(btn_normal_menu, add_normal_img, 0);
|
|
lv_obj_add_style(btn_normal_menu, &btn_style, 0);
|
|
lv_obj_add_event_cb(btn_normal_menu, menu_event_cb, LV_EVENT_CLICKED, NULL);
|
|
lv_obj_t *label_normal = lv_label_create(btn_normal_menu);
|
|
lv_label_set_text(label_normal, "普通用户登记");
|
|
lv_obj_add_style(label_normal, &btn_text_style, 0);
|
|
|
|
btn_return = lv_imgbtn_create(scr_menu);
|
|
lv_imgbtn_set_src(btn_return, LV_IMGBTN_STATE_RELEASED, return_img, return_img, return_img);
|
|
lv_obj_align(btn_return, LV_ALIGN_TOP_LEFT, 0, 0);
|
|
lv_obj_add_style(btn_return, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return, return_event_cb , LV_EVENT_CLICKED, NULL);
|
|
}
|
|
|
|
static void menu_event_cb(lv_event_cb_t * e)
|
|
{
|
|
lv_obj_t *target = lv_event_get_target(e);
|
|
if( target == btn_admin_menu)
|
|
{
|
|
user_menu_gui();
|
|
}
|
|
else if( target == btn_normal_menu)
|
|
{
|
|
user_menu_gui();
|
|
}
|
|
}
|
|
|
|
static void user_menu_gui(void)
|
|
{
|
|
lv_obj_clean(top());
|
|
lv_obj_t *scr_user = lv_obj_create(NULL);
|
|
lv_obj_add_style(scr_user, &scr_style, 0);
|
|
lv_scr_load(scr_user);
|
|
|
|
lv_obj_t *label = lv_label_create(scr_user);
|
|
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 15);
|
|
lv_label_set_text(label, "用户列表");
|
|
|
|
/*用户列表*/
|
|
user_list = lv_list_create(scr_user);
|
|
lv_obj_set_size(user_list, scr_act_width(), scr_act_height() - 100);
|
|
lv_obj_align(user_list, LV_ALIGN_TOP_MID, 0, 100);
|
|
lv_obj_set_style_bg_opa(user_list, LV_OPA_TRANSP, 0);
|
|
lv_obj_set_style_pad_hor(user_list, 0, 0);
|
|
|
|
/*用户列表项*/
|
|
lv_obj_t *list_btn;
|
|
lv_obj_t *checkbox;
|
|
const char *users_item[] = {"用户1", "用户2", "用户3"};
|
|
for(int i = 0; i < sizeof(users_item) / sizeof(users_item[0]); i++)
|
|
{
|
|
list_btn = lv_list_add_btn(user_list, NULL, users_item[i]);
|
|
lv_obj_set_height(list_btn, 150);
|
|
lv_obj_set_style_bg_opa(list_btn, LV_OPA_TRANSP, 0);
|
|
lv_obj_add_event_cb(list_btn, user_menu_event_cb, LV_EVENT_CLICKED, NULL);
|
|
checkbox = lv_checkbox_create(list_btn);
|
|
lv_checkbox_set_text(checkbox, "");
|
|
lv_obj_add_flag(checkbox, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_add_event_cb(checkbox, user_menu_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
|
|
}
|
|
|
|
/*新建用户 按钮*/
|
|
btn_add = lv_btn_create(scr_user);
|
|
lv_obj_set_size(btn_add, 75, 75);
|
|
lv_obj_align(btn_add, LV_ALIGN_BOTTOM_MID, 0, -100);
|
|
lv_obj_add_flag(btn_add, LV_OBJ_FLAG_FLOATING);
|
|
lv_obj_set_style_radius(btn_add, LV_RADIUS_CIRCLE, 0);
|
|
lv_obj_set_style_bg_img_src(btn_add, LV_SYMBOL_PLUS, 0);
|
|
lv_obj_set_style_text_font(btn_add, &lv_font_montserrat_34, 0);
|
|
lv_obj_add_event_cb(btn_add, user_menu_event_cb, LV_EVENT_CLICKED, NULL);
|
|
|
|
/*编辑用户 按键*/
|
|
btn_edit = lv_imgbtn_create(scr_user);
|
|
lv_imgbtn_set_src(btn_edit, LV_IMGBTN_STATE_RELEASED, edit_img, edit_img, edit_img);
|
|
lv_obj_set_size(btn_edit, 32, 32);
|
|
lv_obj_align_to(btn_edit, user_list, LV_ALIGN_OUT_TOP_RIGHT, -20, 0);
|
|
lv_obj_add_event_cb(btn_edit, user_menu_event_cb, LV_EVENT_CLICKED, NULL);
|
|
|
|
/*全选用户 复选框*/
|
|
checkbox_full = lv_checkbox_create(scr_user);
|
|
lv_obj_align_to(checkbox_full, user_list, LV_ALIGN_OUT_TOP_RIGHT, 0, 0);
|
|
lv_obj_set_style_text_align(checkbox_full, LV_TEXT_ALIGN_LEFT, 0);
|
|
lv_checkbox_set_text(checkbox_full, "全选");
|
|
lv_obj_add_flag(checkbox_full, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_add_event_cb(checkbox_full, user_menu_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
|
|
|
|
/*删除用户 按钮*/
|
|
btn_trash = lv_btn_create(scr_user);
|
|
lv_obj_set_size(btn_trash, 75, 75);
|
|
lv_obj_align(btn_trash, LV_ALIGN_BOTTOM_MID, 0, -100);
|
|
lv_obj_add_flag(btn_trash, LV_OBJ_FLAG_FLOATING);
|
|
lv_obj_move_foreground(btn_trash);
|
|
lv_obj_set_style_radius(btn_trash, LV_RADIUS_CIRCLE, 0);
|
|
lv_obj_set_style_bg_img_src(btn_trash, LV_SYMBOL_TRASH, 0);
|
|
lv_obj_set_style_text_font(btn_trash, &lv_font_montserrat_34, 0);
|
|
lv_obj_add_flag(btn_trash, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_add_event_cb(btn_trash, user_menu_event_cb, LV_EVENT_CLICKED, NULL);
|
|
|
|
/*编辑完成 按键*/
|
|
btn_finish = lv_imgbtn_create(scr_user);
|
|
lv_imgbtn_set_src(btn_finish, LV_IMGBTN_STATE_RELEASED, finish_img, finish_img, finish_img);
|
|
lv_obj_set_size(btn_finish, 32, 32);
|
|
lv_obj_align_to(btn_finish, user_list, LV_ALIGN_OUT_TOP_RIGHT, -20, 0);
|
|
lv_obj_add_flag(btn_finish, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_add_event_cb(btn_finish, user_menu_event_cb, LV_EVENT_CLICKED, NULL);
|
|
|
|
/*返回 按键*/
|
|
btn_return_menu = lv_imgbtn_create(scr_user);
|
|
lv_imgbtn_set_src(btn_return_menu, LV_IMGBTN_STATE_RELEASED, return_img, return_img, return_img);
|
|
lv_obj_align(btn_return_menu, LV_ALIGN_TOP_LEFT, 0, 0);
|
|
lv_obj_add_style(btn_return_menu, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return_menu, return_event_cb , LV_EVENT_CLICKED, NULL);
|
|
|
|
/*家 按键*/
|
|
btn_return_home = lv_imgbtn_create(scr_user);
|
|
lv_imgbtn_set_src(btn_return_home, LV_IMGBTN_STATE_RELEASED, home_img, home_img, home_img);
|
|
lv_obj_add_style(btn_return_home, &return_style, 0);
|
|
lv_obj_align_to(btn_return_home, btn_return_menu, LV_ALIGN_OUT_RIGHT_MID, 25, 0);
|
|
lv_obj_add_event_cb(btn_return_home, return_event_cb , LV_EVENT_CLICKED, NULL);
|
|
}
|
|
|
|
static void user_menu_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;
|
|
lv_obj_t *cb;
|
|
int32_t loop;
|
|
int32_t i;
|
|
|
|
if( target == btn_add)
|
|
{
|
|
user_mode_gui();
|
|
}
|
|
else if( target == btn_edit)
|
|
{
|
|
lv_obj_add_flag(btn_edit, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_add_flag(btn_add, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_clear_flag(btn_trash, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_clear_flag(checkbox_full, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_clear_flag(btn_finish, LV_OBJ_FLAG_HIDDEN);
|
|
|
|
loop = lv_obj_get_child_cnt(user_list);
|
|
for(i = 0; i < loop; i++)
|
|
{
|
|
child = lv_obj_get_child(user_list, i);
|
|
lv_obj_clear_flag(child, LV_OBJ_FLAG_CLICKABLE);
|
|
cb = lv_obj_get_child(child, -1); /* 获取复选框 */
|
|
lv_obj_clear_flag(cb, LV_OBJ_FLAG_HIDDEN);/*显现复选框*/
|
|
}
|
|
}
|
|
else if( target == btn_trash)
|
|
{
|
|
del_user_msg(DEL_USER);
|
|
}
|
|
else if( target == checkbox_full)
|
|
{
|
|
loop = lv_obj_get_child_cnt(user_list);
|
|
LV_LOG_USER("loop = %d", loop);
|
|
|
|
for(i = 0; i < loop; i++)
|
|
{
|
|
child = lv_obj_get_child(user_list, i);
|
|
cb = lv_obj_get_child(child, -1); /* 获取复选框 */
|
|
if(lv_obj_get_state(checkbox_full) & LV_STATE_CHECKED)
|
|
{
|
|
lv_obj_add_state(cb, LV_STATE_CHECKED);
|
|
}
|
|
else
|
|
{
|
|
lv_obj_clear_state(cb, LV_STATE_CHECKED);
|
|
}
|
|
}
|
|
}
|
|
else if( target == btn_finish)
|
|
{
|
|
lv_obj_add_flag(btn_trash, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_add_flag(checkbox_full, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_add_flag(btn_finish, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_clear_flag(btn_edit, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_clear_flag(btn_add, LV_OBJ_FLAG_HIDDEN);
|
|
|
|
lv_obj_clear_state(checkbox_full, LV_STATE_CHECKED);
|
|
|
|
loop = lv_obj_get_child_cnt(user_list);
|
|
for(i = 0; i < loop; i++)
|
|
{
|
|
child = lv_obj_get_child(user_list, i);
|
|
lv_obj_add_flag(child, LV_OBJ_FLAG_CLICKABLE);
|
|
cb = lv_obj_get_child(child, -1); /* 获取复选框 */
|
|
lv_obj_add_flag(cb, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_clear_state(cb, LV_STATE_CHECKED);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(code == LV_EVENT_CLICKED)
|
|
{
|
|
user_mode_gui();
|
|
}
|
|
else if(code == LV_EVENT_VALUE_CHANGED) /*子复选框来判断全选复选框的状态*/
|
|
{
|
|
loop = lv_obj_get_child_cnt(user_list);
|
|
LV_LOG_USER("loop = %d", loop);
|
|
|
|
for(i = 0; i < loop; i++)
|
|
{
|
|
child = lv_obj_get_child(user_list, i);
|
|
cb = lv_obj_get_child(child, -1); /* 获取复选框 */
|
|
if(lv_obj_get_state(cb) & LV_STATE_CHECKED)
|
|
{
|
|
lv_obj_add_state(checkbox_full, LV_STATE_CHECKED);
|
|
}
|
|
else
|
|
{
|
|
lv_obj_clear_state(checkbox_full, LV_STATE_CHECKED);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/*用户方式 界面*/
|
|
static void user_mode_gui()
|
|
{
|
|
lv_obj_clean(top());
|
|
lv_obj_t *scr_user_mode = lv_obj_create(NULL);
|
|
lv_obj_add_style(scr_user_mode, &scr_style, 0);
|
|
lv_scr_load(scr_user_mode);
|
|
|
|
lv_obj_t *label = lv_label_create(scr_user_mode);
|
|
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 15);
|
|
lv_label_set_text(label, "登记方式");
|
|
|
|
lv_obj_t *btn = lv_btn_create(scr_user_mode);
|
|
lv_obj_set_size(btn, 500, 200);
|
|
lv_obj_align(btn, LV_ALIGN_TOP_MID, 0, 100);
|
|
lv_obj_add_style(btn, &btn_style, 0);
|
|
lv_obj_add_event_cb(btn, user_mode_event_cb, LV_EVENT_LONG_PRESSED, NULL);
|
|
lv_obj_add_event_cb(btn, user_mode_event_cb, LV_EVENT_CLICKED, NULL);
|
|
lv_obj_t *btn_label = lv_label_create(btn);
|
|
lv_label_set_text(btn_label, "密码");
|
|
lv_obj_add_style(btn, &btn_text_style, 0);
|
|
lv_obj_t *label_pass = lv_label_create(btn);
|
|
lv_obj_center(label_pass);
|
|
lv_label_set_text_fmt(label_pass, "%s", "123456");
|
|
|
|
btn_add_pass = lv_btn_create(btn);
|
|
lv_obj_align(btn_add_pass, LV_ALIGN_LEFT_MID, 50, 0);
|
|
lv_obj_set_style_bg_img_src(btn_add_pass, LV_SYMBOL_EDIT, 0);
|
|
lv_obj_add_flag(btn_add_pass, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_add_style(btn_add_pass, &add_style, 0);
|
|
lv_obj_add_event_cb(btn_add_pass, user_mode_event_cb, LV_EVENT_CLICKED, NULL);
|
|
|
|
btn_del_pass = lv_btn_create(btn);
|
|
lv_obj_align(btn_del_pass, LV_ALIGN_RIGHT_MID, -50, 0);
|
|
lv_obj_set_style_bg_img_src(btn_del_pass, LV_SYMBOL_TRASH, 0);
|
|
lv_obj_add_style(btn_del_pass, &del_style, 0);
|
|
lv_obj_add_flag(btn_del_pass, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_add_event_cb(btn_del_pass, user_mode_event_cb, LV_EVENT_CLICKED, NULL);
|
|
|
|
btn = lv_btn_create(scr_user_mode);
|
|
lv_obj_set_size(btn, 500, 200);
|
|
lv_obj_align(btn, LV_ALIGN_TOP_MID, 0, 400);
|
|
lv_obj_add_style(btn, &btn_style, 0);
|
|
lv_obj_add_event_cb(btn, user_mode_event_cb, LV_EVENT_LONG_PRESSED, NULL);
|
|
btn_label = lv_label_create(btn);
|
|
lv_label_set_text(btn_label, "NFC卡");
|
|
lv_obj_add_style(btn, &btn_text_style, 0);
|
|
lv_obj_t *label_nfc = lv_label_create(btn);
|
|
lv_obj_center(label_nfc);
|
|
lv_label_set_text_fmt(label_nfc, "%s", "0x25fd7968");
|
|
|
|
btn_add_nfc = lv_btn_create(btn);
|
|
lv_obj_align(btn_add_nfc, LV_ALIGN_LEFT_MID, 50, 0);
|
|
lv_obj_set_style_bg_img_src(btn_add_nfc, LV_SYMBOL_EDIT, 0);
|
|
lv_obj_add_style(btn_add_nfc, &add_style, 0);
|
|
lv_obj_add_flag(btn_add_nfc, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_add_event_cb(btn_add_nfc, user_mode_event_cb, LV_EVENT_CLICKED, NULL);
|
|
|
|
btn_del_nfc = lv_btn_create(btn);
|
|
lv_obj_align(btn_del_nfc, LV_ALIGN_RIGHT_MID, -50, 0);
|
|
lv_obj_set_style_bg_img_src(btn_del_nfc, LV_SYMBOL_TRASH, 0);
|
|
lv_obj_add_style(btn_del_nfc, &del_style, 0);
|
|
lv_obj_add_flag(btn_del_nfc, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_add_event_cb(btn_del_nfc, user_mode_event_cb, LV_EVENT_CLICKED, NULL);
|
|
|
|
btn = lv_btn_create(scr_user_mode);
|
|
lv_obj_set_size(btn, 500, 200);
|
|
lv_obj_align(btn, LV_ALIGN_TOP_MID, 0, 700);
|
|
lv_obj_add_style(btn, &btn_style, 0);
|
|
lv_obj_add_event_cb(btn, user_mode_event_cb, LV_EVENT_LONG_PRESSED, NULL);
|
|
btn_label = lv_label_create(btn);
|
|
lv_label_set_text(btn_label, "掌静脉");
|
|
lv_obj_add_style(btn, &btn_text_style, 0);
|
|
|
|
btn_add_palm = lv_btn_create(btn);
|
|
lv_obj_align(btn_add_palm, LV_ALIGN_LEFT_MID, 50, 0);
|
|
lv_obj_set_style_bg_img_src(btn_add_palm, LV_SYMBOL_EDIT, 0);
|
|
lv_obj_add_style(btn_add_palm, &add_style, 0);
|
|
lv_obj_add_flag(btn_add_palm, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_add_event_cb(btn_add_palm, user_mode_event_cb, LV_EVENT_CLICKED, NULL);
|
|
|
|
btn_del_palm = lv_btn_create(btn);
|
|
lv_obj_align(btn_del_palm, LV_ALIGN_RIGHT_MID, -50, 0);
|
|
lv_obj_set_style_bg_img_src(btn_del_palm, LV_SYMBOL_TRASH, 0);
|
|
lv_obj_add_style(btn_del_palm, &del_style, 0);
|
|
lv_obj_add_flag(btn_del_palm, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_add_event_cb(btn_del_palm, user_mode_event_cb, LV_EVENT_CLICKED, NULL);
|
|
|
|
btn = lv_btn_create(scr_user_mode);
|
|
lv_obj_set_size(btn, 500, 200);
|
|
lv_obj_align(btn, LV_ALIGN_TOP_MID, 0, 1000);
|
|
lv_obj_add_style(btn, &btn_style, 0);
|
|
lv_obj_add_event_cb(btn, user_mode_event_cb, LV_EVENT_LONG_PRESSED, NULL);
|
|
btn_label = lv_label_create(btn);
|
|
lv_label_set_text(btn_label, "人脸");
|
|
lv_obj_add_style(btn, &btn_text_style, 0);
|
|
|
|
btn_add_face = lv_btn_create(btn);
|
|
lv_obj_align(btn_add_face, LV_ALIGN_LEFT_MID, 50, 0);
|
|
lv_obj_set_style_bg_img_src(btn_add_face, LV_SYMBOL_EDIT, 0);
|
|
lv_obj_add_style(btn_add_face, &add_style, 0);
|
|
lv_obj_add_flag(btn_add_face, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_add_event_cb(btn_add_face, user_mode_event_cb, LV_EVENT_CLICKED, NULL);
|
|
|
|
btn_del_face = lv_btn_create(btn);
|
|
lv_obj_align(btn_del_face, LV_ALIGN_RIGHT_MID, -50, 0);
|
|
lv_obj_set_style_bg_img_src(btn_del_face, LV_SYMBOL_TRASH, 0);
|
|
lv_obj_add_style(btn_del_face, &del_style, 0);
|
|
lv_obj_add_flag(btn_del_face, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_add_event_cb(btn_del_face, user_mode_event_cb, LV_EVENT_CLICKED, NULL);
|
|
|
|
btn_return_add_menu = lv_imgbtn_create(scr_user_mode);
|
|
lv_imgbtn_set_src(btn_return_add_menu, LV_IMGBTN_STATE_RELEASED, return_img, return_img, return_img);
|
|
lv_obj_align(btn_return_add_menu, LV_ALIGN_TOP_LEFT, 0, 0);
|
|
lv_obj_add_style(btn_return_add_menu, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return_add_menu, return_event_cb , LV_EVENT_CLICKED, NULL);
|
|
|
|
btn_return_home = lv_imgbtn_create(scr_user_mode);
|
|
lv_imgbtn_set_src(btn_return_home, LV_IMGBTN_STATE_RELEASED, home_img, home_img, home_img);
|
|
lv_obj_align_to(btn_return_home, btn_return_add_menu, LV_ALIGN_OUT_RIGHT_MID, 25, 0);
|
|
lv_obj_add_style(btn_return_home, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return_home, return_event_cb , LV_EVENT_CLICKED, NULL);
|
|
}
|
|
|
|
static void user_mode_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_add = NULL;
|
|
lv_obj_t *child_del = NULL;
|
|
|
|
if(code == LV_EVENT_LONG_PRESSED)
|
|
{
|
|
LV_LOG_USER("show");
|
|
child_add = lv_obj_get_child(target, -2);
|
|
child_del = lv_obj_get_child(target, -1);
|
|
|
|
if(child_add->flags & LV_OBJ_FLAG_HIDDEN)
|
|
{
|
|
lv_obj_clear_flag(child_add, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_clear_flag(child_del, LV_OBJ_FLAG_HIDDEN);
|
|
}
|
|
else
|
|
{
|
|
lv_obj_add_flag(child_add, LV_OBJ_FLAG_HIDDEN);
|
|
lv_obj_add_flag(child_del, LV_OBJ_FLAG_HIDDEN);
|
|
}
|
|
}
|
|
|
|
if(target == btn_add_pass)
|
|
{
|
|
add_pass_gui();
|
|
}
|
|
else if(target == btn_del_pass)
|
|
{
|
|
del_user_msg(DEL_PASS);
|
|
}
|
|
else if(target == btn_add_nfc)
|
|
{
|
|
add_nfc_gui();
|
|
}
|
|
else if(target == btn_del_nfc)
|
|
{
|
|
del_user_msg(DEL_NFC);
|
|
|
|
}
|
|
else if(target == btn_add_palm)
|
|
{
|
|
add_palm_gui();
|
|
}
|
|
else if(target == btn_del_palm)
|
|
{
|
|
del_user_msg(DEL_PALM);
|
|
|
|
}
|
|
else if(target == btn_add_face)
|
|
{
|
|
add_face_gui();
|
|
}
|
|
else if(target == btn_del_face)
|
|
{
|
|
del_user_msg(DEL_FACE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/*添加密码 界面*/
|
|
static void add_pass_gui(void)
|
|
{
|
|
lv_obj_clean(top());
|
|
lv_obj_t *scr_add_pass = lv_obj_create(NULL);
|
|
lv_obj_add_style(scr_add_pass, &scr_style, 0);
|
|
lv_scr_load(scr_add_pass);
|
|
|
|
input_pass_where = 0;
|
|
|
|
lv_obj_t *label = lv_label_create(scr_add_pass);
|
|
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 15);
|
|
lv_label_set_text(label, "添加密码");
|
|
|
|
/*matrix 矩阵键盘*/
|
|
add_btnmatrix = lv_btnmatrix_create(scr_add_pass);
|
|
lv_obj_set_size(add_btnmatrix, scr_act_width(), 600);
|
|
lv_obj_align(add_btnmatrix, LV_ALIGN_CENTER, 0, 200);
|
|
static const char *matrixmap[] = {"1","2","3","\n","4","5","6","\n","7","8","9","\n",LV_SYMBOL_BACKSPACE,"0",LV_SYMBOL_NEW_LINE,""};
|
|
lv_btnmatrix_set_map(add_btnmatrix, matrixmap);
|
|
lv_obj_set_style_text_font(add_btnmatrix, &lv_font_montserrat_34, 0);
|
|
lv_obj_set_style_bg_opa(add_btnmatrix, LV_OPA_TRANSP, 0);
|
|
lv_obj_set_style_border_width(add_btnmatrix, 0, 0); /*消除边框*/
|
|
lv_obj_add_event_cb(add_btnmatrix, add_pass_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
|
|
|
|
/*textarea 文本区域,首先焦点放在这*/
|
|
add_text_keyboard = lv_textarea_create(scr_add_pass);
|
|
lv_obj_set_size(add_text_keyboard, scr_act_width() / 2, 200);
|
|
lv_obj_align_to(add_text_keyboard, add_btnmatrix, LV_ALIGN_TOP_MID, 0, -400);
|
|
lv_obj_set_style_bg_opa(add_text_keyboard, LV_OPA_50, 0);
|
|
lv_textarea_set_max_length(add_text_keyboard, 32);
|
|
lv_textarea_set_one_line(add_text_keyboard, true);
|
|
lv_textarea_set_password_mode(add_text_keyboard, true);
|
|
lv_textarea_set_placeholder_text(add_text_keyboard, "请输入密码");
|
|
lv_obj_add_event_cb(add_text_keyboard, add_pass_event_cb, LV_EVENT_FOCUSED, NULL);
|
|
lv_obj_add_state(add_text_keyboard, LV_STATE_FOCUSED);
|
|
|
|
add_text_keyboard2 = lv_textarea_create(scr_add_pass);
|
|
lv_obj_set_size(add_text_keyboard2, scr_act_width() / 2, 200);
|
|
lv_obj_align_to(add_text_keyboard2, add_btnmatrix, LV_ALIGN_TOP_MID, 0, -200);
|
|
lv_obj_set_style_bg_opa(add_text_keyboard2, LV_OPA_50, 0);
|
|
lv_textarea_set_max_length(add_text_keyboard2, 32);
|
|
lv_textarea_set_one_line(add_text_keyboard2, true);
|
|
lv_textarea_set_password_mode(add_text_keyboard2, true);
|
|
lv_textarea_set_placeholder_text(add_text_keyboard2, "再次确认密码");
|
|
lv_obj_add_event_cb(add_text_keyboard2, add_pass_event_cb, LV_EVENT_FOCUSED, NULL);
|
|
|
|
btn_return_add_mode = lv_imgbtn_create(scr_add_pass);
|
|
lv_imgbtn_set_src(btn_return_add_mode, LV_IMGBTN_STATE_RELEASED, return_img, return_img, return_img);
|
|
lv_obj_align(btn_return_add_mode, LV_ALIGN_TOP_LEFT, 0, 0);
|
|
lv_obj_add_style(btn_return_add_mode, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return_add_mode, return_event_cb , LV_EVENT_CLICKED, NULL);
|
|
|
|
btn_return_home = lv_imgbtn_create(scr_add_pass);
|
|
lv_imgbtn_set_src(btn_return_home, LV_IMGBTN_STATE_RELEASED, home_img, home_img, home_img);
|
|
lv_obj_align_to(btn_return_home, btn_return_add_mode, LV_ALIGN_OUT_RIGHT_MID, 25, 0);
|
|
lv_obj_add_style(btn_return_home, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return_home, return_event_cb , LV_EVENT_CLICKED, NULL);
|
|
}
|
|
|
|
/*密码键盘输入回调函数*/
|
|
static void add_pass_event_cb(lv_event_cb_t * e)
|
|
{
|
|
lv_obj_t * target = lv_event_get_target(e);
|
|
|
|
if(target == add_btnmatrix)
|
|
{
|
|
const char *txt = lv_btnmatrix_get_btn_text(add_btnmatrix, lv_btnmatrix_get_selected_btn(add_btnmatrix));
|
|
if(strcmp(txt, LV_SYMBOL_BACKSPACE) == 0)
|
|
{
|
|
if(input_pass_where == 0)
|
|
{
|
|
lv_textarea_del_char(add_text_keyboard);
|
|
}
|
|
else
|
|
{
|
|
lv_textarea_del_char(add_text_keyboard2);
|
|
}
|
|
}
|
|
else if(strcmp(txt, LV_SYMBOL_NEW_LINE) == 0)
|
|
{
|
|
input_pass_where ++;
|
|
lv_obj_add_state(add_text_keyboard2, LV_STATE_FOCUSED);
|
|
lv_obj_clear_state(add_text_keyboard, LV_STATE_FOCUSED);
|
|
if(input_pass_where == 2)
|
|
{
|
|
input_pass_where = 0;
|
|
if(strcmp(lv_textarea_get_text(add_text_keyboard), lv_textarea_get_text(add_text_keyboard2)) == 0)
|
|
{
|
|
add_user_anim(true);
|
|
}
|
|
else
|
|
{
|
|
add_user_anim(false);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(input_pass_where == 0)
|
|
{
|
|
lv_textarea_add_text(add_text_keyboard, txt);
|
|
lv_obj_add_state(add_text_keyboard, LV_STATE_FOCUSED);
|
|
}
|
|
else
|
|
{
|
|
lv_textarea_add_text(add_text_keyboard2, txt);
|
|
lv_obj_add_state(add_text_keyboard2, LV_STATE_FOCUSED); /*附属光标*/
|
|
}
|
|
}
|
|
}
|
|
else if(target == add_text_keyboard)
|
|
{
|
|
LV_LOG_USER("1111");
|
|
input_pass_where = 0;
|
|
lv_obj_clear_state(add_text_keyboard2, LV_STATE_FOCUSED);
|
|
|
|
}
|
|
else if(target == add_text_keyboard2)
|
|
{
|
|
LV_LOG_USER("2222");
|
|
input_pass_where = 1;
|
|
lv_obj_clear_state(add_text_keyboard, LV_STATE_FOCUSED);
|
|
|
|
}
|
|
}
|
|
|
|
/*添加NFC 界面*/
|
|
static void add_nfc_gui(void)
|
|
{
|
|
lv_obj_clean(top());
|
|
lv_obj_t *scr_add_nfc = lv_obj_create(NULL);
|
|
lv_obj_add_style(scr_add_nfc, &scr_style, 0);
|
|
lv_scr_load(scr_add_nfc);
|
|
|
|
lv_obj_t *label = lv_label_create(scr_add_nfc);
|
|
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 15);
|
|
lv_label_set_text(label, "添加NFC卡");
|
|
|
|
label = lv_label_create(scr_add_nfc);
|
|
lv_label_set_text(label, "请将NFC卡放到标识区域内");
|
|
lv_obj_align(label, LV_ALIGN_BOTTOM_MID, 0, -300);
|
|
|
|
btn_return_add_mode = lv_imgbtn_create(scr_add_nfc);
|
|
lv_imgbtn_set_src(btn_return_add_mode, LV_IMGBTN_STATE_RELEASED, return_img, return_img, return_img);
|
|
lv_obj_align(btn_return_add_mode, LV_ALIGN_TOP_LEFT, 0, 0);
|
|
lv_obj_add_style(btn_return_add_mode, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return_add_mode, return_event_cb , LV_EVENT_CLICKED, NULL);
|
|
|
|
btn_return_home = lv_imgbtn_create(scr_add_nfc);
|
|
lv_imgbtn_set_src(btn_return_home, LV_IMGBTN_STATE_RELEASED, home_img, home_img, home_img);
|
|
lv_obj_align_to(btn_return_home, btn_return_add_mode, LV_ALIGN_OUT_RIGHT_MID, 25, 0);
|
|
lv_obj_add_style(btn_return_home, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return_home, return_event_cb , LV_EVENT_CLICKED, NULL);
|
|
}
|
|
|
|
/*添加掌静脉 界面*/
|
|
static void add_palm_gui(void)
|
|
{
|
|
lv_obj_clean(top());
|
|
lv_obj_t *scr_add_palm = lv_obj_create(NULL);
|
|
lv_obj_add_style(scr_add_palm, &scr_style, 0);
|
|
lv_scr_load(scr_add_palm);
|
|
|
|
lv_obj_t *label = lv_label_create(scr_add_palm);
|
|
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 15);
|
|
lv_label_set_text(label, "添加掌静脉");
|
|
|
|
btn_return_add_mode = lv_imgbtn_create(scr_add_palm);
|
|
lv_imgbtn_set_src(btn_return_add_mode, LV_IMGBTN_STATE_RELEASED, return_img, return_img, return_img);
|
|
lv_obj_align(btn_return_add_mode, LV_ALIGN_TOP_LEFT, 0, 0);
|
|
lv_obj_add_style(btn_return_add_mode, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return_add_mode, return_event_cb , LV_EVENT_CLICKED, NULL);
|
|
|
|
btn_return_home = lv_imgbtn_create(scr_add_palm);
|
|
lv_imgbtn_set_src(btn_return_home, LV_IMGBTN_STATE_RELEASED, home_img, home_img, home_img);
|
|
lv_obj_align_to(btn_return_home, btn_return_add_mode, LV_ALIGN_OUT_RIGHT_MID, 25, 0);
|
|
lv_obj_add_style(btn_return_home, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return_home, return_event_cb , LV_EVENT_CLICKED, NULL);
|
|
}
|
|
|
|
/*添加人脸 界面*/
|
|
static void add_face_gui(void)
|
|
{
|
|
lv_obj_clean(top());
|
|
lv_obj_t *scr_add_face = lv_obj_create(NULL);
|
|
lv_obj_add_style(scr_add_face, &scr_style, 0);
|
|
lv_scr_load(scr_add_face);
|
|
|
|
lv_obj_t *label = lv_label_create(scr_add_face);
|
|
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 15);
|
|
lv_label_set_text(label, "添加人脸");
|
|
|
|
btn_return_add_mode = lv_imgbtn_create(scr_add_face);
|
|
lv_imgbtn_set_src(btn_return_add_mode, LV_IMGBTN_STATE_RELEASED, return_img, return_img, return_img);
|
|
lv_obj_align(btn_return_add_mode, LV_ALIGN_TOP_LEFT, 0, 0);
|
|
lv_obj_add_style(btn_return_add_mode, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return_add_mode, return_event_cb , LV_EVENT_CLICKED, NULL);
|
|
|
|
btn_return_home = lv_imgbtn_create(scr_add_face);
|
|
lv_imgbtn_set_src(btn_return_home, LV_IMGBTN_STATE_RELEASED, home_img, home_img, home_img);
|
|
lv_obj_align_to(btn_return_home, btn_return_add_mode, LV_ALIGN_OUT_RIGHT_MID, 25, 0);
|
|
lv_obj_add_style(btn_return_home, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return_home, return_event_cb , LV_EVENT_CLICKED, NULL);
|
|
}
|
|
|
|
|
|
static void add_user_succ_anim_event_cb(lv_anim_t *anim)
|
|
{
|
|
lv_obj_clean(top());
|
|
lv_obj_t *scr_add_user = lv_obj_create(NULL);
|
|
lv_obj_add_style(scr_add_user, &scr_style, 0);
|
|
lv_scr_load(scr_add_user);
|
|
|
|
lv_obj_t *img = lv_img_create(scr_add_user);
|
|
lv_img_set_src(img, success_img);
|
|
lv_obj_center(img);
|
|
|
|
lv_obj_t *label = lv_label_create(scr_add_user);
|
|
lv_obj_align_to(label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
|
|
lv_obj_set_size(label, 200, 250);
|
|
lv_label_set_text(label, "添加成功 ");
|
|
lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL_CIRCULAR);
|
|
|
|
btn_return_add_mode = lv_imgbtn_create(scr_add_user);
|
|
lv_imgbtn_set_src(btn_return_add_mode, LV_IMGBTN_STATE_RELEASED, return_img, return_img, return_img);
|
|
lv_obj_align(btn_return_add_mode, LV_ALIGN_TOP_LEFT, 0, 0);
|
|
lv_obj_add_style(btn_return_add_mode, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return_add_mode, return_event_cb , LV_EVENT_CLICKED, NULL);
|
|
}
|
|
|
|
static void add_user_fail_anim_event_cb(lv_anim_t *anim)
|
|
{
|
|
lv_obj_clean(top());
|
|
lv_obj_t *scr_add_user = lv_obj_create(NULL);
|
|
lv_obj_add_style(scr_add_user, &scr_style, 0);
|
|
lv_scr_load(scr_add_user);
|
|
|
|
lv_obj_t *img = lv_img_create(scr_add_user);
|
|
lv_img_set_src(img, fail_img);
|
|
lv_obj_center(img);
|
|
|
|
lv_obj_t *label = lv_label_create(scr_add_user);
|
|
lv_obj_align_to(label, img, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 20);
|
|
lv_obj_set_size(label, 200, 250);
|
|
lv_label_set_text(label, "xx添加失败 ");
|
|
lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL_CIRCULAR);
|
|
|
|
btn_return_add_mode = lv_imgbtn_create(scr_add_user);
|
|
lv_imgbtn_set_src(btn_return_add_mode, LV_IMGBTN_STATE_RELEASED, return_img, return_img, return_img);
|
|
lv_obj_align(btn_return_add_mode, LV_ALIGN_TOP_LEFT, 0, 0);
|
|
lv_obj_add_style(btn_return_add_mode, &return_style, 0);
|
|
lv_obj_add_event_cb(btn_return_add_mode, return_event_cb , LV_EVENT_CLICKED, NULL);
|
|
}
|
|
|
|
/*添加用户成功 界面*/
|
|
static void add_user_anim(bool result)
|
|
{
|
|
lv_obj_t *img = lv_img_create(top());
|
|
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, 500);
|
|
lv_anim_set_values(&anim, 0, 500);
|
|
if(result)
|
|
{
|
|
lv_anim_set_ready_cb(&anim, add_user_succ_anim_event_cb);
|
|
}
|
|
else
|
|
{
|
|
lv_anim_set_ready_cb(&anim, add_user_fail_anim_event_cb);
|
|
}
|
|
lv_anim_start(&anim);
|
|
}
|
|
|
|
/*删除用户弹窗 界面*/
|
|
static void del_user_msg(delete_type type)
|
|
{
|
|
lv_obj_display_top_layer();
|
|
const char *del_array[] = {"所选用户", "密码", "NFC卡", "掌静脉", "人脸"};
|
|
lv_obj_t *btn_msg = lv_btn_create(lv_layer_top());
|
|
lv_obj_set_size(btn_msg, 500, 200);
|
|
lv_obj_set_style_bg_color(btn_msg, lv_palette_main(LV_PALETTE_BLUE_GREY), 0);
|
|
lv_obj_t *label = lv_label_create(btn_msg);
|
|
lv_label_set_text_fmt(label, "确定要删除 %s ?", del_array[type]);
|
|
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 50);
|
|
|
|
btn_no = lv_btn_create(btn_msg);
|
|
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, -50, 50);
|
|
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_yes = lv_btn_create(btn_msg);
|
|
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, 50, 50);
|
|
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);
|
|
|
|
if(type)
|
|
{
|
|
lv_obj_align(btn_msg, LV_ALIGN_TOP_MID, 0, 100 + (type - 1) * 300);
|
|
lv_obj_add_event_cb(btn_no, del_usermode_msg_event_cb, LV_EVENT_CLICKED, 0);
|
|
lv_obj_add_event_cb(btn_yes, del_usermode_msg_event_cb, LV_EVENT_CLICKED, 0);
|
|
}
|
|
else
|
|
{
|
|
lv_obj_center(btn_msg);
|
|
lv_obj_add_event_cb(btn_no, del_user_msg_event_cb, LV_EVENT_CLICKED, 0);
|
|
lv_obj_add_event_cb(btn_yes, del_user_msg_event_cb, LV_EVENT_CLICKED, 0);
|
|
}
|
|
}
|
|
|
|
static void del_user_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);
|
|
uint32_t loop = 0;
|
|
lv_obj_t *child;
|
|
lv_obj_t *cb;
|
|
|
|
if(target == btn_yes)
|
|
{
|
|
loop = lv_obj_get_child_cnt(user_list);
|
|
LV_LOG_USER("user_list loop = %d", loop);
|
|
|
|
for(uint32_t i = 0; i < loop; i++)
|
|
{
|
|
child = lv_obj_get_child(user_list, i);
|
|
cb = lv_obj_get_child(child, -1); /* 获取复选框 */
|
|
if(lv_obj_get_state(cb) & LV_STATE_CHECKED) /* 检查复选框是否被选中 */
|
|
{
|
|
LV_LOG_USER("delete %s", lv_list_get_btn_text(user_list,child));
|
|
lv_obj_del_delayed(child, 100); /*加延时才能删除掉*/
|
|
lv_obj_update_layout(user_list); /*更新列表部件显示*/
|
|
}
|
|
}
|
|
|
|
lv_obj_disappear_top_layer();
|
|
}
|
|
else if(target == btn_no)
|
|
{
|
|
lv_obj_disappear_top_layer();
|
|
}
|
|
|
|
}
|
|
|
|
static void del_succ_anim_event_cb(lv_anim_t *anim)
|
|
{
|
|
lv_obj_disappear_top_layer();
|
|
user_mode_gui();
|
|
}
|
|
|
|
static void del_usermode_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 *parent = NULL;
|
|
|
|
if(code == LV_EVENT_CLICKED)
|
|
{
|
|
parent = lv_obj_get_parent(target); /*获取弹窗*/
|
|
if(target == lv_obj_get_child(parent, -1)) /*消息弹窗中最年轻的创建部件:确认*/
|
|
{
|
|
LV_LOG_USER("YES,I WANT TO DELETE");
|
|
lv_obj_clean(parent);
|
|
lv_obj_set_style_bg_img_src(parent, greentick_img, 0);
|
|
lv_obj_t *label = lv_label_create(parent);
|
|
lv_label_set_text(label, "删除成功");
|
|
lv_obj_align(label, LV_ALIGN_CENTER, 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, 100, 100);
|
|
lv_anim_set_ready_cb(&anim, del_succ_anim_event_cb);
|
|
lv_anim_start(&anim);
|
|
}
|
|
else if(target == lv_obj_get_child(parent, -2)) /*取消,删除弹窗*/
|
|
{
|
|
lv_obj_del(parent);
|
|
lv_obj_disappear_top_layer();
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
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();
|
|
lowpower_gui();
|
|
//lv_demo_widgets();
|
|
|
|
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 random_map_convert(char **string_map, char **matrix_map)
|
|
{
|
|
srand((unsigned)time(NULL));
|
|
|
|
for (int i = 9; i > 0; i--)
|
|
{
|
|
int j = rand() % (i + 1);
|
|
char *temp = *(string_map + i);
|
|
*(string_map + i) = *(string_map + j);
|
|
*(string_map + j) = temp;
|
|
}
|
|
|
|
*(matrix_map +0) = *(string_map +0);
|
|
*(matrix_map +1) = *(string_map +1);
|
|
*(matrix_map +2) = *(string_map +2);
|
|
*(matrix_map +3) = "\n";
|
|
*(matrix_map +4) = *(string_map +3);
|
|
*(matrix_map +5) = *(string_map +4);
|
|
*(matrix_map +6) = *(string_map +5);
|
|
*(matrix_map +7) = "\n";
|
|
*(matrix_map +8) = *(string_map +6);
|
|
*(matrix_map +9) = *(string_map +7);
|
|
*(matrix_map +10) = *(string_map +8);
|
|
*(matrix_map +11) = "\n";
|
|
*(matrix_map +12) = LV_SYMBOL_BACKSPACE;
|
|
*(matrix_map +13) = *(string_map +9);
|
|
*(matrix_map +14) = LV_SYMBOL_NEW_LINE;
|
|
*(matrix_map +15) = "\n";
|
|
*(matrix_map +16) = "";
|
|
}
|
|
|
|
static void lv_obj_blink(lv_obj_t *obj, int32_t Value)
|
|
{
|
|
if(Value == 0)
|
|
{
|
|
lv_obj_add_flag(obj, LV_OBJ_FLAG_HIDDEN);
|
|
}
|
|
else if(Value == 100)
|
|
{
|
|
lv_obj_clear_flag(obj, LV_OBJ_FLAG_HIDDEN);
|
|
}
|
|
}
|
|
|
|
static void lv_obj_display_top_layer(void)
|
|
{
|
|
lv_obj_clean(lv_layer_top());
|
|
lv_obj_set_style_text_font(lv_layer_top(), &lv_font_heiti24, 0);
|
|
lv_obj_add_flag(lv_layer_top(), LV_OBJ_FLAG_CLICKABLE);
|
|
}
|
|
|
|
static void lv_obj_disappear_top_layer(void)
|
|
{
|
|
lv_obj_clean(lv_layer_top());
|
|
lv_obj_clear_flag(lv_layer_top(), LV_OBJ_FLAG_CLICKABLE);
|
|
}
|