#include "can_inf.h"
#include "./win32/can_base.h"


/**
 * @brief       can初始化
 * @param[in]   CAN_INF_CFG_STRU *pCanInitCfg can初始化配置
 * @return      int32_t
 * @retval      0:正常  !0:错误
 * @par         修改日志:
 * Date                Author     Description           \n
 * 2022-10-20           JHC        创建初始版本          \n
 * 2023-11-23           TBH        跨平台适配
 * 
*/
int32_t Can_Init(CAN_INF_CFG_STRU *pCanInitCfg)
{
    int32_t ret = 0;
    if(pCanInitCfg == NULL)
    {
        return -1;
    }

    ret |= can_init(pCanInitCfg->canObjId);
    ret |= can_set_bitrate(pCanInitCfg->canObjId,pCanInitCfg->canBitRate);

    return ret;
}

/**
 * @brief       设置can滤波
 * @param[in]   uint32_t canObjId
 * @param[in]   unsigned long accCode 帧过滤验收码
 * @param[in]   unsigned long accMask  帧过滤屏蔽码
 * @param[in]   unsigned char filter  滤波方式。=1 表示单滤波，=0 表示双滤波
 * @return      int32_t
 * @retval      0:正常  !0:错误
 * @par         修改日志:
 * Date                Author     Description           \n
 * 2022-10-20           JHC        创建初始版本          \n
 * 2023-11-23           TBH        跨平台适配            \n
*/
int32_t Can_FilterConfig(uint32_t canObjId, unsigned long accCode, unsigned long accMask, unsigned char filter)
{
    return can_setFilter(canObjId, accCode, accMask, filter);
}

/**
 * @brief       发送CAN数据
 * @param[in]   uint32_t canObjId
 * @param[in]   CanMsg *txMsg can数据
 * @return      int32_t
 * @retval      0:正常  !0:错误
 * @par         修改日志:
 * Date                Author     Description           \n
 * 2022-10-20           JHC        创建初始版本          \n
 * 2023-11-23           TBH        跨平台适配            \n
*/
int32_t Can_SendMsg(uint32_t canObjId, CanMsg *txMsg)
{
    return can_send(canObjId,txMsg);
}

/**
 * @brief       接收CAN数据
 * @param[in]   uint32_t canObjId
 * @param[in]   CanMsg *rxMsg can数据
 * @return      int32_t
 * @retval      0:正常  !0:错误
 * @par         修改日志:
 * Date                Author     Description           \n
 * 2022-10-20           JHC        创建初始版本          \n
 * 2023-11-23           TBH        跨平台适配            \n
*/
int32_t Can_RecvMsg(uint32_t canObjId, CanMsg *rxMsg)
{
    return can_rcv(canObjId,rxMsg);
}