KT24-1110_65E-HA-651B/apps/soundbox/ui/lcd/STYLE_02/system_action.c

778 lines
18 KiB
C
Raw Permalink Normal View History

2024-11-10 10:44:17 +00:00
#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