#ifndef _PAJ7620U2_ #define _PAJ7620U2_ //i2c address #define PAJ7620U2_I2C_ADDRESS 0x73 //Register Bank select #define PAJ_BANK_SELECT 0xEF /*Bank0=0x00,Bank1=0x01*/ //Register Bank 0 #define PAJ_SUSPEND 0x03 /*I2C suspend command (Write 0x01 to enter suspend state). I2C wake-up command is slave ID wake-up. Refer to topic ��I2C Bus Timing Characteristics and Protocol��*/ #define PAJ_INT_FLAG1_MASK 0x41 /*Gesture detection interrupt flag mask*/ #define PAJ_INT_FLAG2_MASK 0x42 /*Gesture/PS detection interrupt flag mask*/ #define PAJ_INT_FLAG1 0x43 /*Gesture detection interrupt flag*/ #define PAJ_INT_FLAG2 0x44 /*Gesture/PS detection interrupt flag*/ #define PAJ_STATE 0x45 /*State indicator for gesture detection (Only functional at gesture detection mode)*/ #define PAJ_PS_HIGH_THRESHOLD 0x69 /*PS hysteresis high threshold (Only functional at proximity detection mode)*/ #define PAJ_PS_LOW_THRESHOLD 0x6A /*PS hysteresis low threshold (Only functional at proximity detection mode)*/ #define PAJ_PS_APPROACH_STATE 0x6B /*PS approach state, Approach = 1 , (8 bits PS data >= PS high threshold), Not Approach = 0 , (8 bits PS data <= PS low threshold)(Only functional at proximity detection mode)*/ #define PAJ_PS_DATA 0x6C /*PS 8 bit data(Only functional at gesture detection mode)*/ #define PAJ_OBJ_BRIGHTNESS 0xB0 /*Object Brightness (Max. 255)*/ #define PAJ_OBJ_SIZE_L 0xB1 /*Object Size(Low 8 bit)*/ #define PAJ_OBJ_SIZE_H 0xB2 /*Object Size(High 8 bit)*/ //Register Bank 1 #define PAJ_PS_GAIN 0x44 /*PS gain setting (Only functional at proximity detection mode)*/ #define PAJ_IDLE_S1_STEP_L 0x67 /*IDLE S1 Step, for setting the S1, Response Factor(Low 8 bit)*/ #define PAJ_IDLE_S1_STEP_H 0x68 /*IDLE S1 Step, for setting the S1, Response Factor(High 8 bit)*/ #define PAJ_IDLE_S2_STEP_L 0x69 /*IDLE S2 Step, for setting the S2, Response Factor(Low 8 bit)*/ #define PAJ_IDLE_S2_STEP_H 0x6A /*IDLE S2 Step, for setting the S2, Response Factor(High 8 bit)*/ #define PAJ_OPTOS1_TIME_L 0x6B /*OPtoS1 Step, for setting the OPtoS1 time of operation state to standby 1 state(Low 8 bit)*/ #define PAJ_OPTOS2_TIME_H 0x6C /*OPtoS1 Step, for setting the OPtoS1 time of operation state to standby 1 stateHigh 8 bit)*/ #define PAJ_S1TOS2_TIME_L 0x6D /*S1toS2 Step, for setting the S1toS2 time of standby 1 state to standby 2 state(Low 8 bit)*/ #define PAJ_S1TOS2_TIME_H 0x6E /*S1toS2 Step, for setting the S1toS2 time of standby 1 state to standby 2 stateHigh 8 bit)*/ #define PAJ_EN 0x72 /*Enable/Disable PAJ7620U2*/ //Gesture detection interrupt flag #define PAJ_UP 0x01 #define PAJ_DOWN 0x02 #define PAJ_LEFT 0x04 #define PAJ_RIGHT 0x08 #define PAJ_FORWARD 0x10 #define PAJ_BACKWARD 0x20 #define PAJ_CLOCKWISE 0x40 #define PAJ_COUNT_CLOCKWISE 0x80 #define PAJ_WAVE 0x100 //Initialize array size #define Init_Array sizeof(Init_Register_Array)/2 #define PS_Array_SIZE sizeof(Init_PS_Array)/2 #define Gesture_Array_SIZE sizeof(Init_Gesture_Array)/2 //Power up initialize array const unsigned char Init_Register_Array[][2] = { {0xEF,0x00}, {0x37,0x07}, {0x38,0x17}, {0x39,0x06}, {0x41,0x00}, {0x42,0x00}, {0x46,0x2D}, {0x47,0x0F}, {0x48,0x3C}, {0x49,0x00}, {0x4A,0x1E}, {0x4C,0x20}, {0x51,0x10}, {0x5E,0x10}, {0x60,0x27}, {0x80,0x42}, {0x81,0x44}, {0x82,0x04}, {0x8B,0x01}, {0x90,0x06}, {0x95,0x0A}, {0x96,0x0C}, {0x97,0x05}, {0x9A,0x14}, {0x9C,0x3F}, {0xA5,0x19}, {0xCC,0x19}, {0xCD,0x0B}, {0xCE,0x13}, {0xCF,0x64}, {0xD0,0x21}, {0xEF,0x01}, {0x02,0x0F}, {0x03,0x10}, {0x04,0x02}, {0x25,0x01}, {0x27,0x39}, {0x28,0x7F}, {0x29,0x08}, {0x3E,0xFF}, {0x5E,0x3D}, {0x65,0x96}, {0x67,0x97}, {0x69,0xCD}, {0x6A,0x01}, {0x6D,0x2C}, {0x6E,0x01}, {0x72,0x01}, {0x73,0x35}, {0x74,0x00}, {0x77,0x01}, }; //Approaches register initialization array const unsigned char Init_PS_Array[][2] = { {0xEF,0x00}, {0x41,0x00}, {0x42,0x00}, {0x48,0x3C}, {0x49,0x00}, {0x51,0x13}, {0x83,0x20}, {0x84,0x20}, {0x85,0x00}, {0x86,0x10}, {0x87,0x00}, {0x88,0x05}, {0x89,0x18}, {0x8A,0x10}, {0x9f,0xf8}, {0x69,0x96}, {0x6A,0x02}, {0xEF,0x01}, {0x01,0x1E}, {0x02,0x0F}, {0x03,0x10}, {0x04,0x02}, {0x41,0x50}, {0x43,0x34}, {0x65,0xCE}, {0x66,0x0B}, {0x67,0xCE}, {0x68,0x0B}, {0x69,0xE9}, {0x6A,0x05}, {0x6B,0x50}, {0x6C,0xC3}, {0x6D,0x50}, {0x6E,0xC3}, {0x74,0x05}, }; //Gesture register initializes array const unsigned char Init_Gesture_Array[][2] = { {0xEF,0x00}, {0x41,0x00}, {0x42,0x00}, {0xEF,0x00}, {0x48,0x3C}, {0x49,0x00}, {0x51,0x10}, {0x83,0x20}, {0x9F,0xF9}, {0xEF,0x01}, {0x01,0x1E}, {0x02,0x0F}, {0x03,0x10}, {0x04,0x02}, {0x41,0x40}, {0x43,0x30}, {0x65,0x96}, {0x66,0x00}, {0x67,0x97}, {0x68,0x01}, {0x69,0xCD}, {0x6A,0x01}, {0x6B,0xB0}, {0x6C,0x04}, {0x6D,0x2C}, {0x6E,0x01}, {0x74,0x00}, {0xEF,0x00}, {0x41,0xFF}, {0x42,0x01}, }; uint8_t I2C_readByte(uint8_t addr); uint16_t I2C_readU16(uint8_t addr); void I2C_writeByte(uint8_t add, uint8_t data); uint8_t PAJ7620U2_init(); #endif