#include "sr_app_lp.h"

#include "log/sr_log.h"
#include "lowpower/sr_lp.h"


//#include "sr_app_wtd.h"

#include "lp/bsp/sr_bsp_lp.h"
#include "cloud/app/sr_app_cloud.h"
#include "hci/led/app/sr_app_led.h"
#include "hci/key/app/sr_app_key.h"

#include "ir/svc/svc_ir_protocol.h"



static void _LpBefore(void)
{
    SR_LOG(DEBUG,"before lp!");

    BspLpFuncDisable();
    BspLpGpioSet();
    // BSP_CLOCK_16M();
}

static void _LpAfter(void)
{
    // BSP_CLOCK_64M();
    //LOG初始化
    SR_LogUartInit();
    SR_LOG(DEBUG,"after lp!");

    //定时器初始化
    Svc_Timer_Init();


    //电池模块初始化
    Svc_Bat_Wakeup_Init();


    //网卡模块硬件初始化
    SR_AppNetdevHwInit();

}

static int _LpIsBusy(void)
{
    int ret = 0;

    /*计量模块忙*/
    if (Svc_Pulse_Is_Busy() == E_CHECK_OK)
    {
        ret  = 1;
    }
    // /*云模块忙*/
    if ((Svc_Cloud_Is_Busy() == E_CHECK_OK) || (Svc_Cloud_Wait_Cmd() != 0))
    {
        ret = 1;
    }
    else
    {
      
#if  0  //待完善
        //云空闲状态
        if (Svc_Nb_Core_Get_Cur_State() != E_NB_OFF)
        {
#if 0
            SR_LOG(INFO, "cld idle, netdev off!);
            //Svc_Cloud_Event_Info_Printf();
            //Svc_Led_Event_Log_Print();
#endif
            //待完善：LW_ERR
            Svc_Nb_Core_Set_Cur_State(E_NB_OFF); // 设置NB状态为关机
            Svc_Cloud_Resend_Clear();
            Svc_Nb_Faile_Reset();
            SR_AppLedClearFlag(LED_NB_START);
            SR_AppLedClearFlag(LED_NB_NET_INIT);
            SR_AppLedClearFlag(LED_NB_NET_ERR);
        }
#endif
    }
    /*按键模块忙*/
    if (SR_AppKeyIsBusy())
    {
        ret = 1;
    }
    /*红外模块忙*/
    if (Svc_Ir_Is_Busy() == E_CHECK_OK || Svc_Ir_Wait_Cmd() != 0)
    {
        ret = 1;

    }
    else
    {
        if (Svc_Ir_Core_Get_Cur_State() != E_IR_OFF)
        {
            Svc_Ir_Uart_Lp(); // 设置IR状态为关机
        }
    }
    return ret;
}


static SR_LP_MODULE_T lpModule ={
    .name = "lp",
    .before = _LpBefore,
    .after = _LpAfter,
    .isBusy = _LpIsBusy,
};

int SR_AppLpInit(void)
{
    //设置休眠模式
    SR_LpSetSleepMode(SR_PM_SLEEP_DEEP);

    //注册休眠模块
    SR_AppLpModuleReg(&lpModule,0);

    return 0;
}










