ADM/GW/RTD/include/Lin_Ip_Common.h
2024-08-08 10:00:15 +09:00

176 lines
8.3 KiB
C

/*==================================================================================================
* Project : RTD AUTOSAR 4.4
* Platform : CORTEXM
* Peripheral : LPUART
* Dependencies : none
*
* Autosar Version : 4.4.0
* Autosar Revision : ASR_REL_4_4_REV_0000
* Autosar Conf.Variant :
* SW Version : 0.9.0
* Build Version : S32K3_RTD_0_9_0__ASR_REL_4_4_REV_0000_20210326
*
* (c) Copyright 2020 - 2021 NXP Semiconductors
* All Rights Reserved.
*
* NXP Confidential. This software is owned or controlled by NXP and may only be
* used strictly in accordance with the applicable license terms. By expressly
* accepting such terms or by downloading, installing, activating and/or otherwise
* using the software, you are agreeing that you have read, and that you agree to
* comply with and are bound by, such license terms. If you do not agree to be
* bound by the applicable license terms, then you may not retain, install,
* activate or otherwise use the software.
==================================================================================================*/
#ifndef LIN_IP_COMMON_H
#define LIN_IP_COMMON_H
/**
* @file
*
* @internal
* @addtogroup LIN_IPW
* @{
*/
#ifdef __cplusplus
extern "C"{
#endif
/*==================================================================================================
* INCLUDE FILES
* 1) system and project includes
* 2) needed interfaces from external units
* 3) internal and external interfaces from this unit
==================================================================================================*/
#include "Mcal.h"
/*==================================================================================================
* SOURCE FILE VERSION INFORMATION
==================================================================================================*/
#define LIN_IP_COMMON_VENDOR_ID 43
#define LIN_IP_COMMON_AR_RELEASE_MAJOR_VERSION 4
#define LIN_IP_COMMON_AR_RELEASE_MINOR_VERSION 4
#define LIN_IP_COMMON_AR_RELEASE_REVISION_VERSION 0
#define LIN_IP_COMMON_SW_MAJOR_VERSION 0
#define LIN_IP_COMMON_SW_MINOR_VERSION 9
#define LIN_IP_COMMON_SW_PATCH_VERSION 0
/*==================================================================================================
* FILE VERSION CHECKS
==================================================================================================*/
#ifndef DISABLE_MCAL_INTERMODULE_ASR_CHECK
/* Check if current file and Mcal.h header file are of the same Autosar version */
#if ((LIN_IP_COMMON_AR_RELEASE_MAJOR_VERSION != MCAL_AR_RELEASE_MAJOR_VERSION) || \
(LIN_IP_COMMON_AR_RELEASE_MINOR_VERSION != MCAL_AR_RELEASE_MINOR_VERSION))
#error "AutoSar Version Numbers of Lin_Ip_Common.h and Mcal.h are different"
#endif
#endif
/*==================================================================================================
* CONSTANTS
==================================================================================================*/
/*==================================================================================================
* DEFINES AND MACROS
==================================================================================================*/
/**
* @brief Mask of Id field
*/
#define LIN_ID_MASK_U8 ((uint8)(0x3FU))
/* Accept Master baudrate deviation from the slave baudrate to be 2% */
#define AUTOBAUD_BAUDRATE_TOLERANCE (uint32_t)2U
/* calculate range of one bit time with baudrate 19200 by formula {1000000/19200*(100 + AUTOBAUD_BAUDRATE_TOLERANCE))/100} */
#define BIT_DURATION_MAX_19200 (uint32_t)(100000U * (100U + AUTOBAUD_BAUDRATE_TOLERANCE) / 192U)
#define BIT_DURATION_MIN_19200 (uint32_t)(100000U * (100U - AUTOBAUD_BAUDRATE_TOLERANCE) / 192U)
/* calculate range of one bit time with baudrate 14400 by formula {1000000/14400*(100 + AUTOBAUD_BAUDRATE_TOLERANCE))/100} */
#define BIT_DURATION_MAX_14400 (uint32_t)(100000U * (100U + AUTOBAUD_BAUDRATE_TOLERANCE) / 144U)
#define BIT_DURATION_MIN_14400 (uint32_t)(100000U * (100U - AUTOBAUD_BAUDRATE_TOLERANCE) / 144U)
/* calculate range of one bit time with baudrate 9600 by formula {1000000/9600*(100 + AUTOBAUD_BAUDRATE_TOLERANCE))/100} */
#define BIT_DURATION_MAX_9600 (uint32_t)(100000U * (100U + AUTOBAUD_BAUDRATE_TOLERANCE) / 96U)
#define BIT_DURATION_MIN_9600 (uint32_t)(100000U * (100U - AUTOBAUD_BAUDRATE_TOLERANCE) / 96U)
/* calculate range of one bit time with baudrate 4800 by formula {1000000/4800*(100 + AUTOBAUD_BAUDRATE_TOLERANCE))/100} */
#define BIT_DURATION_MAX_4800 (uint32_t)(100000U * (100U + AUTOBAUD_BAUDRATE_TOLERANCE) / 48U)
#define BIT_DURATION_MIN_4800 (uint32_t)(100000U * (100U - AUTOBAUD_BAUDRATE_TOLERANCE) / 48U)
/* calculate range of one bit time with baudrate 2400 by formula {1000000/2400*(100 + AUTOBAUD_BAUDRATE_TOLERANCE))/100} */
#define BIT_DURATION_MAX_2400 (uint32_t)(100000U * (100U + AUTOBAUD_BAUDRATE_TOLERANCE) / 24U)
#define BIT_DURATION_MIN_2400 (uint32_t)(100000U * (100U - AUTOBAUD_BAUDRATE_TOLERANCE) / 24U)
/*==================================================================================================
* ENUMS
==================================================================================================*/
/**
* @brief Enum containing parity type actions
*
* @details This enum defines types for an enumerating parity type actions.
*
* @implements Lin_Ip_ParityActionType_enumeration
*
*
*/
typedef enum {
LIN_CHECK_PARITY = 0x00U, /*!< Checking parity action */
LIN_MAKE_PARITY = 0x01U, /*!< Computing parity action */
} Lin_Ip_ParityActionType;
/*==================================================================================================
* STRUCTURES AND OTHER TYPEDEFS
==================================================================================================*/
/*==================================================================================================
* GLOBAL VARIABLE DECLARATIONS
==================================================================================================*/
/*==================================================================================================
* FUNCTION PROTOTYPES
==================================================================================================*/
/**
* @brief Makes or checks parity bits.
*
* @details This function shall compute or check the parity bits. If action is checking parity, the function
* returns ID value if parity bits are correct or 0xFF if parity bits are incorrect. If action
* is making parity bits, then from input value of ID, the function returns PID.
* This is not a public API as it is called by other API functions.
*
* @param[in] PID PID byte in case of checking parity bits or ID byte in case of making parity bits.
* @param[in] typeAction: 1 for Checking parity bits, 0 for making parity bits
*
* @return uint8 - Value has 8 bit:
* @retval 0xFF : Parity bits are incorrect,
* @retval ID : Checking parity bits are correct.
* @retval PID : typeAction is making parity bits.
*
*
*/
uint8 Lin_Ip_ProcessParity(const uint8 u8Pid, const Lin_Ip_ParityActionType eTypeAction);
/**
* @brief Makes the checksum byte for a frame.
*
* @details This function shall compute the checksum byte for a frame. For PID of identifiers,
* if PID is 0x3C (ID 0x3C) or 0x7D (ID 0x3D) or 0xFE (ID 0x3E) or 0xBF (ID 0x3F)
* apply classic checksum and apply enhanced checksum for other PID.
* In case user want to calculate classic checksum please set PID to zero.
*
* @param[in] buffer Pointer to Tx buffer
* @param[in] sizeBuffer Number of bytes that are contained in the buffer.
* @param[in] PID Protected Identifier byte.
*
* @return uint8 - The checksum byte.
*
*
*/
uint8 Lin_Ip_MakeChecksumByte(const uint8 *pBuffer, const uint8 u8SizeBuffer, const uint8 u8Pid);
#ifdef __cplusplus
}
#endif
/** @} */
#endif /* LIN_IP_COMMON_H */