ST Expansion SW Team / X_NUCLEO_IKS01A2_SPI3W

Dependencies:   ST_INTERFACES X_NUCLEO_COMMON_SPI3W

Dependents:   sensor-node-ble

Fork of X_NUCLEO_IKS01A2 by Licio Mapelli

Committer:
mapellil
Date:
Fri May 12 13:18:43 2017 +0000
Revision:
11:6c2d5fbdab18
Parent:
9:038121268b07
Child:
12:fe9481a79119
Added SPI3W and SPI4W support to all sensors. Added INT and CS pins to all the sensor constructor classes to allow SPI3W support and future INT measure implementation

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nikapov 0:cad5dab2b21d 1 /**
nikapov 0:cad5dab2b21d 2 ******************************************************************************
nikapov 0:cad5dab2b21d 3 * @file LSM6DSLSensor.cpp
cparata 1:bd2a01e81e6f 4 * @author CLab
nikapov 0:cad5dab2b21d 5 * @version V1.0.0
nikapov 0:cad5dab2b21d 6 * @date 5 August 2016
nikapov 0:cad5dab2b21d 7 * @brief Implementation of an LSM6DSL Inertial Measurement Unit (IMU) 6 axes
nikapov 0:cad5dab2b21d 8 * sensor.
nikapov 0:cad5dab2b21d 9 ******************************************************************************
nikapov 0:cad5dab2b21d 10 * @attention
nikapov 0:cad5dab2b21d 11 *
nikapov 0:cad5dab2b21d 12 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
nikapov 0:cad5dab2b21d 13 *
nikapov 0:cad5dab2b21d 14 * Redistribution and use in source and binary forms, with or without modification,
nikapov 0:cad5dab2b21d 15 * are permitted provided that the following conditions are met:
nikapov 0:cad5dab2b21d 16 * 1. Redistributions of source code must retain the above copyright notice,
nikapov 0:cad5dab2b21d 17 * this list of conditions and the following disclaimer.
nikapov 0:cad5dab2b21d 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
nikapov 0:cad5dab2b21d 19 * this list of conditions and the following disclaimer in the documentation
nikapov 0:cad5dab2b21d 20 * and/or other materials provided with the distribution.
nikapov 0:cad5dab2b21d 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
nikapov 0:cad5dab2b21d 22 * may be used to endorse or promote products derived from this software
nikapov 0:cad5dab2b21d 23 * without specific prior written permission.
nikapov 0:cad5dab2b21d 24 *
nikapov 0:cad5dab2b21d 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
nikapov 0:cad5dab2b21d 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
nikapov 0:cad5dab2b21d 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
nikapov 0:cad5dab2b21d 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
nikapov 0:cad5dab2b21d 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
nikapov 0:cad5dab2b21d 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
nikapov 0:cad5dab2b21d 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
nikapov 0:cad5dab2b21d 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
nikapov 0:cad5dab2b21d 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
nikapov 0:cad5dab2b21d 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
nikapov 0:cad5dab2b21d 35 *
nikapov 0:cad5dab2b21d 36 ******************************************************************************
nikapov 0:cad5dab2b21d 37 */
nikapov 0:cad5dab2b21d 38
nikapov 0:cad5dab2b21d 39
nikapov 0:cad5dab2b21d 40 /* Includes ------------------------------------------------------------------*/
nikapov 0:cad5dab2b21d 41
mapellil 11:6c2d5fbdab18 42 #include "SPI3W.h"
nikapov 0:cad5dab2b21d 43 #include "mbed.h"
nikapov 0:cad5dab2b21d 44 #include "DevI2C.h"
nikapov 0:cad5dab2b21d 45 #include "LSM6DSLSensor.h"
davide.aliprandi@st.com 6:671fd10a51b7 46 #include "LSM6DSL_acc_gyro_driver.h"
nikapov 0:cad5dab2b21d 47
mapellil 11:6c2d5fbdab18 48 /* Class Implementation ------------------------------------------------------*/
nikapov 0:cad5dab2b21d 49
mapellil 11:6c2d5fbdab18 50 /** Constructor
mapellil 11:6c2d5fbdab18 51 * @param spi3w object of an helper class which handles the spi peripheral
mapellil 11:6c2d5fbdab18 52 * @param
mapellil 11:6c2d5fbdab18 53 */
mapellil 11:6c2d5fbdab18 54 LSM6DSLSensor::LSM6DSLSensor(SPI3W *spi3w, PinName cs_pin, PinName int1_pin, PinName int2_pin) :
mapellil 11:6c2d5fbdab18 55 _dev_spi3w(spi3w), _cs_pin(cs_pin), _int1_irq(int1_pin), _int2_irq(int2_pin)
mapellil 11:6c2d5fbdab18 56 {
mapellil 11:6c2d5fbdab18 57 if (cs_pin == NC)
mapellil 11:6c2d5fbdab18 58 {
mapellil 11:6c2d5fbdab18 59 printf ("ERROR LSM6DSLSensor CS MUST NOT BE NC\n\r");
mapellil 11:6c2d5fbdab18 60 _dev_spi = NULL;
mapellil 11:6c2d5fbdab18 61 _dev_spi3w = NULL;
mapellil 11:6c2d5fbdab18 62 _dev_i2c=NULL;
mapellil 11:6c2d5fbdab18 63 return;
mapellil 11:6c2d5fbdab18 64 }
mapellil 11:6c2d5fbdab18 65 _cs_pin = 1;
mapellil 11:6c2d5fbdab18 66 _dev_spi = NULL;
mapellil 11:6c2d5fbdab18 67 _dev_i2c=NULL;
mapellil 11:6c2d5fbdab18 68
mapellil 11:6c2d5fbdab18 69 LSM6DSL_ACC_GYRO_W_SPI_Mode((void *)this, LSM6DSL_ACC_GYRO_SIM_3_WIRE);
mapellil 11:6c2d5fbdab18 70 LSM6DSL_ACC_GYRO_W_I2C_MASTER_Enable((void *)this, LSM6DSL_ACC_GYRO_MASTER_ON_DISABLED);
mapellil 11:6c2d5fbdab18 71 }
mapellil 11:6c2d5fbdab18 72
mapellil 11:6c2d5fbdab18 73 LSM6DSLSensor::LSM6DSLSensor(SPI *spi, PinName cs_pin, PinName int1_pin, PinName int2_pin) :
mapellil 11:6c2d5fbdab18 74 _dev_spi(spi), _cs_pin(cs_pin), _int1_irq(int1_pin), _int2_irq(int2_pin)
mapellil 11:6c2d5fbdab18 75 {
mapellil 11:6c2d5fbdab18 76 if (cs_pin == NC)
mapellil 11:6c2d5fbdab18 77 {
mapellil 11:6c2d5fbdab18 78 printf ("ERROR LSM6DSLSensor CS MUST NOT BE NC\n\r");
mapellil 11:6c2d5fbdab18 79 _dev_spi = NULL;
mapellil 11:6c2d5fbdab18 80 _dev_spi3w = NULL;
mapellil 11:6c2d5fbdab18 81 _dev_i2c=NULL;
mapellil 11:6c2d5fbdab18 82 return;
mapellil 11:6c2d5fbdab18 83 }
mapellil 11:6c2d5fbdab18 84 _cs_pin = 1;
mapellil 11:6c2d5fbdab18 85 _dev_i2c=NULL;
mapellil 11:6c2d5fbdab18 86
mapellil 11:6c2d5fbdab18 87 LSM6DSL_ACC_GYRO_W_SPI_Mode((void *)this, LSM6DSL_ACC_GYRO_SIM_4_WIRE);
mapellil 11:6c2d5fbdab18 88 LSM6DSL_ACC_GYRO_W_I2C_MASTER_Enable((void *)this, LSM6DSL_ACC_GYRO_MASTER_ON_DISABLED);
mapellil 11:6c2d5fbdab18 89 }
mapellil 11:6c2d5fbdab18 90
nikapov 0:cad5dab2b21d 91
nikapov 0:cad5dab2b21d 92 /** Constructor
nikapov 0:cad5dab2b21d 93 * @param i2c object of an helper class which handles the I2C peripheral
nikapov 0:cad5dab2b21d 94 * @param address the address of the component's instance
nikapov 0:cad5dab2b21d 95 */
mapellil 11:6c2d5fbdab18 96 /*LSM6DSLSensor::LSM6DSLSensor(DevI2C *i2c, PinName cs_pin, PinName int1_pin, PinName int2_pin) :
mapellil 11:6c2d5fbdab18 97 _dev_i2c(i2c), _cs_pin(cs_pin), _int1_irq(int1_pin), _int2_irq(int2_pin)
nikapov 0:cad5dab2b21d 98 {
mapellil 11:6c2d5fbdab18 99 _address = LSM6DSL_ACC_GYRO_I2C_ADDRESS_HIGH;
mapellil 11:6c2d5fbdab18 100 _dev_spi3w = NULL;
mapellil 11:6c2d5fbdab18 101 _dev_spi = NULL;
mapellil 11:6c2d5fbdab18 102 };*/
nikapov 0:cad5dab2b21d 103
nikapov 0:cad5dab2b21d 104 /** Constructor
nikapov 0:cad5dab2b21d 105 * @param i2c object of an helper class which handles the I2C peripheral
nikapov 0:cad5dab2b21d 106 * @param address the address of the component's instance
nikapov 0:cad5dab2b21d 107 */
mapellil 11:6c2d5fbdab18 108 LSM6DSLSensor::LSM6DSLSensor(DevI2C *i2c, uint8_t address, PinName int1_pin, PinName int2_pin, PinName cs_pin) :
mapellil 11:6c2d5fbdab18 109 _dev_i2c(i2c), _address(address), _int1_irq(int1_pin), _int2_irq(int2_pin), _cs_pin(cs_pin)
nikapov 0:cad5dab2b21d 110 {
mapellil 11:6c2d5fbdab18 111 _dev_spi3w = NULL;
mapellil 11:6c2d5fbdab18 112 _dev_spi = NULL;
mapellil 11:6c2d5fbdab18 113 if (cs_pin != NC) _cs_pin = 1;
mapellil 11:6c2d5fbdab18 114 };
nikapov 0:cad5dab2b21d 115
nikapov 0:cad5dab2b21d 116
nikapov 0:cad5dab2b21d 117 /**
nikapov 0:cad5dab2b21d 118 * @brief Initializing the component.
nikapov 0:cad5dab2b21d 119 * @param[in] init pointer to device specific initalization structure.
nikapov 0:cad5dab2b21d 120 * @retval "0" in case of success, an error code otherwise.
nikapov 0:cad5dab2b21d 121 */
davide.aliprandi@st.com 6:671fd10a51b7 122 int LSM6DSLSensor::init(void *init)
nikapov 0:cad5dab2b21d 123 {
nikapov 0:cad5dab2b21d 124 /* Enable register address automatically incremented during a multiple byte
nikapov 0:cad5dab2b21d 125 access with a serial interface. */
nikapov 0:cad5dab2b21d 126 if ( LSM6DSL_ACC_GYRO_W_IF_Addr_Incr( (void *)this, LSM6DSL_ACC_GYRO_IF_INC_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 127 {
nikapov 0:cad5dab2b21d 128 return 1;
nikapov 0:cad5dab2b21d 129 }
nikapov 0:cad5dab2b21d 130
nikapov 0:cad5dab2b21d 131 /* Enable BDU */
nikapov 0:cad5dab2b21d 132 if ( LSM6DSL_ACC_GYRO_W_BDU( (void *)this, LSM6DSL_ACC_GYRO_BDU_BLOCK_UPDATE ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 133 {
nikapov 0:cad5dab2b21d 134 return 1;
nikapov 0:cad5dab2b21d 135 }
nikapov 0:cad5dab2b21d 136
nikapov 0:cad5dab2b21d 137 /* FIFO mode selection */
nikapov 0:cad5dab2b21d 138 if ( LSM6DSL_ACC_GYRO_W_FIFO_MODE( (void *)this, LSM6DSL_ACC_GYRO_FIFO_MODE_BYPASS ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 139 {
nikapov 0:cad5dab2b21d 140 return 1;
nikapov 0:cad5dab2b21d 141 }
nikapov 0:cad5dab2b21d 142
nikapov 0:cad5dab2b21d 143 /* Output data rate selection - power down. */
nikapov 0:cad5dab2b21d 144 if ( LSM6DSL_ACC_GYRO_W_ODR_XL( (void *)this, LSM6DSL_ACC_GYRO_ODR_XL_POWER_DOWN ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 145 {
nikapov 0:cad5dab2b21d 146 return 1;
nikapov 0:cad5dab2b21d 147 }
nikapov 0:cad5dab2b21d 148
nikapov 0:cad5dab2b21d 149 /* Full scale selection. */
davide.aliprandi@st.com 6:671fd10a51b7 150 if ( set_x_fs( 2.0f ) == 1 )
nikapov 0:cad5dab2b21d 151 {
nikapov 0:cad5dab2b21d 152 return 1;
nikapov 0:cad5dab2b21d 153 }
nikapov 0:cad5dab2b21d 154
nikapov 0:cad5dab2b21d 155 /* Output data rate selection - power down */
nikapov 0:cad5dab2b21d 156 if ( LSM6DSL_ACC_GYRO_W_ODR_G( (void *)this, LSM6DSL_ACC_GYRO_ODR_G_POWER_DOWN ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 157 {
nikapov 0:cad5dab2b21d 158 return 1;
nikapov 0:cad5dab2b21d 159 }
nikapov 0:cad5dab2b21d 160
nikapov 0:cad5dab2b21d 161 /* Full scale selection. */
davide.aliprandi@st.com 6:671fd10a51b7 162 if ( set_g_fs( 2000.0f ) == 1 )
nikapov 0:cad5dab2b21d 163 {
nikapov 0:cad5dab2b21d 164 return 1;
nikapov 0:cad5dab2b21d 165 }
nikapov 0:cad5dab2b21d 166
Davidroid 9:038121268b07 167 _x_last_odr = 104.0f;
nikapov 0:cad5dab2b21d 168
Davidroid 9:038121268b07 169 _x_is_enabled = 0;
nikapov 0:cad5dab2b21d 170
Davidroid 9:038121268b07 171 _g_last_odr = 104.0f;
nikapov 0:cad5dab2b21d 172
Davidroid 9:038121268b07 173 _g_is_enabled = 0;
nikapov 0:cad5dab2b21d 174
nikapov 0:cad5dab2b21d 175 return 0;
nikapov 0:cad5dab2b21d 176 }
nikapov 0:cad5dab2b21d 177
nikapov 0:cad5dab2b21d 178 /**
nikapov 0:cad5dab2b21d 179 * @brief Enable LSM6DSL Accelerator
nikapov 0:cad5dab2b21d 180 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 181 */
davide.aliprandi@st.com 6:671fd10a51b7 182 int LSM6DSLSensor::enable_x(void)
nikapov 0:cad5dab2b21d 183 {
nikapov 0:cad5dab2b21d 184 /* Check if the component is already enabled */
Davidroid 9:038121268b07 185 if ( _x_is_enabled == 1 )
nikapov 0:cad5dab2b21d 186 {
nikapov 0:cad5dab2b21d 187 return 0;
nikapov 0:cad5dab2b21d 188 }
nikapov 0:cad5dab2b21d 189
nikapov 0:cad5dab2b21d 190 /* Output data rate selection. */
Davidroid 9:038121268b07 191 if ( set_x_odr_when_enabled( _x_last_odr ) == 1 )
nikapov 0:cad5dab2b21d 192 {
nikapov 0:cad5dab2b21d 193 return 1;
nikapov 0:cad5dab2b21d 194 }
nikapov 0:cad5dab2b21d 195
Davidroid 9:038121268b07 196 _x_is_enabled = 1;
nikapov 0:cad5dab2b21d 197
nikapov 0:cad5dab2b21d 198 return 0;
nikapov 0:cad5dab2b21d 199 }
nikapov 0:cad5dab2b21d 200
nikapov 0:cad5dab2b21d 201 /**
nikapov 0:cad5dab2b21d 202 * @brief Enable LSM6DSL Gyroscope
nikapov 0:cad5dab2b21d 203 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 204 */
davide.aliprandi@st.com 6:671fd10a51b7 205 int LSM6DSLSensor::enable_g(void)
nikapov 0:cad5dab2b21d 206 {
nikapov 0:cad5dab2b21d 207 /* Check if the component is already enabled */
Davidroid 9:038121268b07 208 if ( _g_is_enabled == 1 )
nikapov 0:cad5dab2b21d 209 {
nikapov 0:cad5dab2b21d 210 return 0;
nikapov 0:cad5dab2b21d 211 }
nikapov 0:cad5dab2b21d 212
nikapov 0:cad5dab2b21d 213 /* Output data rate selection. */
Davidroid 9:038121268b07 214 if ( set_g_odr_when_enabled( _g_last_odr ) == 1 )
nikapov 0:cad5dab2b21d 215 {
nikapov 0:cad5dab2b21d 216 return 1;
nikapov 0:cad5dab2b21d 217 }
nikapov 0:cad5dab2b21d 218
Davidroid 9:038121268b07 219 _g_is_enabled = 1;
nikapov 0:cad5dab2b21d 220
nikapov 0:cad5dab2b21d 221 return 0;
nikapov 0:cad5dab2b21d 222 }
nikapov 0:cad5dab2b21d 223
nikapov 0:cad5dab2b21d 224 /**
nikapov 0:cad5dab2b21d 225 * @brief Disable LSM6DSL Accelerator
nikapov 0:cad5dab2b21d 226 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 227 */
davide.aliprandi@st.com 6:671fd10a51b7 228 int LSM6DSLSensor::disable_x(void)
nikapov 0:cad5dab2b21d 229 {
nikapov 0:cad5dab2b21d 230 /* Check if the component is already disabled */
Davidroid 9:038121268b07 231 if ( _x_is_enabled == 0 )
nikapov 0:cad5dab2b21d 232 {
nikapov 0:cad5dab2b21d 233 return 0;
nikapov 0:cad5dab2b21d 234 }
nikapov 0:cad5dab2b21d 235
nikapov 0:cad5dab2b21d 236 /* Store actual output data rate. */
Davidroid 9:038121268b07 237 if ( get_x_odr( &_x_last_odr ) == 1 )
nikapov 0:cad5dab2b21d 238 {
nikapov 0:cad5dab2b21d 239 return 1;
nikapov 0:cad5dab2b21d 240 }
nikapov 0:cad5dab2b21d 241
nikapov 0:cad5dab2b21d 242 /* Output data rate selection - power down. */
nikapov 0:cad5dab2b21d 243 if ( LSM6DSL_ACC_GYRO_W_ODR_XL( (void *)this, LSM6DSL_ACC_GYRO_ODR_XL_POWER_DOWN ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 244 {
nikapov 0:cad5dab2b21d 245 return 1;
nikapov 0:cad5dab2b21d 246 }
nikapov 0:cad5dab2b21d 247
Davidroid 9:038121268b07 248 _x_is_enabled = 0;
nikapov 0:cad5dab2b21d 249
nikapov 0:cad5dab2b21d 250 return 0;
nikapov 0:cad5dab2b21d 251 }
nikapov 0:cad5dab2b21d 252
nikapov 0:cad5dab2b21d 253 /**
nikapov 0:cad5dab2b21d 254 * @brief Disable LSM6DSL Gyroscope
nikapov 0:cad5dab2b21d 255 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 256 */
davide.aliprandi@st.com 6:671fd10a51b7 257 int LSM6DSLSensor::disable_g(void)
nikapov 0:cad5dab2b21d 258 {
nikapov 0:cad5dab2b21d 259 /* Check if the component is already disabled */
Davidroid 9:038121268b07 260 if ( _g_is_enabled == 0 )
nikapov 0:cad5dab2b21d 261 {
nikapov 0:cad5dab2b21d 262 return 0;
nikapov 0:cad5dab2b21d 263 }
nikapov 0:cad5dab2b21d 264
nikapov 0:cad5dab2b21d 265 /* Store actual output data rate. */
Davidroid 9:038121268b07 266 if ( get_g_odr( &_g_last_odr ) == 1 )
nikapov 0:cad5dab2b21d 267 {
nikapov 0:cad5dab2b21d 268 return 1;
nikapov 0:cad5dab2b21d 269 }
nikapov 0:cad5dab2b21d 270
nikapov 0:cad5dab2b21d 271 /* Output data rate selection - power down */
nikapov 0:cad5dab2b21d 272 if ( LSM6DSL_ACC_GYRO_W_ODR_G( (void *)this, LSM6DSL_ACC_GYRO_ODR_G_POWER_DOWN ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 273 {
nikapov 0:cad5dab2b21d 274 return 1;
nikapov 0:cad5dab2b21d 275 }
nikapov 0:cad5dab2b21d 276
Davidroid 9:038121268b07 277 _g_is_enabled = 0;
nikapov 0:cad5dab2b21d 278
nikapov 0:cad5dab2b21d 279 return 0;
nikapov 0:cad5dab2b21d 280 }
nikapov 0:cad5dab2b21d 281
nikapov 0:cad5dab2b21d 282 /**
nikapov 0:cad5dab2b21d 283 * @brief Read ID of LSM6DSL Accelerometer and Gyroscope
nikapov 0:cad5dab2b21d 284 * @param p_id the pointer where the ID of the device is stored
nikapov 0:cad5dab2b21d 285 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 286 */
davide.aliprandi@st.com 6:671fd10a51b7 287 int LSM6DSLSensor::read_id(uint8_t *id)
nikapov 0:cad5dab2b21d 288 {
nikapov 0:cad5dab2b21d 289 if(!id)
nikapov 0:cad5dab2b21d 290 {
nikapov 0:cad5dab2b21d 291 return 1;
nikapov 0:cad5dab2b21d 292 }
nikapov 0:cad5dab2b21d 293
nikapov 0:cad5dab2b21d 294 /* Read WHO AM I register */
nikapov 0:cad5dab2b21d 295 if ( LSM6DSL_ACC_GYRO_R_WHO_AM_I( (void *)this, id ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 296 {
nikapov 0:cad5dab2b21d 297 return 1;
nikapov 0:cad5dab2b21d 298 }
nikapov 0:cad5dab2b21d 299
nikapov 0:cad5dab2b21d 300 return 0;
nikapov 0:cad5dab2b21d 301 }
nikapov 0:cad5dab2b21d 302
nikapov 0:cad5dab2b21d 303 /**
nikapov 0:cad5dab2b21d 304 * @brief Read data from LSM6DSL Accelerometer
nikapov 0:cad5dab2b21d 305 * @param pData the pointer where the accelerometer data are stored
nikapov 0:cad5dab2b21d 306 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 307 */
davide.aliprandi@st.com 6:671fd10a51b7 308 int LSM6DSLSensor::get_x_axes(int32_t *pData)
nikapov 0:cad5dab2b21d 309 {
nikapov 0:cad5dab2b21d 310 int16_t dataRaw[3];
nikapov 0:cad5dab2b21d 311 float sensitivity = 0;
nikapov 0:cad5dab2b21d 312
nikapov 0:cad5dab2b21d 313 /* Read raw data from LSM6DSL output register. */
Davidroid 9:038121268b07 314 if ( get_x_axes_raw( dataRaw ) == 1 )
nikapov 0:cad5dab2b21d 315 {
nikapov 0:cad5dab2b21d 316 return 1;
nikapov 0:cad5dab2b21d 317 }
nikapov 0:cad5dab2b21d 318
nikapov 0:cad5dab2b21d 319 /* Get LSM6DSL actual sensitivity. */
davide.aliprandi@st.com 6:671fd10a51b7 320 if ( get_x_sensitivity( &sensitivity ) == 1 )
nikapov 0:cad5dab2b21d 321 {
nikapov 0:cad5dab2b21d 322 return 1;
nikapov 0:cad5dab2b21d 323 }
nikapov 0:cad5dab2b21d 324
nikapov 0:cad5dab2b21d 325 /* Calculate the data. */
nikapov 0:cad5dab2b21d 326 pData[0] = ( int32_t )( dataRaw[0] * sensitivity );
nikapov 0:cad5dab2b21d 327 pData[1] = ( int32_t )( dataRaw[1] * sensitivity );
nikapov 0:cad5dab2b21d 328 pData[2] = ( int32_t )( dataRaw[2] * sensitivity );
nikapov 0:cad5dab2b21d 329
nikapov 0:cad5dab2b21d 330 return 0;
nikapov 0:cad5dab2b21d 331 }
nikapov 0:cad5dab2b21d 332
nikapov 0:cad5dab2b21d 333 /**
nikapov 0:cad5dab2b21d 334 * @brief Read data from LSM6DSL Gyroscope
nikapov 0:cad5dab2b21d 335 * @param pData the pointer where the gyroscope data are stored
nikapov 0:cad5dab2b21d 336 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 337 */
davide.aliprandi@st.com 6:671fd10a51b7 338 int LSM6DSLSensor::get_g_axes(int32_t *pData)
nikapov 0:cad5dab2b21d 339 {
nikapov 0:cad5dab2b21d 340 int16_t dataRaw[3];
nikapov 0:cad5dab2b21d 341 float sensitivity = 0;
nikapov 0:cad5dab2b21d 342
nikapov 0:cad5dab2b21d 343 /* Read raw data from LSM6DSL output register. */
Davidroid 9:038121268b07 344 if ( get_g_axes_raw( dataRaw ) == 1 )
nikapov 0:cad5dab2b21d 345 {
nikapov 0:cad5dab2b21d 346 return 1;
nikapov 0:cad5dab2b21d 347 }
nikapov 0:cad5dab2b21d 348
nikapov 0:cad5dab2b21d 349 /* Get LSM6DSL actual sensitivity. */
davide.aliprandi@st.com 6:671fd10a51b7 350 if ( get_g_sensitivity( &sensitivity ) == 1 )
nikapov 0:cad5dab2b21d 351 {
nikapov 0:cad5dab2b21d 352 return 1;
nikapov 0:cad5dab2b21d 353 }
nikapov 0:cad5dab2b21d 354
nikapov 0:cad5dab2b21d 355 /* Calculate the data. */
nikapov 0:cad5dab2b21d 356 pData[0] = ( int32_t )( dataRaw[0] * sensitivity );
nikapov 0:cad5dab2b21d 357 pData[1] = ( int32_t )( dataRaw[1] * sensitivity );
nikapov 0:cad5dab2b21d 358 pData[2] = ( int32_t )( dataRaw[2] * sensitivity );
nikapov 0:cad5dab2b21d 359
nikapov 0:cad5dab2b21d 360 return 0;
nikapov 0:cad5dab2b21d 361 }
nikapov 0:cad5dab2b21d 362
nikapov 0:cad5dab2b21d 363 /**
nikapov 0:cad5dab2b21d 364 * @brief Read Accelerometer Sensitivity
nikapov 0:cad5dab2b21d 365 * @param pfData the pointer where the accelerometer sensitivity is stored
nikapov 0:cad5dab2b21d 366 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 367 */
davide.aliprandi@st.com 6:671fd10a51b7 368 int LSM6DSLSensor::get_x_sensitivity(float *pfData)
nikapov 0:cad5dab2b21d 369 {
nikapov 0:cad5dab2b21d 370 LSM6DSL_ACC_GYRO_FS_XL_t fullScale;
nikapov 0:cad5dab2b21d 371
nikapov 0:cad5dab2b21d 372 /* Read actual full scale selection from sensor. */
nikapov 0:cad5dab2b21d 373 if ( LSM6DSL_ACC_GYRO_R_FS_XL( (void *)this, &fullScale ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 374 {
nikapov 0:cad5dab2b21d 375 return 1;
nikapov 0:cad5dab2b21d 376 }
nikapov 0:cad5dab2b21d 377
nikapov 0:cad5dab2b21d 378 /* Store the sensitivity based on actual full scale. */
nikapov 0:cad5dab2b21d 379 switch( fullScale )
nikapov 0:cad5dab2b21d 380 {
nikapov 0:cad5dab2b21d 381 case LSM6DSL_ACC_GYRO_FS_XL_2g:
nikapov 0:cad5dab2b21d 382 *pfData = ( float )LSM6DSL_ACC_SENSITIVITY_FOR_FS_2G;
nikapov 0:cad5dab2b21d 383 break;
nikapov 0:cad5dab2b21d 384 case LSM6DSL_ACC_GYRO_FS_XL_4g:
nikapov 0:cad5dab2b21d 385 *pfData = ( float )LSM6DSL_ACC_SENSITIVITY_FOR_FS_4G;
nikapov 0:cad5dab2b21d 386 break;
nikapov 0:cad5dab2b21d 387 case LSM6DSL_ACC_GYRO_FS_XL_8g:
nikapov 0:cad5dab2b21d 388 *pfData = ( float )LSM6DSL_ACC_SENSITIVITY_FOR_FS_8G;
nikapov 0:cad5dab2b21d 389 break;
nikapov 0:cad5dab2b21d 390 case LSM6DSL_ACC_GYRO_FS_XL_16g:
nikapov 0:cad5dab2b21d 391 *pfData = ( float )LSM6DSL_ACC_SENSITIVITY_FOR_FS_16G;
nikapov 0:cad5dab2b21d 392 break;
nikapov 0:cad5dab2b21d 393 default:
nikapov 0:cad5dab2b21d 394 *pfData = -1.0f;
nikapov 0:cad5dab2b21d 395 return 1;
nikapov 0:cad5dab2b21d 396 }
nikapov 0:cad5dab2b21d 397
nikapov 0:cad5dab2b21d 398 return 0;
nikapov 0:cad5dab2b21d 399 }
nikapov 0:cad5dab2b21d 400
nikapov 0:cad5dab2b21d 401 /**
nikapov 0:cad5dab2b21d 402 * @brief Read Gyroscope Sensitivity
nikapov 0:cad5dab2b21d 403 * @param pfData the pointer where the gyroscope sensitivity is stored
nikapov 0:cad5dab2b21d 404 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 405 */
davide.aliprandi@st.com 6:671fd10a51b7 406 int LSM6DSLSensor::get_g_sensitivity(float *pfData)
nikapov 0:cad5dab2b21d 407 {
nikapov 0:cad5dab2b21d 408 LSM6DSL_ACC_GYRO_FS_125_t fullScale125;
nikapov 0:cad5dab2b21d 409 LSM6DSL_ACC_GYRO_FS_G_t fullScale;
nikapov 0:cad5dab2b21d 410
nikapov 0:cad5dab2b21d 411 /* Read full scale 125 selection from sensor. */
nikapov 0:cad5dab2b21d 412 if ( LSM6DSL_ACC_GYRO_R_FS_125( (void *)this, &fullScale125 ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 413 {
nikapov 0:cad5dab2b21d 414 return 1;
nikapov 0:cad5dab2b21d 415 }
nikapov 0:cad5dab2b21d 416
nikapov 0:cad5dab2b21d 417 if ( fullScale125 == LSM6DSL_ACC_GYRO_FS_125_ENABLED )
nikapov 0:cad5dab2b21d 418 {
nikapov 0:cad5dab2b21d 419 *pfData = ( float )LSM6DSL_GYRO_SENSITIVITY_FOR_FS_125DPS;
nikapov 0:cad5dab2b21d 420 }
nikapov 0:cad5dab2b21d 421
nikapov 0:cad5dab2b21d 422 else
nikapov 0:cad5dab2b21d 423 {
nikapov 0:cad5dab2b21d 424
nikapov 0:cad5dab2b21d 425 /* Read actual full scale selection from sensor. */
nikapov 0:cad5dab2b21d 426 if ( LSM6DSL_ACC_GYRO_R_FS_G( (void *)this, &fullScale ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 427 {
nikapov 0:cad5dab2b21d 428 return 1;
nikapov 0:cad5dab2b21d 429 }
nikapov 0:cad5dab2b21d 430
nikapov 0:cad5dab2b21d 431 /* Store the sensitivity based on actual full scale. */
nikapov 0:cad5dab2b21d 432 switch( fullScale )
nikapov 0:cad5dab2b21d 433 {
nikapov 0:cad5dab2b21d 434 case LSM6DSL_ACC_GYRO_FS_G_245dps:
nikapov 0:cad5dab2b21d 435 *pfData = ( float )LSM6DSL_GYRO_SENSITIVITY_FOR_FS_245DPS;
nikapov 0:cad5dab2b21d 436 break;
nikapov 0:cad5dab2b21d 437 case LSM6DSL_ACC_GYRO_FS_G_500dps:
nikapov 0:cad5dab2b21d 438 *pfData = ( float )LSM6DSL_GYRO_SENSITIVITY_FOR_FS_500DPS;
nikapov 0:cad5dab2b21d 439 break;
nikapov 0:cad5dab2b21d 440 case LSM6DSL_ACC_GYRO_FS_G_1000dps:
nikapov 0:cad5dab2b21d 441 *pfData = ( float )LSM6DSL_GYRO_SENSITIVITY_FOR_FS_1000DPS;
nikapov 0:cad5dab2b21d 442 break;
nikapov 0:cad5dab2b21d 443 case LSM6DSL_ACC_GYRO_FS_G_2000dps:
nikapov 0:cad5dab2b21d 444 *pfData = ( float )LSM6DSL_GYRO_SENSITIVITY_FOR_FS_2000DPS;
nikapov 0:cad5dab2b21d 445 break;
nikapov 0:cad5dab2b21d 446 default:
nikapov 0:cad5dab2b21d 447 *pfData = -1.0f;
nikapov 0:cad5dab2b21d 448 return 1;
nikapov 0:cad5dab2b21d 449 }
nikapov 0:cad5dab2b21d 450 }
nikapov 0:cad5dab2b21d 451
nikapov 0:cad5dab2b21d 452 return 0;
nikapov 0:cad5dab2b21d 453 }
nikapov 0:cad5dab2b21d 454
nikapov 0:cad5dab2b21d 455 /**
nikapov 0:cad5dab2b21d 456 * @brief Read raw data from LSM6DSL Accelerometer
nikapov 0:cad5dab2b21d 457 * @param pData the pointer where the accelerometer raw data are stored
nikapov 0:cad5dab2b21d 458 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 459 */
Davidroid 9:038121268b07 460 int LSM6DSLSensor::get_x_axes_raw(int16_t *pData)
nikapov 0:cad5dab2b21d 461 {
nikapov 0:cad5dab2b21d 462 uint8_t regValue[6] = {0, 0, 0, 0, 0, 0};
nikapov 0:cad5dab2b21d 463
nikapov 0:cad5dab2b21d 464 /* Read output registers from LSM6DSL_ACC_GYRO_OUTX_L_XL to LSM6DSL_ACC_GYRO_OUTZ_H_XL. */
nikapov 0:cad5dab2b21d 465 if ( LSM6DSL_ACC_GYRO_GetRawAccData( (void *)this, regValue ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 466 {
nikapov 0:cad5dab2b21d 467 return 1;
nikapov 0:cad5dab2b21d 468 }
nikapov 0:cad5dab2b21d 469
nikapov 0:cad5dab2b21d 470 /* Format the data. */
nikapov 0:cad5dab2b21d 471 pData[0] = ( ( ( ( int16_t )regValue[1] ) << 8 ) + ( int16_t )regValue[0] );
nikapov 0:cad5dab2b21d 472 pData[1] = ( ( ( ( int16_t )regValue[3] ) << 8 ) + ( int16_t )regValue[2] );
nikapov 0:cad5dab2b21d 473 pData[2] = ( ( ( ( int16_t )regValue[5] ) << 8 ) + ( int16_t )regValue[4] );
nikapov 0:cad5dab2b21d 474
nikapov 0:cad5dab2b21d 475 return 0;
nikapov 0:cad5dab2b21d 476 }
nikapov 0:cad5dab2b21d 477
nikapov 0:cad5dab2b21d 478 /**
nikapov 0:cad5dab2b21d 479 * @brief Read raw data from LSM6DSL Gyroscope
nikapov 0:cad5dab2b21d 480 * @param pData the pointer where the gyroscope raw data are stored
nikapov 0:cad5dab2b21d 481 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 482 */
Davidroid 9:038121268b07 483 int LSM6DSLSensor::get_g_axes_raw(int16_t *pData)
nikapov 0:cad5dab2b21d 484 {
nikapov 0:cad5dab2b21d 485 uint8_t regValue[6] = {0, 0, 0, 0, 0, 0};
nikapov 0:cad5dab2b21d 486
nikapov 0:cad5dab2b21d 487 /* Read output registers from LSM6DSL_ACC_GYRO_OUTX_L_G to LSM6DSL_ACC_GYRO_OUTZ_H_G. */
nikapov 0:cad5dab2b21d 488 if ( LSM6DSL_ACC_GYRO_GetRawGyroData( (void *)this, regValue ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 489 {
nikapov 0:cad5dab2b21d 490 return 1;
nikapov 0:cad5dab2b21d 491 }
nikapov 0:cad5dab2b21d 492
nikapov 0:cad5dab2b21d 493 /* Format the data. */
nikapov 0:cad5dab2b21d 494 pData[0] = ( ( ( ( int16_t )regValue[1] ) << 8 ) + ( int16_t )regValue[0] );
nikapov 0:cad5dab2b21d 495 pData[1] = ( ( ( ( int16_t )regValue[3] ) << 8 ) + ( int16_t )regValue[2] );
nikapov 0:cad5dab2b21d 496 pData[2] = ( ( ( ( int16_t )regValue[5] ) << 8 ) + ( int16_t )regValue[4] );
nikapov 0:cad5dab2b21d 497
nikapov 0:cad5dab2b21d 498 return 0;
nikapov 0:cad5dab2b21d 499 }
nikapov 0:cad5dab2b21d 500
nikapov 0:cad5dab2b21d 501 /**
nikapov 0:cad5dab2b21d 502 * @brief Read LSM6DSL Accelerometer output data rate
nikapov 0:cad5dab2b21d 503 * @param odr the pointer to the output data rate
nikapov 0:cad5dab2b21d 504 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 505 */
davide.aliprandi@st.com 6:671fd10a51b7 506 int LSM6DSLSensor::get_x_odr(float* odr)
nikapov 0:cad5dab2b21d 507 {
nikapov 0:cad5dab2b21d 508 LSM6DSL_ACC_GYRO_ODR_XL_t odr_low_level;
nikapov 0:cad5dab2b21d 509
nikapov 0:cad5dab2b21d 510 if ( LSM6DSL_ACC_GYRO_R_ODR_XL( (void *)this, &odr_low_level ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 511 {
nikapov 0:cad5dab2b21d 512 return 1;
nikapov 0:cad5dab2b21d 513 }
nikapov 0:cad5dab2b21d 514
nikapov 0:cad5dab2b21d 515 switch( odr_low_level )
nikapov 0:cad5dab2b21d 516 {
nikapov 0:cad5dab2b21d 517 case LSM6DSL_ACC_GYRO_ODR_XL_POWER_DOWN:
nikapov 0:cad5dab2b21d 518 *odr = 0.0f;
nikapov 0:cad5dab2b21d 519 break;
nikapov 0:cad5dab2b21d 520 case LSM6DSL_ACC_GYRO_ODR_XL_13Hz:
nikapov 0:cad5dab2b21d 521 *odr = 13.0f;
nikapov 0:cad5dab2b21d 522 break;
nikapov 0:cad5dab2b21d 523 case LSM6DSL_ACC_GYRO_ODR_XL_26Hz:
nikapov 0:cad5dab2b21d 524 *odr = 26.0f;
nikapov 0:cad5dab2b21d 525 break;
nikapov 0:cad5dab2b21d 526 case LSM6DSL_ACC_GYRO_ODR_XL_52Hz:
nikapov 0:cad5dab2b21d 527 *odr = 52.0f;
nikapov 0:cad5dab2b21d 528 break;
nikapov 0:cad5dab2b21d 529 case LSM6DSL_ACC_GYRO_ODR_XL_104Hz:
nikapov 0:cad5dab2b21d 530 *odr = 104.0f;
nikapov 0:cad5dab2b21d 531 break;
nikapov 0:cad5dab2b21d 532 case LSM6DSL_ACC_GYRO_ODR_XL_208Hz:
nikapov 0:cad5dab2b21d 533 *odr = 208.0f;
nikapov 0:cad5dab2b21d 534 break;
nikapov 0:cad5dab2b21d 535 case LSM6DSL_ACC_GYRO_ODR_XL_416Hz:
nikapov 0:cad5dab2b21d 536 *odr = 416.0f;
nikapov 0:cad5dab2b21d 537 break;
nikapov 0:cad5dab2b21d 538 case LSM6DSL_ACC_GYRO_ODR_XL_833Hz:
nikapov 0:cad5dab2b21d 539 *odr = 833.0f;
nikapov 0:cad5dab2b21d 540 break;
nikapov 0:cad5dab2b21d 541 case LSM6DSL_ACC_GYRO_ODR_XL_1660Hz:
nikapov 0:cad5dab2b21d 542 *odr = 1660.0f;
nikapov 0:cad5dab2b21d 543 break;
nikapov 0:cad5dab2b21d 544 case LSM6DSL_ACC_GYRO_ODR_XL_3330Hz:
nikapov 0:cad5dab2b21d 545 *odr = 3330.0f;
nikapov 0:cad5dab2b21d 546 break;
nikapov 0:cad5dab2b21d 547 case LSM6DSL_ACC_GYRO_ODR_XL_6660Hz:
nikapov 0:cad5dab2b21d 548 *odr = 6660.0f;
nikapov 0:cad5dab2b21d 549 break;
nikapov 0:cad5dab2b21d 550 default:
nikapov 0:cad5dab2b21d 551 *odr = -1.0f;
nikapov 0:cad5dab2b21d 552 return 1;
nikapov 0:cad5dab2b21d 553 }
nikapov 0:cad5dab2b21d 554
nikapov 0:cad5dab2b21d 555 return 0;
nikapov 0:cad5dab2b21d 556 }
nikapov 0:cad5dab2b21d 557
nikapov 0:cad5dab2b21d 558 /**
nikapov 0:cad5dab2b21d 559 * @brief Read LSM6DSL Gyroscope output data rate
nikapov 0:cad5dab2b21d 560 * @param odr the pointer to the output data rate
nikapov 0:cad5dab2b21d 561 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 562 */
davide.aliprandi@st.com 6:671fd10a51b7 563 int LSM6DSLSensor::get_g_odr(float* odr)
nikapov 0:cad5dab2b21d 564 {
nikapov 0:cad5dab2b21d 565 LSM6DSL_ACC_GYRO_ODR_G_t odr_low_level;
nikapov 0:cad5dab2b21d 566
nikapov 0:cad5dab2b21d 567 if ( LSM6DSL_ACC_GYRO_R_ODR_G( (void *)this, &odr_low_level ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 568 {
nikapov 0:cad5dab2b21d 569 return 1;
nikapov 0:cad5dab2b21d 570 }
nikapov 0:cad5dab2b21d 571
nikapov 0:cad5dab2b21d 572 switch( odr_low_level )
nikapov 0:cad5dab2b21d 573 {
nikapov 0:cad5dab2b21d 574 case LSM6DSL_ACC_GYRO_ODR_G_POWER_DOWN:
nikapov 0:cad5dab2b21d 575 *odr = 0.0f;
nikapov 0:cad5dab2b21d 576 break;
nikapov 0:cad5dab2b21d 577 case LSM6DSL_ACC_GYRO_ODR_G_13Hz:
nikapov 0:cad5dab2b21d 578 *odr = 13.0f;
nikapov 0:cad5dab2b21d 579 break;
nikapov 0:cad5dab2b21d 580 case LSM6DSL_ACC_GYRO_ODR_G_26Hz:
nikapov 0:cad5dab2b21d 581 *odr = 26.0f;
nikapov 0:cad5dab2b21d 582 break;
nikapov 0:cad5dab2b21d 583 case LSM6DSL_ACC_GYRO_ODR_G_52Hz:
nikapov 0:cad5dab2b21d 584 *odr = 52.0f;
nikapov 0:cad5dab2b21d 585 break;
nikapov 0:cad5dab2b21d 586 case LSM6DSL_ACC_GYRO_ODR_G_104Hz:
nikapov 0:cad5dab2b21d 587 *odr = 104.0f;
nikapov 0:cad5dab2b21d 588 break;
nikapov 0:cad5dab2b21d 589 case LSM6DSL_ACC_GYRO_ODR_G_208Hz:
nikapov 0:cad5dab2b21d 590 *odr = 208.0f;
nikapov 0:cad5dab2b21d 591 break;
nikapov 0:cad5dab2b21d 592 case LSM6DSL_ACC_GYRO_ODR_G_416Hz:
nikapov 0:cad5dab2b21d 593 *odr = 416.0f;
nikapov 0:cad5dab2b21d 594 break;
nikapov 0:cad5dab2b21d 595 case LSM6DSL_ACC_GYRO_ODR_G_833Hz:
nikapov 0:cad5dab2b21d 596 *odr = 833.0f;
nikapov 0:cad5dab2b21d 597 break;
nikapov 0:cad5dab2b21d 598 case LSM6DSL_ACC_GYRO_ODR_G_1660Hz:
nikapov 0:cad5dab2b21d 599 *odr = 1660.0f;
nikapov 0:cad5dab2b21d 600 break;
nikapov 0:cad5dab2b21d 601 case LSM6DSL_ACC_GYRO_ODR_G_3330Hz:
nikapov 0:cad5dab2b21d 602 *odr = 3330.0f;
nikapov 0:cad5dab2b21d 603 break;
nikapov 0:cad5dab2b21d 604 case LSM6DSL_ACC_GYRO_ODR_G_6660Hz:
nikapov 0:cad5dab2b21d 605 *odr = 6660.0f;
nikapov 0:cad5dab2b21d 606 break;
nikapov 0:cad5dab2b21d 607 default:
nikapov 0:cad5dab2b21d 608 *odr = -1.0f;
nikapov 0:cad5dab2b21d 609 return 1;
nikapov 0:cad5dab2b21d 610 }
nikapov 0:cad5dab2b21d 611
nikapov 0:cad5dab2b21d 612 return 0;
nikapov 0:cad5dab2b21d 613 }
nikapov 0:cad5dab2b21d 614
nikapov 0:cad5dab2b21d 615 /**
nikapov 0:cad5dab2b21d 616 * @brief Set LSM6DSL Accelerometer output data rate
nikapov 0:cad5dab2b21d 617 * @param odr the output data rate to be set
nikapov 0:cad5dab2b21d 618 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 619 */
davide.aliprandi@st.com 6:671fd10a51b7 620 int LSM6DSLSensor::set_x_odr(float odr)
nikapov 0:cad5dab2b21d 621 {
Davidroid 9:038121268b07 622 if(_x_is_enabled == 1)
nikapov 0:cad5dab2b21d 623 {
davide.aliprandi@st.com 6:671fd10a51b7 624 if(set_x_odr_when_enabled(odr) == 1)
nikapov 0:cad5dab2b21d 625 {
nikapov 0:cad5dab2b21d 626 return 1;
nikapov 0:cad5dab2b21d 627 }
nikapov 0:cad5dab2b21d 628 }
nikapov 0:cad5dab2b21d 629 else
nikapov 0:cad5dab2b21d 630 {
davide.aliprandi@st.com 6:671fd10a51b7 631 if(set_x_odr_when_disabled(odr) == 1)
nikapov 0:cad5dab2b21d 632 {
nikapov 0:cad5dab2b21d 633 return 1;
nikapov 0:cad5dab2b21d 634 }
nikapov 0:cad5dab2b21d 635 }
nikapov 0:cad5dab2b21d 636
nikapov 0:cad5dab2b21d 637 return 0;
nikapov 0:cad5dab2b21d 638 }
nikapov 0:cad5dab2b21d 639
nikapov 0:cad5dab2b21d 640 /**
nikapov 0:cad5dab2b21d 641 * @brief Set LSM6DSL Accelerometer output data rate when enabled
nikapov 0:cad5dab2b21d 642 * @param odr the output data rate to be set
nikapov 0:cad5dab2b21d 643 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 644 */
davide.aliprandi@st.com 6:671fd10a51b7 645 int LSM6DSLSensor::set_x_odr_when_enabled(float odr)
nikapov 0:cad5dab2b21d 646 {
nikapov 0:cad5dab2b21d 647 LSM6DSL_ACC_GYRO_ODR_XL_t new_odr;
nikapov 0:cad5dab2b21d 648
nikapov 0:cad5dab2b21d 649 new_odr = ( odr <= 13.0f ) ? LSM6DSL_ACC_GYRO_ODR_XL_13Hz
nikapov 0:cad5dab2b21d 650 : ( odr <= 26.0f ) ? LSM6DSL_ACC_GYRO_ODR_XL_26Hz
nikapov 0:cad5dab2b21d 651 : ( odr <= 52.0f ) ? LSM6DSL_ACC_GYRO_ODR_XL_52Hz
nikapov 0:cad5dab2b21d 652 : ( odr <= 104.0f ) ? LSM6DSL_ACC_GYRO_ODR_XL_104Hz
nikapov 0:cad5dab2b21d 653 : ( odr <= 208.0f ) ? LSM6DSL_ACC_GYRO_ODR_XL_208Hz
nikapov 0:cad5dab2b21d 654 : ( odr <= 416.0f ) ? LSM6DSL_ACC_GYRO_ODR_XL_416Hz
nikapov 0:cad5dab2b21d 655 : ( odr <= 833.0f ) ? LSM6DSL_ACC_GYRO_ODR_XL_833Hz
nikapov 0:cad5dab2b21d 656 : ( odr <= 1660.0f ) ? LSM6DSL_ACC_GYRO_ODR_XL_1660Hz
nikapov 0:cad5dab2b21d 657 : ( odr <= 3330.0f ) ? LSM6DSL_ACC_GYRO_ODR_XL_3330Hz
nikapov 0:cad5dab2b21d 658 : LSM6DSL_ACC_GYRO_ODR_XL_6660Hz;
nikapov 0:cad5dab2b21d 659
nikapov 0:cad5dab2b21d 660 if ( LSM6DSL_ACC_GYRO_W_ODR_XL( (void *)this, new_odr ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 661 {
nikapov 0:cad5dab2b21d 662 return 1;
nikapov 0:cad5dab2b21d 663 }
nikapov 0:cad5dab2b21d 664
nikapov 0:cad5dab2b21d 665 return 0;
nikapov 0:cad5dab2b21d 666 }
nikapov 0:cad5dab2b21d 667
nikapov 0:cad5dab2b21d 668 /**
nikapov 0:cad5dab2b21d 669 * @brief Set LSM6DSL Accelerometer output data rate when disabled
nikapov 0:cad5dab2b21d 670 * @param odr the output data rate to be set
nikapov 0:cad5dab2b21d 671 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 672 */
davide.aliprandi@st.com 6:671fd10a51b7 673 int LSM6DSLSensor::set_x_odr_when_disabled(float odr)
nikapov 0:cad5dab2b21d 674 {
Davidroid 9:038121268b07 675 _x_last_odr = ( odr <= 13.0f ) ? 13.0f
nikapov 0:cad5dab2b21d 676 : ( odr <= 26.0f ) ? 26.0f
nikapov 0:cad5dab2b21d 677 : ( odr <= 52.0f ) ? 52.0f
nikapov 0:cad5dab2b21d 678 : ( odr <= 104.0f ) ? 104.0f
nikapov 0:cad5dab2b21d 679 : ( odr <= 208.0f ) ? 208.0f
nikapov 0:cad5dab2b21d 680 : ( odr <= 416.0f ) ? 416.0f
nikapov 0:cad5dab2b21d 681 : ( odr <= 833.0f ) ? 833.0f
nikapov 0:cad5dab2b21d 682 : ( odr <= 1660.0f ) ? 1660.0f
nikapov 0:cad5dab2b21d 683 : ( odr <= 3330.0f ) ? 3330.0f
nikapov 0:cad5dab2b21d 684 : 6660.0f;
nikapov 0:cad5dab2b21d 685
nikapov 0:cad5dab2b21d 686 return 0;
nikapov 0:cad5dab2b21d 687 }
nikapov 0:cad5dab2b21d 688
nikapov 0:cad5dab2b21d 689 /**
nikapov 0:cad5dab2b21d 690 * @brief Set LSM6DSL Gyroscope output data rate
nikapov 0:cad5dab2b21d 691 * @param odr the output data rate to be set
nikapov 0:cad5dab2b21d 692 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 693 */
davide.aliprandi@st.com 6:671fd10a51b7 694 int LSM6DSLSensor::set_g_odr(float odr)
nikapov 0:cad5dab2b21d 695 {
Davidroid 9:038121268b07 696 if(_g_is_enabled == 1)
nikapov 0:cad5dab2b21d 697 {
davide.aliprandi@st.com 6:671fd10a51b7 698 if(set_g_odr_when_enabled(odr) == 1)
nikapov 0:cad5dab2b21d 699 {
nikapov 0:cad5dab2b21d 700 return 1;
nikapov 0:cad5dab2b21d 701 }
nikapov 0:cad5dab2b21d 702 }
nikapov 0:cad5dab2b21d 703 else
nikapov 0:cad5dab2b21d 704 {
davide.aliprandi@st.com 6:671fd10a51b7 705 if(set_g_odr_when_disabled(odr) == 1)
nikapov 0:cad5dab2b21d 706 {
nikapov 0:cad5dab2b21d 707 return 1;
nikapov 0:cad5dab2b21d 708 }
nikapov 0:cad5dab2b21d 709 }
nikapov 0:cad5dab2b21d 710
nikapov 0:cad5dab2b21d 711 return 0;
nikapov 0:cad5dab2b21d 712 }
nikapov 0:cad5dab2b21d 713
nikapov 0:cad5dab2b21d 714 /**
nikapov 0:cad5dab2b21d 715 * @brief Set LSM6DSL Gyroscope output data rate when enabled
nikapov 0:cad5dab2b21d 716 * @param odr the output data rate to be set
nikapov 0:cad5dab2b21d 717 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 718 */
davide.aliprandi@st.com 6:671fd10a51b7 719 int LSM6DSLSensor::set_g_odr_when_enabled(float odr)
nikapov 0:cad5dab2b21d 720 {
nikapov 0:cad5dab2b21d 721 LSM6DSL_ACC_GYRO_ODR_G_t new_odr;
nikapov 0:cad5dab2b21d 722
nikapov 0:cad5dab2b21d 723 new_odr = ( odr <= 13.0f ) ? LSM6DSL_ACC_GYRO_ODR_G_13Hz
nikapov 0:cad5dab2b21d 724 : ( odr <= 26.0f ) ? LSM6DSL_ACC_GYRO_ODR_G_26Hz
nikapov 0:cad5dab2b21d 725 : ( odr <= 52.0f ) ? LSM6DSL_ACC_GYRO_ODR_G_52Hz
nikapov 0:cad5dab2b21d 726 : ( odr <= 104.0f ) ? LSM6DSL_ACC_GYRO_ODR_G_104Hz
nikapov 0:cad5dab2b21d 727 : ( odr <= 208.0f ) ? LSM6DSL_ACC_GYRO_ODR_G_208Hz
nikapov 0:cad5dab2b21d 728 : ( odr <= 416.0f ) ? LSM6DSL_ACC_GYRO_ODR_G_416Hz
nikapov 0:cad5dab2b21d 729 : ( odr <= 833.0f ) ? LSM6DSL_ACC_GYRO_ODR_G_833Hz
nikapov 0:cad5dab2b21d 730 : ( odr <= 1660.0f ) ? LSM6DSL_ACC_GYRO_ODR_G_1660Hz
nikapov 0:cad5dab2b21d 731 : ( odr <= 3330.0f ) ? LSM6DSL_ACC_GYRO_ODR_G_3330Hz
nikapov 0:cad5dab2b21d 732 : LSM6DSL_ACC_GYRO_ODR_G_6660Hz;
nikapov 0:cad5dab2b21d 733
nikapov 0:cad5dab2b21d 734 if ( LSM6DSL_ACC_GYRO_W_ODR_G( (void *)this, new_odr ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 735 {
nikapov 0:cad5dab2b21d 736 return 1;
nikapov 0:cad5dab2b21d 737 }
nikapov 0:cad5dab2b21d 738
nikapov 0:cad5dab2b21d 739 return 0;
nikapov 0:cad5dab2b21d 740 }
nikapov 0:cad5dab2b21d 741
nikapov 0:cad5dab2b21d 742 /**
nikapov 0:cad5dab2b21d 743 * @brief Set LSM6DSL Gyroscope output data rate when disabled
nikapov 0:cad5dab2b21d 744 * @param odr the output data rate to be set
nikapov 0:cad5dab2b21d 745 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 746 */
davide.aliprandi@st.com 6:671fd10a51b7 747 int LSM6DSLSensor::set_g_odr_when_disabled(float odr)
nikapov 0:cad5dab2b21d 748 {
Davidroid 9:038121268b07 749 _g_last_odr = ( odr <= 13.0f ) ? 13.0f
nikapov 0:cad5dab2b21d 750 : ( odr <= 26.0f ) ? 26.0f
nikapov 0:cad5dab2b21d 751 : ( odr <= 52.0f ) ? 52.0f
nikapov 0:cad5dab2b21d 752 : ( odr <= 104.0f ) ? 104.0f
nikapov 0:cad5dab2b21d 753 : ( odr <= 208.0f ) ? 208.0f
nikapov 0:cad5dab2b21d 754 : ( odr <= 416.0f ) ? 416.0f
nikapov 0:cad5dab2b21d 755 : ( odr <= 833.0f ) ? 833.0f
nikapov 0:cad5dab2b21d 756 : ( odr <= 1660.0f ) ? 1660.0f
nikapov 0:cad5dab2b21d 757 : ( odr <= 3330.0f ) ? 3330.0f
nikapov 0:cad5dab2b21d 758 : 6660.0f;
nikapov 0:cad5dab2b21d 759
nikapov 0:cad5dab2b21d 760 return 0;
nikapov 0:cad5dab2b21d 761 }
nikapov 0:cad5dab2b21d 762
nikapov 0:cad5dab2b21d 763 /**
nikapov 0:cad5dab2b21d 764 * @brief Read LSM6DSL Accelerometer full scale
nikapov 0:cad5dab2b21d 765 * @param fullScale the pointer to the full scale
nikapov 0:cad5dab2b21d 766 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 767 */
davide.aliprandi@st.com 6:671fd10a51b7 768 int LSM6DSLSensor::get_x_fs(float* fullScale)
nikapov 0:cad5dab2b21d 769 {
nikapov 0:cad5dab2b21d 770 LSM6DSL_ACC_GYRO_FS_XL_t fs_low_level;
nikapov 0:cad5dab2b21d 771
nikapov 0:cad5dab2b21d 772 if ( LSM6DSL_ACC_GYRO_R_FS_XL( (void *)this, &fs_low_level ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 773 {
nikapov 0:cad5dab2b21d 774 return 1;
nikapov 0:cad5dab2b21d 775 }
nikapov 0:cad5dab2b21d 776
nikapov 0:cad5dab2b21d 777 switch( fs_low_level )
nikapov 0:cad5dab2b21d 778 {
nikapov 0:cad5dab2b21d 779 case LSM6DSL_ACC_GYRO_FS_XL_2g:
nikapov 0:cad5dab2b21d 780 *fullScale = 2.0f;
nikapov 0:cad5dab2b21d 781 break;
nikapov 0:cad5dab2b21d 782 case LSM6DSL_ACC_GYRO_FS_XL_4g:
nikapov 0:cad5dab2b21d 783 *fullScale = 4.0f;
nikapov 0:cad5dab2b21d 784 break;
nikapov 0:cad5dab2b21d 785 case LSM6DSL_ACC_GYRO_FS_XL_8g:
nikapov 0:cad5dab2b21d 786 *fullScale = 8.0f;
nikapov 0:cad5dab2b21d 787 break;
nikapov 0:cad5dab2b21d 788 case LSM6DSL_ACC_GYRO_FS_XL_16g:
nikapov 0:cad5dab2b21d 789 *fullScale = 16.0f;
nikapov 0:cad5dab2b21d 790 break;
nikapov 0:cad5dab2b21d 791 default:
nikapov 0:cad5dab2b21d 792 *fullScale = -1.0f;
nikapov 0:cad5dab2b21d 793 return 1;
nikapov 0:cad5dab2b21d 794 }
nikapov 0:cad5dab2b21d 795
nikapov 0:cad5dab2b21d 796 return 0;
nikapov 0:cad5dab2b21d 797 }
nikapov 0:cad5dab2b21d 798
nikapov 0:cad5dab2b21d 799 /**
nikapov 0:cad5dab2b21d 800 * @brief Read LSM6DSL Gyroscope full scale
nikapov 0:cad5dab2b21d 801 * @param fullScale the pointer to the full scale
nikapov 0:cad5dab2b21d 802 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 803 */
davide.aliprandi@st.com 6:671fd10a51b7 804 int LSM6DSLSensor::get_g_fs(float* fullScale)
nikapov 0:cad5dab2b21d 805 {
nikapov 0:cad5dab2b21d 806 LSM6DSL_ACC_GYRO_FS_G_t fs_low_level;
nikapov 0:cad5dab2b21d 807 LSM6DSL_ACC_GYRO_FS_125_t fs_125;
nikapov 0:cad5dab2b21d 808
nikapov 0:cad5dab2b21d 809 if ( LSM6DSL_ACC_GYRO_R_FS_125( (void *)this, &fs_125 ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 810 {
nikapov 0:cad5dab2b21d 811 return 1;
nikapov 0:cad5dab2b21d 812 }
nikapov 0:cad5dab2b21d 813 if ( LSM6DSL_ACC_GYRO_R_FS_G( (void *)this, &fs_low_level ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 814 {
nikapov 0:cad5dab2b21d 815 return 1;
nikapov 0:cad5dab2b21d 816 }
nikapov 0:cad5dab2b21d 817
nikapov 0:cad5dab2b21d 818 if ( fs_125 == LSM6DSL_ACC_GYRO_FS_125_ENABLED )
nikapov 0:cad5dab2b21d 819 {
nikapov 0:cad5dab2b21d 820 *fullScale = 125.0f;
nikapov 0:cad5dab2b21d 821 }
nikapov 0:cad5dab2b21d 822
nikapov 0:cad5dab2b21d 823 else
nikapov 0:cad5dab2b21d 824 {
nikapov 0:cad5dab2b21d 825 switch( fs_low_level )
nikapov 0:cad5dab2b21d 826 {
nikapov 0:cad5dab2b21d 827 case LSM6DSL_ACC_GYRO_FS_G_245dps:
nikapov 0:cad5dab2b21d 828 *fullScale = 245.0f;
nikapov 0:cad5dab2b21d 829 break;
nikapov 0:cad5dab2b21d 830 case LSM6DSL_ACC_GYRO_FS_G_500dps:
nikapov 0:cad5dab2b21d 831 *fullScale = 500.0f;
nikapov 0:cad5dab2b21d 832 break;
nikapov 0:cad5dab2b21d 833 case LSM6DSL_ACC_GYRO_FS_G_1000dps:
nikapov 0:cad5dab2b21d 834 *fullScale = 1000.0f;
nikapov 0:cad5dab2b21d 835 break;
nikapov 0:cad5dab2b21d 836 case LSM6DSL_ACC_GYRO_FS_G_2000dps:
nikapov 0:cad5dab2b21d 837 *fullScale = 2000.0f;
nikapov 0:cad5dab2b21d 838 break;
nikapov 0:cad5dab2b21d 839 default:
nikapov 0:cad5dab2b21d 840 *fullScale = -1.0f;
nikapov 0:cad5dab2b21d 841 return 1;
nikapov 0:cad5dab2b21d 842 }
nikapov 0:cad5dab2b21d 843 }
nikapov 0:cad5dab2b21d 844
nikapov 0:cad5dab2b21d 845 return 0;
nikapov 0:cad5dab2b21d 846 }
nikapov 0:cad5dab2b21d 847
nikapov 0:cad5dab2b21d 848 /**
nikapov 0:cad5dab2b21d 849 * @brief Set LSM6DSL Accelerometer full scale
nikapov 0:cad5dab2b21d 850 * @param fullScale the full scale to be set
nikapov 0:cad5dab2b21d 851 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 852 */
davide.aliprandi@st.com 6:671fd10a51b7 853 int LSM6DSLSensor::set_x_fs(float fullScale)
nikapov 0:cad5dab2b21d 854 {
nikapov 0:cad5dab2b21d 855 LSM6DSL_ACC_GYRO_FS_XL_t new_fs;
nikapov 0:cad5dab2b21d 856
nikapov 0:cad5dab2b21d 857 new_fs = ( fullScale <= 2.0f ) ? LSM6DSL_ACC_GYRO_FS_XL_2g
nikapov 0:cad5dab2b21d 858 : ( fullScale <= 4.0f ) ? LSM6DSL_ACC_GYRO_FS_XL_4g
nikapov 0:cad5dab2b21d 859 : ( fullScale <= 8.0f ) ? LSM6DSL_ACC_GYRO_FS_XL_8g
nikapov 0:cad5dab2b21d 860 : LSM6DSL_ACC_GYRO_FS_XL_16g;
nikapov 0:cad5dab2b21d 861
nikapov 0:cad5dab2b21d 862 if ( LSM6DSL_ACC_GYRO_W_FS_XL( (void *)this, new_fs ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 863 {
nikapov 0:cad5dab2b21d 864 return 1;
nikapov 0:cad5dab2b21d 865 }
nikapov 0:cad5dab2b21d 866
nikapov 0:cad5dab2b21d 867 return 0;
nikapov 0:cad5dab2b21d 868 }
nikapov 0:cad5dab2b21d 869
nikapov 0:cad5dab2b21d 870 /**
nikapov 0:cad5dab2b21d 871 * @brief Set LSM6DSL Gyroscope full scale
nikapov 0:cad5dab2b21d 872 * @param fullScale the full scale to be set
nikapov 0:cad5dab2b21d 873 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 874 */
davide.aliprandi@st.com 6:671fd10a51b7 875 int LSM6DSLSensor::set_g_fs(float fullScale)
nikapov 0:cad5dab2b21d 876 {
nikapov 0:cad5dab2b21d 877 LSM6DSL_ACC_GYRO_FS_G_t new_fs;
nikapov 0:cad5dab2b21d 878
nikapov 0:cad5dab2b21d 879 if ( fullScale <= 125.0f )
nikapov 0:cad5dab2b21d 880 {
nikapov 0:cad5dab2b21d 881 if ( LSM6DSL_ACC_GYRO_W_FS_125( (void *)this, LSM6DSL_ACC_GYRO_FS_125_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 882 {
nikapov 0:cad5dab2b21d 883 return 1;
nikapov 0:cad5dab2b21d 884 }
nikapov 0:cad5dab2b21d 885 }
nikapov 0:cad5dab2b21d 886 else
nikapov 0:cad5dab2b21d 887 {
nikapov 0:cad5dab2b21d 888 new_fs = ( fullScale <= 245.0f ) ? LSM6DSL_ACC_GYRO_FS_G_245dps
nikapov 0:cad5dab2b21d 889 : ( fullScale <= 500.0f ) ? LSM6DSL_ACC_GYRO_FS_G_500dps
nikapov 0:cad5dab2b21d 890 : ( fullScale <= 1000.0f ) ? LSM6DSL_ACC_GYRO_FS_G_1000dps
nikapov 0:cad5dab2b21d 891 : LSM6DSL_ACC_GYRO_FS_G_2000dps;
nikapov 0:cad5dab2b21d 892
nikapov 0:cad5dab2b21d 893 if ( LSM6DSL_ACC_GYRO_W_FS_125( (void *)this, LSM6DSL_ACC_GYRO_FS_125_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 894 {
nikapov 0:cad5dab2b21d 895 return 1;
nikapov 0:cad5dab2b21d 896 }
nikapov 0:cad5dab2b21d 897 if ( LSM6DSL_ACC_GYRO_W_FS_G( (void *)this, new_fs ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 898 {
nikapov 0:cad5dab2b21d 899 return 1;
nikapov 0:cad5dab2b21d 900 }
nikapov 0:cad5dab2b21d 901 }
nikapov 0:cad5dab2b21d 902
nikapov 0:cad5dab2b21d 903 return 0;
nikapov 0:cad5dab2b21d 904 }
nikapov 0:cad5dab2b21d 905
nikapov 0:cad5dab2b21d 906 /**
nikapov 0:cad5dab2b21d 907 * @brief Enable free fall detection
nikapov 0:cad5dab2b21d 908 * @param pin the interrupt pin to be used
nikapov 0:cad5dab2b21d 909 * @note This function sets the LSM6DSL accelerometer ODR to 416Hz and the LSM6DSL accelerometer full scale to 2g
nikapov 0:cad5dab2b21d 910 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 911 */
Davidroid 9:038121268b07 912 int LSM6DSLSensor::enable_free_fall_detection(LSM6DSL_Interrupt_Pin_t pin)
nikapov 0:cad5dab2b21d 913 {
nikapov 0:cad5dab2b21d 914 /* Output Data Rate selection */
davide.aliprandi@st.com 6:671fd10a51b7 915 if(set_x_odr(416.0f) == 1)
nikapov 0:cad5dab2b21d 916 {
nikapov 0:cad5dab2b21d 917 return 1;
nikapov 0:cad5dab2b21d 918 }
nikapov 0:cad5dab2b21d 919
nikapov 0:cad5dab2b21d 920 /* Full scale selection */
nikapov 0:cad5dab2b21d 921 if ( LSM6DSL_ACC_GYRO_W_FS_XL( (void *)this, LSM6DSL_ACC_GYRO_FS_XL_2g ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 922 {
nikapov 0:cad5dab2b21d 923 return 1;
nikapov 0:cad5dab2b21d 924 }
nikapov 0:cad5dab2b21d 925
nikapov 0:cad5dab2b21d 926 /* FF_DUR setting */
nikapov 0:cad5dab2b21d 927 if ( LSM6DSL_ACC_GYRO_W_FF_Duration( (void *)this, 0x06 ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 928 {
nikapov 0:cad5dab2b21d 929 return 1;
nikapov 0:cad5dab2b21d 930 }
nikapov 0:cad5dab2b21d 931
nikapov 0:cad5dab2b21d 932 /* WAKE_DUR setting */
nikapov 0:cad5dab2b21d 933 if ( LSM6DSL_ACC_GYRO_W_WAKE_DUR( (void *)this, 0x00 ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 934 {
nikapov 0:cad5dab2b21d 935 return 1;
nikapov 0:cad5dab2b21d 936 }
nikapov 0:cad5dab2b21d 937
nikapov 0:cad5dab2b21d 938 /* TIMER_HR setting */
nikapov 0:cad5dab2b21d 939 if ( LSM6DSL_ACC_GYRO_W_TIMER_HR( (void *)this, LSM6DSL_ACC_GYRO_TIMER_HR_6_4ms ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 940 {
nikapov 0:cad5dab2b21d 941 return 1;
nikapov 0:cad5dab2b21d 942 }
nikapov 0:cad5dab2b21d 943
nikapov 0:cad5dab2b21d 944 /* SLEEP_DUR setting */
nikapov 0:cad5dab2b21d 945 if ( LSM6DSL_ACC_GYRO_W_SLEEP_DUR( (void *)this, 0x00 ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 946 {
nikapov 0:cad5dab2b21d 947 return 1;
nikapov 0:cad5dab2b21d 948 }
nikapov 0:cad5dab2b21d 949
nikapov 0:cad5dab2b21d 950 /* FF_THS setting */
nikapov 0:cad5dab2b21d 951 if ( LSM6DSL_ACC_GYRO_W_FF_THS( (void *)this, LSM6DSL_ACC_GYRO_FF_THS_312mg ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 952 {
nikapov 0:cad5dab2b21d 953 return 1;
nikapov 0:cad5dab2b21d 954 }
nikapov 0:cad5dab2b21d 955
nikapov 0:cad5dab2b21d 956 /* Enable basic Interrupts */
nikapov 0:cad5dab2b21d 957 if ( LSM6DSL_ACC_GYRO_W_BASIC_INT( (void *)this, LSM6DSL_ACC_GYRO_BASIC_INT_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 958 {
nikapov 0:cad5dab2b21d 959 return 1;
nikapov 0:cad5dab2b21d 960 }
nikapov 0:cad5dab2b21d 961
nikapov 0:cad5dab2b21d 962 /* Enable free fall event on either INT1 or INT2 pin */
nikapov 0:cad5dab2b21d 963 switch (pin)
nikapov 0:cad5dab2b21d 964 {
nikapov 0:cad5dab2b21d 965 case LSM6DSL_INT1_PIN:
nikapov 0:cad5dab2b21d 966 if ( LSM6DSL_ACC_GYRO_W_FFEvOnInt1( (void *)this, LSM6DSL_ACC_GYRO_INT1_FF_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 967 {
nikapov 0:cad5dab2b21d 968 return 1;
nikapov 0:cad5dab2b21d 969 }
nikapov 0:cad5dab2b21d 970 break;
nikapov 0:cad5dab2b21d 971
nikapov 0:cad5dab2b21d 972 case LSM6DSL_INT2_PIN:
nikapov 0:cad5dab2b21d 973 if ( LSM6DSL_ACC_GYRO_W_FFEvOnInt2( (void *)this, LSM6DSL_ACC_GYRO_INT2_FF_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 974 {
nikapov 0:cad5dab2b21d 975 return 1;
nikapov 0:cad5dab2b21d 976 }
nikapov 0:cad5dab2b21d 977 break;
nikapov 0:cad5dab2b21d 978
nikapov 0:cad5dab2b21d 979 default:
nikapov 0:cad5dab2b21d 980 return 1;
nikapov 0:cad5dab2b21d 981 }
nikapov 0:cad5dab2b21d 982
nikapov 0:cad5dab2b21d 983 return 0;
nikapov 0:cad5dab2b21d 984 }
nikapov 0:cad5dab2b21d 985
nikapov 0:cad5dab2b21d 986 /**
nikapov 0:cad5dab2b21d 987 * @brief Disable free fall detection
nikapov 0:cad5dab2b21d 988 * @param None
nikapov 0:cad5dab2b21d 989 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 990 */
davide.aliprandi@st.com 6:671fd10a51b7 991 int LSM6DSLSensor::disable_free_fall_detection(void)
nikapov 0:cad5dab2b21d 992 {
nikapov 0:cad5dab2b21d 993 /* Disable free fall event on INT1 pin */
nikapov 0:cad5dab2b21d 994 if ( LSM6DSL_ACC_GYRO_W_FFEvOnInt1( (void *)this, LSM6DSL_ACC_GYRO_INT1_FF_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 995 {
nikapov 0:cad5dab2b21d 996 return 1;
nikapov 0:cad5dab2b21d 997 }
nikapov 0:cad5dab2b21d 998
nikapov 0:cad5dab2b21d 999 /* Disable free fall event on INT2 pin */
nikapov 0:cad5dab2b21d 1000 if ( LSM6DSL_ACC_GYRO_W_FFEvOnInt2( (void *)this, LSM6DSL_ACC_GYRO_INT2_FF_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1001 {
nikapov 0:cad5dab2b21d 1002 return 1;
nikapov 0:cad5dab2b21d 1003 }
nikapov 0:cad5dab2b21d 1004
nikapov 0:cad5dab2b21d 1005 /* Disable basic Interrupts */
nikapov 0:cad5dab2b21d 1006 if ( LSM6DSL_ACC_GYRO_W_BASIC_INT( (void *)this, LSM6DSL_ACC_GYRO_BASIC_INT_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1007 {
nikapov 0:cad5dab2b21d 1008 return 1;
nikapov 0:cad5dab2b21d 1009 }
nikapov 0:cad5dab2b21d 1010
nikapov 0:cad5dab2b21d 1011 /* FF_DUR setting */
nikapov 0:cad5dab2b21d 1012 if ( LSM6DSL_ACC_GYRO_W_FF_Duration( (void *)this, 0x00 ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1013 {
nikapov 0:cad5dab2b21d 1014 return 1;
nikapov 0:cad5dab2b21d 1015 }
nikapov 0:cad5dab2b21d 1016
nikapov 0:cad5dab2b21d 1017 /* FF_THS setting */
nikapov 0:cad5dab2b21d 1018 if ( LSM6DSL_ACC_GYRO_W_FF_THS( (void *)this, LSM6DSL_ACC_GYRO_FF_THS_156mg ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1019 {
nikapov 0:cad5dab2b21d 1020 return 1;
nikapov 0:cad5dab2b21d 1021 }
nikapov 0:cad5dab2b21d 1022
nikapov 0:cad5dab2b21d 1023 return 0;
nikapov 0:cad5dab2b21d 1024 }
nikapov 0:cad5dab2b21d 1025
nikapov 0:cad5dab2b21d 1026 /**
nikapov 0:cad5dab2b21d 1027 * @brief Set the free fall detection threshold for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1028 * @param thr the threshold to be set
nikapov 0:cad5dab2b21d 1029 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1030 */
davide.aliprandi@st.com 6:671fd10a51b7 1031 int LSM6DSLSensor::set_free_fall_threshold(uint8_t thr)
nikapov 0:cad5dab2b21d 1032 {
nikapov 0:cad5dab2b21d 1033
nikapov 0:cad5dab2b21d 1034 if ( LSM6DSL_ACC_GYRO_W_FF_THS( (void *)this, (LSM6DSL_ACC_GYRO_FF_THS_t)thr ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1035 {
nikapov 0:cad5dab2b21d 1036 return 1;
nikapov 0:cad5dab2b21d 1037 }
nikapov 0:cad5dab2b21d 1038
nikapov 0:cad5dab2b21d 1039 return 0;
nikapov 0:cad5dab2b21d 1040 }
nikapov 0:cad5dab2b21d 1041
nikapov 0:cad5dab2b21d 1042 /**
nikapov 0:cad5dab2b21d 1043 * @brief Enable the pedometer feature for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1044 * @note This function sets the LSM6DSL accelerometer ODR to 26Hz and the LSM6DSL accelerometer full scale to 2g
nikapov 0:cad5dab2b21d 1045 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1046 */
Davidroid 9:038121268b07 1047 int LSM6DSLSensor::enable_pedometer(void)
nikapov 0:cad5dab2b21d 1048 {
nikapov 0:cad5dab2b21d 1049 /* Output Data Rate selection */
davide.aliprandi@st.com 6:671fd10a51b7 1050 if( set_x_odr(26.0f) == 1 )
nikapov 0:cad5dab2b21d 1051 {
nikapov 0:cad5dab2b21d 1052 return 1;
nikapov 0:cad5dab2b21d 1053 }
nikapov 0:cad5dab2b21d 1054
nikapov 0:cad5dab2b21d 1055 /* Full scale selection. */
davide.aliprandi@st.com 6:671fd10a51b7 1056 if( set_x_fs(2.0f) == 1 )
nikapov 0:cad5dab2b21d 1057 {
nikapov 0:cad5dab2b21d 1058 return 1;
nikapov 0:cad5dab2b21d 1059 }
nikapov 0:cad5dab2b21d 1060
nikapov 0:cad5dab2b21d 1061 /* Set pedometer threshold. */
davide.aliprandi@st.com 6:671fd10a51b7 1062 if ( set_pedometer_threshold(LSM6DSL_PEDOMETER_THRESHOLD_MID_HIGH) == 1 )
nikapov 0:cad5dab2b21d 1063 {
nikapov 0:cad5dab2b21d 1064 return 1;
nikapov 0:cad5dab2b21d 1065 }
nikapov 0:cad5dab2b21d 1066
nikapov 0:cad5dab2b21d 1067 /* Enable embedded functionalities. */
nikapov 0:cad5dab2b21d 1068 if ( LSM6DSL_ACC_GYRO_W_FUNC_EN( (void *)this, LSM6DSL_ACC_GYRO_FUNC_EN_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1069 {
nikapov 0:cad5dab2b21d 1070 return 1;
nikapov 0:cad5dab2b21d 1071 }
nikapov 0:cad5dab2b21d 1072
nikapov 0:cad5dab2b21d 1073 /* Enable pedometer algorithm. */
nikapov 0:cad5dab2b21d 1074 if ( LSM6DSL_ACC_GYRO_W_PEDO( (void *)this, LSM6DSL_ACC_GYRO_PEDO_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1075 {
nikapov 0:cad5dab2b21d 1076 return 1;
nikapov 0:cad5dab2b21d 1077 }
nikapov 0:cad5dab2b21d 1078
nikapov 0:cad5dab2b21d 1079 /* Enable pedometer on INT1. */
nikapov 0:cad5dab2b21d 1080 if ( LSM6DSL_ACC_GYRO_W_STEP_DET_on_INT1( (void *)this, LSM6DSL_ACC_GYRO_INT1_PEDO_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1081 {
nikapov 0:cad5dab2b21d 1082 return 1;
nikapov 0:cad5dab2b21d 1083 }
nikapov 0:cad5dab2b21d 1084
nikapov 0:cad5dab2b21d 1085 return 0;
nikapov 0:cad5dab2b21d 1086 }
nikapov 0:cad5dab2b21d 1087
nikapov 0:cad5dab2b21d 1088 /**
nikapov 0:cad5dab2b21d 1089 * @brief Disable the pedometer feature for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1090 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1091 */
davide.aliprandi@st.com 6:671fd10a51b7 1092 int LSM6DSLSensor::disable_pedometer(void)
nikapov 0:cad5dab2b21d 1093 {
nikapov 0:cad5dab2b21d 1094 /* Disable pedometer on INT1. */
nikapov 0:cad5dab2b21d 1095 if ( LSM6DSL_ACC_GYRO_W_STEP_DET_on_INT1( (void *)this, LSM6DSL_ACC_GYRO_INT1_PEDO_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1096 {
nikapov 0:cad5dab2b21d 1097 return 1;
nikapov 0:cad5dab2b21d 1098 }
nikapov 0:cad5dab2b21d 1099
nikapov 0:cad5dab2b21d 1100 /* Disable pedometer algorithm. */
nikapov 0:cad5dab2b21d 1101 if ( LSM6DSL_ACC_GYRO_W_PEDO( (void *)this, LSM6DSL_ACC_GYRO_PEDO_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1102 {
nikapov 0:cad5dab2b21d 1103 return 1;
nikapov 0:cad5dab2b21d 1104 }
nikapov 0:cad5dab2b21d 1105
nikapov 0:cad5dab2b21d 1106 /* Disable embedded functionalities. */
nikapov 0:cad5dab2b21d 1107 if ( LSM6DSL_ACC_GYRO_W_FUNC_EN( (void *)this, LSM6DSL_ACC_GYRO_FUNC_EN_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1108 {
nikapov 0:cad5dab2b21d 1109 return 1;
nikapov 0:cad5dab2b21d 1110 }
nikapov 0:cad5dab2b21d 1111
nikapov 0:cad5dab2b21d 1112 /* Reset pedometer threshold. */
davide.aliprandi@st.com 6:671fd10a51b7 1113 if ( set_pedometer_threshold(0x0) == 1 )
nikapov 0:cad5dab2b21d 1114 {
nikapov 0:cad5dab2b21d 1115 return 1;
nikapov 0:cad5dab2b21d 1116 }
nikapov 0:cad5dab2b21d 1117
nikapov 0:cad5dab2b21d 1118 return 0;
nikapov 0:cad5dab2b21d 1119 }
nikapov 0:cad5dab2b21d 1120
nikapov 0:cad5dab2b21d 1121 /**
nikapov 0:cad5dab2b21d 1122 * @brief Get the step counter for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1123 * @param step_count the pointer to the step counter
nikapov 0:cad5dab2b21d 1124 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1125 */
davide.aliprandi@st.com 6:671fd10a51b7 1126 int LSM6DSLSensor::get_step_counter(uint16_t *step_count)
nikapov 0:cad5dab2b21d 1127 {
nikapov 0:cad5dab2b21d 1128 if ( LSM6DSL_ACC_GYRO_Get_GetStepCounter( (void *)this, ( uint8_t* )step_count ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1129 {
nikapov 0:cad5dab2b21d 1130 return 1;
nikapov 0:cad5dab2b21d 1131 }
nikapov 0:cad5dab2b21d 1132
nikapov 0:cad5dab2b21d 1133 return 0;
nikapov 0:cad5dab2b21d 1134 }
nikapov 0:cad5dab2b21d 1135
nikapov 0:cad5dab2b21d 1136 /**
nikapov 0:cad5dab2b21d 1137 * @brief Reset of the step counter for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1138 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1139 */
davide.aliprandi@st.com 6:671fd10a51b7 1140 int LSM6DSLSensor::reset_step_counter(void)
nikapov 0:cad5dab2b21d 1141 {
nikapov 0:cad5dab2b21d 1142 if ( LSM6DSL_ACC_GYRO_W_PedoStepReset( (void *)this, LSM6DSL_ACC_GYRO_PEDO_RST_STEP_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1143 {
nikapov 0:cad5dab2b21d 1144 return 1;
nikapov 0:cad5dab2b21d 1145 }
nikapov 0:cad5dab2b21d 1146
nikapov 0:cad5dab2b21d 1147 wait_ms(10);
nikapov 0:cad5dab2b21d 1148
nikapov 0:cad5dab2b21d 1149 if ( LSM6DSL_ACC_GYRO_W_PedoStepReset( (void *)this, LSM6DSL_ACC_GYRO_PEDO_RST_STEP_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1150 {
nikapov 0:cad5dab2b21d 1151 return 1;
nikapov 0:cad5dab2b21d 1152 }
nikapov 0:cad5dab2b21d 1153
nikapov 0:cad5dab2b21d 1154 return 0;
nikapov 0:cad5dab2b21d 1155 }
nikapov 0:cad5dab2b21d 1156
nikapov 0:cad5dab2b21d 1157 /**
nikapov 0:cad5dab2b21d 1158 * @brief Set the pedometer threshold for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1159 * @param thr the threshold to be set
nikapov 0:cad5dab2b21d 1160 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1161 */
davide.aliprandi@st.com 6:671fd10a51b7 1162 int LSM6DSLSensor::set_pedometer_threshold(uint8_t thr)
nikapov 0:cad5dab2b21d 1163 {
nikapov 0:cad5dab2b21d 1164 if ( LSM6DSL_ACC_GYRO_W_PedoThreshold( (void *)this, thr ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1165 {
nikapov 0:cad5dab2b21d 1166 return 1;
nikapov 0:cad5dab2b21d 1167 }
nikapov 0:cad5dab2b21d 1168
nikapov 0:cad5dab2b21d 1169 return 0;
nikapov 0:cad5dab2b21d 1170 }
nikapov 0:cad5dab2b21d 1171
nikapov 0:cad5dab2b21d 1172 /**
nikapov 0:cad5dab2b21d 1173 * @brief Enable the tilt detection for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1174 * @param pin the interrupt pin to be used
nikapov 0:cad5dab2b21d 1175 * @note This function sets the LSM6DSL accelerometer ODR to 26Hz and the LSM6DSL accelerometer full scale to 2g
nikapov 0:cad5dab2b21d 1176 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1177 */
Davidroid 9:038121268b07 1178 int LSM6DSLSensor::enable_tilt_detection(LSM6DSL_Interrupt_Pin_t pin)
nikapov 0:cad5dab2b21d 1179 {
nikapov 0:cad5dab2b21d 1180 /* Output Data Rate selection */
davide.aliprandi@st.com 6:671fd10a51b7 1181 if( set_x_odr(26.0f) == 1 )
nikapov 0:cad5dab2b21d 1182 {
nikapov 0:cad5dab2b21d 1183 return 1;
nikapov 0:cad5dab2b21d 1184 }
nikapov 0:cad5dab2b21d 1185
nikapov 0:cad5dab2b21d 1186 /* Full scale selection. */
davide.aliprandi@st.com 6:671fd10a51b7 1187 if( set_x_fs(2.0f) == 1 )
nikapov 0:cad5dab2b21d 1188 {
nikapov 0:cad5dab2b21d 1189 return 1;
nikapov 0:cad5dab2b21d 1190 }
nikapov 0:cad5dab2b21d 1191
nikapov 0:cad5dab2b21d 1192 /* Enable embedded functionalities */
nikapov 0:cad5dab2b21d 1193 if ( LSM6DSL_ACC_GYRO_W_FUNC_EN( (void *)this, LSM6DSL_ACC_GYRO_FUNC_EN_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1194 {
nikapov 0:cad5dab2b21d 1195 return 1;
nikapov 0:cad5dab2b21d 1196 }
nikapov 0:cad5dab2b21d 1197
nikapov 0:cad5dab2b21d 1198 /* Enable tilt calculation. */
nikapov 0:cad5dab2b21d 1199 if ( LSM6DSL_ACC_GYRO_W_TILT( (void *)this, LSM6DSL_ACC_GYRO_TILT_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1200 {
nikapov 0:cad5dab2b21d 1201 return 1;
nikapov 0:cad5dab2b21d 1202 }
nikapov 0:cad5dab2b21d 1203
nikapov 0:cad5dab2b21d 1204 /* Enable tilt detection on either INT1 or INT2 pin */
nikapov 0:cad5dab2b21d 1205 switch (pin)
nikapov 0:cad5dab2b21d 1206 {
nikapov 0:cad5dab2b21d 1207 case LSM6DSL_INT1_PIN:
nikapov 0:cad5dab2b21d 1208 if ( LSM6DSL_ACC_GYRO_W_TiltEvOnInt1( (void *)this, LSM6DSL_ACC_GYRO_INT1_TILT_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1209 {
nikapov 0:cad5dab2b21d 1210 return 1;
nikapov 0:cad5dab2b21d 1211 }
nikapov 0:cad5dab2b21d 1212 break;
nikapov 0:cad5dab2b21d 1213
nikapov 0:cad5dab2b21d 1214 case LSM6DSL_INT2_PIN:
nikapov 0:cad5dab2b21d 1215 if ( LSM6DSL_ACC_GYRO_W_TiltEvOnInt2( (void *)this, LSM6DSL_ACC_GYRO_INT2_TILT_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1216 {
nikapov 0:cad5dab2b21d 1217 return 1;
nikapov 0:cad5dab2b21d 1218 }
nikapov 0:cad5dab2b21d 1219 break;
nikapov 0:cad5dab2b21d 1220
nikapov 0:cad5dab2b21d 1221 default:
nikapov 0:cad5dab2b21d 1222 return 1;
nikapov 0:cad5dab2b21d 1223 }
nikapov 0:cad5dab2b21d 1224
nikapov 0:cad5dab2b21d 1225 return 0;
nikapov 0:cad5dab2b21d 1226 }
nikapov 0:cad5dab2b21d 1227
nikapov 0:cad5dab2b21d 1228 /**
nikapov 0:cad5dab2b21d 1229 * @brief Disable the tilt detection for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1230 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1231 */
davide.aliprandi@st.com 6:671fd10a51b7 1232 int LSM6DSLSensor::disable_tilt_detection(void)
nikapov 0:cad5dab2b21d 1233 {
nikapov 0:cad5dab2b21d 1234 /* Disable tilt event on INT1. */
nikapov 0:cad5dab2b21d 1235 if ( LSM6DSL_ACC_GYRO_W_TiltEvOnInt1( (void *)this, LSM6DSL_ACC_GYRO_INT1_TILT_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1236 {
nikapov 0:cad5dab2b21d 1237 return 1;
nikapov 0:cad5dab2b21d 1238 }
nikapov 0:cad5dab2b21d 1239
nikapov 0:cad5dab2b21d 1240 /* Disable tilt event on INT2. */
nikapov 0:cad5dab2b21d 1241 if ( LSM6DSL_ACC_GYRO_W_TiltEvOnInt2( (void *)this, LSM6DSL_ACC_GYRO_INT2_TILT_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1242 {
nikapov 0:cad5dab2b21d 1243 return 1;
nikapov 0:cad5dab2b21d 1244 }
nikapov 0:cad5dab2b21d 1245
nikapov 0:cad5dab2b21d 1246 /* Disable tilt calculation. */
nikapov 0:cad5dab2b21d 1247 if ( LSM6DSL_ACC_GYRO_W_TILT( (void *)this, LSM6DSL_ACC_GYRO_TILT_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1248 {
nikapov 0:cad5dab2b21d 1249 return 1;
nikapov 0:cad5dab2b21d 1250 }
nikapov 0:cad5dab2b21d 1251
nikapov 0:cad5dab2b21d 1252 /* Disable embedded functionalities */
nikapov 0:cad5dab2b21d 1253 if ( LSM6DSL_ACC_GYRO_W_FUNC_EN( (void *)this, LSM6DSL_ACC_GYRO_FUNC_EN_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1254 {
nikapov 0:cad5dab2b21d 1255 return 1;
nikapov 0:cad5dab2b21d 1256 }
nikapov 0:cad5dab2b21d 1257
nikapov 0:cad5dab2b21d 1258 return 0;
nikapov 0:cad5dab2b21d 1259 }
nikapov 0:cad5dab2b21d 1260
nikapov 0:cad5dab2b21d 1261 /**
nikapov 0:cad5dab2b21d 1262 * @brief Enable the wake up detection for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1263 * @param pin the interrupt pin to be used
nikapov 0:cad5dab2b21d 1264 * @note This function sets the LSM6DSL accelerometer ODR to 416Hz and the LSM6DSL accelerometer full scale to 2g
nikapov 0:cad5dab2b21d 1265 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1266 */
Davidroid 9:038121268b07 1267 int LSM6DSLSensor::enable_wake_up_detection(LSM6DSL_Interrupt_Pin_t pin)
nikapov 0:cad5dab2b21d 1268 {
nikapov 0:cad5dab2b21d 1269 /* Output Data Rate selection */
davide.aliprandi@st.com 6:671fd10a51b7 1270 if( set_x_odr(416.0f) == 1 )
nikapov 0:cad5dab2b21d 1271 {
nikapov 0:cad5dab2b21d 1272 return 1;
nikapov 0:cad5dab2b21d 1273 }
nikapov 0:cad5dab2b21d 1274
nikapov 0:cad5dab2b21d 1275 /* Full scale selection. */
davide.aliprandi@st.com 6:671fd10a51b7 1276 if( set_x_fs(2.0f) == 1 )
nikapov 0:cad5dab2b21d 1277 {
nikapov 0:cad5dab2b21d 1278 return 1;
nikapov 0:cad5dab2b21d 1279 }
nikapov 0:cad5dab2b21d 1280
nikapov 0:cad5dab2b21d 1281 /* WAKE_DUR setting */
nikapov 0:cad5dab2b21d 1282 if ( LSM6DSL_ACC_GYRO_W_WAKE_DUR( (void *)this, 0x00 ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1283 {
nikapov 0:cad5dab2b21d 1284 return 1;
nikapov 0:cad5dab2b21d 1285 }
nikapov 0:cad5dab2b21d 1286
nikapov 0:cad5dab2b21d 1287 /* Set wake up threshold. */
nikapov 0:cad5dab2b21d 1288 if ( LSM6DSL_ACC_GYRO_W_WK_THS( (void *)this, 0x02 ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1289 {
nikapov 0:cad5dab2b21d 1290 return 1;
nikapov 0:cad5dab2b21d 1291 }
nikapov 0:cad5dab2b21d 1292
nikapov 0:cad5dab2b21d 1293 /* Enable basic Interrupts */
nikapov 0:cad5dab2b21d 1294 if ( LSM6DSL_ACC_GYRO_W_BASIC_INT( (void *)this, LSM6DSL_ACC_GYRO_BASIC_INT_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1295 {
nikapov 0:cad5dab2b21d 1296 return 1;
nikapov 0:cad5dab2b21d 1297 }
nikapov 0:cad5dab2b21d 1298
nikapov 0:cad5dab2b21d 1299 /* Enable wake up detection on either INT1 or INT2 pin */
nikapov 0:cad5dab2b21d 1300 switch (pin)
nikapov 0:cad5dab2b21d 1301 {
nikapov 0:cad5dab2b21d 1302 case LSM6DSL_INT1_PIN:
nikapov 0:cad5dab2b21d 1303 if ( LSM6DSL_ACC_GYRO_W_WUEvOnInt1( (void *)this, LSM6DSL_ACC_GYRO_INT1_WU_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1304 {
nikapov 0:cad5dab2b21d 1305 return 1;
nikapov 0:cad5dab2b21d 1306 }
nikapov 0:cad5dab2b21d 1307 break;
nikapov 0:cad5dab2b21d 1308
nikapov 0:cad5dab2b21d 1309 case LSM6DSL_INT2_PIN:
nikapov 0:cad5dab2b21d 1310 if ( LSM6DSL_ACC_GYRO_W_WUEvOnInt2( (void *)this, LSM6DSL_ACC_GYRO_INT2_WU_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1311 {
nikapov 0:cad5dab2b21d 1312 return 1;
nikapov 0:cad5dab2b21d 1313 }
nikapov 0:cad5dab2b21d 1314 break;
nikapov 0:cad5dab2b21d 1315
nikapov 0:cad5dab2b21d 1316 default:
nikapov 0:cad5dab2b21d 1317 return 1;
nikapov 0:cad5dab2b21d 1318 }
nikapov 0:cad5dab2b21d 1319
nikapov 0:cad5dab2b21d 1320 return 0;
nikapov 0:cad5dab2b21d 1321 }
nikapov 0:cad5dab2b21d 1322
nikapov 0:cad5dab2b21d 1323 /**
nikapov 0:cad5dab2b21d 1324 * @brief Disable the wake up detection for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1325 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1326 */
davide.aliprandi@st.com 6:671fd10a51b7 1327 int LSM6DSLSensor::disable_wake_up_detection(void)
nikapov 0:cad5dab2b21d 1328 {
nikapov 0:cad5dab2b21d 1329 /* Disable wake up event on INT1 */
nikapov 0:cad5dab2b21d 1330 if ( LSM6DSL_ACC_GYRO_W_WUEvOnInt1( (void *)this, LSM6DSL_ACC_GYRO_INT1_WU_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1331 {
nikapov 0:cad5dab2b21d 1332 return 1;
nikapov 0:cad5dab2b21d 1333 }
nikapov 0:cad5dab2b21d 1334
nikapov 0:cad5dab2b21d 1335 /* Disable wake up event on INT2 */
nikapov 0:cad5dab2b21d 1336 if ( LSM6DSL_ACC_GYRO_W_WUEvOnInt2( (void *)this, LSM6DSL_ACC_GYRO_INT2_WU_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1337 {
nikapov 0:cad5dab2b21d 1338 return 1;
nikapov 0:cad5dab2b21d 1339 }
nikapov 0:cad5dab2b21d 1340
nikapov 0:cad5dab2b21d 1341 /* Disable basic Interrupts */
nikapov 0:cad5dab2b21d 1342 if ( LSM6DSL_ACC_GYRO_W_BASIC_INT( (void *)this, LSM6DSL_ACC_GYRO_BASIC_INT_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1343 {
nikapov 0:cad5dab2b21d 1344 return 1;
nikapov 0:cad5dab2b21d 1345 }
nikapov 0:cad5dab2b21d 1346
nikapov 0:cad5dab2b21d 1347 /* WU_DUR setting */
nikapov 0:cad5dab2b21d 1348 if ( LSM6DSL_ACC_GYRO_W_WAKE_DUR( (void *)this, 0x00 ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1349 {
nikapov 0:cad5dab2b21d 1350 return 1;
nikapov 0:cad5dab2b21d 1351 }
nikapov 0:cad5dab2b21d 1352
nikapov 0:cad5dab2b21d 1353 /* WU_THS setting */
nikapov 0:cad5dab2b21d 1354 if ( LSM6DSL_ACC_GYRO_W_WK_THS( (void *)this, 0x00 ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1355 {
nikapov 0:cad5dab2b21d 1356 return 1;
nikapov 0:cad5dab2b21d 1357 }
nikapov 0:cad5dab2b21d 1358
nikapov 0:cad5dab2b21d 1359 return 0;
nikapov 0:cad5dab2b21d 1360 }
nikapov 0:cad5dab2b21d 1361
nikapov 0:cad5dab2b21d 1362 /**
nikapov 0:cad5dab2b21d 1363 * @brief Set the wake up threshold for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1364 * @param thr the threshold to be set
nikapov 0:cad5dab2b21d 1365 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1366 */
davide.aliprandi@st.com 6:671fd10a51b7 1367 int LSM6DSLSensor::set_wake_up_threshold(uint8_t thr)
nikapov 0:cad5dab2b21d 1368 {
nikapov 0:cad5dab2b21d 1369 if ( LSM6DSL_ACC_GYRO_W_WK_THS( (void *)this, thr ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1370 {
nikapov 0:cad5dab2b21d 1371 return 1;
nikapov 0:cad5dab2b21d 1372 }
nikapov 0:cad5dab2b21d 1373
nikapov 0:cad5dab2b21d 1374 return 0;
nikapov 0:cad5dab2b21d 1375 }
nikapov 0:cad5dab2b21d 1376
nikapov 0:cad5dab2b21d 1377 /**
nikapov 0:cad5dab2b21d 1378 * @brief Enable the single tap detection for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1379 * @param pin the interrupt pin to be used
nikapov 0:cad5dab2b21d 1380 * @note This function sets the LSM6DSL accelerometer ODR to 416Hz and the LSM6DSL accelerometer full scale to 2g
nikapov 0:cad5dab2b21d 1381 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1382 */
Davidroid 9:038121268b07 1383 int LSM6DSLSensor::enable_single_tap_detection(LSM6DSL_Interrupt_Pin_t pin)
nikapov 0:cad5dab2b21d 1384 {
nikapov 0:cad5dab2b21d 1385 /* Output Data Rate selection */
davide.aliprandi@st.com 6:671fd10a51b7 1386 if( set_x_odr(416.0f) == 1 )
nikapov 0:cad5dab2b21d 1387 {
nikapov 0:cad5dab2b21d 1388 return 1;
nikapov 0:cad5dab2b21d 1389 }
nikapov 0:cad5dab2b21d 1390
nikapov 0:cad5dab2b21d 1391 /* Full scale selection. */
davide.aliprandi@st.com 6:671fd10a51b7 1392 if( set_x_fs(2.0f) == 1 )
nikapov 0:cad5dab2b21d 1393 {
nikapov 0:cad5dab2b21d 1394 return 1;
nikapov 0:cad5dab2b21d 1395 }
nikapov 0:cad5dab2b21d 1396
nikapov 0:cad5dab2b21d 1397 /* Enable X direction in tap recognition. */
nikapov 0:cad5dab2b21d 1398 if ( LSM6DSL_ACC_GYRO_W_TAP_X_EN( (void *)this, LSM6DSL_ACC_GYRO_TAP_X_EN_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1399 {
nikapov 0:cad5dab2b21d 1400 return 1;
nikapov 0:cad5dab2b21d 1401 }
nikapov 0:cad5dab2b21d 1402
nikapov 0:cad5dab2b21d 1403 /* Enable Y direction in tap recognition. */
nikapov 0:cad5dab2b21d 1404 if ( LSM6DSL_ACC_GYRO_W_TAP_Y_EN( (void *)this, LSM6DSL_ACC_GYRO_TAP_Y_EN_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1405 {
nikapov 0:cad5dab2b21d 1406 return 1;
nikapov 0:cad5dab2b21d 1407 }
nikapov 0:cad5dab2b21d 1408
nikapov 0:cad5dab2b21d 1409 /* Enable Z direction in tap recognition. */
nikapov 0:cad5dab2b21d 1410 if ( LSM6DSL_ACC_GYRO_W_TAP_Z_EN( (void *)this, LSM6DSL_ACC_GYRO_TAP_Z_EN_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1411 {
nikapov 0:cad5dab2b21d 1412 return 1;
nikapov 0:cad5dab2b21d 1413 }
nikapov 0:cad5dab2b21d 1414
nikapov 0:cad5dab2b21d 1415 /* Set tap threshold. */
davide.aliprandi@st.com 6:671fd10a51b7 1416 if ( set_tap_threshold( LSM6DSL_TAP_THRESHOLD_MID_LOW ) == 1 )
nikapov 0:cad5dab2b21d 1417 {
nikapov 0:cad5dab2b21d 1418 return 1;
nikapov 0:cad5dab2b21d 1419 }
nikapov 0:cad5dab2b21d 1420
nikapov 0:cad5dab2b21d 1421 /* Set tap shock time window. */
davide.aliprandi@st.com 6:671fd10a51b7 1422 if ( set_tap_shock_time( LSM6DSL_TAP_SHOCK_TIME_MID_HIGH ) == 1 )
nikapov 0:cad5dab2b21d 1423 {
nikapov 0:cad5dab2b21d 1424 return 1;
nikapov 0:cad5dab2b21d 1425 }
nikapov 0:cad5dab2b21d 1426
nikapov 0:cad5dab2b21d 1427 /* Set tap quiet time window. */
davide.aliprandi@st.com 6:671fd10a51b7 1428 if ( set_tap_quiet_time( LSM6DSL_TAP_QUIET_TIME_MID_LOW ) == 1 )
nikapov 0:cad5dab2b21d 1429 {
nikapov 0:cad5dab2b21d 1430 return 1;
nikapov 0:cad5dab2b21d 1431 }
nikapov 0:cad5dab2b21d 1432
nikapov 0:cad5dab2b21d 1433 /* _NOTE_: Tap duration time window - don't care for single tap. */
nikapov 0:cad5dab2b21d 1434
nikapov 0:cad5dab2b21d 1435 /* _NOTE_: Single/Double Tap event - don't care of this flag for single tap. */
nikapov 0:cad5dab2b21d 1436
nikapov 0:cad5dab2b21d 1437 /* Enable basic Interrupts */
nikapov 0:cad5dab2b21d 1438 if ( LSM6DSL_ACC_GYRO_W_BASIC_INT( (void *)this, LSM6DSL_ACC_GYRO_BASIC_INT_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1439 {
nikapov 0:cad5dab2b21d 1440 return 1;
nikapov 0:cad5dab2b21d 1441 }
nikapov 0:cad5dab2b21d 1442
nikapov 0:cad5dab2b21d 1443 /* Enable single tap on either INT1 or INT2 pin */
nikapov 0:cad5dab2b21d 1444 switch (pin)
nikapov 0:cad5dab2b21d 1445 {
nikapov 0:cad5dab2b21d 1446 case LSM6DSL_INT1_PIN:
nikapov 0:cad5dab2b21d 1447 if ( LSM6DSL_ACC_GYRO_W_SingleTapOnInt1( (void *)this, LSM6DSL_ACC_GYRO_INT1_SINGLE_TAP_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1448 {
nikapov 0:cad5dab2b21d 1449 return 1;
nikapov 0:cad5dab2b21d 1450 }
nikapov 0:cad5dab2b21d 1451 break;
nikapov 0:cad5dab2b21d 1452
nikapov 0:cad5dab2b21d 1453 case LSM6DSL_INT2_PIN:
nikapov 0:cad5dab2b21d 1454 if ( LSM6DSL_ACC_GYRO_W_SingleTapOnInt2( (void *)this, LSM6DSL_ACC_GYRO_INT2_SINGLE_TAP_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1455 {
nikapov 0:cad5dab2b21d 1456 return 1;
nikapov 0:cad5dab2b21d 1457 }
nikapov 0:cad5dab2b21d 1458 break;
nikapov 0:cad5dab2b21d 1459
nikapov 0:cad5dab2b21d 1460 default:
nikapov 0:cad5dab2b21d 1461 return 1;
nikapov 0:cad5dab2b21d 1462 }
nikapov 0:cad5dab2b21d 1463
nikapov 0:cad5dab2b21d 1464 return 0;
nikapov 0:cad5dab2b21d 1465 }
nikapov 0:cad5dab2b21d 1466
nikapov 0:cad5dab2b21d 1467 /**
nikapov 0:cad5dab2b21d 1468 * @brief Disable the single tap detection for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1469 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1470 */
davide.aliprandi@st.com 6:671fd10a51b7 1471 int LSM6DSLSensor::disable_single_tap_detection(void)
nikapov 0:cad5dab2b21d 1472 {
nikapov 0:cad5dab2b21d 1473 /* Disable single tap interrupt on INT1 pin. */
nikapov 0:cad5dab2b21d 1474 if ( LSM6DSL_ACC_GYRO_W_SingleTapOnInt1( (void *)this, LSM6DSL_ACC_GYRO_INT1_SINGLE_TAP_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1475 {
nikapov 0:cad5dab2b21d 1476 return 1;
nikapov 0:cad5dab2b21d 1477 }
nikapov 0:cad5dab2b21d 1478
nikapov 0:cad5dab2b21d 1479 /* Disable single tap interrupt on INT2 pin. */
nikapov 0:cad5dab2b21d 1480 if ( LSM6DSL_ACC_GYRO_W_SingleTapOnInt2( (void *)this, LSM6DSL_ACC_GYRO_INT2_SINGLE_TAP_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1481 {
nikapov 0:cad5dab2b21d 1482 return 1;
nikapov 0:cad5dab2b21d 1483 }
nikapov 0:cad5dab2b21d 1484
nikapov 0:cad5dab2b21d 1485 /* Disable basic Interrupts */
nikapov 0:cad5dab2b21d 1486 if ( LSM6DSL_ACC_GYRO_W_BASIC_INT( (void *)this, LSM6DSL_ACC_GYRO_BASIC_INT_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1487 {
nikapov 0:cad5dab2b21d 1488 return 1;
nikapov 0:cad5dab2b21d 1489 }
nikapov 0:cad5dab2b21d 1490
nikapov 0:cad5dab2b21d 1491 /* Reset tap threshold. */
davide.aliprandi@st.com 6:671fd10a51b7 1492 if ( set_tap_threshold( 0x0 ) == 1 )
nikapov 0:cad5dab2b21d 1493 {
nikapov 0:cad5dab2b21d 1494 return 1;
nikapov 0:cad5dab2b21d 1495 }
nikapov 0:cad5dab2b21d 1496
nikapov 0:cad5dab2b21d 1497 /* Reset tap shock time window. */
davide.aliprandi@st.com 6:671fd10a51b7 1498 if ( set_tap_shock_time( 0x0 ) == 1 )
nikapov 0:cad5dab2b21d 1499 {
nikapov 0:cad5dab2b21d 1500 return 1;
nikapov 0:cad5dab2b21d 1501 }
nikapov 0:cad5dab2b21d 1502
nikapov 0:cad5dab2b21d 1503 /* Reset tap quiet time window. */
davide.aliprandi@st.com 6:671fd10a51b7 1504 if ( set_tap_quiet_time( 0x0 ) == 1 )
nikapov 0:cad5dab2b21d 1505 {
nikapov 0:cad5dab2b21d 1506 return 1;
nikapov 0:cad5dab2b21d 1507 }
nikapov 0:cad5dab2b21d 1508
nikapov 0:cad5dab2b21d 1509 /* _NOTE_: Tap duration time window - don't care for single tap. */
nikapov 0:cad5dab2b21d 1510
nikapov 0:cad5dab2b21d 1511 /* _NOTE_: Single/Double Tap event - don't care of this flag for single tap. */
nikapov 0:cad5dab2b21d 1512
nikapov 0:cad5dab2b21d 1513 /* Disable Z direction in tap recognition. */
nikapov 0:cad5dab2b21d 1514 if ( LSM6DSL_ACC_GYRO_W_TAP_Z_EN( (void *)this, LSM6DSL_ACC_GYRO_TAP_Z_EN_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1515 {
nikapov 0:cad5dab2b21d 1516 return 1;
nikapov 0:cad5dab2b21d 1517 }
nikapov 0:cad5dab2b21d 1518
nikapov 0:cad5dab2b21d 1519 /* Disable Y direction in tap recognition. */
nikapov 0:cad5dab2b21d 1520 if ( LSM6DSL_ACC_GYRO_W_TAP_Y_EN( (void *)this, LSM6DSL_ACC_GYRO_TAP_Y_EN_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1521 {
nikapov 0:cad5dab2b21d 1522 return 1;
nikapov 0:cad5dab2b21d 1523 }
nikapov 0:cad5dab2b21d 1524
nikapov 0:cad5dab2b21d 1525 /* Disable X direction in tap recognition. */
nikapov 0:cad5dab2b21d 1526 if ( LSM6DSL_ACC_GYRO_W_TAP_X_EN( (void *)this, LSM6DSL_ACC_GYRO_TAP_X_EN_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1527 {
nikapov 0:cad5dab2b21d 1528 return 1;
nikapov 0:cad5dab2b21d 1529 }
nikapov 0:cad5dab2b21d 1530
nikapov 0:cad5dab2b21d 1531 return 0;
nikapov 0:cad5dab2b21d 1532 }
nikapov 0:cad5dab2b21d 1533
nikapov 0:cad5dab2b21d 1534 /**
nikapov 0:cad5dab2b21d 1535 * @brief Enable the double tap detection for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1536 * @param pin the interrupt pin to be used
nikapov 0:cad5dab2b21d 1537 * @note This function sets the LSM6DSL accelerometer ODR to 416Hz and the LSM6DSL accelerometer full scale to 2g
nikapov 0:cad5dab2b21d 1538 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1539 */
Davidroid 9:038121268b07 1540 int LSM6DSLSensor::enable_double_tap_detection(LSM6DSL_Interrupt_Pin_t pin)
nikapov 0:cad5dab2b21d 1541 {
nikapov 0:cad5dab2b21d 1542 /* Output Data Rate selection */
davide.aliprandi@st.com 6:671fd10a51b7 1543 if( set_x_odr(416.0f) == 1 )
nikapov 0:cad5dab2b21d 1544 {
nikapov 0:cad5dab2b21d 1545 return 1;
nikapov 0:cad5dab2b21d 1546 }
nikapov 0:cad5dab2b21d 1547
nikapov 0:cad5dab2b21d 1548 /* Full scale selection. */
davide.aliprandi@st.com 6:671fd10a51b7 1549 if( set_x_fs(2.0f) == 1 )
nikapov 0:cad5dab2b21d 1550 {
nikapov 0:cad5dab2b21d 1551 return 1;
nikapov 0:cad5dab2b21d 1552 }
nikapov 0:cad5dab2b21d 1553
nikapov 0:cad5dab2b21d 1554 /* Enable X direction in tap recognition. */
nikapov 0:cad5dab2b21d 1555 if ( LSM6DSL_ACC_GYRO_W_TAP_X_EN( (void *)this, LSM6DSL_ACC_GYRO_TAP_X_EN_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1556 {
nikapov 0:cad5dab2b21d 1557 return 1;
nikapov 0:cad5dab2b21d 1558 }
nikapov 0:cad5dab2b21d 1559
nikapov 0:cad5dab2b21d 1560 /* Enable Y direction in tap recognition. */
nikapov 0:cad5dab2b21d 1561 if ( LSM6DSL_ACC_GYRO_W_TAP_Y_EN( (void *)this, LSM6DSL_ACC_GYRO_TAP_Y_EN_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1562 {
nikapov 0:cad5dab2b21d 1563 return 1;
nikapov 0:cad5dab2b21d 1564 }
nikapov 0:cad5dab2b21d 1565
nikapov 0:cad5dab2b21d 1566 /* Enable Z direction in tap recognition. */
nikapov 0:cad5dab2b21d 1567 if ( LSM6DSL_ACC_GYRO_W_TAP_Z_EN( (void *)this, LSM6DSL_ACC_GYRO_TAP_Z_EN_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1568 {
nikapov 0:cad5dab2b21d 1569 return 1;
nikapov 0:cad5dab2b21d 1570 }
nikapov 0:cad5dab2b21d 1571
nikapov 0:cad5dab2b21d 1572 /* Set tap threshold. */
davide.aliprandi@st.com 6:671fd10a51b7 1573 if ( set_tap_threshold( LSM6DSL_TAP_THRESHOLD_MID_LOW ) == 1 )
nikapov 0:cad5dab2b21d 1574 {
nikapov 0:cad5dab2b21d 1575 return 1;
nikapov 0:cad5dab2b21d 1576 }
nikapov 0:cad5dab2b21d 1577
nikapov 0:cad5dab2b21d 1578 /* Set tap shock time window. */
davide.aliprandi@st.com 6:671fd10a51b7 1579 if ( set_tap_shock_time( LSM6DSL_TAP_SHOCK_TIME_HIGH ) == 1 )
nikapov 0:cad5dab2b21d 1580 {
nikapov 0:cad5dab2b21d 1581 return 1;
nikapov 0:cad5dab2b21d 1582 }
nikapov 0:cad5dab2b21d 1583
nikapov 0:cad5dab2b21d 1584 /* Set tap quiet time window. */
davide.aliprandi@st.com 6:671fd10a51b7 1585 if ( set_tap_quiet_time( LSM6DSL_TAP_QUIET_TIME_HIGH ) == 1 )
nikapov 0:cad5dab2b21d 1586 {
nikapov 0:cad5dab2b21d 1587 return 1;
nikapov 0:cad5dab2b21d 1588 }
nikapov 0:cad5dab2b21d 1589
nikapov 0:cad5dab2b21d 1590 /* Set tap duration time window. */
davide.aliprandi@st.com 6:671fd10a51b7 1591 if ( set_tap_duration_time( LSM6DSL_TAP_DURATION_TIME_MID ) == 1 )
nikapov 0:cad5dab2b21d 1592 {
nikapov 0:cad5dab2b21d 1593 return 1;
nikapov 0:cad5dab2b21d 1594 }
nikapov 0:cad5dab2b21d 1595
nikapov 0:cad5dab2b21d 1596 /* Single and double tap enabled. */
nikapov 0:cad5dab2b21d 1597 if ( LSM6DSL_ACC_GYRO_W_SINGLE_DOUBLE_TAP_EV( (void *)this, LSM6DSL_ACC_GYRO_SINGLE_DOUBLE_TAP_DOUBLE_TAP ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1598 {
nikapov 0:cad5dab2b21d 1599 return 1;
nikapov 0:cad5dab2b21d 1600 }
nikapov 0:cad5dab2b21d 1601
nikapov 0:cad5dab2b21d 1602 /* Enable basic Interrupts */
nikapov 0:cad5dab2b21d 1603 if ( LSM6DSL_ACC_GYRO_W_BASIC_INT( (void *)this, LSM6DSL_ACC_GYRO_BASIC_INT_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1604 {
nikapov 0:cad5dab2b21d 1605 return 1;
nikapov 0:cad5dab2b21d 1606 }
nikapov 0:cad5dab2b21d 1607
nikapov 0:cad5dab2b21d 1608 /* Enable double tap on either INT1 or INT2 pin */
nikapov 0:cad5dab2b21d 1609 switch (pin)
nikapov 0:cad5dab2b21d 1610 {
nikapov 0:cad5dab2b21d 1611 case LSM6DSL_INT1_PIN:
nikapov 0:cad5dab2b21d 1612 if ( LSM6DSL_ACC_GYRO_W_TapEvOnInt1( (void *)this, LSM6DSL_ACC_GYRO_INT1_TAP_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1613 {
nikapov 0:cad5dab2b21d 1614 return 1;
nikapov 0:cad5dab2b21d 1615 }
nikapov 0:cad5dab2b21d 1616 break;
nikapov 0:cad5dab2b21d 1617
nikapov 0:cad5dab2b21d 1618 case LSM6DSL_INT2_PIN:
nikapov 0:cad5dab2b21d 1619 if ( LSM6DSL_ACC_GYRO_W_TapEvOnInt2( (void *)this, LSM6DSL_ACC_GYRO_INT2_TAP_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1620 {
nikapov 0:cad5dab2b21d 1621 return 1;
nikapov 0:cad5dab2b21d 1622 }
nikapov 0:cad5dab2b21d 1623 break;
nikapov 0:cad5dab2b21d 1624
nikapov 0:cad5dab2b21d 1625 default:
nikapov 0:cad5dab2b21d 1626 return 1;
nikapov 0:cad5dab2b21d 1627 }
nikapov 0:cad5dab2b21d 1628
nikapov 0:cad5dab2b21d 1629 return 0;
nikapov 0:cad5dab2b21d 1630 }
nikapov 0:cad5dab2b21d 1631
nikapov 0:cad5dab2b21d 1632 /**
nikapov 0:cad5dab2b21d 1633 * @brief Disable the double tap detection for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1634 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1635 */
davide.aliprandi@st.com 6:671fd10a51b7 1636 int LSM6DSLSensor::disable_double_tap_detection(void)
nikapov 0:cad5dab2b21d 1637 {
nikapov 0:cad5dab2b21d 1638 /* Disable double tap interrupt on INT1 pin. */
nikapov 0:cad5dab2b21d 1639 if ( LSM6DSL_ACC_GYRO_W_TapEvOnInt1( (void *)this, LSM6DSL_ACC_GYRO_INT1_TAP_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1640 {
nikapov 0:cad5dab2b21d 1641 return 1;
nikapov 0:cad5dab2b21d 1642 }
nikapov 0:cad5dab2b21d 1643
nikapov 0:cad5dab2b21d 1644 /* Disable double tap interrupt on INT2 pin. */
nikapov 0:cad5dab2b21d 1645 if ( LSM6DSL_ACC_GYRO_W_TapEvOnInt2( (void *)this, LSM6DSL_ACC_GYRO_INT2_TAP_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1646 {
nikapov 0:cad5dab2b21d 1647 return 1;
nikapov 0:cad5dab2b21d 1648 }
nikapov 0:cad5dab2b21d 1649
nikapov 0:cad5dab2b21d 1650 /* Disable basic Interrupts */
nikapov 0:cad5dab2b21d 1651 if ( LSM6DSL_ACC_GYRO_W_BASIC_INT( (void *)this, LSM6DSL_ACC_GYRO_BASIC_INT_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1652 {
nikapov 0:cad5dab2b21d 1653 return 1;
nikapov 0:cad5dab2b21d 1654 }
nikapov 0:cad5dab2b21d 1655
nikapov 0:cad5dab2b21d 1656 /* Reset tap threshold. */
davide.aliprandi@st.com 6:671fd10a51b7 1657 if ( set_tap_threshold( 0x0 ) == 1 )
nikapov 0:cad5dab2b21d 1658 {
nikapov 0:cad5dab2b21d 1659 return 1;
nikapov 0:cad5dab2b21d 1660 }
nikapov 0:cad5dab2b21d 1661
nikapov 0:cad5dab2b21d 1662 /* Reset tap shock time window. */
davide.aliprandi@st.com 6:671fd10a51b7 1663 if ( set_tap_shock_time( 0x0 ) == 1 )
nikapov 0:cad5dab2b21d 1664 {
nikapov 0:cad5dab2b21d 1665 return 1;
nikapov 0:cad5dab2b21d 1666 }
nikapov 0:cad5dab2b21d 1667
nikapov 0:cad5dab2b21d 1668 /* Reset tap quiet time window. */
davide.aliprandi@st.com 6:671fd10a51b7 1669 if ( set_tap_quiet_time( 0x0 ) == 1 )
nikapov 0:cad5dab2b21d 1670 {
nikapov 0:cad5dab2b21d 1671 return 1;
nikapov 0:cad5dab2b21d 1672 }
nikapov 0:cad5dab2b21d 1673
nikapov 0:cad5dab2b21d 1674 /* Reset tap duration time window. */
davide.aliprandi@st.com 6:671fd10a51b7 1675 if ( set_tap_duration_time( 0x0 ) == 1 )
nikapov 0:cad5dab2b21d 1676 {
nikapov 0:cad5dab2b21d 1677 return 1;
nikapov 0:cad5dab2b21d 1678 }
nikapov 0:cad5dab2b21d 1679
nikapov 0:cad5dab2b21d 1680 /* Only single tap enabled. */
nikapov 0:cad5dab2b21d 1681 if ( LSM6DSL_ACC_GYRO_W_SINGLE_DOUBLE_TAP_EV( (void *)this, LSM6DSL_ACC_GYRO_SINGLE_DOUBLE_TAP_SINGLE_TAP ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1682 {
nikapov 0:cad5dab2b21d 1683 return 1;
nikapov 0:cad5dab2b21d 1684 }
nikapov 0:cad5dab2b21d 1685
nikapov 0:cad5dab2b21d 1686 /* Disable Z direction in tap recognition. */
nikapov 0:cad5dab2b21d 1687 if ( LSM6DSL_ACC_GYRO_W_TAP_Z_EN( (void *)this, LSM6DSL_ACC_GYRO_TAP_Z_EN_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1688 {
nikapov 0:cad5dab2b21d 1689 return 1;
nikapov 0:cad5dab2b21d 1690 }
nikapov 0:cad5dab2b21d 1691
nikapov 0:cad5dab2b21d 1692 /* Disable Y direction in tap recognition. */
nikapov 0:cad5dab2b21d 1693 if ( LSM6DSL_ACC_GYRO_W_TAP_Y_EN( (void *)this, LSM6DSL_ACC_GYRO_TAP_Y_EN_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1694 {
nikapov 0:cad5dab2b21d 1695 return 1;
nikapov 0:cad5dab2b21d 1696 }
nikapov 0:cad5dab2b21d 1697
nikapov 0:cad5dab2b21d 1698 /* Disable X direction in tap recognition. */
nikapov 0:cad5dab2b21d 1699 if ( LSM6DSL_ACC_GYRO_W_TAP_X_EN( (void *)this, LSM6DSL_ACC_GYRO_TAP_X_EN_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1700 {
nikapov 0:cad5dab2b21d 1701 return 1;
nikapov 0:cad5dab2b21d 1702 }
nikapov 0:cad5dab2b21d 1703
nikapov 0:cad5dab2b21d 1704 return 0;
nikapov 0:cad5dab2b21d 1705 }
nikapov 0:cad5dab2b21d 1706
nikapov 0:cad5dab2b21d 1707 /**
nikapov 0:cad5dab2b21d 1708 * @brief Set the tap threshold for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1709 * @param thr the threshold to be set
nikapov 0:cad5dab2b21d 1710 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1711 */
davide.aliprandi@st.com 6:671fd10a51b7 1712 int LSM6DSLSensor::set_tap_threshold(uint8_t thr)
nikapov 0:cad5dab2b21d 1713 {
nikapov 0:cad5dab2b21d 1714 if ( LSM6DSL_ACC_GYRO_W_TAP_THS( (void *)this, thr ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1715 {
nikapov 0:cad5dab2b21d 1716 return 1;
nikapov 0:cad5dab2b21d 1717 }
nikapov 0:cad5dab2b21d 1718
nikapov 0:cad5dab2b21d 1719 return 0;
nikapov 0:cad5dab2b21d 1720 }
nikapov 0:cad5dab2b21d 1721
nikapov 0:cad5dab2b21d 1722 /**
nikapov 0:cad5dab2b21d 1723 * @brief Set the tap shock time window for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1724 * @param time the shock time window to be set
nikapov 0:cad5dab2b21d 1725 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1726 */
davide.aliprandi@st.com 6:671fd10a51b7 1727 int LSM6DSLSensor::set_tap_shock_time(uint8_t time)
nikapov 0:cad5dab2b21d 1728 {
nikapov 0:cad5dab2b21d 1729 if ( LSM6DSL_ACC_GYRO_W_SHOCK_Duration( (void *)this, time ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1730 {
nikapov 0:cad5dab2b21d 1731 return 1;
nikapov 0:cad5dab2b21d 1732 }
nikapov 0:cad5dab2b21d 1733
nikapov 0:cad5dab2b21d 1734 return 0;
nikapov 0:cad5dab2b21d 1735 }
nikapov 0:cad5dab2b21d 1736
nikapov 0:cad5dab2b21d 1737 /**
nikapov 0:cad5dab2b21d 1738 * @brief Set the tap quiet time window for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1739 * @param time the quiet time window to be set
nikapov 0:cad5dab2b21d 1740 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1741 */
davide.aliprandi@st.com 6:671fd10a51b7 1742 int LSM6DSLSensor::set_tap_quiet_time(uint8_t time)
nikapov 0:cad5dab2b21d 1743 {
nikapov 0:cad5dab2b21d 1744 if ( LSM6DSL_ACC_GYRO_W_QUIET_Duration( (void *)this, time ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1745 {
nikapov 0:cad5dab2b21d 1746 return 1;
nikapov 0:cad5dab2b21d 1747 }
nikapov 0:cad5dab2b21d 1748
nikapov 0:cad5dab2b21d 1749 return 0;
nikapov 0:cad5dab2b21d 1750 }
nikapov 0:cad5dab2b21d 1751
nikapov 0:cad5dab2b21d 1752 /**
nikapov 0:cad5dab2b21d 1753 * @brief Set the tap duration of the time window for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1754 * @param time the duration of the time window to be set
nikapov 0:cad5dab2b21d 1755 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1756 */
davide.aliprandi@st.com 6:671fd10a51b7 1757 int LSM6DSLSensor::set_tap_duration_time(uint8_t time)
nikapov 0:cad5dab2b21d 1758 {
nikapov 0:cad5dab2b21d 1759 if ( LSM6DSL_ACC_GYRO_W_DUR( (void *)this, time ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1760 {
nikapov 0:cad5dab2b21d 1761 return 1;
nikapov 0:cad5dab2b21d 1762 }
nikapov 0:cad5dab2b21d 1763
nikapov 0:cad5dab2b21d 1764 return 0;
nikapov 0:cad5dab2b21d 1765 }
nikapov 0:cad5dab2b21d 1766
nikapov 0:cad5dab2b21d 1767 /**
nikapov 0:cad5dab2b21d 1768 * @brief Enable the 6D orientation detection for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1769 * @param pin the interrupt pin to be used
nikapov 0:cad5dab2b21d 1770 * @note This function sets the LSM6DSL accelerometer ODR to 416Hz and the LSM6DSL accelerometer full scale to 2g
nikapov 0:cad5dab2b21d 1771 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1772 */
Davidroid 9:038121268b07 1773 int LSM6DSLSensor::enable_6d_orientation(LSM6DSL_Interrupt_Pin_t pin)
nikapov 0:cad5dab2b21d 1774 {
nikapov 0:cad5dab2b21d 1775 /* Output Data Rate selection */
davide.aliprandi@st.com 6:671fd10a51b7 1776 if( set_x_odr(416.0f) == 1 )
nikapov 0:cad5dab2b21d 1777 {
nikapov 0:cad5dab2b21d 1778 return 1;
nikapov 0:cad5dab2b21d 1779 }
nikapov 0:cad5dab2b21d 1780
nikapov 0:cad5dab2b21d 1781 /* Full scale selection. */
davide.aliprandi@st.com 6:671fd10a51b7 1782 if( set_x_fs(2.0f) == 1 )
nikapov 0:cad5dab2b21d 1783 {
nikapov 0:cad5dab2b21d 1784 return 1;
nikapov 0:cad5dab2b21d 1785 }
nikapov 0:cad5dab2b21d 1786
nikapov 0:cad5dab2b21d 1787 /* Set 6D threshold. */
nikapov 0:cad5dab2b21d 1788 if ( LSM6DSL_ACC_GYRO_W_SIXD_THS( (void *)this, LSM6DSL_ACC_GYRO_SIXD_THS_60_degree ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1789 {
nikapov 0:cad5dab2b21d 1790 return 1;
nikapov 0:cad5dab2b21d 1791 }
nikapov 0:cad5dab2b21d 1792
nikapov 0:cad5dab2b21d 1793 /* Enable basic Interrupts */
nikapov 0:cad5dab2b21d 1794 if ( LSM6DSL_ACC_GYRO_W_BASIC_INT( (void *)this, LSM6DSL_ACC_GYRO_BASIC_INT_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1795 {
nikapov 0:cad5dab2b21d 1796 return 1;
nikapov 0:cad5dab2b21d 1797 }
nikapov 0:cad5dab2b21d 1798
nikapov 0:cad5dab2b21d 1799 /* Enable 6D orientation on either INT1 or INT2 pin */
nikapov 0:cad5dab2b21d 1800 switch (pin)
nikapov 0:cad5dab2b21d 1801 {
nikapov 0:cad5dab2b21d 1802 case LSM6DSL_INT1_PIN:
nikapov 0:cad5dab2b21d 1803 if ( LSM6DSL_ACC_GYRO_W_6DEvOnInt1( (void *)this, LSM6DSL_ACC_GYRO_INT1_6D_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1804 {
nikapov 0:cad5dab2b21d 1805 return 1;
nikapov 0:cad5dab2b21d 1806 }
nikapov 0:cad5dab2b21d 1807 break;
nikapov 0:cad5dab2b21d 1808
nikapov 0:cad5dab2b21d 1809 case LSM6DSL_INT2_PIN:
nikapov 0:cad5dab2b21d 1810 if ( LSM6DSL_ACC_GYRO_W_6DEvOnInt2( (void *)this, LSM6DSL_ACC_GYRO_INT2_6D_ENABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1811 {
nikapov 0:cad5dab2b21d 1812 return 1;
nikapov 0:cad5dab2b21d 1813 }
nikapov 0:cad5dab2b21d 1814 break;
nikapov 0:cad5dab2b21d 1815
nikapov 0:cad5dab2b21d 1816 default:
nikapov 0:cad5dab2b21d 1817 return 1;
nikapov 0:cad5dab2b21d 1818 }
nikapov 0:cad5dab2b21d 1819
nikapov 0:cad5dab2b21d 1820 return 0;
nikapov 0:cad5dab2b21d 1821 }
nikapov 0:cad5dab2b21d 1822
nikapov 0:cad5dab2b21d 1823 /**
nikapov 0:cad5dab2b21d 1824 * @brief Disable the 6D orientation detection for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1825 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1826 */
davide.aliprandi@st.com 6:671fd10a51b7 1827 int LSM6DSLSensor::disable_6d_orientation(void)
nikapov 0:cad5dab2b21d 1828 {
nikapov 0:cad5dab2b21d 1829 /* Disable 6D orientation interrupt on INT1 pin. */
nikapov 0:cad5dab2b21d 1830 if ( LSM6DSL_ACC_GYRO_W_6DEvOnInt1( (void *)this, LSM6DSL_ACC_GYRO_INT1_6D_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1831 {
nikapov 0:cad5dab2b21d 1832 return 1;
nikapov 0:cad5dab2b21d 1833 }
nikapov 0:cad5dab2b21d 1834
nikapov 0:cad5dab2b21d 1835 /* Disable 6D orientation interrupt on INT2 pin. */
nikapov 0:cad5dab2b21d 1836 if ( LSM6DSL_ACC_GYRO_W_6DEvOnInt2( (void *)this, LSM6DSL_ACC_GYRO_INT2_6D_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1837 {
nikapov 0:cad5dab2b21d 1838 return 1;
nikapov 0:cad5dab2b21d 1839 }
nikapov 0:cad5dab2b21d 1840
nikapov 0:cad5dab2b21d 1841 /* Disable basic Interrupts */
nikapov 0:cad5dab2b21d 1842 if ( LSM6DSL_ACC_GYRO_W_BASIC_INT( (void *)this, LSM6DSL_ACC_GYRO_BASIC_INT_DISABLED ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1843 {
nikapov 0:cad5dab2b21d 1844 return 1;
nikapov 0:cad5dab2b21d 1845 }
nikapov 0:cad5dab2b21d 1846
nikapov 0:cad5dab2b21d 1847 /* Reset 6D threshold. */
nikapov 0:cad5dab2b21d 1848 if ( LSM6DSL_ACC_GYRO_W_SIXD_THS( (void *)this, LSM6DSL_ACC_GYRO_SIXD_THS_80_degree ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1849 {
nikapov 0:cad5dab2b21d 1850 return 1;
nikapov 0:cad5dab2b21d 1851 }
nikapov 0:cad5dab2b21d 1852
nikapov 0:cad5dab2b21d 1853 return 0;
nikapov 0:cad5dab2b21d 1854 }
nikapov 0:cad5dab2b21d 1855
nikapov 0:cad5dab2b21d 1856 /**
nikapov 0:cad5dab2b21d 1857 * @brief Get the 6D orientation XL axis for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1858 * @param xl the pointer to the 6D orientation XL axis
nikapov 0:cad5dab2b21d 1859 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1860 */
davide.aliprandi@st.com 6:671fd10a51b7 1861 int LSM6DSLSensor::get_6d_orientation_xl(uint8_t *xl)
nikapov 0:cad5dab2b21d 1862 {
nikapov 0:cad5dab2b21d 1863 LSM6DSL_ACC_GYRO_DSD_XL_t xl_raw;
nikapov 0:cad5dab2b21d 1864
nikapov 0:cad5dab2b21d 1865 if ( LSM6DSL_ACC_GYRO_R_DSD_XL( (void *)this, &xl_raw ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1866 {
nikapov 0:cad5dab2b21d 1867 return 1;
nikapov 0:cad5dab2b21d 1868 }
nikapov 0:cad5dab2b21d 1869
nikapov 0:cad5dab2b21d 1870 switch( xl_raw )
nikapov 0:cad5dab2b21d 1871 {
nikapov 0:cad5dab2b21d 1872 case LSM6DSL_ACC_GYRO_DSD_XL_DETECTED:
nikapov 0:cad5dab2b21d 1873 *xl = 1;
nikapov 0:cad5dab2b21d 1874 break;
nikapov 0:cad5dab2b21d 1875 case LSM6DSL_ACC_GYRO_DSD_XL_NOT_DETECTED:
nikapov 0:cad5dab2b21d 1876 *xl = 0;
nikapov 0:cad5dab2b21d 1877 break;
nikapov 0:cad5dab2b21d 1878 default:
nikapov 0:cad5dab2b21d 1879 return 1;
nikapov 0:cad5dab2b21d 1880 }
nikapov 0:cad5dab2b21d 1881
nikapov 0:cad5dab2b21d 1882 return 0;
nikapov 0:cad5dab2b21d 1883 }
nikapov 0:cad5dab2b21d 1884
nikapov 0:cad5dab2b21d 1885 /**
nikapov 0:cad5dab2b21d 1886 * @brief Get the 6D orientation XH axis for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1887 * @param xh the pointer to the 6D orientation XH axis
nikapov 0:cad5dab2b21d 1888 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1889 */
davide.aliprandi@st.com 6:671fd10a51b7 1890 int LSM6DSLSensor::get_6d_orientation_xh(uint8_t *xh)
nikapov 0:cad5dab2b21d 1891 {
nikapov 0:cad5dab2b21d 1892 LSM6DSL_ACC_GYRO_DSD_XH_t xh_raw;
nikapov 0:cad5dab2b21d 1893
nikapov 0:cad5dab2b21d 1894 if ( LSM6DSL_ACC_GYRO_R_DSD_XH( (void *)this, &xh_raw ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1895 {
nikapov 0:cad5dab2b21d 1896 return 1;
nikapov 0:cad5dab2b21d 1897 }
nikapov 0:cad5dab2b21d 1898
nikapov 0:cad5dab2b21d 1899 switch( xh_raw )
nikapov 0:cad5dab2b21d 1900 {
nikapov 0:cad5dab2b21d 1901 case LSM6DSL_ACC_GYRO_DSD_XH_DETECTED:
nikapov 0:cad5dab2b21d 1902 *xh = 1;
nikapov 0:cad5dab2b21d 1903 break;
nikapov 0:cad5dab2b21d 1904 case LSM6DSL_ACC_GYRO_DSD_XH_NOT_DETECTED:
nikapov 0:cad5dab2b21d 1905 *xh = 0;
nikapov 0:cad5dab2b21d 1906 break;
nikapov 0:cad5dab2b21d 1907 default:
nikapov 0:cad5dab2b21d 1908 return 1;
nikapov 0:cad5dab2b21d 1909 }
nikapov 0:cad5dab2b21d 1910
nikapov 0:cad5dab2b21d 1911 return 0;
nikapov 0:cad5dab2b21d 1912 }
nikapov 0:cad5dab2b21d 1913
nikapov 0:cad5dab2b21d 1914 /**
nikapov 0:cad5dab2b21d 1915 * @brief Get the 6D orientation YL axis for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1916 * @param yl the pointer to the 6D orientation YL axis
nikapov 0:cad5dab2b21d 1917 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1918 */
davide.aliprandi@st.com 6:671fd10a51b7 1919 int LSM6DSLSensor::get_6d_orientation_yl(uint8_t *yl)
nikapov 0:cad5dab2b21d 1920 {
nikapov 0:cad5dab2b21d 1921 LSM6DSL_ACC_GYRO_DSD_YL_t yl_raw;
nikapov 0:cad5dab2b21d 1922
nikapov 0:cad5dab2b21d 1923 if ( LSM6DSL_ACC_GYRO_R_DSD_YL( (void *)this, &yl_raw ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1924 {
nikapov 0:cad5dab2b21d 1925 return 1;
nikapov 0:cad5dab2b21d 1926 }
nikapov 0:cad5dab2b21d 1927
nikapov 0:cad5dab2b21d 1928 switch( yl_raw )
nikapov 0:cad5dab2b21d 1929 {
nikapov 0:cad5dab2b21d 1930 case LSM6DSL_ACC_GYRO_DSD_YL_DETECTED:
nikapov 0:cad5dab2b21d 1931 *yl = 1;
nikapov 0:cad5dab2b21d 1932 break;
nikapov 0:cad5dab2b21d 1933 case LSM6DSL_ACC_GYRO_DSD_YL_NOT_DETECTED:
nikapov 0:cad5dab2b21d 1934 *yl = 0;
nikapov 0:cad5dab2b21d 1935 break;
nikapov 0:cad5dab2b21d 1936 default:
nikapov 0:cad5dab2b21d 1937 return 1;
nikapov 0:cad5dab2b21d 1938 }
nikapov 0:cad5dab2b21d 1939
nikapov 0:cad5dab2b21d 1940 return 0;
nikapov 0:cad5dab2b21d 1941 }
nikapov 0:cad5dab2b21d 1942
nikapov 0:cad5dab2b21d 1943 /**
nikapov 0:cad5dab2b21d 1944 * @brief Get the 6D orientation YH axis for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1945 * @param yh the pointer to the 6D orientation YH axis
nikapov 0:cad5dab2b21d 1946 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1947 */
davide.aliprandi@st.com 6:671fd10a51b7 1948 int LSM6DSLSensor::get_6d_orientation_yh(uint8_t *yh)
nikapov 0:cad5dab2b21d 1949 {
nikapov 0:cad5dab2b21d 1950 LSM6DSL_ACC_GYRO_DSD_YH_t yh_raw;
nikapov 0:cad5dab2b21d 1951
nikapov 0:cad5dab2b21d 1952 if ( LSM6DSL_ACC_GYRO_R_DSD_YH( (void *)this, &yh_raw ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1953 {
nikapov 0:cad5dab2b21d 1954 return 1;
nikapov 0:cad5dab2b21d 1955 }
nikapov 0:cad5dab2b21d 1956
nikapov 0:cad5dab2b21d 1957 switch( yh_raw )
nikapov 0:cad5dab2b21d 1958 {
nikapov 0:cad5dab2b21d 1959 case LSM6DSL_ACC_GYRO_DSD_YH_DETECTED:
nikapov 0:cad5dab2b21d 1960 *yh = 1;
nikapov 0:cad5dab2b21d 1961 break;
nikapov 0:cad5dab2b21d 1962 case LSM6DSL_ACC_GYRO_DSD_YH_NOT_DETECTED:
nikapov 0:cad5dab2b21d 1963 *yh = 0;
nikapov 0:cad5dab2b21d 1964 break;
nikapov 0:cad5dab2b21d 1965 default:
nikapov 0:cad5dab2b21d 1966 return 1;
nikapov 0:cad5dab2b21d 1967 }
nikapov 0:cad5dab2b21d 1968
nikapov 0:cad5dab2b21d 1969 return 0;
nikapov 0:cad5dab2b21d 1970 }
nikapov 0:cad5dab2b21d 1971
nikapov 0:cad5dab2b21d 1972 /**
nikapov 0:cad5dab2b21d 1973 * @brief Get the 6D orientation ZL axis for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 1974 * @param zl the pointer to the 6D orientation ZL axis
nikapov 0:cad5dab2b21d 1975 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 1976 */
davide.aliprandi@st.com 6:671fd10a51b7 1977 int LSM6DSLSensor::get_6d_orientation_zl(uint8_t *zl)
nikapov 0:cad5dab2b21d 1978 {
nikapov 0:cad5dab2b21d 1979 LSM6DSL_ACC_GYRO_DSD_ZL_t zl_raw;
nikapov 0:cad5dab2b21d 1980
nikapov 0:cad5dab2b21d 1981 if ( LSM6DSL_ACC_GYRO_R_DSD_ZL( (void *)this, &zl_raw ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 1982 {
nikapov 0:cad5dab2b21d 1983 return 1;
nikapov 0:cad5dab2b21d 1984 }
nikapov 0:cad5dab2b21d 1985
nikapov 0:cad5dab2b21d 1986 switch( zl_raw )
nikapov 0:cad5dab2b21d 1987 {
nikapov 0:cad5dab2b21d 1988 case LSM6DSL_ACC_GYRO_DSD_ZL_DETECTED:
nikapov 0:cad5dab2b21d 1989 *zl = 1;
nikapov 0:cad5dab2b21d 1990 break;
nikapov 0:cad5dab2b21d 1991 case LSM6DSL_ACC_GYRO_DSD_ZL_NOT_DETECTED:
nikapov 0:cad5dab2b21d 1992 *zl = 0;
nikapov 0:cad5dab2b21d 1993 break;
nikapov 0:cad5dab2b21d 1994 default:
nikapov 0:cad5dab2b21d 1995 return 1;
nikapov 0:cad5dab2b21d 1996 }
nikapov 0:cad5dab2b21d 1997
nikapov 0:cad5dab2b21d 1998 return 0;
nikapov 0:cad5dab2b21d 1999 }
nikapov 0:cad5dab2b21d 2000
nikapov 0:cad5dab2b21d 2001 /**
nikapov 0:cad5dab2b21d 2002 * @brief Get the 6D orientation ZH axis for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 2003 * @param zh the pointer to the 6D orientation ZH axis
nikapov 0:cad5dab2b21d 2004 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 2005 */
davide.aliprandi@st.com 6:671fd10a51b7 2006 int LSM6DSLSensor::get_6d_orientation_zh(uint8_t *zh)
nikapov 0:cad5dab2b21d 2007 {
nikapov 0:cad5dab2b21d 2008 LSM6DSL_ACC_GYRO_DSD_ZH_t zh_raw;
nikapov 0:cad5dab2b21d 2009
nikapov 0:cad5dab2b21d 2010 if ( LSM6DSL_ACC_GYRO_R_DSD_ZH( (void *)this, &zh_raw ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 2011 {
nikapov 0:cad5dab2b21d 2012 return 1;
nikapov 0:cad5dab2b21d 2013 }
nikapov 0:cad5dab2b21d 2014
nikapov 0:cad5dab2b21d 2015 switch( zh_raw )
nikapov 0:cad5dab2b21d 2016 {
nikapov 0:cad5dab2b21d 2017 case LSM6DSL_ACC_GYRO_DSD_ZH_DETECTED:
nikapov 0:cad5dab2b21d 2018 *zh = 1;
nikapov 0:cad5dab2b21d 2019 break;
nikapov 0:cad5dab2b21d 2020 case LSM6DSL_ACC_GYRO_DSD_ZH_NOT_DETECTED:
nikapov 0:cad5dab2b21d 2021 *zh = 0;
nikapov 0:cad5dab2b21d 2022 break;
nikapov 0:cad5dab2b21d 2023 default:
nikapov 0:cad5dab2b21d 2024 return 1;
nikapov 0:cad5dab2b21d 2025 }
nikapov 0:cad5dab2b21d 2026
nikapov 0:cad5dab2b21d 2027 return 0;
nikapov 0:cad5dab2b21d 2028 }
nikapov 0:cad5dab2b21d 2029
nikapov 0:cad5dab2b21d 2030 /**
nikapov 0:cad5dab2b21d 2031 * @brief Get the status of all hardware events for LSM6DSL accelerometer sensor
nikapov 0:cad5dab2b21d 2032 * @param status the pointer to the status of all hardware events
nikapov 0:cad5dab2b21d 2033 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 2034 */
davide.aliprandi@st.com 6:671fd10a51b7 2035 int LSM6DSLSensor::get_event_status(LSM6DSL_Event_Status_t *status)
nikapov 0:cad5dab2b21d 2036 {
nikapov 0:cad5dab2b21d 2037 uint8_t Wake_Up_Src = 0, Tap_Src = 0, D6D_Src = 0, Func_Src = 0, Md1_Cfg = 0, Md2_Cfg = 0, Int1_Ctrl = 0;
nikapov 0:cad5dab2b21d 2038
nikapov 0:cad5dab2b21d 2039 memset((void *)status, 0x0, sizeof(LSM6DSL_Event_Status_t));
nikapov 0:cad5dab2b21d 2040
davide.aliprandi@st.com 6:671fd10a51b7 2041 if(read_reg(LSM6DSL_ACC_GYRO_WAKE_UP_SRC, &Wake_Up_Src) != 0)
nikapov 0:cad5dab2b21d 2042 {
nikapov 0:cad5dab2b21d 2043 return 1;
nikapov 0:cad5dab2b21d 2044 }
nikapov 0:cad5dab2b21d 2045
davide.aliprandi@st.com 6:671fd10a51b7 2046 if(read_reg(LSM6DSL_ACC_GYRO_TAP_SRC, &Tap_Src) != 0)
nikapov 0:cad5dab2b21d 2047 {
nikapov 0:cad5dab2b21d 2048 return 1;
nikapov 0:cad5dab2b21d 2049 }
nikapov 0:cad5dab2b21d 2050
davide.aliprandi@st.com 6:671fd10a51b7 2051 if(read_reg(LSM6DSL_ACC_GYRO_D6D_SRC, &D6D_Src) != 0)
nikapov 0:cad5dab2b21d 2052 {
nikapov 0:cad5dab2b21d 2053 return 1;
nikapov 0:cad5dab2b21d 2054 }
nikapov 0:cad5dab2b21d 2055
davide.aliprandi@st.com 6:671fd10a51b7 2056 if(read_reg(LSM6DSL_ACC_GYRO_FUNC_SRC, &Func_Src) != 0)
nikapov 0:cad5dab2b21d 2057 {
nikapov 0:cad5dab2b21d 2058 return 1;
nikapov 0:cad5dab2b21d 2059 }
nikapov 0:cad5dab2b21d 2060
davide.aliprandi@st.com 6:671fd10a51b7 2061 if(read_reg(LSM6DSL_ACC_GYRO_MD1_CFG, &Md1_Cfg ) != 0 )
nikapov 0:cad5dab2b21d 2062 {
nikapov 0:cad5dab2b21d 2063 return 1;
nikapov 0:cad5dab2b21d 2064 }
nikapov 0:cad5dab2b21d 2065
davide.aliprandi@st.com 6:671fd10a51b7 2066 if(read_reg(LSM6DSL_ACC_GYRO_MD2_CFG, &Md2_Cfg ) != 0)
nikapov 0:cad5dab2b21d 2067 {
nikapov 0:cad5dab2b21d 2068 return 1;
nikapov 0:cad5dab2b21d 2069 }
nikapov 0:cad5dab2b21d 2070
davide.aliprandi@st.com 6:671fd10a51b7 2071 if(read_reg(LSM6DSL_ACC_GYRO_INT1_CTRL, &Int1_Ctrl ) != 0)
nikapov 0:cad5dab2b21d 2072 {
nikapov 0:cad5dab2b21d 2073 return 1;
nikapov 0:cad5dab2b21d 2074 }
nikapov 0:cad5dab2b21d 2075
nikapov 0:cad5dab2b21d 2076 if((Md1_Cfg & LSM6DSL_ACC_GYRO_INT1_FF_MASK) || (Md2_Cfg & LSM6DSL_ACC_GYRO_INT2_FF_MASK))
nikapov 0:cad5dab2b21d 2077 {
nikapov 0:cad5dab2b21d 2078 if((Wake_Up_Src & LSM6DSL_ACC_GYRO_FF_EV_STATUS_MASK))
nikapov 0:cad5dab2b21d 2079 {
nikapov 0:cad5dab2b21d 2080 status->FreeFallStatus = 1;
nikapov 0:cad5dab2b21d 2081 }
nikapov 0:cad5dab2b21d 2082 }
nikapov 0:cad5dab2b21d 2083
nikapov 0:cad5dab2b21d 2084 if((Md1_Cfg & LSM6DSL_ACC_GYRO_INT1_WU_MASK) || (Md2_Cfg & LSM6DSL_ACC_GYRO_INT2_WU_MASK))
nikapov 0:cad5dab2b21d 2085 {
nikapov 0:cad5dab2b21d 2086 if((Wake_Up_Src & LSM6DSL_ACC_GYRO_WU_EV_STATUS_MASK))
nikapov 0:cad5dab2b21d 2087 {
nikapov 0:cad5dab2b21d 2088 status->WakeUpStatus = 1;
nikapov 0:cad5dab2b21d 2089 }
nikapov 0:cad5dab2b21d 2090 }
nikapov 0:cad5dab2b21d 2091
nikapov 0:cad5dab2b21d 2092 if((Md1_Cfg & LSM6DSL_ACC_GYRO_INT1_SINGLE_TAP_MASK) || (Md2_Cfg & LSM6DSL_ACC_GYRO_INT2_SINGLE_TAP_MASK))
nikapov 0:cad5dab2b21d 2093 {
nikapov 0:cad5dab2b21d 2094 if((Tap_Src & LSM6DSL_ACC_GYRO_SINGLE_TAP_EV_STATUS_MASK))
nikapov 0:cad5dab2b21d 2095 {
nikapov 0:cad5dab2b21d 2096 status->TapStatus = 1;
nikapov 0:cad5dab2b21d 2097 }
nikapov 0:cad5dab2b21d 2098 }
nikapov 0:cad5dab2b21d 2099
nikapov 0:cad5dab2b21d 2100 if((Md1_Cfg & LSM6DSL_ACC_GYRO_INT1_TAP_MASK) || (Md2_Cfg & LSM6DSL_ACC_GYRO_INT2_TAP_MASK))
nikapov 0:cad5dab2b21d 2101 {
nikapov 0:cad5dab2b21d 2102 if((Tap_Src & LSM6DSL_ACC_GYRO_DOUBLE_TAP_EV_STATUS_MASK))
nikapov 0:cad5dab2b21d 2103 {
nikapov 0:cad5dab2b21d 2104 status->DoubleTapStatus = 1;
nikapov 0:cad5dab2b21d 2105 }
nikapov 0:cad5dab2b21d 2106 }
nikapov 0:cad5dab2b21d 2107
nikapov 0:cad5dab2b21d 2108 if((Md1_Cfg & LSM6DSL_ACC_GYRO_INT1_6D_MASK) || (Md2_Cfg & LSM6DSL_ACC_GYRO_INT2_6D_MASK))
nikapov 0:cad5dab2b21d 2109 {
nikapov 0:cad5dab2b21d 2110 if((D6D_Src & LSM6DSL_ACC_GYRO_D6D_EV_STATUS_MASK))
nikapov 0:cad5dab2b21d 2111 {
nikapov 0:cad5dab2b21d 2112 status->D6DOrientationStatus = 1;
nikapov 0:cad5dab2b21d 2113 }
nikapov 0:cad5dab2b21d 2114 }
nikapov 0:cad5dab2b21d 2115
nikapov 0:cad5dab2b21d 2116 if((Int1_Ctrl & LSM6DSL_ACC_GYRO_INT1_PEDO_MASK))
nikapov 0:cad5dab2b21d 2117 {
nikapov 0:cad5dab2b21d 2118 if((Func_Src & LSM6DSL_ACC_GYRO_PEDO_EV_STATUS_MASK))
nikapov 0:cad5dab2b21d 2119 {
nikapov 0:cad5dab2b21d 2120 status->StepStatus = 1;
nikapov 0:cad5dab2b21d 2121 }
nikapov 0:cad5dab2b21d 2122 }
nikapov 0:cad5dab2b21d 2123
nikapov 0:cad5dab2b21d 2124 if((Md1_Cfg & LSM6DSL_ACC_GYRO_INT1_TILT_MASK) || (Md2_Cfg & LSM6DSL_ACC_GYRO_INT2_TILT_MASK))
nikapov 0:cad5dab2b21d 2125 {
nikapov 0:cad5dab2b21d 2126 if((Func_Src & LSM6DSL_ACC_GYRO_TILT_EV_STATUS_MASK))
nikapov 0:cad5dab2b21d 2127 {
nikapov 0:cad5dab2b21d 2128 status->TiltStatus = 1;
nikapov 0:cad5dab2b21d 2129 }
nikapov 0:cad5dab2b21d 2130 }
nikapov 0:cad5dab2b21d 2131
nikapov 0:cad5dab2b21d 2132 return 0;
nikapov 0:cad5dab2b21d 2133 }
nikapov 0:cad5dab2b21d 2134
nikapov 0:cad5dab2b21d 2135 /**
nikapov 0:cad5dab2b21d 2136 * @brief Read the data from register
nikapov 0:cad5dab2b21d 2137 * @param reg register address
nikapov 0:cad5dab2b21d 2138 * @param data register data
nikapov 0:cad5dab2b21d 2139 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 2140 */
davide.aliprandi@st.com 6:671fd10a51b7 2141 int LSM6DSLSensor::read_reg( uint8_t reg, uint8_t *data )
nikapov 0:cad5dab2b21d 2142 {
nikapov 0:cad5dab2b21d 2143
davide.aliprandi@st.com 6:671fd10a51b7 2144 if ( LSM6DSL_ACC_GYRO_read_reg( (void *)this, reg, data, 1 ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 2145 {
nikapov 0:cad5dab2b21d 2146 return 1;
nikapov 0:cad5dab2b21d 2147 }
nikapov 0:cad5dab2b21d 2148
nikapov 0:cad5dab2b21d 2149 return 0;
nikapov 0:cad5dab2b21d 2150 }
nikapov 0:cad5dab2b21d 2151
nikapov 0:cad5dab2b21d 2152 /**
nikapov 0:cad5dab2b21d 2153 * @brief Write the data to register
nikapov 0:cad5dab2b21d 2154 * @param reg register address
nikapov 0:cad5dab2b21d 2155 * @param data register data
nikapov 0:cad5dab2b21d 2156 * @retval 0 in case of success, an error code otherwise
nikapov 0:cad5dab2b21d 2157 */
davide.aliprandi@st.com 6:671fd10a51b7 2158 int LSM6DSLSensor::write_reg( uint8_t reg, uint8_t data )
nikapov 0:cad5dab2b21d 2159 {
nikapov 0:cad5dab2b21d 2160
davide.aliprandi@st.com 6:671fd10a51b7 2161 if ( LSM6DSL_ACC_GYRO_write_reg( (void *)this, reg, &data, 1 ) == MEMS_ERROR )
nikapov 0:cad5dab2b21d 2162 {
nikapov 0:cad5dab2b21d 2163 return 1;
nikapov 0:cad5dab2b21d 2164 }
nikapov 0:cad5dab2b21d 2165
nikapov 0:cad5dab2b21d 2166 return 0;
nikapov 0:cad5dab2b21d 2167 }
nikapov 0:cad5dab2b21d 2168
nikapov 0:cad5dab2b21d 2169
davide.aliprandi@st.com 6:671fd10a51b7 2170 uint8_t LSM6DSL_io_write( void *handle, uint8_t WriteAddr, uint8_t *pBuffer, uint16_t nBytesToWrite )
nikapov 0:cad5dab2b21d 2171 {
davide.aliprandi@st.com 6:671fd10a51b7 2172 return ((LSM6DSLSensor *)handle)->io_write(pBuffer, WriteAddr, nBytesToWrite);
nikapov 0:cad5dab2b21d 2173 }
nikapov 0:cad5dab2b21d 2174
davide.aliprandi@st.com 6:671fd10a51b7 2175 uint8_t LSM6DSL_io_read( void *handle, uint8_t ReadAddr, uint8_t *pBuffer, uint16_t nBytesToRead )
nikapov 0:cad5dab2b21d 2176 {
davide.aliprandi@st.com 6:671fd10a51b7 2177 return ((LSM6DSLSensor *)handle)->io_read(pBuffer, ReadAddr, nBytesToRead);
nikapov 0:cad5dab2b21d 2178 }