X_NUCLEO_IKS01A3 sensor board modified library

Dependencies:   STTS751 LPS22HH LIS2MDL HTS221 LIS2DW12 LSM6DSO

Dependents:   LELEC2811_LPS22HH_Altimeter LELEC2811_LISDW12_Accelerometer LELEC2811_LIS2MDL_Magnetometer LELEC2811_IKS01A3_Multisensors

Files at this revision

API Documentation at this revision

Comitter:
cparata
Date:
Wed Mar 06 11:56:01 2019 +0000
Child:
1:b65a75d6b409
Commit message:
First version of the X_NUCLEO_IKS01A3 library

Changed in this revision

Components/HTS221.lib Show annotated file Show diff for this revision Revisions of this file
Components/LIS2DW12.lib Show annotated file Show diff for this revision Revisions of this file
Components/LIS2MDL.lib Show annotated file Show diff for this revision Revisions of this file
Components/LPS22HH.lib Show annotated file Show diff for this revision Revisions of this file
Components/LSM6DSO.lib Show annotated file Show diff for this revision Revisions of this file
Components/STTS751.lib Show annotated file Show diff for this revision Revisions of this file
XNucleoIKS01A3.cpp Show annotated file Show diff for this revision Revisions of this file
XNucleoIKS01A3.h Show annotated file Show diff for this revision Revisions of this file
x_nucleo_iks01a3_targets.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Components/HTS221.lib	Wed Mar 06 11:56:01 2019 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/teams/ST/code/HTS221/#9f317607860e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Components/LIS2DW12.lib	Wed Mar 06 11:56:01 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/teams/ST/code/LIS2DW12/#111317ba9301
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Components/LIS2MDL.lib	Wed Mar 06 11:56:01 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/teams/ST-Expansion-SW-Team/code/LIS2MDL/#671edf39d961
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Components/LPS22HH.lib	Wed Mar 06 11:56:01 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/teams/ST-Expansion-SW-Team/code/LPS22HH/#c761bc6186e8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Components/LSM6DSO.lib	Wed Mar 06 11:56:01 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/teams/ST-Expansion-SW-Team/code/LSM6DSO/#6d69e896ce38
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Components/STTS751.lib	Wed Mar 06 11:56:01 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/teams/ST-Expansion-SW-Team/code/STTS751/#128dae13c732
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/XNucleoIKS01A3.cpp	Wed Mar 06 11:56:01 2019 +0000
@@ -0,0 +1,142 @@
+/**
+ ******************************************************************************
+ * @file    XNucleoIKS01A3.cpp
+ * @author  SRA
+ * @version V1.0.0
+ * @date    5-March-2019
+ * @brief   Implementation file for the X_NUCLEO_IKS01A3 singleton class
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; COPYRIGHT(c) 2019 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.
+ *
+ ******************************************************************************
+*/ 
+    
+/* Includes ------------------------------------------------------------------*/
+#include "mbed.h"
+#include "XNucleoIKS01A3.h"
+
+/* Static variables ----------------------------------------------------------*/
+XNucleoIKS01A3 *XNucleoIKS01A3::_instance = NULL;
+
+
+/* Methods -------------------------------------------------------------------*/
+/**
+ * @brief  Constructor
+ */
+XNucleoIKS01A3::XNucleoIKS01A3(DevI2C *ext_i2c, PinName lsm6dso_int1, PinName lsm6dso_int2, PinName lis2dw12_int1, PinName lps22hh_int, PinName stts751_int) : dev_i2c(ext_i2c),
+    ht_sensor(new HTS221Sensor(dev_i2c)),
+    magnetometer(new LIS2MDLSensor(dev_i2c)),
+    accelerometer(new LIS2DW12Sensor(dev_i2c, LIS2DW12_I2C_ADD_H, lis2dw12_int1)),
+    pt_sensor(new LPS22HHSensor(dev_i2c, LPS22HH_I2C_ADD_H, lps22hh_int)),
+    acc_gyro(new LSM6DSOSensor(dev_i2c, LSM6DSO_I2C_ADD_H, lsm6dso_int1, lsm6dso_int2)),
+    t_sensor(new STTS751Sensor(dev_i2c, STTS751_0xxxx_ADD_7K5, stts751_int))
+{ 
+  ht_sensor->init(NULL);
+  magnetometer->init(NULL);
+  accelerometer->init(NULL);
+  pt_sensor->init(NULL);
+  acc_gyro->init(NULL);
+  t_sensor->init(NULL);
+}
+
+/**
+ * @brief     Get singleton instance
+ * @return    a pointer to the initialized singleton instance of class XNucleoIKS01A3.
+ *            A return value of NULL indicates an out of memory situation.
+ * @param[in] ext_i2c (optional) pointer to an instance of DevI2C to be used
+ *            for communication on the expansion board. 
+ *            Defaults to NULL.
+ *            Taken into account only on the very first call of one of the 'Instance' functions.
+ *            If not provided a new DevI2C will be created with standard
+ *            configuration parameters.
+ *            The used DevI2C object gets saved in instance variable dev_i2c.
+ * @param[in] lsm6dso_int1 LSM6DSO INT1 pin.
+ *            Taken into account only on the very first call of one of the 'Instance' functions.
+ *            It maps the INT1 pin for LSM6DSO. Defaults to IKS01A3_PIN_LSM6DSO_INT1.
+ * @param[in] lsm6dso_int2 LSM6DSO INT2 pin.
+ *            Taken into account only on the very first call of one of the 'Instance' functions.
+ *            It maps the INT2 pin for LSM6DSO. Defaults to IKS01A3_PIN_LSM6DSO_INT2.
+ * @param[in] lis2dw12_int1 LIS2DW12 INT1 pin.
+ *            Taken into account only on the very first call of one of the 'Instance' functions.
+ *            It maps the INT1 pin for LIS2DW12. Defaults to IKS01A3_PIN_LIS2DW12_INT1.
+ * @param[in] lps22hh_int LPS22HH INT pin.
+ *            Taken into account only on the very first call of one of the 'Instance' functions.
+ *            It maps the INT pin for LPS22HH. Defaults to IKS01A3_PIN_LPS22HH_INT.
+ * @param[in] stts751_int STTS751 INT pin.
+ *            Taken into account only on the very first call of one of the 'Instance' functions.
+ *            It maps the INT pin for STTS751. Defaults to IKS01A3_PIN_STTS751_INT.
+ */
+XNucleoIKS01A3 *XNucleoIKS01A3::instance(DevI2C *ext_i2c, PinName lsm6dso_int1, PinName lsm6dso_int2, PinName lis2dw12_int1, PinName lps22hh_int, PinName stts751_int) {
+    if(_instance == NULL) {
+        if(ext_i2c == NULL)
+            ext_i2c = new DevI2C(IKS01A3_PIN_I2C_SDA, IKS01A3_PIN_I2C_SCL);
+
+        if(ext_i2c != NULL)
+            _instance = new XNucleoIKS01A3(ext_i2c, lsm6dso_int1, lsm6dso_int2, lis2dw12_int1, lps22hh_int, stts751_int);
+    }
+
+    return _instance;
+}
+
+/**
+ * @brief     Get singleton instance
+ * @return    a pointer to the initialized singleton instance of class X_NUCLEO_IKS01A3.
+ *            A return value of NULL indicates an out of memory situation.
+ * @param[in] sda I2C data line pin.
+ *            Taken into account only on the very first call of one of the 'Instance' functions.
+ *            A new DevI2C will be created based on parameters 'sda' and 'scl'.
+ *            The used DevI2C object gets saved in instance variable dev_i2c.
+ * @param[in] scl I2C clock line pin.
+ *            Taken into account only on the very first call of one of the 'Instance' functions.
+ *            A new DevI2C will be created based on parameters 'sda' and 'scl'.
+ *            The used DevI2C object gets saved in instance variable dev_i2c.
+ * @param[in] lsm6dso_int1 LSM6DSO INT1 pin.
+ *            Taken into account only on the very first call of one of the 'Instance' functions.
+ *            It maps the INT1 pin for LSM6DSO. Defaults to IKS01A3_PIN_LSM6DSO_INT1.
+ * @param[in] lsm6dso_int2 LSM6DSO INT2 pin.
+ *            Taken into account only on the very first call of one of the 'Instance' functions.
+ *            It maps the INT2 pin for LSM6DSO. Defaults to IKS01A3_PIN_LSM6DSO_INT2.
+ * @param[in] lis2dw12_int1 LIS2DW12 INT1 pin.
+ *            Taken into account only on the very first call of one of the 'Instance' functions.
+ *            It maps the INT1 pin for LIS2DW12. Defaults to IKS01A3_PIN_LIS2DW12_INT1.
+ * @param[in] lps22hh_int LPS22HH INT pin.
+ *            Taken into account only on the very first call of one of the 'Instance' functions.
+ *            It maps the INT pin for LPS22HH. Defaults to IKS01A3_PIN_LPS22HH_INT.
+ * @param[in] stts751_int STTS751 INT pin.
+ *            Taken into account only on the very first call of one of the 'Instance' functions.
+ *            It maps the INT pin for STTS751. Defaults to IKS01A3_PIN_STTS751_INT.
+ */
+XNucleoIKS01A3 *XNucleoIKS01A3::instance(PinName sda, PinName scl, PinName lsm6dso_int1, PinName lsm6dso_int2, PinName lis2dw12_int1, PinName lps22hh_int, PinName stts751_int) {
+    if(_instance == NULL) {
+        DevI2C *ext_i2c = new DevI2C(sda, scl);
+
+        if(ext_i2c != NULL)
+            _instance = new XNucleoIKS01A3(ext_i2c, lsm6dso_int1, lsm6dso_int2, lis2dw12_int1, lps22hh_int, stts751_int);
+    }
+
+    return _instance;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/XNucleoIKS01A3.h	Wed Mar 06 11:56:01 2019 +0000
@@ -0,0 +1,111 @@
+/**
+ ******************************************************************************
+ * @file    XNucleoIKS01A3.h
+ * @author  SRA
+ * @version V1.0.0
+ * @date    5-March-2019
+ * @brief   Header file for class XNucleoIKS01A3 representing a X-NUCLEO-IKS01A3
+ *          expansion board
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; COPYRIGHT(c) 2019 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 from recursive inclusion --------------------------------*/
+#ifndef __X_NUCLEO_IKS01A3_H
+#define __X_NUCLEO_IKS01A3_H
+
+/* Includes ------------------------------------------------------------------*/
+#include "mbed.h"
+#include "x_nucleo_iks01a3_targets.h"
+#include "HTS221Sensor.h"
+#include "LIS2DW12Sensor.h"
+#include "LIS2MDLSensor.h"
+#include "LPS22HHSensor.h"
+#include "LSM6DSOSensor.h"
+#include "STTS751Sensor.h"
+#include "DevI2C.h"
+
+/* Macros -------------------------------------------------------------------*/
+#define CALL_METH(obj, meth, param, ret) ((obj == NULL) ?       \
+                      ((*(param) = (ret)), 0) : \
+                      ((obj)->meth(param))      \
+                      )
+
+/* Classes -------------------------------------------------------------------*/
+/** Class XNucleoIKS01A3 is intended to represent the MEMS Inertial & Environmental 
+ *  Nucleo Expansion Board with the same name.
+ *
+ *  The expansion board is featuring basically four IPs:\n
+ *  -# a HTS221 Relative Humidity and Temperature Sensor\n
+ *  -# a LPS22HH MEMS Pressure Sensor (and Temperature Sensor)\n
+ *  -# a STTS751 MEMS Temperature Sensor\n
+ *  -# a LIS2DW12 3D Acceleromenter\n
+ *  -# a LIS2MDL 3D Magnetometer\n
+ *  -# and a LSM6DSO 3D Acceleromenter and 3D Gyroscope\n
+ *
+ * The expansion board features also a DIL 24-pin socket which makes it possible
+ * to add further MEMS adapters and other sensors (e.g. UV index). 
+ *
+ * It is intentionally implemented as a singleton because only one
+ * X_NUCLEO_IKS01A3 at a time might be deployed in a HW component stack.\n
+ * In order to get the singleton instance you have to call class method `Instance()`, 
+ * e.g.:
+ * @code
+ * // Inertial & Environmental expansion board singleton instance
+ * static X_NUCLEO_IKS01A3 *<TODO>_expansion_board = X_NUCLEO_IKS01A3::Instance();
+ * @endcode
+ */
+class XNucleoIKS01A3
+{
+ protected:
+    XNucleoIKS01A3(DevI2C *ext_i2c, PinName lsm6dso_int1, PinName lsm6dso_int2, PinName lis2dw12_int1, PinName lps22hh_int, PinName stts751_int);
+
+    ~XNucleoIKS01A3(void) {
+        /* should never be called */
+        error("Trial to delete XNucleoIKS01A3 singleton!\n");
+    }
+
+ public:
+    static XNucleoIKS01A3* instance(DevI2C *ext_i2c = NULL, PinName lsm6dso_int1 = IKS01A3_PIN_LSM6DSO_INT1, PinName lsm6dso_int2 = IKS01A3_PIN_LSM6DSO_INT2, PinName lis2dw12_int1 = IKS01A3_PIN_LIS2DW12_INT1, PinName lps22hh_int = IKS01A3_PIN_LPS22HH_INT, PinName stts751_int = IKS01A3_PIN_STTS751_INT);
+    static XNucleoIKS01A3* instance(PinName sda, PinName scl, PinName lsm6dso_int1 = IKS01A3_PIN_LSM6DSO_INT1, PinName lsm6dso_int2 = IKS01A3_PIN_LSM6DSO_INT2, PinName lis2dw12_int1 = IKS01A3_PIN_LIS2DW12_INT1, PinName lps22hh_int = IKS01A3_PIN_LPS22HH_INT, PinName stts751_int = IKS01A3_PIN_STTS751_INT);
+
+    DevI2C  *dev_i2c;
+
+    HTS221Sensor  *ht_sensor;
+    LIS2MDLSensor *magnetometer;
+    LIS2DW12Sensor *accelerometer;
+    LPS22HHSensor  *pt_sensor;
+    LSM6DSOSensor *acc_gyro;
+    STTS751Sensor  *t_sensor;
+
+ private:
+    static XNucleoIKS01A3 *_instance;
+};
+
+#endif /* __X_NUCLEO_IKS01A3_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/x_nucleo_iks01a3_targets.h	Wed Mar 06 11:56:01 2019 +0000
@@ -0,0 +1,60 @@
+/**
+  ******************************************************************************
+  * @file    x_nucleo_iks01a3_targets.h
+  * @author  SRA
+  * @version V1.0.0
+  * @date    5-March-2019
+  * @brief   This header file is intended to manage the differences between 
+  *          the different supported base-boards which might mount the
+  *          X_NUCLEO_IKS01A3 MEMS Inertial & Environmental Nucleo Expansion Board.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2019 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 from recursive inclusion --------------------------------*/
+#ifndef _X_NUCLEO_IKS01A3_TARGETS_H_
+#define _X_NUCLEO_IKS01A3_TARGETS_H_
+
+/*** I2C ***/
+/* Use Arduino I2C Connectors */
+#define IKS01A3_PIN_I2C_SDA         (D14)
+#define IKS01A3_PIN_I2C_SCL         (D15)
+
+/* LSM6DSO INT1 */
+#define IKS01A3_PIN_LSM6DSO_INT1     (D4)
+/* LSM6DSO INT2 */
+#define IKS01A3_PIN_LSM6DSO_INT2     (D5)
+/* LIS2DW12 INT1 */
+#define IKS01A3_PIN_LIS2DW12_INT1    (A3)
+/* LPS22HH INT */
+#define IKS01A3_PIN_LPS22HH_INT      (D6)
+/* STTS751 INT */
+#define IKS01A3_PIN_STTS751_INT      (A4)
+
+#endif // _X_NUCLEO_IKS01A3_TARGETS_H_