puzzle-box/paj7620.h

126 lines
4.3 KiB
C

/*
* paj7620.h
* A library for Grove-Guesture 1.0
*
* Copyright (c) 2015 seeed technology inc.
* Website : www.seeed.cc
* Author : Wuruibin & Xiangnan
* Modified Time: June 2015
*
* The MIT License (MIT)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include <stdint.h>
#ifndef __PAJ7620_H__
#define __PAJ7620_H__
#define BIT(x) 1 << x
// REGISTER DESCRIPTION
#define PAJ7620_VAL(val, maskbit) ( val << maskbit )
#define PAJ7620_ADDR_BASE 0x00
// REGISTER BANK SELECT
#define PAJ7620_REGITER_BANK_SEL (PAJ7620_ADDR_BASE + 0xEF) //W
// DEVICE ID
#define PAJ7620_ID 0x73
// REGISTER BANK 0
#define PAJ7620_ADDR_SUSPEND_CMD (PAJ7620_ADDR_BASE + 0x3) //W
#define PAJ7620_ADDR_GES_PS_DET_MASK_0 (PAJ7620_ADDR_BASE + 0x41) //RW
#define PAJ7620_ADDR_GES_PS_DET_MASK_1 (PAJ7620_ADDR_BASE + 0x42) //RW
#define PAJ7620_ADDR_GES_PS_DET_FLAG_0 (PAJ7620_ADDR_BASE + 0x43) //R
#define PAJ7620_ADDR_GES_PS_DET_FLAG_1 (PAJ7620_ADDR_BASE + 0x44) //R
#define PAJ7620_ADDR_STATE_INDICATOR (PAJ7620_ADDR_BASE + 0x45) //R
#define PAJ7620_ADDR_PS_HIGH_THRESHOLD (PAJ7620_ADDR_BASE + 0x69) //RW
#define PAJ7620_ADDR_PS_LOW_THRESHOLD (PAJ7620_ADDR_BASE + 0x6A) //RW
#define PAJ7620_ADDR_PS_APPROACH_STATE (PAJ7620_ADDR_BASE + 0x6B) //R
#define PAJ7620_ADDR_PS_RAW_DATA (PAJ7620_ADDR_BASE + 0x6C) //R
// REGISTER BANK 1
#define PAJ7620_ADDR_PS_GAIN (PAJ7620_ADDR_BASE + 0x44) //RW
#define PAJ7620_ADDR_IDLE_S1_STEP_0 (PAJ7620_ADDR_BASE + 0x67) //RW
#define PAJ7620_ADDR_IDLE_S1_STEP_1 (PAJ7620_ADDR_BASE + 0x68) //RW
#define PAJ7620_ADDR_IDLE_S2_STEP_0 (PAJ7620_ADDR_BASE + 0x69) //RW
#define PAJ7620_ADDR_IDLE_S2_STEP_1 (PAJ7620_ADDR_BASE + 0x6A) //RW
#define PAJ7620_ADDR_OP_TO_S1_STEP_0 (PAJ7620_ADDR_BASE + 0x6B) //RW
#define PAJ7620_ADDR_OP_TO_S1_STEP_1 (PAJ7620_ADDR_BASE + 0x6C) //RW
#define PAJ7620_ADDR_OP_TO_S2_STEP_0 (PAJ7620_ADDR_BASE + 0x6D) //RW
#define PAJ7620_ADDR_OP_TO_S2_STEP_1 (PAJ7620_ADDR_BASE + 0x6E) //RW
#define PAJ7620_ADDR_OPERATION_ENABLE (PAJ7620_ADDR_BASE + 0x72) //RW
// PAJ7620_REGITER_BANK_SEL
#define PAJ7620_BANK0 PAJ7620_VAL(0,0)
#define PAJ7620_BANK1 PAJ7620_VAL(1,0)
// PAJ7620_ADDR_SUSPEND_CMD
#define PAJ7620_I2C_WAKEUP PAJ7620_VAL(1,0)
#define PAJ7620_I2C_SUSPEND PAJ7620_VAL(0,0)
// PAJ7620_ADDR_OPERATION_ENABLE
#define PAJ7620_ENABLE PAJ7620_VAL(1,0)
#define PAJ7620_DISABLE PAJ7620_VAL(0,0)
typedef enum {
BANK0 = 0,
BANK1,
} bank_e;
#define GES_LEFT_FLAG PAJ7620_VAL(1,0)
#define GES_RIGHT_FLAG PAJ7620_VAL(1,1)
#define GES_UP_FLAG PAJ7620_VAL(1,2)
#define GES_DOWN_FLAG PAJ7620_VAL(1,3)
#define GES_FORWARD_FLAG PAJ7620_VAL(1,4)
#define GES_BACKWARD_FLAG PAJ7620_VAL(1,5)
#define GES_CLOCKWISE_FLAG PAJ7620_VAL(1,6)
#define GES_COUNT_CLOCKWISE_FLAG PAJ7620_VAL(1,7)
#define GES_WAVE_FLAG PAJ7620_VAL(1,0)
/*
enum {
// REGISTER 0
GES_RIGHT_FLAG = BIT(0),
GES_LEFT_FLAG = BIT(1),
GES_UP_FLAG = BIT(2),
GES_DOWN_FLAG = BIT(3),
GES_FORWARD_FLAG = BIT(4),
GES_BACKWARD_FLAG = BIT(5),
GES_CLOCKWISE_FLAG = BIT(6),
GES_COUNT_CLOCKWISE_FLAG = BIT(7),
//REGISTER 1
GES_WAVE_FLAG = BIT(0),
};
*/
#define INIT_REG_ARRAY_SIZE (sizeof(initRegisterArray)/sizeof(initRegisterArray[0]))
uint8_t paj7620Init(void);
uint8_t paj7620WriteReg(uint8_t addr, uint8_t cmd);
uint8_t paj7620ReadReg(uint8_t addr, uint8_t qty, uint8_t data[]);
void paj7620SelectBank(bank_e bank);
#endif