/*================================================================================================== * Project : RTD AUTOSAR 4.4 * Platform : CORTEXM * Peripheral : GPIO * Dependencies : none * * Autosar Version : 4.4.0 * Autosar Revision : ASR_REL_4_4_REV_0000 * Autosar Conf.Variant : * SW Version : 1.0.0 * Build Version : S32K1_RTD_1_0_0_HF01_D2109_ASR_REL_4_4_REV_0000_20210907 * * (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 DIO_H #define DIO_H /** * @file Dio.h * @implements Dio.h_Artifact * * @defgroup DIO_HLD Dio HLD * @{ */ #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 "StandardTypes.h" #include "Mcal.h" #include "Dio_Cfg.h" /*================================================================================================= * SOURCE FILE VERSION INFORMATION =================================================================================================*/ #define DIO_VENDOR_ID 43 #define DIO_MODULE_ID 120 #define DIO_AR_RELEASE_MAJOR_VERSION 4 #define DIO_AR_RELEASE_MINOR_VERSION 4 #define DIO_AR_RELEASE_REVISION_VERSION 0 #define DIO_SW_MAJOR_VERSION 1 #define DIO_SW_MINOR_VERSION 0 #define DIO_SW_PATCH_VERSION 0 /*================================================================================================= * FILE VERSION CHECKS =================================================================================================*/ #ifndef DISABLE_MCAL_INTERMODULE_ASR_CHECK /* Check if header file and StandardTypes.h file are of the same Autosar version */ #if ((DIO_AR_RELEASE_MAJOR_VERSION != STD_AR_RELEASE_MAJOR_VERSION) || \ (DIO_AR_RELEASE_MINOR_VERSION != STD_AR_RELEASE_MINOR_VERSION) \ ) #error "AutoSar Version Numbers of Dio.h and StandardTypes.h are different" #endif /* Check if source file and Mcal.h header file are of the same Autosar version */ #if ((DIO_AR_RELEASE_MAJOR_VERSION != MCAL_AR_RELEASE_MAJOR_VERSION) || \ (DIO_AR_RELEASE_MINOR_VERSION != MCAL_AR_RELEASE_MINOR_VERSION) \ ) #error "AutoSar Version Numbers of Dio.h and Mcal.h are different" #endif #endif /* Check if Dio header file and Dio configuration header file are of the same vendor */ #if (DIO_VENDOR_ID != DIO_VENDOR_ID_CFG_H) #error "Dio.h and Dio_Cfg.h have different vendor ids" #endif /* Check if Dio header file and Dio configuration header file are of the same Autosar version */ #if ((DIO_AR_RELEASE_MAJOR_VERSION != DIO_AR_RELEASE_MAJOR_VERSION_CFG_H) || \ (DIO_AR_RELEASE_MINOR_VERSION != DIO_AR_RELEASE_MINOR_VERSION_CFG_H) || \ (DIO_AR_RELEASE_REVISION_VERSION != DIO_AR_RELEASE_REVISION_VERSION_CFG_H) \ ) #error "AutoSar Version Numbers of Dio.h and Dio_Cfg.h are different" #endif /* Check if Dio source file and Dio configuration header file are of the same Software version */ #if ((DIO_SW_MAJOR_VERSION != DIO_SW_MAJOR_VERSION_CFG_H) || \ (DIO_SW_MINOR_VERSION != DIO_SW_MINOR_VERSION_CFG_H) || \ (DIO_SW_PATCH_VERSION != DIO_SW_PATCH_VERSION_CFG_H) \ ) #error "Software Version Numbers of Dio.h and Dio_Cfg.h are different" #endif /*================================================================================================= * CONSTANTS =================================================================================================*/ /** * @brief The DIO module is not properly configured */ #define DIO_E_PARAM_CONFIG ((uint8)0xF0) /** * @brief Invalid channel name requested. * * @implements Dio_ErrorCodes_define */ #define DIO_E_PARAM_INVALID_CHANNEL_ID ((uint8)0x0A) /** * @brief Invalid port name requested. * * @implements Dio_ErrorCodes_define */ #define DIO_E_PARAM_INVALID_PORT_ID ((uint8)0x14) /** * @brief Invalid ChannelGroup id passed. * * @implements Dio_ErrorCodes_define */ #define DIO_E_PARAM_INVALID_GROUP_ID ((uint8)0x1F) /** * @brief API service called with a NULL pointer. * @details In case of this error, the API service shall return * immediately without any further action, beside reporting * this development error. * * @implements Dio_ErrorCodes_define */ #define DIO_E_PARAM_POINTER ((uint8)0x20) /** * @brief API service called with invalid channel level value. * @details In case of this error, the API service shall return * immediately without any further action, beside reporting * this development error. * * @implements Dio_ErrorCodes_define */ #define DIO_E_PARAM_LEVEL ((uint8)0x21) /** * @brief API service ID for @p Dio_ReadChannel() function. * @details Parameters used when raising an error/exception. */ #define DIO_READCHANNEL_ID ((uint8)0x00) /** * @brief API service ID for @p Dio_WriteChannel() function. * @details Parameters used when raising an error/exception. */ #define DIO_WRITECHANNEL_ID ((uint8)0x01) /** * @brief API service ID for @p Dio_FlipChannel() function. * @details Parameters used when raising an error/exception. */ #define DIO_FLIPCHANNEL_ID ((uint8)0x11) /** * @brief API service ID for @p Dio_ReadPort() function. * @details Parameters used when raising an error/exception. */ #define DIO_READPORT_ID ((uint8)0x02) /** * @brief API service ID for @p Dio_WritePort() function. * @details Parameters used when raising an error/exception. */ #define DIO_WRITEPORT_ID ((uint8)0x03) /** * @brief API service ID for @p Dio_ReadChannel() Group function. * @details Parameters used when raising an error/exception. */ #define DIO_READCHANNELGROUP_ID ((uint8)0x04) /** * @brief API service ID for @p Dio_WriteChannel() Group function. * @details Parameters used when raising an error/exception. */ #define DIO_WRITECHANNELGROUP_ID ((uint8)0x05) /** * @brief API service ID for DIO Get Version() Info function. * @details Parameters used when raising an error/exception. */ #define DIO_GETVERSIONINFO_ID ((uint8)0x12) /** * @brief API service ID for @p Dio_MaskedWritePort() function. * @details Parameters used when raising an error/exception. */ #define DIO_MASKEDWRITEPORT_ID ((uint8)0x13) /** * @brief Instance ID of the Dio driver. * * @implements . */ #define DIO_INSTANCE_ID ((uint8)0x00) /*================================================================================================= * DEFINES AND MACROS =================================================================================================*/ /*================================================================================================= * ENUMS =================================================================================================*/ /*================================================================================================= * STRUCTURES AND OTHER TYPEDEFS =================================================================================================*/ /*================================================================================================= * GLOBAL VARIABLE DECLARATIONS =================================================================================================*/ /*================================================================================================= * FUNCTION PROTOTYPES =================================================================================================*/ #define DIO_START_SEC_CODE #include "Dio_MemMap.h" #if (STD_ON == DIO_VERSION_INFO_API) /*! * @brief Service to get the version information of this module. * * The @p Dio_GetVersionInfo() function shall return the version * information of this module. The version information includes: * - Module Id. * - Vendor Id. * - Vendor specific version numbers. * * @param[in] VersionInfo Pointer to where to store the version * information of this module. */ void Dio_GetVersionInfo ( Std_VersionInfoType * VersionInfo ); #endif /* (STD_ON == DIO_VERSION_INFO_API) */ /*! * @brief Returns the value of the specified DIO channel. * * This function returns the value of the specified DIO channel. * * @param[in] ChannelId Specifies the required channel id. * * @return Returns the level of the corresponding pin @p STD_HIGH or @p STD_LOW. */ Dio_LevelType Dio_ReadChannel ( Dio_ChannelType ChannelId ); /*! * @brief Sets the level of a channel. * * If the specified channel is configured as an output channel, * this function shall set the specified level on the * specified channel. If the specified channel is configured * as an input channel, this function shall have no influence * on the physical output and on the result of the next read * service. * * @param[in] ChannelId Specifies the required channel id. * @param[in] Level Specifies the channel desired level. */ void Dio_WriteChannel ( Dio_ChannelType ChannelId, Dio_LevelType Level ); #if (STD_ON == DIO_FLIP_CHANNEL_API) /*! * @brief Inverts the level of a channel. * * If the specified channel is configured as an output channel, * this function shall invert the level of the specified * channel. If the specified channel is configured as an * input channel, this function shall have no influence * on the physical output and on the result of the next * read service. * * @param[in] ChannelId Specifies the required channel id. * * @return Returns the level of the corresponding pin as @p STD_HIGH or @p STD_LOW. */ Dio_LevelType Dio_FlipChannel ( Dio_ChannelType ChannelId ); #endif /* (STD_ON == DIO_FLIP_CHANNEL_API) */ /*! * @brief Returns the level of all channels of specified port. * * This function will return the level of all channels * belonging to the specified port. * * @param[in] PortId Specifies the required port id. * * @return Levels of all channels of specified port. */ Dio_PortLevelType Dio_ReadPort ( Dio_PortType PortId ); /*! * @brief Sets the value of a port. * * This function will set the specified value on the specified port. * * @param[in] PortId Specifies the required port id. * @param[in] Level Specifies the required levels for the port pins. */ void Dio_WritePort ( Dio_PortType PortId, Dio_PortLevelType Level ); /*! * @brief This service reads a subset of the adjoining bits of a port. * * This function will read a subset of adjoining bits of a port (channel group). * * @param[in] ChannelGroupIdPtr Pointer to the channel group. * * @return The channel group levels. */ Dio_PortLevelType Dio_ReadChannelGroup ( const Dio_ChannelGroupType * ChannelGroupIdPtr ); /*! * @brief Sets a subset of the adjoining bits of a port to the specified levels. * * This function will set a subset of adjoining bits of a port * (channel group) to the specified levels without changing * the remaining channels of the port and channels that are configured as input. * This function will do the masking of the channels and will * do the shifting so that the values written by the function * are aligned to the LSB. * * @param[in] ChannelGroupIdPtr Pointer to the channel group. * @param[in] Level Desired levels for the channel group. */ void Dio_WriteChannelGroup ( const Dio_ChannelGroupType * ChannelGroupIdPtr, Dio_PortLevelType Level ); #if (STD_ON == DIO_MASKEDWRITEPORT_API) /*! * @brief DIO Mask write port using mask. * * Writes a DIO port with masked value. * * @param[in] PortId Specifies the required port id. * @param[in] Level Specifies the required levels for the port pins. * @param[in] Mask Specifies the Mask value of the port. * * @pre This function can be used only if @p DIO_MASKEDWRITEPORT_API has been enabled. */ void Dio_MaskedWritePort ( Dio_PortType PortId, Dio_PortLevelType Level, Dio_PortLevelType Mask ); #endif /* (STD_ON == DIO_MASKEDWRITEPORT_API) */ #define DIO_STOP_SEC_CODE #include "Dio_MemMap.h" #ifdef __cplusplus } #endif /** @} */ #endif /* DIO_H */