Mbed OS and Pelion Device Management example over WIFI for DISCO_L475VG_IOT01 board

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

DEPRECATED

This example application is not maintained and not recommended. It uses an old version of Mbed OS, Pelion DM and Arm toolchain. It doesn't work with Mbed Studio.

Please use: https://os.mbed.com/teams/mbed-os-examples/code/mbed-os-example-pelion/

This example is known to work on the following platforms:

DISCO_L475E_IOT01A

Follow the Quick-Start instructions: https://cloud.mbed.com/quick-start

Example functionality

This example showcases the following device functionality:

  • Read onboard temperature and humidity sensors, and report them as Pelion LWM2M resources (see image below).
  • On user button click, increment Pelion LWM2M button resource.
  • Allow the user to change the state of the board LED from Pelion LWM2M led_state resource and PUT request.
  • Uses all onboard sensors and reports them as Pelion LWM2M resources.

/media/uploads/screamer/pelion_st_humidity_reading.png?v=2

Use this example with Mbed CLI

1. Import the application into your desktop:

mbed import https://os.mbed.com/teams/ST/code/pelion-example-disco-iot01

cd pelion-example-disco-iot01

2. Install the CLOUD_SDK_API_KEY

mbed config -G CLOUD_SDK_API_KEY <PELION_DM_API_KEY>

For instructions on how to generate your API key, please see the documentation.

3. Initialize firmware credentials (done once per repository). You can use the following command:

mbed dm init -d "<your company name in Pelion DM>" --model-name "<product model identifier>" -q --force

If above command do not work for your Mbed CLI, please consider upgrading Mbed CLI to version 1.8.x or above.

4. Compile and program:

mbed compile -t <toolchain> -m DISCO_L475VG_IOT01A

(supported toolchains : GCC_ARM / ARM / IAR)

5. You can connect on a virtual terminal/COM port to the platform using:

mbed sterm -b 115200

This should give you an output similar to:

[BOOT] Mbed Bootloader
[BOOT] ARM: 00000000000000000000
[BOOT] OEM: 00000000000000000000
[BOOT] Layout: 0 80096F4
[BOOT] Active firmware integrity check:
[BOOT] SHA256: 0660E360D432225D5251461998FD8617B017098C5F1F90D5FB607BF8C27ED530
[BOOT] Version: 1553615309
[BOOT] Slot 0 is empty
[BOOT] Active firmware up-to-date
[BOOT] Application's start address: 0x8010400
[BOOT] Application's jump address: 0x8011041
[BOOT] Application's stack address: 0x20018000
[BOOT] Forwarding to application...

Starting Simple Pelion Device Management Client example
You can hold the user button during boot to format the storage and change the device identity.

Sensors configuration:
Invalid new address!
HTS221  humidity & temperature    = 0xBC
LPS22HB pressure & temperature    = 0xB1
LIS3MDL magnetometer              = 0x3D
LSM6DSL accelerometer & gyroscope = 0x6A

Connecting to the network using Wifi...
Connected to the network successfully. IP address: 192.168.1.3
Initializing Pelion Device Management Client...
Initialized Pelion Client. Registering...
Registered to Pelion Device Management. Endpoint Name: 0169********************001002d5

ADC temp:     23.0037 C,  vref:      0.3661 V
HTS221 temp:   28.700 C,  humidity:   31.90 %
LPS22HB temp:  29.600 C,  pressure: 1032.01 mbar
LIS3MDL mag:    0.217 x,  -0.284 y,  -0.053 z [gauss]
LSM6DSL acc:    0.005 x,  -0.014 y,   1.029 z [g]
LSM6DSL gyro:   0.910 x,  -0.910 y,   1.120 z [dps]
VL53L0X dist:    1855 mm
Committer:
chris
Date:
Fri Mar 13 13:18:07 2020 +0000
Revision:
36:aaf44d2a6c33
Parent:
18:a15bfe7aaebd
First revision

Who changed what in which revision?

UserRevisionLine numberNew contents of line
screamer 18:a15bfe7aaebd 1 /**
screamer 18:a15bfe7aaebd 2 ******************************************************************************
screamer 18:a15bfe7aaebd 3 * @file lis3mdl.h
screamer 18:a15bfe7aaebd 4 * @author MEMS Application Team
screamer 18:a15bfe7aaebd 5 * @version V1.3.0
screamer 18:a15bfe7aaebd 6 * @date 28-May-2015
screamer 18:a15bfe7aaebd 7 * @brief This file contains definitions for the lis3mdl.c
screamer 18:a15bfe7aaebd 8 * firmware driver.
screamer 18:a15bfe7aaebd 9 ******************************************************************************
screamer 18:a15bfe7aaebd 10 * @attention
screamer 18:a15bfe7aaebd 11 *
screamer 18:a15bfe7aaebd 12 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
screamer 18:a15bfe7aaebd 13 *
screamer 18:a15bfe7aaebd 14 * Redistribution and use in source and binary forms, with or without modification,
screamer 18:a15bfe7aaebd 15 * are permitted provided that the following conditions are met:
screamer 18:a15bfe7aaebd 16 * 1. Redistributions of source code must retain the above copyright notice,
screamer 18:a15bfe7aaebd 17 * this list of conditions and the following disclaimer.
screamer 18:a15bfe7aaebd 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
screamer 18:a15bfe7aaebd 19 * this list of conditions and the following disclaimer in the documentation
screamer 18:a15bfe7aaebd 20 * and/or other materials provided with the distribution.
screamer 18:a15bfe7aaebd 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
screamer 18:a15bfe7aaebd 22 * may be used to endorse or promote products derived from this software
screamer 18:a15bfe7aaebd 23 * without specific prior written permission.
screamer 18:a15bfe7aaebd 24 *
screamer 18:a15bfe7aaebd 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
screamer 18:a15bfe7aaebd 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
screamer 18:a15bfe7aaebd 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
screamer 18:a15bfe7aaebd 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
screamer 18:a15bfe7aaebd 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
screamer 18:a15bfe7aaebd 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
screamer 18:a15bfe7aaebd 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
screamer 18:a15bfe7aaebd 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
screamer 18:a15bfe7aaebd 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
screamer 18:a15bfe7aaebd 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
screamer 18:a15bfe7aaebd 35 *
screamer 18:a15bfe7aaebd 36 ******************************************************************************
screamer 18:a15bfe7aaebd 37 */
screamer 18:a15bfe7aaebd 38
screamer 18:a15bfe7aaebd 39 /* Define to prevent recursive inclusion -------------------------------------*/
screamer 18:a15bfe7aaebd 40 #ifndef __LIS3MDL_H
screamer 18:a15bfe7aaebd 41 #define __LIS3MDL_H
screamer 18:a15bfe7aaebd 42
screamer 18:a15bfe7aaebd 43 #ifdef __cplusplus
screamer 18:a15bfe7aaebd 44 extern "C" {
screamer 18:a15bfe7aaebd 45 #endif
screamer 18:a15bfe7aaebd 46
screamer 18:a15bfe7aaebd 47 /* Includes ------------------------------------------------------------------*/
screamer 18:a15bfe7aaebd 48 #include "magneto.h"
screamer 18:a15bfe7aaebd 49
screamer 18:a15bfe7aaebd 50 /** @addtogroup BSP
screamer 18:a15bfe7aaebd 51 * @{
screamer 18:a15bfe7aaebd 52 */
screamer 18:a15bfe7aaebd 53
screamer 18:a15bfe7aaebd 54 /** @addtogroup Components
screamer 18:a15bfe7aaebd 55 * @{
screamer 18:a15bfe7aaebd 56 */
screamer 18:a15bfe7aaebd 57
screamer 18:a15bfe7aaebd 58 /** @addtogroup LIS3MDL
screamer 18:a15bfe7aaebd 59 * @{
screamer 18:a15bfe7aaebd 60 */
screamer 18:a15bfe7aaebd 61
screamer 18:a15bfe7aaebd 62 /** @defgroup LIS3MDL_Exported_Defines LIS3MDL_Exported_Defines
screamer 18:a15bfe7aaebd 63 * @{
screamer 18:a15bfe7aaebd 64 */
screamer 18:a15bfe7aaebd 65 #ifndef NULL
screamer 18:a15bfe7aaebd 66 #define NULL (void *) 0
screamer 18:a15bfe7aaebd 67 #endif
screamer 18:a15bfe7aaebd 68
screamer 18:a15bfe7aaebd 69
screamer 18:a15bfe7aaebd 70 /******************************************************************************/
screamer 18:a15bfe7aaebd 71 /***************** START MAGNETIC SENSOR REGISTER MAPPING ********************/
screamer 18:a15bfe7aaebd 72 /******************************************************************************/
screamer 18:a15bfe7aaebd 73
screamer 18:a15bfe7aaebd 74 /**
screamer 18:a15bfe7aaebd 75 * @brief Device identifier register.
screamer 18:a15bfe7aaebd 76 * \code
screamer 18:a15bfe7aaebd 77 * Read
screamer 18:a15bfe7aaebd 78 * Default value:
screamer 18:a15bfe7aaebd 79 * 7:0 This read-only register contains the device identifier
screamer 18:a15bfe7aaebd 80 * \endcode
screamer 18:a15bfe7aaebd 81 */
screamer 18:a15bfe7aaebd 82 #define LIS3MDL_M_WHO_AM_I_ADDR 0x0F
screamer 18:a15bfe7aaebd 83
screamer 18:a15bfe7aaebd 84
screamer 18:a15bfe7aaebd 85 /**
screamer 18:a15bfe7aaebd 86 * @brief Magnetic sensor Control Register 1
screamer 18:a15bfe7aaebd 87 * \code
screamer 18:a15bfe7aaebd 88 * Read/write
screamer 18:a15bfe7aaebd 89 * Default value: 0x10
screamer 18:a15bfe7aaebd 90 * [7] TEMP_COMP: Temperature compensation enable
screamer 18:a15bfe7aaebd 91 * [6:5] OM1-0: X and Y axes operative mode selection
screamer 18:a15bfe7aaebd 92 * [4:2] DO2-0: Output data rate selection
screamer 18:a15bfe7aaebd 93 * [1] This bit must be set to �0� for the correct operation of the device
screamer 18:a15bfe7aaebd 94 * [0] ST: Self-test enable
screamer 18:a15bfe7aaebd 95 * \endcode
screamer 18:a15bfe7aaebd 96 */
screamer 18:a15bfe7aaebd 97 #define LIS3MDL_M_CTRL_REG1_M 0x20
screamer 18:a15bfe7aaebd 98
screamer 18:a15bfe7aaebd 99
screamer 18:a15bfe7aaebd 100 /**
screamer 18:a15bfe7aaebd 101 * @brief Magnetic sensor Control Register 2
screamer 18:a15bfe7aaebd 102 * \code
screamer 18:a15bfe7aaebd 103 * Read/write
screamer 18:a15bfe7aaebd 104 * Default value: 0x00
screamer 18:a15bfe7aaebd 105 * [7] These bits must be set to �0� for the correct operation of the device
screamer 18:a15bfe7aaebd 106 * [6:5] FS1-0: Full-scale configuration
screamer 18:a15bfe7aaebd 107 * [4] These bits must be set to �0� for the correct operation of the device
screamer 18:a15bfe7aaebd 108 * [3] REBOOT: Reboot memory content
screamer 18:a15bfe7aaebd 109 * [2] SOFT_RST: Configuration registers and user register reset function
screamer 18:a15bfe7aaebd 110 * [1:0] These bits must be set to �0� for the correct operation of the device
screamer 18:a15bfe7aaebd 111 * \endcode
screamer 18:a15bfe7aaebd 112 */
screamer 18:a15bfe7aaebd 113 #define LIS3MDL_M_CTRL_REG2_M 0x21
screamer 18:a15bfe7aaebd 114
screamer 18:a15bfe7aaebd 115
screamer 18:a15bfe7aaebd 116 /**
screamer 18:a15bfe7aaebd 117 * @brief Magnetic sensor Control Register 3
screamer 18:a15bfe7aaebd 118 * \code
screamer 18:a15bfe7aaebd 119 * Read/write
screamer 18:a15bfe7aaebd 120 * Default value: 0x03
screamer 18:a15bfe7aaebd 121 * [7] I2C_DISABLE: Disable I2C interface
screamer 18:a15bfe7aaebd 122 * [6] These bits must be set to �0� for the correct operation of the device
screamer 18:a15bfe7aaebd 123 * [5] LP: Low-power mode configuration
screamer 18:a15bfe7aaebd 124 * [4:3] These bits must be set to �0� for the correct operation of the device
screamer 18:a15bfe7aaebd 125 * [2] SIM: SPI Serial Interface mode selection
screamer 18:a15bfe7aaebd 126 * [1:0] MD1-0: Operating mode selection
screamer 18:a15bfe7aaebd 127 * \endcode
screamer 18:a15bfe7aaebd 128 */
screamer 18:a15bfe7aaebd 129 #define LIS3MDL_M_CTRL_REG3_M 0x22
screamer 18:a15bfe7aaebd 130
screamer 18:a15bfe7aaebd 131
screamer 18:a15bfe7aaebd 132 /**
screamer 18:a15bfe7aaebd 133 * @brief Magnetic sensor data (LSB)
screamer 18:a15bfe7aaebd 134 * \code
screamer 18:a15bfe7aaebd 135 * Read
screamer 18:a15bfe7aaebd 136 * \endcode
screamer 18:a15bfe7aaebd 137 */
screamer 18:a15bfe7aaebd 138 #define LIS3MDL_M_OUT_X_L_M 0x28
screamer 18:a15bfe7aaebd 139
screamer 18:a15bfe7aaebd 140
screamer 18:a15bfe7aaebd 141 /**
screamer 18:a15bfe7aaebd 142 * @brief Magnetic sensor data (MSB)
screamer 18:a15bfe7aaebd 143 * \code
screamer 18:a15bfe7aaebd 144 * Read
screamer 18:a15bfe7aaebd 145 * \endcode
screamer 18:a15bfe7aaebd 146 */
screamer 18:a15bfe7aaebd 147 #define LIS3MDL_M_OUT_X_H_M 0x29
screamer 18:a15bfe7aaebd 148
screamer 18:a15bfe7aaebd 149
screamer 18:a15bfe7aaebd 150 /**
screamer 18:a15bfe7aaebd 151 * @brief Magnetic sensor data (LSB)
screamer 18:a15bfe7aaebd 152 * \code
screamer 18:a15bfe7aaebd 153 * Read
screamer 18:a15bfe7aaebd 154 * \endcode
screamer 18:a15bfe7aaebd 155 */
screamer 18:a15bfe7aaebd 156 #define LIS3MDL_M_OUT_Y_L_M 0x2A
screamer 18:a15bfe7aaebd 157
screamer 18:a15bfe7aaebd 158
screamer 18:a15bfe7aaebd 159 /**
screamer 18:a15bfe7aaebd 160 * @brief Magnetic sensor data (MSB)
screamer 18:a15bfe7aaebd 161 * \code
screamer 18:a15bfe7aaebd 162 * Read
screamer 18:a15bfe7aaebd 163 * \endcode
screamer 18:a15bfe7aaebd 164 */
screamer 18:a15bfe7aaebd 165 #define LIS3MDL_M_OUT_Y_H_M 0x2B
screamer 18:a15bfe7aaebd 166
screamer 18:a15bfe7aaebd 167
screamer 18:a15bfe7aaebd 168 /**
screamer 18:a15bfe7aaebd 169 * @brief Magnetic sensor data (LSB)
screamer 18:a15bfe7aaebd 170 * \code
screamer 18:a15bfe7aaebd 171 * Read
screamer 18:a15bfe7aaebd 172 * \endcode
screamer 18:a15bfe7aaebd 173 */
screamer 18:a15bfe7aaebd 174 #define LIS3MDL_M_OUT_Z_L_M 0x2C
screamer 18:a15bfe7aaebd 175
screamer 18:a15bfe7aaebd 176
screamer 18:a15bfe7aaebd 177 /**
screamer 18:a15bfe7aaebd 178 * @brief Magnetic sensor data (MSB)
screamer 18:a15bfe7aaebd 179 * \code
screamer 18:a15bfe7aaebd 180 * Read
screamer 18:a15bfe7aaebd 181 * \endcode
screamer 18:a15bfe7aaebd 182 */
screamer 18:a15bfe7aaebd 183 #define LIS3MDL_M_OUT_Z_H_M 0x2D
screamer 18:a15bfe7aaebd 184
screamer 18:a15bfe7aaebd 185
screamer 18:a15bfe7aaebd 186 /**
screamer 18:a15bfe7aaebd 187 * @brief Magnetic sensor Interrupt config register
screamer 18:a15bfe7aaebd 188 * \code
screamer 18:a15bfe7aaebd 189 * Read/write
screamer 18:a15bfe7aaebd 190 * Default value: 0x00
screamer 18:a15bfe7aaebd 191 * [7] XIEN: Enable interrupt generation on X axis
screamer 18:a15bfe7aaebd 192 * [6] YIEN: Enable interrupt generation on Y axis
screamer 18:a15bfe7aaebd 193 * [5] ZIEN: Enable interrupt generation on Z axis
screamer 18:a15bfe7aaebd 194 * [4:3] Must be 0
screamer 18:a15bfe7aaebd 195 * [2] IEA: Interrupt active configuration on INT
screamer 18:a15bfe7aaebd 196 * [1] LIR: Latch interrupt request
screamer 18:a15bfe7aaebd 197 * [0] IEN: Interrupt enable on INT pin
screamer 18:a15bfe7aaebd 198 * \endcode
screamer 18:a15bfe7aaebd 199 */
screamer 18:a15bfe7aaebd 200 #define LIS3MDL_M_INT_CFG 0x30
screamer 18:a15bfe7aaebd 201
screamer 18:a15bfe7aaebd 202
screamer 18:a15bfe7aaebd 203 /**
screamer 18:a15bfe7aaebd 204 * @brief Magnetic sensor Interrupt source register
screamer 18:a15bfe7aaebd 205 * \code
screamer 18:a15bfe7aaebd 206 * Read/write
screamer 18:a15bfe7aaebd 207 * Default value: 0x00
screamer 18:a15bfe7aaebd 208 * [7] PTH_X: Value on X-axis exceeds the threshold on the positive side
screamer 18:a15bfe7aaebd 209 * [6] PTH_Y: Value on Y-axis exceeds the threshold on the positive side
screamer 18:a15bfe7aaebd 210 * [5] PTH_Z: Value on Z-axis exceeds the threshold on the positive side
screamer 18:a15bfe7aaebd 211 * [4] NTH_X: Value on X-axis exceeds the threshold on the negative side
screamer 18:a15bfe7aaebd 212 * [3] NTH_Y: Value on Y-axis exceeds the threshold on the negative side
screamer 18:a15bfe7aaebd 213 * [2] NTH_Z: Value on Z-axis exceeds the threshold on the negative side
screamer 18:a15bfe7aaebd 214 * [1] MROI: Internal measurement range overflow on magnetic value
screamer 18:a15bfe7aaebd 215 * [0] INT: This bit signals when interrupt event occours
screamer 18:a15bfe7aaebd 216 * \endcode
screamer 18:a15bfe7aaebd 217 */
screamer 18:a15bfe7aaebd 218 #define LIS3MDL_M_INT_SRC 0x31
screamer 18:a15bfe7aaebd 219
screamer 18:a15bfe7aaebd 220
screamer 18:a15bfe7aaebd 221 /**
screamer 18:a15bfe7aaebd 222 * @brief Magnetic sensor Interrupt threshold register low
screamer 18:a15bfe7aaebd 223 * \code
screamer 18:a15bfe7aaebd 224 * Read/write
screamer 18:a15bfe7aaebd 225 * Default value: 0x00
screamer 18:a15bfe7aaebd 226 * [7:0] THS7-0: Least 8 significant bits of interrupt threshold
screamer 18:a15bfe7aaebd 227 * \endcode
screamer 18:a15bfe7aaebd 228 */
screamer 18:a15bfe7aaebd 229 #define LIS3MDL_M_INT_THS_L_M 0x32
screamer 18:a15bfe7aaebd 230
screamer 18:a15bfe7aaebd 231
screamer 18:a15bfe7aaebd 232 /**
screamer 18:a15bfe7aaebd 233 * @brief Magnetic sensor Interrupt threshold register high
screamer 18:a15bfe7aaebd 234 * \code
screamer 18:a15bfe7aaebd 235 * Read/write
screamer 18:a15bfe7aaebd 236 * Default value: 0x00
screamer 18:a15bfe7aaebd 237 * [7] Must be 0
screamer 18:a15bfe7aaebd 238 * [6:0] THS14-8: Most 7 significant bits of interrupt threshold
screamer 18:a15bfe7aaebd 239 * \endcode
screamer 18:a15bfe7aaebd 240 */
screamer 18:a15bfe7aaebd 241 #define LIS3MDL_M_INT_THS_H_M 0x33
screamer 18:a15bfe7aaebd 242
screamer 18:a15bfe7aaebd 243 /******************************************************************************/
screamer 18:a15bfe7aaebd 244 /******************* END MAGNETIC SENSOR REGISTER MAPPING ********************/
screamer 18:a15bfe7aaebd 245 /******************************************************************************/
screamer 18:a15bfe7aaebd 246
screamer 18:a15bfe7aaebd 247 /**
screamer 18:a15bfe7aaebd 248 * @brief Multiple Byte. Mask for enabling multiple byte read/write command.
screamer 18:a15bfe7aaebd 249 */
screamer 18:a15bfe7aaebd 250 #define LIS3MDL_I2C_MULTIPLEBYTE_CMD ((uint8_t)0x80)
screamer 18:a15bfe7aaebd 251
screamer 18:a15bfe7aaebd 252 /**
screamer 18:a15bfe7aaebd 253 * @brief I2C Device Address
screamer 18:a15bfe7aaebd 254 */
screamer 18:a15bfe7aaebd 255 //#define LIS3MDL_M_MEMS_ADDRESS 0x3C // SAD[1] = 1
screamer 18:a15bfe7aaebd 256 #define LIS3MDL_M_MEMS_ADDRESS_LOW 0x38 // SAD[1] = 0
screamer 18:a15bfe7aaebd 257 #define LIS3MDL_M_MEMS_ADDRESS_HIGH 0x3C // SAD[1] = 1
screamer 18:a15bfe7aaebd 258
screamer 18:a15bfe7aaebd 259 /**
screamer 18:a15bfe7aaebd 260 * @brief Device Identifier. Default value of the WHO_AM_I register.
screamer 18:a15bfe7aaebd 261 */
screamer 18:a15bfe7aaebd 262 #define I_AM_LIS3MDL_M ((uint8_t)0x3D)
screamer 18:a15bfe7aaebd 263
screamer 18:a15bfe7aaebd 264
screamer 18:a15bfe7aaebd 265 /*********************************** MAGNETIC SENSOR REGISTERS VALUE ****************************************/
screamer 18:a15bfe7aaebd 266
screamer 18:a15bfe7aaebd 267 /** @defgroup LIS3MDL_M_Temperature_Compensation_Enable_Selection_CTRL_REG1_M LIS3MDL_M_Temperature_Compensation_Enable_Selection_CTRL_REG1_M
screamer 18:a15bfe7aaebd 268 * @{
screamer 18:a15bfe7aaebd 269 */
screamer 18:a15bfe7aaebd 270 #define LIS3MDL_M_TEMP_COMP_DISABLE ((uint8_t)0x00) /*!< Temperature compensation: disable */
screamer 18:a15bfe7aaebd 271 #define LIS3MDL_M_TEMP_COMP_ENABLE ((uint8_t)0x80) /*!< Temperature compensation: enable */
screamer 18:a15bfe7aaebd 272
screamer 18:a15bfe7aaebd 273 #define LIS3MDL_M_TEMP_COMP_MASK ((uint8_t)0x80)
screamer 18:a15bfe7aaebd 274 /**
screamer 18:a15bfe7aaebd 275 * @}
screamer 18:a15bfe7aaebd 276 */
screamer 18:a15bfe7aaebd 277
screamer 18:a15bfe7aaebd 278 /** @defgroup LIS3MDL_M_X_And_Y_Axes_Operative_Mode_Selection_CTRL_REG1_M LIS3MDL_M_X_And_Y_Axes_Operative_Mode_Selection_CTRL_REG1_M
screamer 18:a15bfe7aaebd 279 * @{
screamer 18:a15bfe7aaebd 280 */
screamer 18:a15bfe7aaebd 281 #define LIS3MDL_M_OM_LP ((uint8_t)0x00) /*!< X and Y axes operative mode: Low-power mode */
screamer 18:a15bfe7aaebd 282 #define LIS3MDL_M_OM_MP ((uint8_t)0x20) /*!< X and Y axes operative mode: Medium-performance mode */
screamer 18:a15bfe7aaebd 283 #define LIS3MDL_M_OM_HP ((uint8_t)0x40) /*!< X and Y axes operative mode: High-performance mode */
screamer 18:a15bfe7aaebd 284 #define LIS3MDL_M_OM_UHP ((uint8_t)0x60) /*!< X and Y axes operative mode: Ultra-high performance mode */
screamer 18:a15bfe7aaebd 285
screamer 18:a15bfe7aaebd 286 #define LIS3MDL_M_OM_MASK ((uint8_t)0x60)
screamer 18:a15bfe7aaebd 287 /**
screamer 18:a15bfe7aaebd 288 * @}
screamer 18:a15bfe7aaebd 289 */
screamer 18:a15bfe7aaebd 290
screamer 18:a15bfe7aaebd 291 /** @defgroup LIS3MDL_M_Output_Data_Rate_Selection_CTRL_REG1_M LIS3MDL_M_Output_Data_Rate_Selection_CTRL_REG1_M
screamer 18:a15bfe7aaebd 292 * @{
screamer 18:a15bfe7aaebd 293 */
screamer 18:a15bfe7aaebd 294 #define LIS3MDL_M_DO_0_625 ((uint8_t)0x00) /*!< Output data rate selection: 0.625 */
screamer 18:a15bfe7aaebd 295 #define LIS3MDL_M_DO_1_25 ((uint8_t)0x04) /*!< Output data rate selection: 1.25 */
screamer 18:a15bfe7aaebd 296 #define LIS3MDL_M_DO_2_5 ((uint8_t)0x08) /*!< Output data rate selection: 2.5 */
screamer 18:a15bfe7aaebd 297 #define LIS3MDL_M_DO_5 ((uint8_t)0x0C) /*!< Output data rate selection: 5 */
screamer 18:a15bfe7aaebd 298 #define LIS3MDL_M_DO_10 ((uint8_t)0x10) /*!< Output data rate selection: 10 */
screamer 18:a15bfe7aaebd 299 #define LIS3MDL_M_DO_20 ((uint8_t)0x14) /*!< Output data rate selection: 20 */
screamer 18:a15bfe7aaebd 300 #define LIS3MDL_M_DO_40 ((uint8_t)0x18) /*!< Output data rate selection: 40 */
screamer 18:a15bfe7aaebd 301 #define LIS3MDL_M_DO_80 ((uint8_t)0x1C) /*!< Output data rate selection: 80 */
screamer 18:a15bfe7aaebd 302
screamer 18:a15bfe7aaebd 303 #define LIS3MDL_M_DO_MASK ((uint8_t)0x1C)
screamer 18:a15bfe7aaebd 304 /**
screamer 18:a15bfe7aaebd 305 * @}
screamer 18:a15bfe7aaebd 306 */
screamer 18:a15bfe7aaebd 307
screamer 18:a15bfe7aaebd 308 /** @defgroup LIS3MDL_M_Self_Test_Enable_Selection_CTRL_REG1_M LIS3MDL_M_Self_Test_Enable_Selection_CTRL_REG1_M
screamer 18:a15bfe7aaebd 309 * @{
screamer 18:a15bfe7aaebd 310 */
screamer 18:a15bfe7aaebd 311 #define LIS3MDL_M_ST_DISABLE ((uint8_t)0x00) /*!< Self-test: disable */
screamer 18:a15bfe7aaebd 312 #define LIS3MDL_M_ST_ENABLE ((uint8_t)0x01) /*!< Self-test: enable */
screamer 18:a15bfe7aaebd 313
screamer 18:a15bfe7aaebd 314 #define LIS3MDL_M_ST_MASK ((uint8_t)0x01)
screamer 18:a15bfe7aaebd 315 /**
screamer 18:a15bfe7aaebd 316 * @}
screamer 18:a15bfe7aaebd 317 */
screamer 18:a15bfe7aaebd 318
screamer 18:a15bfe7aaebd 319 /** @defgroup LIS3MDL_M_Full_Scale_Selection_CTRL_REG2_M LIS3MDL_M_Full_Scale_Selection_CTRL_REG2_M
screamer 18:a15bfe7aaebd 320 * @{
screamer 18:a15bfe7aaebd 321 */
screamer 18:a15bfe7aaebd 322 #define LIS3MDL_M_FS_4 ((uint8_t)0x00) /*!< Full scale: +-4 guass */
screamer 18:a15bfe7aaebd 323 #define LIS3MDL_M_FS_8 ((uint8_t)0x20) /*!< Full scale: +-8 gauss */
screamer 18:a15bfe7aaebd 324 #define LIS3MDL_M_FS_12 ((uint8_t)0x40) /*!< Full scale: +-12 gauss */
screamer 18:a15bfe7aaebd 325 #define LIS3MDL_M_FS_16 ((uint8_t)0x60) /*!< Full scale: +-16 gauss */
screamer 18:a15bfe7aaebd 326
screamer 18:a15bfe7aaebd 327 #define LIS3MDL_M_FS_MASK ((uint8_t)0x60)
screamer 18:a15bfe7aaebd 328 /**
screamer 18:a15bfe7aaebd 329 * @}
screamer 18:a15bfe7aaebd 330 */
screamer 18:a15bfe7aaebd 331
screamer 18:a15bfe7aaebd 332 /** @defgroup LIS3MDL_M_Reboot_Memory_Selection_CTRL_REG2_M LIS3MDL_M_Reboot_Memory_Selection_CTRL_REG2_M
screamer 18:a15bfe7aaebd 333 * @{
screamer 18:a15bfe7aaebd 334 */
screamer 18:a15bfe7aaebd 335 #define LIS3MDL_M_REBOOT_NORMAL ((uint8_t)0x00) /*!< Reboot mode: normal mode */
screamer 18:a15bfe7aaebd 336 #define LIS3MDL_M_REBOOT_MEM_CONTENT ((uint8_t)0x08) /*!< Reboot mode: reboot memory content */
screamer 18:a15bfe7aaebd 337
screamer 18:a15bfe7aaebd 338 #define LIS3MDL_M_REBOOT_MASK ((uint8_t)0x08)
screamer 18:a15bfe7aaebd 339 /**
screamer 18:a15bfe7aaebd 340 * @}
screamer 18:a15bfe7aaebd 341 */
screamer 18:a15bfe7aaebd 342
screamer 18:a15bfe7aaebd 343 /** @defgroup LIS3MDL_M_Configuration_Registers_And_User_Register_Reset_CTRL_REG2_M LIS3MDL_M_Configuration_Registers_And_User_Register_Reset_CTRL_REG2_M
screamer 18:a15bfe7aaebd 344 * @{
screamer 18:a15bfe7aaebd 345 */
screamer 18:a15bfe7aaebd 346 #define LIS3MDL_M_SOFT_RST_DEFAULT ((uint8_t)0x00) /*!< Reset function: default value */
screamer 18:a15bfe7aaebd 347 #define LIS3MDL_M_SOFT_RST_RESET ((uint8_t)0x04) /*!< Reset function: reset operation */
screamer 18:a15bfe7aaebd 348
screamer 18:a15bfe7aaebd 349 #define LIS3MDL_M_SOFT_RST_MASK ((uint8_t)0x04)
screamer 18:a15bfe7aaebd 350 /**
screamer 18:a15bfe7aaebd 351 * @}
screamer 18:a15bfe7aaebd 352 */
screamer 18:a15bfe7aaebd 353
screamer 18:a15bfe7aaebd 354 /** @defgroup LIS3MDL_M_Disable_I2C_Interface_Selection_CTRL_REG3_M LIS3MDL_M_Disable_I2C_Interface_Selection_CTRL_REG3_M
screamer 18:a15bfe7aaebd 355 * @{
screamer 18:a15bfe7aaebd 356 */
screamer 18:a15bfe7aaebd 357 #define LIS3MDL_M_I2C_ENABLE ((uint8_t)0x00) /*!< I2C interface: enable */
screamer 18:a15bfe7aaebd 358 #define LIS3MDL_M_I2C_DISABLE ((uint8_t)0x80) /*!< I2C interface: disable */
screamer 18:a15bfe7aaebd 359
screamer 18:a15bfe7aaebd 360 #define LIS3MDL_M_I2C_MASK ((uint8_t)0x80)
screamer 18:a15bfe7aaebd 361 /**
screamer 18:a15bfe7aaebd 362 * @}
screamer 18:a15bfe7aaebd 363 */
screamer 18:a15bfe7aaebd 364
screamer 18:a15bfe7aaebd 365 /** @defgroup LIS3MDL_M_Low_Power_Mode_Selection_CTRL_REG3_M LIS3MDL_M_Low_Power_Mode_Selection_CTRL_REG3_M
screamer 18:a15bfe7aaebd 366 * @{
screamer 18:a15bfe7aaebd 367 */
screamer 18:a15bfe7aaebd 368 #define LIS3MDL_M_LP_ENABLE ((uint8_t)0x00) /*!< Low-power mode: magnetic data rate is configured by
screamer 18:a15bfe7aaebd 369 the DO bits in the CTRL_REG1_M */
screamer 18:a15bfe7aaebd 370 #define LIS3MDL_M_LP_DISABLE ((uint8_t)0x20) /*!< Low-power mode: the DO bits is set to 0.625 Hz and the system performs,
screamer 18:a15bfe7aaebd 371 for each channel, the minimum number of averages */
screamer 18:a15bfe7aaebd 372
screamer 18:a15bfe7aaebd 373 #define LIS3MDL_M_LP_MASK ((uint8_t)0x20)
screamer 18:a15bfe7aaebd 374 /**
screamer 18:a15bfe7aaebd 375 * @}
screamer 18:a15bfe7aaebd 376 */
screamer 18:a15bfe7aaebd 377
screamer 18:a15bfe7aaebd 378 /** @defgroup LIS3MDL_M_SPI_Serial_Interface_Mode_Selection_CTRL_REG3_M LIS3MDL_M_SPI_Serial_Interface_Mode_Selection_CTRL_REG3_M
screamer 18:a15bfe7aaebd 379 * @{
screamer 18:a15bfe7aaebd 380 */
screamer 18:a15bfe7aaebd 381 #define LIS3MDL_M_SPI_R_ENABLE ((uint8_t)0x00) /*!< SPI Serial Interface mode: only write operations enabled */
screamer 18:a15bfe7aaebd 382 #define LIS3MDL_M_SPI_R_DISABLE ((uint8_t)0x40) /*!< SPI Serial Interface mode: read and write operations enable */
screamer 18:a15bfe7aaebd 383
screamer 18:a15bfe7aaebd 384 #define LIS3MDL_M_SPI_R_MASK ((uint8_t)0x40)
screamer 18:a15bfe7aaebd 385 /**
screamer 18:a15bfe7aaebd 386 * @}
screamer 18:a15bfe7aaebd 387 */
screamer 18:a15bfe7aaebd 388
screamer 18:a15bfe7aaebd 389 /** @defgroup LIS3MDL_M_Operating_Mode_Selection_CTRL_REG3_M LIS3MDL_M_Operating_Mode_Selection_CTRL_REG3_M
screamer 18:a15bfe7aaebd 390 * @{
screamer 18:a15bfe7aaebd 391 */
screamer 18:a15bfe7aaebd 392 #define LIS3MDL_M_MD_CONTINUOUS ((uint8_t)0x00) /*!< Operating mode: Continuous-conversion mode */
screamer 18:a15bfe7aaebd 393 #define LIS3MDL_M_MD_SINGLE ((uint8_t)0x01) /*!< Operating mode: Single-conversion mode has to be used with sampling frequency from 0.625 Hz to 80 Hz. */
screamer 18:a15bfe7aaebd 394 #define LIS3MDL_M_MD_PD ((uint8_t)0x02) /*!< Operating mode: Power-down mode */
screamer 18:a15bfe7aaebd 395
screamer 18:a15bfe7aaebd 396 #define LIS3MDL_M_MD_MASK ((uint8_t)0x03)
screamer 18:a15bfe7aaebd 397 /**
screamer 18:a15bfe7aaebd 398 * @}
screamer 18:a15bfe7aaebd 399 */
screamer 18:a15bfe7aaebd 400
screamer 18:a15bfe7aaebd 401 /**
screamer 18:a15bfe7aaebd 402 * @}
screamer 18:a15bfe7aaebd 403 */
screamer 18:a15bfe7aaebd 404
screamer 18:a15bfe7aaebd 405 /** @defgroup LIS3MDL_Imported_Functions LIS3MDL_Imported_Functions
screamer 18:a15bfe7aaebd 406 * @{
screamer 18:a15bfe7aaebd 407 */
screamer 18:a15bfe7aaebd 408
screamer 18:a15bfe7aaebd 409 /* Magneto sensor IO functions */
screamer 18:a15bfe7aaebd 410 extern MAGNETO_StatusTypeDef LIS3MDL_IO_Init(void);
screamer 18:a15bfe7aaebd 411 extern MAGNETO_StatusTypeDef LIS3MDL_IO_Write(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr,
screamer 18:a15bfe7aaebd 412 uint16_t NumByteToWrite);
screamer 18:a15bfe7aaebd 413 extern MAGNETO_StatusTypeDef LIS3MDL_IO_Read(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr,
screamer 18:a15bfe7aaebd 414 uint16_t NumByteToRead);
screamer 18:a15bfe7aaebd 415 extern void LIS3MDL_IO_ITConfig( void );
screamer 18:a15bfe7aaebd 416
screamer 18:a15bfe7aaebd 417 /**
screamer 18:a15bfe7aaebd 418 * @}
screamer 18:a15bfe7aaebd 419 */
screamer 18:a15bfe7aaebd 420
screamer 18:a15bfe7aaebd 421 /* ------------------------------------------------------- */
screamer 18:a15bfe7aaebd 422 /* Here you should declare the internal struct of */
screamer 18:a15bfe7aaebd 423 /* extended features of LSM6DS0. See the example of */
screamer 18:a15bfe7aaebd 424 /* LSM6DS3 in lsm6ds3.h */
screamer 18:a15bfe7aaebd 425 /* ------------------------------------------------------- */
screamer 18:a15bfe7aaebd 426 typedef enum { LIS3MDL_SPI_4_WIRE = (uint8_t)0x00, LIS3MDL_SPI_3_WIRE = (uint8_t)0x04} LIS3MDL_SPIMode_t;
screamer 18:a15bfe7aaebd 427 /** @addtogroup LIS3MDL_Exported_Variables LIS3MDL_Exported_Variables
screamer 18:a15bfe7aaebd 428 * @{
screamer 18:a15bfe7aaebd 429 */
screamer 18:a15bfe7aaebd 430 /* Magneto sensor driver structure */
screamer 18:a15bfe7aaebd 431 extern MAGNETO_DrvTypeDef LIS3MDLDrv;
screamer 18:a15bfe7aaebd 432 extern MAGNETO_DrvExtTypeDef LIS3MDLDrv_ext;
screamer 18:a15bfe7aaebd 433
screamer 18:a15bfe7aaebd 434 /**
screamer 18:a15bfe7aaebd 435 * @}
screamer 18:a15bfe7aaebd 436 */
screamer 18:a15bfe7aaebd 437
screamer 18:a15bfe7aaebd 438 /**
screamer 18:a15bfe7aaebd 439 * @}
screamer 18:a15bfe7aaebd 440 */
screamer 18:a15bfe7aaebd 441
screamer 18:a15bfe7aaebd 442 /**
screamer 18:a15bfe7aaebd 443 * @}
screamer 18:a15bfe7aaebd 444 */
screamer 18:a15bfe7aaebd 445
screamer 18:a15bfe7aaebd 446 /**
screamer 18:a15bfe7aaebd 447 * @}
screamer 18:a15bfe7aaebd 448 */
screamer 18:a15bfe7aaebd 449
screamer 18:a15bfe7aaebd 450 #ifdef __cplusplus
screamer 18:a15bfe7aaebd 451 }
screamer 18:a15bfe7aaebd 452 #endif
screamer 18:a15bfe7aaebd 453
screamer 18:a15bfe7aaebd 454 #endif /* __LIS3MDL_H */
screamer 18:a15bfe7aaebd 455
screamer 18:a15bfe7aaebd 456 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/