iNEMO inertial module: 3D accelerometer and 3D gyroscope.

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Revision:
1:fe40aec6e97a
Parent:
0:f27ce43dee4f
Child:
2:6f62c931be0b
--- a/LSM6DSOXSensor.cpp	Wed Jul 10 12:08:49 2019 +0000
+++ b/LSM6DSOXSensor.cpp	Thu Oct 29 12:45:14 2020 +0000
@@ -288,8 +288,8 @@
       *odr = 0.0f;
       break;
 
-    case LSM6DSOX_XL_ODR_6Hz5:
-      *odr = 6.5f;
+    case LSM6DSOX_XL_ODR_1Hz6:
+      *odr = 1.6f;
       break;
 
     case LSM6DSOX_XL_ODR_12Hz5:
@@ -347,15 +347,200 @@
  */
 int LSM6DSOXSensor::set_x_odr(float odr)
 {
+  return set_x_odr_with_mode(odr, LSM6DSOX_ACC_HIGH_PERFORMANCE_MODE);
+}
+
+/**
+ * @brief  Set the LSM6DSOX accelerometer sensor output data rate with operating mode
+ * @param  odr the output data rate value to be set
+ * @param  mode the accelerometer operating mode
+ * @note   This function switches off the gyroscope if Ultra Low Power Mode is set
+ * @retval 0 in case of success, an error code otherwise
+ */
+int LSM6DSOXSensor::set_x_odr_with_mode(float odr, LSM6DSOX_ACC_Operating_Mode_t mode)
+{
+  int ret = 0;
+
+  switch (mode)
+  {
+    case LSM6DSOX_ACC_HIGH_PERFORMANCE_MODE:
+    {
+      /* We must uncheck Low Power and Ultra Low Power bits if they are enabled */
+      lsm6dsox_ctrl5_c_t val1;
+      lsm6dsox_ctrl6_c_t val2;
+
+      if (lsm6dsox_read_reg(&_reg_ctx, LSM6DSOX_CTRL5_C, (uint8_t *)&val1, 1) != 0)
+      {
+        return 1;
+      }
+
+      if (val1.xl_ulp_en)
+      {
+        /* Power off the accelerometer */
+        if (_x_is_enabled == 1U)
+        {
+          if (lsm6dsox_xl_data_rate_set(&_reg_ctx, LSM6DSOX_XL_ODR_OFF) != 0)
+          {
+            return 1;
+          }
+        }
+
+        val1.xl_ulp_en = 0;
+        if (lsm6dsox_write_reg(&_reg_ctx, LSM6DSOX_CTRL5_C, (uint8_t *)&val1, 1) != 0)
+        {
+          return 1;
+        }
+      }
+
+      if (lsm6dsox_read_reg(&_reg_ctx, LSM6DSOX_CTRL6_C, (uint8_t *)&val2, 1) != 0)
+      {
+        return 1;
+      }
+
+      if (val2.xl_hm_mode)
+      {
+        val2.xl_hm_mode = 0;
+        if (lsm6dsox_write_reg(&_reg_ctx, LSM6DSOX_CTRL6_C, (uint8_t *)&val2, 1) != 0)
+        {
+          return 1;
+        }
+      }
+
+      /* ODR should be at least 12.5Hz */
+      if (odr < 12.5f)
+      {
+        odr = 12.5f;
+      }
+      break;
+    }
+    case LSM6DSOX_ACC_LOW_POWER_NORMAL_MODE:
+    {
+      /* We must uncheck Ultra Low Power bit if it is enabled */
+      /* and check the Low Power bit if it is unchecked       */
+      lsm6dsox_ctrl5_c_t val1;
+      lsm6dsox_ctrl6_c_t val2;
+
+      if (lsm6dsox_read_reg(&_reg_ctx, LSM6DSOX_CTRL5_C, (uint8_t *)&val1, 1) != 0)
+      {
+        return 1;
+      }
+
+      if (val1.xl_ulp_en)
+      {
+        /* Power off the accelerometer */
+        if (_x_is_enabled == 1U)
+        {
+          if (lsm6dsox_xl_data_rate_set(&_reg_ctx, LSM6DSOX_XL_ODR_OFF) != 0)
+          {
+            return 1;
+          }
+        }
+
+        val1.xl_ulp_en = 0;
+        if (lsm6dsox_write_reg(&_reg_ctx, LSM6DSOX_CTRL5_C, (uint8_t *)&val1, 1) != 0)
+        {
+          return 1;
+        }
+      }
+
+      if (lsm6dsox_read_reg(&_reg_ctx, LSM6DSOX_CTRL6_C, (uint8_t *)&val2, 1) != 0)
+      {
+        return 1;
+      }
+
+      if (!val2.xl_hm_mode)
+      {
+        val2.xl_hm_mode = 1U;
+        if (lsm6dsox_write_reg(&_reg_ctx, LSM6DSOX_CTRL6_C, (uint8_t *)&val2, 1) != 0)
+        {
+          return 1;
+        }
+      }
+
+      /* Now we need to limit the ODR to 208 Hz if it is higher */
+      if (odr > 208.0f)
+      {
+        odr = 208.0f;
+      }
+      break;
+    }
+    case LSM6DSOX_ACC_ULTRA_LOW_POWER_MODE:
+    {
+      /* We must uncheck Low Power bit if it is enabled                   */
+      /* and check the Ultra Low Power bit if it is unchecked             */
+      /* We must switch off gyro otherwise Ultra Low Power does not work  */
+      lsm6dsox_ctrl5_c_t val1;
+      lsm6dsox_ctrl6_c_t val2;
+
+      if (lsm6dsox_read_reg(&_reg_ctx, LSM6DSOX_CTRL6_C, (uint8_t *)&val2, 1) != 0)
+      {
+        return 1;
+      }
+
+      if (val2.xl_hm_mode)
+      {
+        val2.xl_hm_mode = 0;
+        if (lsm6dsox_write_reg(&_reg_ctx, LSM6DSOX_CTRL6_C, (uint8_t *)&val2, 1) != 0)
+        {
+          return 1;
+        }
+      }
+
+      /* Disable Gyro */
+      if (_g_is_enabled == 1U)
+      {
+        if (disable_g() != 0)
+        {
+          return 1;
+        }
+      }
+
+      if (lsm6dsox_read_reg(&_reg_ctx, LSM6DSOX_CTRL5_C, (uint8_t *)&val1, 1) != 0)
+      {
+        return 1;
+      }
+
+      if (!val1.xl_ulp_en)
+      {
+        /* Power off the accelerometer */
+        if (_x_is_enabled == 1U)
+        {
+          if (lsm6dsox_xl_data_rate_set(&_reg_ctx, LSM6DSOX_XL_ODR_OFF) != 0)
+          {
+            return 1;
+          }
+        }
+
+        val1.xl_ulp_en = 1U;
+        if (lsm6dsox_write_reg(&_reg_ctx, LSM6DSOX_CTRL5_C, (uint8_t *)&val1, 1) != 0)
+        {
+          return 1;
+        }
+      }
+
+      /* Now we need to limit the ODR to 208 Hz if it is higher */
+      if (odr > 208.0f)
+      {
+        odr = 208.0f;
+      }
+      break;
+    }
+    default:
+      ret = 1;
+      break;
+  }
+  
   /* Check if the component is enabled */
   if (_x_is_enabled == 1U)
   {
-    return set_x_odr_when_enabled(odr);
+    ret = set_x_odr_when_enabled(odr);
   }
   else
   {
-    return set_x_odr_when_disabled(odr);
+    ret = set_x_odr_when_disabled(odr);
   }
+
+  return ret;
 }
 
 /**
@@ -367,7 +552,8 @@
 {
   lsm6dsox_odr_xl_t new_odr;
 
-  new_odr = (odr <=   12.5f) ? LSM6DSOX_XL_ODR_12Hz5
+  new_odr = (odr <=    1.6f) ? LSM6DSOX_XL_ODR_1Hz6 
+          : (odr <=   12.5f) ? LSM6DSOX_XL_ODR_12Hz5
           : (odr <=   26.0f) ? LSM6DSOX_XL_ODR_26Hz
           : (odr <=   52.0f) ? LSM6DSOX_XL_ODR_52Hz
           : (odr <=  104.0f) ? LSM6DSOX_XL_ODR_104Hz
@@ -394,7 +580,8 @@
  */
 int LSM6DSOXSensor::set_x_odr_when_disabled(float odr)
 {
-  _x_last_odr = (odr <=   12.5f) ? LSM6DSOX_XL_ODR_12Hz5
+  _x_last_odr = (odr <=    1.6f) ? LSM6DSOX_XL_ODR_1Hz6
+              : (odr <=   12.5f) ? LSM6DSOX_XL_ODR_12Hz5
               : (odr <=   26.0f) ? LSM6DSOX_XL_ODR_26Hz
               : (odr <=   52.0f) ? LSM6DSOX_XL_ODR_52Hz
               : (odr <=  104.0f) ? LSM6DSOX_XL_ODR_104Hz
@@ -482,7 +669,7 @@
  */
 int LSM6DSOXSensor::get_x_axes_raw(int16_t *value)
 {
-  axis3bit16_t data_raw;
+  LSM6DSOX_Axis3bit16_t data_raw;
 
   /* Read raw data values. */
   if (lsm6dsox_acceleration_raw_get(&_reg_ctx, data_raw.u8bit) != 0)
@@ -506,7 +693,7 @@
  */
 int LSM6DSOXSensor::get_x_axes(int32_t *acceleration)
 {
-  axis3bit16_t data_raw;
+  LSM6DSOX_Axis3bit16_t data_raw;
   float sensitivity = 0.0f;
 
   /* Read raw data values. */
@@ -707,15 +894,83 @@
  */
 int LSM6DSOXSensor::set_g_odr(float odr)
 {
+  return set_g_odr_with_mode(odr, LSM6DSOX_GYRO_HIGH_PERFORMANCE_MODE);
+}
+
+/**
+ * @brief  Set the LSM6DSOX gyroscope sensor output data rate with operating mode
+ * @param  odr the output data rate value to be set
+ * @param  mode the gyroscope operating mode
+ * @retval 0 in case of success, an error code otherwise
+ */
+int LSM6DSOXSensor::set_g_odr_with_mode(float odr, LSM6DSOX_GYRO_Operating_Mode_t mode)
+{
+  int ret = 0;
+
+  switch (mode)
+  {
+    case LSM6DSOX_GYRO_HIGH_PERFORMANCE_MODE:
+    {
+      /* We must uncheck Low Power bit if it is enabled */
+      lsm6dsox_ctrl7_g_t val1;
+
+      if (lsm6dsox_read_reg(&_reg_ctx, LSM6DSOX_CTRL7_G, (uint8_t *)&val1, 1) != 0)
+      {
+        return 1;
+      }
+
+      if (val1.g_hm_mode)
+      {
+        val1.g_hm_mode = 0;
+        if (lsm6dsox_write_reg(&_reg_ctx, LSM6DSOX_CTRL7_G, (uint8_t *)&val1, 1) != 0)
+        {
+          return 1;
+        }
+      }
+      break;
+    }
+    case LSM6DSOX_GYRO_LOW_POWER_NORMAL_MODE:
+    {
+      /* We must check the Low Power bit if it is unchecked */
+      lsm6dsox_ctrl7_g_t val1;
+
+      if (lsm6dsox_read_reg(&_reg_ctx, LSM6DSOX_CTRL7_G, (uint8_t *)&val1, 1) != 0)
+      {
+        return 1;
+      }
+
+      if (!val1.g_hm_mode)
+      {
+        val1.g_hm_mode = 1U;
+        if (lsm6dsox_write_reg(&_reg_ctx, LSM6DSOX_CTRL7_G, (uint8_t *)&val1, 1) != 0)
+        {
+          return 1;
+        }
+      }
+
+      /* Now we need to limit the ODR to 208 Hz if it is higher */
+      if (odr > 208.0f)
+      {
+        odr = 208.0f;
+      }
+      break;
+    }
+    default:
+      ret = 1;
+      break;
+  }
+
   /* Check if the component is enabled */
   if (_g_is_enabled == 1U)
   {
-    return set_g_odr_when_enabled(odr);
+    ret = set_g_odr_when_enabled(odr);
   }
   else
   {
-    return set_g_odr_when_disabled(odr);
+    ret = set_g_odr_when_disabled(odr);
   }
+
+  return ret;
 }
 
 /**
@@ -845,7 +1100,7 @@
  */
 int LSM6DSOXSensor::get_g_axes_raw(int16_t *value)
 {
-  axis3bit16_t data_raw;
+  LSM6DSOX_Axis3bit16_t data_raw;
 
   /* Read raw data values. */
   if (lsm6dsox_angular_rate_raw_get(&_reg_ctx, data_raw.u8bit) != 0)
@@ -869,7 +1124,7 @@
  */
 int LSM6DSOXSensor::get_g_axes(int32_t *angular_rate)
 {
-  axis3bit16_t data_raw;
+  LSM6DSOX_Axis3bit16_t data_raw;
   float sensitivity;
 
   /* Read raw data values. */
@@ -1002,23 +1257,23 @@
         return 1;
       }
 
-      val1.md1_cfg.int1_ff = PROPERTY_ENABLE;
-
-      if (lsm6dsox_pin_int1_route_set(&_reg_ctx, &val1) != 0)
+      val1.free_fall = PROPERTY_ENABLE;
+
+      if (lsm6dsox_pin_int1_route_set(&_reg_ctx, val1) != 0)
       {
         return 1;
       }
       break;
 
     case LSM6DSOX_INT2_PIN:
-      if (lsm6dsox_pin_int2_route_get(&_reg_ctx, &val2) != 0)
+      if (lsm6dsox_pin_int2_route_get(&_reg_ctx, NULL, &val2) != 0)
       {
         return 1;
       }
 
-      val2.md2_cfg.int2_ff = PROPERTY_ENABLE;
-
-      if (lsm6dsox_pin_int2_route_set(&_reg_ctx, &val2) != 0)
+      val2.free_fall = PROPERTY_ENABLE;
+
+      if (lsm6dsox_pin_int2_route_set(&_reg_ctx, NULL, val2) != 0)
       {
         return 1;
       }
@@ -1047,21 +1302,21 @@
     return 1;
   }
 
-  val1.md1_cfg.int1_ff = PROPERTY_DISABLE;
-
-  if (lsm6dsox_pin_int1_route_set(&_reg_ctx, &val1) != 0)
+  val1.free_fall = PROPERTY_DISABLE;
+
+  if (lsm6dsox_pin_int1_route_set(&_reg_ctx, val1) != 0)
   {
     return 1;
   }
 
-  if (lsm6dsox_pin_int2_route_get(&_reg_ctx, &val2) != 0)
+  if (lsm6dsox_pin_int2_route_get(&_reg_ctx, NULL, &val2) != 0)
   {
     return 1;
   }
 
-  val2.md2_cfg.int2_ff = PROPERTY_DISABLE;
-
-  if (lsm6dsox_pin_int2_route_set(&_reg_ctx, &val2) != 0)
+  val2.free_fall = PROPERTY_DISABLE;
+
+  if (lsm6dsox_pin_int2_route_set(&_reg_ctx, NULL, val2) != 0)
   {
     return 1;
   }
@@ -1119,7 +1374,8 @@
  */
 int LSM6DSOXSensor::enable_pedometer()
 {
-    lsm6dsox_pin_int1_route_t val;
+  lsm6dsox_pin_int1_route_t val;
+  lsm6dsox_emb_sens_t emb_sens;
 
   /* Output Data Rate selection */
   if (set_x_odr(26.0f) != 0)
@@ -1133,21 +1389,44 @@
     return 1;
   }
 
+  /* Save current embedded features */
+  if (lsm6dsox_embedded_sens_get(&_reg_ctx, &emb_sens) != 0)
+  {
+    return 1;
+  }
+
+  /* Turn off embedded features */
+  if (lsm6dsox_embedded_sens_off(&_reg_ctx) != 0)
+  {
+    return 1;
+  }
+
+  /* Wait for 10 ms */
+  ThisThread::sleep_for(10);
+
   /* Enable pedometer algorithm. */
+  emb_sens.step = PROPERTY_ENABLE;
+
   if (lsm6dsox_pedo_sens_set(&_reg_ctx, LSM6DSOX_PEDO_BASE_MODE) != 0)
   {
     return 1;
   }
 
+  /* Turn on embedded features */
+  if (lsm6dsox_embedded_sens_set(&_reg_ctx, &emb_sens) != 0)
+  {
+    return 1;
+  }
+
   /* Enable step detector on INT1 pin */
   if (lsm6dsox_pin_int1_route_get(&_reg_ctx, &val) != 0)
   {
     return 1;
   }
 
-  val.emb_func_int1.int1_step_detector = PROPERTY_ENABLE;
-
-  if (lsm6dsox_pin_int1_route_set(&_reg_ctx, &val) != 0)
+  val.step_detector = PROPERTY_ENABLE;
+
+  if (lsm6dsox_pin_int1_route_set(&_reg_ctx, val) != 0)
   {
     return 1;
   }
@@ -1162,6 +1441,7 @@
 int LSM6DSOXSensor::disable_pedometer()
 {
   lsm6dsox_pin_int1_route_t val1;
+  lsm6dsox_emb_sens_t emb_sens;
 
   /* Disable step detector on INT1 pin */
   if (lsm6dsox_pin_int1_route_get(&_reg_ctx, &val1) != 0)
@@ -1169,15 +1449,23 @@
     return 1;
   }
 
-  val1.emb_func_int1.int1_step_detector = PROPERTY_DISABLE;
-
-  if (lsm6dsox_pin_int1_route_set(&_reg_ctx, &val1) != 0)
+  val1.step_detector = PROPERTY_DISABLE;
+
+  if (lsm6dsox_pin_int1_route_set(&_reg_ctx, val1) != 0)
+  {
+    return 1;
+  }
+
+  /* Save current embedded features */
+  if (lsm6dsox_embedded_sens_get(&_reg_ctx, &emb_sens) != 0)
   {
     return 1;
   }
 
   /* Disable pedometer algorithm. */
-  if (lsm6dsox_pedo_sens_set(&_reg_ctx, LSM6DSOX_PEDO_DISABLE) != 0)
+  emb_sens.step = PROPERTY_DISABLE;
+
+  if (lsm6dsox_embedded_sens_set(&_reg_ctx, &emb_sens) != 0)
   {
     return 1;
   }
@@ -1224,6 +1512,7 @@
   int ret = 0;
   lsm6dsox_pin_int1_route_t val1;
   lsm6dsox_pin_int2_route_t val2;
+  lsm6dsox_emb_sens_t emb_sens;
 
   /* Output Data Rate selection */
   if (set_x_odr(26.0f) != 0)
@@ -1237,8 +1526,26 @@
     return 1;
   }
 
-  /* Enable tilt calculation. */
-  if (lsm6dsox_tilt_sens_set(&_reg_ctx, PROPERTY_ENABLE) != 0)
+  /* Save current embedded features */
+  if (lsm6dsox_embedded_sens_get(&_reg_ctx, &emb_sens) != 0)
+  {
+    return 1;
+  }
+
+  /* Turn off embedded features */
+  if (lsm6dsox_embedded_sens_off(&_reg_ctx) != 0)
+  {
+    return 1;
+  }
+
+  /* Wait for 10 ms */
+  ThisThread::sleep_for(10);
+
+  /* Enable tilt algorithm. */
+  emb_sens.tilt = PROPERTY_ENABLE;
+
+  /* Turn on embedded features */
+  if (lsm6dsox_embedded_sens_set(&_reg_ctx, &emb_sens) != 0)
   {
     return 1;
   }
@@ -1252,23 +1559,23 @@
         return 1;
       }
 
-      val1.emb_func_int1.int1_tilt = PROPERTY_ENABLE;
-
-      if (lsm6dsox_pin_int1_route_set(&_reg_ctx, &val1) != 0)
+      val1.tilt = PROPERTY_ENABLE;
+
+      if (lsm6dsox_pin_int1_route_set(&_reg_ctx, val1) != 0)
       {
         return 1;
       }
       break;
 
     case LSM6DSOX_INT2_PIN:
-      if (lsm6dsox_pin_int2_route_get(&_reg_ctx, &val2) != 0)
+      if (lsm6dsox_pin_int2_route_get(&_reg_ctx, NULL, &val2) != 0)
       {
         return 1;
       }
 
-      val2.emb_func_int2.int2_tilt = PROPERTY_ENABLE;
-
-      if (lsm6dsox_pin_int2_route_set(&_reg_ctx, &val2) != 0)
+      val2.tilt = PROPERTY_ENABLE;
+
+      if (lsm6dsox_pin_int2_route_set(&_reg_ctx, NULL, val2) != 0)
       {
         return 1;
       }
@@ -1290,6 +1597,7 @@
 {
   lsm6dsox_pin_int1_route_t val1;
   lsm6dsox_pin_int2_route_t val2;
+  lsm6dsox_emb_sens_t emb_sens;
 
   /* Disable tilt event on both INT1 and INT2 pins */
   if (lsm6dsox_pin_int1_route_get(&_reg_ctx, &val1) != 0)
@@ -1297,27 +1605,35 @@
     return 1;
   }
 
-  val1.emb_func_int1.int1_tilt = PROPERTY_DISABLE;
-
-  if (lsm6dsox_pin_int1_route_set(&_reg_ctx, &val1) != 0)
+  val1.tilt = PROPERTY_DISABLE;
+
+  if (lsm6dsox_pin_int1_route_set(&_reg_ctx, val1) != 0)
   {
     return 1;
   }
 
-  if (lsm6dsox_pin_int2_route_get(&_reg_ctx, &val2) != 0)
+  if (lsm6dsox_pin_int2_route_get(&_reg_ctx, NULL, &val2) != 0)
   {
     return 1;
   }
 
-  val2.emb_func_int2.int2_tilt = PROPERTY_DISABLE;
-
-  if (lsm6dsox_pin_int2_route_set(&_reg_ctx, &val2) != 0)
+  val2.tilt = PROPERTY_DISABLE;
+
+  if (lsm6dsox_pin_int2_route_set(&_reg_ctx, NULL, val2) != 0)
   {
     return 1;
   }
 
-  /* Disable tilt calculation. */
-  if (lsm6dsox_tilt_sens_set(&_reg_ctx, PROPERTY_DISABLE) != 0)
+  /* Save current embedded features */
+  if (lsm6dsox_embedded_sens_get(&_reg_ctx, &emb_sens) != 0)
+  {
+    return 1;
+  }
+
+  /* Disable tilt algorithm. */
+  emb_sens.tilt = PROPERTY_DISABLE;
+
+  if (lsm6dsox_embedded_sens_set(&_reg_ctx, &emb_sens) != 0)
   {
     return 1;
   }
@@ -1369,23 +1685,23 @@
         return 1;
       }
 
-      val1.md1_cfg.int1_wu = PROPERTY_ENABLE;
-
-      if (lsm6dsox_pin_int1_route_set(&_reg_ctx, &val1) != 0)
+      val1.wake_up = PROPERTY_ENABLE;
+
+      if (lsm6dsox_pin_int1_route_set(&_reg_ctx, val1) != 0)
       {
         return 1;
       }
       break;
 
     case LSM6DSOX_INT2_PIN:
-      if (lsm6dsox_pin_int2_route_get(&_reg_ctx, &val2) != 0)
+      if (lsm6dsox_pin_int2_route_get(&_reg_ctx, NULL, &val2) != 0)
       {
         return 1;
       }
 
-      val2.md2_cfg.int2_wu = PROPERTY_ENABLE;
-
-      if (lsm6dsox_pin_int2_route_set(&_reg_ctx, &val2) != 0)
+      val2.wake_up = PROPERTY_ENABLE;
+
+      if (lsm6dsox_pin_int2_route_set(&_reg_ctx, NULL, val2) != 0)
       {
         return 1;
       }
@@ -1406,8 +1722,8 @@
  */
 int LSM6DSOXSensor::disable_wake_up_detection()
 {
-    lsm6dsox_pin_int1_route_t val1;
-    lsm6dsox_pin_int2_route_t val2;
+  lsm6dsox_pin_int1_route_t val1;
+  lsm6dsox_pin_int2_route_t val2;
 
   /* Disable wake up event on both INT1 and INT2 pins */
   if (lsm6dsox_pin_int1_route_get(&_reg_ctx, &val1) != 0)
@@ -1415,21 +1731,21 @@
     return 1;
   }
 
-  val1.md1_cfg.int1_wu = PROPERTY_DISABLE;
-
-  if (lsm6dsox_pin_int1_route_set(&_reg_ctx, &val1) != 0)
+  val1.wake_up = PROPERTY_DISABLE;
+
+  if (lsm6dsox_pin_int1_route_set(&_reg_ctx, val1) != 0)
   {
     return 1;
   }
 
-  if (lsm6dsox_pin_int2_route_get(&_reg_ctx, &val2) != 0)
+  if (lsm6dsox_pin_int2_route_get(&_reg_ctx, NULL, &val2) != 0)
   {
     return 1;
   }
 
-  val2.md2_cfg.int2_wu = PROPERTY_DISABLE;
-
-  if (lsm6dsox_pin_int2_route_set(&_reg_ctx, &val2) != 0)
+  val2.wake_up = PROPERTY_DISABLE;
+
+  if (lsm6dsox_pin_int2_route_set(&_reg_ctx, NULL, val2) != 0)
   {
     return 1;
   }
@@ -1553,23 +1869,23 @@
         return 1;
       }
 
-      val1.md1_cfg.int1_single_tap = PROPERTY_ENABLE;
-
-      if (lsm6dsox_pin_int1_route_set(&_reg_ctx, &val1) != 0)
+      val1.single_tap = PROPERTY_ENABLE;
+
+      if (lsm6dsox_pin_int1_route_set(&_reg_ctx, val1) != 0)
       {
         return 1;
       }
       break;
 
     case LSM6DSOX_INT2_PIN:
-      if (lsm6dsox_pin_int2_route_get(&_reg_ctx, &val2) != 0)
+      if (lsm6dsox_pin_int2_route_get(&_reg_ctx, NULL, &val2) != 0)
       {
         return 1;
       }
 
-      val2.md2_cfg.int2_single_tap = PROPERTY_ENABLE;
-
-      if (lsm6dsox_pin_int2_route_set(&_reg_ctx, &val2) != 0)
+      val2.single_tap = PROPERTY_ENABLE;
+
+      if (lsm6dsox_pin_int2_route_set(&_reg_ctx, NULL, val2) != 0)
       {
         return 1;
       }
@@ -1589,8 +1905,8 @@
  */
 int LSM6DSOXSensor::disable_single_tap_detection()
 {
-    lsm6dsox_pin_int1_route_t val1;
-    lsm6dsox_pin_int2_route_t val2;
+  lsm6dsox_pin_int1_route_t val1;
+  lsm6dsox_pin_int2_route_t val2;
 
   /* Disable single tap event on both INT1 and INT2 pins */
   if (lsm6dsox_pin_int1_route_get(&_reg_ctx, &val1) != 0)
@@ -1598,21 +1914,21 @@
     return 1;
   }
 
-  val1.md1_cfg.int1_single_tap = PROPERTY_DISABLE;
-
-  if (lsm6dsox_pin_int1_route_set(&_reg_ctx, &val1) != 0)
+  val1.single_tap = PROPERTY_DISABLE;
+
+  if (lsm6dsox_pin_int1_route_set(&_reg_ctx, val1) != 0)
   {
     return 1;
   }
 
-  if (lsm6dsox_pin_int2_route_get(&_reg_ctx, &val2) != 0)
+  if (lsm6dsox_pin_int2_route_get(&_reg_ctx, NULL, &val2) != 0)
   {
     return 1;
   }
 
-  val2.md2_cfg.int2_single_tap = PROPERTY_DISABLE;
-
-  if (lsm6dsox_pin_int2_route_set(&_reg_ctx, &val2) != 0)
+  val2.single_tap = PROPERTY_DISABLE;
+
+  if (lsm6dsox_pin_int2_route_set(&_reg_ctx, NULL, val2) != 0)
   {
     return 1;
   }
@@ -1736,23 +2052,23 @@
         return 1;
       }
 
-      val1.md1_cfg.int1_double_tap = PROPERTY_ENABLE;
-
-      if (lsm6dsox_pin_int1_route_set(&_reg_ctx, &val1) != 0)
+      val1.double_tap = PROPERTY_ENABLE;
+
+      if (lsm6dsox_pin_int1_route_set(&_reg_ctx, val1) != 0)
       {
         return 1;
       }
       break;
 
     case LSM6DSOX_INT2_PIN:
-      if (lsm6dsox_pin_int2_route_get(&_reg_ctx, &val2) != 0)
+      if (lsm6dsox_pin_int2_route_get(&_reg_ctx, NULL, &val2) != 0)
       {
         return 1;
       }
 
-      val2.md2_cfg.int2_double_tap = PROPERTY_ENABLE;
-
-      if (lsm6dsox_pin_int2_route_set(&_reg_ctx, &val2) != 0)
+      val2.double_tap = PROPERTY_ENABLE;
+
+      if (lsm6dsox_pin_int2_route_set(&_reg_ctx, NULL, val2) != 0)
       {
         return 1;
       }
@@ -1781,21 +2097,21 @@
     return 1;
   }
 
-  val1.md1_cfg.int1_double_tap = PROPERTY_DISABLE;
-
-  if (lsm6dsox_pin_int1_route_set(&_reg_ctx, &val1) != 0)
+  val1.double_tap = PROPERTY_DISABLE;
+
+  if (lsm6dsox_pin_int1_route_set(&_reg_ctx, val1) != 0)
   {
     return 1;
   }
 
-  if (lsm6dsox_pin_int2_route_get(&_reg_ctx, &val2) != 0)
+  if (lsm6dsox_pin_int2_route_get(&_reg_ctx, NULL, &val2) != 0)
   {
     return 1;
   }
 
-  val2.md2_cfg.int2_double_tap = PROPERTY_DISABLE;
-
-  if (lsm6dsox_pin_int2_route_set(&_reg_ctx, &val2) != 0)
+  val2.double_tap = PROPERTY_DISABLE;
+
+  if (lsm6dsox_pin_int2_route_set(&_reg_ctx, NULL, val2) != 0)
   {
     return 1;
   }
@@ -1953,23 +2269,23 @@
         return 1;
       }
 
-      val1.md1_cfg.int1_6d = PROPERTY_ENABLE;
-
-      if (lsm6dsox_pin_int1_route_set(&_reg_ctx, &val1) != 0)
+      val1.six_d = PROPERTY_ENABLE;
+
+      if (lsm6dsox_pin_int1_route_set(&_reg_ctx, val1) != 0)
       {
         return 1;
       }
       break;
 
     case LSM6DSOX_INT2_PIN:
-      if (lsm6dsox_pin_int2_route_get(&_reg_ctx, &val2) != 0)
+      if (lsm6dsox_pin_int2_route_get(&_reg_ctx, NULL, &val2) != 0)
       {
         return 1;
       }
 
-      val2.md2_cfg.int2_6d = PROPERTY_ENABLE;
-
-      if (lsm6dsox_pin_int2_route_set(&_reg_ctx, &val2) != 0)
+      val2.six_d = PROPERTY_ENABLE;
+
+      if (lsm6dsox_pin_int2_route_set(&_reg_ctx, NULL, val2) != 0)
       {
         return 1;
       }
@@ -1998,21 +2314,21 @@
     return 1;
   }
 
-  val1.md1_cfg.int1_6d = PROPERTY_DISABLE;
-
-  if (lsm6dsox_pin_int1_route_set(&_reg_ctx, &val1) != 0)
+  val1.six_d = PROPERTY_DISABLE;
+
+  if (lsm6dsox_pin_int1_route_set(&_reg_ctx, val1) != 0)
   {
     return 1;
   }
 
-  if (lsm6dsox_pin_int2_route_get(&_reg_ctx, &val2) != 0)
+  if (lsm6dsox_pin_int2_route_get(&_reg_ctx, NULL, &val2) != 0)
   {
     return 1;
   }
 
-  val2.md2_cfg.int2_6d = PROPERTY_DISABLE;
-
-  if (lsm6dsox_pin_int2_route_set(&_reg_ctx, &val2) != 0)
+  val2.six_d = PROPERTY_DISABLE;
+
+  if (lsm6dsox_pin_int2_route_set(&_reg_ctx, NULL, val2) != 0)
   {
     return 1;
   }