97 lines
3.2 KiB
C
97 lines
3.2 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 ivECU_MAX_FILTERS ivMCAL_MAX_FILTERS
|
|
|
|
// 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;
|
|
|
|
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_s;
|
|
|
|
typedef struct
|
|
{
|
|
xMcalCanHandle __xCanHandle;
|
|
MCAN_Regs *pMCAN;
|
|
uint8_t __u8Init;
|
|
IVEC_EcuCANSpeed_s u16Speed;
|
|
int32_t i32MaskCount;
|
|
int32_t i32FilterCount;
|
|
uint8_t __u8MaxFilter;
|
|
uint32_t u32MaskValues[ivECU_MAX_FILTERS];
|
|
uint32_t u32FilterValues[ivECU_MAX_FILTERS];
|
|
}IVEC_EcuCANHandle_s;
|
|
|
|
// Function Prototypes
|
|
void vMCU_FDCANRxFifoCallback(uint32_t ulIdentifier, uint8_t *pucData, uint16_t usDataLength);
|
|
uint8_t u8MCAL_StoreMsgFromISRToQueue(uint32_t ulId, uint8_t *pucData, uint8_t ucLen);
|
|
|
|
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 *pucBuf, uint32_t ulId, int iRetCode, uint32_t ulBufNum);
|
|
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_ */
|
|
//
|