/**
*     @file Icu_Ipw_Types.h
*     @version 1.0.0
*
*     @brief   AUTOSAR Icu - Brief description.
*     @details Detailed description.
*
*     @addtogroup ICU_MODULE
*     @{
*/
/*==================================================================================================
*     Project AUTOSAR 4.3 MCAL
*     Platform PA
*     Peripheral eMIOS SIU
*     Dependencies none
*
*     Autosar Version 4.3.1
*     Autosar Revision ASR_REL_4_3_REV_0001
*     Autosar ConfVariant
*     SWVersion 1.0.0
*     BuildVersion MPC5777C_MCAL_1_0_0_RTM_ASR_REL_4_3_REV_0001_20190315
*
*     (c) Copyright 2006-2016 Freescale Semiconductor, Inc. 
*       Copyright 2017-2019 NXP
*     All Rights Reserved.
==================================================================================================*/
/*==================================================================================================
==================================================================================================*/

#ifndef ICU_IPW_TYPES_H
#define ICU_IPW_TYPES_H

#ifdef __cplusplus
extern "C"{
#endif

/**
* @page misra_violations MISRA-C:2012 violations
*
* @section [global]
* Violates MISRA 2012 Advisory Directive 4.9, A function should be used in preference to a function-like macro
* where they are interchangeable.
* This violation is done to reduce code complexity by using function-like macros
*
* @section [global]
* Violates MISRA 2012 Advisory Rule 2.5, A project should not contain unused macro declarations.
* Define is used in configuration.
*
* @section ICU_IPW_TYPES_H_REF_1
* Violates MISRA 2012 Advisory Rule 2.3, A project should not contain unused type declarations.
* This type is used in configuration.
*/

/*==================================================================================================
*                                          INCLUDE FILES
*  1) system and project includes
*  2) needed interfaces from external units
*  3) internal and external interfaces from this unit
==================================================================================================*/
#include "StdRegMacros.h"
#include "Icu_Types.h"
#include "Icu_eMios_Types.h"
#include "Icu_Siu_Types.h"

/*==================================================================================================
*                                SOURCE FILE VERSION INFORMATION
==================================================================================================*/
#define ICU_IPW_TYPES_VENDOR_ID                       43

#define ICU_IPW_TYPES_AR_RELEASE_MAJOR_VERSION        4
#define ICU_IPW_TYPES_AR_RELEASE_MINOR_VERSION        3
#define ICU_IPW_TYPES_AR_RELEASE_REVISION_VERSION     1
#define ICU_IPW_TYPES_SW_MAJOR_VERSION                1
#define ICU_IPW_TYPES_SW_MINOR_VERSION                0
#define ICU_IPW_TYPES_SW_PATCH_VERSION                0

/*==================================================================================================
*                                       FILE VERSION CHECKS
==================================================================================================*/
#ifndef DISABLE_MCAL_INTERMODULE_ASR_CHECK
    #if ((ICU_IPW_TYPES_AR_RELEASE_MAJOR_VERSION != STDREGMACROS_AR_RELEASE_MAJOR_VERSION) || \
         (ICU_IPW_TYPES_AR_RELEASE_MINOR_VERSION != STDREGMACROS_AR_RELEASE_MINOR_VERSION))
            #error "AutoSar Version Numbers of Icu_Ipw_Types.c and StdRegMacros.h are different"
    #endif
#endif

/* Check if source file and ICU types header file are of the same vendor */
#if (ICU_IPW_TYPES_VENDOR_ID != ICU_TYPES_VENDOR_ID)
    #error "Icu_Ipw_Types.h and Icu_Types.h have different vendor IDs"
#endif
    /* Check if header file and ICU types header file are of the same Autosar version */
#if ((ICU_IPW_TYPES_AR_RELEASE_MAJOR_VERSION != ICU_TYPES_AR_RELEASE_MAJOR_VERSION) || \
     (ICU_IPW_TYPES_AR_RELEASE_MINOR_VERSION != ICU_TYPES_AR_RELEASE_MINOR_VERSION) || \
     (ICU_IPW_TYPES_AR_RELEASE_REVISION_VERSION != ICU_TYPES_AR_RELEASE_REVISION_VERSION))
#error "AutoSar Version Numbers of Icu_Ipw_Types.h and Icu_Types.h are different"
#endif
/* Check if header file and ICU types header file are of the same software version */
#if ((ICU_IPW_TYPES_SW_MAJOR_VERSION != ICU_TYPES_SW_MAJOR_VERSION) || \
     (ICU_IPW_TYPES_SW_MINOR_VERSION != ICU_TYPES_SW_MINOR_VERSION) || \
     (ICU_IPW_TYPES_SW_PATCH_VERSION != ICU_TYPES_SW_PATCH_VERSION))
#error "Software Version Numbers of Icu_Ipw_Types.h and Icu_Types.h are different"
#endif

 /* Check if Icu_Ipw_Types header and Icu_eMios_Types file are of the same vendor */
#if (ICU_IPW_TYPES_VENDOR_ID != ICU_EMIOS_TYPES_VENDOR_ID)
    #error "Icu_Ipw_Types.h and Icu_eMIOS.h have different vendor IDs"
#endif
    /* Check if header file and Icu_eMios_Types file are of the same Autosar version */
#if ((ICU_IPW_TYPES_AR_RELEASE_MAJOR_VERSION != ICU_EMIOS_TYPES_AR_RELEASE_MAJOR_VERSION) || \
     (ICU_IPW_TYPES_AR_RELEASE_MINOR_VERSION != ICU_EMIOS_TYPES_AR_RELEASE_MINOR_VERSION) || \
     (ICU_IPW_TYPES_AR_RELEASE_REVISION_VERSION != ICU_EMIOS_TYPES_AR_RELEASE_REVISION_VERSION))
 #error "AutoSar Version Numbers of Icu_Ipw_Types.h and Icu_eMios_Types.h are different"
#endif
/* Check if header file and Icu_eMios_Types file are of the same software version */
#if ((ICU_IPW_TYPES_SW_MAJOR_VERSION != ICU_EMIOS_TYPES_SW_MAJOR_VERSION) || \
     (ICU_IPW_TYPES_SW_MINOR_VERSION != ICU_EMIOS_TYPES_SW_MINOR_VERSION) || \
     (ICU_IPW_TYPES_SW_PATCH_VERSION != ICU_EMIOS_TYPES_SW_PATCH_VERSION))
 #error "Software Version Numbers of Icu_Ipw_Types.h and Icu_eMios_Types.h are different"
#endif


/* Check if Icu_Ipw_Types header and Icu_Siu_Types file are of the same vendor */
#if (ICU_IPW_TYPES_VENDOR_ID != ICU_SIU_TYPES_VENDOR_ID)
    #error "Icu_Ipw_Types.h and Icu_Siu_Types.h have different vendor IDs"
#endif
    /* Check if header file and Icu_Siu_Types file are of the same Autosar version */
#if ((ICU_IPW_TYPES_AR_RELEASE_MAJOR_VERSION != ICU_SIU_TYPES_AR_RELEASE_MAJOR_VERSION) || \
     (ICU_IPW_TYPES_AR_RELEASE_MINOR_VERSION != ICU_SIU_TYPES_AR_RELEASE_MINOR_VERSION) || \
     (ICU_IPW_TYPES_AR_RELEASE_REVISION_VERSION != ICU_SIU_TYPES_AR_RELEASE_REVISION_VERSION))
 #error "AutoSar Version Numbers of Icu_Ipw_Types.h and Icu_Siu_Types.h are different"
#endif
/* Check if header file and Icu_Siu_Types file are of the same software version */
#if ((ICU_IPW_TYPES_SW_MAJOR_VERSION != ICU_SIU_TYPES_SW_MAJOR_VERSION) || \
     (ICU_IPW_TYPES_SW_MINOR_VERSION != ICU_SIU_TYPES_SW_MINOR_VERSION) || \
     (ICU_IPW_TYPES_SW_PATCH_VERSION != ICU_SIU_TYPES_SW_PATCH_VERSION))
 #error "Software Version Numbers of Icu_Ipw_Types.h and Icu_Siu_Types.h are different"
#endif

/*==================================================================================================
*                                            CONSTANTS
==================================================================================================*/


/*==================================================================================================
*                                        DEFINES AND MACROS
==================================================================================================*/
/** @brief Symbolic name for eMios channels */
#define ICU_EMIOS_CHANNEL         ((Icu_ChannelIpType)0)

/** @brief Symbolic name for Siu channels */
#define ICU_SIU_CHANNEL         ((Icu_ChannelIpType)1)

/* Macros to name the HW channels (eMIOS and IRQ's) */
/**
* @{
* @brief      eMIOS Channelss
* @details    eMIOS Hardware Channels
*/
#define ICU_EMIOS_0_CH_0        (0U)
#define ICU_EMIOS_0_CH_1        (ICU_EMIOS_0_CH_0 +  1U)
#define ICU_EMIOS_0_CH_2        (ICU_EMIOS_0_CH_0 +  2U)
#define ICU_EMIOS_0_CH_3        (ICU_EMIOS_0_CH_0 +  3U)
#define ICU_EMIOS_0_CH_4        (ICU_EMIOS_0_CH_0 +  4U)
#define ICU_EMIOS_0_CH_5        (ICU_EMIOS_0_CH_0 +  5U)
#define ICU_EMIOS_0_CH_6        (ICU_EMIOS_0_CH_0 +  6U)
#define ICU_EMIOS_0_CH_7        (ICU_EMIOS_0_CH_0 +  7U)
#define ICU_EMIOS_0_CH_8        (ICU_EMIOS_0_CH_0 +  8U)
#define ICU_EMIOS_0_CH_9        (ICU_EMIOS_0_CH_0 +  9U)
#define ICU_EMIOS_0_CH_10       (ICU_EMIOS_0_CH_0 + 10U)
#define ICU_EMIOS_0_CH_11       (ICU_EMIOS_0_CH_0 + 11U)
#define ICU_EMIOS_0_CH_12       (ICU_EMIOS_0_CH_0 + 12U)
#define ICU_EMIOS_0_CH_13       (ICU_EMIOS_0_CH_0 + 13U)
#define ICU_EMIOS_0_CH_14       (ICU_EMIOS_0_CH_0 + 14U)
#define ICU_EMIOS_0_CH_15       (ICU_EMIOS_0_CH_0 + 15U)
#define ICU_EMIOS_0_CH_16       (ICU_EMIOS_0_CH_0 + 16U)
#define ICU_EMIOS_0_CH_17       (ICU_EMIOS_0_CH_0 + 17U)
#define ICU_EMIOS_0_CH_18       (ICU_EMIOS_0_CH_0 + 18U)
#define ICU_EMIOS_0_CH_19       (ICU_EMIOS_0_CH_0 + 19U)
#define ICU_EMIOS_0_CH_20       (ICU_EMIOS_0_CH_0 + 20U)
#define ICU_EMIOS_0_CH_21       (ICU_EMIOS_0_CH_0 + 21U)
#define ICU_EMIOS_0_CH_22       (ICU_EMIOS_0_CH_0 + 22U)
#define ICU_EMIOS_0_CH_23       (ICU_EMIOS_0_CH_0 + 23U)
#define ICU_EMIOS_0_CH_24       (ICU_EMIOS_0_CH_0 + 24U)
#define ICU_EMIOS_0_CH_25       (ICU_EMIOS_0_CH_0 + 25U)
#define ICU_EMIOS_0_CH_26       (ICU_EMIOS_0_CH_0 + 26U)
#define ICU_EMIOS_0_CH_27       (ICU_EMIOS_0_CH_0 + 27U)
#define ICU_EMIOS_0_CH_28       (ICU_EMIOS_0_CH_0 + 28U)
#define ICU_EMIOS_0_CH_29       (ICU_EMIOS_0_CH_0 + 29U)
#define ICU_EMIOS_0_CH_30       (ICU_EMIOS_0_CH_0 + 30U)
#define ICU_EMIOS_0_CH_31       (ICU_EMIOS_0_CH_0 + 31U)

#define ICU_EMIOS_0_MAX         (ICU_EMIOS_0_CH_0 + 31U)

#define ICU_EMIOS_1_CH_0        (ICU_EMIOS_0_MAX  +  1U)
#define ICU_EMIOS_1_CH_1        (ICU_EMIOS_1_CH_0 +  1U)
#define ICU_EMIOS_1_CH_2        (ICU_EMIOS_1_CH_0 +  2U)
#define ICU_EMIOS_1_CH_3        (ICU_EMIOS_1_CH_0 +  3U)
#define ICU_EMIOS_1_CH_4        (ICU_EMIOS_1_CH_0 +  4U)
#define ICU_EMIOS_1_CH_5        (ICU_EMIOS_1_CH_0 +  5U)
#define ICU_EMIOS_1_CH_6        (ICU_EMIOS_1_CH_0 +  6U)
#define ICU_EMIOS_1_CH_7        (ICU_EMIOS_1_CH_0 +  7U)
#define ICU_EMIOS_1_CH_8        (ICU_EMIOS_1_CH_0 +  8U)
#define ICU_EMIOS_1_CH_9        (ICU_EMIOS_1_CH_0 +  9U)
#define ICU_EMIOS_1_CH_10       (ICU_EMIOS_1_CH_0 + 10U)
#define ICU_EMIOS_1_CH_11       (ICU_EMIOS_1_CH_0 + 11U)
#define ICU_EMIOS_1_CH_12       (ICU_EMIOS_1_CH_0 + 12U)
#define ICU_EMIOS_1_CH_13       (ICU_EMIOS_1_CH_0 + 13U)
#define ICU_EMIOS_1_CH_14       (ICU_EMIOS_1_CH_0 + 14U)
#define ICU_EMIOS_1_CH_15       (ICU_EMIOS_1_CH_0 + 15U)
#define ICU_EMIOS_1_CH_16       (ICU_EMIOS_1_CH_0 + 16U)
#define ICU_EMIOS_1_CH_17       (ICU_EMIOS_1_CH_0 + 17U)
#define ICU_EMIOS_1_CH_18       (ICU_EMIOS_1_CH_0 + 18U)
#define ICU_EMIOS_1_CH_19       (ICU_EMIOS_1_CH_0 + 19U)
#define ICU_EMIOS_1_CH_20       (ICU_EMIOS_1_CH_0 + 20U)
#define ICU_EMIOS_1_CH_21       (ICU_EMIOS_1_CH_0 + 21U)
#define ICU_EMIOS_1_CH_22       (ICU_EMIOS_1_CH_0 + 22U)
#define ICU_EMIOS_1_CH_23       (ICU_EMIOS_1_CH_0 + 23U)
#define ICU_EMIOS_1_CH_24       (ICU_EMIOS_1_CH_0 + 24U)
#define ICU_EMIOS_1_CH_25       (ICU_EMIOS_1_CH_0 + 25U)
#define ICU_EMIOS_1_CH_26       (ICU_EMIOS_1_CH_0 + 26U)
#define ICU_EMIOS_1_CH_27       (ICU_EMIOS_1_CH_0 + 27U)
#define ICU_EMIOS_1_CH_28       (ICU_EMIOS_1_CH_0 + 28U)
#define ICU_EMIOS_1_CH_29       (ICU_EMIOS_1_CH_0 + 29U)
#define ICU_EMIOS_1_CH_30       (ICU_EMIOS_1_CH_0 + 30U)
#define ICU_EMIOS_1_CH_31       (ICU_EMIOS_1_CH_0 + 31U)

#define ICU_EMIOS_1_MAX         (ICU_EMIOS_1_CH_0 + 31U)

/**@}*/
/**
* @{
* @brief      External Interrupt Channels
* @details    SIUL IRQ Channels
*/
#define ICU_IRQ_CH_0           (0U)
#define ICU_IRQ_CH_1           (ICU_IRQ_CH_0 +  1U)
#define ICU_IRQ_CH_2           (ICU_IRQ_CH_0 +  2U)
#define ICU_IRQ_CH_3           (ICU_IRQ_CH_0 +  3U)
#define ICU_IRQ_CH_4           (ICU_IRQ_CH_0 +  4U)
#define ICU_IRQ_CH_5           (ICU_IRQ_CH_0 +  5U)
#define ICU_IRQ_CH_6           (ICU_IRQ_CH_0 +  6U)
#define ICU_IRQ_CH_7           (ICU_IRQ_CH_0 +  7U)
#define ICU_IRQ_CH_8           (ICU_IRQ_CH_0 +  8U)
#define ICU_IRQ_CH_9           (ICU_IRQ_CH_0 +  9U)
#define ICU_IRQ_CH_10          (ICU_IRQ_CH_0 + 10U)
#define ICU_IRQ_CH_11          (ICU_IRQ_CH_0 + 11U)
#define ICU_IRQ_CH_12          (ICU_IRQ_CH_0 + 12U)
#define ICU_IRQ_CH_13          (ICU_IRQ_CH_0 + 13U)
#define ICU_IRQ_CH_14          (ICU_IRQ_CH_0 + 14U)
#define ICU_IRQ_CH_15          (ICU_IRQ_CH_0 + 15U)

#define ICU_IRQ_MAX            (ICU_IRQ_CH_0 + 15U)
/**@}*/


/*
* Macros regarding the maximum number of HW channels from different IP modules
*/
/**
* @{
* @brief      ICU_MAX_EMIOS_CHANNELS - the maximum number of eMIOS channels
* @details    Represents the maximum number of eMIOS channels, not necessary all
*             are available for a specific derivative. If some channels are
*             missing for a derivative, the encoding of the channels will be not
*             contiguous.
*/
#define ICU_MAX_EMIOS_CHANNELS      (ICU_EMIOS_1_MAX - ICU_EMIOS_0_CH_0 + 1U)
/**@}*/

/**
* @{
* @brief      ICU_MAX_IRQ_CHANNELS - the maximum number of IRQ channels
* @details    Represents the maximum number of IRQ channels, not necessary all
*             are available for a specific derivative. If some channels are
*             missing for a derivative, the encoding of the channels will be not
*             contiguous.
*/
#define ICU_MAX_IRQ_CHANNELS        (ICU_IRQ_MAX - ICU_IRQ_CH_0 + 1U)
/**@}*/

/**
* @{
* @brief      ICU_MAX_HW_CHANNELS - the highest ICU hardware channel number
* @details    Represents the maximum number of IRQ channels, not necessary all
*             are available for a specific derivative. If some channels are
*             missing for a derivative, the encoding of the channels will be not
*             contiguous.
*/
#define ICU_MAX_HW_CHANNELS         (ICU_MAX_EMIOS_CHANNELS + ICU_MAX_IRQ_CHANNELS)
/**@}*/

/**
* @{
* @brief      ICU_VALID_CHANNEL_INPUT_LEVEL - the maximum number of eTiemr channels
* @details    Represents the maximum number of eMIOS channels, To get the status of
*             input pin using an API Icu_GetInputLevel the channel should be an eMIOS
*             Channel.
*/

#define ICU_VALID_CHANNEL_INPUT_LEVEL         (ICU_MAX_EMIOS_CHANNELS)
/**@}*/

/**
* @{
* @brief Macros to translate ICU generic channels to specific hardware channels
*
*/
#define ICU_EMIOS_CHANNELS(ch)      ((uint32)(ch))
#define ICU_IRQ_CHANNELS(ch)        ((uint32)(ch))

#define ICU_EMIOS_HW_CHANNEL(ch)      ((uint32)(ch) + 0U)

#define ICU_IRQ_HW_CHANNEL(ch)     ((uint32)(ch) + 64U)
/**@}*/

/**
* @{
* @brief   Macros for handling the actual states of the ICU Channels
* @remarks These bitfields are used to set Icu_aChannelState array
*/

/**
* @{
* @brief Wakeup feature is currently enabled
*/
#define ICU_CHANNEL_STATE_WKUP                  ((Icu_ChannelStateType)BIT0)
#define ICU_CHANNEL_STATE_WKUP_SHIFT            (0U)
#define ICU_CHANNEL_STATE_WKUP_MASK             ((Icu_ChannelStateType)BIT0)
/**@}*/

/**
* @{
* @brief The current channel status - IDLE / ACTIVE
*/
#define ICU_CHANNEL_STATE_IDLE                  ((Icu_ChannelStateType)BIT1)
#define ICU_CHANNEL_STATE_IDLE_SHIFT            (1U)
#define ICU_CHANNEL_STATE_IDLE_MASK             ((Icu_ChannelStateType)BIT1)
/**@}*/

/**
* @{
* @brief Notification is enabled
*/
#define ICU_CHANNEL_STATE_NOTIFICATION          ((Icu_ChannelStateType)BIT2)
#define ICU_CHANNEL_STATE_NOTIF_SHIFT           (2U)
#define ICU_CHANNEL_STATE_NOTIF_MASK            ((Icu_ChannelStateType)BIT2)
/**@}*/

/**
* @{
* @brief The current channel state
*/
#define ICU_CHANNEL_STATE_RUNNING               ((Icu_ChannelStateType)BIT3)
#define ICU_CHANNEL_STATE_RUNNING_SHIFT         (3U)
#define ICU_CHANNEL_STATE_RUNNING_MASK          ((Icu_ChannelStateType)BIT3)
/**@}*/

/**
* @{
* @brief Overflow flag
*/
#define ICU_CHANNEL_STATE_OVERFLOW              ((Icu_ChannelStateType)BIT4)
#define ICU_CHANNEL_STATE_OVERFLOW_SHIFT        (4U)
#define ICU_CHANNEL_STATE_OVERFLOW_MASK         ((Icu_ChannelStateType)BIT4)
/**@}*/

/**
* @{
* @brief Rising edge
*/
#define ICU_CHANNEL_STATE_RISING                ((Icu_ChannelStateType)BIT5)
#define ICU_CHANNEL_STATE_RISING_SHIFT          (5U)
#define ICU_CHANNEL_STATE_RISING_MASK           ((Icu_ChannelStateType)BIT5)
/**@}*/

/**
* @{
* @brief Falling edge
*/
#define ICU_CHANNEL_STATE_FALLING               ((Icu_ChannelStateType)BIT6)
#define ICU_CHANNEL_STATE_FALLING_SHIFT         (6U)
#define ICU_CHANNEL_STATE_FALLING_MASK          ((Icu_ChannelStateType)BIT6)
/**@}*/

/**
* @{
* @brief Both edges
*/
#define ICU_CHANNEL_STATE_BOTH_EDGES            ((Icu_ChannelStateType)(BIT6|BIT5))
#define ICU_CHANNEL_STATE_BOTH_EDGES_SHIFT      (5U)
#define ICU_CHANNEL_STATE_BOTH_EDGES_MASK       ((Icu_ChannelStateType)(BIT6|BIT5))
/**@}*/

/**
* @{
* @brief Wakeup source
*/
#define ICU_CHANNEL_IS_WAKEUP_SOURCE            ((Icu_ChannelStateType)BIT7)
#define ICU_CHANNEL_IS_WAKEUP_SOURCE_SHIFT      (7U)
#define ICU_CHANNEL_IS_WAKEUP_SOURCE_MASK       ((Icu_ChannelStateType)BIT7)
/**@}*/

/**
 * @brief  Definition of bit mask to isolate the wake up capability  bitfield
 */
#define ICU_WAKEUP_MASK         ((uint32)BIT31)
/**
 * @brief  Definition wake up capability bitfield position
 */
#define ICU_WAKEUP_SHIFT        ((uint32)31U)

/**
 * @brief  Definition of bit mask to isolate the configured edge activation type
 */
#define ICU_EDGE_PARAM_MASK     ((uint32)(BIT30|BIT29))
/**
 * @brief  Definition edge activation type bitfield position
 */
#define ICU_EDGE_PARAM_SHIFT    ((uint32)29U)

/**
 * @brief  Definition majorloop count for dma
 */
#define ICU_DMA_MAJORLOOP_COUNT    ((uint32)4U)

/**
 * @brief  Definition majorloop count for dma
 */
#define ICU_DMA_MAJORLOOP_FIRST_COUNT    ((uint32)1U)

/**@}*/
/*==================================================================================================
*                                              ENUMS
==================================================================================================*/

/*==================================================================================================
*                                  STRUCTURES AND OTHER TYPEDEFS
==================================================================================================*/
/**
* @brief   ICU Channel state type
*
* @violates @ref ICU_IPW_TYPES_H_REF_1 Violates Advisory Rule 2.3, A project should not contain unused type declarations.
*/
typedef uint8 Icu_ChannelStateType;

/** @violates @ref ICU_IPW_TYPES_H_REF_1 Violates Advisory Rule 2.3, A project should not contain unused type declarations.*/
typedef uint8 Icu_Ipw_ChannelType;

/**
* @brief      IP type used to implement a Icu channel
* @violates @ref ICU_IPW_TYPES_H_REF_1 Violates Advisory Rule 2.3, A project should not contain unused type declarations.
*/
typedef uint8 Icu_ChannelIpType;


/**
* @brief      Icu channel high level configuration structure
*/
typedef struct
{
    /** @brief The IP used to implement this specific Icu channel */
    CONST(Icu_ChannelIpType,    ICU_CONST) nChannelIp;
    /** @brief Index in the IP specific configuration table */
    CONST(uint8,                ICU_CONST) u8IdxChannelConfig;
    /** @violates @ref ICU_IPW_TYPES_H_REF_1 Violates Advisory Rule 2.3, A project should not contain unused type declarations.*/
} Icu_IpChannelConfigType;


/**
* @brief      Combined IP specific configuration structure
*/
typedef struct
{
    /** @brief Pointer to the structure containing eMios configuration */
    CONSTP2CONST(Icu_eMios_IpConfigType, ICU_CONST, ICU_APPL_CONST) peMiosIpConfig;
    /** @brief Pointer to the structure containing Siu configuration */
    CONSTP2CONST(Icu_Siu_IpConfigType,   ICU_CONST, ICU_APPL_CONST) pSiuIpConfig;
    /** @brief Pointer to Array containing IP type and index in the IP configuration table
    for each Icu channel */
    CONST       (Icu_IpChannelConfigType,  ICU_CONST)               (*pIpChannelsConfig)[];
    /** @violates @ref ICU_IPW_TYPES_H_REF_1 Violates Advisory Rule 2.3, A project should not contain unused type declarations.*/
} Icu_IpConfigType;

/*==================================================================================================
*                                  GLOBAL VARIABLE DECLARATIONS
==================================================================================================*/

/*==================================================================================================
*                                      FUNCTION PROTOTYPES
==================================================================================================*/

#ifdef __cplusplus
}
#endif

#endif  /* ICU_IPW_TYPES_H */
/** @} */

