Example of single tap and double tap detection for LSM6DSL in X-NUCLEO-IKS01A2

Dependencies:   X_NUCLEO_IKS01A2 mbed

Fork of SingleDoubleTap_IKS01A2 by ST Expansion SW Team

Single and Double Tap Demo Application based on sensor expansion board X-NUCLEO-IKS01A2

Main function is to show how to detect the single and double tap events using the sensor expansion board and send a notification using UART to a connected PC or Desktop and display it on terminal applications like TeraTerm.
After connection has been established:
- the user can try to tap the board and then view the notification using an hyper terminal. When the single tap is detected, the LED is switched on for a while.
- the user can press the user button to pass from the single tap detection to the double tap detection feature. The user can try to double tap the board and then view the notification using an hyper terminal. When the double tap is detected, the LED is switched on twice for a while.
- the user can press again the user button to disable the single and double tap detection feature.
- the user can press the user button to enable again the single tap detection feature and so on.

Committer:
cparata
Date:
Fri Aug 12 13:42:02 2016 +0000
Revision:
0:e4f89df7a7a5
First release of Single/Double Tap for LSM6DSL in IKS01A2

Who changed what in which revision?

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