#define TASK_COMMON_APP_DELAY_MS 1000
#define OSDELAY 1000
#define UPG_FLAG_OFFSET_OF_FOTA_DATA (0x1000 * 2)
+#define BOOT_FLOW_PREFIX "[BOOT_FLOW][开机流程] "
typedef void (*CreateQueueFunction_t)(void);
{
UNUSED(unused1);
UNUSED(unused2);
+ PRINT(BOOT_FLOW_PREFIX "升级模式:app_os_init开始" NEWLINE);
// Create queues before tasks in case they are used during initialisation.
for (uint8_t i = 0; i < M_NUM_TASKS; i++) {
if (g_app_tasks[i].create_queue_fn_p) {
+ PRINT(BOOT_FLOW_PREFIX "升级模式:为任务[%u]创建队列" NEWLINE, i);
g_app_tasks[i].create_queue_fn_p();
}
}
if (g_app_tasks[i].task_handle == NULL) {
panic(PANIC_TASK_CREATE_FAILED, i);
}
+ PRINT(BOOT_FLOW_PREFIX "升级模式:任务[%u]创建完成,句柄=0x%x" NEWLINE,
+ i, (unsigned int)g_app_tasks[i].task_handle);
}
+ PRINT(BOOT_FLOW_PREFIX "升级模式:app_os_init结束" NEWLINE);
}
static void emmc_init(void)
static void app_main(const void *unused)
{
UNUSED(unused);
+ PRINT(BOOT_FLOW_PREFIX "升级模式:app_main开始" NEWLINE);
los_vfs_init();
+ PRINT(BOOT_FLOW_PREFIX "升级模式:文件系统框架初始化完成" NEWLINE);
uint32_t ret = (uint32_t)dpal_driver_base_init();
if (ret != 0) {
panic(PANIC_ASSERT, __LINE__);
}
+ PRINT(BOOT_FLOW_PREFIX "升级模式:驱动基础初始化完成" NEWLINE);
#ifdef CFG_DRIVERS_MMC
emmc_init();
+ PRINT(BOOT_FLOW_PREFIX "升级模式:eMMC初始化完成" NEWLINE);
#endif
#ifdef CFG_DRIVERS_NANDFLASH
yaffs_nand_drv_checkptset(YAFFS_CHECKPT_SKIPED);
nandflash_init();
+ PRINT(BOOT_FLOW_PREFIX "升级模式:NAND Flash初始化完成" NEWLINE);
#endif
#ifdef SUPPORT_RECOVERY_DISPLAY
recovery_display_init();
recovery_display_sample();
+ PRINT(BOOT_FLOW_PREFIX "升级模式:升级界面已显示" NEWLINE);
#endif
printf("fs init success.\r\n");
if (upg_need_upgrade()) {
+ PRINT(BOOT_FLOW_PREFIX "升级模式:检测到需要升级" NEWLINE);
printf("need upgrade\r\n");
upg_func_t upg_func = {0};
upg_func.malloc = malloc;
if (err != ERRCODE_SUCC) {
printf("--------------------------\r\n");
printf("upgrade failed, ret = 0x%x\r\n", ret);
+ PRINT(BOOT_FLOW_PREFIX "升级模式:升级失败,ret=0x%x" NEWLINE, ret);
} else {
// 升级后重启
printf("--------------------------\r\n");
printf("upgrade success, reset now\r\n");
+ PRINT(BOOT_FLOW_PREFIX "升级模式:升级成功,准备重启" NEWLINE);
}
} else {
// 不应该进入该分支
printf("--------------------------\r\n");
printf("no need upgrade, this branch will never enter\r\n");
+ PRINT(BOOT_FLOW_PREFIX "升级模式:未检测到升级(异常分支)" NEWLINE);
}
+ PRINT(BOOT_FLOW_PREFIX "升级模式:调用upg_reboot重启" NEWLINE);
upg_reboot();
}
#define PWRKEY_CHECK_INTERVAL_MS 200\r
#define PWRKEY_HOLD_TIME_MS 2000\r
#define PRESS_COUNT_LIMIT (PWRKEY_HOLD_TIME_MS / PWRKEY_CHECK_INTERVAL_MS)\r
+#define BOOT_FLOW_PREFIX "[BOOT_FLOW][开机流程] "\r
static uint64_t g_boot_stage_last_ms = 0;\r
\r
static void boot_log_stage(const char *stage_name)\r
{\r
uint64_t now_ms = uapi_ulp_systick_get_ms();\r
uint64_t delta_ms = now_ms - g_boot_stage_last_ms;\r
- PRINT("【开机流程】%s,当前时间=%llu ms,阶段耗时=%llu ms"NEWLINE,\r
+ PRINT(BOOT_FLOW_PREFIX "%s,当前时间=%llu ms,阶段耗时=%llu ms"NEWLINE,\r
stage_name, (unsigned long long)now_ms, (unsigned long long)delta_ms);\r
g_boot_stage_last_ms = now_ms;\r
}\r
\r
static void _poweroff(void)\r
{\r
- PRINT("【开机流程】执行关机流程:清中断、配置低功耗寄存器"NEWLINE);\r
+ PRINT(BOOT_FLOW_PREFIX "执行关机流程:清中断、配置低功耗寄存器"NEWLINE);\r
/* clr ulp int and event */\r
writel(0x5702C1E4, 0x3F);\r
writel(0x5702C1EC, 0x3F);\r
{\r
button_press_state_t pwrkey_state = porting_button_get_state();\r
button_press_state_t function_key_state = porting_function_button_get_state();\r
- PRINT("【开机流程】安全模式检测:电源键=%d 功能键=%d (0=按下 1=松开)"NEWLINE,\r
+ PRINT(BOOT_FLOW_PREFIX "安全模式检测:电源键=%d 功能键=%d (0=按下 1=松开)"NEWLINE,\r
pwrkey_state, function_key_state);\r
if (PRESSED == pwrkey_state && PRESSED == function_key_state)\r
{\r
void board_init(uint32_t flash_id, uint32_t flash_unique_id)\r
{\r
g_boot_stage_last_ms = uapi_ulp_systick_get_ms();\r
- PRINT("【开机流程】board_init开始,flash_id=0x%x, flash_uid=0x%x, t0=%llu ms"NEWLINE,\r
+ PRINT(BOOT_FLOW_PREFIX "board_init开始,flash_id=0x%x, flash_uid=0x%x, t0=%llu ms"NEWLINE,\r
flash_id, flash_unique_id, (unsigned long long)g_boot_stage_last_ms);\r
\r
/* flash init */\r
- PRINT("【开机流程】开始初始化Flash"NEWLINE);\r
+ PRINT(BOOT_FLOW_PREFIX "开始初始化Flash"NEWLINE);\r
flash_funcreg_adapt(0);\r
flash_save_manufacturer(0, flash_id);\r
uapi_flash_init(0);\r
PRINT("Flash id is %x, init success"NEWLINE, flash_id);\r
boot_log_stage("Flash初始化完成");\r
\r
- PRINT("【开机流程】开始初始化PIO配置"NEWLINE);\r
+ PRINT(BOOT_FLOW_PREFIX "开始初始化PIO配置"NEWLINE);\r
pio_func_init();\r
boot_log_stage("PIO初始化完成");\r
\r
- PRINT("【开机流程】开始初始化GPIO配置"NEWLINE);\r
+ PRINT(BOOT_FLOW_PREFIX "开始初始化GPIO配置"NEWLINE);\r
gpio_func_init();\r
boot_log_stage("GPIO初始化完成");\r
\r
- PRINT("【开机流程】开始执行电源键长按开机校验"NEWLINE);\r
+ PRINT(BOOT_FLOW_PREFIX "开始执行电源键长按开机校验"NEWLINE);\r
check_pwrkey_3s();\r
boot_log_stage("电源键长按校验完成");\r
\r
#ifdef QSPI_DISPLAY\r
lcd_bus_register_api(&g_display_api_qspi, BUS_DISPLAY_QSPI);\r
g_display_init_select = DISPLAY_CLASS_QSPI;\r
- PRINT("【开机流程】显示总线选择:QSPI"NEWLINE);\r
+ PRINT(BOOT_FLOW_PREFIX "显示总线选择:QSPI"NEWLINE);\r
#else\r
lcd_bus_register_api(&g_display_api_mipi, BUS_DISPLAY_MIPI);\r
g_display_init_select = DISPLAY_CLASS_MIPI;\r
- PRINT("【开机流程】显示总线选择:MIPI"NEWLINE);\r
+ PRINT(BOOT_FLOW_PREFIX "显示总线选择:MIPI"NEWLINE);\r
#endif\r
boot_log_stage("显示总线注册完成");\r
\r
#ifdef BRANDY_PRODUCT_EVB\r
g_board_init_select = BOARD_CLASS_E0B2;\r
- PRINT("【开机流程】板级型号选择:BOARD_CLASS_E0B2"NEWLINE);\r
+ PRINT(BOOT_FLOW_PREFIX "板级型号选择:BOARD_CLASS_E0B2"NEWLINE);\r
#else\r
g_board_init_select = BOARD_CLASS_E0B4;\r
- PRINT("【开机流程】板级型号选择:BOARD_CLASS_E0B4"NEWLINE);\r
+ PRINT(BOOT_FLOW_PREFIX "板级型号选择:BOARD_CLASS_E0B4"NEWLINE);\r
#endif\r
boot_log_stage("board_init结束");\r
}
\ No newline at end of file
#endif
extern "C" uint64_t uapi_ulp_systick_get_ms(void);
+#define BOOT_FLOW_PREFIX "[BOOT_FLOW][开机流程] "
namespace OHOS {
auto logLauncherStage = [&](const char *stageName) {
uint64_t nowMs = uapi_ulp_systick_get_ms();
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
- "【开机流程】NativeLauncher阶段:%s,当前时间=%llu ms,阶段耗时=%llu ms,总耗时=%llu ms",
+ BOOT_FLOW_PREFIX "启动器阶段:%s,当前时间=%llu ms,阶段耗时=%llu ms,总耗时=%llu ms",
stageName,
(unsigned long long)nowMs,
(unsigned long long)(nowMs - launcherLastStageMs),
(unsigned long long)(nowMs - launcherStartMs));
launcherLastStageMs = nowMs;
};
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "【开机流程】进入InitNativeLauncher,mode=%d,t0=%llu ms",
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, BOOT_FLOW_PREFIX "进入启动器初始化,模式=%d,起始时间=%llu ms",
mode, (unsigned long long)launcherStartMs);
#ifdef JS_ENABLE
WEARABLE_LOGI(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "c %d", mode);
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "【开机流程】启动模式:正常模式");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, BOOT_FLOW_PREFIX "启动模式:正常模式");
// 初始化语言
GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::VECTOR_FONT_DIR, HARMONYOS_VECTOR_FONT_FILENAME);
GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::NEW_FONT_DIR, GILROY_BOLD_FONT); // 注册字体
/* -------------------------------------------------------------------------- */
logLauncherStage("最近任务与页面切换策略初始化完成");
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
- "【开机流程】InitNativeLauncher结束,总耗时=%llu ms(注:最终开机完成以进入表盘界面为准)",
+ BOOT_FLOW_PREFIX "启动器初始化结束,总耗时=%llu ms(注:最终开机完成以进入表盘界面为准)",
(unsigned long long)(uapi_ulp_systick_get_ms() - launcherStartMs));
}
extern "C" uint8_t uapi_dev_runtime_get_lock_status(void);
extern "C" uint64_t uapi_ulp_systick_get_ms(void);
+#define BOOT_FLOW_PREFIX "[BOOT_FLOW][开机流程] "
namespace OHOS
{
{
uint64_t bootCostMs = uapi_ulp_systick_get_ms();
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
- "【开机完成】已进入表盘主界面,开机耗时=%llu ms", (unsigned long long)bootCostMs);
+ BOOT_FLOW_PREFIX "开机完成:已进入表盘主界面,开机耗时=%llu ms", (unsigned long long)bootCostMs);
g_bootWatchfaceReadyLogged = true;
}
}
g_ulp_wkup_flag = 0;\r
g_ulp_wkup_flag = readw(ULP_WKUP_INT_STS);\r
g_startup_finish_flag = true;\r
- PRINT("startup reason flag is 0x%x\r\n", g_ulp_wkup_flag);\r
+ PRINT("startup reason flag is 0x%x, systick_bit=%d pwron_bit=%d vbus_bit=%d\r\n",\r
+ g_ulp_wkup_flag,\r
+ (g_ulp_wkup_flag >> WKUP_SYSTICK_MASK) & 1,\r
+ (g_ulp_wkup_flag >> WKUP_PWRON_MASK) & 1,\r
+ (g_ulp_wkup_flag >> WKUP_VBUS_EN_MASK) & 1);\r
}\r
}\r
\r
if (((g_ulp_wkup_flag >> WKUP_VBUS_EN_MASK) & 1) == 1) {\r
startup_type = STARTUP_VBUS_EN;\r
}\r
+ PRINT("startup reason decode=%d (0-systick 1-pwron 2-vbus 3-other), flag=0x%x\r\n",\r
+ startup_type, g_ulp_wkup_flag);\r
return startup_type;\r
}\r
\r
{\r
if (pdmode >= PDMODE_MAX) {\r
return ERRCODE_INVALID_PARAM;\r
- }\r
+ } \r
\r
if (pdmode == PDMODE_RE_UP) {\r
reg16_clrbit(PWRON_PD_MODE_REG, PWRON_PD_MODE_POS4);\r
uint64_t uapi_ulp_systick_get_count(void)\r
{\r
uint64_t count = 0;\r
-\r
- count = (uint64_t)readw(ULP_SYSTICK_VAL3) << 48U;\r
- count |= (uint64_t)readw(ULP_SYSTICK_VAL2) << 32U;\r
- count |= (uint64_t)readw(ULP_SYSTICK_VAL1) << 16U;\r
- count |= (uint64_t)readw(ULP_SYSTICK_VAL0);\r
+ static uint64_t s_last_count = 0;\r
+ uint16_t v0 = readw(ULP_SYSTICK_VAL0);\r
+ uint16_t v1 = readw(ULP_SYSTICK_VAL1);\r
+ uint16_t v2 = readw(ULP_SYSTICK_VAL2);\r
+ uint16_t v3 = readw(ULP_SYSTICK_VAL3);\r
+\r
+ count = ((uint64_t)v3 << 48U) |\r
+ ((uint64_t)v2 << 32U) |\r
+ ((uint64_t)v1 << 16U) |\r
+ ((uint64_t)v0);\r
+\r
+ PRINT("[ULP_CNT][drv ] v3=0x%04x v2=0x%04x v1=0x%04x v0=0x%04x count=0x%016llx (%llu)\r\n",\r
+ v3, v2, v1, v0, (unsigned long long)count, (unsigned long long)count);\r
+\r
+ if (s_last_count != 0 && count < s_last_count) {\r
+ PRINT("[ULP_CNT][WARN][drv ] rollback! last=0x%016llx now=0x%016llx\r\n",\r
+ (unsigned long long)s_last_count, (unsigned long long)count);\r
+ }\r
+ s_last_count = count;\r
\r
return count;\r
}\r
#ifdef SUPPORT_CUSTOM_UI_COMPONENT
#include "uicomponents/UIComponents.h"
#endif
+#define BOOT_FLOW_PREFIX "[BOOT_FLOW][开机流程] "
#ifdef __cplusplus
extern "C"
private:
void OnAnimatorStop(OHOS::UIView &view)
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, BOOT_FLOW_PREFIX "开机动画监听:收到动画结束回调");
boot_animation_flag = true;
ClearAll();
static void boot_animation_task(void *arg)
{
unused(arg);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, BOOT_FLOW_PREFIX "开机动画任务:准备显示开机动画");
boot_group = ReBootAnimatorViewInit();
if (boot_group == nullptr)
[]
{
OHOS::RootView::GetInstance()->Add(boot_group);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, BOOT_FLOW_PREFIX "开机动画任务:开机动画开始播放");
ReBootImageAnimatorView->Start();
},
false);
void wait_animation_stop(void)
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, BOOT_FLOW_PREFIX "开机动画等待:开始等待动画结束");
while (boot_animation_flag == false)
{
LOS_Msleep(1000);
}
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, BOOT_FLOW_PREFIX "开机动画等待:动画已结束");
}
void ShowGraphicLogo(void)
{
if (g_showLogo)
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, BOOT_FLOW_PREFIX "开机Logo:已显示,跳过重复显示");
return;
}
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, BOOT_FLOW_PREFIX "开机Logo:开始显示");
g_showLogo = true;
g_logo = new OHOS::UIImageView();
g_logo->SetPosition(0, 0, OHOS::Screen::GetInstance().GetWidth(), OHOS::Screen::GetInstance().GetHeight());
{
OHOS::RootView::GetInstance()->Add(g_logo);
OHOS::RootView::GetInstance()->Invalidate();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, BOOT_FLOW_PREFIX "开机Logo:结束显示");
});
LOS_Msleep(500);
}
if (g_showOtaLogo)
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, BOOT_FLOW_PREFIX "OTA Logo:已显示,跳过重复显示");
return;
}
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, BOOT_FLOW_PREFIX "OTA Logo:开始显示");
g_showOtaLogo = true;
g_ota_logo = new OHOS::UIImageView();
g_ota_logo->SetPosition(0, 0, OHOS::Screen::GetInstance().GetWidth(), OHOS::Screen::GetInstance().GetHeight());
{
OHOS::RootView::GetInstance()->Add(g_ota_logo);
OHOS::RootView::GetInstance()->Invalidate();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, BOOT_FLOW_PREFIX "OTA Logo:结束显示");
});
LOS_Msleep(500);
}
void ShowGraphicChargingLogo(void)
{
if (g_showChargingLogo) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, BOOT_FLOW_PREFIX "充电Logo:已显示,跳过重复显示");
return;
}
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, BOOT_FLOW_PREFIX "充电Logo:开始显示");
g_showChargingLogo = true;
g_charging_logo = new OHOS::UIImageView();
g_charging_logo->SetPosition(0, 0, OHOS::Screen::GetInstance().GetWidth(), OHOS::Screen::GetInstance().GetHeight());
{
OHOS::RootView::GetInstance()->Add(g_charging_logo);
OHOS::RootView::GetInstance()->Invalidate();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, BOOT_FLOW_PREFIX "充电Logo:结束显示");
});
LOS_Msleep(500);
}
void boot_animation_init(void)
{
+ boot_animation_flag = false;
taskcfg.task_handle = g_boot_animation_task_handle;
taskcfg.attr.name = "boot_animation_service";
taskcfg.attr.priority = TASK_PRIORITY_APP;
taskcfg.func = boot_animation_task;
taskcfg.use_mem = USE_EXTEND_MEM;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, BOOT_FLOW_PREFIX "开机动画初始化:创建动画任务");
errcode_t ret = uapi_create_osThread_custom(&taskcfg);
if (ret != ERRCODE_SUCC)
{
OHOS::VibratorManager::GetInstance()->RegisterVibratorFunc(custom_VibratorFunc);
/* ---------------------------------- 开机震动一次 ---------------------------------- */
-#ifdef BOARD_FD272
+ PRINT("[BOOT_FLOW][开机流程] 启动阶段:开机开始震动\n");
custom_VibratorFunc_int(5);
custom_VibratorFunc_int(5);
-#else
- custom_VibratorFunc_int(0);
-#endif
+
/* -------------------------------------------------------------------------- */
return ERRCODE_SUCC;