1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/drivers/include/l3g4200d.h
Akshai M 21dd8f7555 drivers/l3g4200d : Expose to Kconfig
Expose configurations to Kconfig.
2020-05-05 13:19:49 +05:30

163 lines
5.0 KiB
C

/*
* Copyright (C) 2014 Freie Universität Berlin
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @defgroup drivers_l3g4200d L3G4200D gyroscope
* @ingroup drivers_sensors
* @ingroup drivers_saul
* @brief Device driver for the L3G4200D gyroscope
*
* This driver provides @ref drivers_saul capabilities.
*
* @note The current state of the driver only implements a very basic polling mode.
*
* @{
*
* @file
* @brief Device driver interface for the L3G4200D gyroscope
*
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
*/
#ifndef L3G4200D_H
#define L3G4200D_H
#include <stdint.h>
#include "periph/i2c.h"
#include "periph/gpio.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @defgroup drivers_l3g4200d_config L3G4200D gyroscope driver compile configuration
* @ingroup config_drivers_sensors
* @{
*/
/**
* @brief Default address
*
* The address depends on the status of SDO Pin. Default
* address corresponds to SDO connected to GND. For more
* information refer to the section 'I2C Operation' in
* the datasheet.
*/
#ifndef CONFIG_L3G4200D_DEFAULT_ADDRESS
#define CONFIG_L3G4200D_DEFAULT_ADDRESS 0x68
#endif
/** @} */
/**
* @brief Result vector for gyro measurement
*/
typedef struct {
int16_t acc_x; /**< roll rate in dgs (degree per second) */
int16_t acc_y; /**< pitch rate in dgs */
int16_t acc_z; /**< yaw rate in dgs */
} l3g4200d_data_t;
/**
* @brief Measurement scale for the gyro
*/
typedef enum {
L3G4200D_SCALE_250DPS = 0x0, /**< scale: 250 degree per second */
L3G4200D_SCALE_500DPS = 0x1, /**< scale: 500 degree per second */
L3G4200D_SCALE_2000DPS = 0x2 /**< scale: 2000 degree per second */
} l3g4200d_scale_t;
/**
* @brief Sampling frequency and bandwidth settings for the gyro
*/
typedef enum {
L3G4200D_MODE_100_12 = 0x0, /**< data rate: 100Hz, cut-off: 12.5Hz */
L3G4200D_MODE_100_25 = 0x1, /**< data rate: 100Hz, cut-off: 25Hz */
L3G4200D_MODE_200_12 = 0x4, /**< data rate: 200Hz, cut-off: 12.5Hz */
L3G4200D_MODE_200_25 = 0x5, /**< data rate: 200Hz, cut-off: 25Hz */
L3G4200D_MODE_200_50 = 0x6, /**< data rate: 200Hz, cut-off: 50Hz */
L3G4200D_MODE_200_70 = 0x7, /**< data rate: 200Hz, cut-off: 70Hz */
L3G4200D_MODE_400_20 = 0x8, /**< data rate: 400Hz, cut-off: 20Hz */
L3G4200D_MODE_400_25 = 0x9, /**< data rate: 400Hz, cut-off: 25Hz */
L3G4200D_MODE_400_50 = 0xa, /**< data rate: 400Hz, cut-off: 50Hz */
L3G4200D_MODE_400_110 = 0xb, /**< data rate: 400Hz, cut-off: 110Hz */
L3G4200D_MODE_800_30 = 0xc, /**< data rate: 800Hz, cut-off: 30Hz */
L3G4200D_MODE_800_35 = 0xd, /**< data rate: 800Hz, cut-off: 35Hz */
L3G4200D_MODE_800_50 = 0xe, /**< data rate: 800Hz, cut-off: 50Hz */
L3G4200D_MODE_800_110 = 0xf /**< data rate: 800Hz, cut-off: 110Hz */
} l3g4200d_mode_t;
/**
* @brief Device initialization parameters
*/
typedef struct {
i2c_t i2c; /**< I2C device the sensor is connected to */
uint8_t addr; /**< the sensors slave address on the I2C bus */
gpio_t int1; /**< INT1 pin */
gpio_t int2; /**< INT2 (DRDY) pin */
l3g4200d_mode_t mode; /**< sampling frequency and bandwidth mode */
l3g4200d_scale_t scale; /**< scaling factor to normalize results */
} l3g4200d_params_t;
/**
* @brief Device descriptor for L3G4200D sensors
*/
typedef struct {
l3g4200d_params_t params; /**< device initialization parameters */
int32_t scale; /**< internal scaling factor to normalize results */
} l3g4200d_t;
/**
* @brief Initialize a gyro
*
* @param[out] dev device descriptor of sensor to initialize
* @param[in] params initialization parameters
*
* @return 0 on success
* @return -1 on error
*/
int l3g4200d_init(l3g4200d_t *dev, const l3g4200d_params_t *params);
/**
* @brief Read angular speed value in degree per second from gyro
*
* @param[in] dev device descriptor of gyro
* @param[out] acc_data result vector in dps per axis
*
* @return 0 on success
* @return -1 on error
*/
int l3g4200d_read(const l3g4200d_t *dev, l3g4200d_data_t *acc_data);
/**
* @brief Power-up the given device
*
* @param[in] dev device to enable
*
* @return 0 on success
* @return -1 on error
*/
int l3g4200d_enable(const l3g4200d_t *dev);
/**
* @brief Power-down the given device
*
* @param[in] dev device to power-down
*
* @return 0 on success
* @return -1 on error
*/
int l3g4200d_disable(const l3g4200d_t *dev);
#ifdef __cplusplus
}
#endif
#endif /* L3G4200D_H */
/** @} */