KT24-1110_65E-HA-651B/apps/soundbox/ui/lcd/STYLE_02/system_action.c
2024-11-10 18:44:17 +08:00

778 lines
18 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "ui/ui.h"
#include "app_config.h"
#include "ui/ui_style.h"
#include "ui/ui_api.h"
#include "app_task.h"
#include "system/timer.h"
#include "font/language_list.h"
#include "res/resfile.h"
#include "app_power_manage.h"
#include "asm/charge.h"
#include "../ui_sys_param_api.h"
#include "update/update.h"
#include "dev_manager/dev_manager.h"
#if (TCFG_UI_ENABLE&&(CONFIG_UI_STYLE == STYLE_JL_SOUNDBOX))
#define STYLE_NAME JL
REGISTER_UI_STYLE(STYLE_NAME)
extern int ui_hide_main(int id);
extern int ui_show_main(int id);
extern void key_ui_takeover(u8 on);
extern u16 dev_update_check(char *logo);
/************************************************************
电池控件事件
************************************************************/
static void battery_timer(void *priv)
{
int incharge = 0;//充电标志
int id = (int)(priv);
static u8 percent = 0;
static u8 percent_last = 0;
if (get_charge_online_flag()) { //充电时候图标动态效果
if (percent > get_vbat_percent()) {
percent = 0;
}
ui_battery_set_level_by_id(id, percent, incharge); //充电标志,ui可以显示不一样的图标
percent += 20;
} else {
percent = get_vbat_percent();
if (percent != percent_last) {
ui_battery_set_level_by_id(id, percent, incharge); //充电标志,ui可以显示不一样的图标,需要工具设置
percent_last = percent;
}
}
}
static int battery_onchange(void *ctr, enum element_change_event e, void *arg)
{
struct ui_battery *battery = (struct ui_battery *)ctr;
static u32 timer = 0;
int incharge = 0;//充电标志
switch (e) {
case ON_CHANGE_INIT:
ui_battery_set_level(battery, get_vbat_percent(), incharge);
if (!timer) {
timer = sys_timer_add((void *)battery->elm.id, battery_timer, 1 * 1000); //传入的id就是BT_BAT
}
break;
case ON_CHANGE_FIRST_SHOW:
break;
case ON_CHANGE_RELEASE:
if (timer) {
sys_timer_del(timer);
timer = 0;
}
break;
default:
return false;
}
return false;
}
REGISTER_UI_EVENT_HANDLER(SYSTEM_BAT)
.onchange = battery_onchange,
.ontouch = NULL,
};
/************************************************************
系统设置
************************************************************/
static int sys_mode_onchange(void *ctr, enum element_change_event e, void *arg)
{
struct window *window = (struct window *)ctr;
static int bt_status_timer = 0;
switch (e) {
case ON_CHANGE_INIT:
puts("\n***sys_mode_onchange***\n");
/* key_ui_takeover(1); */
/* ui_register_msg_handler(ID_WINDOW_BT, ui_msg_handler); */
/*
* 注册APP消息响应
*/
break;
case ON_CHANGE_RELEASE:
break;
default:
return false;
}
return false;
}
REGISTER_UI_EVENT_HANDLER(ID_WINDOW_SYS)
.onchange = sys_mode_onchange,
.onkey = NULL,
.ontouch = NULL,
};
static int common_layout_onchange(void *ctr, enum element_change_event e, void *arg)
{
struct layout *layout = (struct layout *)ctr;
switch (e) {
case ON_CHANGE_INIT:
layout_on_focus(layout);
break;
case ON_CHANGE_RELEASE:
layout_lose_focus(layout);
break;
default:
break;
}
return FALSE;
}
/************************************************************
系统设置入口
************************************************************/
static int system_enter_callback(void *ctr, struct element_key_event *e)
{
struct ui_grid *grid = (struct ui_grid *)ctr;
printf("ui key %s %d\n", __FUNCTION__, e->value);
int sel_item;
switch (e->value) {
case KEY_OK:
sel_item = ui_grid_cur_item(grid);
switch (sel_item) {
case 0:
ui_show(SYSTEM_M_LAYOUT);
break;
case 1:
ui_show(SYS_LANGUAGE);
break;
case 2:
r_printf("UI sys_enter_soft_poweroff\n");
ui_show(SYS_POWEROFF);
break;
case 3:
ui_show(SYS_BACKLIGHT);
break;
case 4:
UI_HIDE_CURR_WINDOW();
ui_show_main(-1);//显示上一个页面
break;
}
break;
default:
return false;
}
return TRUE;
}
REGISTER_UI_EVENT_HANDLER(SYSTEM_SET_LIST)
.onchange = NULL,
.onkey = system_enter_callback,
.ontouch = NULL,
};
/************************************************************
系统菜单
************************************************************/
REGISTER_UI_EVENT_HANDLER(SYSTEM_M_LAYOUT)
.onchange = common_layout_onchange,
.onkey = NULL,
.ontouch = NULL,
};
static void system_update_timeout()
{
ui_hide(SYSTEM_UPDATE);
}
static int system_menu_callback(void *ctr, struct element_key_event *e)
{
struct ui_grid *grid = (struct ui_grid *)ctr;
printf("ui key %s %d\n", __FUNCTION__, e->value);
int sel_item;
u16 update_status = 0;
switch (e->value) {
case KEY_OK:
sel_item = ui_grid_cur_item(grid);
switch (sel_item) {
case 0:
ui_show(SYS_MSG_LAYOUT);
return TRUE;
break;
case 1:
set_sys_info_reset();//只重置了背光时间,背光亮度,以及自动关机时间
set_backlight_time(0);//重置之后需要再设置背光时间为0避免按按键后在app_key_event中响应背光时间为0事件导致立即关背光
set_backlight_brightness(0);
ui_hide(SYSTEM_M_LAYOUT);
break;
case 2://分别去查找SD卡,U盘中是否有升级文件
if (dev_manager_online_check_by_logo("sd0", 0) && update_status != UPDATA_READY) {
update_status = dev_update_check("sd0");
}
if (dev_manager_online_check_by_logo("sd1", 0) && update_status != UPDATA_READY) {
update_status = dev_update_check("sd1");
}
if (dev_manager_online_check_by_logo("udisk0", 0) && update_status != UPDATA_READY) {
update_status = dev_update_check("udisk0");
}
if (update_status != UPDATA_READY) {
ui_show(SYSTEM_UPDATE);
sys_timeout_add(NULL, system_update_timeout, 2000);
}
break;
default:
ui_hide(SYSTEM_M_LAYOUT);
break;
}
break;
default:
return false;
}
return TRUE;
}
REGISTER_UI_EVENT_HANDLER(SYSTEM_M_LIST)
.onchange = NULL,
.onkey = system_menu_callback,
.ontouch = NULL,
};
/************************************************************
系统信息
************************************************************/
/*
* 版本号
*/
#define VERSION_LOG "20200522"
#define SPACE_LOG "1024 MB"
static int version_ascii_onchange(void *ctr, enum element_change_event e, void *arg)
{
int index;
struct ui_text *text = (struct ui_text *)ctr;
struct ui_text_attrs *text_attrs = &(text->attrs);
u8 vol;
switch (e) {
case ON_CHANGE_INIT:
text_attrs->str = VERSION_LOG;
break;
case ON_CHANGE_RELEASE:
break;
default:
break;
}
return false;
}
REGISTER_UI_EVENT_HANDLER(SYSTEM_31)
.onchange = version_ascii_onchange,
.onkey = NULL,
.ontouch = NULL,
};
static int space_ascii_onchange(void *ctr, enum element_change_event e, void *arg)
{
int index;
struct ui_text *text = (struct ui_text *)ctr;
struct ui_text_attrs *text_attrs = &(text->attrs);
u8 vol;
switch (e) {
case ON_CHANGE_INIT:
text_attrs->str = SPACE_LOG;
break;
case ON_CHANGE_RELEASE:
break;
default:
break;
}
return false;
}
REGISTER_UI_EVENT_HANDLER(SYSTEM_35)
.onchange = space_ascii_onchange,
.onkey = NULL,
.ontouch = NULL,
};
static int system_info_menu_enter_callback(void *ctr, struct element_key_event *e)
{
struct ui_grid *grid = (struct ui_grid *)ctr;
printf("ui key %s %d\n", __FUNCTION__, e->value);
int sel_item;
switch (e->value) {
case KEY_OK:
ui_hide(SYS_MSG_LAYOUT);
return false;
}
return TRUE;
}
REGISTER_UI_EVENT_HANDLER(SYS_MSG_INFO_LIST)
.onchange = NULL,
.onkey = system_info_menu_enter_callback,
.ontouch = NULL,
};
/************************************************************
语言设置
************************************************************/
/*
* system语言设置
*/
static const u8 table_system_language[] = {
Chinese_Simplified, /* 简体中文 */
Chinese_Traditional, /* 繁体中文 */
English, /* 英文 */
};
static const int language_pic[] = {
SYSTEM_47,
SYSTEM_49,
SYSTEM_51,
};
static int language_pic_common_onchange(void *_ctrl, enum element_change_event event, void *arg)
{
struct ui_pic *pic = (struct ui_pic *)_ctrl;
int i = 0;
switch (event) {
case ON_CHANGE_INIT:
for (i = 0; i < sizeof(language_pic) / sizeof(language_pic[0]); i++) {
if (ui_language_get() == table_system_language[i]) {
if (pic->elm.id == language_pic[i]) {
ui_pic_set_image_index(pic, 1);
break;
}
}
}
break;
case ON_CHANGE_SHOW_POST:
break;
default:
return FALSE;
}
return FALSE;
}
REGISTER_UI_EVENT_HANDLER(SYSTEM_47)
.onchange = language_pic_common_onchange,
};
REGISTER_UI_EVENT_HANDLER(SYSTEM_49)
.onchange = language_pic_common_onchange,
};
REGISTER_UI_EVENT_HANDLER(SYSTEM_51)
.onchange = language_pic_common_onchange,
};
static int language_enter_callback(void *ctr, struct element_key_event *e)
{
struct ui_grid *grid = (struct ui_grid *)ctr;
printf("ui key %s %d\n", __FUNCTION__, e->value);
int sel_item;
switch (e->value) {
case KEY_OK:
sel_item = ui_grid_cur_item(grid);
if (sel_item >= 0 && sel_item < sizeof(table_system_language) / sizeof(table_system_language[0])) {
ui_language_set(table_system_language[sel_item]);
ui_hide(SYS_LANGUAGE);
} else {
ui_hide(SYS_LANGUAGE);
}
return false;
default:
return false;
}
return TRUE;
}
REGISTER_UI_EVENT_HANDLER(SYS_LANGUAGE_LIST)
.onchange = NULL,
.onkey = language_enter_callback,
.ontouch = NULL,
};
REGISTER_UI_EVENT_HANDLER(SYS_LANGUAGE)
.onchange = common_layout_onchange,
.onkey = NULL,
.ontouch = NULL,
};
/************************************************************
背光设置
************************************************************/
static int backlight_menu_enter_callback(void *ctr, struct element_key_event *e)
{
struct ui_grid *grid = (struct ui_grid *)ctr;
printf("ui key %s %d\n", __FUNCTION__, e->value);
int sel_item;
switch (e->value) {
case KEY_OK:
sel_item = ui_grid_cur_item(grid);
switch (sel_item) {
case 0:
ui_show(SYS_BACKLIGHT_TIME);
break;
case 1:
ui_show(SYS_BACKLIGHT_VALUE);
break;
case 2:
ui_hide(SYS_BACKLIGHT);
break;
}
return false;
}
return false;
}
REGISTER_UI_EVENT_HANDLER(SYS_BACKLIGHT_LIST)
.onchange = NULL,
.onkey = backlight_menu_enter_callback,
.ontouch = NULL,
};
REGISTER_UI_EVENT_HANDLER(SYS_BACKLIGHT)
.onchange = common_layout_onchange,
.onkey = NULL,
.ontouch = NULL,
};
/*
* system屏幕保护设置
*/
static const int backlight_time_pic[] = {
SYSTEM_7,
SYSTEM_11,
SYSTEM_16,
SYSTEM_18,
SYSTEM_20,
};
static int backlight_time_pic_common_onchange(void *_ctrl, enum element_change_event event, void *arg)
{
struct ui_pic *pic = (struct ui_pic *)_ctrl;
switch (event) {
case ON_CHANGE_INIT:
if (pic->elm.id == backlight_time_pic[get_backlight_time_item() % 5]) {
ui_pic_set_image_index(pic, 1);
}
break;
case ON_CHANGE_SHOW_POST:
break;
default:
return FALSE;
}
return FALSE;
}
REGISTER_UI_EVENT_HANDLER(SYSTEM_7)
.onchange = backlight_time_pic_common_onchange,
};
REGISTER_UI_EVENT_HANDLER(SYSTEM_11)
.onchange = backlight_time_pic_common_onchange,
};
REGISTER_UI_EVENT_HANDLER(SYSTEM_16)
.onchange = backlight_time_pic_common_onchange,
};
REGISTER_UI_EVENT_HANDLER(SYSTEM_18)
.onchange = backlight_time_pic_common_onchange,
};
REGISTER_UI_EVENT_HANDLER(SYSTEM_20)
.onchange = backlight_time_pic_common_onchange,
};
static int backlight_menu_time_callback(void *ctr, struct element_key_event *e)
{
struct ui_grid *grid = (struct ui_grid *)ctr;
printf("ui key %s %d\n", __FUNCTION__, e->value);
int sel_item;
switch (e->value) {
case KEY_OK:
sel_item = ui_grid_cur_item(grid);
set_backlight_time(sel_item);
ui_hide(SYS_BACKLIGHT_TIME);
return false;
}
return false;
}
REGISTER_UI_EVENT_HANDLER(SYS_BACKLIGHT_TIME_LIST)
.onchange = NULL,
.onkey = backlight_menu_time_callback,
.ontouch = NULL,
};
REGISTER_UI_EVENT_HANDLER(SYS_BACKLIGHT_TIME)
.onchange = common_layout_onchange,
.onkey = NULL,
.ontouch = NULL,
};
/*
* system屏幕亮度设置
*/
static const int backlight_value_pic[] = {
SYSTEM_13,
SYSTEM_25,
SYSTEM_27,
};
static int backlight_value_pic_common_onchange(void *_ctrl, enum element_change_event event, void *arg)
{
struct ui_pic *pic = (struct ui_pic *)_ctrl;
switch (event) {
case ON_CHANGE_INIT:
if (pic->elm.id == backlight_value_pic[get_backlight_brightness_item() % 3]) {
ui_pic_set_image_index(pic, 1);
}
break;
case ON_CHANGE_SHOW_POST:
break;
default:
return FALSE;
}
return FALSE;
}
REGISTER_UI_EVENT_HANDLER(SYSTEM_13)
.onchange = backlight_value_pic_common_onchange,
};
REGISTER_UI_EVENT_HANDLER(SYSTEM_25)
.onchange = backlight_value_pic_common_onchange,
};
REGISTER_UI_EVENT_HANDLER(SYSTEM_27)
.onchange = backlight_value_pic_common_onchange,
};
static int backlight_menu_value_callback(void *ctr, struct element_key_event *e)
{
struct ui_grid *grid = (struct ui_grid *)ctr;
printf("ui key %s %d\n", __FUNCTION__, e->value);
int sel_item;
switch (e->value) {
case KEY_OK:
sel_item = ui_grid_cur_item(grid);
set_backlight_brightness(sel_item);
ui_hide(SYS_BACKLIGHT_VALUE);
return false;
}
return false;
}
REGISTER_UI_EVENT_HANDLER(SYS_BACKLIGHT_VALUE_LIST)
.onchange = NULL,
.onkey = backlight_menu_value_callback,
.ontouch = NULL,
};
REGISTER_UI_EVENT_HANDLER(SYS_BACKLIGHT_VALUE)
.onchange = common_layout_onchange,
.onkey = NULL,
.ontouch = NULL,
};
/************************************************************
系统关机设置
************************************************************/
static const int power_off_pic[] = {
SYSTEM_29,
SYSTEM_37,
SYSTEM_39,
SYSTEM_41,
SYSTEM_43,
};
static int poweroff_pic_common_onchange(void *_ctrl, enum element_change_event event, void *arg)
{
struct ui_pic *pic = (struct ui_pic *)_ctrl;
switch (event) {
case ON_CHANGE_INIT:
if (pic->elm.id == power_off_pic[get_cur_auto_power_time() % 5]) {
ui_pic_set_image_index(pic, 1);
}
break;
case ON_CHANGE_SHOW_POST:
break;
default:
return FALSE;
}
return FALSE;
}
REGISTER_UI_EVENT_HANDLER(SYSTEM_29)
.onchange = poweroff_pic_common_onchange,
};
REGISTER_UI_EVENT_HANDLER(SYSTEM_37)
.onchange = poweroff_pic_common_onchange,
};
REGISTER_UI_EVENT_HANDLER(SYSTEM_39)
.onchange = poweroff_pic_common_onchange,
};
REGISTER_UI_EVENT_HANDLER(SYSTEM_41)
.onchange = poweroff_pic_common_onchange,
};
REGISTER_UI_EVENT_HANDLER(SYSTEM_43)
.onchange = poweroff_pic_common_onchange,
};
/*
* system自动关机设置
*/
static int power_menu_enter_callback(void *ctr, struct element_key_event *e)
{
struct ui_grid *grid = (struct ui_grid *)ctr;
printf("ui key %s %d\n", __FUNCTION__, e->value);
int sel_item;
switch (e->value) {
case KEY_OK:
sel_item = ui_grid_cur_item(grid);
switch (sel_item) {
case 0:
case 1:
case 2:
case 3:
case 4:
set_auto_poweroff_timer(sel_item);
case 5:
ui_hide(SYS_POWEROFF);
break;
}
return false;
default:
return false;
}
return TRUE;
}
REGISTER_UI_EVENT_HANDLER(SYS_POWEROFF_LIST)
.onchange = NULL,
.onkey = power_menu_enter_callback,
.ontouch = NULL,
};
REGISTER_UI_EVENT_HANDLER(SYS_POWEROFF)
.onchange = common_layout_onchange,
.onkey = NULL,
.ontouch = NULL,
};
#if 0
struct grid_setting {
int id;
int parent_id;
void (*handler)(void *hd, int args, int index);
};
static const struct grid_setting grid_function_table[] = {
{ SYSTEM_MENU_LIST, 0, system_enter_callback},
{ LANGUAGE_MENU_LIST, 0, language_enter_callback},
{ POWER_MENU_LIST, 0, power_menu_enter_callback},
{ BACK_MENU_LIST, NULL},
{ 0, NULL}, //必须要要0结束
};
static const struct grid_setting grid_function_table_1[] = {
{ SYS_BACKLIGHT_0, SYS_BACKLIGHT, backlight_menu_enter_callback},
{ SYS_BACKLIGHT_1, SYS_BACKLIGHT, backlight_menu_enter_callback},
{ SYS_BACKLIGHT_2, SYS_BACKLIGHT, backlight_menu_enter_callback},
{ 0, NULL}, //必须要要0结束
};
static void ui_list_callback_common(const struct grid_setting *table, int id, int key, int index)
{
if (!table) {
return;
}
for (; table->id; table++) {
if (table->id == id) {
if (table->handler) {
table->handler(table, key, index);
}
break;
}
}
}
static int ui_list_onkey_common(void *ctr, struct element_key_event *e)
{
struct ui_grid *grid = (struct ui_grid *)ctr;
printf("ui key %s %d\n", __FUNCTION__, e->value);
int sel_item;
switch (e->value) {
case KEY_OK:
sel_item = ui_grid_cur_item(grid);
if (sel_item >= 0) {
ui_list_callback_common(grid_function_table, grid->item[sel_item].elm.id, e->value, sel_item);
}
break;
default:
return false;
}
return TRUE;
}
#endif
#endif //TCFG_SPI_LCD_ENABLE