// #include "Can_User.h"
// #include <string.h>
// #include "can.h"
// #include "RTE.h"
// #include  "CAN_CH0_CAN_Communication_Matrix.h"


// __align(4)
// uint32_t pRXBuff[CAN_RX_MSG_Block * CAN_CH0_ID_TOTAL_MAX];
// uint32_t pTXBuff[CAN_TX_MSG_Block * CAN_CH0_ID_SEND_TOTAL];
// static RSCAN0BusoffMonitorStruct RSCAN0Busoff;

// void Can_Init(void)
// {
//     can_config_st_t Can_Config;
//     Can_Config.ch = CAN_CH_0;
//     Can_Config.freq = CAN_500Kbps;
//     Can_Config.MASK[0] = 0x001fffffU;
//     Can_Config.MASK[1] = 0x000fffffU;
//     Can_Config.MASK[2] = 0x1fffffffU;
//     Can_Config.MASK[3] = 0x1fffffffU;
//     Can_Config.rx_callback = Can_Rx_Cak;
//     COM_CAN_Init();
//     rte_can_init(&Can_Config);

//     Can_Tx_Apply_Buff();
//     Can_RX_Apply_Buff();

//     RTE_GPIO_Set_Level(RTE_GPIO_PORT05_PIN02,RTE_GPIO_LEVEL_LOW);

// }

// /**
//  * @brief 用于申请RXBUFF CAN0MSG00~CAN0MSG07
//  *
//  */
// void Can_RX_Apply_Buff(void)
// {
//     CAN_RecvMsg.Id = 0x101;
//     CAN_RecvMsg.IDE = CAN_Id_Standard;
//     CAN_RecvMsg.CacheType = CAN_CacheType_Rx_NoMask;
//     CAN_RecvMsg.RTR = CAN_RTR_Data;
//     CAN_RecvMsg.Interrupt = ENABLE;
//     CAN_MessageCache_DeInit(CAN0MSG01);
//     CAN_MessageCache_Init(CAN0MSG01, &CAN_RecvMsg);
//     CAN_MessageCache_OverWriteConfig(CAN0MSG01, ENABLE);


//     // CAN_RecvMsg.Id = DIAG_ID_Rx_PHY;
//     // CAN_RecvMsg.IDE = CAN_Id_Standard;
//     // CAN_RecvMsg.CacheType = CAN_CacheType_Rx_NoMask;
//     // CAN_RecvMsg.RTR = CAN_RTR_Data;
//     // CAN_RecvMsg.Interrupt = ENABLE;
//     // CAN_MessageCache_DeInit(CAN0MSG03);
//     // CAN_MessageCache_Init(CAN0MSG03, &CAN_RecvMsg);
//     // CAN_MessageCache_OverWriteConfig(CAN0MSG03, ENABLE);

//     // CAN_RecvMsg.Id = DIAG_ID_Rx_FUN;
//     // CAN_RecvMsg.IDE = CAN_Id_Standard;
//     // CAN_RecvMsg.CacheType = CAN_CacheType_Rx_NoMask;
//     // CAN_RecvMsg.RTR = CAN_RTR_Data;
//     // CAN_RecvMsg.Interrupt = ENABLE;
//     // CAN_MessageCache_DeInit(CAN0MSG04);
//     // CAN_MessageCache_Init(CAN0MSG04, &CAN_RecvMsg);
//     // CAN_MessageCache_OverWriteConfig(CAN0MSG04, ENABLE);
// }

// /**
//  * @brief 用于申请TXBUFF
//  *
//  */
// void Can_Tx_Apply_Buff(void)
// {
//     CanTxRxMsg CAN_SendMsg;
//     CanTxRxMsg CAN_SendMsg_Diag_Tx;
// 	CAN_SendMsg.Id = 0x500;
// 	CAN_SendMsg.IDE = CAN_Id_Standard;
// 	CAN_SendMsg.CacheType = CAN_CacheType_Tx;
// 	CAN_SendMsg.RTR = CAN_RTR_Data;
// 	CAN_RecvMsg.Interrupt = DISABLE;
// 	CAN_SendMsg.DLC = 8;
//     for (uint8_t i = 0; i < CAN_SendMsg.DLC; i++)
//     {
//         CAN_SendMsg.Data[i] = 0;
//     }

//     CAN_MessageCache_DeInit(CAN0MSG08);
//     CAN_MessageCache_Init(CAN0MSG08, &CAN_SendMsg);

    
// 	// CAN_SendMsg_Diag_Tx.Id = DIAG_ID_Tx;
// 	// CAN_SendMsg_Diag_Tx.IDE = CAN_Id_Standard;
// 	// CAN_SendMsg_Diag_Tx.CacheType = CAN_CacheType_Tx;
// 	// CAN_SendMsg_Diag_Tx.RTR = CAN_RTR_Data;
// 	// CAN_SendMsg_Diag_Tx.Interrupt = DISABLE;
// 	// CAN_SendMsg_Diag_Tx.DLC = 8;
//     // for (uint8_t i = 0; i < CAN_SendMsg_Diag_Tx.DLC; i++)
//     // {
//     //     CAN_SendMsg_Diag_Tx.Data[i] = 0;
//     // }

//     // CAN_MessageCache_DeInit(CAN0MSG09);
//     // CAN_MessageCache_Init(CAN0MSG09, &CAN_SendMsg_Diag_Tx);
// }
// /**
//  * @brief 用于接收回调函数
//  * @code
//  */
// void Can_Rx_Cak(CanTxRxMsg *Msg)
// {
//     Co_Can_Buff_Set(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(Msg->Id), Msg->DLC, Msg->Data);

//     if ((Msg->Id == DIAG_ID_Rx_FUN) || (Msg->Id == DIAG_ID_Rx_PHY))
//     {
//       DoCAN_L_Data_Indication(Msg->Id, Msg->DLC, Msg->Data);
//     }
// }
// /**
//  * @brief CAN库初始化TX/RX
//  *
//  */
// void COM_CAN_Init(void)
// {
//     memset(pRXBuff, 0, sizeof(pRXBuff));
//     CAN_CH0_CanMsgOp.CAN_MSG_Analysis = (st_CANMsgStruct *)pRXBuff;
//     CAN_CH0_CanMsgOp.pAttrubute = CAN_CH0_CAN_MSG_CONST_ARRAY;
//     CAN_CH0_CanMsgOp.Total_Msg = CAN_CH0_ID_TOTAL_MAX;
//     CAN_CH0_CanMsgOp.u8CAN_RX_ENABLE = CAN_N_RX_Enable;
//     Can_RX_BuffInit(&CAN_CH0_CanMsgOp, CAN_CH0_CAN_MSG_CONST_ARRAY, CAN_CH0_ID_TOTAL_MAX);
//     CAN_RX_SetEnable(&CAN_CH0_CanMsgOp, CAN_N_RX_Enable);

//     memset(pTXBuff, 0, sizeof(pTXBuff));
//     CAN_CH0_CanMsgTxOp.CanMsg = (st_CAN_SendOperation *)pTXBuff;
//     Can_TX_BuffInit(&CAN_CH0_CanMsgTxOp, CAN_CH0_CANSendAttr, CAN_CH0_ID_SEND_TOTAL, COM_APP_Process);
//     CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Enable);
// }


// /**
//  * @brief Buff恢复函数
//  * @param deltaTime 调用时间 单位ms 10MS调用
//  */
// void Can_BusOff_Recover(uint8_t deltaTime)
// {
//     if (get_can_busoff(CAN_CH_0) == 2)
//     {
//         if (RSCAN0Busoff.Status == RSCAN0_BUS_STABLE)
//         {
//             RSCAN0Busoff.Status = RSCAN0_BUS_OFF_LV1;
//         }

//         if (RSCAN0Busoff.Status == RSCAN0_BUS_OFF_LV1)
//         {
//             RSCAN0Busoff.Timer++;
//             if (RSCAN0Busoff.Timer >= RSCAN0_BUS_OFF_LV1_RECOVERY_TIME / deltaTime)
//             {
//                 RSCAN0Busoff.Timer = 0U;

//                 RSCAN0Busoff.Cnt++;
//                 if (RSCAN0Busoff.Cnt >= 10U)
//                 {

//                     RSCAN0Busoff.Cnt = 0U;

//                     RSCAN0Busoff.Status = RSCAN0_BUS_OFF_LV2;
//                 }
//                 reset_busoff(CAN_CH_0);
//             }
//         }
//         else if (RSCAN0Busoff.Status == RSCAN0_BUS_OFF_LV2)
//         {
//             RSCAN0Busoff.Timer++;

//             if (RSCAN0Busoff.Timer >= RSCAN0_BUS_OFF_LV2_RECOVERY_TIME / deltaTime)
//             {
//                 RSCAN0Busoff.Timer = 0U;
//                 reset_busoff(CAN_CH_0);
//             }
//         }
//         else
//         {
//         }
//     }
//     else /* 总线正常,没有Bus-off发生*/
//     {
        
//     }
// }

// /**
//  * @brief 获取busoff状态
//  * @return 0 没有busoff
//  *         1 错误的操作
//  *         2 busoff
//  */
// uint8_t Get_Busoff_Status(void)
// {
//     return get_can_busoff(CAN_CH_0);
// }

// uint8_t COM_APP_Process(st_CAN_Msg *Msg)
// {
//     Can_Write((st_CAN_Msg *)Msg);
//     return 0;
// }

// void Can_Write(st_CAN_Msg *Msg)
// {
//     uint32_t i = 0;
//     CanTxRxMsg CAN_SendMsg;

//     CAN_SendMsg.Id = Msg->MsgID;       /* ID */
//     CAN_SendMsg.DLC = Msg->MsgDLC;     /* Len */
//     CAN_SendMsg.RTR = Msg->MsgRTR;     /* Default 0 */
//     CAN_SendMsg.IDE = CAN_Id_Standard; /* Stand 0 Ext 1 */
//     CAN_SendMsg.CacheType = CAN_CacheType_Tx;

//     for (i = 0; i < CAN_SendMsg.DLC; i++) /* 获取数据 */
//     {
//         CAN_SendMsg.Data[i] = Msg->Msg[i];
//     }

//     switch (CAN_SendMsg.Id)
//     {
//     case 0x500:
//         CAN_Transmit(CAN0MSG08, &CAN_SendMsg);
//         break;

//     default:
//         break;
//     }
// }