Example #1
0
/*****************************************************************************
 函 数 名  : power_off_timeout_isr
 功能描述  : 开机定时器处理,检测C核状态
 输入参数  :
 输出参数  : 无
 返 回 值  :
 调用函数  :
 被调函数  :
*****************************************************************************/
static int power_on_timeout_isr( void )
{
    c_power_st_e status = POWER_OS_OK;
    DRV_RUN_MODE run_mode = get_run_mode();

    pr_dbg("power_on_timeout_isr, system had been powered one minute ago\n ");

#if (MBB_CHARGE == FEATURE_ON)
    if(chg_is_powdown_charging())
    {
        pr_dbg("CHG:no need to check c core status!\n ");
        return 0;
    }
#endif /*MBB_CHG_PLATFORM_V7R2*/

    if(RUN_MODE_NORMAL == run_mode)
    {
        /* 读取C核启动状态 */
        status = power_on_c_status_get();

#if defined(DRV_BUILD_SEPARATE)
        /* C核异常,设置normal模式启动失败 */
        if(status < POWER_BSP_OK)
#else
        if(status < POWER_MSP_OK)
#endif
        {
           pr_dbg("c core power on fail!\n ");
           /* 进入recovery模式 */
           bsp_drv_power_reboot();

           /* coverity[no_escape] */
           for(;;) ;
        }
    }
    else if(RUN_MODE_RECOVERY == run_mode){
        /* for test */
       #if 0
           bsp_drv_power_reboot();
           /* 等待系统重启 */
           while(1);
       #endif
    }

    pr_dbg("system power on ok!\n ");

    /* clear warm boot cnt */
    power_on_wdt_cnt_set();

    (void)bsp_softtimer_free(&power_item_info.on_timer);

    return 0;
}
/*****************************************************************************
 函 数 名  : power_on_mode_get
 功能描述  : 获取开机模式
 输入参数  :
 输出参数  : 无
 返 回 值  :
 调用函数  :
 被调函数  :
*****************************************************************************/
static void power_on_mode_get( void )
{
    DRV_START_MODE mode = DRV_START_MODE_NORMAL;
    DRV_RUN_MODE boot_mode = get_run_mode();
    DRV_CHARGING_MODE pwd_flag = get_pd_charge_flag();

    if((RUN_MODE_NORMAL == boot_mode)){
        mode = DRV_START_MODE_NORMAL;
    }
    else if((RUN_MODE_RECOVERY == boot_mode) && ((POWER_DOWN_CHARGING_MODE == pwd_flag)))
    {
        mode = DRV_START_MODE_CHARGING;
    }
    else if((RUN_MODE_RECOVERY == boot_mode) && ((NORMAL_CHARGING_MODE == pwd_flag)))
    {
        mode = DRV_START_MODE_UPDATE;
    }

    power_item_info.mode = mode;
}
Example #3
0
/*****************************************************************************
 函 数 名  : power_on_mode_get
 功能描述  : 获取开机模式
 输入参数  :
 输出参数  : 无
 返 回 值  :
 调用函数  :
 被调函数  :
*****************************************************************************/
static void power_on_mode_get( void )
{
    DRV_START_MODE mode = DRV_START_MODE_NORMAL;
    DRV_RUN_MODE boot_mode = get_run_mode();
    DRV_CHARGING_MODE pwd_flag = get_pd_charge_flag();

#if (FEATURE_ON == MBB_DLOAD)
    if((RUN_MODE_NORMAL == boot_mode) && (POWER_DOWN_CHARGING_MODE != pwd_flag))
    {
        /* 正常模式 */
        mode = DRV_START_MODE_NORMAL;
    }
    else if((RUN_MODE_NORMAL == boot_mode) && ((POWER_DOWN_CHARGING_MODE == pwd_flag)))
    {
        /* 关机充电模式 */
        mode = DRV_START_MODE_CHARGING;
    }
    else if(RUN_MODE_RECOVERY == boot_mode)
    {
        /* 升级模式 */
        mode = DRV_START_MODE_UPDATE;     
    }
#else
    if((RUN_MODE_NORMAL == boot_mode)){
        mode = DRV_START_MODE_NORMAL;
    }
    else if((RUN_MODE_RECOVERY == boot_mode) && ((POWER_DOWN_CHARGING_MODE == pwd_flag)))
    {
        mode = DRV_START_MODE_CHARGING;
    }
    else if((RUN_MODE_RECOVERY == boot_mode) && ((NORMAL_CHARGING_MODE == pwd_flag)))
    {
        mode = DRV_START_MODE_UPDATE;
    }
#endif

    power_item_info.mode = mode;
}