LPS22HH pressure sensor library
Dependencies: X_NUCLEO_COMMON ST_INTERFACES
LPS22HHSensor.cpp@2:a8417bcdc2e8, 2019-09-17 (annotated)
- Committer:
- martlefebvre94
- Date:
- Tue Sep 17 08:40:31 2019 +0000
- Revision:
- 2:a8417bcdc2e8
- Parent:
- 1:978cae936ddb
Addition of functions for the configuration of the pressure sensor
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 | */ |
martlefebvre94 | 2:a8417bcdc2e8 | 196 | int LPS22HHSensor::get_odr(float *odr, uint8_t *low_noise_en) |
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; |
martlefebvre94 | 2:a8417bcdc2e8 | 208 | *low_noise_en = 0; |
cparata | 1:978cae936ddb | 209 | break; |
cparata | 0:c761bc6186e8 | 210 | |
cparata | 1:978cae936ddb | 211 | case LPS22HH_1_Hz: |
cparata | 1:978cae936ddb | 212 | *odr = 1.0f; |
martlefebvre94 | 2:a8417bcdc2e8 | 213 | *low_noise_en = 0; |
cparata | 1:978cae936ddb | 214 | break; |
cparata | 0:c761bc6186e8 | 215 | |
cparata | 1:978cae936ddb | 216 | case LPS22HH_10_Hz: |
cparata | 1:978cae936ddb | 217 | *odr = 10.0f; |
martlefebvre94 | 2:a8417bcdc2e8 | 218 | *low_noise_en = 0; |
cparata | 1:978cae936ddb | 219 | break; |
cparata | 0:c761bc6186e8 | 220 | |
cparata | 1:978cae936ddb | 221 | case LPS22HH_25_Hz: |
cparata | 1:978cae936ddb | 222 | *odr = 25.0f; |
martlefebvre94 | 2:a8417bcdc2e8 | 223 | *low_noise_en = 0; |
cparata | 1:978cae936ddb | 224 | break; |
cparata | 0:c761bc6186e8 | 225 | |
cparata | 1:978cae936ddb | 226 | case LPS22HH_50_Hz: |
cparata | 1:978cae936ddb | 227 | *odr = 50.0f; |
martlefebvre94 | 2:a8417bcdc2e8 | 228 | *low_noise_en = 0; |
cparata | 1:978cae936ddb | 229 | break; |
cparata | 0:c761bc6186e8 | 230 | |
cparata | 1:978cae936ddb | 231 | case LPS22HH_75_Hz: |
cparata | 1:978cae936ddb | 232 | *odr = 75.0f; |
martlefebvre94 | 2:a8417bcdc2e8 | 233 | *low_noise_en = 0; |
cparata | 1:978cae936ddb | 234 | break; |
martlefebvre94 | 2:a8417bcdc2e8 | 235 | |
martlefebvre94 | 2:a8417bcdc2e8 | 236 | case LPS22HH_1_Hz_LOW_NOISE: |
martlefebvre94 | 2:a8417bcdc2e8 | 237 | *odr = 1.0f; |
martlefebvre94 | 2:a8417bcdc2e8 | 238 | *low_noise_en = 1; |
martlefebvre94 | 2:a8417bcdc2e8 | 239 | break; |
martlefebvre94 | 2:a8417bcdc2e8 | 240 | |
martlefebvre94 | 2:a8417bcdc2e8 | 241 | case LPS22HH_10_Hz_LOW_NOISE: |
martlefebvre94 | 2:a8417bcdc2e8 | 242 | *odr = 10.0f; |
martlefebvre94 | 2:a8417bcdc2e8 | 243 | *low_noise_en = 1; |
martlefebvre94 | 2:a8417bcdc2e8 | 244 | break; |
martlefebvre94 | 2:a8417bcdc2e8 | 245 | |
martlefebvre94 | 2:a8417bcdc2e8 | 246 | case LPS22HH_25_Hz_LOW_NOISE: |
martlefebvre94 | 2:a8417bcdc2e8 | 247 | *odr = 25.0f; |
martlefebvre94 | 2:a8417bcdc2e8 | 248 | *low_noise_en = 1; |
martlefebvre94 | 2:a8417bcdc2e8 | 249 | break; |
martlefebvre94 | 2:a8417bcdc2e8 | 250 | |
martlefebvre94 | 2:a8417bcdc2e8 | 251 | case LPS22HH_50_Hz_LOW_NOISE: |
martlefebvre94 | 2:a8417bcdc2e8 | 252 | *odr = 50.0f; |
martlefebvre94 | 2:a8417bcdc2e8 | 253 | *low_noise_en = 1; |
martlefebvre94 | 2:a8417bcdc2e8 | 254 | break; |
martlefebvre94 | 2:a8417bcdc2e8 | 255 | |
martlefebvre94 | 2:a8417bcdc2e8 | 256 | case LPS22HH_75_Hz_LOW_NOISE: |
martlefebvre94 | 2:a8417bcdc2e8 | 257 | *odr = 75.0f; |
martlefebvre94 | 2:a8417bcdc2e8 | 258 | *low_noise_en = 1; |
martlefebvre94 | 2:a8417bcdc2e8 | 259 | break; |
martlefebvre94 | 2:a8417bcdc2e8 | 260 | |
cparata | 1:978cae936ddb | 261 | case LPS22HH_100_Hz: |
cparata | 1:978cae936ddb | 262 | *odr = 100.0f; |
martlefebvre94 | 2:a8417bcdc2e8 | 263 | *low_noise_en = 0; |
cparata | 1:978cae936ddb | 264 | break; |
cparata | 0:c761bc6186e8 | 265 | |
cparata | 1:978cae936ddb | 266 | case LPS22HH_200_Hz: |
cparata | 1:978cae936ddb | 267 | *odr = 200.0f; |
martlefebvre94 | 2:a8417bcdc2e8 | 268 | *low_noise_en = 0; |
cparata | 1:978cae936ddb | 269 | break; |
cparata | 0:c761bc6186e8 | 270 | |
cparata | 1:978cae936ddb | 271 | default: |
cparata | 1:978cae936ddb | 272 | ret = 1; |
cparata | 1:978cae936ddb | 273 | break; |
cparata | 1:978cae936ddb | 274 | } |
cparata | 0:c761bc6186e8 | 275 | |
cparata | 1:978cae936ddb | 276 | return ret; |
cparata | 0:c761bc6186e8 | 277 | } |
cparata | 0:c761bc6186e8 | 278 | |
cparata | 0:c761bc6186e8 | 279 | /** |
cparata | 0:c761bc6186e8 | 280 | * @brief Set the LPS22HH pressure sensor output data rate |
cparata | 0:c761bc6186e8 | 281 | * @param odr the output data rate value to be set |
cparata | 0:c761bc6186e8 | 282 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 283 | */ |
martlefebvre94 | 2:a8417bcdc2e8 | 284 | int LPS22HHSensor::set_odr(float odr, uint8_t low_noise_en) |
cparata | 0:c761bc6186e8 | 285 | { |
cparata | 1:978cae936ddb | 286 | /* Check if the component is _is_enabled */ |
cparata | 1:978cae936ddb | 287 | if (_is_enabled == 1U) { |
martlefebvre94 | 2:a8417bcdc2e8 | 288 | return set_odr_when_enabled(odr, low_noise_en); |
cparata | 1:978cae936ddb | 289 | } else { |
martlefebvre94 | 2:a8417bcdc2e8 | 290 | return set_odr_when_disabled(odr, low_noise_en); |
cparata | 1:978cae936ddb | 291 | } |
cparata | 0:c761bc6186e8 | 292 | } |
cparata | 0:c761bc6186e8 | 293 | |
cparata | 0:c761bc6186e8 | 294 | /** |
cparata | 0:c761bc6186e8 | 295 | * @brief Set output data rate |
cparata | 0:c761bc6186e8 | 296 | * @param odr the output data rate value to be set |
cparata | 0:c761bc6186e8 | 297 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 298 | */ |
martlefebvre94 | 2:a8417bcdc2e8 | 299 | int LPS22HHSensor::set_odr_when_enabled(float odr, uint8_t low_noise_en) |
cparata | 0:c761bc6186e8 | 300 | { |
cparata | 1:978cae936ddb | 301 | lps22hh_odr_t new_odr; |
cparata | 0:c761bc6186e8 | 302 | |
martlefebvre94 | 2:a8417bcdc2e8 | 303 | new_odr = ((odr <= 1.0f) && !low_noise_en) ? LPS22HH_1_Hz |
martlefebvre94 | 2:a8417bcdc2e8 | 304 | : ((odr <= 1.0f) && low_noise_en) ? LPS22HH_1_Hz_LOW_NOISE |
martlefebvre94 | 2:a8417bcdc2e8 | 305 | : ((odr <= 10.0f) && !low_noise_en) ? LPS22HH_10_Hz |
martlefebvre94 | 2:a8417bcdc2e8 | 306 | : ((odr <= 10.0f) && low_noise_en) ? LPS22HH_10_Hz_LOW_NOISE |
martlefebvre94 | 2:a8417bcdc2e8 | 307 | : ((odr <= 25.0f) && !low_noise_en) ? LPS22HH_25_Hz |
martlefebvre94 | 2:a8417bcdc2e8 | 308 | : ((odr <= 25.0f) && low_noise_en) ? LPS22HH_25_Hz_LOW_NOISE |
martlefebvre94 | 2:a8417bcdc2e8 | 309 | : ((odr <= 50.0f) && !low_noise_en) ? LPS22HH_50_Hz |
martlefebvre94 | 2:a8417bcdc2e8 | 310 | : ((odr <= 50.0f) && low_noise_en) ? LPS22HH_50_Hz_LOW_NOISE |
martlefebvre94 | 2:a8417bcdc2e8 | 311 | : ((odr <= 75.0f) && !low_noise_en) ? LPS22HH_75_Hz |
martlefebvre94 | 2:a8417bcdc2e8 | 312 | : ((odr <= 75.0f) && low_noise_en) ? LPS22HH_75_Hz_LOW_NOISE |
martlefebvre94 | 2:a8417bcdc2e8 | 313 | : (odr <= 100.0f) ? LPS22HH_100_Hz |
martlefebvre94 | 2:a8417bcdc2e8 | 314 | : LPS22HH_200_Hz; |
cparata | 0:c761bc6186e8 | 315 | |
cparata | 1:978cae936ddb | 316 | if (lps22hh_data_rate_set(&_reg_ctx, new_odr) != 0) { |
cparata | 1:978cae936ddb | 317 | return 1; |
cparata | 1:978cae936ddb | 318 | } |
cparata | 0:c761bc6186e8 | 319 | |
cparata | 1:978cae936ddb | 320 | if (lps22hh_data_rate_get(&_reg_ctx, &_last_odr) != 0) { |
cparata | 1:978cae936ddb | 321 | return 1; |
cparata | 1:978cae936ddb | 322 | } |
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 Set output data rate when disabled |
cparata | 0:c761bc6186e8 | 329 | * @param odr the output data rate value to be set |
cparata | 0:c761bc6186e8 | 330 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 331 | */ |
martlefebvre94 | 2:a8417bcdc2e8 | 332 | int LPS22HHSensor::set_odr_when_disabled(float odr, uint8_t low_noise_en) |
martlefebvre94 | 2:a8417bcdc2e8 | 333 | { |
martlefebvre94 | 2:a8417bcdc2e8 | 334 | _last_odr = ((odr <= 1.0f) && !low_noise_en) ? LPS22HH_1_Hz |
martlefebvre94 | 2:a8417bcdc2e8 | 335 | : ((odr <= 1.0f) && low_noise_en) ? LPS22HH_1_Hz_LOW_NOISE |
martlefebvre94 | 2:a8417bcdc2e8 | 336 | : ((odr <= 10.0f) && !low_noise_en) ? LPS22HH_10_Hz |
martlefebvre94 | 2:a8417bcdc2e8 | 337 | : ((odr <= 10.0f) && low_noise_en) ? LPS22HH_10_Hz_LOW_NOISE |
martlefebvre94 | 2:a8417bcdc2e8 | 338 | : ((odr <= 25.0f) && !low_noise_en) ? LPS22HH_25_Hz |
martlefebvre94 | 2:a8417bcdc2e8 | 339 | : ((odr <= 25.0f) && low_noise_en) ? LPS22HH_25_Hz_LOW_NOISE |
martlefebvre94 | 2:a8417bcdc2e8 | 340 | : ((odr <= 50.0f) && !low_noise_en) ? LPS22HH_50_Hz |
martlefebvre94 | 2:a8417bcdc2e8 | 341 | : ((odr <= 50.0f) && low_noise_en) ? LPS22HH_50_Hz_LOW_NOISE |
martlefebvre94 | 2:a8417bcdc2e8 | 342 | : ((odr <= 75.0f) && !low_noise_en) ? LPS22HH_75_Hz |
martlefebvre94 | 2:a8417bcdc2e8 | 343 | : ((odr <= 75.0f) && low_noise_en) ? LPS22HH_75_Hz_LOW_NOISE |
martlefebvre94 | 2:a8417bcdc2e8 | 344 | : (odr <= 100.0f) ? LPS22HH_100_Hz |
martlefebvre94 | 2:a8417bcdc2e8 | 345 | : LPS22HH_200_Hz; |
martlefebvre94 | 2:a8417bcdc2e8 | 346 | |
martlefebvre94 | 2:a8417bcdc2e8 | 347 | return 0; |
martlefebvre94 | 2:a8417bcdc2e8 | 348 | } |
martlefebvre94 | 2:a8417bcdc2e8 | 349 | |
martlefebvre94 | 2:a8417bcdc2e8 | 350 | |
martlefebvre94 | 2:a8417bcdc2e8 | 351 | /** |
martlefebvre94 | 2:a8417bcdc2e8 | 352 | * @brief Get low-pass configuration |
martlefebvre94 | 2:a8417bcdc2e8 | 353 | * @param lpfp_cfg the low-pass configuration value |
martlefebvre94 | 2:a8417bcdc2e8 | 354 | * @retval 0 in case of success, an error code otherwise |
martlefebvre94 | 2:a8417bcdc2e8 | 355 | */ |
martlefebvre94 | 2:a8417bcdc2e8 | 356 | int LPS22HHSensor::get_lpfp_cfg(uint8_t *lpfp_cfg) |
cparata | 0:c761bc6186e8 | 357 | { |
martlefebvre94 | 2:a8417bcdc2e8 | 358 | int ret = 0; |
martlefebvre94 | 2:a8417bcdc2e8 | 359 | lps22hh_lpfp_cfg_t lpfp_cfg_low_level; |
martlefebvre94 | 2:a8417bcdc2e8 | 360 | |
martlefebvre94 | 2:a8417bcdc2e8 | 361 | if (lps22hh_lp_bandwidth_get(&_reg_ctx, &lpfp_cfg_low_level) != 0) { |
martlefebvre94 | 2:a8417bcdc2e8 | 362 | return 1; |
martlefebvre94 | 2:a8417bcdc2e8 | 363 | } |
martlefebvre94 | 2:a8417bcdc2e8 | 364 | |
martlefebvre94 | 2:a8417bcdc2e8 | 365 | switch (lpfp_cfg_low_level) { |
martlefebvre94 | 2:a8417bcdc2e8 | 366 | case LPS22HH_LPF_ODR_DIV_2: |
martlefebvre94 | 2:a8417bcdc2e8 | 367 | *lpfp_cfg = 0; |
martlefebvre94 | 2:a8417bcdc2e8 | 368 | break; |
martlefebvre94 | 2:a8417bcdc2e8 | 369 | |
martlefebvre94 | 2:a8417bcdc2e8 | 370 | case LPS22HH_LPF_ODR_DIV_9: |
martlefebvre94 | 2:a8417bcdc2e8 | 371 | *lpfp_cfg = 2; |
martlefebvre94 | 2:a8417bcdc2e8 | 372 | break; |
martlefebvre94 | 2:a8417bcdc2e8 | 373 | |
martlefebvre94 | 2:a8417bcdc2e8 | 374 | case LPS22HH_LPF_ODR_DIV_20: |
martlefebvre94 | 2:a8417bcdc2e8 | 375 | *lpfp_cfg = 3; |
martlefebvre94 | 2:a8417bcdc2e8 | 376 | break; |
martlefebvre94 | 2:a8417bcdc2e8 | 377 | |
martlefebvre94 | 2:a8417bcdc2e8 | 378 | default: |
martlefebvre94 | 2:a8417bcdc2e8 | 379 | ret = 1; |
martlefebvre94 | 2:a8417bcdc2e8 | 380 | break; |
martlefebvre94 | 2:a8417bcdc2e8 | 381 | } |
martlefebvre94 | 2:a8417bcdc2e8 | 382 | |
martlefebvre94 | 2:a8417bcdc2e8 | 383 | return ret; |
martlefebvre94 | 2:a8417bcdc2e8 | 384 | } |
martlefebvre94 | 2:a8417bcdc2e8 | 385 | |
martlefebvre94 | 2:a8417bcdc2e8 | 386 | /** |
martlefebvre94 | 2:a8417bcdc2e8 | 387 | * @brief Set the LPS22HH pressure sensor low-pass configuration |
martlefebvre94 | 2:a8417bcdc2e8 | 388 | * @param lpfp_cfg the low-pass configuration value to be set |
martlefebvre94 | 2:a8417bcdc2e8 | 389 | * @retval 0 in case of success, an error code otherwise |
martlefebvre94 | 2:a8417bcdc2e8 | 390 | */ |
martlefebvre94 | 2:a8417bcdc2e8 | 391 | int LPS22HHSensor::set_lpfp_cfg(uint8_t lpfp_cfg) |
martlefebvre94 | 2:a8417bcdc2e8 | 392 | { |
martlefebvre94 | 2:a8417bcdc2e8 | 393 | lps22hh_lpfp_cfg_t new_lpfp_cfg; |
martlefebvre94 | 2:a8417bcdc2e8 | 394 | |
martlefebvre94 | 2:a8417bcdc2e8 | 395 | new_lpfp_cfg = (lpfp_cfg == 2) ? LPS22HH_LPF_ODR_DIV_9 |
martlefebvre94 | 2:a8417bcdc2e8 | 396 | : (lpfp_cfg == 3) ? LPS22HH_LPF_ODR_DIV_20 |
martlefebvre94 | 2:a8417bcdc2e8 | 397 | : LPS22HH_LPF_ODR_DIV_2; |
martlefebvre94 | 2:a8417bcdc2e8 | 398 | |
martlefebvre94 | 2:a8417bcdc2e8 | 399 | if (lps22hh_lp_bandwidth_set(&_reg_ctx, new_lpfp_cfg) != 0) { |
martlefebvre94 | 2:a8417bcdc2e8 | 400 | return 1; |
martlefebvre94 | 2:a8417bcdc2e8 | 401 | } |
cparata | 0:c761bc6186e8 | 402 | |
cparata | 1:978cae936ddb | 403 | return 0; |
cparata | 0:c761bc6186e8 | 404 | } |
cparata | 0:c761bc6186e8 | 405 | |
cparata | 0:c761bc6186e8 | 406 | /** |
cparata | 0:c761bc6186e8 | 407 | * @brief Get the LPS22HH pressure value |
cparata | 0:c761bc6186e8 | 408 | * @param value pointer where the pressure value is written |
cparata | 0:c761bc6186e8 | 409 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 410 | */ |
cparata | 0:c761bc6186e8 | 411 | int LPS22HHSensor::get_pressure(float *value) |
cparata | 0:c761bc6186e8 | 412 | { |
cparata | 1:978cae936ddb | 413 | axis1bit32_t data_raw_pressure; |
cparata | 0:c761bc6186e8 | 414 | |
cparata | 1:978cae936ddb | 415 | (void)memset(data_raw_pressure.u8bit, 0x00, sizeof(int32_t)); |
cparata | 1:978cae936ddb | 416 | if (lps22hh_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 | *value = LPS22HH_FROM_LSB_TO_hPa((float)(data_raw_pressure.i32bit)); |
cparata | 0:c761bc6186e8 | 421 | |
cparata | 1:978cae936ddb | 422 | return 0; |
cparata | 0:c761bc6186e8 | 423 | } |
cparata | 0:c761bc6186e8 | 424 | |
cparata | 0:c761bc6186e8 | 425 | /** |
cparata | 0:c761bc6186e8 | 426 | * @brief Get the LPS22HH pressure data ready bit value |
cparata | 0:c761bc6186e8 | 427 | * @param status the status of data ready bit |
cparata | 0:c761bc6186e8 | 428 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 429 | */ |
cparata | 0:c761bc6186e8 | 430 | int LPS22HHSensor::get_press_drdy_status(uint8_t *status) |
cparata | 0:c761bc6186e8 | 431 | { |
cparata | 1:978cae936ddb | 432 | if (lps22hh_press_flag_data_ready_get(&_reg_ctx, status) != 0) { |
cparata | 1:978cae936ddb | 433 | return 1; |
cparata | 1:978cae936ddb | 434 | } |
cparata | 0:c761bc6186e8 | 435 | |
cparata | 1:978cae936ddb | 436 | return 0; |
cparata | 0:c761bc6186e8 | 437 | } |
cparata | 0:c761bc6186e8 | 438 | |
cparata | 0:c761bc6186e8 | 439 | /** |
cparata | 0:c761bc6186e8 | 440 | * @brief Get the LPS22HH temperature value |
cparata | 0:c761bc6186e8 | 441 | * @param value pointer where the temperature value is written |
cparata | 0:c761bc6186e8 | 442 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 443 | */ |
cparata | 0:c761bc6186e8 | 444 | int LPS22HHSensor::get_temperature(float *value) |
cparata | 0:c761bc6186e8 | 445 | { |
cparata | 1:978cae936ddb | 446 | axis1bit16_t data_raw_temperature; |
cparata | 0:c761bc6186e8 | 447 | |
cparata | 1:978cae936ddb | 448 | (void)memset(data_raw_temperature.u8bit, 0x00, sizeof(int16_t)); |
cparata | 1:978cae936ddb | 449 | if (lps22hh_temperature_raw_get(&_reg_ctx, data_raw_temperature.u8bit) != 0) { |
cparata | 1:978cae936ddb | 450 | return 1; |
cparata | 1:978cae936ddb | 451 | } |
cparata | 0:c761bc6186e8 | 452 | |
cparata | 1:978cae936ddb | 453 | *value = LPS22HH_FROM_LSB_TO_degC((float)(data_raw_temperature.i16bit)); |
cparata | 0:c761bc6186e8 | 454 | |
cparata | 1:978cae936ddb | 455 | return 0; |
cparata | 0:c761bc6186e8 | 456 | } |
cparata | 0:c761bc6186e8 | 457 | |
cparata | 0:c761bc6186e8 | 458 | /** |
cparata | 0:c761bc6186e8 | 459 | * @brief Get the LPS22HH temperature data ready bit value |
cparata | 0:c761bc6186e8 | 460 | * @param status the status of data ready bit |
cparata | 0:c761bc6186e8 | 461 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 462 | */ |
cparata | 0:c761bc6186e8 | 463 | int LPS22HHSensor::get_temp_drdy_status(uint8_t *status) |
cparata | 0:c761bc6186e8 | 464 | { |
cparata | 1:978cae936ddb | 465 | if (lps22hh_temp_flag_data_ready_get(&_reg_ctx, status) != 0) { |
cparata | 1:978cae936ddb | 466 | return 1; |
cparata | 1:978cae936ddb | 467 | } |
cparata | 0:c761bc6186e8 | 468 | |
cparata | 1:978cae936ddb | 469 | return 0; |
cparata | 0:c761bc6186e8 | 470 | } |
cparata | 0:c761bc6186e8 | 471 | |
cparata | 0:c761bc6186e8 | 472 | /** |
cparata | 0:c761bc6186e8 | 473 | * @brief Get the LPS22HH register value |
cparata | 0:c761bc6186e8 | 474 | * @param reg address to be written |
cparata | 0:c761bc6186e8 | 475 | * @param data value to be written |
cparata | 0:c761bc6186e8 | 476 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 477 | */ |
cparata | 0:c761bc6186e8 | 478 | int LPS22HHSensor::read_reg(uint8_t reg, uint8_t *data) |
cparata | 0:c761bc6186e8 | 479 | { |
cparata | 1:978cae936ddb | 480 | if (lps22hh_read_reg(&_reg_ctx, reg, data, 1) != 0) { |
cparata | 1:978cae936ddb | 481 | return 1; |
cparata | 1:978cae936ddb | 482 | } |
cparata | 0:c761bc6186e8 | 483 | |
cparata | 1:978cae936ddb | 484 | return 0; |
cparata | 0:c761bc6186e8 | 485 | } |
cparata | 0:c761bc6186e8 | 486 | |
cparata | 0:c761bc6186e8 | 487 | /** |
cparata | 0:c761bc6186e8 | 488 | * @brief Set the LPS22HH register value |
cparata | 0:c761bc6186e8 | 489 | * @param reg address to be written |
cparata | 0:c761bc6186e8 | 490 | * @param data value to be written |
cparata | 0:c761bc6186e8 | 491 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 492 | */ |
cparata | 0:c761bc6186e8 | 493 | int LPS22HHSensor::write_reg(uint8_t reg, uint8_t data) |
cparata | 0:c761bc6186e8 | 494 | { |
cparata | 1:978cae936ddb | 495 | if (lps22hh_write_reg(&_reg_ctx, reg, &data, 1) != 0) { |
cparata | 1:978cae936ddb | 496 | return 1; |
cparata | 1:978cae936ddb | 497 | } |
cparata | 0:c761bc6186e8 | 498 | |
cparata | 1:978cae936ddb | 499 | return 0; |
cparata | 0:c761bc6186e8 | 500 | } |
cparata | 0:c761bc6186e8 | 501 | |
cparata | 0:c761bc6186e8 | 502 | /** |
cparata | 0:c761bc6186e8 | 503 | * @brief Get the LPS22HH FIFO data |
cparata | 0:c761bc6186e8 | 504 | * @param press the pointer where FIFO pressure value is stored |
cparata | 0:c761bc6186e8 | 505 | * @param temp the pointer where FIFO temperature value is stored |
cparata | 0:c761bc6186e8 | 506 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 507 | */ |
cparata | 0:c761bc6186e8 | 508 | int LPS22HHSensor::get_fifo_data(float *press, float *temp) |
cparata | 0:c761bc6186e8 | 509 | { |
cparata | 1:978cae936ddb | 510 | axis1bit32_t data_raw_pressure; |
cparata | 1:978cae936ddb | 511 | axis1bit16_t data_raw_temperature; |
cparata | 0:c761bc6186e8 | 512 | |
cparata | 1:978cae936ddb | 513 | (void)memset(data_raw_pressure.u8bit, 0x00, sizeof(int32_t)); |
cparata | 1:978cae936ddb | 514 | if (lps22hh_fifo_pressure_raw_get(&_reg_ctx, data_raw_pressure.u8bit) != 0) { |
cparata | 1:978cae936ddb | 515 | return 1; |
cparata | 1:978cae936ddb | 516 | } |
cparata | 0:c761bc6186e8 | 517 | |
cparata | 1:978cae936ddb | 518 | *press = LPS22HH_FROM_LSB_TO_hPa((float)(data_raw_pressure.i32bit)); |
cparata | 0:c761bc6186e8 | 519 | |
cparata | 1:978cae936ddb | 520 | (void)memset(data_raw_temperature.u8bit, 0x00, sizeof(int16_t)); |
cparata | 1:978cae936ddb | 521 | if (lps22hh_fifo_temperature_raw_get(&_reg_ctx, data_raw_temperature.u8bit) != 0) { |
cparata | 1:978cae936ddb | 522 | return 1; |
cparata | 1:978cae936ddb | 523 | } |
cparata | 0:c761bc6186e8 | 524 | |
cparata | 1:978cae936ddb | 525 | *temp = LPS22HH_FROM_LSB_TO_degC((float)(data_raw_temperature.i16bit)); |
cparata | 0:c761bc6186e8 | 526 | |
cparata | 1:978cae936ddb | 527 | return 0; |
cparata | 0:c761bc6186e8 | 528 | } |
cparata | 0:c761bc6186e8 | 529 | |
cparata | 0:c761bc6186e8 | 530 | /** |
cparata | 0:c761bc6186e8 | 531 | * @brief Get the LPS22HH FIFO threshold |
cparata | 0:c761bc6186e8 | 532 | * @param status the status of FIFO threshold |
cparata | 0:c761bc6186e8 | 533 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 534 | */ |
cparata | 0:c761bc6186e8 | 535 | int LPS22HHSensor::get_fifo_fth_status(uint8_t *status) |
cparata | 0:c761bc6186e8 | 536 | { |
cparata | 1:978cae936ddb | 537 | if (lps22hh_fifo_wtm_flag_get(&_reg_ctx, status) != 0) { |
cparata | 1:978cae936ddb | 538 | return 1; |
cparata | 1:978cae936ddb | 539 | } |
cparata | 0:c761bc6186e8 | 540 | |
cparata | 1:978cae936ddb | 541 | return 0; |
cparata | 0:c761bc6186e8 | 542 | } |
cparata | 0:c761bc6186e8 | 543 | |
cparata | 0:c761bc6186e8 | 544 | /** |
cparata | 0:c761bc6186e8 | 545 | * @brief Get the LPS22HH FIFO full status |
cparata | 0:c761bc6186e8 | 546 | * @param status the status of FIFO full status |
cparata | 0:c761bc6186e8 | 547 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 548 | */ |
cparata | 0:c761bc6186e8 | 549 | int LPS22HHSensor::get_fifo_full_status(uint8_t *status) |
cparata | 0:c761bc6186e8 | 550 | { |
cparata | 1:978cae936ddb | 551 | if (lps22hh_fifo_full_flag_get(&_reg_ctx, status) != 0) { |
cparata | 1:978cae936ddb | 552 | return 1; |
cparata | 1:978cae936ddb | 553 | } |
cparata | 0:c761bc6186e8 | 554 | |
cparata | 1:978cae936ddb | 555 | return 0; |
cparata | 0:c761bc6186e8 | 556 | } |
cparata | 0:c761bc6186e8 | 557 | |
cparata | 0:c761bc6186e8 | 558 | /** |
cparata | 0:c761bc6186e8 | 559 | * @brief Get the LPS22HH FIFO OVR status |
cparata | 0:c761bc6186e8 | 560 | * @param status the status of FIFO OVR status |
cparata | 0:c761bc6186e8 | 561 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 562 | */ |
cparata | 0:c761bc6186e8 | 563 | int LPS22HHSensor::get_fifo_ovr_status(uint8_t *status) |
cparata | 0:c761bc6186e8 | 564 | { |
cparata | 1:978cae936ddb | 565 | if (lps22hh_fifo_ovr_flag_get(&_reg_ctx, status) != 0) { |
cparata | 1:978cae936ddb | 566 | return 1; |
cparata | 1:978cae936ddb | 567 | } |
cparata | 0:c761bc6186e8 | 568 | |
cparata | 1:978cae936ddb | 569 | return 0; |
cparata | 0:c761bc6186e8 | 570 | } |
cparata | 0:c761bc6186e8 | 571 | |
cparata | 0:c761bc6186e8 | 572 | /** |
cparata | 0:c761bc6186e8 | 573 | * @brief Get the LPS22HH FIFO data level |
cparata | 0:c761bc6186e8 | 574 | * @param status the status of FIFO data level |
cparata | 0:c761bc6186e8 | 575 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 576 | */ |
cparata | 0:c761bc6186e8 | 577 | int LPS22HHSensor::get_fifo_level(uint8_t *status) |
cparata | 0:c761bc6186e8 | 578 | { |
cparata | 1:978cae936ddb | 579 | if (lps22hh_fifo_data_level_get(&_reg_ctx, status) != 0) { |
cparata | 1:978cae936ddb | 580 | return 1; |
cparata | 1:978cae936ddb | 581 | } |
cparata | 0:c761bc6186e8 | 582 | |
cparata | 1:978cae936ddb | 583 | return 0; |
cparata | 0:c761bc6186e8 | 584 | } |
cparata | 0:c761bc6186e8 | 585 | |
cparata | 0:c761bc6186e8 | 586 | /** |
cparata | 0:c761bc6186e8 | 587 | * @brief Reset the FIFO interrupt |
cparata | 0:c761bc6186e8 | 588 | * @param interrupt The FIFO interrupt to be reset; values: 0 = FTH; 1 = FULL; 2 = OVR |
cparata | 0:c761bc6186e8 | 589 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 590 | */ |
cparata | 0:c761bc6186e8 | 591 | int LPS22HHSensor::reset_fifo_interrupt(uint8_t interrupt) |
cparata | 0:c761bc6186e8 | 592 | { |
cparata | 1:978cae936ddb | 593 | switch (interrupt) { |
cparata | 1:978cae936ddb | 594 | case 0: |
cparata | 1:978cae936ddb | 595 | if (lps22hh_fifo_threshold_on_int_set(&_reg_ctx, PROPERTY_DISABLE) != 0) { |
cparata | 1:978cae936ddb | 596 | return 1; |
cparata | 1:978cae936ddb | 597 | } |
cparata | 1:978cae936ddb | 598 | break; |
cparata | 1:978cae936ddb | 599 | case 1: |
cparata | 1:978cae936ddb | 600 | if (lps22hh_fifo_full_on_int_set(&_reg_ctx, PROPERTY_DISABLE) != 0) { |
cparata | 1:978cae936ddb | 601 | return 1; |
cparata | 1:978cae936ddb | 602 | } |
cparata | 1:978cae936ddb | 603 | break; |
cparata | 1:978cae936ddb | 604 | case 2: |
cparata | 1:978cae936ddb | 605 | if (lps22hh_fifo_ovr_on_int_set(&_reg_ctx, PROPERTY_DISABLE) != 0) { |
cparata | 1:978cae936ddb | 606 | return 1; |
cparata | 1:978cae936ddb | 607 | } |
cparata | 1:978cae936ddb | 608 | break; |
cparata | 1:978cae936ddb | 609 | default: |
cparata | 1:978cae936ddb | 610 | return 1; |
cparata | 1:978cae936ddb | 611 | } |
cparata | 0:c761bc6186e8 | 612 | |
cparata | 1:978cae936ddb | 613 | return 0; |
cparata | 0:c761bc6186e8 | 614 | } |
cparata | 0:c761bc6186e8 | 615 | |
cparata | 0:c761bc6186e8 | 616 | /** |
cparata | 0:c761bc6186e8 | 617 | * @brief Set the FIFO interrupt |
cparata | 0:c761bc6186e8 | 618 | * @param interrupt The FIFO interrupt to be set; values: 0 = FTH; 1 = FULL; 2 = OVR |
cparata | 0:c761bc6186e8 | 619 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 620 | */ |
cparata | 0:c761bc6186e8 | 621 | int LPS22HHSensor::set_fifo_interrupt(uint8_t interrupt) |
cparata | 0:c761bc6186e8 | 622 | { |
cparata | 1:978cae936ddb | 623 | switch (interrupt) { |
cparata | 1:978cae936ddb | 624 | case 0: |
cparata | 1:978cae936ddb | 625 | if (lps22hh_fifo_threshold_on_int_set(&_reg_ctx, PROPERTY_ENABLE) != 0) { |
cparata | 1:978cae936ddb | 626 | return 1; |
cparata | 1:978cae936ddb | 627 | } |
cparata | 1:978cae936ddb | 628 | break; |
cparata | 1:978cae936ddb | 629 | case 1: |
cparata | 1:978cae936ddb | 630 | if (lps22hh_fifo_full_on_int_set(&_reg_ctx, PROPERTY_ENABLE) != 0) { |
cparata | 1:978cae936ddb | 631 | return 1; |
cparata | 1:978cae936ddb | 632 | } |
cparata | 1:978cae936ddb | 633 | break; |
cparata | 1:978cae936ddb | 634 | case 2: |
cparata | 1:978cae936ddb | 635 | if (lps22hh_fifo_ovr_on_int_set(&_reg_ctx, PROPERTY_ENABLE) != 0) { |
cparata | 1:978cae936ddb | 636 | return 1; |
cparata | 1:978cae936ddb | 637 | } |
cparata | 1:978cae936ddb | 638 | break; |
cparata | 1:978cae936ddb | 639 | default: |
cparata | 1:978cae936ddb | 640 | return 1; |
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 | /** |
cparata | 0:c761bc6186e8 | 647 | * @brief Set the FIFO mode |
cparata | 0:c761bc6186e8 | 648 | * @param Mode the FIFO mode to be set |
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_fifo_mode(uint8_t mode) |
cparata | 0:c761bc6186e8 | 652 | { |
cparata | 1:978cae936ddb | 653 | /* Verify that the passed parameter contains one of the valid values */ |
cparata | 1:978cae936ddb | 654 | switch ((lps22hh_f_mode_t)mode) { |
cparata | 1:978cae936ddb | 655 | case LPS22HH_BYPASS_MODE: |
cparata | 1:978cae936ddb | 656 | case LPS22HH_FIFO_MODE: |
cparata | 1:978cae936ddb | 657 | case LPS22HH_STREAM_MODE: |
cparata | 1:978cae936ddb | 658 | case LPS22HH_STREAM_TO_FIFO_MODE: |
cparata | 1:978cae936ddb | 659 | case LPS22HH_BYPASS_TO_STREAM_MODE: |
cparata | 1:978cae936ddb | 660 | case LPS22HH_BYPASS_TO_FIFO_MODE: |
cparata | 1:978cae936ddb | 661 | break; |
cparata | 1:978cae936ddb | 662 | default: |
cparata | 1:978cae936ddb | 663 | return 1; |
cparata | 1:978cae936ddb | 664 | } |
cparata | 0:c761bc6186e8 | 665 | |
cparata | 1:978cae936ddb | 666 | if (lps22hh_fifo_mode_set(&_reg_ctx, (lps22hh_f_mode_t)mode) != 0) { |
cparata | 1:978cae936ddb | 667 | return 1; |
cparata | 1:978cae936ddb | 668 | } |
cparata | 0:c761bc6186e8 | 669 | |
cparata | 1:978cae936ddb | 670 | return 0; |
cparata | 0:c761bc6186e8 | 671 | } |
cparata | 0:c761bc6186e8 | 672 | |
cparata | 0:c761bc6186e8 | 673 | /** |
cparata | 0:c761bc6186e8 | 674 | * @brief Set the LPS22HH FIFO watermark level |
cparata | 0:c761bc6186e8 | 675 | * @param watermark the FIFO watermark level to be set |
cparata | 0:c761bc6186e8 | 676 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 677 | */ |
cparata | 0:c761bc6186e8 | 678 | int LPS22HHSensor::set_fifo_watermark_level(uint8_t watermark) |
cparata | 0:c761bc6186e8 | 679 | { |
cparata | 1:978cae936ddb | 680 | if (lps22hh_fifo_watermark_set(&_reg_ctx, watermark) != 0) { |
cparata | 1:978cae936ddb | 681 | return 1; |
cparata | 1:978cae936ddb | 682 | } |
cparata | 0:c761bc6186e8 | 683 | |
cparata | 1:978cae936ddb | 684 | return 0; |
cparata | 0:c761bc6186e8 | 685 | } |
cparata | 0:c761bc6186e8 | 686 | |
cparata | 0:c761bc6186e8 | 687 | /** |
cparata | 0:c761bc6186e8 | 688 | * @brief Set the LPS22HH stop on watermark function |
cparata | 0:c761bc6186e8 | 689 | * @param stop the state of stop on watermark function |
cparata | 0:c761bc6186e8 | 690 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 691 | */ |
cparata | 0:c761bc6186e8 | 692 | int LPS22HHSensor::stop_fifo_on_watermark(uint8_t stop) |
cparata | 0:c761bc6186e8 | 693 | { |
cparata | 1:978cae936ddb | 694 | if (lps22hh_fifo_stop_on_wtm_set(&_reg_ctx, stop) != 0) { |
cparata | 1:978cae936ddb | 695 | return 1; |
cparata | 1:978cae936ddb | 696 | } |
cparata | 0:c761bc6186e8 | 697 | |
cparata | 1:978cae936ddb | 698 | return 0; |
cparata | 0:c761bc6186e8 | 699 | } |
cparata | 0:c761bc6186e8 | 700 | |
cparata | 0:c761bc6186e8 | 701 | /** |
cparata | 0:c761bc6186e8 | 702 | * @brief Set the LPS22HH One Shot Mode |
cparata | 0:c761bc6186e8 | 703 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 704 | */ |
cparata | 0:c761bc6186e8 | 705 | int LPS22HHSensor::set_one_shot() |
cparata | 0:c761bc6186e8 | 706 | { |
cparata | 1:978cae936ddb | 707 | /* Start One Shot Measurement */ |
cparata | 1:978cae936ddb | 708 | if (lps22hh_data_rate_set(&_reg_ctx, LPS22HH_ONE_SHOOT) != 0) { |
cparata | 1:978cae936ddb | 709 | return 1; |
cparata | 1:978cae936ddb | 710 | } |
cparata | 0:c761bc6186e8 | 711 | |
cparata | 1:978cae936ddb | 712 | return 0; |
cparata | 0:c761bc6186e8 | 713 | } |
cparata | 0:c761bc6186e8 | 714 | |
cparata | 0:c761bc6186e8 | 715 | /** |
cparata | 0:c761bc6186e8 | 716 | * @brief Get the LPS22HH One Shot Status |
cparata | 0:c761bc6186e8 | 717 | * @param status pointer to the one shot status (1 means measurements available, 0 means measurements not available yet) |
cparata | 0:c761bc6186e8 | 718 | * @retval 0 in case of success, an error code otherwise |
cparata | 0:c761bc6186e8 | 719 | */ |
cparata | 0:c761bc6186e8 | 720 | int LPS22HHSensor::get_one_shot_status(uint8_t *status) |
cparata | 0:c761bc6186e8 | 721 | { |
cparata | 1:978cae936ddb | 722 | uint8_t p_da; |
cparata | 1:978cae936ddb | 723 | uint8_t t_da; |
cparata | 0:c761bc6186e8 | 724 | |
cparata | 1:978cae936ddb | 725 | /* Get DataReady for pressure */ |
cparata | 1:978cae936ddb | 726 | if (lps22hh_press_flag_data_ready_get(&_reg_ctx, &p_da) != 0) { |
cparata | 1:978cae936ddb | 727 | return 1; |
cparata | 1:978cae936ddb | 728 | } |
cparata | 0:c761bc6186e8 | 729 | |
cparata | 1:978cae936ddb | 730 | /* Get DataReady for temperature */ |
cparata | 1:978cae936ddb | 731 | if (lps22hh_temp_flag_data_ready_get(&_reg_ctx, &t_da) != 0) { |
cparata | 1:978cae936ddb | 732 | return 1; |
cparata | 1:978cae936ddb | 733 | } |
cparata | 0:c761bc6186e8 | 734 | |
cparata | 1:978cae936ddb | 735 | if (p_da && t_da) { |
cparata | 1:978cae936ddb | 736 | *status = 1; |
cparata | 1:978cae936ddb | 737 | } else { |
cparata | 1:978cae936ddb | 738 | *status = 0; |
cparata | 1:978cae936ddb | 739 | } |
cparata | 0:c761bc6186e8 | 740 | |
cparata | 1:978cae936ddb | 741 | return 0; |
cparata | 0:c761bc6186e8 | 742 | } |
cparata | 0:c761bc6186e8 | 743 | |
cparata | 0:c761bc6186e8 | 744 | int32_t LPS22HH_io_write(void *handle, uint8_t WriteAddr, uint8_t *pBuffer, uint16_t nBytesToWrite) |
cparata | 0:c761bc6186e8 | 745 | { |
cparata | 1:978cae936ddb | 746 | return ((LPS22HHSensor *)handle)->io_write(pBuffer, WriteAddr, nBytesToWrite); |
cparata | 0:c761bc6186e8 | 747 | } |
cparata | 0:c761bc6186e8 | 748 | |
cparata | 0:c761bc6186e8 | 749 | int32_t LPS22HH_io_read(void *handle, uint8_t ReadAddr, uint8_t *pBuffer, uint16_t nBytesToRead) |
cparata | 0:c761bc6186e8 | 750 | { |
cparata | 1:978cae936ddb | 751 | return ((LPS22HHSensor *)handle)->io_read(pBuffer, ReadAddr, nBytesToRead); |
cparata | 0:c761bc6186e8 | 752 | } |