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:
Thu Nov 24 16:45:55 2016 +0000
Revision:
7:4f512b172555
Parent:
6:2380444e4c75
Add possibility to choose the interrupt line for HW events

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cparata 2:21a191bd1998 1 /**
cparata 2:21a191bd1998 2 ******************************************************************************
cparata 2:21a191bd1998 3 * @file LSM6DSLSensor.h
cparata 2:21a191bd1998 4 * @author AST
cparata 2:21a191bd1998 5 * @version V1.0.0
cparata 2:21a191bd1998 6 * @date 5 August 2016
cparata 2:21a191bd1998 7 * @brief Abstract Class of an LSM6DSL Inertial Measurement Unit (IMU) 6 axes
cparata 2:21a191bd1998 8 * sensor.
cparata 2:21a191bd1998 9 ******************************************************************************
cparata 2:21a191bd1998 10 * @attention
cparata 2:21a191bd1998 11 *
cparata 2:21a191bd1998 12 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
cparata 2:21a191bd1998 13 *
cparata 2:21a191bd1998 14 * Redistribution and use in source and binary forms, with or without modification,
cparata 2:21a191bd1998 15 * are permitted provided that the following conditions are met:
cparata 2:21a191bd1998 16 * 1. Redistributions of source code must retain the above copyright notice,
cparata 2:21a191bd1998 17 * this list of conditions and the following disclaimer.
cparata 2:21a191bd1998 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
cparata 2:21a191bd1998 19 * this list of conditions and the following disclaimer in the documentation
cparata 2:21a191bd1998 20 * and/or other materials provided with the distribution.
cparata 2:21a191bd1998 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
cparata 2:21a191bd1998 22 * may be used to endorse or promote products derived from this software
cparata 2:21a191bd1998 23 * without specific prior written permission.
cparata 2:21a191bd1998 24 *
cparata 2:21a191bd1998 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
cparata 2:21a191bd1998 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
cparata 2:21a191bd1998 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
cparata 2:21a191bd1998 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
cparata 2:21a191bd1998 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
cparata 2:21a191bd1998 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
cparata 2:21a191bd1998 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
cparata 2:21a191bd1998 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
cparata 2:21a191bd1998 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
cparata 2:21a191bd1998 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
cparata 2:21a191bd1998 35 *
cparata 2:21a191bd1998 36 ******************************************************************************
cparata 2:21a191bd1998 37 */
cparata 2:21a191bd1998 38
cparata 2:21a191bd1998 39
cparata 2:21a191bd1998 40 /* Prevent recursive inclusion -----------------------------------------------*/
cparata 2:21a191bd1998 41
cparata 2:21a191bd1998 42 #ifndef __LSM6DSLSensor_H__
cparata 2:21a191bd1998 43 #define __LSM6DSLSensor_H__
cparata 2:21a191bd1998 44
cparata 2:21a191bd1998 45
cparata 2:21a191bd1998 46 /* Includes ------------------------------------------------------------------*/
cparata 2:21a191bd1998 47
cparata 2:21a191bd1998 48 #include "DevI2C.h"
cparata 2:21a191bd1998 49 #include "LSM6DSL_ACC_GYRO_driver.h"
cparata 2:21a191bd1998 50 #include "MotionSensor.h"
cparata 2:21a191bd1998 51 #include "GyroSensor.h"
cparata 2:21a191bd1998 52
cparata 2:21a191bd1998 53 /* Defines -------------------------------------------------------------------*/
cparata 2:21a191bd1998 54
cparata 2:21a191bd1998 55 #define LSM6DSL_ACC_SENSITIVITY_FOR_FS_2G 0.061 /**< Sensitivity value for 2 g full scale [mg/LSB] */
cparata 2:21a191bd1998 56 #define LSM6DSL_ACC_SENSITIVITY_FOR_FS_4G 0.122 /**< Sensitivity value for 4 g full scale [mg/LSB] */
cparata 2:21a191bd1998 57 #define LSM6DSL_ACC_SENSITIVITY_FOR_FS_8G 0.244 /**< Sensitivity value for 8 g full scale [mg/LSB] */
cparata 2:21a191bd1998 58 #define LSM6DSL_ACC_SENSITIVITY_FOR_FS_16G 0.488 /**< Sensitivity value for 16 g full scale [mg/LSB] */
cparata 2:21a191bd1998 59
cparata 2:21a191bd1998 60 #define LSM6DSL_GYRO_SENSITIVITY_FOR_FS_125DPS 04.375 /**< Sensitivity value for 125 dps full scale [mdps/LSB] */
cparata 2:21a191bd1998 61 #define LSM6DSL_GYRO_SENSITIVITY_FOR_FS_245DPS 08.750 /**< Sensitivity value for 245 dps full scale [mdps/LSB] */
cparata 2:21a191bd1998 62 #define LSM6DSL_GYRO_SENSITIVITY_FOR_FS_500DPS 17.500 /**< Sensitivity value for 500 dps full scale [mdps/LSB] */
cparata 2:21a191bd1998 63 #define LSM6DSL_GYRO_SENSITIVITY_FOR_FS_1000DPS 35.000 /**< Sensitivity value for 1000 dps full scale [mdps/LSB] */
cparata 2:21a191bd1998 64 #define LSM6DSL_GYRO_SENSITIVITY_FOR_FS_2000DPS 70.000 /**< Sensitivity value for 2000 dps full scale [mdps/LSB] */
cparata 2:21a191bd1998 65
cparata 2:21a191bd1998 66 #define LSM6DSL_PEDOMETER_THRESHOLD_LOW 0x00 /**< Lowest value of pedometer threshold */
cparata 2:21a191bd1998 67 #define LSM6DSL_PEDOMETER_THRESHOLD_MID_LOW 0x07
cparata 2:21a191bd1998 68 #define LSM6DSL_PEDOMETER_THRESHOLD_MID 0x0F
cparata 2:21a191bd1998 69 #define LSM6DSL_PEDOMETER_THRESHOLD_MID_HIGH 0x17
cparata 2:21a191bd1998 70 #define LSM6DSL_PEDOMETER_THRESHOLD_HIGH 0x1F /**< Highest value of pedometer threshold */
cparata 2:21a191bd1998 71
cparata 2:21a191bd1998 72 #define LSM6DSL_WAKE_UP_THRESHOLD_LOW 0x01 /**< Lowest value of wake up threshold */
cparata 2:21a191bd1998 73 #define LSM6DSL_WAKE_UP_THRESHOLD_MID_LOW 0x0F
cparata 2:21a191bd1998 74 #define LSM6DSL_WAKE_UP_THRESHOLD_MID 0x1F
cparata 2:21a191bd1998 75 #define LSM6DSL_WAKE_UP_THRESHOLD_MID_HIGH 0x2F
cparata 2:21a191bd1998 76 #define LSM6DSL_WAKE_UP_THRESHOLD_HIGH 0x3F /**< Highest value of wake up threshold */
cparata 2:21a191bd1998 77
cparata 2:21a191bd1998 78 #define LSM6DSL_TAP_THRESHOLD_LOW 0x01 /**< Lowest value of wake up threshold */
cparata 2:21a191bd1998 79 #define LSM6DSL_TAP_THRESHOLD_MID_LOW 0x08
cparata 2:21a191bd1998 80 #define LSM6DSL_TAP_THRESHOLD_MID 0x10
cparata 2:21a191bd1998 81 #define LSM6DSL_TAP_THRESHOLD_MID_HIGH 0x18
cparata 2:21a191bd1998 82 #define LSM6DSL_TAP_THRESHOLD_HIGH 0x1F /**< Highest value of wake up threshold */
cparata 2:21a191bd1998 83
cparata 2:21a191bd1998 84 #define LSM6DSL_TAP_SHOCK_TIME_LOW 0x00 /**< Lowest value of wake up threshold */
cparata 2:21a191bd1998 85 #define LSM6DSL_TAP_SHOCK_TIME_MID_LOW 0x01
cparata 2:21a191bd1998 86 #define LSM6DSL_TAP_SHOCK_TIME_MID_HIGH 0x02
cparata 2:21a191bd1998 87 #define LSM6DSL_TAP_SHOCK_TIME_HIGH 0x03 /**< Highest value of wake up threshold */
cparata 2:21a191bd1998 88
cparata 2:21a191bd1998 89 #define LSM6DSL_TAP_QUIET_TIME_LOW 0x00 /**< Lowest value of wake up threshold */
cparata 2:21a191bd1998 90 #define LSM6DSL_TAP_QUIET_TIME_MID_LOW 0x01
cparata 2:21a191bd1998 91 #define LSM6DSL_TAP_QUIET_TIME_MID_HIGH 0x02
cparata 2:21a191bd1998 92 #define LSM6DSL_TAP_QUIET_TIME_HIGH 0x03 /**< Highest value of wake up threshold */
cparata 2:21a191bd1998 93
cparata 2:21a191bd1998 94 #define LSM6DSL_TAP_DURATION_TIME_LOW 0x00 /**< Lowest value of wake up threshold */
cparata 2:21a191bd1998 95 #define LSM6DSL_TAP_DURATION_TIME_MID_LOW 0x04
cparata 2:21a191bd1998 96 #define LSM6DSL_TAP_DURATION_TIME_MID 0x08
cparata 2:21a191bd1998 97 #define LSM6DSL_TAP_DURATION_TIME_MID_HIGH 0x0C
cparata 2:21a191bd1998 98 #define LSM6DSL_TAP_DURATION_TIME_HIGH 0x0F /**< Highest value of wake up threshold */
cparata 2:21a191bd1998 99
cparata 4:05f28412d61b 100 /* Typedefs ------------------------------------------------------------------*/
cparata 4:05f28412d61b 101
cparata 7:4f512b172555 102 typedef enum
cparata 7:4f512b172555 103 {
cparata 7:4f512b172555 104 LSM6DSL_INT1_PIN,
cparata 7:4f512b172555 105 LSM6DSL_INT2_PIN
cparata 7:4f512b172555 106 } LSM6DSL_Interrupt_Pin_t;
cparata 7:4f512b172555 107
cparata 4:05f28412d61b 108 typedef struct
cparata 4:05f28412d61b 109 {
cparata 4:05f28412d61b 110 unsigned int FreeFallStatus : 1;
cparata 4:05f28412d61b 111 unsigned int TapStatus : 1;
cparata 4:05f28412d61b 112 unsigned int DoubleTapStatus : 1;
cparata 4:05f28412d61b 113 unsigned int WakeUpStatus : 1;
cparata 4:05f28412d61b 114 unsigned int StepStatus : 1;
cparata 4:05f28412d61b 115 unsigned int TiltStatus : 1;
cparata 4:05f28412d61b 116 unsigned int D6DOrientationStatus : 1;
cparata 4:05f28412d61b 117 } LSM6DSL_Event_Status_t;
cparata 4:05f28412d61b 118
cparata 2:21a191bd1998 119 /* Class Declaration ---------------------------------------------------------*/
cparata 2:21a191bd1998 120
cparata 2:21a191bd1998 121 /**
cparata 2:21a191bd1998 122 * Abstract class of an LSM6DSL Inertial Measurement Unit (IMU) 6 axes
cparata 2:21a191bd1998 123 * sensor.
cparata 2:21a191bd1998 124 */
cparata 2:21a191bd1998 125 class LSM6DSLSensor : public MotionSensor, public GyroSensor
cparata 2:21a191bd1998 126 {
cparata 2:21a191bd1998 127 public:
cparata 6:2380444e4c75 128 LSM6DSLSensor(DevI2C &i2c, PinName INT1_pin, PinName INT2_pin);
cparata 6:2380444e4c75 129 LSM6DSLSensor(DevI2C &i2c, PinName INT1_pin, PinName INT2_pin, uint8_t address);
cparata 2:21a191bd1998 130 virtual int Init(void *init);
cparata 2:21a191bd1998 131 virtual int ReadID(uint8_t *id);
cparata 2:21a191bd1998 132 virtual int Get_X_Axes(int32_t *pData);
cparata 2:21a191bd1998 133 virtual int Get_G_Axes(int32_t *pData);
cparata 2:21a191bd1998 134 virtual int Get_X_Sensitivity(float *pfData);
cparata 2:21a191bd1998 135 virtual int Get_G_Sensitivity(float *pfData);
cparata 2:21a191bd1998 136 virtual int Get_X_AxesRaw(int16_t *pData);
cparata 2:21a191bd1998 137 virtual int Get_G_AxesRaw(int16_t *pData);
cparata 2:21a191bd1998 138 virtual int Get_X_ODR(float *odr);
cparata 2:21a191bd1998 139 virtual int Get_G_ODR(float *odr);
cparata 2:21a191bd1998 140 virtual int Set_X_ODR(float odr);
cparata 2:21a191bd1998 141 virtual int Set_G_ODR(float odr);
cparata 2:21a191bd1998 142 virtual int Get_X_FS(float *fullScale);
cparata 2:21a191bd1998 143 virtual int Get_G_FS(float *fullScale);
cparata 2:21a191bd1998 144 virtual int Set_X_FS(float fullScale);
cparata 2:21a191bd1998 145 virtual int Set_G_FS(float fullScale);
cparata 2:21a191bd1998 146 int Enable_X(void);
cparata 2:21a191bd1998 147 int Enable_G(void);
cparata 2:21a191bd1998 148 int Disable_X(void);
cparata 2:21a191bd1998 149 int Disable_G(void);
cparata 2:21a191bd1998 150 int Enable_Free_Fall_Detection(void);
cparata 7:4f512b172555 151 int Enable_Free_Fall_Detection(LSM6DSL_Interrupt_Pin_t pin);
cparata 2:21a191bd1998 152 int Disable_Free_Fall_Detection(void);
cparata 2:21a191bd1998 153 int Set_Free_Fall_Threshold(uint8_t thr);
cparata 2:21a191bd1998 154 int Enable_Pedometer(void);
cparata 2:21a191bd1998 155 int Disable_Pedometer(void);
cparata 2:21a191bd1998 156 int Get_Step_Counter(uint16_t *step_count);
cparata 2:21a191bd1998 157 int Reset_Step_Counter(void);
cparata 2:21a191bd1998 158 int Set_Pedometer_Threshold(uint8_t thr);
cparata 2:21a191bd1998 159 int Enable_Tilt_Detection(void);
cparata 7:4f512b172555 160 int Enable_Tilt_Detection(LSM6DSL_Interrupt_Pin_t pin);
cparata 2:21a191bd1998 161 int Disable_Tilt_Detection(void);
cparata 2:21a191bd1998 162 int Enable_Wake_Up_Detection(void);
cparata 7:4f512b172555 163 int Enable_Wake_Up_Detection(LSM6DSL_Interrupt_Pin_t pin);
cparata 2:21a191bd1998 164 int Disable_Wake_Up_Detection(void);
cparata 2:21a191bd1998 165 int Set_Wake_Up_Threshold(uint8_t thr);
cparata 2:21a191bd1998 166 int Enable_Single_Tap_Detection(void);
cparata 7:4f512b172555 167 int Enable_Single_Tap_Detection(LSM6DSL_Interrupt_Pin_t pin);
cparata 2:21a191bd1998 168 int Disable_Single_Tap_Detection(void);
cparata 2:21a191bd1998 169 int Enable_Double_Tap_Detection(void);
cparata 7:4f512b172555 170 int Enable_Double_Tap_Detection(LSM6DSL_Interrupt_Pin_t pin);
cparata 2:21a191bd1998 171 int Disable_Double_Tap_Detection(void);
cparata 2:21a191bd1998 172 int Set_Tap_Threshold(uint8_t thr);
cparata 2:21a191bd1998 173 int Set_Tap_Shock_Time(uint8_t time);
cparata 2:21a191bd1998 174 int Set_Tap_Quiet_Time(uint8_t time);
cparata 2:21a191bd1998 175 int Set_Tap_Duration_Time(uint8_t time);
cparata 2:21a191bd1998 176 int Enable_6D_Orientation(void);
cparata 7:4f512b172555 177 int Enable_6D_Orientation(LSM6DSL_Interrupt_Pin_t pin);
cparata 2:21a191bd1998 178 int Disable_6D_Orientation(void);
cparata 2:21a191bd1998 179 int Get_6D_Orientation_XL(uint8_t *xl);
cparata 2:21a191bd1998 180 int Get_6D_Orientation_XH(uint8_t *xh);
cparata 2:21a191bd1998 181 int Get_6D_Orientation_YL(uint8_t *yl);
cparata 2:21a191bd1998 182 int Get_6D_Orientation_YH(uint8_t *yh);
cparata 2:21a191bd1998 183 int Get_6D_Orientation_ZL(uint8_t *zl);
cparata 2:21a191bd1998 184 int Get_6D_Orientation_ZH(uint8_t *zh);
cparata 4:05f28412d61b 185 int Get_Event_Status(LSM6DSL_Event_Status_t *status);
cparata 2:21a191bd1998 186 int ReadReg(uint8_t reg, uint8_t *data);
cparata 2:21a191bd1998 187 int WriteReg(uint8_t reg, uint8_t data);
cparata 2:21a191bd1998 188
cparata 2:21a191bd1998 189 /**
cparata 6:2380444e4c75 190 * @brief Attaching an interrupt handler to the INT1 interrupt.
cparata 6:2380444e4c75 191 * @param fptr An interrupt handler.
cparata 6:2380444e4c75 192 * @retval None.
cparata 6:2380444e4c75 193 */
cparata 6:2380444e4c75 194 void AttachINT1IRQ(void (*fptr)(void))
cparata 6:2380444e4c75 195 {
cparata 6:2380444e4c75 196 INT1_irq.rise(fptr);
cparata 6:2380444e4c75 197 }
cparata 6:2380444e4c75 198
cparata 6:2380444e4c75 199 /**
cparata 6:2380444e4c75 200 * @brief Enabling the INT1 interrupt handling.
cparata 6:2380444e4c75 201 * @param None.
cparata 6:2380444e4c75 202 * @retval None.
cparata 6:2380444e4c75 203 */
cparata 6:2380444e4c75 204 void EnableINT1IRQ(void)
cparata 6:2380444e4c75 205 {
cparata 6:2380444e4c75 206 INT1_irq.enable_irq();
cparata 6:2380444e4c75 207 }
cparata 6:2380444e4c75 208
cparata 6:2380444e4c75 209 /**
cparata 6:2380444e4c75 210 * @brief Disabling the INT1 interrupt handling.
cparata 6:2380444e4c75 211 * @param None.
cparata 6:2380444e4c75 212 * @retval None.
cparata 6:2380444e4c75 213 */
cparata 6:2380444e4c75 214 void DisableINT1IRQ(void)
cparata 6:2380444e4c75 215 {
cparata 6:2380444e4c75 216 INT1_irq.disable_irq();
cparata 6:2380444e4c75 217 }
cparata 6:2380444e4c75 218
cparata 6:2380444e4c75 219 /**
cparata 6:2380444e4c75 220 * @brief Attaching an interrupt handler to the INT2 interrupt.
cparata 6:2380444e4c75 221 * @param fptr An interrupt handler.
cparata 6:2380444e4c75 222 * @retval None.
cparata 6:2380444e4c75 223 */
cparata 6:2380444e4c75 224 void AttachINT2IRQ(void (*fptr)(void))
cparata 6:2380444e4c75 225 {
cparata 6:2380444e4c75 226 INT2_irq.rise(fptr);
cparata 6:2380444e4c75 227 }
cparata 6:2380444e4c75 228
cparata 6:2380444e4c75 229 /**
cparata 6:2380444e4c75 230 * @brief Enabling the INT2 interrupt handling.
cparata 6:2380444e4c75 231 * @param None.
cparata 6:2380444e4c75 232 * @retval None.
cparata 6:2380444e4c75 233 */
cparata 6:2380444e4c75 234 void EnableINT2IRQ(void)
cparata 6:2380444e4c75 235 {
cparata 6:2380444e4c75 236 INT2_irq.enable_irq();
cparata 6:2380444e4c75 237 }
cparata 6:2380444e4c75 238
cparata 6:2380444e4c75 239 /**
cparata 6:2380444e4c75 240 * @brief Disabling the INT2 interrupt handling.
cparata 6:2380444e4c75 241 * @param None.
cparata 6:2380444e4c75 242 * @retval None.
cparata 6:2380444e4c75 243 */
cparata 6:2380444e4c75 244 void DisableINT2IRQ(void)
cparata 6:2380444e4c75 245 {
cparata 6:2380444e4c75 246 INT2_irq.disable_irq();
cparata 6:2380444e4c75 247 }
cparata 6:2380444e4c75 248
cparata 6:2380444e4c75 249 /**
cparata 2:21a191bd1998 250 * @brief Utility function to read data.
cparata 2:21a191bd1998 251 * @param pBuffer: pointer to data to be read.
cparata 2:21a191bd1998 252 * @param RegisterAddr: specifies internal address register to be read.
cparata 2:21a191bd1998 253 * @param NumByteToRead: number of bytes to be read.
cparata 2:21a191bd1998 254 * @retval 0 if ok, an error code otherwise.
cparata 2:21a191bd1998 255 */
cparata 2:21a191bd1998 256 uint8_t IO_Read(uint8_t* pBuffer, uint8_t RegisterAddr, uint16_t NumByteToRead)
cparata 2:21a191bd1998 257 {
cparata 2:21a191bd1998 258 return (uint8_t) dev_i2c.i2c_read(pBuffer, address, RegisterAddr, NumByteToRead);
cparata 2:21a191bd1998 259 }
cparata 2:21a191bd1998 260
cparata 2:21a191bd1998 261 /**
cparata 2:21a191bd1998 262 * @brief Utility function to write data.
cparata 2:21a191bd1998 263 * @param pBuffer: pointer to data to be written.
cparata 2:21a191bd1998 264 * @param RegisterAddr: specifies internal address register to be written.
cparata 2:21a191bd1998 265 * @param NumByteToWrite: number of bytes to write.
cparata 2:21a191bd1998 266 * @retval 0 if ok, an error code otherwise.
cparata 2:21a191bd1998 267 */
cparata 2:21a191bd1998 268 uint8_t IO_Write(uint8_t* pBuffer, uint8_t RegisterAddr, uint16_t NumByteToWrite)
cparata 2:21a191bd1998 269 {
cparata 2:21a191bd1998 270 return (uint8_t) dev_i2c.i2c_write(pBuffer, address, RegisterAddr, NumByteToWrite);
cparata 2:21a191bd1998 271 }
cparata 2:21a191bd1998 272
cparata 2:21a191bd1998 273 private:
cparata 2:21a191bd1998 274 int Set_X_ODR_When_Enabled(float odr);
cparata 2:21a191bd1998 275 int Set_G_ODR_When_Enabled(float odr);
cparata 2:21a191bd1998 276 int Set_X_ODR_When_Disabled(float odr);
cparata 2:21a191bd1998 277 int Set_G_ODR_When_Disabled(float odr);
cparata 2:21a191bd1998 278
cparata 2:21a191bd1998 279 /* Helper classes. */
cparata 2:21a191bd1998 280 DevI2C &dev_i2c;
cparata 6:2380444e4c75 281
cparata 6:2380444e4c75 282 InterruptIn INT1_irq;
cparata 6:2380444e4c75 283 InterruptIn INT2_irq;
cparata 6:2380444e4c75 284
cparata 2:21a191bd1998 285 /* Configuration */
cparata 2:21a191bd1998 286 uint8_t address;
cparata 2:21a191bd1998 287
cparata 2:21a191bd1998 288 uint8_t X_isEnabled;
cparata 2:21a191bd1998 289 float X_Last_ODR;
cparata 2:21a191bd1998 290 uint8_t G_isEnabled;
cparata 2:21a191bd1998 291 float G_Last_ODR;
cparata 2:21a191bd1998 292 };
cparata 2:21a191bd1998 293
cparata 2:21a191bd1998 294 #ifdef __cplusplus
cparata 2:21a191bd1998 295 extern "C" {
cparata 2:21a191bd1998 296 #endif
cparata 2:21a191bd1998 297 uint8_t LSM6DSL_IO_Write( void *handle, uint8_t WriteAddr, uint8_t *pBuffer, uint16_t nBytesToWrite );
cparata 2:21a191bd1998 298 uint8_t LSM6DSL_IO_Read( void *handle, uint8_t ReadAddr, uint8_t *pBuffer, uint16_t nBytesToRead );
cparata 2:21a191bd1998 299 #ifdef __cplusplus
cparata 2:21a191bd1998 300 }
cparata 2:21a191bd1998 301 #endif
cparata 2:21a191bd1998 302
cparata 2:21a191bd1998 303 #endif