

#define CLS_BSP_FDCAN

#ifdef CLS_BSP_FDCAN

#include "fdcan.h"

typedef FDCAN_TxHeaderTypeDef CLS_BSP_TxHeaderType;

#define CREATE_BSP_CAN_HEADER(identifier, datalength) \
{ \
    .IdType = FDCAN_STANDARD_ID, \
    .Identifier = identifier, \
    .TxFrameType = FDCAN_DATA_FRAME, \
    .DataLength = datalength, \
    .ErrorStateIndicator = FDCAN_ESI_PASSIVE, \
    .BitRateSwitch = FDCAN_BRS_OFF, \
    .FDFormat = FDCAN_CLASSIC_CAN, \
    .TxEventFifoControl = FDCAN_NO_TX_EVENTS, \
    .MessageMarker = 0xCC, \
}

#define CLS_BSP_DLC_BYTES_1 FDCAN_DLC_BYTES_1
#define CLS_BSP_DLC_BYTES_2 FDCAN_DLC_BYTES_2
#define CLS_BSP_DLC_BYTES_3 FDCAN_DLC_BYTES_3
#define CLS_BSP_DLC_BYTES_4 FDCAN_DLC_BYTES_4
#define CLS_BSP_DLC_BYTES_5 FDCAN_DLC_BYTES_5
#define CLS_BSP_DLC_BYTES_6 FDCAN_DLC_BYTES_6
#define CLS_BSP_DLC_BYTES_7 FDCAN_DLC_BYTES_7
#define CLS_BSP_DLC_BYTES_8 FDCAN_DLC_BYTES_8

#define CLS_CAN_FILTER_DISABLE  FDCAN_FILTER_DISABLE
#define CLS_CAN_FILTER_TO_RXFIFO0 FDCAN_FILTER_TO_RXFIFO0
#define CLS_CAN_FILTER_TO_RXFIFO1 FDCAN_FILTER_TO_RXFIFO1

#define  CLS_BSP_CAN_FILTER_LIST FDCAN_FILTER_DUAL

#endif


typedef struct  {
    uint32_t filterIndex;
    uint32_t filterDestination;
    uint32_t filterMode;
    uint16_t id0;
    uint16_t id1;
} CLS_BSP_CAN_UniversalFilter;


HAL_StatusTypeDef CLS_BSP_CAN_AddMessageToSend(CLS_BSP_TxHeaderType * header, uint8_t * data);

HAL_StatusTypeDef CLS_BSP_CAN_SetUniversalFilter(const CLS_BSP_CAN_UniversalFilter * filter);