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

72 lines
2.6 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>
// Macro Definitions
#define IVEC_ECU_CAN_QUEUE(name, buff) \
volatile IVEC_ECU_CANQueue_s name = { \
.front = 0, \
.rear = 0, \
.size = (sizeof(buff) / sizeof(buff[0])), \
.element_size = sizeof(buff[0]), \
.buffer = 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.buffer[queue.front++], &data, sizeof(data)); \
queue.front %= queue.size; \
} while (0)
#define IVEC_ECU_CAN_DEQUEUE(queue, data) do { \
memcpy(&data, &queue.buffer[queue.rear++], sizeof(data)); \
queue.rear %= queue.size; \
} while (0)
#define IVEC_ECU_CAN_IS_FULL(queue) ((queue.front - queue.rear) == (queue.size - 1) || \
(queue.front - queue.rear) == -1)
#define IVEC_ECU_CAN_IS_EMPTY(queue) (queue.front == queue.rear)
/* Private Variable */
typedef struct {
uint32_t ulId;
uint8_t ucData[8];
uint8_t ucLength;
uint8_t resv[3];
} IVEC_ECU_CANBuff_s;
typedef struct {
uint16_t front;
uint16_t rear;
uint16_t size;
uint8_t element_size;
IVEC_ECU_CANBuff_s *buffer;
} IVEC_ECU_CANQueue_s;
// Function Prototypes
void vMCU_FDCAN_RxFifo_Callback(uint32_t ulIdentifier, uint8_t *pucData, uint16_t usDataLength);
uint8_t vMCAL_StoreMsgFromISRToQueue(uint32_t ulId, uint8_t *pucData, uint8_t ucLen);
IVEC_EcuCommonErr_e vECU_CAN_Init(MCAN_Regs *pMCAN, IVEC_CanBaud_e eBaud);
IVEC_EcuCommonErr_e vECU_CAN_DeInit(MCAN_Regs *pMCAN);
IVEC_EcuCommonErr_e vECU_WriteDataOverCAN(uint8_t *pucBuf, uint32_t ulId, int iRetCode, uint32_t ulBufNum);
IVEC_EcuCommonErr_e vECU_CAN_GetData(IVEC_ECU_CANBuff_s *pxBuff);
IVEC_EcuCommonErr_e vECU_CAN_ReInit(MCAN_Regs *pMCAN, uint16_t usSpeed);
IVEC_EcuCommonErr_e vECU_CAN_GetStatus(MCAN_Regs *pMCAN, uint16_t usSpeed);
#endif /* IVEC_ECU_CAN_H_ */
//