NorthStar-Endurance-TestBench/NorthStar-Emotas-Stack/colib_sl/inc/co_drv.h

153 lines
5.0 KiB
C

/*
* co_drv.h - contains defines for driver
*
* Copyright (c) 2012-2024 emotas embedded communication GmbH
*
*-------------------------------------------------------------------
* $Id: co_drv.h 53002 2024-03-26 09:40:00Z boe $
*
*-------------------------------------------------------------------
*
*
*
*/
/**
* \brief defines for driver
*
* \file co_drv.h - contains defines for driver
*
*/
#ifndef CO_DRV_H
#define CO_DRV_H 1
#define CO_CAN_CC_MAX_DATA_LEN 8u /**< maximum payload length for classical CAN frames */
#define CO_CAN_FD_MAX_DATA_LEN 64u /**< maximum payload length for CAN-FD CAN frames */
# define CO_CAN_MAX_DATA_LEN CO_CAN_CC_MAX_DATA_LEN
typedef void * LIBDRV_HANDLE_T;
#ifndef CO_CAN_TIMESTAMP_T
# define CO_CAN_TIMESTAMP_T UNSIGNED32
#endif /* CO_CAN_TIMESTAMP_T */
/** flags for CAN Messages from/to driver */
#define CO_COBFLAG_NONE ((UNSIGNED8)(0u)) /**< none */
#define CO_COBFLAG_ENABLED ((UNSIGNED8)(1u)) /**< cob enabled/disabled */
#define CO_COBFLAG_EXTENDED ((UNSIGNED8)(1u << 1)) /**< extended id */
#define CO_COBFLAG_FD ((UNSIGNED8)(1u << 2)) /**< fd frame */
#define CO_COBFLAG_RTR ((UNSIGNED8)(1u << 3)) /**< rtr */
#define CO_COBFLAG_IND ((UNSIGNED8)(1u << 4)) /**< msg creates a indication, only valid for TX */
/* datatypes
-----------------------------------------------------------*/
/** CAN cob structure */
typedef struct {
UNSIGNED32 canId; /**< can identifier */
UNSIGNED32 ignore; /**< ignore mask for id */
UNSIGNED16 canChan; /**< reserved for driver */
UNSIGNED8 flags; /**< flags (rtr, extended, enabled, ... */
} CO_CAN_COB_T;
/** CAN receive message structure */
typedef struct {
UNSIGNED32 canId; /**< can identifier */
#ifdef CO_CAN_TIMESTAMP_SUPPORTED
CO_CAN_TIMESTAMP_T timestamp; /**< timestamp */
#endif /* CO_CAN_TIMESTAMP_SUPPORTED */
UNSIGNED8 flags; /**< flags (rtr, extended, enabled, ... */
UNSIGNED8 len; /**< msg len */
UNSIGNED8 data[CO_CAN_MAX_DATA_LEN]; /**< data */
} CO_CAN_REC_MSG_T;
/** CAN transmit message structure */
typedef struct {
LIBDRV_HANDLE_T handle; /**< library internal handle */
UNSIGNED32 canId; /**< can identifier */
UNSIGNED16 canChan; /**< reserved for driver */
UNSIGNED8 flags; /**< flags (rtr, extended, enabled, ... */
UNSIGNED8 len; /**< msg len */
UNSIGNED8 data[CO_CAN_MAX_DATA_LEN]; /**< data */
} CO_CAN_TR_MSG_T;
/** bittiming table entries */
typedef struct {
UNSIGNED16 bitRate; /**< bitrate in kbit/s */
UNSIGNED16 pre; /**< prescaler */
UNSIGNED8 prop; /**< propagation segment */
UNSIGNED8 seg1; /**< segment 1 */
UNSIGNED8 seg2; /**< segment 2 */
} CO_NV_STORAGE CODRV_BTR_T;
/* function prototypes */
EXTERN_DECL void codrvWaitForEvent(UNSIGNED32 msecTimeout);
EXTERN_DECL void codrvWaitForCanEvent(UNSIGNED32 waitTimeOut);
EXTERN_DECL void codrvHardwareInit(void);
/* CAN
-----------------------------------------------------------*/
EXTERN_DECL RET_T codrvCanInit(UNSIGNED16 bitRate);
EXTERN_DECL RET_T codrvCanInitWithDev(const char *devName,
UNSIGNED16 bitRate);
EXTERN_DECL RET_T codrvCanReInit(UNSIGNED16 bitRate);
EXTERN_DECL RET_T codrvCanSetBitRate(UNSIGNED16 bitRate);
EXTERN_DECL RET_T codrvCanStartTransmission(void);
EXTERN_DECL void codrvCanDriverHandler(void);
EXTERN_DECL RET_T codrvCanEnable(void);
EXTERN_DECL RET_T codrvCanDisable(void);
EXTERN_DECL RET_T codrvCanDeinit(void);
EXTERN_DECL int codrvGetCanFd(void);
/* QUEUE
-----------------------------------------------------------*/
EXTERN_DECL UNSIGNED8 *coQueueGetReceiveBuffer(
UNSIGNED32 canId, UNSIGNED8 dataLen, UNSIGNED8 flags
#ifdef CO_CAN_TIMESTAMP_SUPPORTED
, CO_CAN_TIMESTAMP_T timestamp
#endif /* CO_CAN_TIMESTAMP_SUPPORTED */
);
EXTERN_DECL void coQueueReceiveBufferIsFilled(void);
EXTERN_DECL BOOL_T coQueueReceiveMessageAvailable(void);
EXTERN_DECL CO_CAN_TR_MSG_T *coQueueGetNextTransmitMessage(void);
EXTERN_DECL void coQueueMsgTransmitted(const CO_CAN_TR_MSG_T *pBuf);
EXTERN_DECL RET_T CUSTOMER_TRANSMIT_MESSAGES_CALLBACK(
UNSIGNED32 canId, UNSIGNED8 len, UNSIGNED8 *buffer);
#ifdef OLD_FIXED_BUFFER
EXTERN_DECL BOOL_T CUSTOMER_RECEIVE_MESSAGES_CALLBACK(const CO_CAN_REC_MSG_T *pMsg);
#else /* OLD_FIXED_BUFFER */
EXTERN_DECL BOOL_T CUSTOMER_RECEIVE_MESSAGES_CALLBACK(const CO_CAN_REC_MSG_T *pMsg);
#endif /* OLD_FIXED_BUFFER */
/* GATEWAY
-----------------------------------------------------------*/
EXTERN_DECL void coGatewayTransmitMessage(const CO_CAN_TR_MSG_T *pMsg);
EXTERN_DECL void coQueueRecMsgFromGw(CO_CAN_REC_MSG_T *pMsg);
/* CAN IRQ
-----------------------------------------------------------*/
EXTERN_DECL void codrvCanEnableInterrupt(void);
EXTERN_DECL void codrvCanDisableInterrupt(void);
/* CAN - FullCAN functionality (Acceptance filter)
-----------------------------------------------------------*/
EXTERN_DECL RET_T codrvCanSetFilter(CO_CAN_COB_T *pCanCob);
/* timer
-----------------------------------------------------------*/
EXTERN_DECL RET_T codrvTimerSetup(UNSIGNED32 timerInterval);
EXTERN_DECL RET_T codrvTimerStop(void);
#endif /* CO_DRV_H */