#include "t_define.h"
#if 0
#include "t_bk3231sf.h"
#include "t_icu.h"
//#include "useruart.h"
//#include "userpower.h"
#include "t_gpio.h"
// 	#include "useradc.h"

static GPIO_INT_HANDLE_CB_PFN gpioIntHandleCbPfn = NULL;

void GpioGenCfg(uint8 port, uint8 bitoffset, uint32 mode, uint32 io, uint32 pull) 
{
	uint32 *preg, regbitmask, temp;
    
	preg = (uint32 *)(REG_GPIO_BASE+(port<<3));	
	regbitmask = (BM_GPIO_MODE<<bitoffset)|
							 (BM_GPIO_IO_OUT_NOR<<bitoffset)|
							 (BM_GPIO_PULL_UP<<bitoffset)|
							 (BM_GPIO_PULL_DOWN<<bitoffset);	
	temp = (mode<<bitoffset)|
	       ((io&BM_GPIO_IO_OUT_NOR)<<bitoffset)|
				 (pull<<bitoffset);
	*preg = SET_VALUE(*preg, regbitmask, temp);
	
	preg = (uint32 *)(REG_GPIO_BASE+((port<<3)+4));
	regbitmask = (BM_GPIO_IO_IN<<bitoffset);
	temp = ((io&BM_GPIO_IO_IN)<<bitoffset);
	*preg = SET_VALUE(*preg, regbitmask, temp);
}

void GpioModeCfg(uint8 port, uint8 bitoffset, uint32 mode) 
{
	uint32 *preg, regbitmask, temp;
    
	preg = (uint32 *)(REG_GPIO_BASE+(port<<3));
	regbitmask = (BM_GPIO_MODE<<bitoffset);	
	temp = (mode<<bitoffset);
	*preg = SET_VALUE(*preg, regbitmask, temp);
}

void GpioIoCfg(uint8 port, uint8 bitoffset, uint32 io) 
{
	uint32 *preg, regbitmask, temp;
    
	preg = (uint32 *)(REG_GPIO_BASE+(port<<3));	
	regbitmask = (BM_GPIO_IO_OUT_NOR<<bitoffset);	
	temp = ((io&BM_GPIO_IO_OUT_NOR)<<bitoffset);
	*preg = SET_VALUE(*preg, regbitmask, temp);
	
	preg = (uint32 *)(REG_GPIO_BASE+((port<<3)+4));
	regbitmask = (BM_GPIO_IO_IN<<bitoffset);
	temp = ((io&BM_GPIO_IO_IN)<<bitoffset);
	*preg = SET_VALUE(*preg, regbitmask, temp);
}

void GpioPullCfg(uint8 port, uint8 bitoffset, uint32 pull) 
{
	uint32 *preg, regbitmask, temp;
    
	preg = (uint32 *)(REG_GPIO_BASE+(port<<3));
	regbitmask = (BM_GPIO_PULL_UP<<bitoffset)|
							 (BM_GPIO_PULL_DOWN<<bitoffset);	
	temp = (pull<<bitoffset);
	*preg = SET_VALUE(*preg, regbitmask, temp);
}

void GpioSetOutNegate(uint8 port, uint8 bitoffset) 
{
	uint32 *preg;
    
	preg = (uint32 *)(REG_GPIO_BASE+((port<<3)+4));	
	*preg = NEGATE(*preg,BM_GPIO_OUT_DATA<<bitoffset);	
}

void GpioSetOut(uint8 port, uint8 bitoffset, uint32 out) 
{
	uint32 *preg;
    
	preg = (uint32 *)(REG_GPIO_BASE+((port<<3)+4));	
  *preg = SET_VALUE(*preg, BM_GPIO_OUT_DATA<<bitoffset, (out<<BO_GPIO_OUT_DATA)<<bitoffset);
}
bool8 GpioGetIn(uint8 port, uint8 bitoffset) 
{
	uint32 *preg;
	uint32 temp;
    
	preg = (uint32 *)(REG_GPIO_BASE+((port<<3)+4));	
  temp = ((*preg) & (BM_GPIO_IN_DATA<<bitoffset)) >> bitoffset >> BO_GPIO_IN_DATA;
	
	return (bool8)temp;
}
void GpioIntCfg(uint8 port, uint8 bitoffset, uint32 interruptenable, uint32 trigedge) 
{
	REG_GPIO0T3_INT_EN = SET_VALUE(REG_GPIO0T3_INT_EN, 
								                 1ul<<((port<<3)+bitoffset), 
								                 interruptenable<<((port<<3)+bitoffset));
	REG_GPIO0T3_INT_EDGE = SET_VALUE(REG_GPIO0T3_INT_EDGE, 
									                 1ul<<((port<<3)+bitoffset), 
									                 trigedge<<((port<<3)+bitoffset));	
}
void GpioIntEnCfg(uint8 port, uint8 bitoffset, uint32 interruptenable) 
{
	REG_GPIO0T3_INT_EN = SET_VALUE(REG_GPIO0T3_INT_EN, 
								                 1ul<<((port<<3)+bitoffset), 
								                 interruptenable<<((port<<3)+bitoffset));
}

void GpioInTrigedgeCfg(uint8 port, uint8 bitoffset, uint32 trigedge) 
{
	REG_GPIO0T3_INT_EDGE = SET_VALUE(REG_GPIO0T3_INT_EDGE, 
									                 1ul<<((port<<3)+bitoffset), 
									                 trigedge<<((port<<3)+bitoffset));
}
void GpioDeepWakeupCfg(uint8 port, uint8 bitoffset, uint32 wakeupenable) 
{
	REG_ICU_GPIO0T3_DEEP_WAKEUP_EN = SET_VALUE(REG_ICU_GPIO0T3_DEEP_WAKEUP_EN, 
																					   (1ul<<((port<<3))<<bitoffset), 
																					   ((wakeupenable<<(port<<3))<<bitoffset));
}
uint32 GpioGetInitSta(void)
{
	return REG_GPIO0T3_INT_STA;
}
void GpioClearInitSta(uint32 gpiointstate)
{
	REG_GPIO0T3_INT_STA = gpiointstate;
}
void GpioIntHandleCbCfg(GPIO_INT_HANDLE_CB_PFN cbpfn)
{
	gpioIntHandleCbPfn = cbpfn;
}
void GpioIntHandle(void)
{
//	uint32 gpiointstate = REG_GPIO0T3_INT_STA;
//	REG_GPIO0T3_INT_STA = gpiointstate;	

//	ir_callback();
// 	if(gpioIntHandleCbPfn != NULL)
// 	{
// 		(*gpioIntHandleCbPfn)(gpiointstate);
// 	}
}

#endif