chg-stn-motherboard-ti-mcu/ivec_ECU/ivec_ecu_can/inc/ivec_ecu_can.h

96 lines
3.3 KiB
C

#ifndef IVEC_ECU_CAN_H_
#define IVEC_ECU_CAN_H_
#include "../Core/Include/ivec_mcal_mcan.h"
#include "../ivec_ECU/ivec_ecu_common/inc/ivec_ecu_common.h"
#include "stdint.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ecuMAX_FILTERS_u8 mcalMAX_FILTERS_u8
// Macro Definitions
#define IVEC_ECU_CAN_QUEUE(name, buff) \
volatile IVEC_ECU_CANQueue_s name = { \
.u16Front = 0, \
.u16Rear = 0, \
.u16Size = (sizeof(buff) / sizeof(buff[0])), \
.u8ElementSize = sizeof(buff[0]), \
.pxBuffer = buff, \
}
#define IVEC_ECU_CAN_FLUSH(name) do { \
name.front = 0; \
name.rear = 0; \
memset(name.buffer, 0x00, name.size); \
} while (0)
#define IVEC_ECU_CAN_ENQUEUE(queue, data) do { \
memcpy(&queue.pxBuffer[queue.u16Front++], &data, sizeof(data)); \
queue.u16Front %= queue.u16Size; \
} while (0)
#define IVEC_ECU_CAN_DEQUEUE(queue, data) do { \
memcpy(&data, &queue.pxBuffer[queue.u16Rear++], sizeof(data)); \
queue.u16Rear %= queue.u16Size; \
} while (0)
#define IVEC_ECU_CAN_IS_FULL(queue) ((queue.u16Front - queue.u16Rear) == (queue.u16Size - 1) || \
(queue.u16Front - queue.u16Rear) == -1)
#define IVEC_ECU_CAN_IS_EMPTY(queue) (queue.u16Front == queue.u16Rear)
/* Private Variable */
typedef struct {
uint32_t u32UlId;
uint8_t u8Data[8];
uint8_t u8Length;
uint8_t u8Resv[3];
} IVEC_ECU_CANBuff_s;
typedef struct {
uint16_t u16Front;
uint16_t u16Rear;
uint16_t u16Size;
uint8_t u8ElementSize;
IVEC_ECU_CANBuff_s *pxBuffer;
} IVEC_ECU_CANQueue_s;
typedef enum
{
/* data */
IVEC_ECU_CAN_SPEED_125 = 125,
IVEC_ECU_CAN_SPEED_150 = 150,
IVEC_ECU_CAN_SPEED_250 = 250,
IVEC_ECU_CAN_SPEED_500 = 500,
IVEC_ECU_CAN_SPEED_1000 = 1000,
}IVEC_EcuCANSpeed_e;
typedef struct
{
IVEC_McalCanHandle_s __xCanHandle;
MCAN_Regs *pMCAN;
uint8_t __u8Init;
IVEC_EcuCANSpeed_e u16Speed;
int32_t i32MaskCount;
int32_t i32FilterCount;
uint32_t u32MaskValues[ecuMAX_FILTERS_u8];
uint32_t u32FilterValues[ecuMAX_FILTERS_u8];
}IVEC_EcuCANHandle_s;
// Function Prototypes
void vMCU_FDCANRxFifoCallback(uint32_t u32Identifier, uint8_t *pu8data, uint16_t u16DataLength);
uint8_t u8MCAL_StoreMsgFromISRToQueue(uint32_t u32UlId, uint8_t* pu8Data, uint8_t u8Len);
IVEC_EcuCommonErr_e xECU_CANInit(IVEC_EcuCANHandle_s *xCANhandle);
IVEC_EcuCommonErr_e xECU_CANDeInit(IVEC_EcuCANHandle_s *xCANhandle);
IVEC_EcuCommonErr_e xECU_WriteDataOverCAN(IVEC_EcuCANHandle_s *xCanHandle, uint8_t* pu8Buf, uint32_t u32Id, int i32RetCode, uint32_t u32BufNum);
IVEC_EcuCommonErr_e xECU_CANGetData(IVEC_EcuCANHandle_s *xCanHandle, IVEC_ECU_CANBuff_s *pxBuff);
IVEC_EcuCommonErr_e xECU_CANReInit(IVEC_EcuCANHandle_s *xCANhandle);
IVEC_EcuCommonErr_e xECU_CANGetStatus(IVEC_EcuCANHandle_s *xCANhandle);
#endif /* IVEC_ECU_CAN_H_ */
//