l3gxxxx.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2018 Gunar Schorcht
3  *
4  * This file is subject to the terms and conditions of the GNU Lesser
5  * General Public License v2.1. See the file LICENSE in the top level
6  * directory for more details.
7  */
8 
9 #pragma once
10 
962 #ifdef __cplusplus
963 extern "C"
964 {
965 #endif
966 
967 #include <stdbool.h>
968 #include <stdint.h>
969 
970 #include "mutex.h"
971 #include "periph/gpio.h"
972 #include "periph/i2c.h"
973 #include "periph/spi.h"
974 
975 #include "l3gxxxx_regs.h"
976 
977 #if !IS_USED(MODULE_L3GD20H) && !IS_USED(MODULE_L3GD20) \
978  && !IS_USED(MODULE_L3G4200D_NG) \
979  && !IS_USED(MODULE_A3G4250D) \
980  && !IS_USED(MODULE_I3G4250D)
981 #error Please select your sensor variant by using the respective pseudomodule.
982 #endif
983 
988 #if IS_USED(MODULE_L3GD20H) || IS_USED(MODULE_L3GD20)
989 #define L3GXXXX_I2C_ADDR_1 (0x6a)
990 #define L3GXXXX_I2C_ADDR_2 (0x6b)
991 #else
992 #define L3GXXXX_I2C_ADDR_1 (0x68)
993 #define L3GXXXX_I2C_ADDR_2 (0x69)
994 #endif
1001 #define L3GXXXX_CHIP_ID_L3GD20H (0xd7)
1002 #define L3GXXXX_CHIP_ID_L3GD20 (0xd4)
1003 #define L3GXXXX_CHIP_ID_X3G42XXD (0xd3)
1007 typedef enum {
1024 
1067 typedef enum {
1082 #if IS_USED(MODULE_L3GD20H) || IS_USED(MODULE_L3GXXXX_LOW_ODR) || DOXYGEN
1086 #endif
1087 } l3gxxxx_odr_t;
1088 
1099 typedef enum {
1103 } l3gxxxx_scale_t;
1104 
1111 typedef enum {
1114  L3GXXXX_FIFO = 1,
1116  L3GXXXX_STREAM = 2,
1118 #if IS_USED(MODULE_L3GD20H) || IS_USED(MODULE_L3GD20) || DOXYGEN
1125 #endif
1126 #if IS_USED(MODULE_L3GD20H) || DOXYGEN
1133 #endif
1135 
1188 typedef enum {
1194 
1200 typedef enum {
1201  L3GXXXX_HPF_NORMAL = 0,
1203  L3GXXXX_HPF_REFERENCE = 1,
1208 
1221 typedef enum {
1245 
1252 #define L3GXXXX_INT_DATA (L3GXXXX_INT_DATA_READY | \
1253  L3GXXXX_INT_FIFO_WATERMARK | \
1254  L3GXXXX_INT_FIFO_OVERRUN | \
1255  L3GXXXX_INT_FIFO_EMPTY)
1256 
1262 typedef struct {
1263  uint16_t x_threshold;
1264  uint16_t y_threshold;
1265  uint16_t z_threshold;
1279  bool and_or;
1282  bool latch;
1284  uint8_t duration;
1286  bool wait;
1291 
1295 typedef union {
1296  struct {
1297  uint8_t x_low :1;
1298  uint8_t x_high:1;
1299  uint8_t y_low :1;
1300  uint8_t y_high:1;
1301  uint8_t z_low :1;
1302  uint8_t z_high:1;
1303  uint8_t active:1;
1304  uint8_t unused:1;
1305  };
1306  uint8_t val;
1309 
1313 typedef union {
1314  struct {
1315  uint8_t fifo_empty :1;
1316  uint8_t fifo_overrun :1;
1317  uint8_t fifo_watermark:1;
1318  uint8_t data_ready :1;
1319  uint8_t unused :4;
1320  };
1321  uint8_t val;
1324 
1332 typedef struct {
1336 
1340 typedef enum {
1342  L3GXXXX_LOW
1344 
1348 typedef enum {
1352 
1356 typedef struct {
1357  int16_t x;
1358  int16_t y;
1359  int16_t z;
1361 
1365 typedef struct {
1366  int32_t x;
1367  int32_t y;
1368  int32_t z;
1369 } l3gxxxx_data_t;
1370 
1375 
1380 
1384 typedef enum {
1385 #if IS_USED(MODULE_L3GXXXX_I2C) || DOXYGEN
1387 #endif
1388 #if IS_USED(MODULE_L3GXXXX_SPI) || DOXYGEN
1390 #endif
1391 } l3gxxxx_if_t;
1392 
1393 #if IS_USED(MODULE_L3GXXXX_I2C) || DOXYGEN
1397 typedef struct {
1399  uint8_t addr;
1401 #endif
1402 
1403 #if IS_USED(MODULE_L3GXXXX_SPI) || DOXYGEN
1407 typedef struct {
1408  spi_t dev;
1410  gpio_t cs;
1412 #endif
1413 
1417 typedef struct {
1419  union {
1420 #if IS_USED(MODULE_L3GXXXX_I2C) || DOXYGEN
1422 #endif
1423 #if IS_USED(MODULE_L3GXXXX_SPI) || DOXYGEN
1425 #endif
1426  };
1428 
1432 typedef struct {
1440  uint8_t hpf_cutoff;
1442 #if IS_USED(MODULE_L3GXXXX_FIFO) || DOXYGEN
1444  uint8_t fifo_watermark;
1445 #endif
1446 
1447 #if IS_USED(MODULE_L3GXXXX_IRQ_DATA) || DOXYGEN
1448  gpio_t int2_pin;
1450 #endif
1451 
1452 #if IS_USED(MODULE_L3GXXXX_IRQ_EVENT) || DOXYGEN
1454  gpio_t int1_pin;
1456 #endif
1457 
1459 
1463 typedef struct {
1468  enum {
1471  X3G42XXD
1472  } sensor;
1473 } l3gxxxx_t;
1474 
1493 int l3gxxxx_init(l3gxxxx_t *dev, const l3gxxxx_params_t *params);
1494 
1495 #if IS_USED(MODULE_L3GXXXX_CONFIG) || DOXYGEN
1511  l3gxxxx_odr_t odr, bool x, bool y, bool z);
1512 
1525 
1526 #endif /* IS_USED(MODULE_L3GXXXX_CONFIG) || DOXYGEN */
1546 
1559 
1560 #if IS_USED(MODULE_L3GXXXX_SLEEP) || DOXYGEN
1576 
1592 
1593 #endif /* IS_USED(MODULE_L3GXXXX_SLEEP) || DOXYGEN */
1618 
1644 int l3gxxxx_read(const l3gxxxx_t *dev, l3gxxxx_data_t *data);
1645 
1661 
1664 #if IS_USED(MODULE_L3GXXXX_FIFO) || DOXYGEN
1665 
1671 #if IS_USED(MODULE_L3GXXXX_CONFIG) || DOXYGEN
1698  l3gxxxx_fifo_mode_t mode, uint8_t watermark);
1699 
1700 #endif /* IS_USED(MODULE_L3GXXXX_CONFIG) || DOXYGEN */
1701 
1721  l3gxxxx_data_fifo_t data);
1722 
1740 
1741 #endif /* IS_USED(MODULE_L3GXXXX_FIFO) || DOXYGEN */
1744 #if IS_USED(MODULE_L3GXXXX_CONFIG) || DOXYGEN
1772  l3gxxxx_filter_sel_t filter);
1773 
1807  l3gxxxx_hpf_mode_t mode, uint8_t cutoff);
1808 
1824 int l3gxxxx_set_hpf_ref(const l3gxxxx_t *dev, int8_t ref);
1825 
1840 int l3gxxxx_get_hpf_ref(const l3gxxxx_t *dev, int8_t *ref);
1841 
1842 #endif /* IS_USED(MODULE_L3GXXXX_CONFIG) || DOXYGEN */
1845 #if IS_USED(MODULE_L3GXXXX_IRQ) || DOXYGEN
1873  l3gxxxx_int_types_t mask, bool enable);
1874 
1898 
1899 #if IS_USED(MODULE_L3GXXXX_IRQ_EVENT) || DOXYGEN
1922  const l3gxxxx_int_event_cfg_t *cfg);
1923 
1924 #if IS_USED(MODULE_L3GXXXX_CONFIG) || DOXYGEN
1943 
1944 #endif /* IS_USED(MODULE_L3GXXXX_CONFIG) || DOXYGEN */
1945 #endif /* IS_USED(MODULE_L3GXXXX_IRQ_EVENT) || DOXYGEN */
1946 
1949 #endif /* IS_USED(MODULE_L3GXXXX_IRQ) || DOXYGEN */
1950 
1972  uint8_t reg, const uint8_t *data, uint8_t len);
1973 
1990  uint8_t reg, uint8_t *data, uint8_t len);
1993 #ifdef __cplusplus
1994 }
1995 #endif
1996 
spi_clk_t
Definition: periph_cpu.h:351
Low-level GPIO peripheral driver interface definitions.
int l3gxxxx_set_mode(l3gxxxx_t *dev, l3gxxxx_odr_t odr, bool x, bool y, bool z)
Set sensor mode.
int l3gxxxx_reg_write(const l3gxxxx_t *dev, uint8_t reg, const uint8_t *data, uint8_t len)
Direct write to register.
int l3gxxxx_read(const l3gxxxx_t *dev, l3gxxxx_data_t *data)
Read last sample of angular rates in millidegree per second (mpds)
l3gxxxx_int_types_t
Interrupt types.
Definition: l3gxxxx.h:1221
int l3gxxxx_data_ready(const l3gxxxx_t *dev)
Data ready status function.
l3gxxxx_int_pin_level_t
INT1, INT2/DRDY sensor signal activity level
Definition: l3gxxxx.h:1340
int l3gxxxx_read_raw_fifo(const l3gxxxx_t *dev, l3gxxxx_raw_data_fifo_t raw)
Get all samples of raw output data stored in the FIFO.
int l3gxxxx_power_up(l3gxxxx_t *dev)
Power up the sensor.
int l3gxxxx_select_output_filter(l3gxxxx_t *dev, l3gxxxx_filter_sel_t filter)
Filter selection for raw output data.
l3gxxxx_hpf_mode_t
HPF (high pass filter) modes.
Definition: l3gxxxx.h:1200
int l3gxxxx_enable_int(const l3gxxxx_t *dev, l3gxxxx_int_types_t mask, bool enable)
Enable or disable event and/or data interrupts on signal INT1 and INT2/DRDY
l3gxxxx_filter_sel_t
High pass filter (HPF) and low pass filter 2 (LPF2) selection.
Definition: l3gxxxx.h:1188
l3gxxxx_scale_t
Full scale in degrees per second (dps)
Definition: l3gxxxx.h:1099
int l3gxxxx_init(l3gxxxx_t *dev, const l3gxxxx_params_t *params)
Initialize the L3Gxxxx sensor device.
int l3gxxxx_reg_read(const l3gxxxx_t *dev, uint8_t reg, uint8_t *data, uint8_t len)
Direct read from register.
l3gxxxx_data_t l3gxxxx_data_fifo_t[32]
Angular rates FIFO type.
Definition: l3gxxxx.h:1379
int l3gxxxx_sleep(l3gxxxx_t *dev)
Sleep mode.
int l3gxxxx_set_int_event_cfg(const l3gxxxx_t *dev, const l3gxxxx_int_event_cfg_t *cfg)
Set new configuration for event interrupt generation.
l3gxxxx_fifo_mode_t
FIFO mode.
Definition: l3gxxxx.h:1111
int l3gxxxx_set_hpf_ref(const l3gxxxx_t *dev, int8_t ref)
Set HPF (high pass filter) reference.
l3gxxxx_int_src_t l3gxxxx_wait_int(l3gxxxx_t *dev)
Wait for event and/or data interrupts on signals INT1 and INT2/DRDY
int l3gxxxx_read_fifo(const l3gxxxx_t *dev, l3gxxxx_data_fifo_t data)
Get all samples of angular rates stored in the FIFO (unit mdps)
int l3gxxxx_config_hpf(const l3gxxxx_t *dev, l3gxxxx_hpf_mode_t mode, uint8_t cutoff)
Config HPF (high pass filter) for output data.
l3gxxxx_if_t
L3Gxxxx interface types.
Definition: l3gxxxx.h:1384
l3gxxxx_int_pin_type_t
INT1, INT2/DRDY sensor signal type
Definition: l3gxxxx.h:1348
int l3gxxxx_power_down(l3gxxxx_t *dev)
Power down the sensor.
int l3gxxxx_read_raw(const l3gxxxx_t *dev, l3gxxxx_raw_data_t *raw)
Read last sample of raw output data as 16 bit two's complements.
int l3gxxxx_get_hpf_ref(const l3gxxxx_t *dev, int8_t *ref)
Get HPF (high pass filter) reference.
int l3gxxxx_set_fifo_mode(l3gxxxx_t *dev, l3gxxxx_fifo_mode_t mode, uint8_t watermark)
Set FIFO mode and watermark level (threshold)
l3gxxxx_raw_data_t l3gxxxx_raw_data_fifo_t[32]
Raw output data FIFO type.
Definition: l3gxxxx.h:1374
l3gxxxx_error_codes_t
Definition of error codes.
Definition: l3gxxxx.h:1007
int l3gxxxx_wake_up(l3gxxxx_t *dev)
Wake-up the sensor.
l3gxxxx_odr_t
Sensor output data rates (ODR) and LPF2 cutoff frequencies.
Definition: l3gxxxx.h:1067
int l3gxxxx_get_int_event_cfg(const l3gxxxx_t *dev, l3gxxxx_int_event_cfg_t *cfg)
Get current configuration of event interrupt generation.
int l3gxxxx_set_scale(l3gxxxx_t *dev, l3gxxxx_scale_t scale)
Set full scale.
@ L3GXXXX_INT_FIFO_OVERRUN
Data interrupt on signal INT2/DRDY: FIFO is completely filled.
Definition: l3gxxxx.h:1234
@ L3GXXXX_INT_EVENT
Event interrupt on signal INT1: Angular rate of one or more axes is lower or higher than the configur...
Definition: l3gxxxx.h:1243
@ L3GXXXX_INT_FIFO_EMPTY
Data interrupt on signal INT2/DRDY: FIFO becomes empty.
Definition: l3gxxxx.h:1238
@ L3GXXXX_INT_DATA_READY
Data interrupt on signal INT2/DRDY: Output data are ready to be read.
Definition: l3gxxxx.h:1225
@ L3GXXXX_INT_FIFO_WATERMARK
Data interrupt on signal INT2/DRDY: FIFO filling exceeds the watermark level (threshold)
Definition: l3gxxxx.h:1230
@ L3GXXXX_HIGH
INT signals are High active (default)
Definition: l3gxxxx.h:1341
@ L3GXXXX_LOW
INT signals are Low active.
Definition: l3gxxxx.h:1342
@ L3GXXXX_HPF_AUTORESET
Autoreset mode, HPF is automatically reset when a configured event interrupt occurs.
Definition: l3gxxxx.h:1205
@ L3GXXXX_HPF_REFERENCE
Reference mode, output data are the difference to the REFERENCE register.
Definition: l3gxxxx.h:1203
@ L3GXXXX_HPF_NORMAL
Normal mode, HPF is reset by reading the REFERENCE register.
Definition: l3gxxxx.h:1201
@ L3GXXXX_NO_FILTER
HPF not used, LPF2 not used (default)
Definition: l3gxxxx.h:1189
@ L3GXXXX_HPF_ONLY
HPF used, LPF2 not used.
Definition: l3gxxxx.h:1190
@ L3GXXXX_HPF_AND_LPF2
HPF used, LPF2 used.
Definition: l3gxxxx.h:1192
@ L3GXXXX_LPF2_ONLY
HPF not used, LPF2 used.
Definition: l3gxxxx.h:1191
@ L3GXXXX_SCALE_2000_DPS
2000 dps
Definition: l3gxxxx.h:1102
@ L3GXXXX_SCALE_245_DPS
245 dps (default)
Definition: l3gxxxx.h:1100
@ L3GXXXX_SCALE_500_DPS
500 dps
Definition: l3gxxxx.h:1101
@ L3GXXXX_STREAM_TO_FIFO
FIFO is used in Stream mode until an interrupt, switches then to FIFO mode (L3GD20H and L3GD20 only)
Definition: l3gxxxx.h:1119
@ L3GXXXX_STREAM
FIFO is used as ring buffer and newest data samples are stored continuously.
Definition: l3gxxxx.h:1116
@ L3GXXXX_DYNAMIC_STREAM
like Stream mode, but differs in reading the first data sample after emptying (L3GD20H only)
Definition: l3gxxxx.h:1127
@ L3GXXXX_BYPASS_TO_FIFO
FIFO is not used until an interrupt, switches then to FIFO mode (L3GD20H only)
Definition: l3gxxxx.h:1130
@ L3GXXXX_BYPASS
FIFO is not used (default)
Definition: l3gxxxx.h:1112
@ L3GXXXX_BYPASS_TO_STREAM
FIFO is not used until an interrupt, switches then to Stream mode (L3GD20H and L3GD20 only)
Definition: l3gxxxx.h:1122
@ L3GXXXX_FIFO
Data samples are stored in the FIFO until it is full.
Definition: l3gxxxx.h:1114
@ L3GXXXX_SPI
SPI interface used.
Definition: l3gxxxx.h:1389
@ L3GXXXX_I2C
I2C interface used.
Definition: l3gxxxx.h:1386
@ L3GXXXX_OPEN_DRAIN
INT pins are open-drain.
Definition: l3gxxxx.h:1350
@ L3GXXXX_PUSH_PULL
INT pins are push/pull outputs (default)
Definition: l3gxxxx.h:1349
@ L3GXXXX_ERROR_BYPASS_MODE
sensor is in bypass mode
Definition: l3gxxxx.h:1021
@ L3GXXXX_ERROR_I2C
I2C communication error.
Definition: l3gxxxx.h:1009
@ L3GXXXX_ERROR_INV_INT_TYPE
invalid interrupt type used
Definition: l3gxxxx.h:1015
@ L3GXXXX_ERROR_WRONG_CHIP_ID
wrong chip id read from WHO_AM_I reg
Definition: l3gxxxx.h:1011
@ L3GXXXX_ERROR_RAW_DATA_FIFO
reading raw output data from FIFO failed
Definition: l3gxxxx.h:1018
@ L3GXXXX_ERROR_SPI
SPI communication error.
Definition: l3gxxxx.h:1010
@ L3GXXXX_ERROR_NO_INT1_PIN
INT1 signal pin not configured
Definition: l3gxxxx.h:1019
@ L3GXXXX_ERROR_INV_MODE
sensor mode is invalid or not available
Definition: l3gxxxx.h:1013
@ L3GXXXX_ERROR_FIFO_MODE
sensor is in FIFO mode
Definition: l3gxxxx.h:1022
@ L3GXXXX_ERROR_INV_DEV
invalid device type used
Definition: l3gxxxx.h:1012
@ L3GXXXX_OK
success
Definition: l3gxxxx.h:1008
@ L3GXXXX_ERROR_NO_INT2_PIN
INT2/DRDY signal pin not configured
Definition: l3gxxxx.h:1020
@ L3GXXXX_ERROR_RAW_DATA
reading raw output data failed
Definition: l3gxxxx.h:1017
@ L3GXXXX_ERROR_INV_FIFO_MODE
FIFO mode is invalid or not available.
Definition: l3gxxxx.h:1014
@ L3GXXXX_ERROR_NO_NEW_DATA
no new data are available
Definition: l3gxxxx.h:1016
@ L3GXXXX_ODR_800_35
High ODR 400 Hz, LPF1 cutoff 211 Hz, LPF2 cutoff 35 Hz.
Definition: l3gxxxx.h:1079
@ L3GXXXX_ODR_400_110
High ODR 400 Hz, LPF1 cutoff 128 Hz, LPF2 cutoff 110 Hz.
Definition: l3gxxxx.h:1077
@ L3GXXXX_ODR_50
Low ODR 50 Hz, LPF1 cutoff 16 Hz, LPF2 cutoff 16.6 Hz.
Definition: l3gxxxx.h:1085
@ L3GXXXX_ODR_800_50
High ODR 400 Hz, LPF1 cutoff 211 Hz, LPF2 cutoff 50 Hz.
Definition: l3gxxxx.h:1080
@ L3GXXXX_ODR_200_12
High ODR 200 Hz, LPF1 cutoff 63.3 Hz, LPF2 cutoff 12.5 Hz.
Definition: l3gxxxx.h:1070
@ L3GXXXX_ODR_800_30
High ODR 400 Hz, LPF1 cutoff 211 Hz, LPF2 cutoff 30 Hz.
Definition: l3gxxxx.h:1078
@ L3GXXXX_ODR_200_70
High ODR 200 Hz, LPF1 cutoff 63.3 Hz, LPF2 cutoff 70 Hz.
Definition: l3gxxxx.h:1073
@ L3GXXXX_ODR_400_25
High ODR 400 Hz, LPF1 cutoff 128 Hz, LPF2 cutoff 25 Hz.
Definition: l3gxxxx.h:1075
@ L3GXXXX_ODR_400_20
High ODR 400 Hz, LPF1 cutoff 128 Hz, LPF2 cutoff 20 Hz.
Definition: l3gxxxx.h:1074
@ L3GXXXX_ODR_100_12
High ODR 100 Hz, LPF1 cutoff 32 Hz, LPF2 cutoff 12.5 Hz.
Definition: l3gxxxx.h:1068
@ L3GXXXX_ODR_12
Low ODR 12.5 Hz, LPF1 cutoff 3.9 Hz, LPF2 not used.
Definition: l3gxxxx.h:1083
@ L3GXXXX_ODR_200_50
High ODR 200 Hz, LPF1 cutoff 63.3 Hz, LPF2 cutoff 50 Hz.
Definition: l3gxxxx.h:1072
@ L3GXXXX_ODR_800_100
High ODR 400 Hz, LPF1 cutoff 211 Hz, LPF2 cutoff 100 Hz.
Definition: l3gxxxx.h:1081
@ L3GXXXX_ODR_200_25
High ODR 200 Hz, LPF1 cutoff 63.3 Hz, LPF2 cutoff 25 Hz.
Definition: l3gxxxx.h:1071
@ L3GXXXX_ODR_25
Low ODR 25 Hz, LPF1 cutoff 7.8 Hz, LPF2 not used.
Definition: l3gxxxx.h:1084
@ L3GXXXX_ODR_400_50
High ODR 400 Hz, LPF1 cutoff 128 Hz, LPF2 cutoff 50 Hz.
Definition: l3gxxxx.h:1076
@ L3GXXXX_ODR_100_25
High ODR 100 Hz, LPF1 cutoff 32 Hz, LPF2 cutoff 25 Hz.
Definition: l3gxxxx.h:1069
uint_fast8_t i2c_t
Default i2c_t type definition.
Definition: i2c.h:144
Low-level I2C peripheral driver interface definition.
Register definitions for ST L3Gxxxx 3-axis gyroscope sensor family.
#define L3GXXXX_INT2_WTM
L3GXXXX_REG_CTRL3<2>
Definition: l3gxxxx_regs.h:105
#define L3GXXXX_INT2_ORUN
L3GXXXX_REG_CTRL3<1>
Definition: l3gxxxx_regs.h:106
#define L3GXXXX_INT2_EMPTY
L3GXXXX_REG_CTRL3<0>
Definition: l3gxxxx_regs.h:107
#define L3GXXXX_INT2_DRDY
L3GXXXX_REG_CTRL3<3>
Definition: l3gxxxx_regs.h:104
#define L3GXXXX_INT1_IG
L3GXXXX_REG_CTRL3<7>
Definition: l3gxxxx_regs.h:100
Mutex for thread synchronization.
Low-level SPI peripheral driver interface definition.
Angular rates in millidegrees per seconds (mdps)
Definition: l3gxxxx.h:1365
int32_t z
Z angular rate (yaw)
Definition: l3gxxxx.h:1368
int32_t y
Y angular rate (pitch)
Definition: l3gxxxx.h:1367
int32_t x
X angular rate (roll)
Definition: l3gxxxx.h:1366
L3Gxxxx I2C interface parameters.
Definition: l3gxxxx.h:1397
i2c_t dev
I2C device used.
Definition: l3gxxxx.h:1398
uint8_t addr
I2C slave address.
Definition: l3gxxxx.h:1399
L3Gxxxx Hardware interface parameters union.
Definition: l3gxxxx.h:1417
l3gxxxx_spi_params_t spi
SPI interface parameters.
Definition: l3gxxxx.h:1424
l3gxxxx_i2c_params_t i2c
I2C interface parameters.
Definition: l3gxxxx.h:1421
l3gxxxx_if_t type
I2C/SPI interface type selector.
Definition: l3gxxxx.h:1418
Event interrupt generator configuration (axis movement and wake-up)
Definition: l3gxxxx.h:1262
bool y_low_enabled
Interrupt enabled for |Y| < Y threshold (Y low event)
Definition: l3gxxxx.h:1270
bool counter_mode
DCRM is not documented and not used therefore.
Definition: l3gxxxx.h:1289
bool z_high_enabled
Interrupt enabled for |Z| > Z threshold (Y high event)
Definition: l3gxxxx.h:1274
uint16_t x_threshold
X threshold value in full scale / INT16_MAX.
Definition: l3gxxxx.h:1263
bool x_high_enabled
Interrupt enabled for |X| > X threshold (X high event)
Definition: l3gxxxx.h:1268
l3gxxxx_filter_sel_t filter
HPF and LPF2 filter selection used for threshold comparison.
Definition: l3gxxxx.h:1276
bool y_high_enabled
Interrupt enabled for |Y| > Y threshold (Y high event)
Definition: l3gxxxx.h:1271
bool latch
Latch the interrupt when true until the interrupt source has been read by function l3gxxxx_wait_int.
Definition: l3gxxxx.h:1282
bool and_or
Combination of interrupt events (true=AND, false=OR): AND - all enabled axes passed their thresholds...
Definition: l3gxxxx.h:1279
uint16_t z_threshold
Z threshold value in full scale / INT16_MAX.
Definition: l3gxxxx.h:1265
bool wait
When true, duration is also used when interrupt condition in no longer given before interrupt signal ...
Definition: l3gxxxx.h:1286
bool z_low_enabled
Interrupt enabled for |Z| < Z threshold (Z low event)
Definition: l3gxxxx.h:1273
uint16_t y_threshold
Y threshold value in full scale / INT16_MAX.
Definition: l3gxxxx.h:1264
uint8_t duration
Duration in 1/ODR an interrupt condition has to be given before the interrupt is generated.
Definition: l3gxxxx.h:1284
bool x_low_enabled
Interrupt enabled for |X| < X threshold (X low event)
Definition: l3gxxxx.h:1267
Composite type for all possible interrupt sources.
Definition: l3gxxxx.h:1332
l3gxxxx_int_data_src_t data
data interrupt sources
Definition: l3gxxxx.h:1334
l3gxxxx_int_event_src_t event
event interrupt sources
Definition: l3gxxxx.h:1333
L3Gxxxx device initialization parameters.
Definition: l3gxxxx.h:1432
gpio_t int1_pin
MCU GPIO pin for event interrupts on signal INT1
Definition: l3gxxxx.h:1454
uint8_t hpf_cutoff
HPF cutoff frequency 0..9, see l3gxxxx_config_hpf for details.
Definition: l3gxxxx.h:1440
gpio_t int2_pin
MCU GPIO pin for data interrupts on signal INT2/DRDY pin.
Definition: l3gxxxx.h:1448
uint8_t fifo_watermark
FIFO watermark setting 0..31.
Definition: l3gxxxx.h:1444
l3gxxxx_scale_t scale
Full scale.
Definition: l3gxxxx.h:1436
l3gxxxx_if_params_t if_params
Interface parameters (I2C/SPI)
Definition: l3gxxxx.h:1433
l3gxxxx_fifo_mode_t fifo_mode
FIFO operation mode.
Definition: l3gxxxx.h:1443
l3gxxxx_filter_sel_t filter_sel
HPF/LPF2 filter selection.
Definition: l3gxxxx.h:1438
l3gxxxx_int_event_cfg_t int1_cfg
event interrupt parameters
Definition: l3gxxxx.h:1453
l3gxxxx_odr_t odr
ODR and LPF2 cutoff frequency.
Definition: l3gxxxx.h:1435
l3gxxxx_hpf_mode_t hpf_mode
HPF mode.
Definition: l3gxxxx.h:1439
Raw output data set as two's complements.
Definition: l3gxxxx.h:1356
int16_t z
Z angular rate (yaw) as 16 bit two's complements.
Definition: l3gxxxx.h:1359
int16_t x
X angular rate (roll) as 16 bit two's complements.
Definition: l3gxxxx.h:1357
int16_t y
Y angular rate (pitch) as 16 bit two's complements.
Definition: l3gxxxx.h:1358
L3Gxxxx SPI interface parameters.
Definition: l3gxxxx.h:1407
spi_t dev
SPI device used.
Definition: l3gxxxx.h:1408
spi_clk_t clk
SPI clock speed.
Definition: l3gxxxx.h:1409
gpio_t cs
SPI chip Select pin.
Definition: l3gxxxx.h:1410
L3Gxxxx sensor device data structure type.
Definition: l3gxxxx.h:1463
mutex_t int_lock
Used to lock the calling thread while waiting for an interrupt.
Definition: l3gxxxx.h:1466
l3gxxxx_int_types_t int_type
Type of the last interrupt triggered.
Definition: l3gxxxx.h:1465
l3gxxxx_params_t params
Device initialization parameters.
Definition: l3gxxxx.h:1464
@ L3GD20H
Sensor detected at runtime.
Definition: l3gxxxx.h:1469
@ L3GD20
L3GD20 detected.
Definition: l3gxxxx.h:1470
Mutex structure.
Definition: mutex.h:39
Data interrupt sources (data ready and FIFO status)
Definition: l3gxxxx.h:1313
uint8_t fifo_empty
true when FIFO is empty
Definition: l3gxxxx.h:1315
uint8_t fifo_overrun
true when FIFO is completely filled
Definition: l3gxxxx.h:1316
uint8_t unused
not used
Definition: l3gxxxx.h:1319
uint8_t val
data interrupt sources as value that can be used for bitwise operations
Definition: l3gxxxx.h:1321
uint8_t fifo_watermark
true when FIFO filling > watermark
Definition: l3gxxxx.h:1317
uint8_t data_ready
true when data are ready to read
Definition: l3gxxxx.h:1318
Event interrupt sources (axis movement and wake-up)
Definition: l3gxxxx.h:1295
uint8_t y_low
true on |Y| < Y threshold (Y low event)
Definition: l3gxxxx.h:1299
uint8_t y_high
true on |Y| > Y threshold (Y high event)
Definition: l3gxxxx.h:1300
uint8_t z_low
true on |Z| < Z threshold (Z low event)
Definition: l3gxxxx.h:1301
uint8_t val
event interrupt sources as value that can be used for bitwise operations
Definition: l3gxxxx.h:1306
uint8_t x_low
true on |X| < X threshold (X low event)
Definition: l3gxxxx.h:1297
uint8_t z_high
true on |Z| > Z threshold (Z high event)
Definition: l3gxxxx.h:1302
uint8_t x_high
true on |X| > X threshold (X high event)
Definition: l3gxxxx.h:1298
uint8_t active
true when one or more events have been generated
Definition: l3gxxxx.h:1303
uint8_t unused
not used
Definition: l3gxxxx.h:1304