/*
 * @Filename:
 * @Descripttionn:
 * @version:
 * @Author: TianYu
 * @Date: 2023-05-08 10:46:43
 * @LastEditTime: 2023-05-08 11:12:13
 */

#include "CAN_CFG.h"
//#include "NM_protocol.h"
#include "RSCAN.h"
#include "RTE_CAN.h"
#include "NMUserControl.h"
#include "PowerManag_User.h"

uint8_t GetBusOffState(void)
{
    uint8_t rscan_st = RSCAN0_CH0_Get_Busoff_Status( );
    return rscan_st;
}

void AbortAllCanTx(void)
{

    RSCAN0_CH0_Abort(RSCAN_CHANNEL_BUF_0);
    RSCAN0_CH0_Abort(RSCAN_CHANNEL_BUF_1);
    RSCAN0_CH0_Abort(RSCAN_CHANNEL_BUF_2);
    RSCAN0_CH0_Abort(RSCAN_CHANNEL_BUF_3);
    RSCAN0_CH0_Abort(RSCAN_CHANNEL_BUF_4);
    RSCAN0_CH0_Abort(RSCAN_CHANNEL_BUF_5);
    RSCAN0_CH0_Abort(RSCAN_CHANNEL_BUF_6);
    RSCAN0_CH0_Abort(RSCAN_CHANNEL_BUF_7);
    RSCAN0_CH0_Abort(RSCAN_CHANNEL_BUF_8);
    RSCAN0_CH0_Abort(RSCAN_CHANNEL_BUF_9);
    RSCAN0_CH0_Abort(RSCAN_CHANNEL_BUF_10);
    RSCAN0_CH0_Abort(RSCAN_CHANNEL_BUF_11);
    RSCAN0_CH0_Abort(RSCAN_CHANNEL_BUF_12);
    RSCAN0_CH0_Abort(RSCAN_CHANNEL_BUF_13);
}

void CanBusoffRecover(void)
{

    RSCAN0_CH0_Busoff_Recover( );
}
uint8_t CAN_NM_TX_STATUS;
uint8_t CAN_APP_TX_STATUS;
uint8_t CAN_NM_REC_STATUS;
void    NM_CanInit(void)
{
    // MSCAN_30_Init();
    CAN_NM_TX_STATUS  = 0u;
    CAN_APP_TX_STATUS = 0u;
    CAN_NM_REC_STATUS = 0U;
    Can_Init( );
}

void CAN_SET_APP_SEND(uint8_t status)
{
    CAN_APP_TX_STATUS = status;
}
void CAN_SET_NM_SEND(uint8_t status)
{
    CAN_NM_TX_STATUS = status;
}
void CAN_SET_NM_REC(uint8_t status)
{
    CAN_NM_REC_STATUS = status;
}

uint8_t CAN_GET_NM_REC(void)
{
    return CAN_NM_REC_STATUS;
}
uint8_t CAN_GET_APP_SEND(void)
{
    return CAN_APP_TX_STATUS;
}
uint8_t CAN_GET_NM_SEND(void)
{
    return CAN_NM_TX_STATUS;
}
void CanRequestSleep(void)
{
    u32OsekAPPFlag = 0UL;
    // 不要打开
    //	RSCAN0_Sleep_Init();
}

void SetCanSTBLevel(uint8_t n)
{
    // 不要打开
    //  if ( n == NM_LOW )
    //  {
    //      ;
    //  }
    //  else if ( n == NM_HIGH )
    //  {
    //      ;
    //  }
}

void CanTxMsg(uint8_t SendCh, uint8_t *data, uint8_t len, uint32_t id)
{
    uint32_t       i;
    CAN_Frame_st_t m_msg;

    if ( SYS_OPR_STAT_HALT )
    {
        return;
    }
    NmSetLastId(id);

    m_msg.u32CANID      = id;
    m_msg.u8CANLEN      = len;
    m_msg.u8CANFrameIDE = 1;
    for ( i = 0; i < m_msg.u8CANLEN; i++ )
    {
        m_msg.unCANData.u8CANData [ i ] = data [ i ];
    }

    switch ( id )
    {
        case 0x18FFA017:
            if ( CAN_NM_TX_STATUS == 0u )
            {
                RSCAN0_CH0_Set_TXBUF_Data(RSCAN_CHANNEL_BUF_2, &m_msg);
            }
            break;
        case 0x10FF4117:
            if ( CAN_APP_TX_STATUS == 0u )
            {
                RSCAN0_CH0_Set_TXBUF_Data(RSCAN_CHANNEL_BUF_3, &m_msg);
            }
            break;
        case 0x0A18A000:
            if ( CAN_APP_TX_STATUS == 0u )
            {
                RSCAN0_CH0_Set_TXBUF_Data(RSCAN_CHANNEL_BUF_4, &m_msg);
            }
            break;

        case 0x0810A000:
            if ( CAN_APP_TX_STATUS == 0u )
            {
                RSCAN0_CH0_Set_TXBUF_Data(RSCAN_CHANNEL_BUF_5, &m_msg);
            }
            break;
        case 0x18FFC321:
            if ( CAN_APP_TX_STATUS == 0u )
            {
                RSCAN0_CH0_Set_TXBUF_Data(RSCAN_CHANNEL_BUF_6, &m_msg);
            }
            break;
        case 0x18FEFC17:
            if ( CAN_APP_TX_STATUS == 0u )
            {
                RSCAN0_CH0_Set_TXBUF_Data(RSCAN_CHANNEL_BUF_7, &m_msg);
            }
            break;
        case 0x18D00017:
            if ( CAN_APP_TX_STATUS == 0u )
            {
                RSCAN0_CH0_Set_TXBUF_Data(RSCAN_CHANNEL_BUF_8, &m_msg);
            }
            break;

        case 0x0CFE6CEE:
            if ( CAN_APP_TX_STATUS == 0u )
            {
                RSCAN0_CH0_Set_TXBUF_Data(RSCAN_CHANNEL_BUF_9, &m_msg);
            }
            break;
        case 0x18FF6121:
            if ( CAN_APP_TX_STATUS == 0u )
            {
                RSCAN0_CH0_Set_TXBUF_Data(RSCAN_CHANNEL_BUF_10, &m_msg);
            }
            break;
        case 0x18FEC1EE:
            if ( CAN_APP_TX_STATUS == 0u )
            {
                RSCAN0_CH0_Set_TXBUF_Data(RSCAN_CHANNEL_BUF_11, &m_msg);
            }
            break;

        case 0x18FEE6EE:
            if ( CAN_APP_TX_STATUS == 0u )
            {
                RSCAN0_CH0_Set_TXBUF_Data(RSCAN_CHANNEL_BUF_12, &m_msg);
            }
            break;
        case 0x18A97121:
            if ( CAN_APP_TX_STATUS == 0u )
            {
                RSCAN0_CH0_Set_TXBUF_Data(RSCAN_CHANNEL_BUF_13, &m_msg);
            }
            break;

        default:
            break;
    }
}