contiki/platform/zoul/dev/grove-gyro.h

185 lines
7.0 KiB
C

/*
* Copyright (c) 2016, Zolertia <http://www.zolertia.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the Institute nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* This file is part of the Contiki operating system.
*
*/
/*---------------------------------------------------------------------------*/
/**
* \addtogroup zoul-sensors
* @{
*
* \defgroup zoul-grove-gyro-sensor Grove 3-axis gyroscope based on ITG-3200
* @{
*
* \file
* Grove 3-axis gyroscope header file
* \author
* Antonio Lignan <alinan@zolertia.com>
*/
/*---------------------------------------------------------------------------*/
#include "lib/sensors.h"
/* -------------------------------------------------------------------------- */
#ifndef GROVE_GYRO_H_
#define GROVE_GYRO_H_
/* -------------------------------------------------------------------------- */
/**
* \name Callback function to handle the interrupt
* @{
*/
#define GROVE_GYRO_REGISTER_INT(ptr) grove_gyro_int_callback = ptr;
extern void (*grove_gyro_int_callback)(uint8_t value);
/** @} */
/* -------------------------------------------------------------------------- */
/**
* \name Gyroscope data values structure
* @{
*/
typedef struct {
uint16_t x;
uint16_t y;
uint16_t z;
uint16_t x_offset;
uint16_t y_offset;
uint16_t z_offset;
int16_t temp;
} grove_gyro_values_t;
extern grove_gyro_values_t gyro_values;
/** @} */
/* -------------------------------------------------------------------------- */
/**
* \name Grove 3-axis gyroscope address and registers
* @{
*/
#define GROVE_GYRO_ADDR 0x68
#define GROVE_GYRO_WHO_AM_I 0x00
#define GROVE_GYRO_SMPLRT_DIV 0x15
#define GROVE_GYRO_DLPF_FS 0x16
#define GROVE_GYRO_INT_CFG 0x17
#define GROVE_GYRO_INT_STATUS 0x1A
#define GROVE_GYRO_TEMP_OUT_H 0x1B
#define GROVE_GYRO_TEMP_OUT_L 0x1C
#define GROVE_GYRO_XOUT_H 0x1D
#define GROVE_GYRO_XOUT_L 0x1E
#define GROVE_GYRO_YOUT_H 0x1F
#define GROVE_GYRO_YOUT_L 0x20
#define GROVE_GYRO_ZOUT_H 0x21
#define GROVE_GYRO_ZOUT_L 0x22
#define GROVE_GYRO_PWR_MGMT 0x3E
/** @} */
/*--------------------------------------------------------------------------*/
/**
* \name Grove 3-axis gyroscope bitmasks and config
* @{
*/
#define GROVE_GYRO_DLPF_FS_SEL 0x18
#define GROVE_GYRO_DLPF_FS_CGF_8KHZ_LP256HZ 0x00
#define GROVE_GYRO_DLPF_FS_CGF_1KHZ_LP188HZ 0x01
#define GROVE_GYRO_DLPF_FS_CGF_1KHZ_LP98HZ 0x02
#define GROVE_GYRO_DLPF_FS_CGF_1KHZ_LP42HZ 0x03
#define GROVE_GYRO_DLPF_FS_CGF_1KHZ_LP20HZ 0x04
#define GROVE_GYRO_DLPF_FS_CGF_1KHZ_LP10HZ 0x05
#define GROVE_GYRO_DLPF_FS_CGF_1KHZ_LP5HZ 0x06
#define GROVE_GYRO_INT_CFG_RAW_READY_EN 0x01
#define GROVE_GYRO_INT_CFG_READY_EN 0x04
#define GROVE_GYRO_INT_CFG_LATCH_CLR_ANY 0x10
#define GROVE_GYRO_INT_CFG_LATCH_EN 0x20
#define GROVE_GYRO_INT_CFG_PIN_OPEN 0x40
#define GROVE_GYRO_INT_CFG_PIN_ACTL 0x80
#define GROVE_GYRO_INT_CFG_DISABLE 0x00
#define GROVE_GYRO_INT_STATUS_DATA_RDY_MASK 0x01
#define GROVE_GYRO_INT_STATUS_PLL_RDY_MASK 0x04
#define GROVE_GYRO_PWR_MGMT_CLK_SEL_INTOSC 0x00
#define GROVE_GYRO_PWR_MGMT_CLK_SEL_PLL_X 0x01
#define GROVE_GYRO_PWR_MGMT_CLK_SEL_PLL_Y 0x02
#define GROVE_GYRO_PWR_MGMT_CLK_SEL_PLL_Z 0x03
#define GROVE_GYRO_PWR_MGMT_CLK_SEL_EXT_32K 0x04
#define GROVE_GYRO_PWR_MGMT_CLK_SEL_EXT_19K 0x05
#define GROVE_GYRO_PWR_MGMT_STBY_ZG 0x08
#define GROVE_GYRO_PWR_MGMT_STBY_YG 0x10
#define GROVE_GYRO_PWR_MGMT_STBY_XG 0x20
#define GROVE_GYRO_PWR_MGMT_SLEEP 0x40
#define GROVE_GYRO_PWR_MGMT_RESET 0x80
#ifdef GROVE_GYRO_CONF_OSC
#define GROVE_GYRO_DEFAULT_OSC GROVE_GYRO_CONF_OSC
#else
#define GROVE_GYRO_DEFAULT_OSC GROVE_GYRO_PWR_MGMT_CLK_SEL_INTOSC
#endif
#define GROVE_GYRO_PWR_MGMT_CLK_SEL_MASK 0x07
#define GROVE_GYRO_MAX_DATA 0x06
/** @} */
/* -------------------------------------------------------------------------- */
/**
* \name Grove 3-axis gyroscope operation values
* @{
*/
/* Configure request type */
#define GROVE_GYRO_ACTIVE SENSORS_ACTIVE
#define GROVE_GYRO_DATA_INTERRUPT 0x01
#define GROVE_GYRO_SAMPLE_RATE 0x02
#define GROVE_GYRO_SAMPLE_RATE_DIVIDER 0x03
#define GROVE_GYRO_POWER_ON 0x04
#define GROVE_GYRO_POWER_OFF 0x05
#define GROVE_GYRO_CALIBRATE_ZERO 0x06
/* Sensor value request type, match to the stand-by mask to check if enabled */
#define GROVE_GYRO_X GROVE_GYRO_PWR_MGMT_STBY_XG
#define GROVE_GYRO_Y GROVE_GYRO_PWR_MGMT_STBY_YG
#define GROVE_GYRO_Z GROVE_GYRO_PWR_MGMT_STBY_ZG
#define GROVE_GYRO_SENSOR GROVE_GYRO_PWR_MGMT_SLEEP
#define GROVE_GYRO_XYZ (GROVE_GYRO_X + GROVE_GYRO_Y + \
GROVE_GYRO_Z)
#define GROVE_GYRO_ALL (GROVE_GYRO_XYZ + GROVE_GYRO_SENSOR)
#define GROVE_GYRO_TEMP 0x06
/* Return types */
#define GROVE_GYRO_ERROR (-1)
#define GROVE_GYRO_SUCCESS 0x00
/* Calibration constants */
#define GROVE_GYRO_CALIB_SAMPLES 200
#define GROVE_GYRO_CALIB_TIME_US 5000
/** @} */
/* -------------------------------------------------------------------------- */
#define GROVE_GYRO_STRING "Grove 3-axis gyroscope Sensor"
/* -------------------------------------------------------------------------- */
extern const struct sensors_sensor grove_gyro;
/* -------------------------------------------------------------------------- */
#endif /* ifndef GROVE_GYRO_H_ */
/**
* @}
* @}
*/