/*
 * @Description: 低功耗模块-svc层
 * @Author: yangsw
 * @Date: 2021-06-28 13:45:10
 * @LastEditTime: 2024-01-16 18:21:41
 * @LastEditors: LiDa
 * @Reference:
 */
#include "svc_lp.h"
#include "../../log/svc/svc_log.h"
#include "../../cloud/svc/svc_cloud.h"
#include "../../cloud/svc/svc_cloud_protocol.h"
#include "../../key/svc/svc_key.h"
#include "../../bat/app/app_bat.h"
#include "../../timer/svc/svc_timer.h"
#include "../../nb/svc/svc_nb_core.h"
#include "../../lp/svc/svc_lp.h"
#include "../../rtc/svc/svc_rtc.h"
#include "../../ir/svc/svc_ir_uart.h"
#include "param/svc/svc_flash.h"
#include "../../clock/svc/svc_clock.h"
#include "../../nb/svc/svc_nb_uart.h"
#include "../../ir/svc/svc_ir_protocol.h"
#include "../../led/app/app_led.h"
#include "hci/led/app/sr_app_led.h"
/**
 * @brief: 进入低功耗睡眠
 * @param  {void}
 * @return {void}
 * @note:
 * @see:
 */
static void Lp_Sleep(void)
{
    // Svc_Log_Printf(LOG_INFO,"sleep!");
    Bsp_Lp_Func_Disable();
    Bsp_Lp_Gpio_Setting();
    // BSP_CLOCK_16M();
    Bsp_Lp_Sleep();
}

/**
 * @brief: MCU是否忙
 * @param  {void}
 * @return {E_Result_Check} E_CHECK_OK：忙，E_CHECK_FAIL：空闲
 * @note:
 * @see:
 */
static E_Result_Check Is_Busy(void)
{
    /*计量模块忙*/
    E_Result_Check e_check;
    if (Svc_Pulse_Is_Busy() == E_CHECK_OK)
    {
        e_check = E_CHECK_OK;
    }
    // /*云模块忙*/
    if ((Svc_Cloud_Is_Busy() == E_CHECK_OK) || (Svc_Cloud_Wait_Cmd() != 0))
    {
        e_check = E_CHECK_OK;
    }
    else
    {
        if (Svc_Nb_Core_Get_Cur_State() != E_NB_OFF)
        {
#if LOG_FUNC_ENABLE
            Svc_Log_Printf(LOG_INFO, "%s->ENTER THIS PLACE", __FUNCTION__);
            Svc_Cloud_Event_Info_Printf();
            Svc_Led_Event_Log_Print();
#endif
            Svc_Nb_Core_Set_Cur_State(E_NB_OFF); // 设置NB状态为关机
            Svc_Cloud_Resend_Clear();
            Svc_Nb_Faile_Reset();
            SR_AppLedClearWork(LED_NB_START);
            SR_AppLedClearWork(LED_NB_NET_INIT);
            SR_AppLedClearWork(LED_NB_NET_ERR);
        }
    }
    /*按键模块忙*/
    if (SR_Wm_KeyIsBusy() == E_CHECK_OK)
    {
        e_check = E_CHECK_OK;
    }
    /*红外模块忙*/
    if (Svc_Ir_Is_Busy() == E_CHECK_OK || Svc_Ir_Wait_Cmd() != 0)
    {
        e_check = E_CHECK_OK;
    }
    else
    {
        if (Svc_Ir_Core_Get_Cur_State() != E_IR_OFF)
        {
            Svc_Ir_Uart_Lp(); // 设置IR状态为关机
        }
    }
    return e_check ? E_CHECK_FAIL : E_CHECK_OK;
}

/**
 * @brief: 外设初始化
 * @param  {void}
 * @return {void}
 * @note:
 * @see:
 */
void Func_Init(void)
{
// BSP_CLOCK_64M();
// Svc_Key_Wakeup_Init();
#if LOG_FUNC_ENABLE
    Svc_Log_Init();
#endif
    Svc_Timer_Init();
    Svc_Bat_Wakeup_Init();
    // Svc_Cloud_Refresh_Time();//更新当前时间
    Svc_Nb_Wake_Init();
    // Svc_Flash_Wakeup_Init();
}

/**
 * @brief: 低功耗睡眠
 * @param  {void}
 * @return {void}
 * @note:
 * @see:
 */
void Svc_Lp_Sleep(void)
{
    /*MCU进入睡眠*/
    if (Is_Busy() == E_CHECK_FAIL)
    {
        // Svc_Nb_Core_Set_Cur_State(E_NB_OFF);//设置NB状态为关机
        Lp_Sleep();
        Bsp_Iwdg_Feed(); // 喂狗<<
        Func_Init();

        // Svc_Bat_Real_Time();
    }
}

void Svc_Lp_Sleep_Test(void)
{
    // if((Svc_Pulse_Is_Busy()==E_CHECK_OK)||(Svc_Key_Is_Busy()==E_CHECK_OK)){
    //     return;
    // }
    // if(Svc_Nb_Core_Get_Cur_State()!=E_NB_OFF){
    //     Svc_Nb_Core_Set_Cur_State(E_NB_OFF);
    // }
    // Lp_Sleep();
    // Func_Init();
    // // Svc_Pulse_Wakeup_Init();
    // // BSP_CLOCK_2M();
    // // Svc_Timer_Init();
    // // Svc_Log_Init();

    // Svc_Bat_Real_Time();
}
