/*
 * @Description: NB模块-app层
 * @Author: yangsw
 * @Date: 2021-06-04 14:05:58
 * @LastEditTime: 2022-06-11 10:56:00
 * @LastEditors: yangsw
 * @Reference:
 */
#include "app_nb.h"
#include "../../com/svc/svc_com.h"
#include "../../cloud/svc/svc_cloud.h"
#include "../../flash/svc/svc_flash.h"
#include "../../log/svc/svc_log.h"

/**
 * @brief: NB发送线程
 * @param  {void}
 * @return {void}
 * @note:
 * @see:
 */
static void Nb_Send(void)
{
    E_Nb_State nb_cur_state;
    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_Nb_Uart_Recv();
}

/**
 * @brief: NB模块线程
 * @param  {void}
 * @return {void}
 * @note:
 * @see:
 */
void App_Nb_Task(void)
{
    S_Flash_Data *ps_flash;
    ps_flash = Svc_Flash_Get_Data();
    Bsp_Iwdg_Feed();
    /*供电不足导致flash无法工作，NB线程不执行，直接返回*/
    if (ps_flash->u8flashCheckFail == 1)
    {
        return;
    }
    /*云模块空闲的时候不需要发送数据，NB线程不执行，直接返回*/
    if (Svc_Cloud_Is_Busy() == E_CHECK_FAIL)
    {
        return;
    }
    /*唤醒后需要重新初始化IO口*/
    if (Svc_Nb_Core_Get_Cur_State() == E_NB_OFF)
    {
        Svc_Nb_Core_Init();
    }
    Nb_Send();
    Bsp_Iwdg_Feed();
    Nb_Recv();
    Bsp_Iwdg_Feed();
}

void App_Nb_Factory_Task(void)
{
    Nb_Send();
    Nb_Recv();
}
