-
Notifications
You must be signed in to change notification settings - Fork 2k
/
l3g4200d.h
162 lines (145 loc) · 4.96 KB
/
l3g4200d.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
/*
* 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 SD0 connected to GND.
* For more information on SerialBus Address, refer Section 5.1.1
* I2C Operation on datasheet.
*/
#ifndef L3G4200D_DEFAULT_ADDRESS
#define 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 */
/** @} */