removed X-NUCLEO-COMMON and ST-INTERFACES

Dependents:   unh-hackathon-example unh-hackathon-example-raw

Fork of X_NUCLEO_IKS01A1 by ST

Files at this revision

API Documentation at this revision

Comitter:
Wolfgang Betz
Date:
Wed Jun 03 14:57:57 2015 +0200
Parent:
23:9da7be2a27c1
Child:
25:aaeaa3d8643a
Child:
27:ff11b6df3e8a
Commit message:
Upgrade to match X-CUBE-MEMS1/trunk, revision #402

Changed in this revision

Components/Common/GyroSensor.h Show annotated file Show diff for this revision Revisions of this file
Components/Common/MagneticSensor.h Show annotated file Show diff for this revision Revisions of this file
Components/Common/MotionSensor.h Show annotated file Show diff for this revision Revisions of this file
Components/Common/hum_temp.h Show annotated file Show diff for this revision Revisions of this file
Components/Common/imu_6axes.h Show annotated file Show diff for this revision Revisions of this file
Components/Common/magneto.h Show annotated file Show diff for this revision Revisions of this file
Components/Common/pressure.h Show annotated file Show diff for this revision Revisions of this file
Components/Common/readme.txt Show annotated file Show diff for this revision Revisions of this file
Components/hts221/hts221.h Show annotated file Show diff for this revision Revisions of this file
Components/hts221/hts221_class.cpp Show annotated file Show diff for this revision Revisions of this file
Components/hts221/readme.txt Show annotated file Show diff for this revision Revisions of this file
Components/lis3mdl/lis3mdl.h Show annotated file Show diff for this revision Revisions of this file
Components/lis3mdl/lis3mdl_class.cpp Show annotated file Show diff for this revision Revisions of this file
Components/lis3mdl/lis3mdl_class.h Show annotated file Show diff for this revision Revisions of this file
Components/lis3mdl/readme.txt Show annotated file Show diff for this revision Revisions of this file
Components/lps25h/lps25h.h Show annotated file Show diff for this revision Revisions of this file
Components/lps25h/lps25h_class.cpp Show annotated file Show diff for this revision Revisions of this file
Components/lps25h/lps25h_class.h Show annotated file Show diff for this revision Revisions of this file
Components/lps25h/readme.txt Show annotated file Show diff for this revision Revisions of this file
Components/lsm6ds0/lsm6ds0.h Show annotated file Show diff for this revision Revisions of this file
Components/lsm6ds0/lsm6ds0_class.cpp Show annotated file Show diff for this revision Revisions of this file
Components/lsm6ds0/lsm6ds0_class.h Show annotated file Show diff for this revision Revisions of this file
Components/lsm6ds0/readme.txt Show annotated file Show diff for this revision Revisions of this file
x_nucleo_iks01a1.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/Components/Common/GyroSensor.h	Fri May 29 16:50:56 2015 +0200
+++ b/Components/Common/GyroSensor.h	Wed Jun 03 14:57:57 2015 +0200
@@ -52,8 +52,16 @@
 	virtual int Init(void*) = 0;
 	virtual int ReadID(uint8_t*) = 0;
 
-	virtual int Get_G_Axes(int32_t*) = 0;
-	virtual int Get_G_Sensitivity(float*) = 0;
+	virtual int Get_G_Axes(int32_t *) = 0;
+	virtual int Get_G_AxesRaw(int16_t *) = 0;
+	
+	virtual int Get_G_ODR(float *) = 0;
+	virtual int Set_G_ODR(float) = 0;
+	
+	virtual int Get_G_Sensitivity(float *) = 0;
+	
+	virtual int Get_G_FS(float *) = 0;
+	virtual int Set_G_FS(float) = 0;
 
  protected:
 	GyroSensor(void) {};
--- a/Components/Common/MagneticSensor.h	Fri May 29 16:50:56 2015 +0200
+++ b/Components/Common/MagneticSensor.h	Wed Jun 03 14:57:57 2015 +0200
@@ -53,6 +53,7 @@
 	virtual int ReadID(uint8_t*) = 0;
 
 	virtual int Get_M_Axes(int32_t*) = 0;
+	virtual int Get_M_AxesRaw(int16_t *) = 0;
 
  protected:
 	MagneticSensor(void) {};
--- a/Components/Common/MotionSensor.h	Fri May 29 16:50:56 2015 +0200
+++ b/Components/Common/MotionSensor.h	Wed Jun 03 14:57:57 2015 +0200
@@ -52,8 +52,16 @@
 	virtual int Init(void*) = 0;
 	virtual int ReadID(uint8_t*) = 0;
 
-	virtual int Get_X_Axes(int32_t*) = 0;
-	virtual int Get_X_Sensitivity(float*) = 0;
+	virtual int Get_X_Axes(int32_t *) = 0;
+	virtual int Get_X_AxesRaw(int16_t *) = 0;
+
+	virtual int Get_X_ODR(float *) = 0;
+	virtual int Set_X_ODR(float) = 0;
+
+	virtual int Get_X_Sensitivity(float *) = 0;
+
+	virtual int Get_X_FS(float *) = 0;
+	virtual int Set_X_FS(float) = 0;
 
  protected:
 	MotionSensor(void) {};
--- a/Components/Common/hum_temp.h	Fri May 29 16:50:56 2015 +0200
+++ b/Components/Common/hum_temp.h	Wed Jun 03 14:57:57 2015 +0200
@@ -4,7 +4,7 @@
   * @author  MEMS Application Team
   * @version V1.2.0
   * @date    28-January-2015
-  * @brief   This header file contains the functions prototypes for the 
+  * @brief   This header file contains the functions prototypes for the
   *          humidity and temperature driver.
   ******************************************************************************
   * @attention
@@ -35,18 +35,18 @@
   *
   ******************************************************************************
   */
-  
+
 
 /* Define to prevent recursive inclusion -------------------------------------*/
 #ifndef __HUM_TEMP_H
 #define __HUM_TEMP_H
 
 #ifdef __cplusplus
- extern "C" {
+extern "C" {
 #endif
 
 /* Includes ------------------------------------------------------------------*/
-#include <stdint.h> 
+#include <stdint.h>
 
 /** @addtogroup BSP
   * @{
@@ -55,7 +55,7 @@
 /** @addtogroup Components
   * @{
   */
-    
+
 /** @addtogroup HUM_TEMP
   * @{
   */
@@ -64,9 +64,9 @@
   * @{
   */
 
-/** 
-  * @brief  Humidity and temperature init structure definition  
-  */ 
+/**
+  * @brief  Humidity and temperature init structure definition
+  */
 typedef struct
 {
   uint8_t Power_Mode;                         /* Power-down/Sleep/Normal Mode */
@@ -75,39 +75,43 @@
   uint8_t Humidity_Resolutin;                 /* Humidity Resolution */
   uint8_t Temperature_Resolution;             /* Temperature Resolution */
   uint8_t OutputDataRate;                     /* One-shot / 1Hz / 7 Hz / 12.5 Hz */
-}HUM_TEMP_InitTypeDef;
+} HUM_TEMP_InitTypeDef;
 
-/** 
-  * @brief  Humidity and temperature status enumerator definition  
-  */ 
-typedef enum {
-    HUM_TEMP_OK = 0,
-    HUM_TEMP_ERROR = 1,
-    HUM_TEMP_TIMEOUT = 2,
-    HUM_TEMP_NOT_IMPLEMENTED = 3
+/**
+  * @brief  Humidity and temperature status enumerator definition
+  */
+typedef enum
+{
+  HUM_TEMP_OK = 0,
+  HUM_TEMP_ERROR = 1,
+  HUM_TEMP_TIMEOUT = 2,
+  HUM_TEMP_NOT_IMPLEMENTED = 3
 } HUM_TEMP_StatusTypeDef;
 
 /**
  * @brief  Humidity and temperature component id enumerator definition
  */
-typedef enum {
-    HUM_TEMP_NONE_COMPONENT = 0,
-    HUM_TEMP_HTS221_COMPONENT = 1
+typedef enum
+{
+  HUM_TEMP_NONE_COMPONENT = 0,
+  HUM_TEMP_HTS221_COMPONENT = 1
 } HUM_TEMP_ComponentTypeDef;
 
 /**
  * @brief  Humidity and temperature driver extended structure definition
  */
-typedef struct {
-    HUM_TEMP_ComponentTypeDef id; /* This id must be unique for each component belonging to this class that wants to extend common class */
-    void *pData; /* This pointer is specific for each component */
-}HUM_TEMP_DrvExtTypeDef;
+typedef struct
+{
+  HUM_TEMP_ComponentTypeDef
+  id; /* This id must be unique for each component belonging to this class that wants to extend common class */
+  void *pData; /* This pointer is specific for each component */
+} HUM_TEMP_DrvExtTypeDef;
 
-/** 
-  * @brief  Humidity and temperature driver structure definition  
-  */ 
+/**
+  * @brief  Humidity and temperature driver structure definition
+  */
 typedef struct
-{  
+{
   HUM_TEMP_StatusTypeDef       (*Init)(HUM_TEMP_InitTypeDef *);
   HUM_TEMP_StatusTypeDef       (*PowerOFF)(void);
   HUM_TEMP_StatusTypeDef       (*ReadID)(uint8_t *);
@@ -120,7 +124,7 @@
   HUM_TEMP_StatusTypeDef       (*GetHumidity)(float *);
   HUM_TEMP_StatusTypeDef       (*GetTemperature)(float *);
   HUM_TEMP_DrvExtTypeDef       *extData;
-}HUM_TEMP_DrvTypeDef;
+} HUM_TEMP_DrvTypeDef;
 
 /**
   * @}
@@ -144,4 +148,4 @@
 
 #endif /* __HUM_TEMP_H */
 
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- a/Components/Common/imu_6axes.h	Fri May 29 16:50:56 2015 +0200
+++ b/Components/Common/imu_6axes.h	Wed Jun 03 14:57:57 2015 +0200
@@ -4,7 +4,7 @@
  * @author  MEMS Application Team
  * @version V1.2.0
  * @date    28-January-2015
- * @brief   This header file contains the functions prototypes for the 
+ * @brief   This header file contains the functions prototypes for the
  *          accelerometer and gyroscope driver.
  ******************************************************************************
  * @attention
@@ -45,8 +45,8 @@
 extern "C" {
 #endif
 
-    /* Includes ------------------------------------------------------------------*/
-#include <stdint.h> 
+/* Includes ------------------------------------------------------------------*/
+#include <stdint.h>
 
 /** @addtogroup BSP
   * @{
@@ -55,7 +55,7 @@
 /** @addtogroup Components
   * @{
   */
-    
+
 /** @addtogroup IMU_6AXES
   * @{
   */
@@ -63,63 +63,78 @@
 /** @defgroup IMU_6AXES_Exported_Types
   * @{
   */
-    
+
 /**
  * @brief  IMU_6AXES init structure definition
  */
 typedef struct
 {
-    uint8_t G_OutputDataRate;
-    uint8_t G_FullScale;
-    uint8_t G_X_Axis;
-    uint8_t G_Y_Axis;
-    uint8_t G_Z_Axis;
-    uint8_t X_OutputDataRate;
-    uint8_t X_FullScale;
-    uint8_t X_X_Axis;
-    uint8_t X_Y_Axis;
-    uint8_t X_Z_Axis;
-}IMU_6AXES_InitTypeDef;
+  float G_OutputDataRate;
+  float G_FullScale;
+  uint8_t G_X_Axis;
+  uint8_t G_Y_Axis;
+  uint8_t G_Z_Axis;
+  float X_OutputDataRate;
+  float X_FullScale;
+  uint8_t X_X_Axis;
+  uint8_t X_Y_Axis;
+  uint8_t X_Z_Axis;
+} IMU_6AXES_InitTypeDef;
 
 /**
  * @brief  IMU_6AXES status enumerator definition
  */
-typedef enum {
-    IMU_6AXES_OK = 0,
-    IMU_6AXES_ERROR = 1,
-    IMU_6AXES_TIMEOUT = 2,
-    IMU_6AXES_NOT_IMPLEMENTED = 3
+typedef enum
+{
+  IMU_6AXES_OK = 0,
+  IMU_6AXES_ERROR = 1,
+  IMU_6AXES_TIMEOUT = 2,
+  IMU_6AXES_NOT_IMPLEMENTED = 3
 } IMU_6AXES_StatusTypeDef;
 
 /**
  * @brief  IMU_6AXES component id enumerator definition
  */
-typedef enum {
-    IMU_6AXES_NONE_COMPONENT = 0,
-    IMU_6AXES_LSM6DS0_COMPONENT = 1,
-    IMU_6AXES_LSM6DS3_DIL24_COMPONENT = 2
+typedef enum
+{
+  IMU_6AXES_NONE_COMPONENT = 0,
+  IMU_6AXES_LSM6DS0_COMPONENT = 1,
+  IMU_6AXES_LSM6DS3_DIL24_COMPONENT = 2
 } IMU_6AXES_ComponentTypeDef;
 
 /**
  * @brief  IMU_6AXES driver extended structure definition
  */
-typedef struct {
-    IMU_6AXES_ComponentTypeDef id; /* This id must be unique for each component belonging to this class that wants to extend common class */
-    void *pData; /* This pointer is specific for each component */
-}IMU_6AXES_DrvExtTypeDef;
+typedef struct
+{
+  IMU_6AXES_ComponentTypeDef
+  id; /* This id must be unique for each component belonging to this class that wants to extend common class */
+  void *pData; /* This pointer is specific for each component */
+} IMU_6AXES_DrvExtTypeDef;
 
 /**
  * @brief  IMU_6AXES driver structure definition
  */
-typedef struct {
-    IMU_6AXES_StatusTypeDef                  (*Init)(IMU_6AXES_InitTypeDef *);
-    IMU_6AXES_StatusTypeDef                  (*Read_XG_ID)(uint8_t *);
-    IMU_6AXES_StatusTypeDef                  (*Get_X_Axes)(int32_t *);
-    IMU_6AXES_StatusTypeDef                  (*Get_G_Axes)(int32_t *);
-    IMU_6AXES_StatusTypeDef                  (*Get_X_Sensitivity) (float *);
-    IMU_6AXES_StatusTypeDef                  (*Get_G_Sensitivity) (float *);
-    IMU_6AXES_DrvExtTypeDef                  *extData;
-}IMU_6AXES_DrvTypeDef;
+typedef struct
+{
+  IMU_6AXES_StatusTypeDef       (*Init)(IMU_6AXES_InitTypeDef *);
+  IMU_6AXES_StatusTypeDef       (*Read_XG_ID)(uint8_t *);
+  IMU_6AXES_StatusTypeDef       (*Get_X_Axes)(int32_t *);
+  IMU_6AXES_StatusTypeDef       (*Get_X_AxesRaw)(int16_t *);
+  IMU_6AXES_StatusTypeDef       (*Get_G_Axes)(int32_t *);
+  IMU_6AXES_StatusTypeDef       (*Get_G_AxesRaw)(int16_t *);
+  IMU_6AXES_StatusTypeDef       (*Get_X_ODR) (float *);
+  IMU_6AXES_StatusTypeDef       (*Set_X_ODR) (float);
+  IMU_6AXES_StatusTypeDef       (*Get_X_Sensitivity) (float *);
+  IMU_6AXES_StatusTypeDef       (*Get_X_FS) (float *);
+  IMU_6AXES_StatusTypeDef       (*Set_X_FS) (float);
+  IMU_6AXES_StatusTypeDef       (*Get_G_ODR) (float *);
+  IMU_6AXES_StatusTypeDef       (*Set_G_ODR) (float);
+  IMU_6AXES_StatusTypeDef       (*Get_G_Sensitivity) (float *);
+  IMU_6AXES_StatusTypeDef       (*Get_G_FS) (float *);
+  IMU_6AXES_StatusTypeDef       (*Set_G_FS) (float);
+  IMU_6AXES_DrvExtTypeDef       *extData;
+} IMU_6AXES_DrvTypeDef;
 
 /**
   * @}
@@ -143,4 +158,4 @@
 
 #endif /* __IMU_6AXES_H */
 
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- a/Components/Common/magneto.h	Fri May 29 16:50:56 2015 +0200
+++ b/Components/Common/magneto.h	Wed Jun 03 14:57:57 2015 +0200
@@ -4,7 +4,7 @@
  * @author  MEMS Application Team
  * @version V1.2.0
  * @date    28-January-2015
- * @brief   This header file contains the functions prototypes for the 
+ * @brief   This header file contains the functions prototypes for the
  *          magneto driver.
  ******************************************************************************
  * @attention
@@ -46,7 +46,7 @@
 #endif
 
 /* Includes ------------------------------------------------------------------*/
-#include <stdint.h> 
+#include <stdint.h>
 
 /** @addtogroup BSP
   * @{
@@ -55,7 +55,7 @@
 /** @addtogroup Components
   * @{
   */
-    
+
 /** @addtogroup MAGNETO
   * @{
   */
@@ -69,53 +69,58 @@
 */
 typedef struct
 {
-    uint8_t M_OutputDataRate;
-    uint8_t M_OperatingMode;
-    uint8_t M_FullScale;
-    uint8_t M_XYOperativeMode;
-}MAGNETO_InitTypeDef;
+  uint8_t M_OutputDataRate;
+  uint8_t M_OperatingMode;
+  uint8_t M_FullScale;
+  uint8_t M_XYOperativeMode;
+} MAGNETO_InitTypeDef;
 
 /**
 * @brief  MAGNETO status enumerator definition
 */
-typedef enum {
-    MAGNETO_OK = 0,
-    MAGNETO_ERROR = 1,
-    MAGNETO_TIMEOUT = 2,
-    MAGNETO_NOT_IMPLEMENTED = 3
+typedef enum
+{
+  MAGNETO_OK = 0,
+  MAGNETO_ERROR = 1,
+  MAGNETO_TIMEOUT = 2,
+  MAGNETO_NOT_IMPLEMENTED = 3
 } MAGNETO_StatusTypeDef;
 
 /**
  * @brief  MAGNETO component id enumerator definition
  */
-typedef enum {
-    MAGNETO_NONE_COMPONENT = 0,
-    MAGNETO_LIS3MDL_COMPONENT = 1
+typedef enum
+{
+  MAGNETO_NONE_COMPONENT = 0,
+  MAGNETO_LIS3MDL_COMPONENT = 1
 } MAGNETO_ComponentTypeDef;
 
 /**
  * @brief  MAGNETO driver extended structure definition
  */
-typedef struct {
-    MAGNETO_ComponentTypeDef id; /* This id must be unique for each component belonging to this class that wants to extend common class */
-    void *pData; /* This pointer is specific for each component */
-}MAGNETO_DrvExtTypeDef;
+typedef struct
+{
+  MAGNETO_ComponentTypeDef
+  id; /* This id must be unique for each component belonging to this class that wants to extend common class */
+  void *pData; /* This pointer is specific for each component */
+} MAGNETO_DrvExtTypeDef;
 
 /**
 * @brief  MAGNETO driver structure definition
 */
 typedef struct
 {
-    MAGNETO_StatusTypeDef                   (*Init)(MAGNETO_InitTypeDef *);
-    MAGNETO_StatusTypeDef                   (*Read_M_ID)(uint8_t *);
-    MAGNETO_StatusTypeDef                   (*Get_M_Axes)(int32_t *);
-    MAGNETO_DrvExtTypeDef                   *extData;
-}MAGNETO_DrvTypeDef;
+  MAGNETO_StatusTypeDef       (*Init)(MAGNETO_InitTypeDef *);
+  MAGNETO_StatusTypeDef       (*Read_M_ID)(uint8_t *);
+  MAGNETO_StatusTypeDef       (*Get_M_Axes)(int32_t *);
+  MAGNETO_StatusTypeDef       (*Get_M_AxesRaw)(int16_t *);
+  MAGNETO_DrvExtTypeDef       *extData;
+} MAGNETO_DrvTypeDef;
 
 /**
  * @}
  */
- 
+
 /**
  * @}
  */
@@ -134,4 +139,4 @@
 
 #endif /* __MAGNETO_H */
 
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- a/Components/Common/pressure.h	Fri May 29 16:50:56 2015 +0200
+++ b/Components/Common/pressure.h	Wed Jun 03 14:57:57 2015 +0200
@@ -4,7 +4,7 @@
  * @author  MEMS Application Team
  * @version V1.2.0
  * @date    28-January-2015
- * @brief   This header file contains the functions prototypes for the 
+ * @brief   This header file contains the functions prototypes for the
  *          pressure driver.
  ******************************************************************************
  * @attention
@@ -45,8 +45,8 @@
 extern "C" {
 #endif
 
-    /* Includes ------------------------------------------------------------------*/
-#include <stdint.h> 
+/* Includes ------------------------------------------------------------------*/
+#include <stdint.h>
 
 /** @addtogroup BSP
   * @{
@@ -55,7 +55,7 @@
 /** @addtogroup Components
   * @{
   */
-    
+
 /** @addtogroup PRESSURE
   * @{
   */
@@ -69,65 +69,69 @@
  */
 typedef struct
 {
-    uint8_t OutputDataRate;
-    uint8_t PressureResolution;
-    uint8_t TemperatureResolution;
-    uint8_t DiffEnable;
-    uint8_t BlockDataUpdate;
-    uint8_t SPIMode;
+  uint8_t OutputDataRate;
+  uint8_t PressureResolution;
+  uint8_t TemperatureResolution;
+  uint8_t DiffEnable;
+  uint8_t BlockDataUpdate;
+  uint8_t SPIMode;
 } PRESSURE_InitTypeDef;
 
 /**
  * @brief  PRESSURE status enumerator definition
  */
-typedef enum {
-    PRESSURE_OK = 0,
-    PRESSURE_ERROR = 1,
-    PRESSURE_TIMEOUT = 2,
-    PRESSURE_NOT_IMPLEMENTED = 3
+typedef enum
+{
+  PRESSURE_OK = 0,
+  PRESSURE_ERROR = 1,
+  PRESSURE_TIMEOUT = 2,
+  PRESSURE_NOT_IMPLEMENTED = 3
 } PRESSURE_StatusTypeDef;
 
 /**
  * @brief  PRESSURE component id enumerator definition
  */
-typedef enum {
-    PRESSURE_NONE_COMPONENT = 0,
-    PRESSURE_LPS25H_COMPONENT = 1,
-    PRESSURE_LPS25HB_DIL24_COMPONENT = 2
+typedef enum
+{
+  PRESSURE_NONE_COMPONENT = 0,
+  PRESSURE_LPS25H_COMPONENT = 1,
+  PRESSURE_LPS25HB_DIL24_COMPONENT = 2
 } PRESSURE_ComponentTypeDef;
 
 /**
  * @brief  PRESSURE driver extended structure definition
  */
-typedef struct {
-    PRESSURE_ComponentTypeDef id; /* This id must be unique for each component belonging to this class that wants to extend common class */
-    void *pData; /* This pointer is specific for each component */
-}PRESSURE_DrvExtTypeDef;
+typedef struct
+{
+  PRESSURE_ComponentTypeDef
+  id; /* This id must be unique for each component belonging to this class that wants to extend common class */
+  void *pData; /* This pointer is specific for each component */
+} PRESSURE_DrvExtTypeDef;
 
 /**
  * @brief  PRESSURE driver structure definition
  */
 typedef struct
 {
-    PRESSURE_StatusTypeDef       (*Init)(PRESSURE_InitTypeDef *);
-    PRESSURE_StatusTypeDef       (*PowerOff)(void);
-    PRESSURE_StatusTypeDef       (*ReadID)(uint8_t *);
-    PRESSURE_StatusTypeDef       (*Reset)(void);
-    void                         (*ConfigIT)(uint16_t);
-    void                         (*EnableIT)(uint8_t);
-    void                         (*DisableIT)(uint8_t);
-    uint8_t                      (*ITStatus)(uint16_t, uint16_t);
-    void                         (*ClearIT)(uint16_t, uint16_t);
-    PRESSURE_StatusTypeDef       (*GetPressure)(float *);
-    PRESSURE_StatusTypeDef       (*GetTemperature)(float *);
-    void                         (*SlaveAddrRemap)(uint8_t);
-    PRESSURE_DrvExtTypeDef       *extData;
-}PRESSURE_DrvTypeDef;
+  PRESSURE_StatusTypeDef       (*Init)(PRESSURE_InitTypeDef *);
+  PRESSURE_StatusTypeDef       (*PowerOff)(void);
+  PRESSURE_StatusTypeDef       (*ReadID)(uint8_t *);
+  PRESSURE_StatusTypeDef       (*Reset)(void);
+  void                         (*ConfigIT)(uint16_t);
+  void                         (*EnableIT)(uint8_t);
+  void                         (*DisableIT)(uint8_t);
+  uint8_t                      (*ITStatus)(uint16_t, uint16_t);
+  void                         (*ClearIT)(uint16_t, uint16_t);
+  PRESSURE_StatusTypeDef       (*GetPressure)(float *);
+  PRESSURE_StatusTypeDef       (*GetTemperature)(float *);
+  void                         (*SlaveAddrRemap)(uint8_t);
+  PRESSURE_DrvExtTypeDef       *extData;
+} PRESSURE_DrvTypeDef;
 
 /**
  * @}
  */
- 
+
 /**
  * @}
  */
@@ -146,4 +150,4 @@
 
 #endif /* __PRESSURE_H */
 
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- a/Components/Common/readme.txt	Fri May 29 16:50:56 2015 +0200
+++ b/Components/Common/readme.txt	Wed Jun 03 14:57:57 2015 +0200
@@ -1,15 +1,15 @@
 hum_temp.h corresponds to:
-- X-CUBE-MEMS1/trunk/Drivers/BSP/Components/Common/hum_temp.h: revision #184,
-- X-CUBE-MEMS1/trunk: revision #293
+- X-CUBE-MEMS1/trunk/Drivers/BSP/Components/Common/hum_temp.h: revision #385,
+- X-CUBE-MEMS1/trunk: revision #402
 
 imu_6axes.h corresponds to:
-- X-CUBE-MEMS1/trunk/Drivers/BSP/Components/Common/imu_6axes.h: revision #184,
-- X-CUBE-MEMS1/trunk: revision #293
+- X-CUBE-MEMS1/trunk/Drivers/BSP/Components/Common/imu_6axes.h: revision #385,
+- X-CUBE-MEMS1/trunk: revision #402
 
 magneto.h corresponds to:
-- X-CUBE-MEMS1/trunk/Drivers/BSP/Components/Common/magneto.h: revision #184,
-- X-CUBE-MEMS1/trunk: revision #293
+- X-CUBE-MEMS1/trunk/Drivers/BSP/Components/Common/magneto.h: revision #385,
+- X-CUBE-MEMS1/trunk: revision #402
 
 pressure.h corresponds to:
-- X-CUBE-MEMS1/trunk/Drivers/BSP/Components/Common/pressure.h: revision #184,
-- X-CUBE-MEMS1/trunk: revision #293
+- X-CUBE-MEMS1/trunk/Drivers/BSP/Components/Common/pressure.h: revision #385,
+- X-CUBE-MEMS1/trunk: revision #402
--- a/Components/hts221/hts221.h	Fri May 29 16:50:56 2015 +0200
+++ b/Components/hts221/hts221.h	Wed Jun 03 14:57:57 2015 +0200
@@ -1,52 +1,52 @@
 /**
-  ******************************************************************************
-  * @file    hts221.h
-  * @author  MEMS Application Team
-  * @version V1.2.0
-  * @date    28-January-2015
-  * @brief   This file contains definitions for the hts221.c 
-  *          firmware driver.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
-  *
-  * Redistribution and use in source and binary forms, with or without modification,
-  * are permitted provided that the following conditions are met:
-  *   1. Redistributions of source code must retain the above copyright notice,
-  *      this list of conditions and the following disclaimer.
-  *   2. Redistributions in binary form must reproduce the above copyright notice,
-  *      this list of conditions and the following disclaimer in the documentation
-  *      and/or other materials provided with the distribution.
-  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-  *      may be used to endorse or promote products derived from this software
-  *      without specific prior written permission.
-  *
-  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-  *
-  ******************************************************************************
-  */
-  
+ ******************************************************************************
+ * @file    hts221.h
+ * @author  MEMS Application Team
+ * @version V1.2.0
+ * @date    11-February-2015
+ * @brief   This file contains definitions for the hts221.c
+ *          firmware driver.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *   1. Redistributions of source code must retain the above copyright notice,
+ *      this list of conditions and the following disclaimer.
+ *   2. Redistributions in binary form must reproduce the above copyright notice,
+ *      this list of conditions and the following disclaimer in the documentation
+ *      and/or other materials provided with the distribution.
+ *   3. Neither the name of STMicroelectronics nor the names of its contributors
+ *      may be used to endorse or promote products derived from this software
+ *      without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
 
 /* Define to prevent recursive inclusion -------------------------------------*/
 #ifndef __HTS221_H
 #define __HTS221_H
 
 #ifdef __cplusplus
- extern "C" {
+extern "C" {
 #endif
 
 /* Includes ------------------------------------------------------------------*/
-#include "../Common/hum_temp.h"
+#include "hum_temp.h"
 
 /** @addtogroup BSP
   * @{
@@ -54,19 +54,19 @@
 
 /** @addtogroup Components
  * @{
- */  
-  
+ */
+
 /** @addtogroup HTS221
   * @{
   */
-  
+
 /** @defgroup HTS221_Exported_Defines HTS221_Exported_Defines
   * @{
   */
 #ifndef NULL
-  #define NULL      (void *) 0
+#define NULL      (void *) 0
 #endif
-   
+
 /**
   * @brief Device Address
   */
@@ -86,315 +86,315 @@
  * \endcode
 */
 #define HTS221_WHO_AM_I_ADDR                        0x0F
-  
+
 
-   /**
-    * @brief Humidity resolution Register
-    * \code
-    * Read/write
-    * Default value: 0x1B
-    * 7:6 RFU
-    * 5:3 AVGT2-AVGT0: Temperature internal average.
-    *     AVGT2 | AVGT1 | AVGT0 | Nr. Internal Average
-    *   ------------------------------------------------------
-    *      0    |  0    |  0    |     2
-    *      0    |  0    |  1    |     4
-    *      0    |  1    |  0    |     8
-    *      0    |  1    |  1    |     16
-    *      1    |  0    |  0    |     32
-    *      1    |  0    |  1    |     64
-    *      1    |  1    |  0    |     128
-    *      1    |  1    |  1    |     256
-    *
-    * 2:0 AVGH2-AVGH0: Humidity internal average.
-    *     AVGH2 | AVGH1 | AVGH0 | Nr. Internal Average
-    *   ------------------------------------------------------
-    *      0    |  0    |  0    |     4
-    *      0    |  0    |  1    |     8
-    *      0    |  1    |  0    |     16
-    *      0    |  1    |  1    |     32
-    *      1    |  0    |  0    |     64
-    *      1    |  0    |  1    |     128
-    *      1    |  1    |  0    |     256
-    *      1    |  1    |  1    |     512
-    *
-    * \endcode
-    */
+/**
+ * @brief Humidity resolution Register
+ * \code
+ * Read/write
+ * Default value: 0x1B
+ * 7:6 RFU
+ * 5:3 AVGT2-AVGT0: Temperature internal average.
+ *     AVGT2 | AVGT1 | AVGT0 | Nr. Internal Average
+ *   ------------------------------------------------------
+ *      0    |  0    |  0    |     2
+ *      0    |  0    |  1    |     4
+ *      0    |  1    |  0    |     8
+ *      0    |  1    |  1    |     16
+ *      1    |  0    |  0    |     32
+ *      1    |  0    |  1    |     64
+ *      1    |  1    |  0    |     128
+ *      1    |  1    |  1    |     256
+ *
+ * 2:0 AVGH2-AVGH0: Humidity internal average.
+ *     AVGH2 | AVGH1 | AVGH0 | Nr. Internal Average
+ *   ------------------------------------------------------
+ *      0    |  0    |  0    |     4
+ *      0    |  0    |  1    |     8
+ *      0    |  1    |  0    |     16
+ *      0    |  1    |  1    |     32
+ *      1    |  0    |  0    |     64
+ *      1    |  0    |  1    |     128
+ *      1    |  1    |  0    |     256
+ *      1    |  1    |  1    |     512
+ *
+ * \endcode
+ */
 #define HTS221_RES_CONF_ADDR                        0x10
 
 
-    /**
-    * @brief INFO Register  (LSB data)
-    * \code
-    * Read/write
-    * Default value: 0x00
-    * 7:0 INFO7-INFO0: Lower part of the INFO reference
-    *                  used for traceability of the sample.
-    * \endcode
-    */
+/**
+* @brief INFO Register  (LSB data)
+* \code
+* Read/write
+* Default value: 0x00
+* 7:0 INFO7-INFO0: Lower part of the INFO reference
+*                  used for traceability of the sample.
+* \endcode
+*/
 #define HTS221_INFO_L_ADDR                          0x1E
 
 
-    /**
-    * @brief INFO & Calibration Version Register  (LSB data)
-    * \code
-    * Read/write
-    * Default value: 0x00
-    * 7:6 CALVER1:CALVER0
-    * 5:0 INFO13-INFO8: Higher part of the INFO reference
-    *                  used for traceability of the sample.
-    * \endcode
-    */
+/**
+* @brief INFO & Calibration Version Register  (LSB data)
+* \code
+* Read/write
+* Default value: 0x00
+* 7:6 CALVER1:CALVER0
+* 5:0 INFO13-INFO8: Higher part of the INFO reference
+*                  used for traceability of the sample.
+* \endcode
+*/
 #define HTS221_INFO_H_ADDR                          0x1F
 
 
-    /**
-    * @brief Humidity sensor control register 1
-    * \code
-    * Read/write
-    * Default value: 0x00
-    * 7    PD: power down control. 0 - disable; 1 - enable
-    * 6:3  RFU
-    * 2    BDU: block data update. 0 - disable; 1 - enable
-    * 1:0  RFU
-    * \endcode
-    */
+/**
+* @brief Humidity sensor control register 1
+* \code
+* Read/write
+* Default value: 0x00
+* 7    PD: power down control. 0 - disable; 1 - enable
+* 6:3  RFU
+* 2    BDU: block data update. 0 - disable; 1 - enable
+* 1:0  RFU
+* \endcode
+*/
 
 #define HTS221_CTRL_REG1_ADDR                       0x20
 
 
-    /**
-    * @brief Humidity sensor control register 2
-    * \code
-    * Read/write
-    * Default value: 0x00
-    * 7    BOOT:  Reboot memory content. 0: normal mode; 1: reboot memory content
-    * 6:3  Reserved.
-    * 2    Reserved.
-    * 1    Reserved.
-    * 0    ONE_SHOT: One shot enable. 0: waiting for start of conversion; 1: start for a new dataset
-    * \endcode
-    */
+/**
+* @brief Humidity sensor control register 2
+* \code
+* Read/write
+* Default value: 0x00
+* 7    BOOT:  Reboot memory content. 0: normal mode; 1: reboot memory content
+* 6:3  Reserved.
+* 2    Reserved.
+* 1    Reserved.
+* 0    ONE_SHOT: One shot enable. 0: waiting for start of conversion; 1: start for a new dataset
+* \endcode
+*/
 #define HTS221_CTRL_REG2_ADDR                       0x21
 
-     
-     /**
-     * @brief Humidity sensor control register 3
-     * \code
-     * Read/write
-     * Default value: 0x00
-     * [7]   DRDY_H_L: Data Ready output signal active high, low (0: active high -default;1: active low)
-     * [6]   PP_OD: Push-pull / Open Drain selection on pin 3 (DRDY) (0: push-pull - default; 1: open drain)
-     * [5:3] Reserved
-     * [2]   DRDY_EN: Data Ready enable (0: Data Ready disabled - default;1: Data Ready signal available on pin 3)
-     * [1:0] Reserved
-     * \endcode
-     */
+
+/**
+* @brief Humidity sensor control register 3
+* \code
+* Read/write
+* Default value: 0x00
+* [7]   DRDY_H_L: Data Ready output signal active high, low (0: active high -default;1: active low)
+* [6]   PP_OD: Push-pull / Open Drain selection on pin 3 (DRDY) (0: push-pull - default; 1: open drain)
+* [5:3] Reserved
+* [2]   DRDY_EN: Data Ready enable (0: Data Ready disabled - default;1: Data Ready signal available on pin 3)
+* [1:0] Reserved
+* \endcode
+*/
 #define HTS221_CTRL_REG3_ADDR                       0x22
-     
- 
-     /**
-    * @brief  Status Register
-    * \code
-    * Read
-    * Default value: 0x00
-    * 7:2  RFU
-    * 1    H_DA: Humidity data available. 0: new data for Humidity is not yet available; 1: new data for Humidity is available.
-    * 0    T_DA: Temperature data available. 0: new data for temperature is not yet available; 1: new data for temperature is available.
-    * \endcode
-    */
+
+
+/**
+* @brief  Status Register
+* \code
+* Read
+* Default value: 0x00
+* 7:2  RFU
+* 1    H_DA: Humidity data available. 0: new data for Humidity is not yet available; 1: new data for Humidity is available.
+* 0    T_DA: Temperature data available. 0: new data for temperature is not yet available; 1: new data for temperature is available.
+* \endcode
+*/
 #define HTS221_STATUS_REG_ADDR                      0x27
 
 
-    /**
-    * @brief  Humidity data (LSB).
-    * \code
-    * Read
-    * Default value: 0x00.
-    * POUT7 - POUT0: Humidity data LSB (2's complement) => signed 16 bits
-    * RAW Humidity output data: Hout(%)=(HUMIDITY_OUT_H & HUMIDITY_OUT_L).
-    * \endcode
-    */
+/**
+* @brief  Humidity data (LSB).
+* \code
+* Read
+* Default value: 0x00.
+* POUT7 - POUT0: Humidity data LSB (2's complement) => signed 16 bits
+* RAW Humidity output data: Hout(%)=(HUMIDITY_OUT_H & HUMIDITY_OUT_L).
+* \endcode
+*/
 #define HTS221_HUMIDITY_OUT_L_ADDR                  0x28
 
 
-    /**
-    * @brief  Humidity data (MSB).
-    * \code
-    * Read
-    * Default value: 0x00.
-    * POUT7 - POUT0: Humidity data LSB (2's complement) => signed 16 bits
-    * RAW Humidity output data: Hout(%)=(HUMIDITY_OUT_H & HUMIDITY_OUT_L).
-    * \endcode
-    */
+/**
+* @brief  Humidity data (MSB).
+* \code
+* Read
+* Default value: 0x00.
+* POUT7 - POUT0: Humidity data LSB (2's complement) => signed 16 bits
+* RAW Humidity output data: Hout(%)=(HUMIDITY_OUT_H & HUMIDITY_OUT_L).
+* \endcode
+*/
 #define HTS221_HUMIDITY_OUT_H_ADDR                  0x29
 
 
-    /**
-    * @brief  Temperature data (LSB).
-    * \code
-    * Read
-    * Default value: 0x00.
-    * TOUT7 - TOUT0: temperature data LSB (2's complement) => signed 16 bits
-    * RAW Temperature output data: Tout (LSB)=(TEMP_OUT_H & TEMP_OUT_L).
-    * \endcode
-    */
+/**
+* @brief  Temperature data (LSB).
+* \code
+* Read
+* Default value: 0x00.
+* TOUT7 - TOUT0: temperature data LSB (2's complement) => signed 16 bits
+* RAW Temperature output data: Tout (LSB)=(TEMP_OUT_H & TEMP_OUT_L).
+* \endcode
+*/
 #define HTS221_TEMP_OUT_L_ADDR                      0x2A
 
 
-    /**
-    * @brief  Temperature data (MSB).
-    * \code
-    * Read
-    * Default value: 0x00.
-    * TOUT15 - TOUT8: temperature data MSB (2's complement) => signed 16 bits
-    * RAW Temperature output data: Tout (LSB)=(TEMP_OUT_H & TEMP_OUT_L).
-    * \endcode
-    */
+/**
+* @brief  Temperature data (MSB).
+* \code
+* Read
+* Default value: 0x00.
+* TOUT15 - TOUT8: temperature data MSB (2's complement) => signed 16 bits
+* RAW Temperature output data: Tout (LSB)=(TEMP_OUT_H & TEMP_OUT_L).
+* \endcode
+*/
 #define HTS221_TEMP_OUT_H_ADDR                      0x2B
 
 
-    /**
-    *@brief Humidity 0 Register in %RH with sensitivity=2
-    *\code
-    * Read
-    * Value: (Unsigned 8 Bit)/2
-    *\endcode
-    */
+/**
+*@brief Humidity 0 Register in %RH with sensitivity=2
+*\code
+* Read
+* Value: (Unsigned 8 Bit)/2
+*\endcode
+*/
 #define HTS221_H0_RH_X2_ADDR                        0x30
 
 
-    /**
-    *@brief Humidity 1 Register in %RH with sensitivity=2
-    *\code
-    * Read
-    * Value: (Unsigned 8 Bit)/2
-    *\endcode
-    */
+/**
+*@brief Humidity 1 Register in %RH with sensitivity=2
+*\code
+* Read
+* Value: (Unsigned 8 Bit)/2
+*\endcode
+*/
 #define HTS221_H1_RH_X2_ADDR                        0x31
 
 
-    /**
-    *@brief Temperature 0 Register in deg with sensitivity=8
-    *\code
-    * Read
-    * Value: (Unsigned 16 Bit)/2
-    *\endcode
-    */
+/**
+*@brief Temperature 0 Register in deg with sensitivity=8
+*\code
+* Read
+* Value: (Unsigned 16 Bit)/2
+*\endcode
+*/
 #define HTS221_T0_degC_X8_ADDR                      0x32
 
 
-    /**
-    *@brief Temperature 1 Register in deg with sensitivity=8
-    *\code
-    * Read
-    * Value: (Unsigned 16 Bit)/2
-    *\endcode
-    */
+/**
+*@brief Temperature 1 Register in deg with sensitivity=8
+*\code
+* Read
+* Value: (Unsigned 16 Bit)/2
+*\endcode
+*/
 #define HTS221_T1_degC_X8_ADDR                      0x33
 
 
-    /**
-    *@brief Temperature 1/0 MSB Register in deg with sensitivity=8
-    *\code
-    * Read
-    * Value: (Unsigned 16 Bit)/2
-    * 3:2  T1(9):T1(8) MSB T1_degC_X8 bits
-    * 1:0  T0(9):T0(8) MSB T0_degC_X8 bits
-    *\endcode
-    */
+/**
+*@brief Temperature 1/0 MSB Register in deg with sensitivity=8
+*\code
+* Read
+* Value: (Unsigned 16 Bit)/2
+* 3:2  T1(9):T1(8) MSB T1_degC_X8 bits
+* 1:0  T0(9):T0(8) MSB T0_degC_X8 bits
+*\endcode
+*/
 #define HTS221_T1_T0_MSB_X8_ADDR                    0x35
 
 
-    /**
-    *@brief Humidity LOW CALIBRATION Register
-    *\code
-    * Read
-    * Default value: 0x00.
-    * H0_T0_TOUT7 - H0_T0_TOUT0: HUMIDITY data lSB (2's complement) => signed 16 bits
-    *\endcode
-    */
+/**
+*@brief Humidity LOW CALIBRATION Register
+*\code
+* Read
+* Default value: 0x00.
+* H0_T0_TOUT7 - H0_T0_TOUT0: HUMIDITY data lSB (2's complement) => signed 16 bits
+*\endcode
+*/
 #define HTS221_H0_T0_OUT_L_ADDR                     0x36
 
 
-    /**
-    *@brief Humidity LOW CALIBRATION Register
-    *\code
-    * Read
-    * Default value: 0x00.
-    * H0_T0_TOUT15 - H0_T0_TOUT8: HUMIDITY data mSB (2's complement) => signed 16 bits
-    *\endcode
-    */
+/**
+*@brief Humidity LOW CALIBRATION Register
+*\code
+* Read
+* Default value: 0x00.
+* H0_T0_TOUT15 - H0_T0_TOUT8: HUMIDITY data mSB (2's complement) => signed 16 bits
+*\endcode
+*/
 #define HTS221_H0_T0_OUT_H_ADDR                       0x37
 
 
-    /**
-    *@brief Humidity HIGH CALIBRATION Register
-    *\code
-    * Read
-    * Default value: 0x00.
-    * H1_T0_TOUT7 - H1_T0_TOUT0: HUMIDITY data lSB (2's complement) => signed 16 bits
-    *\endcode
-    */
+/**
+*@brief Humidity HIGH CALIBRATION Register
+*\code
+* Read
+* Default value: 0x00.
+* H1_T0_TOUT7 - H1_T0_TOUT0: HUMIDITY data lSB (2's complement) => signed 16 bits
+*\endcode
+*/
 #define HTS221_H1_T0_OUT_L_ADDR                       0x3A
 
 
-    /**
-    *@brief Humidity HIGH CALIBRATION Register
-    *\code
-    * Read
-    * Default value: 0x00.
-    * H1_T0_TOUT15 - H1_T0_TOUT8: HUMIDITY data mSB (2's complement) => signed 16 bits
-    *\endcode
-    */
+/**
+*@brief Humidity HIGH CALIBRATION Register
+*\code
+* Read
+* Default value: 0x00.
+* H1_T0_TOUT15 - H1_T0_TOUT8: HUMIDITY data mSB (2's complement) => signed 16 bits
+*\endcode
+*/
 #define HTS221_H1_T0_OUT_H_ADDR                       0x3B
 
 
-    /**
-    * @brief  Low Calibration Temperature Register (LSB).
-    * \code
-    * Read
-    * Default value: 0x00.
-    * T0_OUT7 - T0_OUT0: temperature data LSB (2's complement) => signed 16 bits
-    *  RAW LOW Calibration data: T0_OUT (LSB)=(T0_OUT_H & T0_OUT_L).
-    * \endcode
-    */
+/**
+* @brief  Low Calibration Temperature Register (LSB).
+* \code
+* Read
+* Default value: 0x00.
+* T0_OUT7 - T0_OUT0: temperature data LSB (2's complement) => signed 16 bits
+*  RAW LOW Calibration data: T0_OUT (LSB)=(T0_OUT_H & T0_OUT_L).
+* \endcode
+*/
 #define HTS221_T0_OUT_L_ADDR                        0x3C
 
 
-    /**
-    * @brief  Low Calibration Temperature Register (MSB)
-    * \code
-    * Read
-    * Default value: 0x00.
-    * T0_OUT15 - T0_OUT8: temperature data MSB (2's complement) => signed 16 bits
-    * RAW LOW Calibration data: T0_OUT (LSB)=(T0_OUT_H & T0_OUT_L).
-    * \endcode
-    */
+/**
+* @brief  Low Calibration Temperature Register (MSB)
+* \code
+* Read
+* Default value: 0x00.
+* T0_OUT15 - T0_OUT8: temperature data MSB (2's complement) => signed 16 bits
+* RAW LOW Calibration data: T0_OUT (LSB)=(T0_OUT_H & T0_OUT_L).
+* \endcode
+*/
 #define HTS221_T0_OUT_H_ADDR                        0x3D
 
 
-    /**
-    * @brief  Low Calibration Temperature Register (LSB).
-    * \code
-    * Read
-    * Default value: 0x00.
-    * T1_OUT7 - T1_OUT0: temperature data LSB (2's complement) => signed 16 bits
-    *  RAW LOW Calibration data: T1_OUT (LSB)=(T1_OUT_H & T1_OUT_L).
-    * \endcode
-    */
+/**
+* @brief  Low Calibration Temperature Register (LSB).
+* \code
+* Read
+* Default value: 0x00.
+* T1_OUT7 - T1_OUT0: temperature data LSB (2's complement) => signed 16 bits
+*  RAW LOW Calibration data: T1_OUT (LSB)=(T1_OUT_H & T1_OUT_L).
+* \endcode
+*/
 #define HTS221_T1_OUT_L_ADDR                        0x3E
 
 
-    /**
-    * @brief  Low Calibration Temperature Register (MSB)
-    * \code
-    * Read
-    * Default value: 0x00.
-    * T1_OUT15 - T1_OUT8: temperature data MSB (2's complement) => signed 16 bits
-    * RAW LOW Calibration data: T1_OUT (LSB)=(T1_OUT_H & T1_OUT_L).
-    * \endcode
-    */
+/**
+* @brief  Low Calibration Temperature Register (MSB)
+* \code
+* Read
+* Default value: 0x00.
+* T1_OUT15 - T1_OUT8: temperature data MSB (2's complement) => signed 16 bits
+* RAW LOW Calibration data: T1_OUT (LSB)=(T1_OUT_H & T1_OUT_L).
+* \endcode
+*/
 #define HTS221_T1_OUT_H_ADDR                        0x3F
 
 
@@ -404,9 +404,9 @@
 
 /**
  * @brief Multiple Byte. Mask for enabling multiple byte read/write command.
- */   
+ */
 #define HTS221_I2C_MULTIPLEBYTE_CMD                      ((uint8_t)0x80)
-   
+
 /**
  * @brief Device Identifier. Default value of the WHO_AM_I register.
  */
@@ -422,7 +422,7 @@
 #define HTS221_MODE_MASK                    ((uint8_t)0x80)
 /**
   * @}
-  */ 
+  */
 
 
 /** @defgroup HTS221_Block_Data_Update_Mode_Selection_CTRL_REG1 HTS221_Block_Data_Update_Mode_Selection_CTRL_REG1
@@ -459,7 +459,7 @@
 #define HTS221_BOOT_MASK                    ((uint8_t)0x80)
 /**
   * @}
-  */  
+  */
 
 
 /** @defgroup HTS221_One_Shot_Selection_CTRL_REG2 HTS221_One_Shot_Selection_CTRL_REG2
@@ -540,26 +540,28 @@
 /* Data resolution */
 #define HUM_DECIMAL_DIGITS                  (2)
 #define TEMP_DECIMAL_DIGITS                 (2)
-  
+
 /**
   * @}
   */
 
- 
+
 /** @defgroup HTS221_Imported_Functions HTS221_Imported_Functions
   * @{
   */
 /* HUM_TEMP sensor IO functions */
 extern HUM_TEMP_StatusTypeDef HTS221_IO_Init(void);
-extern HUM_TEMP_StatusTypeDef HTS221_IO_Write(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr, uint16_t NumByteToWrite);
-extern HUM_TEMP_StatusTypeDef HTS221_IO_Read(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr, uint16_t NumByteToRead);
+extern HUM_TEMP_StatusTypeDef HTS221_IO_Write(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr,
+    uint16_t NumByteToWrite);
+extern HUM_TEMP_StatusTypeDef HTS221_IO_Read(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr,
+    uint16_t NumByteToRead);
 extern void HTS221_IO_ITConfig( void );
 
 /**
   * @}
   */
 
-/* ------------------------------------------------------- */ 
+/* ------------------------------------------------------- */
 /* Here you should declare the internal struct of          */
 /* extended features of HTS221. See the example of         */
 /* LSM6DS3 in lsm6ds3.h                                    */
@@ -573,25 +575,25 @@
 extern HUM_TEMP_DrvExtTypeDef Hts221Drv_ext;
 /**
   * @}
-  */ 
-  
+  */
+
 /**
   * @}
-  */ 
+  */
 
 /**
   * @}
-  */ 
+  */
 
 /**
   * @}
-  */ 
-  
+  */
+
 #ifdef __cplusplus
-  }
+}
 #endif
-  
+
 #endif /* __HTS221_H */
 
 
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- a/Components/hts221/hts221_class.cpp	Fri May 29 16:50:56 2015 +0200
+++ b/Components/hts221/hts221_class.cpp	Wed Jun 03 14:57:57 2015 +0200
@@ -36,8 +36,8 @@
 */
 
 /* betzw - based on:
-           X-CUBE-MEMS1/trunk/Drivers/BSP/Components/hts221/hts221.c: revision #270,
-           X-CUBE-MEMS1/trunk: revision #293
+           X-CUBE-MEMS1/trunk/Drivers/BSP/Components/hts221/hts221.c: revision #395,
+           X-CUBE-MEMS1/trunk: revision #402
 */
 
 /* Includes ------------------------------------------------------------------*/
@@ -49,93 +49,94 @@
 /* Methods -------------------------------------------------------------------*/
 /**
  * @brief  HTS221 Calibration procedure
- * @param  None
  * @retval HUM_TEMP_OK in case of success, an error code otherwise
  */
 HUM_TEMP_StatusTypeDef HTS221::HTS221_Calibration(void)
 {
-    /* Temperature Calibration */
-    /* Temperature in degree for calibration ( "/8" to obtain float) */
-    uint16_t T0_degC_x8_L, T0_degC_x8_H, T1_degC_x8_L, T1_degC_x8_H;
-    uint8_t H0_rh_x2, H1_rh_x2;
-    uint8_t tempReg[2] = {0,0};
-
-    if(HTS221_IO_Read(tempReg, HTS221_T0_degC_X8_ADDR, 1) != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-    
-    T0_degC_x8_L = (uint16_t)tempReg[0];
-
-    if(HTS221_IO_Read(tempReg, HTS221_T1_T0_MSB_X8_ADDR, 1) != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-    
-    T0_degC_x8_H = (uint16_t) (tempReg[0] & 0x03);
-    T0_degC = ((float)((T0_degC_x8_H<<8) | (T0_degC_x8_L)))/8;
-
-    if(HTS221_IO_Read(tempReg, HTS221_T1_degC_X8_ADDR, 1) != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-    
-    T1_degC_x8_L = (uint16_t)tempReg[0];
-
-    if(HTS221_IO_Read(tempReg, HTS221_T1_T0_MSB_X8_ADDR, 1) != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-    
-    T1_degC_x8_H = (uint16_t) (tempReg[0] & 0x0C);
-    T1_degC_x8_H = T1_degC_x8_H >> 2;
-    T1_degC = ((float)((T1_degC_x8_H<<8) | (T1_degC_x8_L)))/8;
-
-    if(HTS221_IO_Read(tempReg, (HTS221_T0_OUT_L_ADDR | HTS221_I2C_MULTIPLEBYTE_CMD), 2) != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-    
-    T0_out = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
-
-    if(HTS221_IO_Read(tempReg, (HTS221_T1_OUT_L_ADDR | HTS221_I2C_MULTIPLEBYTE_CMD), 2) != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-    
-    T1_out = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
-
-    /* Humidity Calibration */
-    /* Humidity in degree for calibration ( "/2" to obtain float) */
-
-    if(HTS221_IO_Read(&H0_rh_x2, HTS221_H0_RH_X2_ADDR, 1) != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-
-    if(HTS221_IO_Read(&H1_rh_x2, HTS221_H1_RH_X2_ADDR, 1) != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-
-    if(HTS221_IO_Read(&tempReg[0], (HTS221_H0_T0_OUT_L_ADDR | HTS221_I2C_MULTIPLEBYTE_CMD), 2) != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-    
-    H0_T0_out = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
-
-    if(HTS221_IO_Read(&tempReg[0], (HTS221_H1_T0_OUT_L_ADDR  | HTS221_I2C_MULTIPLEBYTE_CMD), 2) != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-    
-    H1_T0_out = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
-
-    H0_rh = ((float)H0_rh_x2)/2;
-    H1_rh = ((float)H1_rh_x2)/2;
-    
-    return HUM_TEMP_OK;
+  /* Temperature Calibration */
+  /* Temperature in degree for calibration ( "/8" to obtain float) */
+  uint16_t T0_degC_x8_L, T0_degC_x8_H, T1_degC_x8_L, T1_degC_x8_H;
+  uint8_t H0_rh_x2, H1_rh_x2;
+  uint8_t tempReg[2] = {0, 0};
+  
+  if(HTS221_IO_Read(tempReg, HTS221_T0_degC_X8_ADDR, 1) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  T0_degC_x8_L = (uint16_t)tempReg[0];
+  
+  if(HTS221_IO_Read(tempReg, HTS221_T1_T0_MSB_X8_ADDR, 1) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  T0_degC_x8_H = (uint16_t) (tempReg[0] & 0x03);
+  T0_degC = ((float)((T0_degC_x8_H << 8) | (T0_degC_x8_L))) / 8;
+  
+  if(HTS221_IO_Read(tempReg, HTS221_T1_degC_X8_ADDR, 1) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  T1_degC_x8_L = (uint16_t)tempReg[0];
+  
+  if(HTS221_IO_Read(tempReg, HTS221_T1_T0_MSB_X8_ADDR, 1) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  T1_degC_x8_H = (uint16_t) (tempReg[0] & 0x0C);
+  T1_degC_x8_H = T1_degC_x8_H >> 2;
+  T1_degC = ((float)((T1_degC_x8_H << 8) | (T1_degC_x8_L))) / 8;
+  
+  if(HTS221_IO_Read(tempReg, (HTS221_T0_OUT_L_ADDR | HTS221_I2C_MULTIPLEBYTE_CMD), 2) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  T0_out = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);
+  
+  if(HTS221_IO_Read(tempReg, (HTS221_T1_OUT_L_ADDR | HTS221_I2C_MULTIPLEBYTE_CMD), 2) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  T1_out = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);
+  
+  /* Humidity Calibration */
+  /* Humidity in degree for calibration ( "/2" to obtain float) */
+  
+  if(HTS221_IO_Read(&H0_rh_x2, HTS221_H0_RH_X2_ADDR, 1) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  if(HTS221_IO_Read(&H1_rh_x2, HTS221_H1_RH_X2_ADDR, 1) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  if(HTS221_IO_Read(&tempReg[0], (HTS221_H0_T0_OUT_L_ADDR | HTS221_I2C_MULTIPLEBYTE_CMD),
+                    2) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  H0_T0_out = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);
+  
+  if(HTS221_IO_Read(&tempReg[0], (HTS221_H1_T0_OUT_L_ADDR  | HTS221_I2C_MULTIPLEBYTE_CMD),
+                    2) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  H1_T0_out = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);
+  
+  H0_rh = ((float)H0_rh_x2) / 2;
+  H1_rh = ((float)H1_rh_x2) / 2;
+  
+  return HUM_TEMP_OK;
 }
 
 
@@ -145,42 +146,42 @@
  * @retval HUM_TEMP_OK in case of success, an error code otherwise
  */
 HUM_TEMP_StatusTypeDef HTS221::HTS221_Init(HUM_TEMP_InitTypeDef *HTS221_Init)
-{  
-    uint8_t tmp = 0x00;
-
-    /* Configure the low level interface ---------------------------------------*/
-    if(HTS221_IO_Init() != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-
-    if(HTS221_Power_On() != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-
-    if(HTS221_Calibration() != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-
-    if(HTS221_IO_Read(&tmp, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-
-    /* Output Data Rate selection */
-    tmp &= ~(HTS221_ODR_MASK);
-    tmp |= HTS221_Init->OutputDataRate;
-
-    if(HTS221_IO_Write(&tmp, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-    
-    HTS221_IO_ITConfig();
-    
-    return HUM_TEMP_OK;
+{
+  uint8_t tmp = 0x00;
+  
+  /* Configure the low level interface ---------------------------------------*/
+  if(HTS221_IO_Init() != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  if(HTS221_Power_On() != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  if(HTS221_Calibration() != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  if(HTS221_IO_Read(&tmp, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  /* Output Data Rate selection */
+  tmp &= ~(HTS221_ODR_MASK);
+  tmp |= HTS221_Init->OutputDataRate;
+  
+  if(HTS221_IO_Write(&tmp, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  HTS221_IO_ITConfig();
+  
+  return HUM_TEMP_OK;
 }
 
 /**
@@ -190,39 +191,38 @@
  */
 HUM_TEMP_StatusTypeDef HTS221::HTS221_ReadID(uint8_t *ht_id)
 {
-    if(!ht_id)
-    { 
-      return HUM_TEMP_ERROR; 
-    }
- 
-    return HTS221_IO_Read(ht_id, HTS221_WHO_AM_I_ADDR, 1);
+  if(!ht_id)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  return HTS221_IO_Read(ht_id, HTS221_WHO_AM_I_ADDR, 1);
 }
 
 /**
  * @brief  Reboot memory content of HTS221
- * @param  None
  * @retval HUM_TEMP_OK in case of success, an error code otherwise
  */
 HUM_TEMP_StatusTypeDef HTS221::HTS221_RebootCmd(void)
 {
-    uint8_t tmpreg;
-
-    /* Read CTRL_REG2 register */
-    if(HTS221_IO_Read(&tmpreg, HTS221_CTRL_REG2_ADDR, 1) != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-
-    /* Enable or Disable the reboot memory */
-    tmpreg |= HTS221_BOOT_REBOOTMEMORY;
-
-    /* Write value to MEMS CTRL_REG2 regsister */
-    if(HTS221_IO_Write(&tmpreg, HTS221_CTRL_REG2_ADDR, 1) != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-    
-    return HUM_TEMP_OK;
+  uint8_t tmpreg;
+  
+  /* Read CTRL_REG2 register */
+  if(HTS221_IO_Read(&tmpreg, HTS221_CTRL_REG2_ADDR, 1) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  /* Enable or Disable the reboot memory */
+  tmpreg |= HTS221_BOOT_REBOOTMEMORY;
+  
+  /* Write value to MEMS CTRL_REG2 regsister */
+  if(HTS221_IO_Write(&tmpreg, HTS221_CTRL_REG2_ADDR, 1) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  return HUM_TEMP_OK;
 }
 
 
@@ -233,64 +233,67 @@
  */
 HUM_TEMP_StatusTypeDef HTS221::HTS221_GetHumidity(float* pfData)
 {
-    int16_t H_T_out, humidity_t;
-    uint8_t tempReg[2] = {0,0};
-    uint8_t tmp = 0x00;
-    float H_rh;
-    
-    if(HTS221_IO_Read(&tmp, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
+  int16_t H_T_out, humidity_t;
+  uint8_t tempReg[2] = {0, 0};
+  uint8_t tmp = 0x00;
+  float H_rh;
+  
+  if(HTS221_IO_Read(&tmp, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  /* Output Data Rate selection */
+  tmp &= (HTS221_ODR_MASK);
+  
+  if(tmp == 0x00)
+  {
+    if(HTS221_IO_Read(&tmp, HTS221_CTRL_REG2_ADDR, 1) != HUM_TEMP_OK)
     {
       return HUM_TEMP_ERROR;
     }
-
-    /* Output Data Rate selection */
-    tmp &= (HTS221_ODR_MASK);
     
-    if(tmp == 0x00)
-    {
-      if(HTS221_IO_Read(&tmp, HTS221_CTRL_REG2_ADDR, 1) != HUM_TEMP_OK)
-      {
-        return HUM_TEMP_ERROR;
-      }
-
-      /* Serial Interface Mode selection */
-      tmp &= ~(HTS221_ONE_SHOT_MASK);
-      tmp |= HTS221_ONE_SHOT_START;
-
-      if(HTS221_IO_Write(&tmp, HTS221_CTRL_REG2_ADDR, 1) != HUM_TEMP_OK)
-      {
-        return HUM_TEMP_ERROR;
-      }
+    /* Serial Interface Mode selection */
+    tmp &= ~(HTS221_ONE_SHOT_MASK);
+    tmp |= HTS221_ONE_SHOT_START;
     
-      do{
-      
-        if(HTS221_IO_Read(&tmp, HTS221_STATUS_REG_ADDR, 1) != HUM_TEMP_OK)
-        {
-          return HUM_TEMP_ERROR;
-        }
-         
-      }while(!(tmp&&0x02));
-    }
-    
-    
-    if(HTS221_IO_Read(&tempReg[0], (HTS221_HUMIDITY_OUT_L_ADDR | HTS221_I2C_MULTIPLEBYTE_CMD), 2) != HUM_TEMP_OK)
+    if(HTS221_IO_Write(&tmp, HTS221_CTRL_REG2_ADDR, 1) != HUM_TEMP_OK)
     {
       return HUM_TEMP_ERROR;
     }
     
-    H_T_out = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
-
-    H_rh = ( float )(((( H_T_out - H0_T0_out ) * ( H1_rh - H0_rh )) / ( H1_T0_out - H0_T0_out )) + H0_rh );
-
-    // Truncate to specific number of decimal digits
-    humidity_t = (uint16_t)(H_rh * pow(10.0f,HUM_DECIMAL_DIGITS));
-    *pfData = ((float)humidity_t)/pow(10.0f,HUM_DECIMAL_DIGITS);
+    do
+    {
     
-    // Prevent data going below 0% and above 100% due to linear interpolation
-    if ( *pfData <   0.0f ) *pfData =   0.0f;
-    if ( *pfData > 100.0f ) *pfData = 100.0f;
-    
-    return HUM_TEMP_OK;
+      if(HTS221_IO_Read(&tmp, HTS221_STATUS_REG_ADDR, 1) != HUM_TEMP_OK)
+      {
+        return HUM_TEMP_ERROR;
+      }
+      
+    }
+    while(!(tmp && 0x02));
+  }
+  
+  
+  if(HTS221_IO_Read(&tempReg[0], (HTS221_HUMIDITY_OUT_L_ADDR | HTS221_I2C_MULTIPLEBYTE_CMD),
+                    2) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  H_T_out = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);
+  
+  H_rh = ( float )(((( H_T_out - H0_T0_out ) * ( H1_rh - H0_rh )) / ( H1_T0_out - H0_T0_out )) + H0_rh );
+  
+  // Truncate to specific number of decimal digits
+  humidity_t = (uint16_t)(H_rh * pow(10, HUM_DECIMAL_DIGITS));
+  *pfData = ((float)humidity_t) / pow(10, HUM_DECIMAL_DIGITS);
+  
+  // Prevent data going below 0% and above 100% due to linear interpolation
+  if ( *pfData <   0.0f ) *pfData =   0.0f;
+  if ( *pfData > 100.0f ) *pfData = 100.0f;
+  
+  return HUM_TEMP_OK;
 }
 
 /**
@@ -300,112 +303,115 @@
  */
 HUM_TEMP_StatusTypeDef HTS221::HTS221_GetTemperature(float* pfData)
 {
-    int16_t T_out, temperature_t;
-    uint8_t tempReg[2] = {0,0};
-    uint8_t tmp = 0x00;
-    float T_degC;
-    
-    if(HTS221_IO_Read(&tmp, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-
-    /* Output Data Rate selection */
-    tmp &= (HTS221_ODR_MASK);
-    
-    if(tmp == 0x00)
-    {
-      if(HTS221_IO_Read(&tmp, HTS221_CTRL_REG2_ADDR, 1) != HUM_TEMP_OK)
-      {
-        return HUM_TEMP_ERROR;
-      }
-
-      /* Serial Interface Mode selection */
-      tmp &= ~(HTS221_ONE_SHOT_MASK);
-      tmp |= HTS221_ONE_SHOT_START;
-
-      if(HTS221_IO_Write(&tmp, HTS221_CTRL_REG2_ADDR, 1) != HUM_TEMP_OK)
-      {
-        return HUM_TEMP_ERROR;
-      }
-    
-      do{
-      
-        if(HTS221_IO_Read(&tmp, HTS221_STATUS_REG_ADDR, 1) != HUM_TEMP_OK)
-        {
-          return HUM_TEMP_ERROR;
-        }
-       
-      }while(!(tmp&&0x01));
-    }
-
-    if(HTS221_IO_Read(&tempReg[0], (HTS221_TEMP_OUT_L_ADDR | HTS221_I2C_MULTIPLEBYTE_CMD), 2) != HUM_TEMP_OK)
+  int16_t T_out, temperature_t;
+  uint8_t tempReg[2] = {0, 0};
+  uint8_t tmp = 0x00;
+  float T_degC;
+  
+  if(HTS221_IO_Read(&tmp, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  /* Output Data Rate selection */
+  tmp &= (HTS221_ODR_MASK);
+  
+  if(tmp == 0x00)
+  {
+    if(HTS221_IO_Read(&tmp, HTS221_CTRL_REG2_ADDR, 1) != HUM_TEMP_OK)
     {
       return HUM_TEMP_ERROR;
     }
     
-    T_out = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
-
-    T_degC = ((float)(T_out - T0_out))/(T1_out - T0_out) * (T1_degC - T0_degC) + T0_degC;
-
-    temperature_t = (int16_t)(T_degC * pow(10.0f,TEMP_DECIMAL_DIGITS));
-
-    *pfData = ((float)temperature_t)/pow(10.0f,TEMP_DECIMAL_DIGITS);
+    /* Serial Interface Mode selection */
+    tmp &= ~(HTS221_ONE_SHOT_MASK);
+    tmp |= HTS221_ONE_SHOT_START;
+    
+    if(HTS221_IO_Write(&tmp, HTS221_CTRL_REG2_ADDR, 1) != HUM_TEMP_OK)
+    {
+      return HUM_TEMP_ERROR;
+    }
+    
+    do
+    {
     
-    return HUM_TEMP_OK;
+      if(HTS221_IO_Read(&tmp, HTS221_STATUS_REG_ADDR, 1) != HUM_TEMP_OK)
+      {
+        return HUM_TEMP_ERROR;
+      }
+      
+    }
+    while(!(tmp && 0x01));
+  }
+  
+  if(HTS221_IO_Read(&tempReg[0], (HTS221_TEMP_OUT_L_ADDR | HTS221_I2C_MULTIPLEBYTE_CMD),
+                    2) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  T_out = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);
+  
+  T_degC = ((float)(T_out - T0_out)) / (T1_out - T0_out) * (T1_degC - T0_degC) + T0_degC;
+  
+  temperature_t = (int16_t)(T_degC * pow(10, TEMP_DECIMAL_DIGITS));
+  
+  *pfData = ((float)temperature_t) / pow(10, TEMP_DECIMAL_DIGITS);
+  
+  return HUM_TEMP_OK;
 }
 
 
 /**
  * @brief  Exit the shutdown mode for HTS221
- * @param  None
  * @retval HUM_TEMP_OK in case of success, an error code otherwise
  */
 HUM_TEMP_StatusTypeDef HTS221::HTS221_Power_On(void)
 {
-    uint8_t tmpReg;
-
-    /* Read the register content */
-    if(HTS221_IO_Read(&tmpReg, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-
-    /* Set the power down bit */
-    tmpReg |= HTS221_MODE_ACTIVE;
-
-    /* Write register */
-    if(HTS221_IO_Write(&tmpReg, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-    
-    return HUM_TEMP_OK;
+  uint8_t tmpReg;
+  
+  /* Read the register content */
+  if(HTS221_IO_Read(&tmpReg, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  /* Set the power down bit */
+  tmpReg |= HTS221_MODE_ACTIVE;
+  
+  /* Write register */
+  if(HTS221_IO_Write(&tmpReg, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  return HUM_TEMP_OK;
 }
 
 /**
  * @brief  Enter the shutdown mode for HTS221
- * @param  None
  * @retval HUM_TEMP_OK in case of success, an error code otherwise
  */
 HUM_TEMP_StatusTypeDef HTS221::HTS221_Power_OFF(void)
 {
-    uint8_t tmpReg;
-
-    /* Read the register content */
-    if(HTS221_IO_Read(&tmpReg, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
+  uint8_t tmpReg;
+  
+  /* Read the register content */
+  if(HTS221_IO_Read(&tmpReg, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  /* Reset the power down bit */
+  tmpReg &= ~(HTS221_MODE_ACTIVE);
+  
+  /* Write register */
+  if(HTS221_IO_Write(&tmpReg, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
+  {
+    return HUM_TEMP_ERROR;
+  }
+  
+  return HUM_TEMP_OK;
+}
 
-    /* Reset the power down bit */
-    tmpReg &= ~(HTS221_MODE_ACTIVE);
-
-    /* Write register */
-    if(HTS221_IO_Write(&tmpReg, HTS221_CTRL_REG1_ADDR, 1) != HUM_TEMP_OK)
-    {
-      return HUM_TEMP_ERROR;
-    }
-    
-    return HUM_TEMP_OK;
-}
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- a/Components/hts221/readme.txt	Fri May 29 16:50:56 2015 +0200
+++ b/Components/hts221/readme.txt	Wed Jun 03 14:57:57 2015 +0200
@@ -1,3 +1,3 @@
 hts221.h corresponds to:
-- X-CUBE-MEMS1/trunk/Drivers/BSP/Components/hts221/hts221.h: revision #165,
-- X-CUBE-MEMS1/trunk: revision #293
+- X-CUBE-MEMS1/trunk/Drivers/BSP/Components/hts221/hts221.h: revision #402,
+- X-CUBE-MEMS1/trunk: revision #402
--- a/Components/lis3mdl/lis3mdl.h	Fri May 29 16:50:56 2015 +0200
+++ b/Components/lis3mdl/lis3mdl.h	Wed Jun 03 14:57:57 2015 +0200
@@ -2,9 +2,9 @@
  ******************************************************************************
  * @file    lis3mdl.h
  * @author  MEMS Application Team
- * @version V1.2.0
- * @date    28-January-2015
- * @brief   This file contains definitions for the lis3mdl.c 
+ * @version V1.3.0
+ * @date    28-May-2015
+ * @brief   This file contains definitions for the lis3mdl.c
  *          firmware driver.
  ******************************************************************************
  * @attention
@@ -45,7 +45,7 @@
 #endif
 
 /* Includes ------------------------------------------------------------------*/
-#include "../Common/magneto.h"
+#include "magneto.h"
 
 /** @addtogroup BSP
  * @{
@@ -53,8 +53,8 @@
 
 /** @addtogroup Components
  * @{
- */ 
- 
+ */
+
 /** @addtogroup LIS3MDL
  * @{
  */
@@ -63,7 +63,7 @@
  * @{
  */
 #ifndef NULL
-  #define NULL      (void *) 0
+#define NULL      (void *) 0
 #endif
 
 
@@ -246,7 +246,7 @@
 
 /**
  * @brief Multiple Byte. Mask for enabling multiple byte read/write command.
- */   
+ */
 #define LIS3MDL_I2C_MULTIPLEBYTE_CMD                      ((uint8_t)0x80)
 
 /**
@@ -254,7 +254,7 @@
  */
 
 #define LIS3MDL_M_MEMS_ADDRESS                              0x3C    // SAD[1] = 1
-  
+
 /**
  * @brief Device Identifier. Default value of the WHO_AM_I register.
  */
@@ -400,22 +400,24 @@
 /**
   * @}
   */
-    
+
 /** @defgroup LIS3MDL_Imported_Functions LIS3MDL_Imported_Functions
  * @{
  */
 
 /* Magneto sensor IO functions */
 extern MAGNETO_StatusTypeDef LIS3MDL_IO_Init(void);
-extern MAGNETO_StatusTypeDef LIS3MDL_IO_Write(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr, uint16_t NumByteToWrite);
-extern MAGNETO_StatusTypeDef LIS3MDL_IO_Read(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr, uint16_t NumByteToRead);
+extern MAGNETO_StatusTypeDef LIS3MDL_IO_Write(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr,
+    uint16_t NumByteToWrite);
+extern MAGNETO_StatusTypeDef LIS3MDL_IO_Read(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr,
+    uint16_t NumByteToRead);
 extern void LIS3MDL_IO_ITConfig( void );
 
 /**
  * @}
  */
 
-/* ------------------------------------------------------- */ 
+/* ------------------------------------------------------- */
 /* Here you should declare the internal struct of          */
 /* extended features of LSM6DS0. See the example of        */
 /* LSM6DS3 in lsm6ds3.h                                    */
@@ -439,7 +441,7 @@
 /**
  * @}
  */
- 
+
 /**
  * @}
  */
--- a/Components/lis3mdl/lis3mdl_class.cpp	Fri May 29 16:50:56 2015 +0200
+++ b/Components/lis3mdl/lis3mdl_class.cpp	Wed Jun 03 14:57:57 2015 +0200
@@ -43,8 +43,8 @@
 
 /* Methods -------------------------------------------------------------------*/
 /* betzw - based on:
-           X-CUBE-MEMS1/trunk/Drivers/BSP/Components/lis3mdl/lis3mdl.c: revision #184,
-           X-CUBE-MEMS1/trunk: revision #293
+           X-CUBE-MEMS1/trunk/Drivers/BSP/Components/lis3mdl/lis3mdl.c: revision #400,
+           X-CUBE-MEMS1/trunk: revision #402
 */
 /**
  * @brief  Set LIS3MDL Initialization
@@ -53,68 +53,68 @@
  */
 MAGNETO_StatusTypeDef LIS3MDL::LIS3MDL_Init(MAGNETO_InitTypeDef *LIS3MDL_Init)
 {
-    uint8_t tmp1 = 0x00;
-
-    /* Configure the low level interface ---------------------------------------*/
-    if(LIS3MDL_IO_Init() != MAGNETO_OK)
-    {
-      return MAGNETO_ERROR;
-    }
-
-    /****** Magnetic sensor *******/
-
-    if(LIS3MDL_IO_Read(&tmp1, LIS3MDL_M_CTRL_REG3_M, 1) != MAGNETO_OK)
-    {
-      return MAGNETO_ERROR;
-    }
-
-    /* Conversion mode selection */
-    tmp1 &= ~(LIS3MDL_M_MD_MASK);
-    tmp1 |= LIS3MDL_Init->M_OperatingMode;
-
-    if(LIS3MDL_IO_Write(&tmp1, LIS3MDL_M_CTRL_REG3_M, 1) != MAGNETO_OK)
-    {
-      return MAGNETO_ERROR;
-    }
-
-    if(LIS3MDL_IO_Read(&tmp1, LIS3MDL_M_CTRL_REG1_M, 1) != MAGNETO_OK)
-    {
-      return MAGNETO_ERROR;
-    }
-
-    /* Output data rate selection */
-    tmp1 &= ~(LIS3MDL_M_DO_MASK);
-    tmp1 |= LIS3MDL_Init->M_OutputDataRate;
-
-    /* X and Y axes Operative mode selection */
-    tmp1 &= ~(LIS3MDL_M_OM_MASK);
-    tmp1 |= LIS3MDL_Init->M_XYOperativeMode;
-
-    if(LIS3MDL_IO_Write(&tmp1, LIS3MDL_M_CTRL_REG1_M, 1) != MAGNETO_OK)
-    {
-      return MAGNETO_ERROR;
-    }
-
-    if(LIS3MDL_IO_Read(&tmp1, LIS3MDL_M_CTRL_REG2_M, 1) != MAGNETO_OK)
-    {
-      return MAGNETO_ERROR;
-    }
-
-    /* Full scale selection */
-    tmp1 &= ~(LIS3MDL_M_FS_MASK);
-    tmp1 |= LIS3MDL_Init->M_FullScale;
-
-    if(LIS3MDL_IO_Write(&tmp1, LIS3MDL_M_CTRL_REG2_M, 1) != MAGNETO_OK)
-    {
-      return MAGNETO_ERROR;
-    }
-    
-    /* Configure interrupt lines */
-    LIS3MDL_IO_ITConfig();
-    
-    return MAGNETO_OK;
-
-    /******************************/
+  uint8_t tmp1 = 0x00;
+  
+  /* Configure the low level interface ---------------------------------------*/
+  if(LIS3MDL_IO_Init() != MAGNETO_OK)
+  {
+    return MAGNETO_ERROR;
+  }
+  
+  /****** Magnetic sensor *******/
+  
+  if(LIS3MDL_IO_Read(&tmp1, LIS3MDL_M_CTRL_REG3_M, 1) != MAGNETO_OK)
+  {
+    return MAGNETO_ERROR;
+  }
+  
+  /* Conversion mode selection */
+  tmp1 &= ~(LIS3MDL_M_MD_MASK);
+  tmp1 |= LIS3MDL_Init->M_OperatingMode;
+  
+  if(LIS3MDL_IO_Write(&tmp1, LIS3MDL_M_CTRL_REG3_M, 1) != MAGNETO_OK)
+  {
+    return MAGNETO_ERROR;
+  }
+  
+  if(LIS3MDL_IO_Read(&tmp1, LIS3MDL_M_CTRL_REG1_M, 1) != MAGNETO_OK)
+  {
+    return MAGNETO_ERROR;
+  }
+  
+  /* Output data rate selection */
+  tmp1 &= ~(LIS3MDL_M_DO_MASK);
+  tmp1 |= LIS3MDL_Init->M_OutputDataRate;
+  
+  /* X and Y axes Operative mode selection */
+  tmp1 &= ~(LIS3MDL_M_OM_MASK);
+  tmp1 |= LIS3MDL_Init->M_XYOperativeMode;
+  
+  if(LIS3MDL_IO_Write(&tmp1, LIS3MDL_M_CTRL_REG1_M, 1) != MAGNETO_OK)
+  {
+    return MAGNETO_ERROR;
+  }
+  
+  if(LIS3MDL_IO_Read(&tmp1, LIS3MDL_M_CTRL_REG2_M, 1) != MAGNETO_OK)
+  {
+    return MAGNETO_ERROR;
+  }
+  
+  /* Full scale selection */
+  tmp1 &= ~(LIS3MDL_M_FS_MASK);
+  tmp1 |= LIS3MDL_Init->M_FullScale;
+  
+  if(LIS3MDL_IO_Write(&tmp1, LIS3MDL_M_CTRL_REG2_M, 1) != MAGNETO_OK)
+  {
+    return MAGNETO_ERROR;
+  }
+  
+  /* Configure interrupt lines */
+  LIS3MDL_IO_ITConfig();
+  
+  return MAGNETO_OK;
+  
+  /******************************/
 }
 
 
@@ -125,12 +125,12 @@
  */
 MAGNETO_StatusTypeDef LIS3MDL::LIS3MDL_Read_M_ID(uint8_t *m_id)
 {
-    if(!m_id)
-    { 
-      return MAGNETO_ERROR; 
-    }
-
-    return LIS3MDL_IO_Read(m_id, LIS3MDL_M_WHO_AM_I_ADDR, 1);
+  if(!m_id)
+  {
+    return MAGNETO_ERROR;
+  }
+  
+  return LIS3MDL_IO_Read(m_id, LIS3MDL_M_WHO_AM_I_ADDR, 1);
 }
 
 
@@ -141,30 +141,33 @@
  */
 MAGNETO_StatusTypeDef LIS3MDL::LIS3MDL_M_GetAxesRaw(int16_t *pData)
 {
-    uint8_t tempReg[2] = {0,0};
-
-    if(LIS3MDL_IO_Read(&tempReg[0], (LIS3MDL_M_OUT_X_L_M | LIS3MDL_I2C_MULTIPLEBYTE_CMD), 2) != MAGNETO_OK)
-    {
-      return MAGNETO_ERROR;
-    }
-
-    pData[0] = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
-
-    if(LIS3MDL_IO_Read(&tempReg[0], (LIS3MDL_M_OUT_Y_L_M | LIS3MDL_I2C_MULTIPLEBYTE_CMD), 2) != MAGNETO_OK)
-    {
-      return MAGNETO_ERROR;
-    }
-
-    pData[1] = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
-
-    if(LIS3MDL_IO_Read(&tempReg[0], (LIS3MDL_M_OUT_Z_L_M | LIS3MDL_I2C_MULTIPLEBYTE_CMD), 2) != MAGNETO_OK)
-    {
-      return MAGNETO_ERROR;
-    }
-
-    pData[2] = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
-    
-    return MAGNETO_OK;
+  uint8_t tempReg[2] = {0, 0};
+  
+  if(LIS3MDL_IO_Read(&tempReg[0], (LIS3MDL_M_OUT_X_L_M | LIS3MDL_I2C_MULTIPLEBYTE_CMD),
+                     2) != MAGNETO_OK)
+  {
+    return MAGNETO_ERROR;
+  }
+  
+  pData[0] = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);
+  
+  if(LIS3MDL_IO_Read(&tempReg[0], (LIS3MDL_M_OUT_Y_L_M | LIS3MDL_I2C_MULTIPLEBYTE_CMD),
+                     2) != MAGNETO_OK)
+  {
+    return MAGNETO_ERROR;
+  }
+  
+  pData[1] = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);
+  
+  if(LIS3MDL_IO_Read(&tempReg[0], (LIS3MDL_M_OUT_Z_L_M | LIS3MDL_I2C_MULTIPLEBYTE_CMD),
+                     2) != MAGNETO_OK)
+  {
+    return MAGNETO_ERROR;
+  }
+  
+  pData[2] = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);
+  
+  return MAGNETO_OK;
 }
 
 
@@ -175,41 +178,43 @@
  */
 MAGNETO_StatusTypeDef LIS3MDL::LIS3MDL_M_GetAxes(int32_t *pData)
 {
-    uint8_t tempReg = 0x00;
-    int16_t pDataRaw[3];
-    float sensitivity = 0;
-
-    if(LIS3MDL_M_GetAxesRaw(pDataRaw) != MAGNETO_OK)
-    {
-      return MAGNETO_ERROR;
-    }
-
-    if(LIS3MDL_IO_Read(&tempReg, LIS3MDL_M_CTRL_REG2_M, 1) != MAGNETO_OK)
-    {
-      return MAGNETO_ERROR;
-    }
-
-    tempReg &= LIS3MDL_M_FS_MASK;
+  uint8_t tempReg = 0x00;
+  int16_t pDataRaw[3];
+  float sensitivity = 0;
+  
+  if(LIS3MDL_M_GetAxesRaw(pDataRaw) != MAGNETO_OK)
+  {
+    return MAGNETO_ERROR;
+  }
+  
+  if(LIS3MDL_IO_Read(&tempReg, LIS3MDL_M_CTRL_REG2_M, 1) != MAGNETO_OK)
+  {
+    return MAGNETO_ERROR;
+  }
+  
+  tempReg &= LIS3MDL_M_FS_MASK;
+  
+  switch(tempReg)
+  {
+    case LIS3MDL_M_FS_4:
+      sensitivity = 0.14;
+      break;
+    case LIS3MDL_M_FS_8:
+      sensitivity = 0.29;
+      break;
+    case LIS3MDL_M_FS_12:
+      sensitivity = 0.43;
+      break;
+    case LIS3MDL_M_FS_16:
+      sensitivity = 0.58;
+      break;
+  }
+  
+  pData[0] = (int32_t)(pDataRaw[0] * sensitivity);
+  pData[1] = (int32_t)(pDataRaw[1] * sensitivity);
+  pData[2] = (int32_t)(pDataRaw[2] * sensitivity);
+  
+  return MAGNETO_OK;
+}
 
-    switch(tempReg)
-    {
-      case LIS3MDL_M_FS_4:
-        sensitivity = 0.14;
-        break;
-      case LIS3MDL_M_FS_8:
-        sensitivity = 0.29;
-        break;
-      case LIS3MDL_M_FS_12:
-        sensitivity = 0.43;
-        break;
-      case LIS3MDL_M_FS_16:
-        sensitivity = 0.58;
-        break;
-    }
-
-    pData[0] = (int32_t)(pDataRaw[0] * sensitivity);
-    pData[1] = (int32_t)(pDataRaw[1] * sensitivity);
-    pData[2] = (int32_t)(pDataRaw[2] * sensitivity);
-    
-    return MAGNETO_OK;
-}
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- a/Components/lis3mdl/lis3mdl_class.h	Fri May 29 16:50:56 2015 +0200
+++ b/Components/lis3mdl/lis3mdl_class.h	Wed Jun 03 14:57:57 2015 +0200
@@ -68,12 +68,15 @@
 		return LIS3MDL_M_GetAxes(pData);
 	}
 
+	virtual int Get_M_AxesRaw(int16_t *pData) {
+		return LIS3MDL_M_GetAxesRaw(pData);
+	}
+
  protected:
 	/*** Methods ***/
 	MAGNETO_StatusTypeDef LIS3MDL_Init(MAGNETO_InitTypeDef *LIS3MDL_Init);
 	MAGNETO_StatusTypeDef LIS3MDL_Read_M_ID(uint8_t *m_id);
 	MAGNETO_StatusTypeDef LIS3MDL_M_GetAxes(int32_t *pData);
-
 	MAGNETO_StatusTypeDef LIS3MDL_M_GetAxesRaw(int16_t *pData);
 
 	/**
--- a/Components/lis3mdl/readme.txt	Fri May 29 16:50:56 2015 +0200
+++ b/Components/lis3mdl/readme.txt	Wed Jun 03 14:57:57 2015 +0200
@@ -1,3 +1,3 @@
 lis3mdl.h corresponds to:
-- X-CUBE-MEMS1/trunk/Drivers/BSP/Components/lis3mdl/lis3mdl.h: revision #165,
-- X-CUBE-MEMS1/trunk: revision #293
+- X-CUBE-MEMS1/trunk/Drivers/BSP/Components/lis3mdl/lis3mdl.h: revision #402,
+- X-CUBE-MEMS1/trunk: revision #402
--- a/Components/lps25h/lps25h.h	Fri May 29 16:50:56 2015 +0200
+++ b/Components/lps25h/lps25h.h	Wed Jun 03 14:57:57 2015 +0200
@@ -3,8 +3,8 @@
  * @file    lps25h.h
  * @author  MEMS Application Team
  * @version V1.2.0
- * @date    28-January-2015
- * @brief   This file contains definitions for the lps25h.c 
+ * @date    11-February-2015
+ * @brief   This file contains definitions for the lps25h.c
  *          firmware driver.
  ******************************************************************************
  * @attention
@@ -45,7 +45,7 @@
 #endif
 
 /* Includes ------------------------------------------------------------------*/
-#include "../Common/pressure.h"
+#include "pressure.h"
 
 /** @addtogroup BSP
  * @{
@@ -53,8 +53,8 @@
 
 /** @addtogroup Components
  * @{
- */ 
- 
+ */
+
 /** @addtogroup LPS25H
  * @{
  */
@@ -63,10 +63,10 @@
  * @{
  */
 #ifndef NULL
-  #define NULL      (void *) 0
+#define NULL      (void *) 0
 #endif
-   
-   
+
+
 /******************************************************************************/
 /*************************** START REGISTER MAPPING  **************************/
 /******************************************************************************/
@@ -402,9 +402,9 @@
 
 /**
  * @brief Multiple Byte. Mask for enabling multiple byte read/write command.
- */   
-#define LPS25H_I2C_MULTIPLEBYTE_CMD                      ((uint8_t)0x80)  
-  
+ */
+#define LPS25H_I2C_MULTIPLEBYTE_CMD                      ((uint8_t)0x80)
+
 /**
  * @brief Device Address
  */
@@ -524,15 +524,17 @@
  */
 /* Pressure sensor IO functions */
 extern PRESSURE_StatusTypeDef LPS25H_IO_Init(void);
-extern PRESSURE_StatusTypeDef LPS25H_IO_Write(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr, uint16_t NumByteToWrite);
-extern PRESSURE_StatusTypeDef LPS25H_IO_Read(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr, uint16_t NumByteToRead);
+extern PRESSURE_StatusTypeDef LPS25H_IO_Write(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr,
+    uint16_t NumByteToWrite);
+extern PRESSURE_StatusTypeDef LPS25H_IO_Read(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr,
+    uint16_t NumByteToRead);
 extern void LPS25H_IO_ITConfig( void );
 
 /**
  * @}
  */
 
-/* ------------------------------------------------------- */ 
+/* ------------------------------------------------------- */
 /* Here you should declare the internal struct of          */
 /* extended features of LPS25H. See the example of         */
 /* LSM6DS3 in lsm6ds3.h                                    */
@@ -556,7 +558,7 @@
 /**
  * @}
  */
- 
+
 /**
  * @}
  */
--- a/Components/lps25h/lps25h_class.cpp	Fri May 29 16:50:56 2015 +0200
+++ b/Components/lps25h/lps25h_class.cpp	Wed Jun 03 14:57:57 2015 +0200
@@ -43,8 +43,8 @@
 
 /* Methods -------------------------------------------------------------------*/
 /* betzw - based on:
-           X-CUBE-MEMS1/trunk/Drivers/BSP/Components/lps25h/lps25h.c: revision #184,
-           X-CUBE-MEMS1/trunk: revision #293
+           X-CUBE-MEMS1/trunk/Drivers/BSP/Components/lps25h/lps25h.c: revision #400,
+           X-CUBE-MEMS1/trunk: revision #402
 */
 /**
  * @brief  Set LPS25H Initialization
@@ -52,67 +52,67 @@
  * @retval PRESSURE_OK in case of success, an error code otherwise
  */
 PRESSURE_StatusTypeDef LPS25H::LPS25H_Init(PRESSURE_InitTypeDef *LPS25H_Init)
-{  
-    uint8_t tmp1 = 0x00;
-
-    /* Configure the low level interface ---------------------------------------*/
-    if(LPS25H_IO_Init() != PRESSURE_OK)
-    {
-      return PRESSURE_ERROR;
-    }
-
-    if(LPS25H_PowerOn() != PRESSURE_OK)
-    {
-      return PRESSURE_ERROR;
-    }
-
-    if(LPS25H_IO_Read(&tmp1, LPS25H_CTRL_REG1_ADDR, 1) != PRESSURE_OK)
-    {
-      return PRESSURE_ERROR;
-    }
-
-    /* Output Data Rate selection */
-    tmp1 &= ~(LPS25H_ODR_MASK);
-    tmp1 |= LPS25H_Init->OutputDataRate;
-
-    /* Interrupt circuit selection */
-    tmp1 &= ~(LPS25H_DIFF_EN_MASK);
-    tmp1 |= LPS25H_Init->DiffEnable;
-
-    /* Block Data Update selection */
-    tmp1 &= ~(LPS25H_BDU_MASK);
-    tmp1 |= LPS25H_Init->BlockDataUpdate;
-
-    /* Serial Interface Mode selection */
-    tmp1 &= ~(LPS25H_SPI_SIM_MASK);
-    tmp1 |= LPS25H_Init->SPIMode;
-
-    if(LPS25H_IO_Write(&tmp1, LPS25H_CTRL_REG1_ADDR, 1) != PRESSURE_OK)
-    {
-      return PRESSURE_ERROR;
-    }
-
-    if(LPS25H_IO_Read(&tmp1, LPS25H_RES_CONF_ADDR, 1) != PRESSURE_OK)
-    {
-      return PRESSURE_ERROR;
-    }
-
-    /* Serial Interface Mode selection */
-    tmp1 &= ~(LPS25H_P_RES_MASK);
-    tmp1 |= LPS25H_Init->PressureResolution;
-
-    /* Serial Interface Mode selection */
-    tmp1 &= ~(LPS25H_T_RES_MASK);
-    tmp1 |= LPS25H_Init->TemperatureResolution;
-
-    if(LPS25H_IO_Write(&tmp1, LPS25H_RES_CONF_ADDR, 1) != PRESSURE_OK)
-    {
-      return PRESSURE_ERROR;
-    }
-
-    LPS25H_IO_ITConfig();
-
-    return PRESSURE_OK;
+{
+  uint8_t tmp1 = 0x00;
+  
+  /* Configure the low level interface ---------------------------------------*/
+  if(LPS25H_IO_Init() != PRESSURE_OK)
+  {
+    return PRESSURE_ERROR;
+  }
+  
+  if(LPS25H_PowerOn() != PRESSURE_OK)
+  {
+    return PRESSURE_ERROR;
+  }
+  
+  if(LPS25H_IO_Read(&tmp1, LPS25H_CTRL_REG1_ADDR, 1) != PRESSURE_OK)
+  {
+    return PRESSURE_ERROR;
+  }
+  
+  /* Output Data Rate selection */
+  tmp1 &= ~(LPS25H_ODR_MASK);
+  tmp1 |= LPS25H_Init->OutputDataRate;
+  
+  /* Interrupt circuit selection */
+  tmp1 &= ~(LPS25H_DIFF_EN_MASK);
+  tmp1 |= LPS25H_Init->DiffEnable;
+  
+  /* Block Data Update selection */
+  tmp1 &= ~(LPS25H_BDU_MASK);
+  tmp1 |= LPS25H_Init->BlockDataUpdate;
+  
+  /* Serial Interface Mode selection */
+  tmp1 &= ~(LPS25H_SPI_SIM_MASK);
+  tmp1 |= LPS25H_Init->SPIMode;
+  
+  if(LPS25H_IO_Write(&tmp1, LPS25H_CTRL_REG1_ADDR, 1) != PRESSURE_OK)
+  {
+    return PRESSURE_ERROR;
+  }
+  
+  if(LPS25H_IO_Read(&tmp1, LPS25H_RES_CONF_ADDR, 1) != PRESSURE_OK)
+  {
+    return PRESSURE_ERROR;
+  }
+  
+  /* Serial Interface Mode selection */
+  tmp1 &= ~(LPS25H_P_RES_MASK);
+  tmp1 |= LPS25H_Init->PressureResolution;
+  
+  /* Serial Interface Mode selection */
+  tmp1 &= ~(LPS25H_T_RES_MASK);
+  tmp1 |= LPS25H_Init->TemperatureResolution;
+  
+  if(LPS25H_IO_Write(&tmp1, LPS25H_RES_CONF_ADDR, 1) != PRESSURE_OK)
+  {
+    return PRESSURE_ERROR;
+  }
+  
+  LPS25H_IO_ITConfig();
+  
+  return PRESSURE_OK;
 }
 
 /**
@@ -122,39 +122,38 @@
  */
 PRESSURE_StatusTypeDef LPS25H::LPS25H_ReadID(uint8_t *p_id)
 {
-    if(!p_id)
-    { 
-      return PRESSURE_ERROR;
-    }
- 
-    return LPS25H_IO_Read(p_id, LPS25H_WHO_AM_I_ADDR, 1);
+  if(!p_id)
+  {
+    return PRESSURE_ERROR;
+  }
+  
+  return LPS25H_IO_Read(p_id, LPS25H_WHO_AM_I_ADDR, 1);
 }
 
 /**
  * @brief  Reboot memory content of LPS25H
- * @param  None
  * @retval PRESSURE_OK in case of success, an error code otherwise
  */
 PRESSURE_StatusTypeDef LPS25H::LPS25H_RebootCmd(void)
 {
-    uint8_t tmpreg;
-
-    /* Read CTRL_REG5 register */
-    if(LPS25H_IO_Read(&tmpreg, LPS25H_CTRL_REG2_ADDR, 1) != PRESSURE_OK)
-    {
-      return PRESSURE_ERROR;
-    }
-
-    /* Enable or Disable the reboot memory */
-    tmpreg |= LPS25H_RESET_MEMORY;
-
-    /* Write value to MEMS CTRL_REG5 regsister */
-    if(LPS25H_IO_Write(&tmpreg, LPS25H_CTRL_REG2_ADDR, 1) != PRESSURE_OK)
-    {
-      return PRESSURE_ERROR;
-    }
-    
-    return PRESSURE_OK;
+  uint8_t tmpreg;
+  
+  /* Read CTRL_REG5 register */
+  if(LPS25H_IO_Read(&tmpreg, LPS25H_CTRL_REG2_ADDR, 1) != PRESSURE_OK)
+  {
+    return PRESSURE_ERROR;
+  }
+  
+  /* Enable or Disable the reboot memory */
+  tmpreg |= LPS25H_RESET_MEMORY;
+  
+  /* Write value to MEMS CTRL_REG5 regsister */
+  if(LPS25H_IO_Write(&tmpreg, LPS25H_CTRL_REG2_ADDR, 1) != PRESSURE_OK)
+  {
+    return PRESSURE_ERROR;
+  }
+  
+  return PRESSURE_OK;
 }
 
 
@@ -163,30 +162,31 @@
  * @param  raw_press the pressure raw value
  * @retval PRESSURE_OK in case of success, an error code otherwise
  */
-PRESSURE_StatusTypeDef LPS25H::LPS25H_I2C_ReadRawPressure(uint32_t *raw_press)
+PRESSURE_StatusTypeDef LPS25H::LPS25H_I2C_ReadRawPressure(int32_t *raw_press)
 {
-    uint8_t buffer[3], i;
-    uint32_t tempVal=0;
-
-    /* Read the register content */
-
-    if(LPS25H_IO_Read(buffer, (LPS25H_PRESS_POUT_XL_ADDR | LPS25H_I2C_MULTIPLEBYTE_CMD), 3) != PRESSURE_OK)
-    {
-      return PRESSURE_ERROR;
-    }
-
-    /* Build the raw data */
-    for (i = 0 ; i < 3 ; i++)
-        tempVal |= (((uint32_t) buffer[i]) << (8 * i));
-
-    /* convert the 2's complement 24 bit to 2's complement 32 bit */
-    if (tempVal & 0x00800000)
-        tempVal |= 0xFF000000;
-
-    /* return the built value */
-    *raw_press = ((uint32_t) tempVal);
+  uint8_t buffer[3], i;
+  uint32_t tempVal = 0;
+  
+  /* Read the register content */
+  
+  if(LPS25H_IO_Read(buffer, (LPS25H_PRESS_POUT_XL_ADDR | LPS25H_I2C_MULTIPLEBYTE_CMD),
+                    3) != PRESSURE_OK)
+  {
+    return PRESSURE_ERROR;
+  }
+  
+  /* Build the raw data */
+  for (i = 0 ; i < 3 ; i++)
+    tempVal |= (((uint32_t) buffer[i]) << (8 * i));
     
-    return PRESSURE_OK;
+  /* convert the 2's complement 24 bit to 2's complement 32 bit */
+  if (tempVal & 0x00800000)
+    tempVal |= 0xFF000000;
+    
+  /* return the built value */
+  *raw_press = ((int32_t) tempVal);
+  
+  return PRESSURE_OK;
 }
 
 /**
@@ -196,16 +196,16 @@
  */
 PRESSURE_StatusTypeDef LPS25H::LPS25H_GetPressure(float* pfData)
 {
-    uint32_t raw_press = 0;
-
-    if(LPS25H_I2C_ReadRawPressure(&raw_press) != PRESSURE_OK)
-    {
-      return PRESSURE_ERROR;
-    }
-
-    *pfData = (float)raw_press /4096.0f;
-    
-    return PRESSURE_OK;
+  int32_t raw_press = 0;
+  
+  if(LPS25H_I2C_ReadRawPressure(&raw_press) != PRESSURE_OK)
+  {
+    return PRESSURE_ERROR;
+  }
+  
+  *pfData = (float)raw_press / 4096.0f;
+  
+  return PRESSURE_OK;
 }
 
 /**
@@ -215,22 +215,23 @@
  */
 PRESSURE_StatusTypeDef LPS25H::LPS25H_I2C_ReadRawTemperature(int16_t *raw_data)
 {
-    uint8_t buffer[2];
-    uint16_t tempVal=0;
-
-    /* Read the register content */
-    if(LPS25H_IO_Read(buffer, (LPS25H_TEMP_OUT_L_ADDR | LPS25H_I2C_MULTIPLEBYTE_CMD), 2) != PRESSURE_OK)
-    {
-      return PRESSURE_ERROR;
-    }
-
-    /* Build the raw value */
-    tempVal = (((uint16_t)buffer[1]) << 8)+(uint16_t)buffer[0];
-
-    /* Return it */
-    *raw_data = ((int16_t)tempVal);
-    
-    return PRESSURE_OK;
+  uint8_t buffer[2];
+  uint16_t tempVal = 0;
+  
+  /* Read the register content */
+  if(LPS25H_IO_Read(buffer, (LPS25H_TEMP_OUT_L_ADDR | LPS25H_I2C_MULTIPLEBYTE_CMD),
+                    2) != PRESSURE_OK)
+  {
+    return PRESSURE_ERROR;
+  }
+  
+  /* Build the raw value */
+  tempVal = (((uint16_t)buffer[1]) << 8) + (uint16_t)buffer[0];
+  
+  /* Return it */
+  *raw_data = ((int16_t)tempVal);
+  
+  return PRESSURE_OK;
 }
 
 /**
@@ -240,70 +241,68 @@
  */
 PRESSURE_StatusTypeDef LPS25H::LPS25H_GetTemperature(float *pfData)
 {
-    int16_t raw_data;
-
-    if(LPS25H_I2C_ReadRawTemperature(&raw_data) != PRESSURE_OK)
-    {
-      return PRESSURE_ERROR;
-    }
-
-    *pfData = (float)((((float)raw_data/480.0f) + 42.5f));
-    
-    return PRESSURE_OK;
+  int16_t raw_data;
+  
+  if(LPS25H_I2C_ReadRawTemperature(&raw_data) != PRESSURE_OK)
+  {
+    return PRESSURE_ERROR;
+  }
+  
+  *pfData = (float)((((float)raw_data / 480.0f) + 42.5f));
+  
+  return PRESSURE_OK;
 }
 /**
  * @brief  Exit the shutdown mode for LPS25H
- * @param  None
  * @retval PRESSURE_OK in case of success, an error code otherwise
  */
 PRESSURE_StatusTypeDef LPS25H::LPS25H_PowerOn(void)
 {
-    uint8_t tmpreg;
-
-    /* Read the register content */
-    if(LPS25H_IO_Read(&tmpreg, LPS25H_CTRL_REG1_ADDR, 1) != PRESSURE_OK)
-    {
-      return PRESSURE_ERROR;
-    }
-
-    /* Set the power down bit */
-    tmpreg |= LPS25H_MODE_ACTIVE;
-
-    /* Write register */
-    if(LPS25H_IO_Write(&tmpreg, LPS25H_CTRL_REG1_ADDR, 1) != PRESSURE_OK)
-    {
-      return PRESSURE_ERROR;
-    }
-    
-    return PRESSURE_OK;
+  uint8_t tmpreg;
+  
+  /* Read the register content */
+  if(LPS25H_IO_Read(&tmpreg, LPS25H_CTRL_REG1_ADDR, 1) != PRESSURE_OK)
+  {
+    return PRESSURE_ERROR;
+  }
+  
+  /* Set the power down bit */
+  tmpreg |= LPS25H_MODE_ACTIVE;
+  
+  /* Write register */
+  if(LPS25H_IO_Write(&tmpreg, LPS25H_CTRL_REG1_ADDR, 1) != PRESSURE_OK)
+  {
+    return PRESSURE_ERROR;
+  }
+  
+  return PRESSURE_OK;
 }
 
 
 /**
  * @brief  Enter the shutdown mode for LPS25H
- * @param  None
  * @retval PRESSURE_OK in case of success, an error code otherwise
  */
 PRESSURE_StatusTypeDef LPS25H::LPS25H_PowerOff(void)
 {
-    uint8_t tmpreg;
-
-    /* Read the register content */
-    if(LPS25H_IO_Read(&tmpreg, LPS25H_CTRL_REG1_ADDR, 1) != PRESSURE_OK)
-    {
-      return PRESSURE_ERROR;
-    }
-
-    /* Reset the power down bit */
-    tmpreg &= ~(LPS25H_MODE_ACTIVE);
-
-    /* Write register */
-    if(LPS25H_IO_Write(&tmpreg, LPS25H_CTRL_REG1_ADDR, 1) != PRESSURE_OK)
-    {
-      return PRESSURE_ERROR;
-    }
-    
-    return PRESSURE_OK;
+  uint8_t tmpreg;
+  
+  /* Read the register content */
+  if(LPS25H_IO_Read(&tmpreg, LPS25H_CTRL_REG1_ADDR, 1) != PRESSURE_OK)
+  {
+    return PRESSURE_ERROR;
+  }
+  
+  /* Reset the power down bit */
+  tmpreg &= ~(LPS25H_MODE_ACTIVE);
+  
+  /* Write register */
+  if(LPS25H_IO_Write(&tmpreg, LPS25H_CTRL_REG1_ADDR, 1) != PRESSURE_OK)
+  {
+    return PRESSURE_ERROR;
+  }
+  
+  return PRESSURE_OK;
 }
 
 /**
@@ -313,5 +312,7 @@
  */
 void LPS25H::LPS25H_SlaveAddrRemap(uint8_t SA0_Bit_Status)
 {
-    LPS25H_SlaveAddress = (SA0_Bit_Status==LPS25H_SA0_LOW?LPS25H_ADDRESS_LOW:LPS25H_ADDRESS_HIGH);
+  LPS25H_SlaveAddress = (SA0_Bit_Status == LPS25H_SA0_LOW ? LPS25H_ADDRESS_LOW : LPS25H_ADDRESS_HIGH);
 }
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- a/Components/lps25h/lps25h_class.h	Fri May 29 16:50:56 2015 +0200
+++ b/Components/lps25h/lps25h_class.h	Wed Jun 03 14:57:57 2015 +0200
@@ -105,7 +105,7 @@
 	void LPS25H_SlaveAddrRemap(uint8_t SA0_Bit_Status);
 	
 	PRESSURE_StatusTypeDef LPS25H_PowerOn(void);
-	PRESSURE_StatusTypeDef LPS25H_I2C_ReadRawPressure(uint32_t *raw_press);
+	PRESSURE_StatusTypeDef LPS25H_I2C_ReadRawPressure(int32_t *raw_press);
 	PRESSURE_StatusTypeDef LPS25H_I2C_ReadRawTemperature(int16_t *raw_data);
 
 	/**
--- a/Components/lps25h/readme.txt	Fri May 29 16:50:56 2015 +0200
+++ b/Components/lps25h/readme.txt	Wed Jun 03 14:57:57 2015 +0200
@@ -1,3 +1,3 @@
 lps25h.h corresponds to:
-- X-CUBE-MEMS1/trunk/Drivers/BSP/Components/lps25h/lps25h.h: revision #165,
-- X-CUBE-MEMS1/trunk: revision #293
+- X-CUBE-MEMS1/trunk/Drivers/BSP/Components/lps25h/lps25h.h: revision #402,
+- X-CUBE-MEMS1/trunk: revision #402
--- a/Components/lsm6ds0/lsm6ds0.h	Fri May 29 16:50:56 2015 +0200
+++ b/Components/lsm6ds0/lsm6ds0.h	Wed Jun 03 14:57:57 2015 +0200
@@ -2,9 +2,9 @@
  ******************************************************************************
  * @file    lsm6ds0.h
  * @author  MEMS Application Team
- * @version V1.2.0
- * @date    28-January-2015
- * @brief   This file contains definitions for the lsm6ds0.c 
+ * @version V1.3.0
+ * @date    28-May-2015
+ * @brief   This file contains definitions for the lsm6ds0.c
  *          firmware driver.
  ******************************************************************************
  * @attention
@@ -45,7 +45,7 @@
 #endif
 
 /* Includes ------------------------------------------------------------------*/
-#include "../Common/imu_6axes.h"
+#include "imu_6axes.h"
 
 /** @addtogroup BSP
  * @{
@@ -53,8 +53,8 @@
 
 /** @addtogroup Components
  * @{
- */ 
- 
+ */
+
 /** @addtogroup LSM6DS0
  * @{
  */
@@ -63,7 +63,7 @@
  * @{
  */
 #ifndef NULL
-  #define NULL      (void *) 0
+#define NULL      (void *) 0
 #endif
 
 
@@ -91,7 +91,7 @@
  */
 #define LSM6DS0_XG_INT_CTRL                                 0x0C
 
-    
+
 /**
   * @brief Device identifier register.
   * \code
@@ -289,7 +289,7 @@
 
 /**
  * @brief Multiple Byte. Mask for enabling multiple byte read/write command.
- */   
+ */
 #define LSM6DS0_I2C_MULTIPLEBYTE_CMD                      ((uint8_t)0x80)
 
 /**
@@ -362,7 +362,7 @@
 /**
  * @}
  */
- 
+
 /** @defgroup LSM6DS0_XG_Gyroscope_Full_Scale_Selection_CTRL_REG1_G LSM6DS0_XG_Gyroscope_Full_Scale_Selection_CTRL_REG1_G
  * @{
  */
@@ -444,6 +444,7 @@
 #define LSM6DS0_XL_FS_2G                                ((uint8_t)0x00) /*!< Full scale: +- 2g */
 #define LSM6DS0_XL_FS_4G                                ((uint8_t)0x10) /*!< Full scale: +- 4g */
 #define LSM6DS0_XL_FS_8G                                ((uint8_t)0x18) /*!< Full scale: +- 8g */
+#define LSM6DS0_XL_FS_16G                               ((uint8_t)0x08) /*!< Full scale: +- 16g */
 
 #define LSM6DS0_XL_FS_MASK                              ((uint8_t)0x18)
 /**
@@ -540,7 +541,7 @@
 /**
  * @}
  */
- 
+
 /**
  * @}
  */
@@ -552,15 +553,17 @@
 
 /* Six axes sensor IO functions */
 extern IMU_6AXES_StatusTypeDef LSM6DS0_IO_Init(void);
-extern IMU_6AXES_StatusTypeDef LSM6DS0_IO_Write(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr, uint16_t NumByteToWrite);
-extern IMU_6AXES_StatusTypeDef LSM6DS0_IO_Read(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr, uint16_t NumByteToRead);
+extern IMU_6AXES_StatusTypeDef LSM6DS0_IO_Write(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr,
+    uint16_t NumByteToWrite);
+extern IMU_6AXES_StatusTypeDef LSM6DS0_IO_Read(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr,
+    uint16_t NumByteToRead);
 extern void LSM6DS0_IO_ITConfig( void );
 
 /**
  * @}
  */
 
-/* ------------------------------------------------------- */ 
+/* ------------------------------------------------------- */
 /* Here you should declare the internal struct of          */
 /* extended features of LIS3MDL. See the example of        */
 /* LSM6DS3 in lsm6ds3.h                                    */
@@ -585,7 +588,7 @@
 /**
  * @}
  */
- 
+
 /**
  * @}
  */
--- a/Components/lsm6ds0/lsm6ds0_class.cpp	Fri May 29 16:50:56 2015 +0200
+++ b/Components/lsm6ds0/lsm6ds0_class.cpp	Wed Jun 03 14:57:57 2015 +0200
@@ -43,8 +43,8 @@
 
 /* Methods -------------------------------------------------------------------*/
 /* betzw - based on:
-           X-CUBE-MEMS1/trunk/Drivers/BSP/Components/lsm6ds0/lsm6ds0.c: revision #184,
-           X-CUBE-MEMS1/trunk: revision #293
+           X-CUBE-MEMS1/trunk/Drivers/BSP/Components/lsm6ds0/lsm6ds0.c: revision #400,
+           X-CUBE-MEMS1/trunk: revision #402
 */
 /**
  * @brief  Set LSM6DS0 Initialization
@@ -53,106 +53,54 @@
  */
 IMU_6AXES_StatusTypeDef LSM6DS0::LSM6DS0_Init(IMU_6AXES_InitTypeDef *LSM6DS0_Init)
 {
-    uint8_t tmp1 = 0x00;
-
-    /* Configure the low level interface ---------------------------------------*/
-    if(LSM6DS0_IO_Init() != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-
-    /******* Gyroscope init *******/
-
-    if(LSM6DS0_IO_Read(&tmp1, LSM6DS0_XG_CTRL_REG1_G, 1) != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-
-    /* Output Data Rate selection */
-    tmp1 &= ~(LSM6DS0_G_ODR_MASK);
-    tmp1 |= LSM6DS0_Init->G_OutputDataRate;
-
-    /* Full scale selection */
-    tmp1 &= ~(LSM6DS0_G_FS_MASK);
-    tmp1 |= LSM6DS0_Init->G_FullScale;
-
-    if(LSM6DS0_IO_Write(&tmp1, LSM6DS0_XG_CTRL_REG1_G, 1) != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-
-    if(LSM6DS0_IO_Read(&tmp1, LSM6DS0_XG_CTRL_REG4, 1) != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-
-    /* Enable X axis selection */
-    tmp1 &= ~(LSM6DS0_G_XEN_MASK);
-    tmp1 |= LSM6DS0_Init->G_X_Axis;
-
-    /* Enable Y axis selection */
-    tmp1 &= ~(LSM6DS0_G_YEN_MASK);
-    tmp1 |= LSM6DS0_Init->G_Y_Axis;
-
-    /* Enable Z axis selection */
-    tmp1 &= ~(LSM6DS0_G_ZEN_MASK);
-    tmp1 |= LSM6DS0_Init->G_Z_Axis;
-
-    if(LSM6DS0_IO_Write(&tmp1, LSM6DS0_XG_CTRL_REG4, 1) != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-
-    /******************************/
-
-    /***** Accelerometer init *****/
-
-    if(LSM6DS0_IO_Read(&tmp1, LSM6DS0_XG_CTRL_REG6_XL, 1) != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-
-    /* Output Data Rate selection */
-    tmp1 &= ~(LSM6DS0_XL_ODR_MASK);
-    tmp1 |= LSM6DS0_Init->X_OutputDataRate;
-
-    /* Full scale selection */
-    tmp1 &= ~(LSM6DS0_XL_FS_MASK);
-    tmp1 |= LSM6DS0_Init->X_FullScale;
-
-    if(LSM6DS0_IO_Write(&tmp1, LSM6DS0_XG_CTRL_REG6_XL, 1) != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-
-    if(LSM6DS0_IO_Read(&tmp1, LSM6DS0_XG_CTRL_REG5_XL, 1) != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-
-    /* Enable X axis selection */
-    tmp1 &= ~(LSM6DS0_XL_XEN_MASK);
-    tmp1 |= LSM6DS0_Init->X_X_Axis;
-
-    /* Enable Y axis selection */
-    tmp1 &= ~(LSM6DS0_XL_YEN_MASK);
-    tmp1 |= LSM6DS0_Init->X_Y_Axis;
-
-    /* Enable Z axis selection */
-    tmp1 &= ~(LSM6DS0_XL_ZEN_MASK);
-    tmp1 |= LSM6DS0_Init->X_Z_Axis;
-
-    if(LSM6DS0_IO_Write(&tmp1, LSM6DS0_XG_CTRL_REG5_XL, 1) != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-    
-    /* Configure interrupt lines */
-    LSM6DS0_IO_ITConfig();
-    
-    return IMU_6AXES_OK;
-
-    /******************************/
+  /* Configure the low level interface ---------------------------------------*/
+  if(LSM6DS0_IO_Init() != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  /******* Gyroscope init *******/
+  
+  if(LSM6DS0_G_Set_ODR( LSM6DS0_Init->G_OutputDataRate ) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  if(LSM6DS0_G_Set_FS( LSM6DS0_Init->G_FullScale ) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  if(LSM6DS0_G_Set_Axes_Status(LSM6DS0_Init->G_X_Axis, LSM6DS0_Init->G_Y_Axis, LSM6DS0_Init->G_Z_Axis) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  /******************************/
+  
+  /***** Accelerometer init *****/
+  
+  if(LSM6DS0_X_Set_ODR( LSM6DS0_Init->X_OutputDataRate ) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  if(LSM6DS0_X_Set_FS( LSM6DS0_Init->X_FullScale ) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  if(LSM6DS0_X_Set_Axes_Status(LSM6DS0_Init->X_X_Axis, LSM6DS0_Init->X_Y_Axis, LSM6DS0_Init->X_Z_Axis) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  /* Configure interrupt lines */
+  LSM6DS0_IO_ITConfig();
+  
+  return IMU_6AXES_OK;
+  
+  /******************************/
 }
 
 
@@ -163,12 +111,12 @@
  */
 IMU_6AXES_StatusTypeDef LSM6DS0::LSM6DS0_Read_XG_ID(uint8_t *xg_id)
 {
-    if(!xg_id)
-    { 
-      return IMU_6AXES_ERROR; 
-    }
- 
-    return LSM6DS0_IO_Read(xg_id, LSM6DS0_XG_WHO_AM_I_ADDR, 1);
+  if(!xg_id)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  return LSM6DS0_IO_Read(xg_id, LSM6DS0_XG_WHO_AM_I_ADDR, 1);
 }
 
 
@@ -179,30 +127,33 @@
  */
 IMU_6AXES_StatusTypeDef LSM6DS0::LSM6DS0_X_GetAxesRaw(int16_t *pData)
 {
-    uint8_t tempReg[2] = {0,0};
-
-    if(LSM6DS0_IO_Read(&tempReg[0], (LSM6DS0_XG_OUT_X_L_XL | LSM6DS0_I2C_MULTIPLEBYTE_CMD), 2) != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-
-    pData[0] = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
-
-    if(LSM6DS0_IO_Read(&tempReg[0], (LSM6DS0_XG_OUT_Y_L_XL | LSM6DS0_I2C_MULTIPLEBYTE_CMD), 2) != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-
-    pData[1] = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
-
-    if(LSM6DS0_IO_Read(&tempReg[0], (LSM6DS0_XG_OUT_Z_L_XL | LSM6DS0_I2C_MULTIPLEBYTE_CMD), 2) != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-
-    pData[2] = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
-    
-    return IMU_6AXES_OK;
+  uint8_t tempReg[2] = {0, 0};
+  
+  if(LSM6DS0_IO_Read(&tempReg[0], (LSM6DS0_XG_OUT_X_L_XL | LSM6DS0_I2C_MULTIPLEBYTE_CMD),
+                     2) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  pData[0] = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);
+  
+  if(LSM6DS0_IO_Read(&tempReg[0], (LSM6DS0_XG_OUT_Y_L_XL | LSM6DS0_I2C_MULTIPLEBYTE_CMD),
+                     2) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  pData[1] = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);
+  
+  if(LSM6DS0_IO_Read(&tempReg[0], (LSM6DS0_XG_OUT_Z_L_XL | LSM6DS0_I2C_MULTIPLEBYTE_CMD),
+                     2) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  pData[2] = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);
+  
+  return IMU_6AXES_OK;
 }
 
 
@@ -213,40 +164,24 @@
  */
 IMU_6AXES_StatusTypeDef LSM6DS0::LSM6DS0_X_GetAxes(int32_t *pData)
 {
-    uint8_t tempReg = 0x00;
-    int16_t pDataRaw[3];
-    float sensitivity = 0;
-
-    if(LSM6DS0_X_GetAxesRaw(pDataRaw) != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-
-    if(LSM6DS0_IO_Read(&tempReg, LSM6DS0_XG_CTRL_REG6_XL, 1) != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-
-    tempReg &= LSM6DS0_XL_FS_MASK;
-
-    switch(tempReg)
-    {
-      case LSM6DS0_XL_FS_2G:
-        sensitivity = 0.061;
-        break;
-      case LSM6DS0_XL_FS_4G:
-        sensitivity = 0.122;
-        break;
-      case LSM6DS0_XL_FS_8G:
-        sensitivity = 0.244;
-        break;
-    }
-
-    pData[0] = (int32_t)(pDataRaw[0] * sensitivity);
-    pData[1] = (int32_t)(pDataRaw[1] * sensitivity);
-    pData[2] = (int32_t)(pDataRaw[2] * sensitivity);
-    
-    return IMU_6AXES_OK;
+  int16_t pDataRaw[3];
+  float sensitivity = 0;
+  
+  if(LSM6DS0_X_GetAxesRaw(pDataRaw) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  if(LSM6DS0_X_GetSensitivity( &sensitivity ) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  pData[0] = (int32_t)(pDataRaw[0] * sensitivity);
+  pData[1] = (int32_t)(pDataRaw[1] * sensitivity);
+  pData[2] = (int32_t)(pDataRaw[2] * sensitivity);
+  
+  return IMU_6AXES_OK;
 }
 
 
@@ -257,30 +192,119 @@
  */
 IMU_6AXES_StatusTypeDef LSM6DS0::LSM6DS0_G_GetAxesRaw(int16_t *pData)
 {
-    uint8_t tempReg[2] = {0,0};
-
-    if(LSM6DS0_IO_Read(&tempReg[0], (LSM6DS0_XG_OUT_X_L_G | LSM6DS0_I2C_MULTIPLEBYTE_CMD), 2) != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-
-    pData[0] = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
+  uint8_t tempReg[2] = {0, 0};
+  
+  if(LSM6DS0_IO_Read(&tempReg[0], (LSM6DS0_XG_OUT_X_L_G | LSM6DS0_I2C_MULTIPLEBYTE_CMD),
+                     2) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  pData[0] = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);
+  
+  if(LSM6DS0_IO_Read(&tempReg[0], (LSM6DS0_XG_OUT_Y_L_G | LSM6DS0_I2C_MULTIPLEBYTE_CMD),
+                     2) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  pData[1] = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);
+  
+  if(LSM6DS0_IO_Read(&tempReg[0], (LSM6DS0_XG_OUT_Z_L_G | LSM6DS0_I2C_MULTIPLEBYTE_CMD),
+                     2) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  pData[2] = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);
+  
+  return IMU_6AXES_OK;
+}
 
-    if(LSM6DS0_IO_Read(&tempReg[0], (LSM6DS0_XG_OUT_Y_L_G | LSM6DS0_I2C_MULTIPLEBYTE_CMD), 2) != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-
-    pData[1] = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
+/**
+ * @brief  Set the status of the axes for accelerometer
+ * @param  enableX the status of the x axis to be set
+ * @param  enableY the status of the y axis to be set
+ * @param  enableZ the status of the z axis to be set
+ * @retval IMU_6AXES_OK in case of success, an error code otherwise
+ */
+IMU_6AXES_StatusTypeDef LSM6DS0::LSM6DS0_X_Set_Axes_Status(uint8_t enableX, uint8_t enableY, uint8_t enableZ)
+{
+  uint8_t tmp1 = 0x00;
+  uint8_t eX = 0x00;
+  uint8_t eY = 0x00;
+  uint8_t eZ = 0x00;
+  
+  eX = ( enableX == 0 ) ? LSM6DS0_XL_XEN_DISABLE : LSM6DS0_XL_XEN_ENABLE;
+  eY = ( enableY == 0 ) ? LSM6DS0_XL_YEN_DISABLE : LSM6DS0_XL_YEN_ENABLE;
+  eZ = ( enableZ == 0 ) ? LSM6DS0_XL_ZEN_DISABLE : LSM6DS0_XL_ZEN_ENABLE;
+  
+  if(LSM6DS0_IO_Read(&tmp1, LSM6DS0_XG_CTRL_REG5_XL, 1) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  /* Enable X axis selection */
+  tmp1 &= ~(LSM6DS0_XL_XEN_MASK);
+  tmp1 |= eX;
+  
+  /* Enable Y axis selection */
+  tmp1 &= ~(LSM6DS0_XL_YEN_MASK);
+  tmp1 |= eY;
+  
+  /* Enable Z axis selection */
+  tmp1 &= ~(LSM6DS0_XL_ZEN_MASK);
+  tmp1 |= eZ;
+  
+  if(LSM6DS0_IO_Write(&tmp1, LSM6DS0_XG_CTRL_REG5_XL, 1) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  return IMU_6AXES_OK;
+}
 
-    if(LSM6DS0_IO_Read(&tempReg[0], (LSM6DS0_XG_OUT_Z_L_G | LSM6DS0_I2C_MULTIPLEBYTE_CMD), 2) != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-
-    pData[2] = ((((int16_t)tempReg[1]) << 8)+(int16_t)tempReg[0]);
-    
-    return IMU_6AXES_OK;
+/**
+ * @brief  Set the status of the axes for gyroscope
+ * @param  enableX the status of the x axis to be set
+ * @param  enableY the status of the y axis to be set
+ * @param  enableZ the status of the z axis to be set
+ * @retval IMU_6AXES_OK in case of success, an error code otherwise
+ */
+IMU_6AXES_StatusTypeDef LSM6DS0::LSM6DS0_G_Set_Axes_Status(uint8_t enableX, uint8_t enableY, uint8_t enableZ)
+{
+  uint8_t tmp1 = 0x00;
+  uint8_t eX = 0x00;
+  uint8_t eY = 0x00;
+  uint8_t eZ = 0x00;
+  
+  eX = ( enableX == 0 ) ? LSM6DS0_G_XEN_DISABLE : LSM6DS0_G_XEN_ENABLE;
+  eY = ( enableY == 0 ) ? LSM6DS0_G_YEN_DISABLE : LSM6DS0_G_YEN_ENABLE;
+  eZ = ( enableZ == 0 ) ? LSM6DS0_G_ZEN_DISABLE : LSM6DS0_G_ZEN_ENABLE;
+  
+  if(LSM6DS0_IO_Read(&tmp1, LSM6DS0_XG_CTRL_REG4, 1) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  /* Enable X axis selection */
+  tmp1 &= ~(LSM6DS0_G_XEN_MASK);
+  tmp1 |= eX;
+  
+  /* Enable Y axis selection */
+  tmp1 &= ~(LSM6DS0_G_YEN_MASK);
+  tmp1 |= eY;
+  
+  /* Enable Z axis selection */
+  tmp1 &= ~(LSM6DS0_G_ZEN_MASK);
+  tmp1 |= eZ;
+  
+  if(LSM6DS0_IO_Write(&tmp1, LSM6DS0_XG_CTRL_REG4, 1) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  return IMU_6AXES_OK;
 }
 
 
@@ -291,40 +315,105 @@
  */
 IMU_6AXES_StatusTypeDef LSM6DS0::LSM6DS0_G_GetAxes(int32_t *pData)
 {
-    uint8_t tempReg = 0x00;
-    int16_t pDataRaw[3];
-    float sensitivity = 0;
-
-    if(LSM6DS0_G_GetAxesRaw(pDataRaw) != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-
-    if(LSM6DS0_IO_Read(&tempReg, LSM6DS0_XG_CTRL_REG1_G, 1) != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-
-    tempReg &= LSM6DS0_G_FS_MASK;
+  int16_t pDataRaw[3];
+  float sensitivity = 0;
+  
+  if(LSM6DS0_G_GetAxesRaw(pDataRaw) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  if(LSM6DS0_G_GetSensitivity( &sensitivity ) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  pData[0] = (int32_t)(pDataRaw[0] * sensitivity);
+  pData[1] = (int32_t)(pDataRaw[1] * sensitivity);
+  pData[2] = (int32_t)(pDataRaw[2] * sensitivity);
+  
+  return IMU_6AXES_OK;
+}
 
-    switch(tempReg)
-    {
-      case LSM6DS0_G_FS_245:
-        sensitivity = 8.75;
-        break;
-      case LSM6DS0_G_FS_500:
-        sensitivity = 17.50;
-        break;
-      case LSM6DS0_G_FS_2000:
-        sensitivity = 70;
-        break;
-    }
+/**
+ * @brief  Read Accelero Output Data Rate
+ * @param  odr the pointer where the accelerometer output data rate is stored
+ * @retval IMU_6AXES_OK in case of success, an error code otherwise
+ */
+IMU_6AXES_StatusTypeDef    LSM6DS0::LSM6DS0_X_Get_ODR( float *odr )
+{
+  /*Here we have to add the check if the parameters are valid*/
+  uint8_t tempReg = 0x00;
+  
+  if(LSM6DS0_IO_Read( &tempReg, LSM6DS0_XG_CTRL_REG6_XL, 1 ) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  tempReg &= LSM6DS0_XL_ODR_MASK;
+  
+  switch( tempReg )
+  {
+    case LSM6DS0_XL_ODR_PD:
+      *odr = 0.0f;
+      break;
+    case LSM6DS0_XL_ODR_10HZ:
+      *odr = 10.0f;
+      break;
+    case LSM6DS0_XL_ODR_50HZ:
+      *odr = 50.0f;
+      break;
+    case LSM6DS0_XL_ODR_119HZ:
+      *odr = 119.0f;
+      break;
+    case LSM6DS0_XL_ODR_238HZ:
+      *odr = 238.0f;
+      break;
+    case LSM6DS0_XL_ODR_476HZ:
+      *odr = 476.0f;
+      break;
+    case LSM6DS0_XL_ODR_952HZ:
+      *odr = 952.0f;
+      break;
+    default:
+      break;
+  }
+  
+  return IMU_6AXES_OK;
+}
 
-    pData[0] = (int32_t)(pDataRaw[0] * sensitivity);
-    pData[1] = (int32_t)(pDataRaw[1] * sensitivity);
-    pData[2] = (int32_t)(pDataRaw[2] * sensitivity);
-    
-    return IMU_6AXES_OK;
+/**
+ * @brief  Write Accelero Output Data Rate
+ * @param  odr the accelerometer output data rate to be set
+ * @retval IMU_6AXES_OK in case of success, an error code otherwise
+ */
+IMU_6AXES_StatusTypeDef    LSM6DS0::LSM6DS0_X_Set_ODR( float odr )
+{
+  uint8_t new_odr = 0x00;
+  uint8_t tempReg = 0x00;
+  
+  new_odr = ( odr <= 0.0f   ) ? LSM6DS0_XL_ODR_PD          /* Power Down */
+            : ( odr <= 10.0f  ) ? LSM6DS0_XL_ODR_10HZ
+            : ( odr <= 50.0f  ) ? LSM6DS0_XL_ODR_50HZ
+            : ( odr <= 119.0f ) ? LSM6DS0_XL_ODR_119HZ
+            : ( odr <= 238.0f ) ? LSM6DS0_XL_ODR_238HZ
+            : ( odr <= 476.0f ) ? LSM6DS0_XL_ODR_476HZ
+            :                     LSM6DS0_XL_ODR_952HZ;
+            
+  if(LSM6DS0_IO_Read( &tempReg, LSM6DS0_XG_CTRL_REG6_XL, 1 ) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  tempReg &= ~(LSM6DS0_XL_ODR_MASK);
+  tempReg |= new_odr;
+  
+  if(LSM6DS0_IO_Write(&tempReg, LSM6DS0_XG_CTRL_REG6_XL, 1) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  return IMU_6AXES_OK;
 }
 
 /**
@@ -332,69 +421,287 @@
  * @param  pfData the pointer where the accelerometer sensitivity is stored
  * @retval IMU_6AXES_OK in case of success, an error code otherwise
  */
-IMU_6AXES_StatusTypeDef LSM6DS0::LSM6DS0_X_GetSensitivity( float *pfData )
+IMU_6AXES_StatusTypeDef    LSM6DS0::LSM6DS0_X_GetSensitivity( float *pfData )
 {
-    /*Here we have to add the check if the parameters are valid*/
-    uint8_t tempReg = 0x00;
-    
-    if(LSM6DS0_IO_Read( &tempReg, LSM6DS0_XG_CTRL_REG6_XL, 1 ) != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-    
-    tempReg &= LSM6DS0_XL_FS_MASK;
-    
-    switch( tempReg )
-    {
-      case LSM6DS0_XL_FS_2G:
-        *pfData = 0.061;
-        break;
-      case LSM6DS0_XL_FS_4G:
-        *pfData = 0.122;
-        break;
-      case LSM6DS0_XL_FS_8G:
-        *pfData = 0.244;
-        break;
-      default:
-        break;
-    }
-    
-    return IMU_6AXES_OK;
+  /*Here we have to add the check if the parameters are valid*/
+  uint8_t tempReg = 0x00;
+  
+  if(LSM6DS0_IO_Read( &tempReg, LSM6DS0_XG_CTRL_REG6_XL, 1 ) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  tempReg &= LSM6DS0_XL_FS_MASK;
+  
+  switch( tempReg )
+  {
+    case LSM6DS0_XL_FS_2G:
+      *pfData = 0.061f;
+      break;
+    case LSM6DS0_XL_FS_4G:
+      *pfData = 0.122f;
+      break;
+    case LSM6DS0_XL_FS_8G:
+      *pfData = 0.244f;
+      break;
+    case LSM6DS0_XL_FS_16G:
+      *pfData = 0.732f;
+      break;
+    default:
+      break;
+  }
+  
+  return IMU_6AXES_OK;
+}
+
+/**
+ * @brief  Read Accelero Full Scale
+ * @param  fullScale the pointer where the accelerometer full scale is stored
+ * @retval IMU_6AXES_OK in case of success, an error code otherwise
+ */
+IMU_6AXES_StatusTypeDef    LSM6DS0::LSM6DS0_X_Get_FS( float *fullScale )
+{
+  /*Here we have to add the check if the parameters are valid*/
+  uint8_t tempReg = 0x00;
+  
+  if(LSM6DS0_IO_Read( &tempReg, LSM6DS0_XG_CTRL_REG6_XL, 1 ) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  tempReg &= LSM6DS0_XL_FS_MASK;
+  
+  switch( tempReg )
+  {
+    case LSM6DS0_XL_FS_2G:
+      *fullScale = 2.0f;
+      break;
+    case LSM6DS0_XL_FS_4G:
+      *fullScale = 4.0f;
+      break;
+    case LSM6DS0_XL_FS_8G:
+      *fullScale = 8.0f;
+      break;
+    case LSM6DS0_XL_FS_16G:
+      *fullScale = 16.0f;
+      break;
+    default:
+      break;
+  }
+  
+  return IMU_6AXES_OK;
 }
 
+/**
+ * @brief  Write Accelero Full Scale
+ * @param  fullScale the accelerometer full scale to be set
+ * @retval IMU_6AXES_OK in case of success, an error code otherwise
+ */
+IMU_6AXES_StatusTypeDef    LSM6DS0::LSM6DS0_X_Set_FS( float fullScale )
+{
+  uint8_t new_fs = 0x00;
+  uint8_t tempReg = 0x00;
+  
+  new_fs = ( fullScale <= 2.0f ) ? LSM6DS0_XL_FS_2G
+           : ( fullScale <= 4.0f ) ? LSM6DS0_XL_FS_4G
+           : ( fullScale <= 8.0f ) ? LSM6DS0_XL_FS_8G
+           :                         LSM6DS0_XL_FS_16G;
+           
+  if(LSM6DS0_IO_Read( &tempReg, LSM6DS0_XG_CTRL_REG6_XL, 1 ) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  tempReg &= ~(LSM6DS0_XL_FS_MASK);
+  tempReg |= new_fs;
+  
+  if(LSM6DS0_IO_Write(&tempReg, LSM6DS0_XG_CTRL_REG6_XL, 1) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  return IMU_6AXES_OK;
+}
 
+/**
+ * @brief  Read Gyro Output Data Rate
+ * @param  odr the pointer where the gyroscope output data rate is stored
+ * @retval IMU_6AXES_OK in case of success, an error code otherwise
+ */
+IMU_6AXES_StatusTypeDef    LSM6DS0::LSM6DS0_G_Get_ODR( float *odr )
+{
+  /*Here we have to add the check if the parameters are valid*/
+  uint8_t tempReg = 0x00;
+  
+  if(LSM6DS0_IO_Read( &tempReg, LSM6DS0_XG_CTRL_REG1_G, 1 ) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  tempReg &= LSM6DS0_G_ODR_MASK;
+  
+  switch( tempReg )
+  {
+    case LSM6DS0_G_ODR_PD:
+      *odr = 0.0f;
+      break;
+    case LSM6DS0_G_ODR_14_9HZ:
+      *odr = 14.9f;
+      break;
+    case LSM6DS0_G_ODR_59_5HZ:
+      *odr = 59.5f;
+      break;
+    case LSM6DS0_G_ODR_119HZ:
+      *odr = 119.0f;
+      break;
+    case LSM6DS0_G_ODR_238HZ:
+      *odr = 238.0f;
+      break;
+    case LSM6DS0_G_ODR_476HZ:
+      *odr = 476.0f;
+      break;
+    case LSM6DS0_G_ODR_952HZ:
+      *odr = 952.0f;
+      break;
+    default:
+      break;
+  }
+  
+  return IMU_6AXES_OK;
+}
+
+/**
+ * @brief  Write Gyro Output Data Rate
+ * @param  odr the gyroscope output data rate to be set
+ * @retval IMU_6AXES_OK in case of success, an error code otherwise
+ */
+IMU_6AXES_StatusTypeDef    LSM6DS0::LSM6DS0_G_Set_ODR( float odr )
+{
+  uint8_t new_odr = 0x00;
+  uint8_t tempReg = 0x00;
+  
+  new_odr = ( odr <= 0.0f   ) ? LSM6DS0_G_ODR_PD          /* Power Down */
+            : ( odr <= 14.9f  ) ? LSM6DS0_G_ODR_14_9HZ
+            : ( odr <= 59.5f  ) ? LSM6DS0_G_ODR_59_5HZ
+            : ( odr <= 119.0f ) ? LSM6DS0_G_ODR_119HZ
+            : ( odr <= 238.0f ) ? LSM6DS0_G_ODR_238HZ
+            : ( odr <= 476.0f ) ? LSM6DS0_G_ODR_476HZ
+            :                     LSM6DS0_G_ODR_952HZ;
+            
+  if(LSM6DS0_IO_Read( &tempReg, LSM6DS0_XG_CTRL_REG1_G, 1 ) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  tempReg &= ~(LSM6DS0_G_ODR_MASK);
+  tempReg |= new_odr;
+  
+  if(LSM6DS0_IO_Write(&tempReg, LSM6DS0_XG_CTRL_REG1_G, 1) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  return IMU_6AXES_OK;
+}
 
 /**
  * @brief  Read Gyro Sensitivity
  * @param  pfData the pointer where the gyroscope sensitivity is stored
  * @retval IMU_6AXES_OK in case of success, an error code otherwise
 */
-IMU_6AXES_StatusTypeDef LSM6DS0::LSM6DS0_G_GetSensitivity( float *pfData )
+IMU_6AXES_StatusTypeDef    LSM6DS0::LSM6DS0_G_GetSensitivity( float *pfData )
+{
+  /*Here we have to add the check if the parameters are valid*/
+  uint8_t tempReg = 0x00;
+  
+  if(LSM6DS0_IO_Read( &tempReg, LSM6DS0_XG_CTRL_REG1_G, 1 ) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  tempReg &= LSM6DS0_G_FS_MASK;
+  
+  switch( tempReg )
+  {
+    case LSM6DS0_G_FS_245:
+      *pfData = 8.75f;
+      break;
+    case LSM6DS0_G_FS_500:
+      *pfData = 17.50f;
+      break;
+    case LSM6DS0_G_FS_2000:
+      *pfData = 70.0f;
+      break;
+    default:
+      break;
+  }
+  
+  return IMU_6AXES_OK;
+}
+
+/**
+ * @brief  Read Gyro Full Scale
+ * @param  fullScale the pointer where the gyroscope full scale is stored
+ * @retval IMU_6AXES_OK in case of success, an error code otherwise
+*/
+IMU_6AXES_StatusTypeDef    LSM6DS0::LSM6DS0_G_Get_FS( float *fullScale )
 {
-    /*Here we have to add the check if the parameters are valid*/
-    uint8_t tempReg = 0x00;
-    
-    if(LSM6DS0_IO_Read( &tempReg, LSM6DS0_XG_CTRL_REG1_G, 1 ) != IMU_6AXES_OK)
-    {
-      return IMU_6AXES_ERROR;
-    }
-    
-    tempReg &= LSM6DS0_G_FS_MASK;
-    
-    switch( tempReg )
-    {
-      case LSM6DS0_G_FS_245:
-        *pfData = 8.75;
-        break;
-      case LSM6DS0_G_FS_500:
-        *pfData = 17.50;
-        break;
-      case LSM6DS0_G_FS_2000:
-        *pfData = 70;
-        break;
-      default:
-        break;
-    }
-    
-    return IMU_6AXES_OK;
+  /*Here we have to add the check if the parameters are valid*/
+  uint8_t tempReg = 0x00;
+  
+  if(LSM6DS0_IO_Read( &tempReg, LSM6DS0_XG_CTRL_REG1_G, 1 ) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  tempReg &= LSM6DS0_G_FS_MASK;
+  
+  switch( tempReg )
+  {
+    case LSM6DS0_G_FS_245:
+      *fullScale = 245.0f;
+      break;
+    case LSM6DS0_G_FS_500:
+      *fullScale = 500.0f;
+      break;
+    case LSM6DS0_G_FS_2000:
+      *fullScale = 2000.0f;
+      break;
+    default:
+      break;
+  }
+  
+  return IMU_6AXES_OK;
 }
+
+/**
+ * @brief  Write Gyro Full Scale
+ * @param  fullScale the gyroscope full scale to be set
+ * @retval IMU_6AXES_OK in case of success, an error code otherwise
+*/
+IMU_6AXES_StatusTypeDef    LSM6DS0::LSM6DS0_G_Set_FS( float fullScale )
+{
+  uint8_t new_fs = 0x00;
+  uint8_t tempReg = 0x00;
+  
+  new_fs = ( fullScale <= 245.0f ) ? LSM6DS0_G_FS_245
+           : ( fullScale <= 500.0f ) ? LSM6DS0_G_FS_500
+           :                           LSM6DS0_G_FS_2000;
+           
+  if(LSM6DS0_IO_Read( &tempReg, LSM6DS0_XG_CTRL_REG1_G, 1 ) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  tempReg &= ~(LSM6DS0_G_FS_MASK);
+  tempReg |= new_fs;
+  
+  if(LSM6DS0_IO_Write(&tempReg, LSM6DS0_XG_CTRL_REG1_G, 1) != IMU_6AXES_OK)
+  {
+    return IMU_6AXES_ERROR;
+  }
+  
+  return IMU_6AXES_OK;
+}
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- a/Components/lsm6ds0/lsm6ds0_class.h	Fri May 29 16:50:56 2015 +0200
+++ b/Components/lsm6ds0/lsm6ds0_class.h	Wed Jun 03 14:57:57 2015 +0200
@@ -69,29 +69,79 @@
 		return LSM6DS0_X_GetAxes(pData);
 	}
 
+	virtual int Get_X_AxesRaw(int16_t *pData) {
+		return LSM6DS0_X_GetAxesRaw(pData);
+	}
+
 	virtual int Get_G_Axes(int32_t *pData) {
 		return LSM6DS0_G_GetAxes(pData);
 	}
 
+	virtual int Get_G_AxesRaw(int16_t *pData) {
+		return LSM6DS0_G_GetAxesRaw(pData);
+	}
+
+	virtual int Get_X_ODR(float *odr) {
+		return LSM6DS0_X_Get_ODR(odr);
+	}
+
+	virtual int Set_X_ODR(float odr) {
+		return LSM6DS0_X_Set_ODR(odr);
+	}
+
 	virtual int Get_X_Sensitivity(float *pfData) {
 		return LSM6DS0_X_GetSensitivity(pfData);
 	}
 
+	virtual int Get_X_FS(float *fullScale) {
+		return LSM6DS0_X_Get_FS(fullScale);
+	}
+
+	virtual int Set_X_FS(float fullScale) {
+		return LSM6DS0_X_Set_FS(fullScale);
+	}
+
+	virtual int Get_G_ODR(float *odr) {
+		return LSM6DS0_G_Get_ODR(odr);
+	}
+
+	virtual int Set_G_ODR(float odr) {
+		return LSM6DS0_G_Set_ODR(odr);
+	}
+
 	virtual int Get_G_Sensitivity(float *pfData) {
 		return LSM6DS0_G_GetSensitivity(pfData);
 	}
 
+	virtual int Get_G_FS(float *fullScale) {
+		return LSM6DS0_G_Get_FS(fullScale);
+	}
+
+	virtual int Set_G_FS(float fullScale) {
+		return LSM6DS0_G_Set_FS(fullScale);
+	}
+
  protected:
 	/*** Methods ***/
 	IMU_6AXES_StatusTypeDef LSM6DS0_Init(IMU_6AXES_InitTypeDef *LSM6DS0_Init);
 	IMU_6AXES_StatusTypeDef LSM6DS0_Read_XG_ID(uint8_t *xg_id);
 	IMU_6AXES_StatusTypeDef LSM6DS0_X_GetAxes(int32_t *pData);
+	IMU_6AXES_StatusTypeDef LSM6DS0_X_GetAxesRaw(int16_t *pData);
 	IMU_6AXES_StatusTypeDef LSM6DS0_G_GetAxes(int32_t *pData);
+	IMU_6AXES_StatusTypeDef LSM6DS0_G_GetAxesRaw(int16_t *pData);
+	IMU_6AXES_StatusTypeDef LSM6DS0_X_Get_ODR( float *odr );
+	IMU_6AXES_StatusTypeDef LSM6DS0_X_Set_ODR( float odr );
 	IMU_6AXES_StatusTypeDef LSM6DS0_X_GetSensitivity( float *pfData );
+	IMU_6AXES_StatusTypeDef LSM6DS0_X_Get_FS( float *fullScale );
+	IMU_6AXES_StatusTypeDef LSM6DS0_X_Set_FS( float fullScale );
+	IMU_6AXES_StatusTypeDef LSM6DS0_G_Get_ODR( float *odr );
+	IMU_6AXES_StatusTypeDef LSM6DS0_G_Set_ODR( float odr );
 	IMU_6AXES_StatusTypeDef LSM6DS0_G_GetSensitivity( float *pfData );
-	
-	IMU_6AXES_StatusTypeDef LSM6DS0_X_GetAxesRaw(int16_t *pData);
-	IMU_6AXES_StatusTypeDef LSM6DS0_G_GetAxesRaw(int16_t *pData);
+	IMU_6AXES_StatusTypeDef LSM6DS0_G_Get_FS( float *fullScale );
+	IMU_6AXES_StatusTypeDef LSM6DS0_G_Set_FS( float fullScale );
+
+	IMU_6AXES_StatusTypeDef LSM6DS0_X_Set_Axes_Status(uint8_t enableX, uint8_t enableY, uint8_t enableZ);
+	IMU_6AXES_StatusTypeDef LSM6DS0_G_Set_Axes_Status(uint8_t enableX, uint8_t enableY, uint8_t enableZ);
 
 	/**
 	 * @brief  Configures LSM6DS0 interrupt lines for NUCLEO boards
--- a/Components/lsm6ds0/readme.txt	Fri May 29 16:50:56 2015 +0200
+++ b/Components/lsm6ds0/readme.txt	Wed Jun 03 14:57:57 2015 +0200
@@ -1,3 +1,3 @@
 lsm6ds0.h corresponds to:
-- X-CUBE-MEMS1/trunk/Drivers/BSP/Components/lsm6ds0/lsm6ds0.h: revision #165,
-- X-CUBE-MEMS1/trunk: revision #293
+- X-CUBE-MEMS1/trunk/Drivers/BSP/Components/lsm6ds0/lsm6ds0.h: revision #402,
+- X-CUBE-MEMS1/trunk: revision #402
--- a/x_nucleo_iks01a1.cpp	Fri May 29 16:50:56 2015 +0200
+++ b/x_nucleo_iks01a1.cpp	Wed Jun 03 14:57:57 2015 +0200
@@ -188,17 +188,17 @@
 	uint8_t xg_id = 0;
 
 	/* Configure sensor */
-	InitStructure.G_FullScale       = LSM6DS0_G_FS_2000;
-	InitStructure.G_OutputDataRate  = LSM6DS0_G_ODR_119HZ;
-	InitStructure.G_X_Axis          = LSM6DS0_G_XEN_ENABLE;
-	InitStructure.G_Y_Axis          = LSM6DS0_G_YEN_ENABLE;
-	InitStructure.G_Z_Axis          = LSM6DS0_G_ZEN_ENABLE;
+	InitStructure.G_FullScale       = 2000.0f; /* 2000DPS */
+	InitStructure.G_OutputDataRate  = 119.0f;  /* 119HZ */
+	InitStructure.G_X_Axis          = 1;       /* Enable */
+	InitStructure.G_Y_Axis          = 1;       /* Enable */
+	InitStructure.G_Z_Axis          = 1;       /* Enable */
 
-	InitStructure.X_FullScale       = LSM6DS0_XL_FS_2G;
-	InitStructure.X_OutputDataRate  = LSM6DS0_XL_ODR_119HZ;
-	InitStructure.X_X_Axis          = LSM6DS0_XL_XEN_ENABLE;
-	InitStructure.X_Y_Axis          = LSM6DS0_XL_YEN_ENABLE;
-	InitStructure.X_Z_Axis          = LSM6DS0_XL_ZEN_ENABLE;
+	InitStructure.X_FullScale       = 2.0f;    /* 2G */
+	InitStructure.X_OutputDataRate  = 119.0f;  /* 119HZ */
+	InitStructure.X_X_Axis          = 1;       /* Enable */
+	InitStructure.X_Y_Axis          = 1;       /* Enable */
+	InitStructure.X_Z_Axis          = 1;       /* Enable */
               
 	if(gyroscope.Init(&InitStructure) != IMU_6AXES_OK)
 		{