#ifdef SUPPORT_MS_EXTENSIONS #pragma bss_seg(".power_on.data.bss") #pragma data_seg(".power_on.data") #pragma const_seg(".power_on.text.const") #pragma code_seg(".power_on.text") #endif #include "system/includes.h" #include "app_action.h" #include "app_main.h" #include "default_event_handler.h" #include "tone_player.h" #include "app_tone.h" #include "power_on.h" #include "ui/ui_api.h" #include "ui_manage.h" #include "jlui_app/ui_style.h" #define LOG_TAG "[APP_IDLE]" #define LOG_ERROR_ENABLE #define LOG_DEBUG_ENABLE #define LOG_INFO_ENABLE /* #define LOG_DUMP_ENABLE */ #define LOG_CLI_ENABLE #include "debug.h" extern u8 get_charge_online_flag(void); extern uint32_t timer_get_ms(void); #define POWER_ON_TIME 2//最小开机时间 static u32 ui_logo_time = 0; extern const int JLUI_MULTI_PAGE_OVERLAY_SUPPORT; static void power_on_ui_enter() { UI_SHOW_WINDOW(ID_WINDOW_POWER_ON); ui_logo_time = timer_get_ms(); } static void power_on_ui_exit() { while (timer_get_ms() - ui_logo_time <= POWER_ON_TIME * 1000) { //显示开机logo os_time_dly(2); } u8 poweron_password = 0; int ret = syscfg_read(USER_PASSWORD_ON, &poweron_password, sizeof(poweron_password)); if ((ret == sizeof(poweron_password)) && poweron_password) { #if TCFG_UI_ENABLE #if !CONFIG_LVGL_UI_ENABLE set_need_password(1); #endif #endif UI_SHOW_WINDOW(ID_WINDOW_POWERON_PASSWORD); } else { if (!get_charge_online_flag()) { if (JLUI_MULTI_PAGE_OVERLAY_SUPPORT) { UI_SHOW_MULTI_PAGE(); } UI_SHOW_WINDOW(ID_WINDOW_DIAL); }//非充电状态进表盘,充电床头由充电post页面显示 } } //*----------------------------------------------------------------------------*/ /**@brief 开机启动 @param 无 @return @note */ /*----------------------------------------------------------------------------*/ static void poweron_task_start() { power_on_ui_exit(); #if TCFG_APP_BT_EN app_send_message(APP_MSG_GOTO_MODE, APP_MODE_BT); #else /* app_send_message(APP_MSG_GOTO_MODE, APP_MODE_IDLE); */ app_send_message(APP_MSG_GOTO_NEXT_MODE, 0); #endif } static int poweron_tone_play_end_callback(void *priv, enum stream_event event) { if (!app_in_mode(APP_MODE_POWERON)) { return 0; } if (event == STREAM_EVENT_STOP) { poweron_task_start(); } return 0; } static int app_poweron_init() { log_info("power on"); power_on_ui_enter(); app_send_message(APP_MSG_ENTER_MODE, APP_MODE_POWERON); if (app_var.play_poweron_tone) { int ret = play_tone_file_callback(get_tone_files()->power_on, NULL, poweron_tone_play_end_callback); if (ret) { log_error("power on tone play err!!!"); poweron_task_start(); } } else { poweron_task_start(); } return 0; } static void app_poweron_exit() { log_info("exit power on mode"); app_send_message(APP_MSG_EXIT_MODE, APP_MODE_POWERON); } struct app_mode *app_enter_poweron_mode(int arg) { int msg[16]; struct app_mode *next_mode; app_poweron_init(); while (1) { if (!app_get_message(msg, ARRAY_SIZE(msg), NULL)) { continue; } next_mode = app_mode_switch_handler(msg); if (next_mode) { break; } switch (msg[0]) { case MSG_FROM_APP: break; case MSG_FROM_DEVICE: break; } app_default_msg_handler(msg); } app_poweron_exit(); return next_mode; } static int poweron_mode_try_enter(int arg) { return 0; } static int poweron_mode_try_exit() { //上电提示音播放结束前不退出模式 #if TCFG_BT_BACKGROUND_ENABLE if (tone_player_runing()) { return 1; } else { return 0; } #else return 0; #endif } static const struct app_mode_ops poweron_mode_ops = { .try_enter = poweron_mode_try_enter, .try_exit = poweron_mode_try_exit, }; /* * 注册power_on模式 */ REGISTER_APP_MODE(poweron_mode) = { .name = APP_MODE_POWERON, .index = 0xff, .ops = &poweron_mode_ops, };