simulator/lvgl_v8_front/main.c

1537 lines
56 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 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())
static const char password[] = {"1"};
static const char *string_map[] = {"0","1","2","3","4","5","6","7","8","9"};
/********主界面需要静态的部件******/
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 *scr_set;
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 btn_style;
static lv_style_t btn_text_style;
static lv_style_t return_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 *msgbox_fail;
static lv_obj_t *img;
/********门铃呼叫需要静态的部件******/
/*******管理员登录 界面需要静态的部件******/
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_chk_pass;
static lv_obj_t *btn_add_pass;
static lv_obj_t *btn_del_pass;
static lv_obj_t *btn_chk_nfc;
static lv_obj_t *btn_add_nfc;
static lv_obj_t *btn_del_nfc;
static lv_obj_t *btn_chk_palm;
static lv_obj_t *btn_add_palm;
static lv_obj_t *btn_del_palm;
static lv_obj_t *btn_chk_face;
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_cnt = 0;
static void lv_obj_style_init(void);
static void opendoor_gui(lv_anim_t * anim);
static void main_gui(void);
static void lowpower_gui(void);
static void ring_gui(void);
static void ring_call_gui(lv_anim_t * anim);
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 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_succ_gui(void);
static void add_user_fail_gui(void);
static void key_event_cb(lv_event_cb_t * e);
static void msg_event_cb(lv_event_cb_t * e);
static void login_event_cb(lv_event_cb_t * e);
/*功能函数*/
static void random_map_convert(char **string_map, char **matrix_map);
static void show_battery(int batterylevel, lv_obj_t *parent);
static void show_wifi(int connect_state, 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_width(&btn_style, 500);
lv_style_set_height(&btn_style, 200);
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*/
/*创建return_style, 返回键、home键*/
lv_style_init(&return_style);
lv_style_set_width(&return_style, 48);
lv_style_set_height(&return_style, 48);
}
/*主界面部件回调函数(包含返回键)*/
static void 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)
{
if(lv_slider_is_dragged(vol_slider))
{
}
else
{
LV_LOG_USER("vol_slider %d",lv_slider_get_value(vol_slider));
}
}
else if(target == light_slider)
{
if(lv_slider_is_dragged(light_slider))
{
}
else
{
LV_LOG_USER("light_slider %d",lv_slider_get_value(light_slider));
}
}
else if(target == btn_return)
{
main_gui();
}
}
/*主界面框架*/
static void main_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr = lv_obj_create(NULL);
lv_obj_set_size(scr, scr_act_width(), scr_act_height());
lv_obj_set_style_text_font(scr, &lv_font_siyuan, 0);
lv_scr_load(scr);
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);
scr_set = lv_tileview_add_tile(tileview, 1, 0, LV_DIR_BOTTOM);
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_imgbtn_create(scr_main);
lv_imgbtn_set_src(btn_ring_main, LV_IMGBTN_STATE_RELEASED, NULL, bell_img, NULL);
lv_obj_set_size(btn_ring_main, 128, 128);
lv_obj_align(btn_ring_main, LV_ALIGN_BOTTOM_MID, 0, -100);
lv_obj_set_style_opa(btn_ring_main, LV_OPA_50, 0);
lv_obj_add_event_cb(btn_ring_main, event_cb, LV_EVENT_CLICKED, NULL);
/*创建键盘屏幕*/
lv_obj_set_size(scr_keyboard, scr_act_width(), scr_act_height());
lv_obj_t *scr_keyboard_label = lv_label_create(scr_keyboard);
lv_obj_align(scr_keyboard_label, LV_ALIGN_TOP_MID, 0 , 15);
lv_label_set_text(scr_keyboard_label, "输入密码");
/*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_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);
/*msgbox 消息弹窗*/
static const char *msgbox_btns[] = {"取消","确认",""};
msgbox_fail = lv_msgbox_create(scr_keyboard, LV_SYMBOL_CLOSE, "密码错误,请重新输入\n", msgbox_btns, false);
lv_obj_set_size(msgbox_fail, 400, 200);
lv_obj_set_align(msgbox_fail, LV_ALIGN_CENTER);
lv_obj_set_style_text_align(msgbox_fail, LV_TEXT_ALIGN_CENTER, 0);
lv_obj_set_style_pad_hor(msgbox_fail, 0, 0);
lv_obj_add_flag(msgbox_fail, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_event_cb(msgbox_fail, msg_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
/*获取msgbox的按键部件,设置宽度*/
lv_obj_t *msg_btn = lv_msgbox_get_btns(msgbox_fail);
lv_obj_set_size(msg_btn, 400, 50);
/*获取msgbox的title部件,单独设置*/
lv_obj_t *title = lv_msgbox_get_title(msgbox_fail);
lv_obj_set_style_text_font(title, &lv_font_montserrat_34, 0);
lv_obj_set_style_text_color(title, lv_palette_main(LV_PALETTE_RED), 0);
/*动画图片 创建*/
img = lv_img_create(scr_keyboard);
lv_img_set_src(img, wait_img);
lv_obj_center(img);
lv_obj_add_flag(img, LV_OBJ_FLAG_HIDDEN);
/*创建 登录屏幕*/
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_align(btn_pass_login, LV_ALIGN_TOP_MID, 0, 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_align(btn_nfc_login, LV_ALIGN_TOP_MID, 0, 400);
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_align(btn_palm_login, LV_ALIGN_TOP_MID, 0, 700);
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_align(btn_face_login, LV_ALIGN_TOP_MID, 0, 1000);
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);
/*创建 设置屏幕*/
lv_obj_set_size(scr_set, scr_act_width(), scr_act_height());
vol_slider = lv_slider_create(scr_set);
lv_slider_set_range(vol_slider, 0, 100);
lv_obj_set_size(vol_slider, scr_act_width() - 100, 100);
lv_obj_align(vol_slider, LV_ALIGN_TOP_MID, 0, 200);
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, event_cb, LV_EVENT_RELEASED, NULL);
lv_obj_t *img_vol = lv_img_create(vol_slider);
lv_img_set_src(img_vol, vol_img);
lv_obj_align_to(img_vol, vol_slider, LV_ALIGN_LEFT_MID, 50, 0);
lv_obj_move_foreground(img_vol);
light_slider = lv_slider_create(scr_set);
lv_slider_set_range(light_slider, 0, 100);
lv_obj_set_size(light_slider, scr_act_width() - 100, 100);
lv_obj_align(light_slider, LV_ALIGN_TOP_MID, 0, 600);
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, event_cb, LV_EVENT_RELEASED, NULL);
lv_obj_t *img_light = lv_img_create(light_slider);
lv_img_set_src(img_light, light_img);
lv_obj_align_to(img_light, light_slider, LV_ALIGN_LEFT_MID, 50, 0);
lv_obj_move_foreground(img_light);
}
/*显示电池电压 分五档*/
static void 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_set_align(battery, LV_ALIGN_TOP_RIGHT);
lv_obj_set_style_text_font(battery,&lv_font_montserrat_24, LV_STATE_DEFAULT);
}
static void 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);
}
lv_obj_align(wifi, LV_ALIGN_TOP_RIGHT, -50, 0);
lv_obj_set_style_text_font(wifi,&lv_font_montserrat_24, LV_STATE_DEFAULT);
}
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 stop_anim_cb(lv_anim_t * animation)
{
lv_obj_clean(top());
show_battery(3, lv_layer_top());
show_wifi(true, lv_layer_top());
main_gui();
}
/*低电量预警 界面*/
static void lowpower_gui(void)
{
lv_obj_t *img = lv_img_create(top());
lv_img_set_src(img, lowpower_img);
lv_obj_center(img);
lv_obj_t *label = lv_label_create(top());
lv_obj_align_to(label, img, LV_ALIGN_OUT_BOTTOM_MID, -150, 50);
lv_label_set_text(label, "电池电量过低,请及时充电");
lv_obj_set_style_text_font(label, &lv_font_siyuan, 0);
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 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);
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)
{
/*缓冲动画结束后,回调到 开锁界面*/
lv_obj_clear_flag(img, LV_OBJ_FLAG_HIDDEN);
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);
lv_anim_set_ready_cb(&anim, opendoor_gui);
lv_anim_start(&anim);
}
else
{
lv_obj_clear_flag(msgbox_fail, LV_OBJ_FLAG_HIDDEN);
lv_obj_clear_flag(btnmatrix, LV_OBJ_FLAG_CLICKABLE);
}
}
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 msg_event_cb(lv_event_cb_t * e)
{
lv_obj_t *target = lv_event_get_current_target(e);
lv_obj_add_flag(msgbox_fail, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(btnmatrix, LV_OBJ_FLAG_CLICKABLE);
if(lv_msgbox_get_active_btn(target) == 1)
{
lv_textarea_set_text(text_keyboard, "");
}
else
{
lv_textarea_set_text(text_keyboard, "");
lv_obj_set_tile(tileview, scr_main, LV_ANIM_ON);
}
}
/*随机矩阵键盘地图生成*/
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 opendoor_event_cb(lv_event_cb_t * e)
{
lv_event_code_t code = lv_event_get_code(e);
if(code == LV_EVENT_CLICKED)
{
LV_LOG_USER("ys");
main_gui();
}
}
/*开锁成功 界面*/
static void opendoor_gui(lv_anim_t * anim)
{
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, "请开门,点击屏幕返回主界面");
lv_obj_add_flag(scr_open, LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_event_cb(scr_open, opendoor_event_cb, LV_EVENT_CLICKED, 0);
}
/*门铃呼叫界面*/
static void ring_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr_ring = lv_obj_create(top());
lv_obj_set_size(scr_ring, scr_act_width(), scr_act_height());
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, 3);
lv_anim_set_playback_delay(&anim, 50);
lv_anim_set_playback_time(&anim, 1000);
lv_anim_set_ready_cb(&anim, ring_call_gui);
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, 20);
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, event_cb, LV_EVENT_CLICKED, NULL);
}
/*门铃接听界面*/
static void ring_call_gui(lv_anim_t * anim)
{
lv_obj_clean(top());
lv_obj_t *scr_ring = lv_obj_create(top());
lv_obj_set_size(scr_ring, scr_act_width(), scr_act_height());
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, 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();
}
else if(target == btn_return_login)
{
main_gui();
lv_obj_set_tile(tileview, scr_login, LV_ANIM_OFF);
}
}
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)
{
menu_gui();
}
else
{
lv_obj_clear_flag(msgbox_fail, LV_OBJ_FLAG_HIDDEN);
lv_obj_clear_flag(btnmatrix, LV_OBJ_FLAG_CLICKABLE);
}
}
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 pass_login_msg_event_cb(lv_event_cb_t * e)
{
lv_obj_t *target = lv_event_get_current_target(e);
if(lv_msgbox_get_active_btn(target) == 1)
{
lv_textarea_set_text(text_keyboard, "");
lv_obj_add_flag(msgbox_fail, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(btnmatrix, LV_OBJ_FLAG_CLICKABLE);
}
else
{
main_gui();
lv_obj_set_tile(tileview, scr_login, LV_ANIM_OFF);
}
}
/*密码登录 界面*/
static void pass_login_gui(void)
{
/*创建键盘屏幕*/
lv_obj_clean(top());
lv_obj_t *scr_keyboard = lv_obj_create(top());
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, 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_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);
/*msgbox 消息弹窗*/
static const char *msgbox_btns[] = {"取消","确认",""};
msgbox_fail = lv_msgbox_create(scr_keyboard, LV_SYMBOL_CLOSE, "认证失败,请重新输入\n", msgbox_btns, false);
lv_obj_set_size(msgbox_fail, 400, 200);
lv_obj_set_align(msgbox_fail, LV_ALIGN_CENTER);
lv_obj_set_style_text_align(msgbox_fail, LV_TEXT_ALIGN_CENTER, 0);
lv_obj_set_style_pad_hor(msgbox_fail, 0, 0);
lv_obj_add_flag(msgbox_fail, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_event_cb(msgbox_fail, pass_login_msg_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
/*获取msgbox的按键部件,设置宽度*/
lv_obj_t *msg_btn = lv_msgbox_get_btns(msgbox_fail);
lv_obj_set_size(msg_btn, 400, 50);
/*获取msgbox的title部件,单独设置*/
lv_obj_t *title = lv_msgbox_get_title(msgbox_fail);
lv_obj_set_style_text_font(title, &lv_font_montserrat_34, 0);
lv_obj_set_style_text_color(title, lv_palette_main(LV_PALETTE_RED), 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, login_event_cb , LV_EVENT_CLICKED, NULL);
}
/*nfc 登录界面*/
static void nfc_login_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr_nfc_login = lv_obj_create(top());
lv_obj_set_size(scr_nfc_login, scr_act_width(), scr_act_height());
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, login_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(top());
lv_obj_set_size(scr_palm_login, scr_act_width(), scr_act_height());
/*返回键*/
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, login_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(top());
lv_obj_set_size(scr_face_login, scr_act_width(), scr_act_height());
/*返回键*/
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, login_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();
}
else if ( target == btn_return_menu)
{
menu_gui();
}
else if( target == btn_return_home)
{
menu_gui();
}
}
/*管理菜单界面*/
static void menu_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr_menu = lv_obj_create(top());
lv_obj_set_size(scr_menu, scr_act_width(), scr_act_height());
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_align(btn_admin_menu, LV_ALIGN_TOP_MID, 0, 100);
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_align(btn_normal_menu, LV_ALIGN_TOP_MID, 0, 400);
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, 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_return_add_menu)
{
LV_LOG_USER("user_menu_gui");
user_menu_gui();
}
else 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)
{
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_LOG_USER("delete %s", lv_list_get_btn_text(user_list,child));
lv_obj_del_delayed(child, 100); /*加延时才能删除掉*/
lv_obj_update_layout(user_list); /*更新列表部件显示*/
}
}
}
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);
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);
}
}
else
{
if(code == LV_EVENT_CLICKED)
{
user_mode_gui();
}
}
}
static void user_menu_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr_user = lv_obj_create(top());
lv_obj_set_size(scr_user, scr_act_width(), scr_act_height());
lv_obj_set_style_text_font(scr_user, &lv_font_siyuan, 0);
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() - 60);
lv_obj_align(user_list, LV_ALIGN_TOP_MID, 0, 60);
/*用户列表项*/
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, 200);
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);
}
/*新建用户 按钮*/
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, label, LV_ALIGN_OUT_RIGHT_MID, 250, 20);
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, label, LV_ALIGN_OUT_RIGHT_MID, 150, 20);
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, label, LV_ALIGN_OUT_RIGHT_MID, 250, 20);
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, menu_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, menu_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);
if(target == btn_add_pass)
{
add_pass_gui();
}
else if(target == btn_del_pass)
{
}
else if(target == btn_return_add_mode)
{
user_mode_gui();
}
}
/*用户方式 界面*/
static void user_mode_gui()
{
lv_obj_clean(top());
lv_obj_t *scr_user_mode = lv_obj_create(top());
lv_obj_set_size(scr_user_mode, scr_act_width(), scr_act_height());
lv_obj_set_style_text_font(scr_user_mode, &lv_font_siyuan, 0);
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_align(btn, LV_ALIGN_TOP_MID, 0, 100);
lv_obj_add_style(btn, &btn_style, 0);
lv_obj_t *btn_label = lv_label_create(btn);
lv_obj_align(btn_label, LV_ALIGN_TOP_MID, 0, 0);
lv_label_set_text(btn_label, "密码");
lv_obj_add_style(btn, &btn_text_style, 0);
btn_add_pass = lv_btn_create(btn);
lv_obj_set_size(btn_add_pass, 50, 50);
lv_obj_align(btn_add_pass, LV_ALIGN_BOTTOM_LEFT, 0, 0);
lv_obj_move_foreground(btn_add_pass);
lv_obj_set_style_radius(btn_add_pass, LV_RADIUS_CIRCLE, 0);
lv_obj_set_style_bg_img_src(btn_add_pass, LV_SYMBOL_EDIT, 0);
lv_obj_set_style_text_font(btn_add_pass, &lv_font_montserrat_24, 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_set_size(btn_del_pass, 50, 50);
lv_obj_align(btn_del_pass, LV_ALIGN_BOTTOM_RIGHT, 0, 0);
lv_obj_move_foreground(btn_del_pass);
lv_obj_set_style_radius(btn_del_pass, LV_RADIUS_CIRCLE, 0);
lv_obj_set_style_bg_img_src(btn_del_pass, LV_SYMBOL_TRASH, 0);
lv_obj_set_style_text_font(btn_del_pass, &lv_font_montserrat_24, 0);
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_align(btn, LV_ALIGN_TOP_MID, 0, 400);
lv_obj_add_style(btn, &btn_style, 0);
btn_label = lv_label_create(btn);
lv_obj_align(btn_label, LV_ALIGN_TOP_MID, 0, 0);
lv_label_set_text(btn_label, "NFC卡");
lv_obj_add_style(btn, &btn_text_style, 0);
btn_add_nfc = lv_btn_create(btn);
lv_obj_set_size(btn_add_nfc, 50, 50);
lv_obj_align(btn_add_nfc, LV_ALIGN_BOTTOM_LEFT, 0, 0);
lv_obj_move_foreground(btn_add_nfc);
lv_obj_set_style_radius(btn_add_nfc, LV_RADIUS_CIRCLE, 0);
lv_obj_set_style_bg_img_src(btn_add_nfc, LV_SYMBOL_EDIT, 0);
lv_obj_set_style_text_font(btn_add_nfc, &lv_font_montserrat_24, 0);
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_set_size(btn_del_nfc, 50, 50);
lv_obj_align(btn_del_nfc, LV_ALIGN_BOTTOM_RIGHT, 0, 0);
lv_obj_move_foreground(btn_del_nfc);
lv_obj_set_style_radius(btn_del_nfc, LV_RADIUS_CIRCLE, 0);
lv_obj_set_style_bg_img_src(btn_del_nfc, LV_SYMBOL_TRASH, 0);
lv_obj_set_style_text_font(btn_del_nfc, &lv_font_montserrat_24, 0);
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_align(btn, LV_ALIGN_TOP_MID, 0, 700);
lv_obj_add_style(btn, &btn_style, 0);
btn_label = lv_label_create(btn);
lv_obj_align(btn_label, LV_ALIGN_TOP_MID, 0, 0);
lv_label_set_text(btn_label, "掌静脉");
lv_obj_add_style(btn, &btn_text_style, 0);
btn_add_palm = lv_btn_create(btn);
lv_obj_set_size(btn_add_palm, 50, 50);
lv_obj_align(btn_add_palm, LV_ALIGN_BOTTOM_LEFT, 0, 0);
lv_obj_move_foreground(btn_add_palm);
lv_obj_set_style_radius(btn_add_palm, LV_RADIUS_CIRCLE, 0);
lv_obj_set_style_bg_img_src(btn_add_palm, LV_SYMBOL_EDIT, 0);
lv_obj_set_style_text_font(btn_add_palm, &lv_font_montserrat_24, 0);
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_set_size(btn_del_palm, 50, 50);
lv_obj_align(btn_del_palm, LV_ALIGN_BOTTOM_RIGHT, 0, 0);
lv_obj_move_foreground(btn_del_palm);
lv_obj_set_style_radius(btn_del_palm, LV_RADIUS_CIRCLE, 0);
lv_obj_set_style_bg_img_src(btn_del_palm, LV_SYMBOL_TRASH, 0);
lv_obj_set_style_text_font(btn_del_palm, &lv_font_montserrat_24, 0);
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_align(btn, LV_ALIGN_TOP_MID, 0, 1000);
lv_obj_add_style(btn, &btn_style, 0);
btn_label = lv_label_create(btn);
lv_obj_align(btn_label, LV_ALIGN_TOP_MID, 0, 0);
lv_label_set_text(btn_label, "人脸");
lv_obj_add_style(btn, &btn_text_style, 0);
btn_add_face = lv_btn_create(btn);
lv_obj_set_size(btn_add_face, 50, 50);
lv_obj_align(btn_add_face, LV_ALIGN_BOTTOM_LEFT, 0, 0);
lv_obj_move_foreground(btn_add_face);
lv_obj_set_style_radius(btn_add_face, LV_RADIUS_CIRCLE, 0);
lv_obj_set_style_bg_img_src(btn_add_face, LV_SYMBOL_EDIT, 0);
lv_obj_set_style_text_font(btn_add_face, &lv_font_montserrat_24, 0);
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_set_size(btn_del_face, 50, 50);
lv_obj_align(btn_del_face, LV_ALIGN_BOTTOM_RIGHT, 0, 0);
lv_obj_move_foreground(btn_del_face);
lv_obj_set_style_radius(btn_del_face, LV_RADIUS_CIRCLE, 0);
lv_obj_set_style_bg_img_src(btn_del_face, LV_SYMBOL_TRASH, 0);
lv_obj_set_style_text_font(btn_del_face, &lv_font_montserrat_24, 0);
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, user_menu_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, menu_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_cnt == 1)
{
lv_textarea_del_char(add_text_keyboard2);
}
else
{
lv_textarea_del_char(add_text_keyboard);
}
}
else if(strcmp(txt, LV_SYMBOL_NEW_LINE) == 0)
{
input_pass_cnt++;
lv_obj_add_state(add_text_keyboard2, LV_STATE_FOCUSED);
lv_obj_clear_state(add_text_keyboard, LV_STATE_FOCUSED);
if(input_pass_cnt == 2)
{
input_pass_cnt = 0;
if(strcmp(lv_textarea_get_text(add_text_keyboard), lv_textarea_get_text(add_text_keyboard2)) == 0)
{
add_user_succ_gui();
}
else
{
add_user_fail_gui();
}
}
}
else
{
if(input_pass_cnt == 1)
{
lv_textarea_add_text(add_text_keyboard2, txt);
}
else
{
lv_textarea_add_text(add_text_keyboard, txt);
}
}
}
}
/*添加密码 界面*/
static void add_pass_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr_add_pass = lv_obj_create(top());
lv_obj_set_size(scr_add_pass, scr_act_width(), scr_act_height());
lv_obj_set_style_text_font(scr_add_pass, &lv_font_siyuan, 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_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_state(add_text_keyboard, LV_STATE_FOCUSED);
input_pass_cnt = 0;
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_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, "再次确认密码");
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, user_mode_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, menu_event_cb , LV_EVENT_CLICKED, NULL);
}
/*添加NFC 界面*/
static void add_nfc_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr_add_nfc = lv_obj_create(top());
lv_obj_set_size(scr_add_nfc, scr_act_width(), scr_act_height());
lv_obj_set_style_text_font(scr_add_nfc, &lv_font_siyuan, 0);
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);
lv_obj_set_style_text_font(label, &lv_font_siyuan, 0);
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, user_mode_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, menu_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(top());
lv_obj_set_size(scr_add_palm, scr_act_width(), scr_act_height());
lv_obj_set_style_text_font(scr_add_palm, &lv_font_siyuan, 0);
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, user_mode_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, menu_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(top());
lv_obj_set_size(scr_add_face, scr_act_width(), scr_act_height());
lv_obj_set_style_text_font(scr_add_face, &lv_font_siyuan, 0);
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, user_mode_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, menu_event_cb , LV_EVENT_CLICKED, NULL);
}
static void add_user_result_event_cb(lv_event_cb_t * e)
{
lv_event_code_t code = lv_event_get_code(e);
if(code == LV_EVENT_CLICKED)
{
user_mode_gui();
}
}
/*添加用户成功 界面*/
static void add_user_succ_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr_add_user = lv_obj_create(top());
lv_obj_set_size(scr_add_user, scr_act_width(), scr_act_height());
lv_obj_set_style_text_font(scr_add_user, &lv_font_siyuan, 0);
lv_obj_t *img = lv_img_create(scr_add_user);
lv_img_set_src(img, success_img);
lv_img_set_zoom(img, 256);
lv_obj_center(img);
lv_obj_t *label = lv_label_create(scr_add_user);
lv_obj_align(label, LV_ALIGN_BOTTOM_MID, 0, -300);
lv_obj_set_size(label, 250, 20);
lv_label_set_text(label, "添加成功,点击屏幕可继续添加用户");
lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL_CIRCULAR);
lv_obj_add_flag(scr_add_user, LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_event_cb(scr_add_user, add_user_result_event_cb, LV_EVENT_CLICKED, 0); /*这个得往后放,不然会误触发*/
}
/*添加用户失败 界面*/
static void add_user_fail_gui(void)
{
lv_obj_clean(top());
lv_obj_t *scr_add_user = lv_obj_create(top());
lv_obj_set_size(scr_add_user, scr_act_width(), scr_act_height());
lv_obj_t *img = lv_img_create(scr_add_user);
lv_img_set_src(img, fail_img);
lv_img_set_zoom(img, 256);
lv_obj_center(img);
lv_obj_t *label = lv_label_create(scr_add_user);
lv_obj_align(label, LV_ALIGN_BOTTOM_MID, 0, -300);
lv_obj_set_size(label, 250, 20); /*限制长度,让文本滚动*/
lv_label_set_text(label, "添加失败,点击屏幕可重新添加用户");
lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL_CIRCULAR);
lv_obj_add_flag(scr_add_user, LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_event_cb(scr_add_user, add_user_result_event_cb, LV_EVENT_CLICKED, 0);
}
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;
}