2025-04-26 16:03:23 +08:00

444 lines
17 KiB
C
Raw Permalink Blame History

/* BEGIN_FILE_HDR
********************************************************************************
* NOTICE
* This software is the property of HiRain Technologies. Any information
* contained in this doc should not be reproduced, or used, or disclosed
* without the written authorization from HiRain Technologies.
********************************************************************************
* File Name : CanIf.h
********************************************************************************
* Project/Product : AUTOSAR 4.0
* Title : CAN Interface module head File
* Author : HeYang
********************************************************************************
* Description : The header file CanIf.h contains the declaration of the
* Can Interface module API;contains 'extern' declarations of
* constants,global data, type definitions and services that
* are specified in the Can Interface module SWS.
********************************************************************************
* Limitations : None
*
********************************************************************************
*
********************************************************************************
* Revision History:
*
* Version Date Initials CR# Descriptions
* --------- ---------- ------------ ---------- ---------------
* 01.00.00 02/04/2011 HeYang N/A Original
* 01.01.00 20/04/2011 HeYang N/A the parameter of memset
* 01.02.00 18/05/2011 HeYang N/A add the marco
CANIF_CANCONTROLLER_TX<54><58>
* CANIF_CANCONTROLLER_RX<52>C
CANCONTROLLER_RANGE_RX
* 01.03.00 28/05/2011 HeYang N/A modify CanIf_SetPduMode
* 01.04.00 15/06/2011 HeYang N/A DPN_CANIF_110615_01
*
*
*
* 02.00.00 06/06/2012 HeYang N/A DPN_CANIF_120606_01
* 02.01.00 05/07/2012 HeYang N/A DPN_CANIF_120705_01
* 02.02.00 08/07/2013 NingChen N/A DPN_CANIF_130708_01
* 02.02.01 16/07/2013 NingChen N/A DPN_CANIF_130716_01
* 02.02.02 29/07/2013 NingChen N/A DPN_CANIF_130729_01
* 02.02.03 05/08/2013 NingChen N/A DPN_CANIF_130805_01
* 02.02.04 15/08/2013 NingChen N/A D10_CANIF_130815_01
* 02.02.05 17/09/2013 NingChen N/A D10_CANIF_130917_01
********************************************************************************
* END_FILE_HDR*/
#ifndef _CANIF_H_
#define _CANIF_H_
/*******************************************************************************
* Includes
*******************************************************************************/
#include "CanIf_Type.h"
#include "CanIf_Cfg.h"
#include "Can.h"
#if(STD_ON == CANIF_SUPPORT_OSEK_NM)
#include "OsekNm.h"
#endif
/*******************************************************************************
* Macro
*******************************************************************************/
#define CANIF_MSK_EXT_ID_MSB ((uint32)(0x10000000))
#define CANIF_ENTER_CRITICAL_SECTION() Can_DisableGlobalInterrupts()
#define CANIF_LEAVE_CRITICAL_SECTION() Can_EnableGlobalInterrupts()
#if (STD_ON == CANIF_PUBLIC_READRXPDU_DATA_API)
#define CANIF_RX_BUFFER_SDU_LENGTH_INITIAL (0xffu)
#endif
#if(CANIF_FILTER_TYPE_INDEX == CANIF_PRIVATE_SOFTWARE_FILTER_TYPE)
#define CANIF_LAST_HRH_RXPDUID ((Can_HwHandleType)(~(0x0)))
#endif
/*CANIF525_Conf*/
/*This parameter defines the name of <User_ControllerBusOff>. This parameter
depends on the parameter CANIF_USERCTRLBUSOFF_UL.
If CANIF_USERCTRLBUSOFF_UL equals CAN_SM the name of <User_ControllerBusOff> is
fixed.
If CANIF_USERCTRLBUSOFF_UL equals CDD, the name of <User_ControllerBusOff> is
selectable.*/
#if(CANIF_DISPATCH_UL_CAN_SM == CANIF_DISPATCH_USERCTRLBUSOFF_UL)
#define CANIF_DISPATCH_USERCTRLBUSOFF_NAME \
CanSM_ControllerBusOff(Controller)
#elif(CANIF_DISPATCH_UL_CDD == CANIF_DISPATCH_USERCTRLBUSOFF_UL)
#define CANIF_DISPATCH_USERCTRLBUSOFF_NAME \
CANIF_DISPATCH_USERCTRLBUSOFF_DEFINED_NAME
#else
#error "!!!ERROR FOR CANIF_DISPATCH_USERCTRLBUSOFF_UL!!!"
#endif
/*CANIF526_Conf*/
#if(CANIF_DISPATCH_UL_ECUM == CANIF_DISPATCH_USERSETWAKEUPEVENT_UL)
#define CANIF_DISPATCH_USERSETWAKEUPEVENT_NAME \
EcuM_ControllerWakeUp(Controller)
#elif(CANIF_DISPATCH_UL_CDD == CANIF_DISPATCH_USERSETWAKEUPEVENT_UL)
#define CANIF_DISPATCH_USERSETWAKEUPEVENT_NAME \
CANIF_DISPATCH_USERSETWAKEUPEVENT_DEFINED_NAME
#else
#error "!!!ERROR FOR CANIF_DISPATCH_USERSETWAKEUPEVENT_UL!!!"
#endif
#define CANIF_USERWAKEUP_FUN CANIF_DISPATCH_USERSETWAKEUPEVENT_NAME
#define CANIF_USERCTRLBUSOFF_FUN CANIF_DISPATCH_USERCTRLBUSOFF_NAME
/* Development Error */
#if (STD_ON == CANIF_PUBLIC_DEV_ERROR_DETECT)
/*API service called with invalid parameter*/
#define CANIF_E_PARAM_CANID (0x10u)
#define CANIF_E_PARAM_DLC (0x11u)
#define CANIF_E_PARAM_HRH (0x12u)
#define CANIF_E_PARAM_LPDU (0x13u)
#define CANIF_E_PARAM_CONTROLLER (0x14u)
#define CANIF_E_PARAM_CONTROLLERID (0x15u)
#define CANIF_E_PARAM_WAKEUPSOURCE (0x16u)
#define CANIF_E_PARAM_TRCV (0x17u)
#define CANIF_E_PARAM_TRCVMODE (0x18u)
#define CANIF_E_PARAM_TRCVWAKEUPMODE (0x19u)
#define CANIF_E_PARAM_POINTER (0x20u)
/*API service used without module initialization*/
#define CANIF_E_UNINIT (0x30u)
/*Requested API operation is not supported*/
#define CANIF_E_NOK_NOSUPPORT (0x40u)
/*Transmit PDU ID invalid*/
#define CANIF_E_INVALID_TXPDUID (0x50u)
/*Receive PDU ID invalid*/
#define CANIF_E_INVALID_RXPDUID (0x60u)
#define CANIF_SETCONTROLLERMODE_APIID (0x03u)
#define CANIF_GETCONTROLLERMODE_APIID (0x04u)
#define CANIF_TRANSMIT_APIID (0x05u)
#define CANIF_READRXPDUDATA_APIID (0x06u)
#define CANIF_READTXNOTIFSTATUS_APIID (0x07u)
#define CANIF_READRXNOTIFSTATUS_APIID (0x08u)
#define CANIF_SETPDUMODE_APIID (0x09u)
#define CANIF_GETPDUMODE_APIID (0x0au)
#define CANIF_GETVERSIONINFO (0x0bu)
#define CANIF_SETDYNAMICTXID_APIID (0x0cu)
#define CANIF_TXCONFIRMATION_APIID (0x13u)
#define CANIF_RXINDICATION_APIID (0x14u)
#define CANIF_CANCELTXCONFIRMATION_APIID (0x15u)
#define CANIF_CONTROLLERBUSOFF_APIID (0x16u)
#define CANIF_CONTROLLERMODEINDICATION_APIID (0x17u)
#endif
/* Production Error */
#if (CANIF_PDU_CHANNEL_MODE_CONTROL == STD_ON)
#define CANIF_RX_INDICATION_ENABLE_MASK ((uint8)0x01)
#define CANIF_TX_REQUEST_ENABLE_MASK ((uint8)0x02)
#define CANIF_TX_NOTIFY_ENABLE_MASK ((uint8)0x04)
#define CANIF_PDU_GETMODE_MASK ((CanIf_PduGetModeType)0x07)
#endif
/*******************************************************************************
* Typedef
*******************************************************************************/
typedef enum
{
CANIF_UNINITIALIZED = 0,
CANIF_INITIALIZED = 1
}CanIf_InitType;
typedef enum
{
STATIC_TXPDU = 0,
DYNAMIC_TXPDU = 1
}CanIf_TxPduType;
typedef enum
{
STANDARD_CAN = 0,
EXTENDED_CAN = 1
}CanIf_PduCanIdType;
/* callback function pointer types */
typedef P2FUNC(void, TYPEDEF, User_RxIndication)
(
PduIdType CanUserRxPduId,
P2CONST(PduInfoType, AUTOMATIC, CANIF_APPL_DATA) PduInfoPtr
);
typedef P2FUNC(void, TYPEDEF, Range_RxIndication)
(
PduIdType RxPudId,
const uint16 RxId,
P2CONST(PduInfoType, AUTOMATIC, CANNM_APPL_DATA)PduInfoPtr
);
typedef P2FUNC(void, TYPEDEF, User_TxConfirmation)
(
PduIdType CanUserTxPduId
);
/* config pdu structs types */
typedef struct
{
#if (STD_ON == CANIF_UPPER_LAYER_HANDLE)
PduIdType UpperLayerHandle; /*Remap the PduId for UpperLayer*/
#endif
Can_IdType CanId; /* Can_IdType 16 or 32 bit */
CanIf_PduCanIdType CanIdType; /* CANIF_TXPDU_CANIDTYPE */
Can_HwHandleType Hth; /* Hardware transmit handle */
uint8 Length; /* DLC */
User_TxConfirmation TxConfirmation; /* Confirmation function */
#if (STD_ON == CANIF_PUBLIC_SETDYNAMICTXID_API)
CanIf_TxPduType TxPduType; /* CanIfTxPduType DYNAMIC or STATIC*/
#endif
#if(STD_ON == CANIF_PUBLIC_READTXPDU_NOTIFY_STATUS_API)
/*Enables and disables transmit confirmation for each transmit CAN L-PDU for
reading its notification status. True: Enabled False: Disabled*/
boolean TxPduReadNotifyStatus;
#endif
} CanIf_TxPduConfigType;
typedef struct
{
/* Lower CAN Identifier of a receive CAN L-PDU for identifier range
definition, in which all CAN Ids are mapped to one PduId. */
Can_IdType RxPduCanIdRangeLowerCanId ;
/* Upper CAN Identifier of a receive CAN L-PDU for identifier range
definition, in which all CAN Ids are mapped to one PduId. */
Can_IdType RxPduCanIdRangeUpperCanId;
Range_RxIndication RangeRxIndication;
}CanIf_RxPduCanIdRangeType;
typedef struct
{
#if (STD_ON == CANIF_UPPER_LAYER_HANDLE)
PduIdType UpperLayerHandle;
#endif
Can_IdType CanId; /* Can_IdType 16 or 32 bit */
CanIf_PduCanIdType CanIdType; /* CANIF_RXPDU_CANIDTYPE */
Can_HwHandleType Hrh; /* Hardware transmit handle */
uint8 Length; /* DLC */
User_RxIndication RxIndication; /* Indication function */
#if(STD_ON == CANIF_PUBLIC_READRXPDU_NOTIFY_STATUS_API)
/*Enables and disables receive indication for each receive CAN L-PDU for
reading its notification status. True: Enabled False: Disabled*/
boolean RxPduReadNotifyStatus;
#endif
#if (STD_ON == CANIF_PUBLIC_READRXPDU_DATA_API)
/*Enables and disables the Rx buffering for reading of received L-PDU data.
True: Enabled False: Disabled*/
boolean RxPduReadData;
#endif
#if (STD_ON == CANIF_RX_PDU_RANGE_CANID)
P2CONST(CanIf_RxPduCanIdRangeType, TYPEDEF, CANIF_CONFIG_CONST)
RxPduCanIdRangeCfg;
#endif
#if(CANIF_FILTER_TYPE_INDEX == CANIF_PRIVATE_SOFTWARE_FILTER_TYPE)
PduIdType HrhNextRxPduID;
#endif
} CanIf_RxPduConfigType;
typedef struct
{
/*Lower CAN Identifier of a receive CAN L-PDU for identifier range
definition, in which all CAN Ids shall pass the software filtering. */
Can_IdType HrhRangeRxPduLowerCanId;
/*Upper CAN Identifier of a receive CAN L-PDU for identifier range
definition, in which all CAN Ids shall pass the software filtering.*/
Can_IdType HrhRangeRxPduUpperCanId;
CanIf_PduCanIdType HrhRangeRxPduRangeCanIdType;
}CanIf_HrhRangeCfgType;
/*******************************************************************************
* Global Data Define, No need to be configed
*******************************************************************************/
#define CANIF_START_SEC_VAR_UNSPECIFIED
#include "MemMap.h"
#if (STD_ON == CANIF_PUBLIC_TX_BUFFERING)
extern VAR(boolean, CANIF_PRIVATE_DATA) CanIfTxBufferPDUFillflag[];
extern VAR(uint8, CANIF_PRIVATE_DATA) CanIfTxBufferSdu[][8];
extern VAR(Can_PduType, CANIF_PRIVATE_DATA) CanIfTxBufferPdu[];
#endif
#if (STD_ON == CANIF_PUBLIC_SETDYNAMICTXID_API)
extern VAR(Can_IdType, CANIF_PRIVATE_DATA) CanIfTxPduCanIdForDynamic[];
#endif
#if(STD_ON == CANIF_PUBLIC_READTXPDU_NOTIFY_STATUS_API)
extern VAR(CanIf_NotifStatusType, CANIF_PRIVATE_DATA) CanIfTxNotifStatus[];
#endif
#if(STD_ON == CANIF_PUBLIC_READRXPDU_NOTIFY_STATUS_API)
extern VAR(CanIf_NotifStatusType, CANIF_PRIVATE_DATA) CanIfRxNotifStatus[];
#endif
#if (STD_ON == CANIF_PUBLIC_READRXPDU_DATA_API)
extern VAR(uint8, CANIF_PRIVATE_DATA) CanIfRxBufferSduData[][8];
extern VAR(PduLengthType, CANIF_PRIVATE_DATA) CanIfRxBufferSduLength[] ;
#endif
#define CANIF_STOP_SEC_VAR_UNSPECIFIED
#include "MemMap.h"
#define CANIF_START_SEC_CONFIG_DATA_UNSPECIFIED
#include "MemMap.h"
extern CONST(PduIdType, CANIF_CONFIG_CONST) CanIfInitNumberOfCanRxPduIds ;
extern CONST(PduIdType, CANIF_CONFIG_CONST) CanIfInitNumberOfCanTxPduIds ;
extern CONST(Can_HwHandleType, CANIF_CONFIG_CONST) CanIfInitNumberofHrh ;
/*******************************************************************************
* Config Parameters
*******************************************************************************/
#if(CANIF_FILTER_TYPE_INDEX == CANIF_PRIVATE_SOFTWARE_FILTER_TYPE)
extern CONST(Can_HwHandleType, CANIF_CONFIG_CONST) CanIfHrhFirstRxPduID[];
#endif
#if(STD_ON == CANIF_HRH_RANGE_FILTER)
extern CONST(CanIf_HrhRangeCfgType, CANIF_CONFIG_CONST) CanIfHrhRangeCfg[];
#endif
extern CONST(CanIf_RxPduConfigType, CANIF_CONFIG_CONST) CanIfRxPduConfig[];
extern CONST(CanIf_TxPduConfigType, CANIF_CONFIG_CONST) CanIfTxPduConfig[];
#define CANIF_STOP_SEC_CONFIG_DATA_UNSPECIFIED
#include "MemMap.h"
/*******************************************************************************
* Global Function Declaration
*******************************************************************************/
#define CANIF_START_SEC_PUBLIC_CODE
#include "MemMap.h"
extern FUNC(void, CANIF_PUBLIC_CODE) CanIf_Init(void);
extern FUNC(Std_ReturnType, CANIF_PUBLIC_CODE) CanIf_SetControllerMode
(
uint8 ControllerId,
CanIf_ControllerModeType ControllerMode
);
extern FUNC(Std_ReturnType, CANIF_PUBLIC_CODE) CanIf_GetControllerMode
(
uint8 ControllerId,
P2VAR(CanIf_ControllerModeType, AUTOMATIC, CANIF_APPL_DATA)
ControllerModePtr
);
extern FUNC(Std_ReturnType, CANIF_PUBLIC_CODE) CanIf_Transmit
(
PduIdType CanTxPduId,
P2CONST(PduInfoType, AUTOMATIC, CANIF_APPL_DATA) PduInfoPtr
);
#if(CANIF_PUBLIC_CANCEL_TRANSMIT_SUPPORT == STD_ON)
extern FUNC(Std_ReturnType, CANIF_PUBLIC_CODE) CanIf_CancelTransmit
(
PduIdType CanTxPduId
);
#endif
#if (CANIF_PDU_CHANNEL_MODE_CONTROL == STD_ON)
extern FUNC(Std_ReturnType, CANIF_PUBLIC_CODE) CanIf_SetPduMode
(
uint8 ControllerId,
CanIf_PduSetModeType PduModeRequest
);
extern FUNC(Std_ReturnType, CANIF_PUBLIC_CODE) CanIf_GetPduMode
(
uint8 ControllerId,
P2VAR(CanIf_PduGetModeType, AUTOMATIC, CANIF_APPL_DATA) PduModePtr
);
#endif
#if (STD_ON == CANIF_PUBLIC_SETDYNAMICTXID_API)
extern FUNC(Std_ReturnType, CANIF_PUBLIC_CODE) CanIf_SetDynamicTxId
(
PduIdType CanTxPduId,
Can_IdType CanId
);
#endif
#if(STD_ON == CANIF_PUBLIC_READTXPDU_NOTIFY_STATUS_API)
extern FUNC(CanIf_NotifStatusType, CANIF_PUBLIC_CODE) CanIf_ReadTxNotifStatus
(
PduIdType CanTxPduId
);
#endif
#if(STD_ON == CANIF_PUBLIC_READRXPDU_NOTIFY_STATUS_API)
extern FUNC(CanIf_NotifStatusType, CANIF_PUBLIC_CODE) CanIf_ReadRxNotifStatus
(
PduIdType CanRxPduId
);
#endif
#if (STD_ON == CANIF_PUBLIC_READRXPDU_DATA_API)
extern FUNC(Std_ReturnType, CANIF_PUBLIC_CODE) CanIf_ReadRxPduData
(
PduIdType CanRxPduId,
P2VAR(PduInfoType, AUTOMATIC, CANIF_APPL_DATA) PduInfoPtr
);
#endif
#if (STD_ON == CANIF_PUBLIC_VERSION_INFO_API)
extern FUNC(void, CANIF_PUBLIC_CODE) CanIf_GetVersionInfo
(
P2VAR(Std_VersionInfoType, AUTOMATIC, CANIF_APPL_DATA) VersionInfo
);
#endif
#if (STD_ON == CANIF_PUBLIC_TX_BUFFERING)
extern FUNC(void, CANIF_PUBLIC_CODE) CanIf_ClearTransmitBuffer
(
uint8 ControllerId
);
#endif
#define CANIF_STOP_SEC_PUBLIC_CODE
#include "MemMap.h"
#endif/* _CANIF_H_ */