#include "yc_lpm.h"
#include "yc11xx_gpio.h"

unsigned short HIBERNATE_FLAG=0x0000;


void Lpm_LockLpm(uint16_t lpmNum)
{
	uint16_t temp;
	temp =( HREADW(M0_LPM_REG))|lpmNum;
	HWRITEW(M0_LPM_REG,temp);
}

void Lpm_unLockLpm(uint16_t lpmNum)
{
	uint16_t temp;
	temp =( HREADW(M0_LPM_REG))&(~lpmNum);
	HWRITEW(M0_LPM_REG,temp);
}

bool Lpm_CheckLpmFlag()
{
	return NONE_LPM_FLAG == HREADW(M0_LPM_REG);
}

void Lpm_ClearLpmFlag()
{
	HWRITEW(M0_LPM_REG,0);
}


void Lpm_enter()
{
    HWRITE(mem_lpm_mode,0x01);
}

void Lpm_exit()
{
    HWRITE(mem_lpm_mode,0x00);
}

void Lpm_Set_Interval(uint16_t gap)
{
  HWRITEW(mem_lpm_interval,gap);  
}

void Lpm_Set_Conn_Interval(uint16_t gap)
{
  HWRITEW(mem_time_wake_gap,gap);     
}


void BT_GpiosetBeforlpm()
{
	uint8_t i;
	for(i=GPIO_0;i<GPIO_MAX_NUM;i++)
	{
		if (i == (HREAD(mem_qspi_gpio_ncs)&GPIO_NUM_MASK)
			|| i == (HREAD(mem_qspi_gpio_sck)&GPIO_NUM_MASK)
			|| i == (HREAD(mem_qspi_gpio_io0)&GPIO_NUM_MASK)
			|| i == (HREAD(mem_qspi_gpio_io1)&GPIO_NUM_MASK)
			|| i == (HREAD(mem_qspi_gpio_io2)&GPIO_NUM_MASK)
			|| i == (HREAD(mem_qspi_gpio_io3)&GPIO_NUM_MASK)	)
		{
			continue;
		}
		else
		{
			GPIO_SetGpioMultFunction(i,GPCFG_PULLDOWN);
		}
	}
}

void Bt_ActionBeforeLpm()
{
	BT_GpiosetBeforlpm();	
}

void Bt_ActionBeforeHibernate()
{
	BT_GpiosetBeforlpm();	
}