/*""FILE COMMENT""*******************************************************
* System Name	: Multi-function Timer Pulse Unit API for RX62N
* File Name		: r_pdl_MTU2_RX62Nxx.h
* Version		: 1.02
* Contents		: MTU2 API header
* Customer		: 
* Model			: 
* Order			: 
* CPU			: RX
* Compiler		: RXC
* OS			: Nothing
* Programmer	: 
* Note			: 
************************************************************************
* Copyright, 2011. Renesas Electronics Corporation
* and Renesas Solutions Corporation
************************************************************************
* History		: 2011.04.08
*				: Ver 1.02
*				: CS-5 release.
*""FILE COMMENT END""**************************************************/

#ifndef R_PDL_MTU2_RX62Nxx_H
#define R_PDL_MTU2_RX62Nxx_H

#define MTU2_UNITS 				2
#define MTU2_CHANNELS_PER_UNIT	6
#define MTU2_CHANNELS (uint8_t)(MTU2_UNITS * MTU2_CHANNELS_PER_UNIT)

/* Callback function storage */
extern VoidCallBackFunc rpdl_MTU2_func1_callback_func[MTU2_CHANNELS];
extern VoidCallBackFunc rpdl_MTU2_func2_callback_func[MTU2_CHANNELS];
extern VoidCallBackFunc rpdl_MTU2_func3_callback_func[MTU2_CHANNELS];
extern VoidCallBackFunc rpdl_MTU2_func4_callback_func[MTU2_CHANNELS];
extern VoidCallBackFunc rpdl_MTU2_TGRE_callback_func[MTU2_CHANNELS];
extern VoidCallBackFunc rpdl_MTU2_TGRF_callback_func[MTU2_CHANNELS];
extern VoidCallBackFunc rpdl_MTU2_Overflow_callback_func[MTU2_CHANNELS];
extern VoidCallBackFunc rpdl_MTU2_Underflow_callback_func[MTU2_CHANNELS];

typedef struct R_MTU2_Create_parameters
{
	uint32_t data2;
	uint32_t data3;
	uint32_t data4;
	uint16_t data5;
	uint32_t data6;
	uint32_t data7;
	uint32_t data8;
	uint16_t data9;
	uint16_t data10;
	uint16_t data11;
	uint16_t data12;
	uint16_t data13;
	uint16_t data14;
	uint16_t data15;
	uint16_t data16;
	uint16_t data17;
	uint16_t data18;
	VoidCallBackFunc func1;
	VoidCallBackFunc func2;
	VoidCallBackFunc func3;
	VoidCallBackFunc func4;
	uint8_t data19;
	VoidCallBackFunc func5;
	VoidCallBackFunc func6;
	VoidCallBackFunc func7;
	VoidCallBackFunc func8;
	uint8_t data20;
} R_MTU2_Create_structure;

typedef struct R_MTU2_ControlChannel_parameters
{
	uint8_t data2;
	uint16_t data3;
	uint16_t data4;
	uint16_t data5;
	uint16_t data6;
	uint16_t data7;
	uint16_t data8;
	uint16_t data9;
	uint16_t data10;
	uint16_t data11;
	uint16_t data12;
} R_MTU2_ControlChannel_structure;

typedef struct R_MTU2_ControlUnit_parameters
{
	uint16_t data2;
	uint32_t data3;
	uint32_t data4;
	uint16_t data5;
	uint32_t data6;
	uint8_t data7;
	uint16_t data8;
	uint16_t data9;
	uint16_t data10;
} R_MTU2_ControlUnit_structure;

/* Library prototypes */
bool R_MTU2_SetAll(
	const uint16_t
);
bool R_MTU2_CreateAll(
	const uint8_t,
	R_MTU2_Create_structure * const
);
bool R_MTU2_DestroyAll(
	const uint8_t
);
bool R_MTU2_ControlChannelAll(
	const uint8_t,
	R_MTU2_ControlChannel_structure * const
);
bool R_MTU2_ControlUnitAll(
	const uint8_t,
	R_MTU2_ControlUnit_structure * const
);
bool R_MTU2_ReadChannelAll(
	const uint8_t,
	volatile uint8_t * const,
	volatile uint16_t * const,
	volatile uint16_t * const,
	volatile uint16_t * const,
	volatile uint16_t * const,
	volatile uint16_t * const,
	volatile uint16_t * const,
	volatile uint16_t * const
);
bool R_MTU2_ReadUnitAll(
	const uint8_t,
	volatile uint16_t * const,
	volatile uint8_t * const
);
bool ReturnFalse(void);
void R_MTU2_Create_load_defaults(R_MTU2_Create_structure * const);

/* Macro definitions */

#define R_MTU2_Set(a) \
( \
R_MTU2_SetAll( (a) ) \
)

#define R_MTU2_Create(a, b) \
( \
( (a) < MTU2_CHANNELS ) ? \
R_MTU2_CreateAll( (a), (b) ) : \
ReturnFalse() \
)

#define R_MTU2_ControlChannel(a, b) \
( \
( (a) < MTU2_CHANNELS ) ? \
R_MTU2_ControlChannelAll( (a), (b) ) : \
ReturnFalse() \
)

#define R_MTU2_ControlUnit(a, b) \
( \
( (a) < MTU2_UNITS ) ? \
R_MTU2_ControlUnitAll( (a), (b) ) : \
ReturnFalse() \
)

#define R_MTU2_ReadChannel(a, b, c, d, e, f, g, h, i) \
( \
( (a) < MTU2_CHANNELS ) ? \
R_MTU2_ReadChannelAll( (a), (b), (c), (d), (e), (f), (g), (h), (i) ) : \
ReturnFalse() \
)

#define R_MTU2_ReadUnit(a, b, c) \
( \
( (a) < MTU2_UNITS ) ? \
R_MTU2_ReadUnitAll( (a), (b), (c) ) : \
ReturnFalse() \
)

#define R_MTU2_Destroy(a) \
( \
( (a) < MTU2_UNITS ) ? \
R_MTU2_DestroyAll( (a) ) : \
ReturnFalse() \
)

#endif
/* End of file */