#ifndef  _SC7A20_H
#define   _SC7A20_H


#include "commontypedef.h"
#ifdef __cplusplus
extern "C" {
#endif
/***ʹ������ǰ�����ʵ�ʽ����������******/
/**SC7A20��SDO �Žӵأ�  0****************/
/**SC7A20��SDO �Žӵ�Դ��1****************/
#define SC7A20_SDO_VDD_GND           						0
/*****************************************/

/***ʹ������ǰ�����ʵ��IIC�����������***/
/**SC7A20��IIC �ӿڵ�ַ���� 7bits��  0****/
/**SC7A20��IIC �ӿڵ�ַ���� 8bits��  1****/
#define SC7A20_IIC_7BITS_8BITS       						0
/*****************************************/

#define  SL_SC7A20_16BIT_8BIT         						1
/**SC7A20������λ��ѡ��  16bits��    1****/
/**SC7A20������λ��ѡ��   8bits��    0****/
/*****************************************/
#define SL_6D4D2D1D_SEL    							      6

#if SC7A20_SDO_VDD_GND==0
#define SC7A20_IIC_7BITS_ADDR        						0x18
#define SC7A20_IIC_8BITS_ADDR        						0x30
#else
#define SC7A20_IIC_7BITS_ADDR       						0x19
#define SC7A20_IIC_8BITS_ADDR       						0x32
#endif


#if SC7A20_IIC_7BITS_8BITS==0
#define SC7A20_IIC_ADDRESS  							SC7A20_IIC_7BITS_ADDR
#else
#define SC7A20_IIC_ADDRESS  							SC7A20_IIC_8BITS_ADDR
#endif


#define SC7A20_CHIP_ID_ADDRESS    						(UINT8)(0x0F)
#define SC7A20_CHIP_ID_VALUE      						(UINT8)(0x11)

#define  SL_SC7A20_CTRL_REG1      						(UINT8)(0x20)
#define  SL_SC7A20_CTRL_REG2     						(UINT8)(0x21)
#define  SL_SC7A20_CTRL_REG3     						(UINT8)(0x22)
#define  SL_SC7A20_CTRL_REG4      						(UINT8)(0x23) 
#define  SL_SC7A20_CTRL_REG5      						(UINT8)(0x24)
#define  SL_SC7A20_CTRL_REG6     						(UINT8)(0x25)

#define  SL_SC7A20_STATUS_REG     						(UINT8)(0x27)

#define  SL_SC7A20_OUT_X_L        						(UINT8)(0x28)
#define  SL_SC7A20_OUT_X_H        						(UINT8)(0x29)
#define  SL_SC7A20_OUT_Y_L       							(UINT8)(0x2A)
#define  SL_SC7A20_OUT_Y_H        						(UINT8)(0x2B)
#define  SL_SC7A20_OUT_Z_L        							(UINT8)(0x2C)
#define  SL_SC7A20_OUT_Z_H       							(UINT8)(0x2D)

#define  SL_SC7A20_FIFO_CTRL_REG 						(UINT8)(0x2E)
#define  SL_SC7A20_FIFO_SRC_REG   						(UINT8)(0x2F)

#define  SL_SC7A20_INT1_CFG    	 						(UINT8)(0x30)
#define  SL_SC7A20_INT1_SRC       						(UINT8)(0x31)
#define  SL_SC7A20_INT1_THS    	  						(UINT8)(0x32)
#define  SL_SC7A20_INT1_DURATION 						(UINT8)(0x33)

#define  SL_SC7A20_INT2_CFG    	 						(UINT8)(0x34)
#define  SL_SC7A20_INT2_SRC      							(UINT8)(0x35)
#define  SL_SC7A20_INT2_THS    	 						(UINT8)(0x36)
#define  SL_SC7A20_INT2_DURATION  						(UINT8)(0x37)
#define  SL_SC7A20_CLICK_CFG   	  						(UINT8)(0x38)
#define  SL_SC7A20_CLICK_SRC   	 						(UINT8)(0x39)
#define  SL_SC7A20_CLICK_THS   	 						(UINT8)(0x3A)
#define  SL_SC7A20_TIME_LIMIT     						(UINT8)(0x3B)
#define  SL_SC7A20_TIME_LATENCY   						(UINT8)(0x3C)
#define  SL_SC7A20_TIME_WINDOW    						(UINT8)(0x3D)
#define  SL_SC7A20_ACT_THS        						(UINT8)(0x3E)
#define  SL_SC7A20_ACT_DURATION 						(UINT8)(0x3F)
	
/*������ȡ����ʱ�����ݼĴ�����ַ*/
#define  SL_SC7A20_DATA_OUT       						(UINT8)(SL_SC7A20_OUT_X_L)

/**********���⹦�ܼĴ���**********/
/*��ԭ��������Ա�����޸�*/
#define  SL_SC7A20_MTP_ENABLE    	             			(0x00)
#define  SL_SC7A20_MTP_CFG    	  						(UINT8)(0x1E)
#define  SL_SC7A20_MTP_VALUE   	  						(UINT8)(0x05)
#define  SL_SC7A20_SDOI2C_PU_CFG  						(UINT8)(0x57)
#define  SL_SC7A20_SDO_PU_MSK     						(UINT8)(0x08)
#define  SL_SC7A20_I2C_PU_MSK     						(UINT8)(0x04)
#define  SL_SC7A20_HR_ENABLE      						(UINT8)(0X08)
#define  SL_SC7A20_BOOT_ENABLE   						(UINT8)(0X80)   
/*��ԭ��������Ա�����޸�*/


/***************���ݸ�������**���ٶȼ�ʹ��**********/
#define  SL_SC7A20_ODR_POWER_DOWN 					(UINT8)(0x00)
#define  SL_SC7A20_ODR_1HZ        						(UINT8)(0x17)
#define  SL_SC7A20_ODR_10HZ       						(UINT8)(0x27)
#define  SL_SC7A20_ODR_25HZ       						(UINT8)(0x37)
#define  SL_SC7A20_ODR_50HZ       						(UINT8)(0x47)
#define  SL_SC7A20_ODR_100HZ      						(UINT8)(0x57)
#define  SL_SC7A20_ODR_200HZ      						(UINT8)(0x67)
#define  SL_SC7A20_ODR_400HZ      						(UINT8)(0x77)
#define  SL_SC7A20_ODR_1600HZ     						(UINT8)(0x87)
#define  SL_SC7A20_ODR_1250HZ     						(UINT8)(0x97)
#define  SL_SC7A20_ODR_5000HZ    						(UINT8)(0x9F)
    
#define  SL_SC7A20_LOWER_POWER_ODR_1HZ        			(UINT8)(0x1F)
#define  SL_SC7A20_LOWER_POWER_ODR_10HZ       		(UINT8)(0x2F)
#define  SL_SC7A20_LOWER_POWER_ODR_25HZ       		(UINT8)(0x3F)
#define  SL_SC7A20_LOWER_POWER_ODR_50HZ       		(UINT8)(0x4F)
#define  SL_SC7A20_LOWER_POWER_ODR_100HZ      		(UINT8)(0x5F)
#define  SL_SC7A20_LOWER_POWER_ODR_200HZ     			(UINT8)(0x6F)
#define  SL_SC7A20_LOWER_POWER_ODR_400HZ      		(UINT8)(0x7F)
/***************���ݸ�������**���ٶȼ�ʹ��**********/


/***************��������������**********************/
#define  SL_SC7A20_FS_2G        							(UINT8)(0x00)	
#define  SL_SC7A20_FS_4G        							(UINT8)(0x10)
#define  SL_SC7A20_FS_8G       							(UINT8)(0x20)
#define  SL_SC7A20_FS_16G         							(UINT8)(0x30)
/***************��������������**********************/


/***ȡֵ��0-127֮�䣬�˴�������****/
#define SL_SC7A20_INT_THS_5PERCENT  					 (UINT8)(0x06)
#define SL_SC7A20_INT_THS_10PERCENT					 (UINT8)(0x0C)
#define SL_SC7A20_INT_THS_20PERCENT 					 (UINT8)(0x18)
#define SL_SC7A20_INT_THS_40PERCENT 					 (UINT8)(0x32)
#define SL_SC7A20_INT_THS_80PERCENT 					 (UINT8)(0x60)


/***ȡֵ��0-127֮�䣬�˴������� ����ODR��λʱ��****/
#define SL_SC7A20_INT_DURATION_2CLK 					 (UINT8)(0x02)
#define SL_SC7A20_INT_DURATION_5CLK 					 (UINT8)(0x05)
#define SL_SC7A20_INT_DURATION_10CLK					 (UINT8)(0x0A)
#define SL_SC7A20_INT_DURATION_30CLK					 (UINT8)(0x2E)

/***�ж���Чʱ�ĵ�ƽ���ã��ߵ�ƽ�൱�������أ��͵�ƽ�൱���½���****/
#define SL_SC7A20_INT_ACTIVE_LOWER_LEVEL				 (UINT8)(0x02) //0x02:�ж�ʱINT1����� �͵�ƽ
#define SL_SC7A20_INT_ACTIVE_HIGH_LEVEL				 (UINT8)(0x00) //0x00:�ж�ʱINT1����� �ߵ�ƽ 

/***�ж���Чʱ�ĵ�ƽ���ã��ߵ�ƽ�൱�������أ��͵�ƽ�൱���½���****/
#define SL_SC7A20_INT_AOI1_INT1         					 (UINT8)(0x40) //AOI1 TO INT1
#define SL_SC7A20_INT_AOI2_INT1          					 (UINT8)(0x20) //AOI2 TO INT1


extern INT32 GSENSOR_WriteReg(UINT8 addr, UINT8 value);
extern INT32 GSENSOR_ReadReg(UINT8 reg, UINT8 len, UINT8 *buf);

INT8  SL_SC7A20_Online_Test(void);
INT8  SL_SC7A20_BOOT(void);
INT8  SL_SC7A20_FS_Config(UINT8 Sc7a20_FS_Reg);
INT8  SL_SC7A20_INT_Config(void);
INT8  SL_SC7A20_INT_RESET(void);
INT8  SL_SC7A20_Power_Config(UINT8 Power_Config_Reg);
#if   SL_SC7A20_16BIT_8BIT==0
INT8  SL_SC7A20_Read_XYZ_Data(INT8 *SL_SC7A20_Data_XYZ_Buf);
#elif SL_SC7A20_16BIT_8BIT==1
INT8  SL_SC7A20_Read_XYZ_Data(INT16 *SL_SC7A20_Data_XYZ_Buf);
#endif

void GsensorInit(void);
#ifdef __cplusplus
}
#endif

#endif /* _SC7A20_H */