MEMS nano pressure sensor: 260-1260 hPa absolute digital output barometer.
Dependencies: X_NUCLEO_COMMON ST_INTERFACES
Dependents: X_NUCLEO_IKS01A3 X_NUCLEO_IKS01A3
LPS22HHSensor.cpp@0:c761bc6186e8, 2019-03-06 (annotated)
- Committer:
- cparata
- Date:
- Wed Mar 06 09:18:20 2019 +0000
- Revision:
- 0:c761bc6186e8
- Child:
- 1:978cae936ddb
First version of LPS22HH library
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
cparata | 0:c761bc6186e8 | 1 | /** |
cparata | 0:c761bc6186e8 | 2 | ****************************************************************************** |
cparata | 0:c761bc6186e8 | 3 | * @file LPS22HHSensor.cpp |
cparata | 0:c761bc6186e8 | 4 | * @author SRA |
cparata | 0:c761bc6186e8 | 5 | * @version V1.0.0 |
cparata | 0:c761bc6186e8 | 6 | * @date February 2019 |
cparata | 0:c761bc6186e8 | 7 | * @brief Implementation of a LPS22HH pressure sensor. |
cparata | 0:c761bc6186e8 | 8 | ****************************************************************************** |
cparata | 0:c761bc6186e8 | 9 | * @attention |
cparata | 0:c761bc6186e8 | 10 | * |
cparata | 0:c761bc6186e8 | 11 | * <h2><center>© COPYRIGHT(c) 2019 STMicroelectronics</center></h2> |
cparata | 0:c761bc6186e8 | 12 | * |
cparata | 0:c761bc6186e8 | 13 | * Redistribution and use in source and binary forms, with or without modification, |
cparata | 0:c761bc6186e8 | 14 | * are permitted provided that the following conditions are met: |
cparata | 0:c761bc6186e8 | 15 | * 1. Redistributions of source code must retain the above copyright notice, |
cparata | 0:c761bc6186e8 | 16 | * this list of conditions and the following disclaimer. |
cparata | 0:c761bc6186e8 | 17 | * 2. Redistributions in binary form must reproduce the above copyright notice, |
cparata | 0:c761bc6186e8 | 18 | * this list of conditions and the following disclaimer in the documentation |
cparata | 0:c761bc6186e8 | 19 | * and/or other materials provided with the distribution. |
cparata | 0:c761bc6186e8 | 20 | * 3. Neither the name of STMicroelectronics nor the names of its contributors |
cparata | 0:c761bc6186e8 | 21 | * may be used to endorse or promote products derived from this software |
cparata | 0:c761bc6186e8 | 22 | * without specific prior written permission. |
cparata | 0:c761bc6186e8 | 23 | * |
cparata | 0:c761bc6186e8 | 24 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
cparata | 0:c761bc6186e8 | 25 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
cparata | 0:c761bc6186e8 | 26 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
cparata | 0:c761bc6186e8 | 27 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
cparata | 0:c761bc6186e8 | 28 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
cparata | 0:c761bc6186e8 | 29 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
cparata | 0:c761bc6186e8 | 30 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
cparata | 0:c761bc6186e8 | 31 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
cparata | 0:c761bc6186e8 | 32 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
cparata | 0:c761bc6186e8 | 33 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
cparata | 0:c761bc6186e8 | 34 | * |
cparata | 0:c761bc6186e8 | 35 | ****************************************************************************** |
cparata | 0:c761bc6186e8 | 36 | */ |
cparata | 0:c761bc6186e8 | 37 | |
cparata | 0:c761bc6186e8 | 38 | |
cparata | 0:c761bc6186e8 | 39 | /* Includes ------------------------------------------------------------------*/ |
cparata | 0:c761bc6186e8 | 40 | |
cparata | 0:c761bc6186e8 | 41 | #include "LPS22HHSensor.h" |
cparata | 0:c761bc6186e8 | 42 | |
cparata | 0:c761bc6186e8 | 43 | |
cparata | 0:c761bc6186e8 | 44 | /* Class Implementation ------------------------------------------------------*/ |
cparata | 0:c761bc6186e8 | 45 | |
cparata | 0:c761bc6186e8 | 46 | /** Constructor |
cparata | 0:c761bc6186e8 | 47 | * @param spi object of an helper class which handles the SPI peripheral |
cparata | 0:c761bc6186e8 | 48 | * @param cs_pin the chip select pin |
cparata | 0:c761bc6186e8 | 49 | * @param int_pin the interrupt pin |
cparata | 0:c761bc6186e8 | 50 | * @param spi_type the SPI type |
cparata | 0:c761bc6186e8 | 51 | */ |
cparata | 0:c761bc6186e8 | 52 | LPS22HHSensor::LPS22HHSensor(SPI *spi, PinName cs_pin, PinName int_pin, SPI_type_t spi_type) : _dev_spi(spi), _cs_pin(cs_pin), _int_irq(int_pin), _spi_type(spi_type) |
cparata | 0:c761bc6186e8 | 53 | { |
cparata | 0:c761bc6186e8 | 54 | assert (spi); |
cparata | 0:c761bc6186e8 | 55 | if (cs_pin == NC) |
cparata | 0:c761bc6186e8 | 56 | { |
cparata | 0:c761bc6186e8 | 57 | printf ("ERROR LPS22HH CS MUST NOT BE NC\n\r"); |
cparata | 0:c761bc6186e8 | 58 | _dev_spi = NULL; |
cparata | 0:c761bc6186e8 | 59 | _dev_i2c = NULL; |
cparata | 0:c761bc6186e8 | 60 | return; |
cparata | 0:c761bc6186e8 | 61 | } |
cparata | 0:c761bc6186e8 | 62 | |
cparata | 0:c761bc6186e8 | 63 | _reg_ctx.write_reg = LPS22HH_io_write; |
cparata | 0:c761bc6186e8 | 64 | _reg_ctx.read_reg = LPS22HH_io_read; |
cparata | 0:c761bc6186e8 | 65 | _reg_ctx.handle = (void *)this; |
cparata | 0:c761bc6186e8 | 66 | _cs_pin = 1; |
cparata | 0:c761bc6186e8 | 67 | _dev_i2c = NULL; |
cparata | 0:c761bc6186e8 | 68 | _address = 0; |
cparata | 0:c761bc6186e8 | 69 | |
cparata | 0:c761bc6186e8 | 70 | if (_spi_type == SPI3W) |
cparata | 0:c761bc6186e8 | 71 | { |
cparata | 0:c761bc6186e8 | 72 | /* Enable SPI 3-Wires on the component */ |
cparata | 0:c761bc6186e8 | 73 | uint8_t data = 0x01; |
cparata | 0:c761bc6186e8 | 74 | lps22hh_write_reg(&_reg_ctx, LPS22HH_CTRL_REG1, &data, 1); |
cparata | 0:c761bc6186e8 | 75 | } |
cparata | 0:c761bc6186e8 | 76 | } |
cparata | 0:c761bc6186e8 | 77 | |
cparata | 0:c761bc6186e8 | 78 | /** Constructor |
cparata | 0:c761bc6186e8 | 79 | * @param i2c object of an helper class which handles the I2C peripheral |
cparata | 0:c761bc6186e8 | 80 | * @param address the address of the component's instance |
cparata | 0:c761bc6186e8 | 81 | * @param int_pin the interrupt pin |
cparata | 0:c761bc6186e8 | 82 | */ |
cparata | 0:c761bc6186e8 | 83 | LPS22HHSensor::LPS22HHSensor(DevI2C *i2c, uint8_t address, PinName int_pin) : _dev_i2c(i2c), _address(address), _cs_pin(NC), _int_irq(int_pin) |
cparata | 0:c761bc6186e8 | 84 | { |
cparata | 0:c761bc6186e8 | 85 | assert (i2c); |
cparata | 0:c761bc6186e8 | 86 | _dev_spi = NULL; |
cparata | 0:c761bc6186e8 | 87 | _reg_ctx.write_reg = LPS22HH_io_write; |
cparata | 0:c761bc6186e8 | 88 | _reg_ctx.read_reg = LPS22HH_io_read; |
cparata | 0:c761bc6186e8 | 89 | _reg_ctx.handle = (void *)this; |
cparata | 0:c761bc6186e8 | 90 | } |
cparata | 0:c761bc6186e8 | 91 | |
cparata | 0:c761bc6186e8 | 92 | |
cparata | 0:c761bc6186e8 | 93 | /** |
cparata | 0:c761bc6186e8 | 94 | * @brief Initializing the component |
cparata | 0:c761bc6186e8 | 95 | * @param init pointer to device specific initalization structure |
cparata | 0:c761bc6186e8 | 96 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 97 | */ |
cparata | 0:c761bc6186e8 | 98 | int LPS22HHSensor::init(void *init) |
cparata | 0:c761bc6186e8 | 99 | { |
cparata | 0:c761bc6186e8 | 100 | /* Disable MIPI I3C(SM) interface */ |
cparata | 0:c761bc6186e8 | 101 | if (lps22hh_i3c_interface_set(&_reg_ctx, LPS22HH_I3C_DISABLE) != 0) |
cparata | 0:c761bc6186e8 | 102 | { |
cparata | 0:c761bc6186e8 | 103 | return 1; |
cparata | 0:c761bc6186e8 | 104 | } |
cparata | 0:c761bc6186e8 | 105 | |
cparata | 0:c761bc6186e8 | 106 | /* Power down the device, set Low Noise Enable (bit 5), clear One Shot (bit 4) */ |
cparata | 0:c761bc6186e8 | 107 | if (lps22hh_data_rate_set(&_reg_ctx, (lps22hh_odr_t)(LPS22HH_POWER_DOWN | 0x10)) != 0) |
cparata | 0:c761bc6186e8 | 108 | { |
cparata | 0:c761bc6186e8 | 109 | return 1; |
cparata | 0:c761bc6186e8 | 110 | } |
cparata | 0:c761bc6186e8 | 111 | |
cparata | 0:c761bc6186e8 | 112 | /* Disable low-pass filter on LPS22HH pressure data */ |
cparata | 0:c761bc6186e8 | 113 | if (lps22hh_lp_bandwidth_set(&_reg_ctx, LPS22HH_LPF_ODR_DIV_2) != 0) |
cparata | 0:c761bc6186e8 | 114 | { |
cparata | 0:c761bc6186e8 | 115 | return 1; |
cparata | 0:c761bc6186e8 | 116 | } |
cparata | 0:c761bc6186e8 | 117 | |
cparata | 0:c761bc6186e8 | 118 | /* Set block data update mode */ |
cparata | 0:c761bc6186e8 | 119 | if (lps22hh_block_data_update_set(&_reg_ctx, PROPERTY_ENABLE) != 0) |
cparata | 0:c761bc6186e8 | 120 | { |
cparata | 0:c761bc6186e8 | 121 | return 1; |
cparata | 0:c761bc6186e8 | 122 | } |
cparata | 0:c761bc6186e8 | 123 | |
cparata | 0:c761bc6186e8 | 124 | /* Set autoincrement for multi-byte read/write */ |
cparata | 0:c761bc6186e8 | 125 | if (lps22hh_auto_increment_set(&_reg_ctx, PROPERTY_ENABLE) != 0) |
cparata | 0:c761bc6186e8 | 126 | { |
cparata | 0:c761bc6186e8 | 127 | return 1; |
cparata | 0:c761bc6186e8 | 128 | } |
cparata | 0:c761bc6186e8 | 129 | |
cparata | 0:c761bc6186e8 | 130 | _last_odr = LPS22HH_25_Hz; |
cparata | 0:c761bc6186e8 | 131 | _is_enabled = 0; |
cparata | 0:c761bc6186e8 | 132 | |
cparata | 0:c761bc6186e8 | 133 | return 0; |
cparata | 0:c761bc6186e8 | 134 | } |
cparata | 0:c761bc6186e8 | 135 | |
cparata | 0:c761bc6186e8 | 136 | /** |
cparata | 0:c761bc6186e8 | 137 | * @brief Get WHO_AM_I value |
cparata | 0:c761bc6186e8 | 138 | * @param id the WHO_AM_I value |
cparata | 0:c761bc6186e8 | 139 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 140 | */ |
cparata | 0:c761bc6186e8 | 141 | int LPS22HHSensor::read_id(uint8_t *id) |
cparata | 0:c761bc6186e8 | 142 | { |
cparata | 0:c761bc6186e8 | 143 | if (lps22hh_device_id_get(&_reg_ctx, id) != 0) |
cparata | 0:c761bc6186e8 | 144 | { |
cparata | 0:c761bc6186e8 | 145 | return 1; |
cparata | 0:c761bc6186e8 | 146 | } |
cparata | 0:c761bc6186e8 | 147 | |
cparata | 0:c761bc6186e8 | 148 | return 0; |
cparata | 0:c761bc6186e8 | 149 | } |
cparata | 0:c761bc6186e8 | 150 | |
cparata | 0:c761bc6186e8 | 151 | /** |
cparata | 0:c761bc6186e8 | 152 | * @brief Enable the LPS22HH pressure sensor |
cparata | 0:c761bc6186e8 | 153 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 154 | */ |
cparata | 0:c761bc6186e8 | 155 | int LPS22HHSensor::enable() |
cparata | 0:c761bc6186e8 | 156 | { |
cparata | 0:c761bc6186e8 | 157 | /* Check if the component is already _is_enabled */ |
cparata | 0:c761bc6186e8 | 158 | if (_is_enabled == 1U) |
cparata | 0:c761bc6186e8 | 159 | { |
cparata | 0:c761bc6186e8 | 160 | return 0; |
cparata | 0:c761bc6186e8 | 161 | } |
cparata | 0:c761bc6186e8 | 162 | |
cparata | 0:c761bc6186e8 | 163 | /* Output data rate selection. */ |
cparata | 0:c761bc6186e8 | 164 | if (lps22hh_data_rate_set(&_reg_ctx, _last_odr) != 0) |
cparata | 0:c761bc6186e8 | 165 | { |
cparata | 0:c761bc6186e8 | 166 | return 1; |
cparata | 0:c761bc6186e8 | 167 | } |
cparata | 0:c761bc6186e8 | 168 | |
cparata | 0:c761bc6186e8 | 169 | _is_enabled = 1; |
cparata | 0:c761bc6186e8 | 170 | |
cparata | 0:c761bc6186e8 | 171 | return 0; |
cparata | 0:c761bc6186e8 | 172 | } |
cparata | 0:c761bc6186e8 | 173 | |
cparata | 0:c761bc6186e8 | 174 | /** |
cparata | 0:c761bc6186e8 | 175 | * @brief Disable the LPS22HH pressure sensor |
cparata | 0:c761bc6186e8 | 176 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 177 | */ |
cparata | 0:c761bc6186e8 | 178 | int LPS22HHSensor::disable() |
cparata | 0:c761bc6186e8 | 179 | { |
cparata | 0:c761bc6186e8 | 180 | /* Check if the component is already disabled */ |
cparata | 0:c761bc6186e8 | 181 | if (_is_enabled == 0U) |
cparata | 0:c761bc6186e8 | 182 | { |
cparata | 0:c761bc6186e8 | 183 | return 0; |
cparata | 0:c761bc6186e8 | 184 | } |
cparata | 0:c761bc6186e8 | 185 | |
cparata | 0:c761bc6186e8 | 186 | /* Get current output data rate. */ |
cparata | 0:c761bc6186e8 | 187 | if (lps22hh_data_rate_get(&_reg_ctx, &_last_odr) != 0) |
cparata | 0:c761bc6186e8 | 188 | { |
cparata | 0:c761bc6186e8 | 189 | return 1; |
cparata | 0:c761bc6186e8 | 190 | } |
cparata | 0:c761bc6186e8 | 191 | /* Output data rate selection - power down. */ |
cparata | 0:c761bc6186e8 | 192 | if (lps22hh_data_rate_set(&_reg_ctx, LPS22HH_POWER_DOWN) != 0) |
cparata | 0:c761bc6186e8 | 193 | { |
cparata | 0:c761bc6186e8 | 194 | return 1; |
cparata | 0:c761bc6186e8 | 195 | } |
cparata | 0:c761bc6186e8 | 196 | |
cparata | 0:c761bc6186e8 | 197 | |
cparata | 0:c761bc6186e8 | 198 | _is_enabled = 0; |
cparata | 0:c761bc6186e8 | 199 | |
cparata | 0:c761bc6186e8 | 200 | return 0; |
cparata | 0:c761bc6186e8 | 201 | } |
cparata | 0:c761bc6186e8 | 202 | |
cparata | 0:c761bc6186e8 | 203 | |
cparata | 0:c761bc6186e8 | 204 | /** |
cparata | 0:c761bc6186e8 | 205 | * @brief Get output data rate |
cparata | 0:c761bc6186e8 | 206 | * @param odr the output data rate value |
cparata | 0:c761bc6186e8 | 207 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 208 | */ |
cparata | 0:c761bc6186e8 | 209 | int LPS22HHSensor::get_odr(float *odr) |
cparata | 0:c761bc6186e8 | 210 | { |
cparata | 0:c761bc6186e8 | 211 | int ret = 0; |
cparata | 0:c761bc6186e8 | 212 | lps22hh_odr_t odr_low_level; |
cparata | 0:c761bc6186e8 | 213 | |
cparata | 0:c761bc6186e8 | 214 | if (lps22hh_data_rate_get(&_reg_ctx, &odr_low_level) != 0) |
cparata | 0:c761bc6186e8 | 215 | { |
cparata | 0:c761bc6186e8 | 216 | return 1; |
cparata | 0:c761bc6186e8 | 217 | } |
cparata | 0:c761bc6186e8 | 218 | |
cparata | 0:c761bc6186e8 | 219 | switch (odr_low_level) |
cparata | 0:c761bc6186e8 | 220 | { |
cparata | 0:c761bc6186e8 | 221 | case LPS22HH_POWER_DOWN: |
cparata | 0:c761bc6186e8 | 222 | *odr = 0.0f; |
cparata | 0:c761bc6186e8 | 223 | break; |
cparata | 0:c761bc6186e8 | 224 | |
cparata | 0:c761bc6186e8 | 225 | case LPS22HH_1_Hz: |
cparata | 0:c761bc6186e8 | 226 | *odr = 1.0f; |
cparata | 0:c761bc6186e8 | 227 | break; |
cparata | 0:c761bc6186e8 | 228 | |
cparata | 0:c761bc6186e8 | 229 | case LPS22HH_10_Hz: |
cparata | 0:c761bc6186e8 | 230 | *odr = 10.0f; |
cparata | 0:c761bc6186e8 | 231 | break; |
cparata | 0:c761bc6186e8 | 232 | |
cparata | 0:c761bc6186e8 | 233 | case LPS22HH_25_Hz: |
cparata | 0:c761bc6186e8 | 234 | *odr = 25.0f; |
cparata | 0:c761bc6186e8 | 235 | break; |
cparata | 0:c761bc6186e8 | 236 | |
cparata | 0:c761bc6186e8 | 237 | case LPS22HH_50_Hz: |
cparata | 0:c761bc6186e8 | 238 | *odr = 50.0f; |
cparata | 0:c761bc6186e8 | 239 | break; |
cparata | 0:c761bc6186e8 | 240 | |
cparata | 0:c761bc6186e8 | 241 | case LPS22HH_75_Hz: |
cparata | 0:c761bc6186e8 | 242 | *odr = 75.0f; |
cparata | 0:c761bc6186e8 | 243 | break; |
cparata | 0:c761bc6186e8 | 244 | |
cparata | 0:c761bc6186e8 | 245 | case LPS22HH_100_Hz: |
cparata | 0:c761bc6186e8 | 246 | *odr = 100.0f; |
cparata | 0:c761bc6186e8 | 247 | break; |
cparata | 0:c761bc6186e8 | 248 | |
cparata | 0:c761bc6186e8 | 249 | case LPS22HH_200_Hz: |
cparata | 0:c761bc6186e8 | 250 | *odr = 200.0f; |
cparata | 0:c761bc6186e8 | 251 | break; |
cparata | 0:c761bc6186e8 | 252 | |
cparata | 0:c761bc6186e8 | 253 | default: |
cparata | 0:c761bc6186e8 | 254 | ret = 1; |
cparata | 0:c761bc6186e8 | 255 | break; |
cparata | 0:c761bc6186e8 | 256 | } |
cparata | 0:c761bc6186e8 | 257 | |
cparata | 0:c761bc6186e8 | 258 | return ret; |
cparata | 0:c761bc6186e8 | 259 | } |
cparata | 0:c761bc6186e8 | 260 | |
cparata | 0:c761bc6186e8 | 261 | /** |
cparata | 0:c761bc6186e8 | 262 | * @brief Set the LPS22HH pressure sensor output data rate |
cparata | 0:c761bc6186e8 | 263 | * @param odr the output data rate value to be set |
cparata | 0:c761bc6186e8 | 264 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 265 | */ |
cparata | 0:c761bc6186e8 | 266 | int LPS22HHSensor::set_odr(float odr) |
cparata | 0:c761bc6186e8 | 267 | { |
cparata | 0:c761bc6186e8 | 268 | /* Check if the component is _is_enabled */ |
cparata | 0:c761bc6186e8 | 269 | if (_is_enabled == 1U) |
cparata | 0:c761bc6186e8 | 270 | { |
cparata | 0:c761bc6186e8 | 271 | return set_odr_when_enabled(odr); |
cparata | 0:c761bc6186e8 | 272 | } |
cparata | 0:c761bc6186e8 | 273 | else |
cparata | 0:c761bc6186e8 | 274 | { |
cparata | 0:c761bc6186e8 | 275 | return set_odr_when_disabled(odr); |
cparata | 0:c761bc6186e8 | 276 | } |
cparata | 0:c761bc6186e8 | 277 | } |
cparata | 0:c761bc6186e8 | 278 | |
cparata | 0:c761bc6186e8 | 279 | |
cparata | 0:c761bc6186e8 | 280 | /** |
cparata | 0:c761bc6186e8 | 281 | * @brief Set output data rate |
cparata | 0:c761bc6186e8 | 282 | * @param odr the output data rate value to be set |
cparata | 0:c761bc6186e8 | 283 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 284 | */ |
cparata | 0:c761bc6186e8 | 285 | int LPS22HHSensor::set_odr_when_enabled(float odr) |
cparata | 0:c761bc6186e8 | 286 | { |
cparata | 0:c761bc6186e8 | 287 | lps22hh_odr_t new_odr; |
cparata | 0:c761bc6186e8 | 288 | |
cparata | 0:c761bc6186e8 | 289 | new_odr = (odr <= 1.0f) ? LPS22HH_1_Hz |
cparata | 0:c761bc6186e8 | 290 | : (odr <= 10.0f) ? LPS22HH_10_Hz |
cparata | 0:c761bc6186e8 | 291 | : (odr <= 25.0f) ? LPS22HH_25_Hz |
cparata | 0:c761bc6186e8 | 292 | : (odr <= 50.0f) ? LPS22HH_50_Hz |
cparata | 0:c761bc6186e8 | 293 | : (odr <= 75.0f) ? LPS22HH_75_Hz |
cparata | 0:c761bc6186e8 | 294 | : (odr <= 100.0f) ? LPS22HH_100_Hz |
cparata | 0:c761bc6186e8 | 295 | : LPS22HH_200_Hz; |
cparata | 0:c761bc6186e8 | 296 | |
cparata | 0:c761bc6186e8 | 297 | if (lps22hh_data_rate_set(&_reg_ctx, new_odr) != 0) |
cparata | 0:c761bc6186e8 | 298 | { |
cparata | 0:c761bc6186e8 | 299 | return 1; |
cparata | 0:c761bc6186e8 | 300 | } |
cparata | 0:c761bc6186e8 | 301 | |
cparata | 0:c761bc6186e8 | 302 | if (lps22hh_data_rate_get(&_reg_ctx, &_last_odr) != 0) |
cparata | 0:c761bc6186e8 | 303 | { |
cparata | 0:c761bc6186e8 | 304 | return 1; |
cparata | 0:c761bc6186e8 | 305 | } |
cparata | 0:c761bc6186e8 | 306 | |
cparata | 0:c761bc6186e8 | 307 | return 0; |
cparata | 0:c761bc6186e8 | 308 | } |
cparata | 0:c761bc6186e8 | 309 | |
cparata | 0:c761bc6186e8 | 310 | /** |
cparata | 0:c761bc6186e8 | 311 | * @brief Set output data rate when disabled |
cparata | 0:c761bc6186e8 | 312 | * @param odr the output data rate value to be set |
cparata | 0:c761bc6186e8 | 313 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 314 | */ |
cparata | 0:c761bc6186e8 | 315 | int LPS22HHSensor::set_odr_when_disabled(float odr) |
cparata | 0:c761bc6186e8 | 316 | { |
cparata | 0:c761bc6186e8 | 317 | _last_odr = (odr <= 1.0f) ? LPS22HH_1_Hz |
cparata | 0:c761bc6186e8 | 318 | : (odr <= 10.0f) ? LPS22HH_10_Hz |
cparata | 0:c761bc6186e8 | 319 | : (odr <= 25.0f) ? LPS22HH_25_Hz |
cparata | 0:c761bc6186e8 | 320 | : (odr <= 50.0f) ? LPS22HH_50_Hz |
cparata | 0:c761bc6186e8 | 321 | : (odr <= 75.0f) ? LPS22HH_75_Hz |
cparata | 0:c761bc6186e8 | 322 | : (odr <= 100.0f) ? LPS22HH_100_Hz |
cparata | 0:c761bc6186e8 | 323 | : LPS22HH_200_Hz; |
cparata | 0:c761bc6186e8 | 324 | |
cparata | 0:c761bc6186e8 | 325 | return 0; |
cparata | 0:c761bc6186e8 | 326 | } |
cparata | 0:c761bc6186e8 | 327 | |
cparata | 0:c761bc6186e8 | 328 | /** |
cparata | 0:c761bc6186e8 | 329 | * @brief Get the LPS22HH pressure value |
cparata | 0:c761bc6186e8 | 330 | * @param value pointer where the pressure value is written |
cparata | 0:c761bc6186e8 | 331 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 332 | */ |
cparata | 0:c761bc6186e8 | 333 | int LPS22HHSensor::get_pressure(float *value) |
cparata | 0:c761bc6186e8 | 334 | { |
cparata | 0:c761bc6186e8 | 335 | axis1bit32_t data_raw_pressure; |
cparata | 0:c761bc6186e8 | 336 | |
cparata | 0:c761bc6186e8 | 337 | (void)memset(data_raw_pressure.u8bit, 0x00, sizeof(int32_t)); |
cparata | 0:c761bc6186e8 | 338 | if (lps22hh_pressure_raw_get(&_reg_ctx, data_raw_pressure.u8bit) != 0) |
cparata | 0:c761bc6186e8 | 339 | { |
cparata | 0:c761bc6186e8 | 340 | return 1; |
cparata | 0:c761bc6186e8 | 341 | } |
cparata | 0:c761bc6186e8 | 342 | |
cparata | 0:c761bc6186e8 | 343 | *value = LPS22HH_FROM_LSB_TO_hPa((float)(data_raw_pressure.i32bit)); |
cparata | 0:c761bc6186e8 | 344 | |
cparata | 0:c761bc6186e8 | 345 | return 0; |
cparata | 0:c761bc6186e8 | 346 | } |
cparata | 0:c761bc6186e8 | 347 | |
cparata | 0:c761bc6186e8 | 348 | /** |
cparata | 0:c761bc6186e8 | 349 | * @brief Get the LPS22HH pressure data ready bit value |
cparata | 0:c761bc6186e8 | 350 | * @param status the status of data ready bit |
cparata | 0:c761bc6186e8 | 351 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 352 | */ |
cparata | 0:c761bc6186e8 | 353 | int LPS22HHSensor::get_press_drdy_status(uint8_t *status) |
cparata | 0:c761bc6186e8 | 354 | { |
cparata | 0:c761bc6186e8 | 355 | if (lps22hh_press_flag_data_ready_get(&_reg_ctx, status) != 0) |
cparata | 0:c761bc6186e8 | 356 | { |
cparata | 0:c761bc6186e8 | 357 | return 1; |
cparata | 0:c761bc6186e8 | 358 | } |
cparata | 0:c761bc6186e8 | 359 | |
cparata | 0:c761bc6186e8 | 360 | return 0; |
cparata | 0:c761bc6186e8 | 361 | } |
cparata | 0:c761bc6186e8 | 362 | |
cparata | 0:c761bc6186e8 | 363 | /** |
cparata | 0:c761bc6186e8 | 364 | * @brief Get the LPS22HH temperature value |
cparata | 0:c761bc6186e8 | 365 | * @param value pointer where the temperature value is written |
cparata | 0:c761bc6186e8 | 366 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 367 | */ |
cparata | 0:c761bc6186e8 | 368 | int LPS22HHSensor::get_temperature(float *value) |
cparata | 0:c761bc6186e8 | 369 | { |
cparata | 0:c761bc6186e8 | 370 | axis1bit16_t data_raw_temperature; |
cparata | 0:c761bc6186e8 | 371 | |
cparata | 0:c761bc6186e8 | 372 | (void)memset(data_raw_temperature.u8bit, 0x00, sizeof(int16_t)); |
cparata | 0:c761bc6186e8 | 373 | if (lps22hh_temperature_raw_get(&_reg_ctx, data_raw_temperature.u8bit) != 0) |
cparata | 0:c761bc6186e8 | 374 | { |
cparata | 0:c761bc6186e8 | 375 | return 1; |
cparata | 0:c761bc6186e8 | 376 | } |
cparata | 0:c761bc6186e8 | 377 | |
cparata | 0:c761bc6186e8 | 378 | *value = LPS22HH_FROM_LSB_TO_degC((float)(data_raw_temperature.i16bit)); |
cparata | 0:c761bc6186e8 | 379 | |
cparata | 0:c761bc6186e8 | 380 | return 0; |
cparata | 0:c761bc6186e8 | 381 | } |
cparata | 0:c761bc6186e8 | 382 | |
cparata | 0:c761bc6186e8 | 383 | /** |
cparata | 0:c761bc6186e8 | 384 | * @brief Get the LPS22HH temperature data ready bit value |
cparata | 0:c761bc6186e8 | 385 | * @param status the status of data ready bit |
cparata | 0:c761bc6186e8 | 386 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 387 | */ |
cparata | 0:c761bc6186e8 | 388 | int LPS22HHSensor::get_temp_drdy_status(uint8_t *status) |
cparata | 0:c761bc6186e8 | 389 | { |
cparata | 0:c761bc6186e8 | 390 | if (lps22hh_temp_flag_data_ready_get(&_reg_ctx, status) != 0) |
cparata | 0:c761bc6186e8 | 391 | { |
cparata | 0:c761bc6186e8 | 392 | return 1; |
cparata | 0:c761bc6186e8 | 393 | } |
cparata | 0:c761bc6186e8 | 394 | |
cparata | 0:c761bc6186e8 | 395 | return 0; |
cparata | 0:c761bc6186e8 | 396 | } |
cparata | 0:c761bc6186e8 | 397 | |
cparata | 0:c761bc6186e8 | 398 | /** |
cparata | 0:c761bc6186e8 | 399 | * @brief Get the LPS22HH register value |
cparata | 0:c761bc6186e8 | 400 | * @param reg address to be written |
cparata | 0:c761bc6186e8 | 401 | * @param data value to be written |
cparata | 0:c761bc6186e8 | 402 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 403 | */ |
cparata | 0:c761bc6186e8 | 404 | int LPS22HHSensor::read_reg(uint8_t reg, uint8_t *data) |
cparata | 0:c761bc6186e8 | 405 | { |
cparata | 0:c761bc6186e8 | 406 | if (lps22hh_read_reg(&_reg_ctx, reg, data, 1) != 0) |
cparata | 0:c761bc6186e8 | 407 | { |
cparata | 0:c761bc6186e8 | 408 | return 1; |
cparata | 0:c761bc6186e8 | 409 | } |
cparata | 0:c761bc6186e8 | 410 | |
cparata | 0:c761bc6186e8 | 411 | return 0; |
cparata | 0:c761bc6186e8 | 412 | } |
cparata | 0:c761bc6186e8 | 413 | |
cparata | 0:c761bc6186e8 | 414 | /** |
cparata | 0:c761bc6186e8 | 415 | * @brief Set the LPS22HH register value |
cparata | 0:c761bc6186e8 | 416 | * @param reg address to be written |
cparata | 0:c761bc6186e8 | 417 | * @param data value to be written |
cparata | 0:c761bc6186e8 | 418 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 419 | */ |
cparata | 0:c761bc6186e8 | 420 | int LPS22HHSensor::write_reg(uint8_t reg, uint8_t data) |
cparata | 0:c761bc6186e8 | 421 | { |
cparata | 0:c761bc6186e8 | 422 | if (lps22hh_write_reg(&_reg_ctx, reg, &data, 1) != 0) |
cparata | 0:c761bc6186e8 | 423 | { |
cparata | 0:c761bc6186e8 | 424 | return 1; |
cparata | 0:c761bc6186e8 | 425 | } |
cparata | 0:c761bc6186e8 | 426 | |
cparata | 0:c761bc6186e8 | 427 | return 0; |
cparata | 0:c761bc6186e8 | 428 | } |
cparata | 0:c761bc6186e8 | 429 | |
cparata | 0:c761bc6186e8 | 430 | /** |
cparata | 0:c761bc6186e8 | 431 | * @brief Get the LPS22HH FIFO data |
cparata | 0:c761bc6186e8 | 432 | * @param press the pointer where FIFO pressure value is stored |
cparata | 0:c761bc6186e8 | 433 | * @param temp the pointer where FIFO temperature value is stored |
cparata | 0:c761bc6186e8 | 434 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 435 | */ |
cparata | 0:c761bc6186e8 | 436 | int LPS22HHSensor::get_fifo_data(float *press, float *temp) |
cparata | 0:c761bc6186e8 | 437 | { |
cparata | 0:c761bc6186e8 | 438 | axis1bit32_t data_raw_pressure; |
cparata | 0:c761bc6186e8 | 439 | axis1bit16_t data_raw_temperature; |
cparata | 0:c761bc6186e8 | 440 | |
cparata | 0:c761bc6186e8 | 441 | (void)memset(data_raw_pressure.u8bit, 0x00, sizeof(int32_t)); |
cparata | 0:c761bc6186e8 | 442 | if (lps22hh_fifo_pressure_raw_get(&_reg_ctx, data_raw_pressure.u8bit) != 0) |
cparata | 0:c761bc6186e8 | 443 | { |
cparata | 0:c761bc6186e8 | 444 | return 1; |
cparata | 0:c761bc6186e8 | 445 | } |
cparata | 0:c761bc6186e8 | 446 | |
cparata | 0:c761bc6186e8 | 447 | *press = LPS22HH_FROM_LSB_TO_hPa((float)(data_raw_pressure.i32bit)); |
cparata | 0:c761bc6186e8 | 448 | |
cparata | 0:c761bc6186e8 | 449 | (void)memset(data_raw_temperature.u8bit, 0x00, sizeof(int16_t)); |
cparata | 0:c761bc6186e8 | 450 | if (lps22hh_fifo_temperature_raw_get(&_reg_ctx, data_raw_temperature.u8bit) != 0) |
cparata | 0:c761bc6186e8 | 451 | { |
cparata | 0:c761bc6186e8 | 452 | return 1; |
cparata | 0:c761bc6186e8 | 453 | } |
cparata | 0:c761bc6186e8 | 454 | |
cparata | 0:c761bc6186e8 | 455 | *temp = LPS22HH_FROM_LSB_TO_degC((float)(data_raw_temperature.i16bit)); |
cparata | 0:c761bc6186e8 | 456 | |
cparata | 0:c761bc6186e8 | 457 | return 0; |
cparata | 0:c761bc6186e8 | 458 | } |
cparata | 0:c761bc6186e8 | 459 | |
cparata | 0:c761bc6186e8 | 460 | /** |
cparata | 0:c761bc6186e8 | 461 | * @brief Get the LPS22HH FIFO threshold |
cparata | 0:c761bc6186e8 | 462 | * @param status the status of FIFO threshold |
cparata | 0:c761bc6186e8 | 463 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 464 | */ |
cparata | 0:c761bc6186e8 | 465 | int LPS22HHSensor::get_fifo_fth_status(uint8_t *status) |
cparata | 0:c761bc6186e8 | 466 | { |
cparata | 0:c761bc6186e8 | 467 | if (lps22hh_fifo_wtm_flag_get(&_reg_ctx, status) != 0) |
cparata | 0:c761bc6186e8 | 468 | { |
cparata | 0:c761bc6186e8 | 469 | return 1; |
cparata | 0:c761bc6186e8 | 470 | } |
cparata | 0:c761bc6186e8 | 471 | |
cparata | 0:c761bc6186e8 | 472 | return 0; |
cparata | 0:c761bc6186e8 | 473 | } |
cparata | 0:c761bc6186e8 | 474 | |
cparata | 0:c761bc6186e8 | 475 | /** |
cparata | 0:c761bc6186e8 | 476 | * @brief Get the LPS22HH FIFO full status |
cparata | 0:c761bc6186e8 | 477 | * @param status the status of FIFO full status |
cparata | 0:c761bc6186e8 | 478 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 479 | */ |
cparata | 0:c761bc6186e8 | 480 | int LPS22HHSensor::get_fifo_full_status(uint8_t *status) |
cparata | 0:c761bc6186e8 | 481 | { |
cparata | 0:c761bc6186e8 | 482 | if (lps22hh_fifo_full_flag_get(&_reg_ctx, status) != 0) |
cparata | 0:c761bc6186e8 | 483 | { |
cparata | 0:c761bc6186e8 | 484 | return 1; |
cparata | 0:c761bc6186e8 | 485 | } |
cparata | 0:c761bc6186e8 | 486 | |
cparata | 0:c761bc6186e8 | 487 | return 0; |
cparata | 0:c761bc6186e8 | 488 | } |
cparata | 0:c761bc6186e8 | 489 | |
cparata | 0:c761bc6186e8 | 490 | /** |
cparata | 0:c761bc6186e8 | 491 | * @brief Get the LPS22HH FIFO OVR status |
cparata | 0:c761bc6186e8 | 492 | * @param status the status of FIFO OVR status |
cparata | 0:c761bc6186e8 | 493 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 494 | */ |
cparata | 0:c761bc6186e8 | 495 | int LPS22HHSensor::get_fifo_ovr_status(uint8_t *status) |
cparata | 0:c761bc6186e8 | 496 | { |
cparata | 0:c761bc6186e8 | 497 | if (lps22hh_fifo_ovr_flag_get(&_reg_ctx, status) != 0) |
cparata | 0:c761bc6186e8 | 498 | { |
cparata | 0:c761bc6186e8 | 499 | return 1; |
cparata | 0:c761bc6186e8 | 500 | } |
cparata | 0:c761bc6186e8 | 501 | |
cparata | 0:c761bc6186e8 | 502 | return 0; |
cparata | 0:c761bc6186e8 | 503 | } |
cparata | 0:c761bc6186e8 | 504 | |
cparata | 0:c761bc6186e8 | 505 | /** |
cparata | 0:c761bc6186e8 | 506 | * @brief Get the LPS22HH FIFO data level |
cparata | 0:c761bc6186e8 | 507 | * @param status the status of FIFO data level |
cparata | 0:c761bc6186e8 | 508 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 509 | */ |
cparata | 0:c761bc6186e8 | 510 | int LPS22HHSensor::get_fifo_level(uint8_t *status) |
cparata | 0:c761bc6186e8 | 511 | { |
cparata | 0:c761bc6186e8 | 512 | if (lps22hh_fifo_data_level_get(&_reg_ctx, status) != 0) |
cparata | 0:c761bc6186e8 | 513 | { |
cparata | 0:c761bc6186e8 | 514 | return 1; |
cparata | 0:c761bc6186e8 | 515 | } |
cparata | 0:c761bc6186e8 | 516 | |
cparata | 0:c761bc6186e8 | 517 | return 0; |
cparata | 0:c761bc6186e8 | 518 | } |
cparata | 0:c761bc6186e8 | 519 | |
cparata | 0:c761bc6186e8 | 520 | /** |
cparata | 0:c761bc6186e8 | 521 | * @brief Reset the FIFO interrupt |
cparata | 0:c761bc6186e8 | 522 | * @param interrupt The FIFO interrupt to be reset; values: 0 = FTH; 1 = FULL; 2 = OVR |
cparata | 0:c761bc6186e8 | 523 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 524 | */ |
cparata | 0:c761bc6186e8 | 525 | int LPS22HHSensor::reset_fifo_interrupt(uint8_t interrupt) |
cparata | 0:c761bc6186e8 | 526 | { |
cparata | 0:c761bc6186e8 | 527 | switch (interrupt) |
cparata | 0:c761bc6186e8 | 528 | { |
cparata | 0:c761bc6186e8 | 529 | case 0: |
cparata | 0:c761bc6186e8 | 530 | if (lps22hh_fifo_threshold_on_int_set(&_reg_ctx, PROPERTY_DISABLE) != 0) |
cparata | 0:c761bc6186e8 | 531 | { |
cparata | 0:c761bc6186e8 | 532 | return 1; |
cparata | 0:c761bc6186e8 | 533 | } |
cparata | 0:c761bc6186e8 | 534 | break; |
cparata | 0:c761bc6186e8 | 535 | case 1: |
cparata | 0:c761bc6186e8 | 536 | if (lps22hh_fifo_full_on_int_set(&_reg_ctx, PROPERTY_DISABLE) != 0) |
cparata | 0:c761bc6186e8 | 537 | { |
cparata | 0:c761bc6186e8 | 538 | return 1; |
cparata | 0:c761bc6186e8 | 539 | } |
cparata | 0:c761bc6186e8 | 540 | break; |
cparata | 0:c761bc6186e8 | 541 | case 2: |
cparata | 0:c761bc6186e8 | 542 | if (lps22hh_fifo_ovr_on_int_set(&_reg_ctx, PROPERTY_DISABLE) != 0) |
cparata | 0:c761bc6186e8 | 543 | { |
cparata | 0:c761bc6186e8 | 544 | return 1; |
cparata | 0:c761bc6186e8 | 545 | } |
cparata | 0:c761bc6186e8 | 546 | break; |
cparata | 0:c761bc6186e8 | 547 | default: |
cparata | 0:c761bc6186e8 | 548 | return 1; |
cparata | 0:c761bc6186e8 | 549 | } |
cparata | 0:c761bc6186e8 | 550 | |
cparata | 0:c761bc6186e8 | 551 | return 0; |
cparata | 0:c761bc6186e8 | 552 | } |
cparata | 0:c761bc6186e8 | 553 | |
cparata | 0:c761bc6186e8 | 554 | /** |
cparata | 0:c761bc6186e8 | 555 | * @brief Set the FIFO interrupt |
cparata | 0:c761bc6186e8 | 556 | * @param interrupt The FIFO interrupt to be set; values: 0 = FTH; 1 = FULL; 2 = OVR |
cparata | 0:c761bc6186e8 | 557 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 558 | */ |
cparata | 0:c761bc6186e8 | 559 | int LPS22HHSensor::set_fifo_interrupt(uint8_t interrupt) |
cparata | 0:c761bc6186e8 | 560 | { |
cparata | 0:c761bc6186e8 | 561 | switch (interrupt) |
cparata | 0:c761bc6186e8 | 562 | { |
cparata | 0:c761bc6186e8 | 563 | case 0: |
cparata | 0:c761bc6186e8 | 564 | if (lps22hh_fifo_threshold_on_int_set(&_reg_ctx, PROPERTY_ENABLE) != 0) |
cparata | 0:c761bc6186e8 | 565 | { |
cparata | 0:c761bc6186e8 | 566 | return 1; |
cparata | 0:c761bc6186e8 | 567 | } |
cparata | 0:c761bc6186e8 | 568 | break; |
cparata | 0:c761bc6186e8 | 569 | case 1: |
cparata | 0:c761bc6186e8 | 570 | if (lps22hh_fifo_full_on_int_set(&_reg_ctx, PROPERTY_ENABLE) != 0) |
cparata | 0:c761bc6186e8 | 571 | { |
cparata | 0:c761bc6186e8 | 572 | return 1; |
cparata | 0:c761bc6186e8 | 573 | } |
cparata | 0:c761bc6186e8 | 574 | break; |
cparata | 0:c761bc6186e8 | 575 | case 2: |
cparata | 0:c761bc6186e8 | 576 | if (lps22hh_fifo_ovr_on_int_set(&_reg_ctx, PROPERTY_ENABLE) != 0) |
cparata | 0:c761bc6186e8 | 577 | { |
cparata | 0:c761bc6186e8 | 578 | return 1; |
cparata | 0:c761bc6186e8 | 579 | } |
cparata | 0:c761bc6186e8 | 580 | break; |
cparata | 0:c761bc6186e8 | 581 | default: |
cparata | 0:c761bc6186e8 | 582 | return 1; |
cparata | 0:c761bc6186e8 | 583 | } |
cparata | 0:c761bc6186e8 | 584 | |
cparata | 0:c761bc6186e8 | 585 | return 0; |
cparata | 0:c761bc6186e8 | 586 | } |
cparata | 0:c761bc6186e8 | 587 | |
cparata | 0:c761bc6186e8 | 588 | /** |
cparata | 0:c761bc6186e8 | 589 | * @brief Set the FIFO mode |
cparata | 0:c761bc6186e8 | 590 | * @param Mode the FIFO mode to be set |
cparata | 0:c761bc6186e8 | 591 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 592 | */ |
cparata | 0:c761bc6186e8 | 593 | int LPS22HHSensor::set_fifo_mode(uint8_t mode) |
cparata | 0:c761bc6186e8 | 594 | { |
cparata | 0:c761bc6186e8 | 595 | /* Verify that the passed parameter contains one of the valid values */ |
cparata | 0:c761bc6186e8 | 596 | switch ((lps22hh_f_mode_t)mode) |
cparata | 0:c761bc6186e8 | 597 | { |
cparata | 0:c761bc6186e8 | 598 | case LPS22HH_BYPASS_MODE: |
cparata | 0:c761bc6186e8 | 599 | case LPS22HH_FIFO_MODE: |
cparata | 0:c761bc6186e8 | 600 | case LPS22HH_STREAM_MODE: |
cparata | 0:c761bc6186e8 | 601 | case LPS22HH_STREAM_TO_FIFO_MODE: |
cparata | 0:c761bc6186e8 | 602 | case LPS22HH_BYPASS_TO_STREAM_MODE: |
cparata | 0:c761bc6186e8 | 603 | case LPS22HH_BYPASS_TO_FIFO_MODE: |
cparata | 0:c761bc6186e8 | 604 | break; |
cparata | 0:c761bc6186e8 | 605 | default: |
cparata | 0:c761bc6186e8 | 606 | return 1; |
cparata | 0:c761bc6186e8 | 607 | } |
cparata | 0:c761bc6186e8 | 608 | |
cparata | 0:c761bc6186e8 | 609 | if (lps22hh_fifo_mode_set(&_reg_ctx, (lps22hh_f_mode_t)mode) != 0) |
cparata | 0:c761bc6186e8 | 610 | { |
cparata | 0:c761bc6186e8 | 611 | return 1; |
cparata | 0:c761bc6186e8 | 612 | } |
cparata | 0:c761bc6186e8 | 613 | |
cparata | 0:c761bc6186e8 | 614 | return 0; |
cparata | 0:c761bc6186e8 | 615 | } |
cparata | 0:c761bc6186e8 | 616 | |
cparata | 0:c761bc6186e8 | 617 | /** |
cparata | 0:c761bc6186e8 | 618 | * @brief Set the LPS22HH FIFO watermark level |
cparata | 0:c761bc6186e8 | 619 | * @param watermark the FIFO watermark level to be set |
cparata | 0:c761bc6186e8 | 620 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 621 | */ |
cparata | 0:c761bc6186e8 | 622 | int LPS22HHSensor::set_fifo_watermark_level(uint8_t watermark) |
cparata | 0:c761bc6186e8 | 623 | { |
cparata | 0:c761bc6186e8 | 624 | if (lps22hh_fifo_watermark_set(&_reg_ctx, watermark) != 0) |
cparata | 0:c761bc6186e8 | 625 | { |
cparata | 0:c761bc6186e8 | 626 | return 1; |
cparata | 0:c761bc6186e8 | 627 | } |
cparata | 0:c761bc6186e8 | 628 | |
cparata | 0:c761bc6186e8 | 629 | return 0; |
cparata | 0:c761bc6186e8 | 630 | } |
cparata | 0:c761bc6186e8 | 631 | |
cparata | 0:c761bc6186e8 | 632 | /** |
cparata | 0:c761bc6186e8 | 633 | * @brief Set the LPS22HH stop on watermark function |
cparata | 0:c761bc6186e8 | 634 | * @param stop the state of stop on watermark function |
cparata | 0:c761bc6186e8 | 635 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 636 | */ |
cparata | 0:c761bc6186e8 | 637 | int LPS22HHSensor::stop_fifo_on_watermark(uint8_t stop) |
cparata | 0:c761bc6186e8 | 638 | { |
cparata | 0:c761bc6186e8 | 639 | if (lps22hh_fifo_stop_on_wtm_set(&_reg_ctx, stop) != 0) |
cparata | 0:c761bc6186e8 | 640 | { |
cparata | 0:c761bc6186e8 | 641 | return 1; |
cparata | 0:c761bc6186e8 | 642 | } |
cparata | 0:c761bc6186e8 | 643 | |
cparata | 0:c761bc6186e8 | 644 | return 0; |
cparata | 0:c761bc6186e8 | 645 | } |
cparata | 0:c761bc6186e8 | 646 | |
cparata | 0:c761bc6186e8 | 647 | /** |
cparata | 0:c761bc6186e8 | 648 | * @brief Set the LPS22HH One Shot Mode |
cparata | 0:c761bc6186e8 | 649 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 650 | */ |
cparata | 0:c761bc6186e8 | 651 | int LPS22HHSensor::set_one_shot() |
cparata | 0:c761bc6186e8 | 652 | { |
cparata | 0:c761bc6186e8 | 653 | /* Start One Shot Measurement */ |
cparata | 0:c761bc6186e8 | 654 | if(lps22hh_data_rate_set(&_reg_ctx, LPS22HH_ONE_SHOOT) != 0) |
cparata | 0:c761bc6186e8 | 655 | { |
cparata | 0:c761bc6186e8 | 656 | return 1; |
cparata | 0:c761bc6186e8 | 657 | } |
cparata | 0:c761bc6186e8 | 658 | |
cparata | 0:c761bc6186e8 | 659 | return 0; |
cparata | 0:c761bc6186e8 | 660 | } |
cparata | 0:c761bc6186e8 | 661 | |
cparata | 0:c761bc6186e8 | 662 | /** |
cparata | 0:c761bc6186e8 | 663 | * @brief Get the LPS22HH One Shot Status |
cparata | 0:c761bc6186e8 | 664 | * @param status pointer to the one shot status (1 means measurements available, 0 means measurements not available yet) |
cparata | 0:c761bc6186e8 | 665 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 666 | */ |
cparata | 0:c761bc6186e8 | 667 | int LPS22HHSensor::get_one_shot_status(uint8_t *status) |
cparata | 0:c761bc6186e8 | 668 | { |
cparata | 0:c761bc6186e8 | 669 | uint8_t p_da; |
cparata | 0:c761bc6186e8 | 670 | uint8_t t_da; |
cparata | 0:c761bc6186e8 | 671 | |
cparata | 0:c761bc6186e8 | 672 | /* Get DataReady for pressure */ |
cparata | 0:c761bc6186e8 | 673 | if(lps22hh_press_flag_data_ready_get(&_reg_ctx, &p_da) != 0) |
cparata | 0:c761bc6186e8 | 674 | { |
cparata | 0:c761bc6186e8 | 675 | return 1; |
cparata | 0:c761bc6186e8 | 676 | } |
cparata | 0:c761bc6186e8 | 677 | |
cparata | 0:c761bc6186e8 | 678 | /* Get DataReady for temperature */ |
cparata | 0:c761bc6186e8 | 679 | if(lps22hh_temp_flag_data_ready_get(&_reg_ctx, &t_da) != 0) |
cparata | 0:c761bc6186e8 | 680 | { |
cparata | 0:c761bc6186e8 | 681 | return 1; |
cparata | 0:c761bc6186e8 | 682 | } |
cparata | 0:c761bc6186e8 | 683 | |
cparata | 0:c761bc6186e8 | 684 | if(p_da && t_da) |
cparata | 0:c761bc6186e8 | 685 | { |
cparata | 0:c761bc6186e8 | 686 | *status = 1; |
cparata | 0:c761bc6186e8 | 687 | } |
cparata | 0:c761bc6186e8 | 688 | else |
cparata | 0:c761bc6186e8 | 689 | { |
cparata | 0:c761bc6186e8 | 690 | *status = 0; |
cparata | 0:c761bc6186e8 | 691 | } |
cparata | 0:c761bc6186e8 | 692 | |
cparata | 0:c761bc6186e8 | 693 | return 0; |
cparata | 0:c761bc6186e8 | 694 | } |
cparata | 0:c761bc6186e8 | 695 | |
cparata | 0:c761bc6186e8 | 696 | int32_t LPS22HH_io_write(void *handle, uint8_t WriteAddr, uint8_t *pBuffer, uint16_t nBytesToWrite) |
cparata | 0:c761bc6186e8 | 697 | { |
cparata | 0:c761bc6186e8 | 698 | return ((LPS22HHSensor *)handle)->io_write(pBuffer, WriteAddr, nBytesToWrite); |
cparata | 0:c761bc6186e8 | 699 | } |
cparata | 0:c761bc6186e8 | 700 | |
cparata | 0:c761bc6186e8 | 701 | int32_t LPS22HH_io_read(void *handle, uint8_t ReadAddr, uint8_t *pBuffer, uint16_t nBytesToRead) |
cparata | 0:c761bc6186e8 | 702 | { |
cparata | 0:c761bc6186e8 | 703 | return ((LPS22HHSensor *)handle)->io_read(pBuffer, ReadAddr, nBytesToRead); |
cparata | 0:c761bc6186e8 | 704 | } |