LPS22HH pressure sensor library
Dependencies: X_NUCLEO_COMMON ST_INTERFACES
LPS22HHSensor.cpp@1:978cae936ddb, 2019-07-24 (annotated)
- Committer:
- cparata
- Date:
- Wed Jul 24 14:19:09 2019 +0000
- Revision:
- 1:978cae936ddb
- Parent:
- 0:c761bc6186e8
- Child:
- 2:a8417bcdc2e8
Format with Astyle
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 | 1:978cae936ddb | 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 | 1:978cae936ddb | 54 | assert(spi); |
cparata | 1:978cae936ddb | 55 | if (cs_pin == NC) { |
cparata | 1:978cae936ddb | 56 | printf("ERROR LPS22HH CS MUST NOT BE NC\n\r"); |
cparata | 1:978cae936ddb | 57 | _dev_spi = NULL; |
cparata | 1:978cae936ddb | 58 | _dev_i2c = NULL; |
cparata | 1:978cae936ddb | 59 | return; |
cparata | 1:978cae936ddb | 60 | } |
cparata | 0:c761bc6186e8 | 61 | |
cparata | 1:978cae936ddb | 62 | _reg_ctx.write_reg = LPS22HH_io_write; |
cparata | 1:978cae936ddb | 63 | _reg_ctx.read_reg = LPS22HH_io_read; |
cparata | 1:978cae936ddb | 64 | _reg_ctx.handle = (void *)this; |
cparata | 1:978cae936ddb | 65 | _cs_pin = 1; |
cparata | 1:978cae936ddb | 66 | _dev_i2c = NULL; |
cparata | 1:978cae936ddb | 67 | _address = 0; |
cparata | 1:978cae936ddb | 68 | |
cparata | 1:978cae936ddb | 69 | if (_spi_type == SPI3W) { |
cparata | 1:978cae936ddb | 70 | /* Enable SPI 3-Wires on the component */ |
cparata | 1:978cae936ddb | 71 | uint8_t data = 0x01; |
cparata | 1:978cae936ddb | 72 | lps22hh_write_reg(&_reg_ctx, LPS22HH_CTRL_REG1, &data, 1); |
cparata | 1:978cae936ddb | 73 | } |
cparata | 0:c761bc6186e8 | 74 | } |
cparata | 0:c761bc6186e8 | 75 | |
cparata | 0:c761bc6186e8 | 76 | /** Constructor |
cparata | 0:c761bc6186e8 | 77 | * @param i2c object of an helper class which handles the I2C peripheral |
cparata | 0:c761bc6186e8 | 78 | * @param address the address of the component's instance |
cparata | 0:c761bc6186e8 | 79 | * @param int_pin the interrupt pin |
cparata | 0:c761bc6186e8 | 80 | */ |
cparata | 0:c761bc6186e8 | 81 | 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 | 82 | { |
cparata | 1:978cae936ddb | 83 | assert(i2c); |
cparata | 1:978cae936ddb | 84 | _dev_spi = NULL; |
cparata | 1:978cae936ddb | 85 | _reg_ctx.write_reg = LPS22HH_io_write; |
cparata | 1:978cae936ddb | 86 | _reg_ctx.read_reg = LPS22HH_io_read; |
cparata | 1:978cae936ddb | 87 | _reg_ctx.handle = (void *)this; |
cparata | 0:c761bc6186e8 | 88 | } |
cparata | 0:c761bc6186e8 | 89 | |
cparata | 0:c761bc6186e8 | 90 | |
cparata | 0:c761bc6186e8 | 91 | /** |
cparata | 0:c761bc6186e8 | 92 | * @brief Initializing the component |
cparata | 0:c761bc6186e8 | 93 | * @param init pointer to device specific initalization structure |
cparata | 0:c761bc6186e8 | 94 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 95 | */ |
cparata | 0:c761bc6186e8 | 96 | int LPS22HHSensor::init(void *init) |
cparata | 0:c761bc6186e8 | 97 | { |
cparata | 0:c761bc6186e8 | 98 | /* Disable MIPI I3C(SM) interface */ |
cparata | 1:978cae936ddb | 99 | if (lps22hh_i3c_interface_set(&_reg_ctx, LPS22HH_I3C_DISABLE) != 0) { |
cparata | 1:978cae936ddb | 100 | return 1; |
cparata | 1:978cae936ddb | 101 | } |
cparata | 0:c761bc6186e8 | 102 | |
cparata | 1:978cae936ddb | 103 | /* Power down the device, set Low Noise Enable (bit 5), clear One Shot (bit 4) */ |
cparata | 1:978cae936ddb | 104 | if (lps22hh_data_rate_set(&_reg_ctx, (lps22hh_odr_t)(LPS22HH_POWER_DOWN | 0x10)) != 0) { |
cparata | 1:978cae936ddb | 105 | return 1; |
cparata | 1:978cae936ddb | 106 | } |
cparata | 0:c761bc6186e8 | 107 | |
cparata | 1:978cae936ddb | 108 | /* Disable low-pass filter on LPS22HH pressure data */ |
cparata | 1:978cae936ddb | 109 | if (lps22hh_lp_bandwidth_set(&_reg_ctx, LPS22HH_LPF_ODR_DIV_2) != 0) { |
cparata | 1:978cae936ddb | 110 | return 1; |
cparata | 1:978cae936ddb | 111 | } |
cparata | 0:c761bc6186e8 | 112 | |
cparata | 1:978cae936ddb | 113 | /* Set block data update mode */ |
cparata | 1:978cae936ddb | 114 | if (lps22hh_block_data_update_set(&_reg_ctx, PROPERTY_ENABLE) != 0) { |
cparata | 1:978cae936ddb | 115 | return 1; |
cparata | 1:978cae936ddb | 116 | } |
cparata | 0:c761bc6186e8 | 117 | |
cparata | 1:978cae936ddb | 118 | /* Set autoincrement for multi-byte read/write */ |
cparata | 1:978cae936ddb | 119 | if (lps22hh_auto_increment_set(&_reg_ctx, PROPERTY_ENABLE) != 0) { |
cparata | 1:978cae936ddb | 120 | return 1; |
cparata | 1:978cae936ddb | 121 | } |
cparata | 0:c761bc6186e8 | 122 | |
cparata | 1:978cae936ddb | 123 | _last_odr = LPS22HH_25_Hz; |
cparata | 1:978cae936ddb | 124 | _is_enabled = 0; |
cparata | 0:c761bc6186e8 | 125 | |
cparata | 1:978cae936ddb | 126 | return 0; |
cparata | 0:c761bc6186e8 | 127 | } |
cparata | 0:c761bc6186e8 | 128 | |
cparata | 0:c761bc6186e8 | 129 | /** |
cparata | 0:c761bc6186e8 | 130 | * @brief Get WHO_AM_I value |
cparata | 0:c761bc6186e8 | 131 | * @param id the WHO_AM_I value |
cparata | 0:c761bc6186e8 | 132 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 133 | */ |
cparata | 0:c761bc6186e8 | 134 | int LPS22HHSensor::read_id(uint8_t *id) |
cparata | 0:c761bc6186e8 | 135 | { |
cparata | 1:978cae936ddb | 136 | if (lps22hh_device_id_get(&_reg_ctx, id) != 0) { |
cparata | 1:978cae936ddb | 137 | return 1; |
cparata | 1:978cae936ddb | 138 | } |
cparata | 0:c761bc6186e8 | 139 | |
cparata | 1:978cae936ddb | 140 | return 0; |
cparata | 0:c761bc6186e8 | 141 | } |
cparata | 0:c761bc6186e8 | 142 | |
cparata | 0:c761bc6186e8 | 143 | /** |
cparata | 0:c761bc6186e8 | 144 | * @brief Enable the LPS22HH pressure sensor |
cparata | 0:c761bc6186e8 | 145 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 146 | */ |
cparata | 0:c761bc6186e8 | 147 | int LPS22HHSensor::enable() |
cparata | 0:c761bc6186e8 | 148 | { |
cparata | 1:978cae936ddb | 149 | /* Check if the component is already _is_enabled */ |
cparata | 1:978cae936ddb | 150 | if (_is_enabled == 1U) { |
cparata | 1:978cae936ddb | 151 | return 0; |
cparata | 1:978cae936ddb | 152 | } |
cparata | 0:c761bc6186e8 | 153 | |
cparata | 1:978cae936ddb | 154 | /* Output data rate selection. */ |
cparata | 1:978cae936ddb | 155 | if (lps22hh_data_rate_set(&_reg_ctx, _last_odr) != 0) { |
cparata | 1:978cae936ddb | 156 | return 1; |
cparata | 1:978cae936ddb | 157 | } |
cparata | 0:c761bc6186e8 | 158 | |
cparata | 1:978cae936ddb | 159 | _is_enabled = 1; |
cparata | 0:c761bc6186e8 | 160 | |
cparata | 1:978cae936ddb | 161 | return 0; |
cparata | 0:c761bc6186e8 | 162 | } |
cparata | 0:c761bc6186e8 | 163 | |
cparata | 0:c761bc6186e8 | 164 | /** |
cparata | 0:c761bc6186e8 | 165 | * @brief Disable the LPS22HH pressure sensor |
cparata | 0:c761bc6186e8 | 166 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 167 | */ |
cparata | 0:c761bc6186e8 | 168 | int LPS22HHSensor::disable() |
cparata | 0:c761bc6186e8 | 169 | { |
cparata | 1:978cae936ddb | 170 | /* Check if the component is already disabled */ |
cparata | 1:978cae936ddb | 171 | if (_is_enabled == 0U) { |
cparata | 1:978cae936ddb | 172 | return 0; |
cparata | 1:978cae936ddb | 173 | } |
cparata | 0:c761bc6186e8 | 174 | |
cparata | 1:978cae936ddb | 175 | /* Get current output data rate. */ |
cparata | 1:978cae936ddb | 176 | if (lps22hh_data_rate_get(&_reg_ctx, &_last_odr) != 0) { |
cparata | 1:978cae936ddb | 177 | return 1; |
cparata | 1:978cae936ddb | 178 | } |
cparata | 1:978cae936ddb | 179 | /* Output data rate selection - power down. */ |
cparata | 1:978cae936ddb | 180 | if (lps22hh_data_rate_set(&_reg_ctx, LPS22HH_POWER_DOWN) != 0) { |
cparata | 1:978cae936ddb | 181 | return 1; |
cparata | 1:978cae936ddb | 182 | } |
cparata | 0:c761bc6186e8 | 183 | |
cparata | 0:c761bc6186e8 | 184 | |
cparata | 1:978cae936ddb | 185 | _is_enabled = 0; |
cparata | 0:c761bc6186e8 | 186 | |
cparata | 1:978cae936ddb | 187 | return 0; |
cparata | 0:c761bc6186e8 | 188 | } |
cparata | 0:c761bc6186e8 | 189 | |
cparata | 0:c761bc6186e8 | 190 | |
cparata | 0:c761bc6186e8 | 191 | /** |
cparata | 0:c761bc6186e8 | 192 | * @brief Get output data rate |
cparata | 0:c761bc6186e8 | 193 | * @param odr the output data rate value |
cparata | 0:c761bc6186e8 | 194 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 195 | */ |
cparata | 0:c761bc6186e8 | 196 | int LPS22HHSensor::get_odr(float *odr) |
cparata | 0:c761bc6186e8 | 197 | { |
cparata | 1:978cae936ddb | 198 | int ret = 0; |
cparata | 1:978cae936ddb | 199 | lps22hh_odr_t odr_low_level; |
cparata | 0:c761bc6186e8 | 200 | |
cparata | 1:978cae936ddb | 201 | if (lps22hh_data_rate_get(&_reg_ctx, &odr_low_level) != 0) { |
cparata | 1:978cae936ddb | 202 | return 1; |
cparata | 1:978cae936ddb | 203 | } |
cparata | 0:c761bc6186e8 | 204 | |
cparata | 1:978cae936ddb | 205 | switch (odr_low_level) { |
cparata | 1:978cae936ddb | 206 | case LPS22HH_POWER_DOWN: |
cparata | 1:978cae936ddb | 207 | *odr = 0.0f; |
cparata | 1:978cae936ddb | 208 | break; |
cparata | 0:c761bc6186e8 | 209 | |
cparata | 1:978cae936ddb | 210 | case LPS22HH_1_Hz: |
cparata | 1:978cae936ddb | 211 | *odr = 1.0f; |
cparata | 1:978cae936ddb | 212 | break; |
cparata | 0:c761bc6186e8 | 213 | |
cparata | 1:978cae936ddb | 214 | case LPS22HH_10_Hz: |
cparata | 1:978cae936ddb | 215 | *odr = 10.0f; |
cparata | 1:978cae936ddb | 216 | break; |
cparata | 0:c761bc6186e8 | 217 | |
cparata | 1:978cae936ddb | 218 | case LPS22HH_25_Hz: |
cparata | 1:978cae936ddb | 219 | *odr = 25.0f; |
cparata | 1:978cae936ddb | 220 | break; |
cparata | 0:c761bc6186e8 | 221 | |
cparata | 1:978cae936ddb | 222 | case LPS22HH_50_Hz: |
cparata | 1:978cae936ddb | 223 | *odr = 50.0f; |
cparata | 1:978cae936ddb | 224 | break; |
cparata | 0:c761bc6186e8 | 225 | |
cparata | 1:978cae936ddb | 226 | case LPS22HH_75_Hz: |
cparata | 1:978cae936ddb | 227 | *odr = 75.0f; |
cparata | 1:978cae936ddb | 228 | break; |
cparata | 0:c761bc6186e8 | 229 | |
cparata | 1:978cae936ddb | 230 | case LPS22HH_100_Hz: |
cparata | 1:978cae936ddb | 231 | *odr = 100.0f; |
cparata | 1:978cae936ddb | 232 | break; |
cparata | 0:c761bc6186e8 | 233 | |
cparata | 1:978cae936ddb | 234 | case LPS22HH_200_Hz: |
cparata | 1:978cae936ddb | 235 | *odr = 200.0f; |
cparata | 1:978cae936ddb | 236 | break; |
cparata | 0:c761bc6186e8 | 237 | |
cparata | 1:978cae936ddb | 238 | default: |
cparata | 1:978cae936ddb | 239 | ret = 1; |
cparata | 1:978cae936ddb | 240 | break; |
cparata | 1:978cae936ddb | 241 | } |
cparata | 0:c761bc6186e8 | 242 | |
cparata | 1:978cae936ddb | 243 | return ret; |
cparata | 0:c761bc6186e8 | 244 | } |
cparata | 0:c761bc6186e8 | 245 | |
cparata | 0:c761bc6186e8 | 246 | /** |
cparata | 0:c761bc6186e8 | 247 | * @brief Set the LPS22HH pressure sensor output data rate |
cparata | 0:c761bc6186e8 | 248 | * @param odr the output data rate value to be set |
cparata | 0:c761bc6186e8 | 249 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 250 | */ |
cparata | 0:c761bc6186e8 | 251 | int LPS22HHSensor::set_odr(float odr) |
cparata | 0:c761bc6186e8 | 252 | { |
cparata | 1:978cae936ddb | 253 | /* Check if the component is _is_enabled */ |
cparata | 1:978cae936ddb | 254 | if (_is_enabled == 1U) { |
cparata | 1:978cae936ddb | 255 | return set_odr_when_enabled(odr); |
cparata | 1:978cae936ddb | 256 | } else { |
cparata | 1:978cae936ddb | 257 | return set_odr_when_disabled(odr); |
cparata | 1:978cae936ddb | 258 | } |
cparata | 0:c761bc6186e8 | 259 | } |
cparata | 0:c761bc6186e8 | 260 | |
cparata | 0:c761bc6186e8 | 261 | |
cparata | 0:c761bc6186e8 | 262 | /** |
cparata | 0:c761bc6186e8 | 263 | * @brief Set output data rate |
cparata | 0:c761bc6186e8 | 264 | * @param odr the output data rate value to be set |
cparata | 0:c761bc6186e8 | 265 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 266 | */ |
cparata | 0:c761bc6186e8 | 267 | int LPS22HHSensor::set_odr_when_enabled(float odr) |
cparata | 0:c761bc6186e8 | 268 | { |
cparata | 1:978cae936ddb | 269 | lps22hh_odr_t new_odr; |
cparata | 0:c761bc6186e8 | 270 | |
cparata | 1:978cae936ddb | 271 | new_odr = (odr <= 1.0f) ? LPS22HH_1_Hz |
cparata | 1:978cae936ddb | 272 | : (odr <= 10.0f) ? LPS22HH_10_Hz |
cparata | 1:978cae936ddb | 273 | : (odr <= 25.0f) ? LPS22HH_25_Hz |
cparata | 1:978cae936ddb | 274 | : (odr <= 50.0f) ? LPS22HH_50_Hz |
cparata | 1:978cae936ddb | 275 | : (odr <= 75.0f) ? LPS22HH_75_Hz |
cparata | 1:978cae936ddb | 276 | : (odr <= 100.0f) ? LPS22HH_100_Hz |
cparata | 1:978cae936ddb | 277 | : LPS22HH_200_Hz; |
cparata | 0:c761bc6186e8 | 278 | |
cparata | 1:978cae936ddb | 279 | if (lps22hh_data_rate_set(&_reg_ctx, new_odr) != 0) { |
cparata | 1:978cae936ddb | 280 | return 1; |
cparata | 1:978cae936ddb | 281 | } |
cparata | 0:c761bc6186e8 | 282 | |
cparata | 1:978cae936ddb | 283 | if (lps22hh_data_rate_get(&_reg_ctx, &_last_odr) != 0) { |
cparata | 1:978cae936ddb | 284 | return 1; |
cparata | 1:978cae936ddb | 285 | } |
cparata | 0:c761bc6186e8 | 286 | |
cparata | 1:978cae936ddb | 287 | return 0; |
cparata | 0:c761bc6186e8 | 288 | } |
cparata | 0:c761bc6186e8 | 289 | |
cparata | 0:c761bc6186e8 | 290 | /** |
cparata | 0:c761bc6186e8 | 291 | * @brief Set output data rate when disabled |
cparata | 0:c761bc6186e8 | 292 | * @param odr the output data rate value to be set |
cparata | 0:c761bc6186e8 | 293 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 294 | */ |
cparata | 0:c761bc6186e8 | 295 | int LPS22HHSensor::set_odr_when_disabled(float odr) |
cparata | 0:c761bc6186e8 | 296 | { |
cparata | 1:978cae936ddb | 297 | _last_odr = (odr <= 1.0f) ? LPS22HH_1_Hz |
cparata | 1:978cae936ddb | 298 | : (odr <= 10.0f) ? LPS22HH_10_Hz |
cparata | 1:978cae936ddb | 299 | : (odr <= 25.0f) ? LPS22HH_25_Hz |
cparata | 1:978cae936ddb | 300 | : (odr <= 50.0f) ? LPS22HH_50_Hz |
cparata | 1:978cae936ddb | 301 | : (odr <= 75.0f) ? LPS22HH_75_Hz |
cparata | 1:978cae936ddb | 302 | : (odr <= 100.0f) ? LPS22HH_100_Hz |
cparata | 1:978cae936ddb | 303 | : LPS22HH_200_Hz; |
cparata | 0:c761bc6186e8 | 304 | |
cparata | 1:978cae936ddb | 305 | return 0; |
cparata | 0:c761bc6186e8 | 306 | } |
cparata | 0:c761bc6186e8 | 307 | |
cparata | 0:c761bc6186e8 | 308 | /** |
cparata | 0:c761bc6186e8 | 309 | * @brief Get the LPS22HH pressure value |
cparata | 0:c761bc6186e8 | 310 | * @param value pointer where the pressure value is written |
cparata | 0:c761bc6186e8 | 311 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 312 | */ |
cparata | 0:c761bc6186e8 | 313 | int LPS22HHSensor::get_pressure(float *value) |
cparata | 0:c761bc6186e8 | 314 | { |
cparata | 1:978cae936ddb | 315 | axis1bit32_t data_raw_pressure; |
cparata | 0:c761bc6186e8 | 316 | |
cparata | 1:978cae936ddb | 317 | (void)memset(data_raw_pressure.u8bit, 0x00, sizeof(int32_t)); |
cparata | 1:978cae936ddb | 318 | if (lps22hh_pressure_raw_get(&_reg_ctx, data_raw_pressure.u8bit) != 0) { |
cparata | 1:978cae936ddb | 319 | return 1; |
cparata | 1:978cae936ddb | 320 | } |
cparata | 0:c761bc6186e8 | 321 | |
cparata | 1:978cae936ddb | 322 | *value = LPS22HH_FROM_LSB_TO_hPa((float)(data_raw_pressure.i32bit)); |
cparata | 0:c761bc6186e8 | 323 | |
cparata | 1:978cae936ddb | 324 | return 0; |
cparata | 0:c761bc6186e8 | 325 | } |
cparata | 0:c761bc6186e8 | 326 | |
cparata | 0:c761bc6186e8 | 327 | /** |
cparata | 0:c761bc6186e8 | 328 | * @brief Get the LPS22HH pressure data ready bit value |
cparata | 0:c761bc6186e8 | 329 | * @param status the status of data ready bit |
cparata | 0:c761bc6186e8 | 330 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 331 | */ |
cparata | 0:c761bc6186e8 | 332 | int LPS22HHSensor::get_press_drdy_status(uint8_t *status) |
cparata | 0:c761bc6186e8 | 333 | { |
cparata | 1:978cae936ddb | 334 | if (lps22hh_press_flag_data_ready_get(&_reg_ctx, status) != 0) { |
cparata | 1:978cae936ddb | 335 | return 1; |
cparata | 1:978cae936ddb | 336 | } |
cparata | 0:c761bc6186e8 | 337 | |
cparata | 1:978cae936ddb | 338 | return 0; |
cparata | 0:c761bc6186e8 | 339 | } |
cparata | 0:c761bc6186e8 | 340 | |
cparata | 0:c761bc6186e8 | 341 | /** |
cparata | 0:c761bc6186e8 | 342 | * @brief Get the LPS22HH temperature value |
cparata | 0:c761bc6186e8 | 343 | * @param value pointer where the temperature value is written |
cparata | 0:c761bc6186e8 | 344 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 345 | */ |
cparata | 0:c761bc6186e8 | 346 | int LPS22HHSensor::get_temperature(float *value) |
cparata | 0:c761bc6186e8 | 347 | { |
cparata | 1:978cae936ddb | 348 | axis1bit16_t data_raw_temperature; |
cparata | 0:c761bc6186e8 | 349 | |
cparata | 1:978cae936ddb | 350 | (void)memset(data_raw_temperature.u8bit, 0x00, sizeof(int16_t)); |
cparata | 1:978cae936ddb | 351 | if (lps22hh_temperature_raw_get(&_reg_ctx, data_raw_temperature.u8bit) != 0) { |
cparata | 1:978cae936ddb | 352 | return 1; |
cparata | 1:978cae936ddb | 353 | } |
cparata | 0:c761bc6186e8 | 354 | |
cparata | 1:978cae936ddb | 355 | *value = LPS22HH_FROM_LSB_TO_degC((float)(data_raw_temperature.i16bit)); |
cparata | 0:c761bc6186e8 | 356 | |
cparata | 1:978cae936ddb | 357 | return 0; |
cparata | 0:c761bc6186e8 | 358 | } |
cparata | 0:c761bc6186e8 | 359 | |
cparata | 0:c761bc6186e8 | 360 | /** |
cparata | 0:c761bc6186e8 | 361 | * @brief Get the LPS22HH temperature data ready bit value |
cparata | 0:c761bc6186e8 | 362 | * @param status the status of data ready bit |
cparata | 0:c761bc6186e8 | 363 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 364 | */ |
cparata | 0:c761bc6186e8 | 365 | int LPS22HHSensor::get_temp_drdy_status(uint8_t *status) |
cparata | 0:c761bc6186e8 | 366 | { |
cparata | 1:978cae936ddb | 367 | if (lps22hh_temp_flag_data_ready_get(&_reg_ctx, status) != 0) { |
cparata | 1:978cae936ddb | 368 | return 1; |
cparata | 1:978cae936ddb | 369 | } |
cparata | 0:c761bc6186e8 | 370 | |
cparata | 1:978cae936ddb | 371 | return 0; |
cparata | 0:c761bc6186e8 | 372 | } |
cparata | 0:c761bc6186e8 | 373 | |
cparata | 0:c761bc6186e8 | 374 | /** |
cparata | 0:c761bc6186e8 | 375 | * @brief Get the LPS22HH register value |
cparata | 0:c761bc6186e8 | 376 | * @param reg address to be written |
cparata | 0:c761bc6186e8 | 377 | * @param data value to be written |
cparata | 0:c761bc6186e8 | 378 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 379 | */ |
cparata | 0:c761bc6186e8 | 380 | int LPS22HHSensor::read_reg(uint8_t reg, uint8_t *data) |
cparata | 0:c761bc6186e8 | 381 | { |
cparata | 1:978cae936ddb | 382 | if (lps22hh_read_reg(&_reg_ctx, reg, data, 1) != 0) { |
cparata | 1:978cae936ddb | 383 | return 1; |
cparata | 1:978cae936ddb | 384 | } |
cparata | 0:c761bc6186e8 | 385 | |
cparata | 1:978cae936ddb | 386 | return 0; |
cparata | 0:c761bc6186e8 | 387 | } |
cparata | 0:c761bc6186e8 | 388 | |
cparata | 0:c761bc6186e8 | 389 | /** |
cparata | 0:c761bc6186e8 | 390 | * @brief Set the LPS22HH register value |
cparata | 0:c761bc6186e8 | 391 | * @param reg address to be written |
cparata | 0:c761bc6186e8 | 392 | * @param data value to be written |
cparata | 0:c761bc6186e8 | 393 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 394 | */ |
cparata | 0:c761bc6186e8 | 395 | int LPS22HHSensor::write_reg(uint8_t reg, uint8_t data) |
cparata | 0:c761bc6186e8 | 396 | { |
cparata | 1:978cae936ddb | 397 | if (lps22hh_write_reg(&_reg_ctx, reg, &data, 1) != 0) { |
cparata | 1:978cae936ddb | 398 | return 1; |
cparata | 1:978cae936ddb | 399 | } |
cparata | 0:c761bc6186e8 | 400 | |
cparata | 1:978cae936ddb | 401 | return 0; |
cparata | 0:c761bc6186e8 | 402 | } |
cparata | 0:c761bc6186e8 | 403 | |
cparata | 0:c761bc6186e8 | 404 | /** |
cparata | 0:c761bc6186e8 | 405 | * @brief Get the LPS22HH FIFO data |
cparata | 0:c761bc6186e8 | 406 | * @param press the pointer where FIFO pressure value is stored |
cparata | 0:c761bc6186e8 | 407 | * @param temp the pointer where FIFO temperature value is stored |
cparata | 0:c761bc6186e8 | 408 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 409 | */ |
cparata | 0:c761bc6186e8 | 410 | int LPS22HHSensor::get_fifo_data(float *press, float *temp) |
cparata | 0:c761bc6186e8 | 411 | { |
cparata | 1:978cae936ddb | 412 | axis1bit32_t data_raw_pressure; |
cparata | 1:978cae936ddb | 413 | axis1bit16_t data_raw_temperature; |
cparata | 0:c761bc6186e8 | 414 | |
cparata | 1:978cae936ddb | 415 | (void)memset(data_raw_pressure.u8bit, 0x00, sizeof(int32_t)); |
cparata | 1:978cae936ddb | 416 | if (lps22hh_fifo_pressure_raw_get(&_reg_ctx, data_raw_pressure.u8bit) != 0) { |
cparata | 1:978cae936ddb | 417 | return 1; |
cparata | 1:978cae936ddb | 418 | } |
cparata | 0:c761bc6186e8 | 419 | |
cparata | 1:978cae936ddb | 420 | *press = LPS22HH_FROM_LSB_TO_hPa((float)(data_raw_pressure.i32bit)); |
cparata | 0:c761bc6186e8 | 421 | |
cparata | 1:978cae936ddb | 422 | (void)memset(data_raw_temperature.u8bit, 0x00, sizeof(int16_t)); |
cparata | 1:978cae936ddb | 423 | if (lps22hh_fifo_temperature_raw_get(&_reg_ctx, data_raw_temperature.u8bit) != 0) { |
cparata | 1:978cae936ddb | 424 | return 1; |
cparata | 1:978cae936ddb | 425 | } |
cparata | 0:c761bc6186e8 | 426 | |
cparata | 1:978cae936ddb | 427 | *temp = LPS22HH_FROM_LSB_TO_degC((float)(data_raw_temperature.i16bit)); |
cparata | 0:c761bc6186e8 | 428 | |
cparata | 1:978cae936ddb | 429 | return 0; |
cparata | 0:c761bc6186e8 | 430 | } |
cparata | 0:c761bc6186e8 | 431 | |
cparata | 0:c761bc6186e8 | 432 | /** |
cparata | 0:c761bc6186e8 | 433 | * @brief Get the LPS22HH FIFO threshold |
cparata | 0:c761bc6186e8 | 434 | * @param status the status of FIFO threshold |
cparata | 0:c761bc6186e8 | 435 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 436 | */ |
cparata | 0:c761bc6186e8 | 437 | int LPS22HHSensor::get_fifo_fth_status(uint8_t *status) |
cparata | 0:c761bc6186e8 | 438 | { |
cparata | 1:978cae936ddb | 439 | if (lps22hh_fifo_wtm_flag_get(&_reg_ctx, status) != 0) { |
cparata | 1:978cae936ddb | 440 | return 1; |
cparata | 1:978cae936ddb | 441 | } |
cparata | 0:c761bc6186e8 | 442 | |
cparata | 1:978cae936ddb | 443 | return 0; |
cparata | 0:c761bc6186e8 | 444 | } |
cparata | 0:c761bc6186e8 | 445 | |
cparata | 0:c761bc6186e8 | 446 | /** |
cparata | 0:c761bc6186e8 | 447 | * @brief Get the LPS22HH FIFO full status |
cparata | 0:c761bc6186e8 | 448 | * @param status the status of FIFO full status |
cparata | 0:c761bc6186e8 | 449 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 450 | */ |
cparata | 0:c761bc6186e8 | 451 | int LPS22HHSensor::get_fifo_full_status(uint8_t *status) |
cparata | 0:c761bc6186e8 | 452 | { |
cparata | 1:978cae936ddb | 453 | if (lps22hh_fifo_full_flag_get(&_reg_ctx, status) != 0) { |
cparata | 1:978cae936ddb | 454 | return 1; |
cparata | 1:978cae936ddb | 455 | } |
cparata | 0:c761bc6186e8 | 456 | |
cparata | 1:978cae936ddb | 457 | return 0; |
cparata | 0:c761bc6186e8 | 458 | } |
cparata | 0:c761bc6186e8 | 459 | |
cparata | 0:c761bc6186e8 | 460 | /** |
cparata | 0:c761bc6186e8 | 461 | * @brief Get the LPS22HH FIFO OVR status |
cparata | 0:c761bc6186e8 | 462 | * @param status the status of FIFO OVR status |
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_ovr_status(uint8_t *status) |
cparata | 0:c761bc6186e8 | 466 | { |
cparata | 1:978cae936ddb | 467 | if (lps22hh_fifo_ovr_flag_get(&_reg_ctx, status) != 0) { |
cparata | 1:978cae936ddb | 468 | return 1; |
cparata | 1:978cae936ddb | 469 | } |
cparata | 0:c761bc6186e8 | 470 | |
cparata | 1:978cae936ddb | 471 | return 0; |
cparata | 0:c761bc6186e8 | 472 | } |
cparata | 0:c761bc6186e8 | 473 | |
cparata | 0:c761bc6186e8 | 474 | /** |
cparata | 0:c761bc6186e8 | 475 | * @brief Get the LPS22HH FIFO data level |
cparata | 0:c761bc6186e8 | 476 | * @param status the status of FIFO data level |
cparata | 0:c761bc6186e8 | 477 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 478 | */ |
cparata | 0:c761bc6186e8 | 479 | int LPS22HHSensor::get_fifo_level(uint8_t *status) |
cparata | 0:c761bc6186e8 | 480 | { |
cparata | 1:978cae936ddb | 481 | if (lps22hh_fifo_data_level_get(&_reg_ctx, status) != 0) { |
cparata | 1:978cae936ddb | 482 | return 1; |
cparata | 1:978cae936ddb | 483 | } |
cparata | 0:c761bc6186e8 | 484 | |
cparata | 1:978cae936ddb | 485 | return 0; |
cparata | 0:c761bc6186e8 | 486 | } |
cparata | 0:c761bc6186e8 | 487 | |
cparata | 0:c761bc6186e8 | 488 | /** |
cparata | 0:c761bc6186e8 | 489 | * @brief Reset the FIFO interrupt |
cparata | 0:c761bc6186e8 | 490 | * @param interrupt The FIFO interrupt to be reset; values: 0 = FTH; 1 = FULL; 2 = OVR |
cparata | 0:c761bc6186e8 | 491 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 492 | */ |
cparata | 0:c761bc6186e8 | 493 | int LPS22HHSensor::reset_fifo_interrupt(uint8_t interrupt) |
cparata | 0:c761bc6186e8 | 494 | { |
cparata | 1:978cae936ddb | 495 | switch (interrupt) { |
cparata | 1:978cae936ddb | 496 | case 0: |
cparata | 1:978cae936ddb | 497 | if (lps22hh_fifo_threshold_on_int_set(&_reg_ctx, PROPERTY_DISABLE) != 0) { |
cparata | 1:978cae936ddb | 498 | return 1; |
cparata | 1:978cae936ddb | 499 | } |
cparata | 1:978cae936ddb | 500 | break; |
cparata | 1:978cae936ddb | 501 | case 1: |
cparata | 1:978cae936ddb | 502 | if (lps22hh_fifo_full_on_int_set(&_reg_ctx, PROPERTY_DISABLE) != 0) { |
cparata | 1:978cae936ddb | 503 | return 1; |
cparata | 1:978cae936ddb | 504 | } |
cparata | 1:978cae936ddb | 505 | break; |
cparata | 1:978cae936ddb | 506 | case 2: |
cparata | 1:978cae936ddb | 507 | if (lps22hh_fifo_ovr_on_int_set(&_reg_ctx, PROPERTY_DISABLE) != 0) { |
cparata | 1:978cae936ddb | 508 | return 1; |
cparata | 1:978cae936ddb | 509 | } |
cparata | 1:978cae936ddb | 510 | break; |
cparata | 1:978cae936ddb | 511 | default: |
cparata | 1:978cae936ddb | 512 | return 1; |
cparata | 1:978cae936ddb | 513 | } |
cparata | 0:c761bc6186e8 | 514 | |
cparata | 1:978cae936ddb | 515 | return 0; |
cparata | 0:c761bc6186e8 | 516 | } |
cparata | 0:c761bc6186e8 | 517 | |
cparata | 0:c761bc6186e8 | 518 | /** |
cparata | 0:c761bc6186e8 | 519 | * @brief Set the FIFO interrupt |
cparata | 0:c761bc6186e8 | 520 | * @param interrupt The FIFO interrupt to be set; values: 0 = FTH; 1 = FULL; 2 = OVR |
cparata | 0:c761bc6186e8 | 521 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 522 | */ |
cparata | 0:c761bc6186e8 | 523 | int LPS22HHSensor::set_fifo_interrupt(uint8_t interrupt) |
cparata | 0:c761bc6186e8 | 524 | { |
cparata | 1:978cae936ddb | 525 | switch (interrupt) { |
cparata | 1:978cae936ddb | 526 | case 0: |
cparata | 1:978cae936ddb | 527 | if (lps22hh_fifo_threshold_on_int_set(&_reg_ctx, PROPERTY_ENABLE) != 0) { |
cparata | 1:978cae936ddb | 528 | return 1; |
cparata | 1:978cae936ddb | 529 | } |
cparata | 1:978cae936ddb | 530 | break; |
cparata | 1:978cae936ddb | 531 | case 1: |
cparata | 1:978cae936ddb | 532 | if (lps22hh_fifo_full_on_int_set(&_reg_ctx, PROPERTY_ENABLE) != 0) { |
cparata | 1:978cae936ddb | 533 | return 1; |
cparata | 1:978cae936ddb | 534 | } |
cparata | 1:978cae936ddb | 535 | break; |
cparata | 1:978cae936ddb | 536 | case 2: |
cparata | 1:978cae936ddb | 537 | if (lps22hh_fifo_ovr_on_int_set(&_reg_ctx, PROPERTY_ENABLE) != 0) { |
cparata | 1:978cae936ddb | 538 | return 1; |
cparata | 1:978cae936ddb | 539 | } |
cparata | 1:978cae936ddb | 540 | break; |
cparata | 1:978cae936ddb | 541 | default: |
cparata | 1:978cae936ddb | 542 | return 1; |
cparata | 1:978cae936ddb | 543 | } |
cparata | 0:c761bc6186e8 | 544 | |
cparata | 1:978cae936ddb | 545 | return 0; |
cparata | 0:c761bc6186e8 | 546 | } |
cparata | 0:c761bc6186e8 | 547 | |
cparata | 0:c761bc6186e8 | 548 | /** |
cparata | 0:c761bc6186e8 | 549 | * @brief Set the FIFO mode |
cparata | 0:c761bc6186e8 | 550 | * @param Mode the FIFO mode to be set |
cparata | 0:c761bc6186e8 | 551 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 552 | */ |
cparata | 0:c761bc6186e8 | 553 | int LPS22HHSensor::set_fifo_mode(uint8_t mode) |
cparata | 0:c761bc6186e8 | 554 | { |
cparata | 1:978cae936ddb | 555 | /* Verify that the passed parameter contains one of the valid values */ |
cparata | 1:978cae936ddb | 556 | switch ((lps22hh_f_mode_t)mode) { |
cparata | 1:978cae936ddb | 557 | case LPS22HH_BYPASS_MODE: |
cparata | 1:978cae936ddb | 558 | case LPS22HH_FIFO_MODE: |
cparata | 1:978cae936ddb | 559 | case LPS22HH_STREAM_MODE: |
cparata | 1:978cae936ddb | 560 | case LPS22HH_STREAM_TO_FIFO_MODE: |
cparata | 1:978cae936ddb | 561 | case LPS22HH_BYPASS_TO_STREAM_MODE: |
cparata | 1:978cae936ddb | 562 | case LPS22HH_BYPASS_TO_FIFO_MODE: |
cparata | 1:978cae936ddb | 563 | break; |
cparata | 1:978cae936ddb | 564 | default: |
cparata | 1:978cae936ddb | 565 | return 1; |
cparata | 1:978cae936ddb | 566 | } |
cparata | 0:c761bc6186e8 | 567 | |
cparata | 1:978cae936ddb | 568 | if (lps22hh_fifo_mode_set(&_reg_ctx, (lps22hh_f_mode_t)mode) != 0) { |
cparata | 1:978cae936ddb | 569 | return 1; |
cparata | 1:978cae936ddb | 570 | } |
cparata | 0:c761bc6186e8 | 571 | |
cparata | 1:978cae936ddb | 572 | return 0; |
cparata | 0:c761bc6186e8 | 573 | } |
cparata | 0:c761bc6186e8 | 574 | |
cparata | 0:c761bc6186e8 | 575 | /** |
cparata | 0:c761bc6186e8 | 576 | * @brief Set the LPS22HH FIFO watermark level |
cparata | 0:c761bc6186e8 | 577 | * @param watermark the FIFO watermark level to be set |
cparata | 0:c761bc6186e8 | 578 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 579 | */ |
cparata | 0:c761bc6186e8 | 580 | int LPS22HHSensor::set_fifo_watermark_level(uint8_t watermark) |
cparata | 0:c761bc6186e8 | 581 | { |
cparata | 1:978cae936ddb | 582 | if (lps22hh_fifo_watermark_set(&_reg_ctx, watermark) != 0) { |
cparata | 1:978cae936ddb | 583 | return 1; |
cparata | 1:978cae936ddb | 584 | } |
cparata | 0:c761bc6186e8 | 585 | |
cparata | 1:978cae936ddb | 586 | return 0; |
cparata | 0:c761bc6186e8 | 587 | } |
cparata | 0:c761bc6186e8 | 588 | |
cparata | 0:c761bc6186e8 | 589 | /** |
cparata | 0:c761bc6186e8 | 590 | * @brief Set the LPS22HH stop on watermark function |
cparata | 0:c761bc6186e8 | 591 | * @param stop the state of stop on watermark function |
cparata | 0:c761bc6186e8 | 592 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 593 | */ |
cparata | 0:c761bc6186e8 | 594 | int LPS22HHSensor::stop_fifo_on_watermark(uint8_t stop) |
cparata | 0:c761bc6186e8 | 595 | { |
cparata | 1:978cae936ddb | 596 | if (lps22hh_fifo_stop_on_wtm_set(&_reg_ctx, stop) != 0) { |
cparata | 1:978cae936ddb | 597 | return 1; |
cparata | 1:978cae936ddb | 598 | } |
cparata | 0:c761bc6186e8 | 599 | |
cparata | 1:978cae936ddb | 600 | return 0; |
cparata | 0:c761bc6186e8 | 601 | } |
cparata | 0:c761bc6186e8 | 602 | |
cparata | 0:c761bc6186e8 | 603 | /** |
cparata | 0:c761bc6186e8 | 604 | * @brief Set the LPS22HH One Shot Mode |
cparata | 0:c761bc6186e8 | 605 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 606 | */ |
cparata | 0:c761bc6186e8 | 607 | int LPS22HHSensor::set_one_shot() |
cparata | 0:c761bc6186e8 | 608 | { |
cparata | 1:978cae936ddb | 609 | /* Start One Shot Measurement */ |
cparata | 1:978cae936ddb | 610 | if (lps22hh_data_rate_set(&_reg_ctx, LPS22HH_ONE_SHOOT) != 0) { |
cparata | 1:978cae936ddb | 611 | return 1; |
cparata | 1:978cae936ddb | 612 | } |
cparata | 0:c761bc6186e8 | 613 | |
cparata | 1:978cae936ddb | 614 | return 0; |
cparata | 0:c761bc6186e8 | 615 | } |
cparata | 0:c761bc6186e8 | 616 | |
cparata | 0:c761bc6186e8 | 617 | /** |
cparata | 0:c761bc6186e8 | 618 | * @brief Get the LPS22HH One Shot Status |
cparata | 0:c761bc6186e8 | 619 | * @param status pointer to the one shot status (1 means measurements available, 0 means measurements not available yet) |
cparata | 0:c761bc6186e8 | 620 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 621 | */ |
cparata | 0:c761bc6186e8 | 622 | int LPS22HHSensor::get_one_shot_status(uint8_t *status) |
cparata | 0:c761bc6186e8 | 623 | { |
cparata | 1:978cae936ddb | 624 | uint8_t p_da; |
cparata | 1:978cae936ddb | 625 | uint8_t t_da; |
cparata | 0:c761bc6186e8 | 626 | |
cparata | 1:978cae936ddb | 627 | /* Get DataReady for pressure */ |
cparata | 1:978cae936ddb | 628 | if (lps22hh_press_flag_data_ready_get(&_reg_ctx, &p_da) != 0) { |
cparata | 1:978cae936ddb | 629 | return 1; |
cparata | 1:978cae936ddb | 630 | } |
cparata | 0:c761bc6186e8 | 631 | |
cparata | 1:978cae936ddb | 632 | /* Get DataReady for temperature */ |
cparata | 1:978cae936ddb | 633 | if (lps22hh_temp_flag_data_ready_get(&_reg_ctx, &t_da) != 0) { |
cparata | 1:978cae936ddb | 634 | return 1; |
cparata | 1:978cae936ddb | 635 | } |
cparata | 0:c761bc6186e8 | 636 | |
cparata | 1:978cae936ddb | 637 | if (p_da && t_da) { |
cparata | 1:978cae936ddb | 638 | *status = 1; |
cparata | 1:978cae936ddb | 639 | } else { |
cparata | 1:978cae936ddb | 640 | *status = 0; |
cparata | 1:978cae936ddb | 641 | } |
cparata | 0:c761bc6186e8 | 642 | |
cparata | 1:978cae936ddb | 643 | return 0; |
cparata | 0:c761bc6186e8 | 644 | } |
cparata | 0:c761bc6186e8 | 645 | |
cparata | 0:c761bc6186e8 | 646 | int32_t LPS22HH_io_write(void *handle, uint8_t WriteAddr, uint8_t *pBuffer, uint16_t nBytesToWrite) |
cparata | 0:c761bc6186e8 | 647 | { |
cparata | 1:978cae936ddb | 648 | return ((LPS22HHSensor *)handle)->io_write(pBuffer, WriteAddr, nBytesToWrite); |
cparata | 0:c761bc6186e8 | 649 | } |
cparata | 0:c761bc6186e8 | 650 | |
cparata | 0:c761bc6186e8 | 651 | int32_t LPS22HH_io_read(void *handle, uint8_t ReadAddr, uint8_t *pBuffer, uint16_t nBytesToRead) |
cparata | 0:c761bc6186e8 | 652 | { |
cparata | 1:978cae936ddb | 653 | return ((LPS22HHSensor *)handle)->io_read(pBuffer, ReadAddr, nBytesToRead); |
cparata | 0:c761bc6186e8 | 654 | } |