/*
 * @file: 
 * @Author: Lida
 * @Date: 2022-11-30 09:43:13
 * @LastEditors: LiDa
 * @LastEditTime: 2023-12-28 15:44:05
 */

#include "app_nb.h"
#include "../../com/svc/svc_com.h"
#include "../../cloud/svc/svc_cloud.h"
#include "param/svc/svc_flash.h"
#include "../../log/svc/svc_log.h"
#include "../../cloud/svc/svc_cloud_protocol.h"
// #include "../../iwdg/bsp/bsp_iwdg.h"

/**
 * @brief: NB发送线程
 * @param  {void}
 * @return {void}
 * @note:
 * @see:
 */
static void Nb_Send(void){
    E_Nb_State nb_cur_state;
    //Svc_Com_Core_Func_Init((gw_u8*)__FUNCTION__);
    //Svc_Log_Printf(LOG_DEBUG,"%s \r\n",__FUNCTION__);	    
    Svc_Nb_Fail_Check();
    if(Svc_Nb_Resend_Check()==E_CHECK_FAIL){
        return;
    }
    nb_cur_state=Svc_Nb_Core_Get_Cur_State();
    switch (nb_cur_state)
    {
        case E_NB_OFF:
            break;
        case E_NB_NET_INIT:
            Svc_Nb_Core_Connect_Net();
            break;   
        case E_NB_RUN:
            Svc_Nb_Core_Run();
            break;
        case E_NB_SLEEP:
            break;  
        case E_NB_NO_NET:
            break;  
        default:
            break;
    }
}

/**
 * @brief: NB接收线程
 * @param  {void}
 * @return {void}
 * @note: 
 * @see: 
 */
static void Nb_Recv(void){
    //Svc_Com_Core_Func_Init((gw_u8*)__FUNCTION__);
    Svc_Nb_Uart_Recv();
}

/**
 * @brief: NB模块线程
 * @param  {void}
 * @return {void}
 * @note: 
 * @see: 
 */
void App_Nb_Task(void){
    S_Flash_Data *ps_flash;
    S_Cloud_Data *ps_cloud;   
    // Svc_Log_Printf(LOG_DEBUG,"%s \r\n",__FUNCTION__);	
    ps_cloud=Svc_Cloud_Get_Data();
    ps_flash=Svc_Flash_Get_Data();
    // Svc_Wdg_Feed(0);
    Bsp_Iwdg_Feed();//喂狗<<

    if(Svc_Com_Sys_Get_Work_Mode() != E_FactoryTestMode)	
    {
        /*供电不足导致flash无法工作，NB线程不执行，直接返回*/
        if(ps_flash->u8flashCheckFail==1){
            return;
        }
        /*云模块空闲的时候不需要发送数据，NB线程不执行，直接返回*/
        if(Svc_Cloud_Is_Busy()==E_CHECK_FAIL){
            ps_cloud->u16FrameSerial=1;
            return;
        }
    }
    //  /*唤醒后需要重新初始化IO口*/
    if(Svc_Nb_Core_Get_Cur_State()==E_NB_OFF){
        Svc_Nb_Core_Init();
    }	
	// Svc_Wdg_Feed(0);	
    Bsp_Iwdg_Feed();//喂狗<<
    Nb_Send();
		// Svc_Wdg_Feed(0);	
    Bsp_Iwdg_Feed();//喂狗<<
    Nb_Recv(); 	
		// Svc_Wdg_Feed(0);
    Bsp_Iwdg_Feed();//喂狗<<
}
