
Version of the IKS01A1 library for this coursework
Dependencies: X_NUCLEO_COMMON
Fork of X_NUCLEO_IKS01A1 by
Revision 24:92cc9c6e4b2b, committed 2015-06-03
- 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
--- 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>© 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>© 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) {