/* ======================================================================
 *   Copyright (C) 2022 Texas Instruments Incorporated
 *
 *   All rights reserved. Property of Texas Instruments Incorporated.
 *   Restricted rights to use, duplicate or disclose this code are
 *   granted through contract.
 *
 *   The program may not be used without the written permission
 *   of Texas Instruments Incorporated or against the terms and conditions
 *   stipulated in the agreement under which this program has been
 *   supplied.
 * ==================================================================== */

/**
 *  \file     CDD_I2c.h
 *
 *  \brief    This file contains CDD I2C MCAL driver implementation.
 *
 */

/*  -------------------------------------------------------------------------------------------------------------------
*  FILE DESCRIPTION
*  -------------------------------------------------------------------------------------------------------------------
*         File:  CDD_I2C.c
*    Component:  AM263x MCAL Driver
*       Module:  CDD_I2CDriver
*    Generator:  None
*
*  Description: This component provides services for initialization and control of the microcontroller internal
*                I2C using complex device driver (CDD).
*********************************************************************************************************************/

#ifndef I2C_H
#define I2C_H

/* COMPATIBLE WITH C and C++ languages */
#ifdef __cplusplus
extern "C"{
#endif

/******************************************************************************
**                      Include Section                                      **
******************************************************************************/
#include "Cdd_I2c_Cfg.h"
#include "sys_common.h"
#include "SchM_CDD_I2C.h"

/******************************************************************************
**                      Version information                                   *
******************************************************************************/
#define CDDI2C_VERSION_AR_RELEASE_MAJOR_VERSION     (4U)
#define CDDI2C_VERSION_AR_RELEASE_MINOR_VERSION     (3U)
#define CDDI2C_VERSION_AR_RELEASE_REVISION_VERSION  (1U)
/* Module Software version information */
/** \brief Driver Implementation Major Version */
#define CDDI2C_VERSION_SW_MAJOR_VERSION             (0U)
/** \brief Driver Implementation Minor Version */
#define CDDI2C_VERSION_SW_MINOR_VERSION             (9U)
/** \brief Driver Implementation Patch Version */
#define CDDI2C_VERSION_SW_PATCH_VERSION             (0U)

/**
 *  \name I2C Driver ID Info
 *  @{
 */

/** \brief Texas Instruments Vendor ID */
#define CDDI2C_VENDOR_ID                  	((uint16) 30U)
/** \brief I2C Driver Module ID */
#define CDDI2C_MODULE_ID                  	((uint16) 255U)
/** \brief I2C Driver Instance ID */
#define CDDI2C_INSTANCE_ID               	(uint8)0U
/* @} */

#define I2C_ARBITRATION     (uint8) 128U
#define I2C_TXNAK           (uint8) 64U
#define I2C_BUS_BUSY        (uint8) 32U
#define I2C_TIME_OUT        (uint8) 16U
#define I2C_ADDR_NAK        (uint8) 8U
#define I2C_COM_CANCELED    (uint8) 4U
#define I2C_COM_FAIL        (uint8) 2U

#define I2C_CHK_BUS_FREE        (uint8)0U

#define I2C_SEND_ADDRESS        (uint8)1U

#define I2C_PERFORM_READ        (uint8)2U

#define I2C_PERFORM_WRITE        (uint8)2U

#define I2C_MONITER_STOP        (uint8)3U

#define I2C_MODULE_INTERNAL_CLK_4MHZ    (4000000U)

#define I2C_MODULE_INTERNAL_CLK_12MHZ   (12000000U)

#define I2C_ENTER_CRITICAL_SEC  SchM_Enter_CDD_I2C_EXCLUSIVE_AREA_0();
#define I2C_EXIT_CRITICAL_SEC  SchM_Exit_CDD_I2C_EXCLUSIVE_AREA_0();
/******************************************************************************
**                      Service IDs                                          **
******************************************************************************/
/* service ID of functionality of I2C */

#define I2C_SID_INIT                    	(uint8)0x00U
#define I2C_SID_DEINIT                 		(uint8)0x01U
#define I2C_SID_GETVERSIONINFO          	(uint8)0x02U
#define I2C_SID_SETUPEB                 	(uint8)0x03U
#define I2C_SID_SETUPEBDYNAMIC          	(uint8)0x04U
#define I2C_SID_ASYNCTRANSMIT           	(uint8)0x05U
#define I2C_SID_CANCEL                 		(uint8)0x06U
#define I2C_SID_GETRESULT               	(uint8)0x07U
#define I2C_SID_GETSEQUENCERESULT       	(uint8)0x08U
#define I2C_SID_MAINFUNCTION	            (uint8)0x09U
#define I2C_SID_POLLING_MODE_PROCESSING		(uint8)0x0AU	
#define	I2C_SID_SETHANDLING					(uint8)0x0BU		//need to check id
#define I2C_SID_GETSTATUS               	(uint8)0x0CU		//need to check id

#define I2C_TIME_OUT        (uint8) 16U

#define I2C_IDLE_TIME        100U

#define I2C_STS_SUCCESS                 ( 0)
#define I2C_STS_ERR                     (-1)
#define I2C_STS_ERR_TIMEOUT             (-2)
#define I2C_STS_ERR_BUS_BUSY            (-3)
#define I2C_STS_ERR_NO_ACK              (-4)
#define I2C_STS_ERR_ARBITRATION_LOST    (-5)
#define I2C_STS_ERR_ACCESS_ERROR        (-6)
#define I2C_STS_ERR_COMMAND_FAILURE     (-7)
#define I2C_STS_ERR_INVALID_COMMAND     (-8)
#define I2C_STS_RESTART                 (-9)

/******************************************************************************
**                      DET Error Codes                                      **
******************************************************************************/

/*DET code to report API service used without module initialization*/
#define I2C_E_UNINIT                    (uint8)0x01U

/*DET code to report API I2C_Init service called while the I2C driver
has already been initialized*/
#define I2C_E_ALREADY_INITIALIZED		(uint8)0x02U

/*DET code to report API service called with Driver is busy*/
#define I2C_E_BUSY              		(uint8)0x03U

/*DET code to report API service called with wrong parameter*/
#define I2C_E_PARAM_CHANNEL				(uint8)0x04U

/*DET code to report API service called with Sequence out of bounds,
exceeds the maximum number of configured sequences*/
#define I2C_E_PARAM_SEQ		            (uint8)0x05U

/*DET code to report APIs called with Length out of bounds – a zero length
is not accepted. The total length is limited to 65535*/
#define I2C_E_PARAM_LENGTH              (uint8)0x06U

/*DET code to report APIs called with an invalid version info pointer
has been passed (a NULL_PTR)*/
#define	I2C_E_PARAM_VINFO_PTR			(uint8)0x07U

/*DET code to report APIs called with an invalid configuration has been
passed (a NULL_PTR)*/
#define	I2C_E_PARAM_CONFIG				(uint8)0x08U

/*DET code to report APIs called with two valid transmission buffers have
been passed (no NULL_PTR)*/
#define	I2C_E_PARAM_TRANS_BUFFER		(uint8)0x09U

/*DET code to report APIs called with Address out of bounds, exceeds the
limit of the configured address range*/
#define	I2C_E_PARAM_ADDRESS				(uint8)0x0AU

#define	I2C_E_PARAM_POINTER				(uint8)0x0BU

/******************************************************************************
**                           Macros			                                 **
******************************************************************************/
#define INVALID_SEQUENCE 255U

#define CANCEL_RUNNINGSEQ 255U

/* This preprocessor is define for use constant number in code */
#define I2C_NUM_0   0U
#define I2C_NUM_1   1U
#define I2C_NUM_2   2U
#define I2C_NUM_3   3U
#define I2C_NUM_4   4U
#define I2C_NUM_5   5U
#define I2C_NUM_6   6U
#define I2C_NUM_7   7U
#define I2C_NUM_8   8U

#define I2C_MAX_CHANNEL_ACCEPT    (I2C_ChannelType)((I2C_MAX_SEQUENCE_CONFIG +\
                                  I2C_NUM_1) * (I2C_ChannelType)4)
/******************************************************************************
**                      Type Definitions                                     **
******************************************************************************/
/*Address for BUS clients*/
typedef uint16	I2C_AddressType;
/*Data format of I2C used for transmission and reception*/
typedef uint8	I2C_DataType;
/*Type for any length parameter*/
typedef uint16	I2C_DataLengthType;
/*Pointer type for general buffer handling*/
typedef uint16*	I2C_DataPtrType;
/*Pointer type for TX Buffer handling*/
typedef const uint16*	I2C_DataConstPtrType;
/*Type for sequence identifier*/
typedef uint8	I2C_SequenceType;
/*Type for channel identifier*/
typedef uint8	I2C_ChannelType;

typedef	uint16 Dem_EventIdType; 
typedef	uint32* I2C_ConstSeqDescPtrType;
typedef	uint32* I2C_ConstChannelDescPtrType; 
typedef	uint32* I2C_BusDescPtrType; 
typedef	uint32* I2C_ConstHwUnitDescPtrType;

/** \brief Typedef for job end notification function pointer */
/* Requirements : SWS_Spi_00192 */
typedef void (*I2C_JobEndNotifyType)( void ) ;
/** \brief Typedef for sequence end notification function pointer */
/* Requirements : SWS_Spi_00193 */
typedef void (*I2C_SeqNotificationType)(void) ;
typedef void (*I2C_SequenceEndNotification)( void ) ;
typedef void (*I2C_SequenceErrorNotification)( void ) ;
typedef void (*I2C_DataBuffer)( void ) ;

typedef uint16 I2C_MemAddressType;

typedef uint8 I2c_HWUnitType;

typedef enum ETag_I2c_TransmissionCmd
{
  I2C_WRITE=0,
  
  I2C_READ
}I2C_TransmissionCmdType;

typedef enum
{
	I2C_UNINIT = 0U,
	/*Driver not Initialized*/
	I2C_IDLE,
	/*Driver is Initialized and ready*/
	I2C_BUSY
	/*Driver is processing at least one sequence*/
}I2CComponentStatusType;

typedef enum
{
	I2C_CH_RESULT_OK = 0U,
	/*Channel has finished successfully*/
	I2C_CH_RESULT_BUSFAIL,
	/*Bus failure detected*/
	I2C_CH_RESULT_ARBFAIL,
	/*Arbitration failure detected*/
	I2C_CH_RESULT_NACKFAIL,
	/*NACK failure detected*/
	
	I2C_CH_PENDING,
	
	I2C_CH_FAILED,
	
	I2C_CHL_CANCELED
}I2CChannelResultType;

typedef enum
{
	I2C_SEQ_OK = 0U,
	/*Sequence finished normal*/
	I2C_SEQ_PENDING,
	/*Sequence is in progress or queued*/
	I2C_SEQ_QUEUED,
	/*Sequence is queued*/
	I2C_SEQ_NACK,
	/*Sequence encountered a NACK signal*/
	I2C_SEQ_FAILED,
	/*Sequence failed due to error*/
	I2C_SEQ_CANCELLED
	/*Sequence was cancelled by request*/
}I2C_SeqResultType;

typedef enum
{
	I2C_BURST = 0U,
	/*No timeout observation*/
	I2C_RECURRENT
	/*Perform counter measure in case of timeout*/
}I2C_HandlingType;

typedef enum
{
	I2C_E_ADDRESSING_FAILURE = 0U,
	/**I2C Addressing failed**/
	I2C_E_ARBITRATION_FAILURE,
	/**I2C Arbitration failed**/
	I2C_E_BUS_FAILURE
}I2C_DEM_ErrorCode;

typedef struct Stag_I2cSequenceStatusType
{
  VAR(I2C_SeqResultType, I2C_VAR) SequenceStatus;
  
  VAR(I2C_SequenceType, I2C_VAR)  SequenceId;
}I2C_SequenceStatusType;

/* The structure is used for making I2C frame*/
typedef struct
{
  /* I2C address Ptr*/
  VAR(I2C_DataConstPtrType, I2C_CONST) I2c_MemAddptr;
  /* I2C transmit buffer Ptr*/
  VAR(I2C_DataConstPtrType, I2C_CONST) TxBufferPtr;
  /* I2C Received buffer Ptr*/
  VAR(I2C_DataPtrType, I2C_VAR) RxBufferPtr;
  /* I2C Length*/
  VAR(I2C_DataLengthType, I2C_VAR)  RxNoOfByte[3];
  /* I2C sequence frame */
  VAR(I2C_SequenceType, I2C_VAR) I2c_SequenceID;
  /* I2C TXD command */
  VAR(I2C_AddressType, I2C_VAR) I2c_AddrWRCMD;
  /* I2C RX command */
  VAR(I2C_AddressType, I2C_VAR) I2c_AddrRDCMD;
}I2C_FrameType;

typedef enum
{
	I2C0_CFG =0,
	
	I2C1_CFG,
	
	I2C2_CFG,
	
	I2C3_CFG
}I2CModules;

typedef enum
{
	IB =0,
	
	EB
}I2CChannelBusType;

/**
 *  \brief This type defines a range of specific Jobs status for I2C
 *  Handler/Driver
 */
typedef enum
{
    I2C_JOB_OK = 0U,
    /**< The last transmission of the Job has been finished successfully */
    I2C_JOB_PENDING = 1U,
    /**< The I2C Handler/Driver is performing a I2C Job.
     *   The meaning of this status is equal to I2C_BUSY */
    I2C_JOB_FAILED = 2U,
    /**< The last transmission of the Job has failed */
    I2C_JOB_QUEUED = 3U
    /**< An asynchronous transmit Job has been accepted, while
    * actual transmission for this Job has not started yet */
} I2C_JobResultType;

/**
 *  \brief This type defines a range of specific HW unit status for SPI
 *  Handler/Driver
 */
typedef enum
{
    I2C_HW_UNIT_OK = 0U,
    /**< HW unit result is ok */
    I2C_HW_UNIT_PENDING = 1U,
    /**< HW unit result is pending */
    I2C_HW_UNIT_FAILED = 2U
    /**< HW unit result is failed */
} I2C_HwUnitResultType;

typedef enum
{
    MASTER_MODE = 0U,
 
    SLAVE_MODE 
} I2C_HwMode;

typedef enum
{
    TRANSMITTER = 0U,
 
    RECEIVER 
}I2C_HwDataMode;

typedef enum
{
 I2C_DELAY_BIG   =  (30000U),
 I2C_DELAY_MED   =  (10000U),
 I2C_DELAY_SMALL =	(5000U),
 I2C_DELAY_USEC	 =	(250U)
}I2C_DelayType;

typedef struct STag_I2c_ChannelVarDescType
{
  VAR(uint32, AUTOMATIC) I2cSlaveAddress;

  VAR(I2C_DataPtrType, AUTOMATIC)I2cDataBufferPtr;
  
  VAR(uint8, AUTOMATIC) I2cDataLength;
  
  VAR(I2CComponentStatusType, AUTOMATIC) I2cChannelStatus;
  
  VAR(I2CChannelResultType, AUTOMATIC) I2cChannelResultType;
  
  VAR(I2C_TransmissionCmdType, AUTOMATIC) I2cChannelDirection;
  
  VAR(I2C_SeqResultType, AUTOMATIC) I2cSequenceStatus;
}I2c_ChannelVarDescType;

/* Channel configuration structure */
typedef struct STag_I2c_ChannelConfig
{
  /*Channel ID*/
  VAR(I2C_ChannelType, AUTOMATIC)  I2cChannelId;

  /*Default data to be transmission. i.e. Default: I2C chip Address*/
  
  VAR(uint8, AUTOMATIC) I2cDefaultData;
  
  VAR(uint8, AUTOMATIC) I2cChainedAttribute;
  
  P2VAR(I2c_ChannelVarDescType,AUTOMATIC, I2C_VAR)I2cChannelVar;
}I2C_ChannelConfigType;

typedef const I2C_ChannelConfigType *I2c_ChannelListType;

/* Sequence configuration structure */
typedef struct STag_I2c_SequenceConfig
{
  /*This parameter is a reference to a notification function.*/
  VAR(uint8, AUTOMATIC)I2cSequenceId;
  
  VAR(I2C_SequenceEndNotification, AUTOMATIC)I2cSequenceEndNotification;
  
  VAR(I2C_SequenceErrorNotification, AUTOMATIC)I2cSeqErrorNotification;
  
  VAR(uint8, AUTOMATIC)I2cNoofChannels;
  
  VAR(uint8, AUTOMATIC)I2cHandleNack;
  
  VAR(uint8, AUTOMATIC)I2cSequenceQueue; 

  P2CONST(I2c_ChannelListType, AUTOMATIC, I2C_CONST) I2c_ChannelList;  
  
  P2VAR(I2C_SeqResultType, AUTOMATIC, I2C_VAR) I2cSequenceStatus;
}I2C_SequenceConfigType;

typedef struct STag_I2c_HwConfig
{
	VAR(I2CModules, AUTOMATIC) hwUnitId;
	
	VAR(uint8, AUTOMATIC) hwChannelId;
	
	VAR(uint32, AUTOMATIC) hwBitRate;
	
	boolean hwExtendedAddress;
}I2C_HwConfigType;

/* I2C configuration parameter structure */
typedef struct
{
	//Dem_EventIdType DemAddressError;
	//Dem_EventIdType DemArbitrationLoss;
	//Dem_EventIdType DemBusError;
	/* I2C Sequence parameter */
	P2CONST(I2C_SequenceConfigType, AUTOMATIC, I2C_CONST) I2c_SequenceCfgPtr;
	/* I2C Channel configuration parameter*/
	P2CONST(I2C_ChannelConfigType, AUTOMATIC, I2C_CONST) I2c_ChannelCfgPtr;
	/* Max. Bus Dlcs as parameter*/
	//P2CONST(I2c_BusDescPtrType, AUTOMATIC, I2C_CONST) I2c_BusCfgPtr;
	/* I2C Hardware configuration parameter*/
	P2CONST(I2C_HwConfigType, AUTOMATIC, I2C_CONST) I2c_HwCfgPtr;
	/* Max. Sequence as parameter*/
	VAR(uint8, I2C_CONST)	I2c_NumOfSeq;
	/* Max. Channel as parameter*/
	VAR(uint8, I2C_CONST)	I2c_NumOfCh;
	/* Max. Bus as parameter*/
	//VAR(uint8, I2C_CONST)	I2c_NumOfBus;
	/* Max. Hardware units as parameter*/
	VAR(uint8, I2C_CONST)	I2c_NumOfHwUnits;
	/* Max. Data lenth as parameter*/
	VAR(uint16, I2C_CONST)	I2c_MaxDataLength;	
}I2C_ConfigType;

/**
 *  \brief This type defines a range of HW I2C Hardware microcontroller
 *         peripheral allocated to this Job
 */
typedef enum
{
    CSIB0 = 0U,
    /**< I2C0_CFG instance */
    CSIB1,
    /**< I2C1_CFG instance */
    CSIB2,
    /**< I2C2_CFG instance */
    CSIB3,
    /**< I2C3_CFG instance */
    CSIB4,
    /**< MCU_I2C0_CFG instance */
    CSIB5,
    /**< WKUP_I2C0_CFG instance */

} I2C_HwUnitType;

typedef struct Stag_I2cChannelStatus
{
  VAR(I2CChannelResultType, I2C_VAR) ChannelStatus;
  
  VAR(I2C_ChannelType, I2C_VAR)  ChannelId;
}I2C_ChannelStatusType;

typedef enum
{
	FULL_TRANSFER =  0U,
	
	DUAL_PHASE_TRANSFER,
	
	MULTI_PHASE_TRANSFER
}I2C_CommandSequence;

typedef enum
{
	I2C_100kHz = 0,
	
	I2C_400kHz,
	
	I2C_1P0Mhz,
	
	I2C_3P4Mhz
}I2C_BitRate;
/******************************************************************************
**                      Global Variables                                     **
******************************************************************************/

/*****************************************************************************
**                      Exported Functions                                  **
******************************************************************************/

#define I2C_START_SEC_CODE
#include "I2c_MemMap.h"
/* I2C hardware is Initializing */
extern FUNC(void, I2C_CODE) I2c_Init
                        (P2CONST(I2C_ConfigType, AUTOMATIC, I2C_CONST)
                        ConfigPtr);
#define I2C_STOP_SEC_CODE
#include "I2c_MemMap.h"

#define I2C_START_SEC_CODE
#include "I2c_MemMap.h"
/* I2C hardware is de-initializing */
extern FUNC(Std_ReturnType, I2C_CODE)I2c_DeInit(P2CONST(I2C_ConfigType, AUTOMATIC, I2C_CONST)ConfigPtr);
#define I2C_STOP_SEC_CODE
#include "I2c_MemMap.h"

#define I2C_START_SEC_CODE
#include "I2c_MemMap.h"
/* service is used to store Channel ID and related data */
extern FUNC(Std_ReturnType, I2C_CODE)I2c_SetupEB(
                        VAR(I2C_ChannelType, AUTOMATIC) Channel,
                        VAR(I2C_DataConstPtrType, AUTOMATIC) TxDataBufferPtr,
                        VAR(I2C_DataPtrType, AUTOMATIC) RxDataBufferPtr,
                        VAR(I2C_DataLengthType, AUTOMATIC) Length);
#define I2C_STOP_SEC_CODE
#include "I2c_MemMap.h"

#define I2C_START_SEC_CODE
#include "I2c_MemMap.h"
/* service is used to store Channel ID, slave address and related data */
extern FUNC(Std_ReturnType, I2C_CODE) I2c_SetupEBDynamic(
                        VAR(I2C_ChannelType, AUTOMATIC) Channel,
                        VAR(I2C_AddressType, AUTOMATIC) Address,
                        VAR(I2C_DataConstPtrType,I2C_CONST) TxDataBufferPtr,
                        VAR(I2C_DataPtrType,I2C_VAR) RxDataBufferPtr,
                        VAR(I2C_DataLengthType, AUTOMATIC) Length);
#define I2C_STOP_SEC_CODE
#include "I2c_MemMap.h"

#define I2C_START_SEC_CODE
#include "I2c_MemMap.h"
/* service is used to store Sequence ID for I2C frame */
extern FUNC(Std_ReturnType, I2C_CODE) I2c_AsyncTransmit(
                        VAR(I2C_SequenceType, AUTOMATIC) Sequence);
#define I2C_STOP_SEC_CODE
#include "I2c_MemMap.h"

#define I2C_START_SEC_CODE
#include "I2c_MemMap.h"
/* service is used to find the I2C status */
extern FUNC(StatusType, I2C_CODE)I2c_GetStatus (void );
#define I2C_STOP_SEC_CODE
#include "I2c_MemMap.h"

#define I2C_START_SEC_CODE
#include "I2c_MemMap.h"
/* service is used to find the I2C channel result */
extern FUNC(I2CChannelResultType, I2C_CODE)I2c_GetResult(
                        VAR(I2C_ChannelType, AUTOMATIC) Channel);
#define I2C_STOP_SEC_CODE
#include "I2c_MemMap.h"

#define I2C_START_SEC_CODE
#include "I2c_MemMap.h"
/* service is used to find the I2C Sequence result */
extern FUNC(I2C_SeqResultType, I2C_CODE)I2c_GetSequenceResult(
                        VAR(I2C_SequenceType, AUTOMATIC) Sequence);
#define I2C_STOP_SEC_CODE
#include "I2c_MemMap.h"

#define I2C_START_SEC_CODE
#include "I2c_MemMap.h"
/* service is used to cancel the running or queued sequence */
extern FUNC(void, I2C_CODE) I2c_Cancel(
                        VAR(I2C_SequenceType, AUTOMATIC) Sequence);
#define I2C_STOP_SEC_CODE
#include "I2c_MemMap.h"

#if (I2C_VERSION_INFO_API    == STD_ON)
#define I2C_START_SEC_CODE
#include "I2c_MemMap.h"
/* service is used I2C version information */
extern FUNC(void, I2C_CODE)I2c_GetVersionInfo
                        (P2VAR(Std_VersionInfoType, AUTOMATIC, I2C_VAR)
                        VersioninfoPtr);

#define I2C_STOP_SEC_CODE
#include "I2c_MemMap.h"
#endif

#define I2C_START_SEC_CODE
#include "I2c_MemMap.h"
/* service is used to handle bus based on handling parameter  */
extern FUNC(void, I2C_CODE) I2c_SetHandling(
                        VAR(I2C_HandlingType, AUTOMATIC) Handling);
#define I2C_STOP_SEC_CODE
#include "I2c_MemMap.h"

#define I2C_START_SEC_CODE
#include "I2c_MemMap.h"
/* service is responsible for physical layer communication  */
extern FUNC(uint8, I2C_CODE) I2c_MainFunction ( void );
#define I2C_STOP_SEC_CODE
#include "I2c_MemMap.h"

#define I2C_START_SEC_CODE
#include "I2c_MemMap.h"
FUNC(uint8, I2C_CODE) I2c_PollingModeProcessing( void );
#define I2C_STOP_SEC_CODE
#include "I2c_MemMap.h"
#endif /* I2C_H */

/*****************************************************************************
**                             End of File                                  **
******************************************************************************/
