Low power gas, pressure, temperature and humidity sensor
Dependents: MERGE Sensor_iAQ_sgp30_bme_si7051 POCBreath_V2_smd_commercial
bme680_defs.h@3:8aefe9304f85, 2018-07-23 (annotated)
- Committer:
- mcm
- Date:
- Mon Jul 23 11:41:39 2018 +0000
- Revision:
- 3:8aefe9304f85
- Parent:
- 2:090496028eb9
An example that shows how to use this driver was added into the header file.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mcm | 0:0180d9905fe5 | 1 | /** |
mcm | 1:4d60db802cfb | 2 | * @brief bme680_defs.h |
mcm | 1:4d60db802cfb | 3 | * @details Low power gas, pressure, temperature & humidity sensor. |
mcm | 1:4d60db802cfb | 4 | * Header file. |
mcm | 1:4d60db802cfb | 5 | * |
mcm | 1:4d60db802cfb | 6 | * |
mcm | 1:4d60db802cfb | 7 | * @return N/A |
mcm | 1:4d60db802cfb | 8 | * |
mcm | 1:4d60db802cfb | 9 | * @author Manuel Caballero |
mcm | 1:4d60db802cfb | 10 | * @date 21/July/2018 |
mcm | 1:4d60db802cfb | 11 | * @version 21/July/2018 The ORIGIN |
mcm | 1:4d60db802cfb | 12 | * @pre This is just a port from Bosh driver to mBed ( c++ ) |
mcm | 1:4d60db802cfb | 13 | * @warning N/A |
mcm | 1:4d60db802cfb | 14 | * @pre This code belongs to Nimbus Centre ( http://www.nimbus.cit.ie ). |
mcm | 1:4d60db802cfb | 15 | */ |
mcm | 1:4d60db802cfb | 16 | /** |
mcm | 0:0180d9905fe5 | 17 | * Copyright (C) 2017 - 2018 Bosch Sensortec GmbH |
mcm | 0:0180d9905fe5 | 18 | * |
mcm | 0:0180d9905fe5 | 19 | * Redistribution and use in source and binary forms, with or without |
mcm | 0:0180d9905fe5 | 20 | * modification, are permitted provided that the following conditions are met: |
mcm | 0:0180d9905fe5 | 21 | * |
mcm | 0:0180d9905fe5 | 22 | * Redistributions of source code must retain the above copyright |
mcm | 0:0180d9905fe5 | 23 | * notice, this list of conditions and the following disclaimer. |
mcm | 0:0180d9905fe5 | 24 | * |
mcm | 0:0180d9905fe5 | 25 | * Redistributions in binary form must reproduce the above copyright |
mcm | 0:0180d9905fe5 | 26 | * notice, this list of conditions and the following disclaimer in the |
mcm | 0:0180d9905fe5 | 27 | * documentation and/or other materials provided with the distribution. |
mcm | 0:0180d9905fe5 | 28 | * |
mcm | 0:0180d9905fe5 | 29 | * Neither the name of the copyright holder nor the names of the |
mcm | 0:0180d9905fe5 | 30 | * contributors may be used to endorse or promote products derived from |
mcm | 0:0180d9905fe5 | 31 | * this software without specific prior written permission. |
mcm | 0:0180d9905fe5 | 32 | * |
mcm | 0:0180d9905fe5 | 33 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND |
mcm | 0:0180d9905fe5 | 34 | * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR |
mcm | 0:0180d9905fe5 | 35 | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
mcm | 0:0180d9905fe5 | 36 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
mcm | 0:0180d9905fe5 | 37 | * DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER |
mcm | 0:0180d9905fe5 | 38 | * OR CONTRIBUTORS BE LIABLE FOR ANY |
mcm | 0:0180d9905fe5 | 39 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, |
mcm | 0:0180d9905fe5 | 40 | * OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, |
mcm | 0:0180d9905fe5 | 41 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
mcm | 0:0180d9905fe5 | 42 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
mcm | 0:0180d9905fe5 | 43 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
mcm | 0:0180d9905fe5 | 44 | * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
mcm | 0:0180d9905fe5 | 45 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
mcm | 0:0180d9905fe5 | 46 | * ANY WAY OUT OF THE USE OF THIS |
mcm | 0:0180d9905fe5 | 47 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE |
mcm | 0:0180d9905fe5 | 48 | * |
mcm | 0:0180d9905fe5 | 49 | * The information provided is believed to be accurate and reliable. |
mcm | 0:0180d9905fe5 | 50 | * The copyright holder assumes no responsibility |
mcm | 0:0180d9905fe5 | 51 | * for the consequences of use |
mcm | 0:0180d9905fe5 | 52 | * of such information nor for any infringement of patents or |
mcm | 0:0180d9905fe5 | 53 | * other rights of third parties which may result from its use. |
mcm | 0:0180d9905fe5 | 54 | * No license is granted by implication or otherwise under any patent or |
mcm | 0:0180d9905fe5 | 55 | * patent rights of the copyright holder. |
mcm | 0:0180d9905fe5 | 56 | * |
mcm | 0:0180d9905fe5 | 57 | * @file bme680_defs.h |
mcm | 0:0180d9905fe5 | 58 | * @date 19 Jun 2018 |
mcm | 0:0180d9905fe5 | 59 | * @version 3.5.9 |
mcm | 0:0180d9905fe5 | 60 | * @brief |
mcm | 0:0180d9905fe5 | 61 | * |
mcm | 0:0180d9905fe5 | 62 | */ |
mcm | 0:0180d9905fe5 | 63 | |
mcm | 0:0180d9905fe5 | 64 | /*! @file bme680_defs.h |
mcm | 0:0180d9905fe5 | 65 | @brief Sensor driver for BME680 sensor */ |
mcm | 0:0180d9905fe5 | 66 | /*! |
mcm | 0:0180d9905fe5 | 67 | * @defgroup BME680 SENSOR API |
mcm | 0:0180d9905fe5 | 68 | * @brief |
mcm | 0:0180d9905fe5 | 69 | * @{*/ |
mcm | 0:0180d9905fe5 | 70 | #ifndef BME680_DEFS_H_ |
mcm | 0:0180d9905fe5 | 71 | #define BME680_DEFS_H_ |
mcm | 0:0180d9905fe5 | 72 | |
mcm | 0:0180d9905fe5 | 73 | /********************************************************/ |
mcm | 0:0180d9905fe5 | 74 | /* header includes */ |
mcm | 0:0180d9905fe5 | 75 | #ifdef __KERNEL__ |
mcm | 0:0180d9905fe5 | 76 | #include <linux/types.h> |
mcm | 0:0180d9905fe5 | 77 | #include <linux/kernel.h> |
mcm | 0:0180d9905fe5 | 78 | #else |
mcm | 0:0180d9905fe5 | 79 | #include <stdint.h> |
mcm | 0:0180d9905fe5 | 80 | #include <stddef.h> |
mcm | 0:0180d9905fe5 | 81 | #endif |
mcm | 0:0180d9905fe5 | 82 | |
mcm | 0:0180d9905fe5 | 83 | /******************************************************************************/ |
mcm | 0:0180d9905fe5 | 84 | /*! @name Common macros */ |
mcm | 0:0180d9905fe5 | 85 | /******************************************************************************/ |
mcm | 2:090496028eb9 | 86 | /* [MANUEL] Compatible with mBed |
mcm | 0:0180d9905fe5 | 87 | #if !defined(UINT8_C) && !defined(INT8_C) |
mcm | 0:0180d9905fe5 | 88 | #define INT8_C(x) S8_C(x) |
mcm | 0:0180d9905fe5 | 89 | #define UINT8_C(x) U8_C(x) |
mcm | 0:0180d9905fe5 | 90 | #endif |
mcm | 0:0180d9905fe5 | 91 | |
mcm | 0:0180d9905fe5 | 92 | #if !defined(UINT16_C) && !defined(INT16_C) |
mcm | 0:0180d9905fe5 | 93 | #define INT16_C(x) S16_C(x) |
mcm | 0:0180d9905fe5 | 94 | #define UINT16_C(x) U16_C(x) |
mcm | 0:0180d9905fe5 | 95 | #endif |
mcm | 0:0180d9905fe5 | 96 | |
mcm | 0:0180d9905fe5 | 97 | #if !defined(INT32_C) && !defined(UINT32_C) |
mcm | 0:0180d9905fe5 | 98 | #define INT32_C(x) S32_C(x) |
mcm | 0:0180d9905fe5 | 99 | #define UINT32_C(x) U32_C(x) |
mcm | 0:0180d9905fe5 | 100 | #endif |
mcm | 0:0180d9905fe5 | 101 | |
mcm | 0:0180d9905fe5 | 102 | #if !defined(INT64_C) && !defined(UINT64_C) |
mcm | 0:0180d9905fe5 | 103 | #define INT64_C(x) S64_C(x) |
mcm | 0:0180d9905fe5 | 104 | #define UINT64_C(x) U64_C(x) |
mcm | 0:0180d9905fe5 | 105 | #endif |
mcm | 1:4d60db802cfb | 106 | */ |
mcm | 1:4d60db802cfb | 107 | |
mcm | 1:4d60db802cfb | 108 | #if !defined(UINT8_C) && !defined(INT8_C) |
mcm | 1:4d60db802cfb | 109 | #define INT8_C(x) int8_t(x) |
mcm | 1:4d60db802cfb | 110 | #define UINT8_C(x) uint8_t(x) |
mcm | 1:4d60db802cfb | 111 | #endif |
mcm | 1:4d60db802cfb | 112 | |
mcm | 1:4d60db802cfb | 113 | #if !defined(UINT16_C) && !defined(INT16_C) |
mcm | 1:4d60db802cfb | 114 | #define INT16_C(x) int16_t(x) |
mcm | 1:4d60db802cfb | 115 | #define UINT16_C(x) uint16_t(x) |
mcm | 1:4d60db802cfb | 116 | #endif |
mcm | 1:4d60db802cfb | 117 | |
mcm | 1:4d60db802cfb | 118 | #if !defined(INT32_C) && !defined(UINT32_C) |
mcm | 1:4d60db802cfb | 119 | #define INT32_C(x) int32_t(x) |
mcm | 1:4d60db802cfb | 120 | #define UINT32_C(x) uint32_t(x) |
mcm | 1:4d60db802cfb | 121 | #endif |
mcm | 1:4d60db802cfb | 122 | |
mcm | 1:4d60db802cfb | 123 | #if !defined(INT64_C) && !defined(UINT64_C) |
mcm | 1:4d60db802cfb | 124 | #define INT64_C(x) int64_t(x) |
mcm | 1:4d60db802cfb | 125 | #define UINT64_C(x) uint64_t(x) |
mcm | 1:4d60db802cfb | 126 | #endif |
mcm | 1:4d60db802cfb | 127 | |
mcm | 0:0180d9905fe5 | 128 | |
mcm | 0:0180d9905fe5 | 129 | /**@}*/ |
mcm | 0:0180d9905fe5 | 130 | |
mcm | 0:0180d9905fe5 | 131 | /**\name C standard macros */ |
mcm | 0:0180d9905fe5 | 132 | #ifndef NULL |
mcm | 0:0180d9905fe5 | 133 | #ifdef __cplusplus |
mcm | 0:0180d9905fe5 | 134 | #define NULL 0 |
mcm | 0:0180d9905fe5 | 135 | #else |
mcm | 0:0180d9905fe5 | 136 | #define NULL ((void *) 0) |
mcm | 0:0180d9905fe5 | 137 | #endif |
mcm | 0:0180d9905fe5 | 138 | #endif |
mcm | 0:0180d9905fe5 | 139 | |
mcm | 0:0180d9905fe5 | 140 | /** BME680 configuration macros */ |
mcm | 0:0180d9905fe5 | 141 | /** Enable or un-comment the macro to provide floating point data output */ |
mcm | 0:0180d9905fe5 | 142 | #ifndef BME680_FLOAT_POINT_COMPENSATION |
mcm | 0:0180d9905fe5 | 143 | /* #define BME680_FLOAT_POINT_COMPENSATION */ |
mcm | 0:0180d9905fe5 | 144 | #endif |
mcm | 0:0180d9905fe5 | 145 | |
mcm | 0:0180d9905fe5 | 146 | /** BME680 General config */ |
mcm | 0:0180d9905fe5 | 147 | #define BME680_POLL_PERIOD_MS UINT8_C(10) |
mcm | 0:0180d9905fe5 | 148 | |
mcm | 0:0180d9905fe5 | 149 | /** BME680 I2C addresses */ |
mcm | 2:090496028eb9 | 150 | #define BME680_I2C_ADDR_PRIMARY UINT8_C( ( 0x76 << 1 ) ) // [MANUEL] Address compatible with mBed |
mcm | 2:090496028eb9 | 151 | #define BME680_I2C_ADDR_SECONDARY UINT8_C( ( 0x77 << 1 ) ) // [MANUEL] Address compatible with mBed |
mcm | 0:0180d9905fe5 | 152 | |
mcm | 0:0180d9905fe5 | 153 | /** BME680 unique chip identifier */ |
mcm | 0:0180d9905fe5 | 154 | #define BME680_CHIP_ID UINT8_C(0x61) |
mcm | 0:0180d9905fe5 | 155 | |
mcm | 0:0180d9905fe5 | 156 | /** BME680 coefficients related defines */ |
mcm | 0:0180d9905fe5 | 157 | #define BME680_COEFF_SIZE UINT8_C(41) |
mcm | 0:0180d9905fe5 | 158 | #define BME680_COEFF_ADDR1_LEN UINT8_C(25) |
mcm | 0:0180d9905fe5 | 159 | #define BME680_COEFF_ADDR2_LEN UINT8_C(16) |
mcm | 0:0180d9905fe5 | 160 | |
mcm | 0:0180d9905fe5 | 161 | /** BME680 field_x related defines */ |
mcm | 0:0180d9905fe5 | 162 | #define BME680_FIELD_LENGTH UINT8_C(15) |
mcm | 0:0180d9905fe5 | 163 | #define BME680_FIELD_ADDR_OFFSET UINT8_C(17) |
mcm | 0:0180d9905fe5 | 164 | |
mcm | 0:0180d9905fe5 | 165 | /** Soft reset command */ |
mcm | 0:0180d9905fe5 | 166 | #define BME680_SOFT_RESET_CMD UINT8_C(0xb6) |
mcm | 0:0180d9905fe5 | 167 | |
mcm | 0:0180d9905fe5 | 168 | /** Error code definitions */ |
mcm | 0:0180d9905fe5 | 169 | #define BME680_OK INT8_C(0) |
mcm | 0:0180d9905fe5 | 170 | /* Errors */ |
mcm | 0:0180d9905fe5 | 171 | #define BME680_E_NULL_PTR INT8_C(-1) |
mcm | 0:0180d9905fe5 | 172 | #define BME680_E_COM_FAIL INT8_C(-2) |
mcm | 0:0180d9905fe5 | 173 | #define BME680_E_DEV_NOT_FOUND INT8_C(-3) |
mcm | 0:0180d9905fe5 | 174 | #define BME680_E_INVALID_LENGTH INT8_C(-4) |
mcm | 0:0180d9905fe5 | 175 | |
mcm | 0:0180d9905fe5 | 176 | /* Warnings */ |
mcm | 0:0180d9905fe5 | 177 | #define BME680_W_DEFINE_PWR_MODE INT8_C(1) |
mcm | 0:0180d9905fe5 | 178 | #define BME680_W_NO_NEW_DATA INT8_C(2) |
mcm | 0:0180d9905fe5 | 179 | |
mcm | 0:0180d9905fe5 | 180 | /* Info's */ |
mcm | 0:0180d9905fe5 | 181 | #define BME680_I_MIN_CORRECTION UINT8_C(1) |
mcm | 0:0180d9905fe5 | 182 | #define BME680_I_MAX_CORRECTION UINT8_C(2) |
mcm | 0:0180d9905fe5 | 183 | |
mcm | 0:0180d9905fe5 | 184 | /** Register map */ |
mcm | 0:0180d9905fe5 | 185 | /** Other coefficient's address */ |
mcm | 0:0180d9905fe5 | 186 | #define BME680_ADDR_RES_HEAT_VAL_ADDR UINT8_C(0x00) |
mcm | 0:0180d9905fe5 | 187 | #define BME680_ADDR_RES_HEAT_RANGE_ADDR UINT8_C(0x02) |
mcm | 0:0180d9905fe5 | 188 | #define BME680_ADDR_RANGE_SW_ERR_ADDR UINT8_C(0x04) |
mcm | 0:0180d9905fe5 | 189 | #define BME680_ADDR_SENS_CONF_START UINT8_C(0x5A) |
mcm | 0:0180d9905fe5 | 190 | #define BME680_ADDR_GAS_CONF_START UINT8_C(0x64) |
mcm | 0:0180d9905fe5 | 191 | |
mcm | 0:0180d9905fe5 | 192 | /** Field settings */ |
mcm | 0:0180d9905fe5 | 193 | #define BME680_FIELD0_ADDR UINT8_C(0x1d) |
mcm | 0:0180d9905fe5 | 194 | |
mcm | 0:0180d9905fe5 | 195 | /** Heater settings */ |
mcm | 0:0180d9905fe5 | 196 | #define BME680_RES_HEAT0_ADDR UINT8_C(0x5a) |
mcm | 0:0180d9905fe5 | 197 | #define BME680_GAS_WAIT0_ADDR UINT8_C(0x64) |
mcm | 0:0180d9905fe5 | 198 | |
mcm | 0:0180d9905fe5 | 199 | /** Sensor configuration registers */ |
mcm | 0:0180d9905fe5 | 200 | #define BME680_CONF_HEAT_CTRL_ADDR UINT8_C(0x70) |
mcm | 0:0180d9905fe5 | 201 | #define BME680_CONF_ODR_RUN_GAS_NBC_ADDR UINT8_C(0x71) |
mcm | 0:0180d9905fe5 | 202 | #define BME680_CONF_OS_H_ADDR UINT8_C(0x72) |
mcm | 0:0180d9905fe5 | 203 | #define BME680_MEM_PAGE_ADDR UINT8_C(0xf3) |
mcm | 0:0180d9905fe5 | 204 | #define BME680_CONF_T_P_MODE_ADDR UINT8_C(0x74) |
mcm | 0:0180d9905fe5 | 205 | #define BME680_CONF_ODR_FILT_ADDR UINT8_C(0x75) |
mcm | 0:0180d9905fe5 | 206 | |
mcm | 0:0180d9905fe5 | 207 | /** Coefficient's address */ |
mcm | 0:0180d9905fe5 | 208 | #define BME680_COEFF_ADDR1 UINT8_C(0x89) |
mcm | 0:0180d9905fe5 | 209 | #define BME680_COEFF_ADDR2 UINT8_C(0xe1) |
mcm | 0:0180d9905fe5 | 210 | |
mcm | 0:0180d9905fe5 | 211 | /** Chip identifier */ |
mcm | 0:0180d9905fe5 | 212 | #define BME680_CHIP_ID_ADDR UINT8_C(0xd0) |
mcm | 0:0180d9905fe5 | 213 | |
mcm | 0:0180d9905fe5 | 214 | /** Soft reset register */ |
mcm | 0:0180d9905fe5 | 215 | #define BME680_SOFT_RESET_ADDR UINT8_C(0xe0) |
mcm | 0:0180d9905fe5 | 216 | |
mcm | 0:0180d9905fe5 | 217 | /** Heater control settings */ |
mcm | 0:0180d9905fe5 | 218 | #define BME680_ENABLE_HEATER UINT8_C(0x00) |
mcm | 0:0180d9905fe5 | 219 | #define BME680_DISABLE_HEATER UINT8_C(0x08) |
mcm | 0:0180d9905fe5 | 220 | |
mcm | 0:0180d9905fe5 | 221 | /** Gas measurement settings */ |
mcm | 0:0180d9905fe5 | 222 | #define BME680_DISABLE_GAS_MEAS UINT8_C(0x00) |
mcm | 0:0180d9905fe5 | 223 | #define BME680_ENABLE_GAS_MEAS UINT8_C(0x01) |
mcm | 0:0180d9905fe5 | 224 | |
mcm | 0:0180d9905fe5 | 225 | /** Over-sampling settings */ |
mcm | 0:0180d9905fe5 | 226 | #define BME680_OS_NONE UINT8_C(0) |
mcm | 0:0180d9905fe5 | 227 | #define BME680_OS_1X UINT8_C(1) |
mcm | 0:0180d9905fe5 | 228 | #define BME680_OS_2X UINT8_C(2) |
mcm | 0:0180d9905fe5 | 229 | #define BME680_OS_4X UINT8_C(3) |
mcm | 0:0180d9905fe5 | 230 | #define BME680_OS_8X UINT8_C(4) |
mcm | 0:0180d9905fe5 | 231 | #define BME680_OS_16X UINT8_C(5) |
mcm | 0:0180d9905fe5 | 232 | |
mcm | 0:0180d9905fe5 | 233 | /** IIR filter settings */ |
mcm | 0:0180d9905fe5 | 234 | #define BME680_FILTER_SIZE_0 UINT8_C(0) |
mcm | 0:0180d9905fe5 | 235 | #define BME680_FILTER_SIZE_1 UINT8_C(1) |
mcm | 0:0180d9905fe5 | 236 | #define BME680_FILTER_SIZE_3 UINT8_C(2) |
mcm | 0:0180d9905fe5 | 237 | #define BME680_FILTER_SIZE_7 UINT8_C(3) |
mcm | 0:0180d9905fe5 | 238 | #define BME680_FILTER_SIZE_15 UINT8_C(4) |
mcm | 0:0180d9905fe5 | 239 | #define BME680_FILTER_SIZE_31 UINT8_C(5) |
mcm | 0:0180d9905fe5 | 240 | #define BME680_FILTER_SIZE_63 UINT8_C(6) |
mcm | 0:0180d9905fe5 | 241 | #define BME680_FILTER_SIZE_127 UINT8_C(7) |
mcm | 0:0180d9905fe5 | 242 | |
mcm | 0:0180d9905fe5 | 243 | /** Power mode settings */ |
mcm | 0:0180d9905fe5 | 244 | #define BME680_SLEEP_MODE UINT8_C(0) |
mcm | 0:0180d9905fe5 | 245 | #define BME680_FORCED_MODE UINT8_C(1) |
mcm | 0:0180d9905fe5 | 246 | |
mcm | 0:0180d9905fe5 | 247 | /** Delay related macro declaration */ |
mcm | 0:0180d9905fe5 | 248 | #define BME680_RESET_PERIOD UINT32_C(10) |
mcm | 0:0180d9905fe5 | 249 | |
mcm | 0:0180d9905fe5 | 250 | /** SPI memory page settings */ |
mcm | 0:0180d9905fe5 | 251 | #define BME680_MEM_PAGE0 UINT8_C(0x10) |
mcm | 0:0180d9905fe5 | 252 | #define BME680_MEM_PAGE1 UINT8_C(0x00) |
mcm | 0:0180d9905fe5 | 253 | |
mcm | 0:0180d9905fe5 | 254 | /** Ambient humidity shift value for compensation */ |
mcm | 0:0180d9905fe5 | 255 | #define BME680_HUM_REG_SHIFT_VAL UINT8_C(4) |
mcm | 0:0180d9905fe5 | 256 | |
mcm | 0:0180d9905fe5 | 257 | /** Run gas enable and disable settings */ |
mcm | 0:0180d9905fe5 | 258 | #define BME680_RUN_GAS_DISABLE UINT8_C(0) |
mcm | 0:0180d9905fe5 | 259 | #define BME680_RUN_GAS_ENABLE UINT8_C(1) |
mcm | 0:0180d9905fe5 | 260 | |
mcm | 0:0180d9905fe5 | 261 | /** Buffer length macro declaration */ |
mcm | 0:0180d9905fe5 | 262 | #define BME680_TMP_BUFFER_LENGTH UINT8_C(40) |
mcm | 0:0180d9905fe5 | 263 | #define BME680_REG_BUFFER_LENGTH UINT8_C(6) |
mcm | 0:0180d9905fe5 | 264 | #define BME680_FIELD_DATA_LENGTH UINT8_C(3) |
mcm | 0:0180d9905fe5 | 265 | #define BME680_GAS_REG_BUF_LENGTH UINT8_C(20) |
mcm | 0:0180d9905fe5 | 266 | |
mcm | 0:0180d9905fe5 | 267 | /** Settings selector */ |
mcm | 0:0180d9905fe5 | 268 | #define BME680_OST_SEL UINT16_C(1) |
mcm | 0:0180d9905fe5 | 269 | #define BME680_OSP_SEL UINT16_C(2) |
mcm | 0:0180d9905fe5 | 270 | #define BME680_OSH_SEL UINT16_C(4) |
mcm | 0:0180d9905fe5 | 271 | #define BME680_GAS_MEAS_SEL UINT16_C(8) |
mcm | 0:0180d9905fe5 | 272 | #define BME680_FILTER_SEL UINT16_C(16) |
mcm | 0:0180d9905fe5 | 273 | #define BME680_HCNTRL_SEL UINT16_C(32) |
mcm | 0:0180d9905fe5 | 274 | #define BME680_RUN_GAS_SEL UINT16_C(64) |
mcm | 0:0180d9905fe5 | 275 | #define BME680_NBCONV_SEL UINT16_C(128) |
mcm | 0:0180d9905fe5 | 276 | #define BME680_GAS_SENSOR_SEL (BME680_GAS_MEAS_SEL | BME680_RUN_GAS_SEL | BME680_NBCONV_SEL) |
mcm | 0:0180d9905fe5 | 277 | |
mcm | 0:0180d9905fe5 | 278 | /** Number of conversion settings*/ |
mcm | 0:0180d9905fe5 | 279 | #define BME680_NBCONV_MIN UINT8_C(0) |
mcm | 0:0180d9905fe5 | 280 | #define BME680_NBCONV_MAX UINT8_C(10) |
mcm | 0:0180d9905fe5 | 281 | |
mcm | 0:0180d9905fe5 | 282 | /** Mask definitions */ |
mcm | 0:0180d9905fe5 | 283 | #define BME680_GAS_MEAS_MSK UINT8_C(0x30) |
mcm | 0:0180d9905fe5 | 284 | #define BME680_NBCONV_MSK UINT8_C(0X0F) |
mcm | 0:0180d9905fe5 | 285 | #define BME680_FILTER_MSK UINT8_C(0X1C) |
mcm | 0:0180d9905fe5 | 286 | #define BME680_OST_MSK UINT8_C(0XE0) |
mcm | 0:0180d9905fe5 | 287 | #define BME680_OSP_MSK UINT8_C(0X1C) |
mcm | 0:0180d9905fe5 | 288 | #define BME680_OSH_MSK UINT8_C(0X07) |
mcm | 0:0180d9905fe5 | 289 | #define BME680_HCTRL_MSK UINT8_C(0x08) |
mcm | 0:0180d9905fe5 | 290 | #define BME680_RUN_GAS_MSK UINT8_C(0x10) |
mcm | 0:0180d9905fe5 | 291 | #define BME680_MODE_MSK UINT8_C(0x03) |
mcm | 0:0180d9905fe5 | 292 | #define BME680_RHRANGE_MSK UINT8_C(0x30) |
mcm | 0:0180d9905fe5 | 293 | #define BME680_RSERROR_MSK UINT8_C(0xf0) |
mcm | 0:0180d9905fe5 | 294 | #define BME680_NEW_DATA_MSK UINT8_C(0x80) |
mcm | 0:0180d9905fe5 | 295 | #define BME680_GAS_INDEX_MSK UINT8_C(0x0f) |
mcm | 0:0180d9905fe5 | 296 | #define BME680_GAS_RANGE_MSK UINT8_C(0x0f) |
mcm | 0:0180d9905fe5 | 297 | #define BME680_GASM_VALID_MSK UINT8_C(0x20) |
mcm | 0:0180d9905fe5 | 298 | #define BME680_HEAT_STAB_MSK UINT8_C(0x10) |
mcm | 0:0180d9905fe5 | 299 | #define BME680_MEM_PAGE_MSK UINT8_C(0x10) |
mcm | 0:0180d9905fe5 | 300 | #define BME680_SPI_RD_MSK UINT8_C(0x80) |
mcm | 0:0180d9905fe5 | 301 | #define BME680_SPI_WR_MSK UINT8_C(0x7f) |
mcm | 0:0180d9905fe5 | 302 | #define BME680_BIT_H1_DATA_MSK UINT8_C(0x0F) |
mcm | 0:0180d9905fe5 | 303 | |
mcm | 0:0180d9905fe5 | 304 | /** Bit position definitions for sensor settings */ |
mcm | 0:0180d9905fe5 | 305 | #define BME680_GAS_MEAS_POS UINT8_C(4) |
mcm | 0:0180d9905fe5 | 306 | #define BME680_FILTER_POS UINT8_C(2) |
mcm | 0:0180d9905fe5 | 307 | #define BME680_OST_POS UINT8_C(5) |
mcm | 0:0180d9905fe5 | 308 | #define BME680_OSP_POS UINT8_C(2) |
mcm | 0:0180d9905fe5 | 309 | #define BME680_RUN_GAS_POS UINT8_C(4) |
mcm | 0:0180d9905fe5 | 310 | |
mcm | 0:0180d9905fe5 | 311 | /** Array Index to Field data mapping for Calibration Data*/ |
mcm | 0:0180d9905fe5 | 312 | #define BME680_T2_LSB_REG (1) |
mcm | 0:0180d9905fe5 | 313 | #define BME680_T2_MSB_REG (2) |
mcm | 0:0180d9905fe5 | 314 | #define BME680_T3_REG (3) |
mcm | 0:0180d9905fe5 | 315 | #define BME680_P1_LSB_REG (5) |
mcm | 0:0180d9905fe5 | 316 | #define BME680_P1_MSB_REG (6) |
mcm | 0:0180d9905fe5 | 317 | #define BME680_P2_LSB_REG (7) |
mcm | 0:0180d9905fe5 | 318 | #define BME680_P2_MSB_REG (8) |
mcm | 0:0180d9905fe5 | 319 | #define BME680_P3_REG (9) |
mcm | 0:0180d9905fe5 | 320 | #define BME680_P4_LSB_REG (11) |
mcm | 0:0180d9905fe5 | 321 | #define BME680_P4_MSB_REG (12) |
mcm | 0:0180d9905fe5 | 322 | #define BME680_P5_LSB_REG (13) |
mcm | 0:0180d9905fe5 | 323 | #define BME680_P5_MSB_REG (14) |
mcm | 0:0180d9905fe5 | 324 | #define BME680_P7_REG (15) |
mcm | 0:0180d9905fe5 | 325 | #define BME680_P6_REG (16) |
mcm | 0:0180d9905fe5 | 326 | #define BME680_P8_LSB_REG (19) |
mcm | 0:0180d9905fe5 | 327 | #define BME680_P8_MSB_REG (20) |
mcm | 0:0180d9905fe5 | 328 | #define BME680_P9_LSB_REG (21) |
mcm | 0:0180d9905fe5 | 329 | #define BME680_P9_MSB_REG (22) |
mcm | 0:0180d9905fe5 | 330 | #define BME680_P10_REG (23) |
mcm | 0:0180d9905fe5 | 331 | #define BME680_H2_MSB_REG (25) |
mcm | 0:0180d9905fe5 | 332 | #define BME680_H2_LSB_REG (26) |
mcm | 0:0180d9905fe5 | 333 | #define BME680_H1_LSB_REG (26) |
mcm | 0:0180d9905fe5 | 334 | #define BME680_H1_MSB_REG (27) |
mcm | 0:0180d9905fe5 | 335 | #define BME680_H3_REG (28) |
mcm | 0:0180d9905fe5 | 336 | #define BME680_H4_REG (29) |
mcm | 0:0180d9905fe5 | 337 | #define BME680_H5_REG (30) |
mcm | 0:0180d9905fe5 | 338 | #define BME680_H6_REG (31) |
mcm | 0:0180d9905fe5 | 339 | #define BME680_H7_REG (32) |
mcm | 0:0180d9905fe5 | 340 | #define BME680_T1_LSB_REG (33) |
mcm | 0:0180d9905fe5 | 341 | #define BME680_T1_MSB_REG (34) |
mcm | 0:0180d9905fe5 | 342 | #define BME680_GH2_LSB_REG (35) |
mcm | 0:0180d9905fe5 | 343 | #define BME680_GH2_MSB_REG (36) |
mcm | 0:0180d9905fe5 | 344 | #define BME680_GH1_REG (37) |
mcm | 0:0180d9905fe5 | 345 | #define BME680_GH3_REG (38) |
mcm | 0:0180d9905fe5 | 346 | |
mcm | 0:0180d9905fe5 | 347 | /** BME680 register buffer index settings*/ |
mcm | 0:0180d9905fe5 | 348 | #define BME680_REG_FILTER_INDEX UINT8_C(5) |
mcm | 0:0180d9905fe5 | 349 | #define BME680_REG_TEMP_INDEX UINT8_C(4) |
mcm | 0:0180d9905fe5 | 350 | #define BME680_REG_PRES_INDEX UINT8_C(4) |
mcm | 0:0180d9905fe5 | 351 | #define BME680_REG_HUM_INDEX UINT8_C(2) |
mcm | 0:0180d9905fe5 | 352 | #define BME680_REG_NBCONV_INDEX UINT8_C(1) |
mcm | 0:0180d9905fe5 | 353 | #define BME680_REG_RUN_GAS_INDEX UINT8_C(1) |
mcm | 0:0180d9905fe5 | 354 | #define BME680_REG_HCTRL_INDEX UINT8_C(0) |
mcm | 0:0180d9905fe5 | 355 | |
mcm | 0:0180d9905fe5 | 356 | /** BME680 pressure calculation macros */ |
mcm | 0:0180d9905fe5 | 357 | /*! This max value is used to provide precedence to multiplication or division |
mcm | 0:0180d9905fe5 | 358 | * in pressure compensation equation to achieve least loss of precision and |
mcm | 0:0180d9905fe5 | 359 | * avoiding overflows. |
mcm | 0:0180d9905fe5 | 360 | * i.e Comparing value, BME680_MAX_OVERFLOW_VAL = INT32_C(1 << 30) |
mcm | 0:0180d9905fe5 | 361 | */ |
mcm | 0:0180d9905fe5 | 362 | #define BME680_MAX_OVERFLOW_VAL INT32_C(0x40000000) |
mcm | 0:0180d9905fe5 | 363 | |
mcm | 0:0180d9905fe5 | 364 | /** Macro to combine two 8 bit data's to form a 16 bit data */ |
mcm | 0:0180d9905fe5 | 365 | #define BME680_CONCAT_BYTES(msb, lsb) (((uint16_t)msb << 8) | (uint16_t)lsb) |
mcm | 0:0180d9905fe5 | 366 | |
mcm | 0:0180d9905fe5 | 367 | /** Macro to SET and GET BITS of a register */ |
mcm | 0:0180d9905fe5 | 368 | #define BME680_SET_BITS(reg_data, bitname, data) \ |
mcm | 0:0180d9905fe5 | 369 | ((reg_data & ~(bitname##_MSK)) | \ |
mcm | 0:0180d9905fe5 | 370 | ((data << bitname##_POS) & bitname##_MSK)) |
mcm | 0:0180d9905fe5 | 371 | #define BME680_GET_BITS(reg_data, bitname) ((reg_data & (bitname##_MSK)) >> \ |
mcm | 0:0180d9905fe5 | 372 | (bitname##_POS)) |
mcm | 0:0180d9905fe5 | 373 | |
mcm | 0:0180d9905fe5 | 374 | /** Macro variant to handle the bitname position if it is zero */ |
mcm | 0:0180d9905fe5 | 375 | #define BME680_SET_BITS_POS_0(reg_data, bitname, data) \ |
mcm | 0:0180d9905fe5 | 376 | ((reg_data & ~(bitname##_MSK)) | \ |
mcm | 0:0180d9905fe5 | 377 | (data & bitname##_MSK)) |
mcm | 0:0180d9905fe5 | 378 | #define BME680_GET_BITS_POS_0(reg_data, bitname) (reg_data & (bitname##_MSK)) |
mcm | 0:0180d9905fe5 | 379 | |
mcm | 0:0180d9905fe5 | 380 | /** Type definitions */ |
mcm | 0:0180d9905fe5 | 381 | /*! |
mcm | 0:0180d9905fe5 | 382 | * Generic communication function pointer |
mcm | 0:0180d9905fe5 | 383 | * @param[in] dev_id: Place holder to store the id of the device structure |
mcm | 0:0180d9905fe5 | 384 | * Can be used to store the index of the Chip select or |
mcm | 0:0180d9905fe5 | 385 | * I2C address of the device. |
mcm | 0:0180d9905fe5 | 386 | * @param[in] reg_addr: Used to select the register the where data needs to |
mcm | 0:0180d9905fe5 | 387 | * be read from or written to. |
mcm | 0:0180d9905fe5 | 388 | * @param[in/out] reg_data: Data array to read/write |
mcm | 0:0180d9905fe5 | 389 | * @param[in] len: Length of the data array |
mcm | 0:0180d9905fe5 | 390 | */ |
mcm | 0:0180d9905fe5 | 391 | typedef int8_t (*bme680_com_fptr_t)(uint8_t dev_id, uint8_t reg_addr, uint8_t *data, uint16_t len); |
mcm | 0:0180d9905fe5 | 392 | |
mcm | 0:0180d9905fe5 | 393 | /*! |
mcm | 0:0180d9905fe5 | 394 | * Delay function pointer |
mcm | 0:0180d9905fe5 | 395 | * @param[in] period: Time period in milliseconds |
mcm | 0:0180d9905fe5 | 396 | */ |
mcm | 0:0180d9905fe5 | 397 | typedef void (*bme680_delay_fptr_t)(uint32_t period); |
mcm | 0:0180d9905fe5 | 398 | |
mcm | 0:0180d9905fe5 | 399 | /*! |
mcm | 0:0180d9905fe5 | 400 | * @brief Interface selection Enumerations |
mcm | 0:0180d9905fe5 | 401 | */ |
mcm | 0:0180d9905fe5 | 402 | enum bme680_intf { |
mcm | 0:0180d9905fe5 | 403 | /*! SPI interface */ |
mcm | 0:0180d9905fe5 | 404 | BME680_SPI_INTF, |
mcm | 0:0180d9905fe5 | 405 | /*! I2C interface */ |
mcm | 0:0180d9905fe5 | 406 | BME680_I2C_INTF |
mcm | 0:0180d9905fe5 | 407 | }; |
mcm | 0:0180d9905fe5 | 408 | |
mcm | 0:0180d9905fe5 | 409 | /* structure definitions */ |
mcm | 0:0180d9905fe5 | 410 | /*! |
mcm | 0:0180d9905fe5 | 411 | * @brief Sensor field data structure |
mcm | 0:0180d9905fe5 | 412 | */ |
mcm | 0:0180d9905fe5 | 413 | struct bme680_field_data { |
mcm | 0:0180d9905fe5 | 414 | /*! Contains new_data, gasm_valid & heat_stab */ |
mcm | 0:0180d9905fe5 | 415 | uint8_t status; |
mcm | 0:0180d9905fe5 | 416 | /*! The index of the heater profile used */ |
mcm | 0:0180d9905fe5 | 417 | uint8_t gas_index; |
mcm | 0:0180d9905fe5 | 418 | /*! Measurement index to track order */ |
mcm | 0:0180d9905fe5 | 419 | uint8_t meas_index; |
mcm | 0:0180d9905fe5 | 420 | |
mcm | 0:0180d9905fe5 | 421 | #ifndef BME680_FLOAT_POINT_COMPENSATION |
mcm | 0:0180d9905fe5 | 422 | /*! Temperature in degree celsius x100 */ |
mcm | 0:0180d9905fe5 | 423 | int16_t temperature; |
mcm | 0:0180d9905fe5 | 424 | /*! Pressure in Pascal */ |
mcm | 0:0180d9905fe5 | 425 | uint32_t pressure; |
mcm | 0:0180d9905fe5 | 426 | /*! Humidity in % relative humidity x1000 */ |
mcm | 0:0180d9905fe5 | 427 | uint32_t humidity; |
mcm | 0:0180d9905fe5 | 428 | /*! Gas resistance in Ohms */ |
mcm | 0:0180d9905fe5 | 429 | uint32_t gas_resistance; |
mcm | 0:0180d9905fe5 | 430 | #else |
mcm | 0:0180d9905fe5 | 431 | /*! Temperature in degree celsius */ |
mcm | 0:0180d9905fe5 | 432 | float temperature; |
mcm | 0:0180d9905fe5 | 433 | /*! Pressure in Pascal */ |
mcm | 0:0180d9905fe5 | 434 | float pressure; |
mcm | 0:0180d9905fe5 | 435 | /*! Humidity in % relative humidity x1000 */ |
mcm | 0:0180d9905fe5 | 436 | float humidity; |
mcm | 0:0180d9905fe5 | 437 | /*! Gas resistance in Ohms */ |
mcm | 0:0180d9905fe5 | 438 | float gas_resistance; |
mcm | 0:0180d9905fe5 | 439 | |
mcm | 0:0180d9905fe5 | 440 | #endif |
mcm | 0:0180d9905fe5 | 441 | |
mcm | 0:0180d9905fe5 | 442 | }; |
mcm | 0:0180d9905fe5 | 443 | |
mcm | 0:0180d9905fe5 | 444 | /*! |
mcm | 0:0180d9905fe5 | 445 | * @brief Structure to hold the Calibration data |
mcm | 0:0180d9905fe5 | 446 | */ |
mcm | 0:0180d9905fe5 | 447 | struct bme680_calib_data { |
mcm | 0:0180d9905fe5 | 448 | /*! Variable to store calibrated humidity data */ |
mcm | 0:0180d9905fe5 | 449 | uint16_t par_h1; |
mcm | 0:0180d9905fe5 | 450 | /*! Variable to store calibrated humidity data */ |
mcm | 0:0180d9905fe5 | 451 | uint16_t par_h2; |
mcm | 0:0180d9905fe5 | 452 | /*! Variable to store calibrated humidity data */ |
mcm | 0:0180d9905fe5 | 453 | int8_t par_h3; |
mcm | 0:0180d9905fe5 | 454 | /*! Variable to store calibrated humidity data */ |
mcm | 0:0180d9905fe5 | 455 | int8_t par_h4; |
mcm | 0:0180d9905fe5 | 456 | /*! Variable to store calibrated humidity data */ |
mcm | 0:0180d9905fe5 | 457 | int8_t par_h5; |
mcm | 0:0180d9905fe5 | 458 | /*! Variable to store calibrated humidity data */ |
mcm | 0:0180d9905fe5 | 459 | uint8_t par_h6; |
mcm | 0:0180d9905fe5 | 460 | /*! Variable to store calibrated humidity data */ |
mcm | 0:0180d9905fe5 | 461 | int8_t par_h7; |
mcm | 0:0180d9905fe5 | 462 | /*! Variable to store calibrated gas data */ |
mcm | 0:0180d9905fe5 | 463 | int8_t par_gh1; |
mcm | 0:0180d9905fe5 | 464 | /*! Variable to store calibrated gas data */ |
mcm | 0:0180d9905fe5 | 465 | int16_t par_gh2; |
mcm | 0:0180d9905fe5 | 466 | /*! Variable to store calibrated gas data */ |
mcm | 0:0180d9905fe5 | 467 | int8_t par_gh3; |
mcm | 0:0180d9905fe5 | 468 | /*! Variable to store calibrated temperature data */ |
mcm | 0:0180d9905fe5 | 469 | uint16_t par_t1; |
mcm | 0:0180d9905fe5 | 470 | /*! Variable to store calibrated temperature data */ |
mcm | 0:0180d9905fe5 | 471 | int16_t par_t2; |
mcm | 0:0180d9905fe5 | 472 | /*! Variable to store calibrated temperature data */ |
mcm | 0:0180d9905fe5 | 473 | int8_t par_t3; |
mcm | 0:0180d9905fe5 | 474 | /*! Variable to store calibrated pressure data */ |
mcm | 0:0180d9905fe5 | 475 | uint16_t par_p1; |
mcm | 0:0180d9905fe5 | 476 | /*! Variable to store calibrated pressure data */ |
mcm | 0:0180d9905fe5 | 477 | int16_t par_p2; |
mcm | 0:0180d9905fe5 | 478 | /*! Variable to store calibrated pressure data */ |
mcm | 0:0180d9905fe5 | 479 | int8_t par_p3; |
mcm | 0:0180d9905fe5 | 480 | /*! Variable to store calibrated pressure data */ |
mcm | 0:0180d9905fe5 | 481 | int16_t par_p4; |
mcm | 0:0180d9905fe5 | 482 | /*! Variable to store calibrated pressure data */ |
mcm | 0:0180d9905fe5 | 483 | int16_t par_p5; |
mcm | 0:0180d9905fe5 | 484 | /*! Variable to store calibrated pressure data */ |
mcm | 0:0180d9905fe5 | 485 | int8_t par_p6; |
mcm | 0:0180d9905fe5 | 486 | /*! Variable to store calibrated pressure data */ |
mcm | 0:0180d9905fe5 | 487 | int8_t par_p7; |
mcm | 0:0180d9905fe5 | 488 | /*! Variable to store calibrated pressure data */ |
mcm | 0:0180d9905fe5 | 489 | int16_t par_p8; |
mcm | 0:0180d9905fe5 | 490 | /*! Variable to store calibrated pressure data */ |
mcm | 0:0180d9905fe5 | 491 | int16_t par_p9; |
mcm | 0:0180d9905fe5 | 492 | /*! Variable to store calibrated pressure data */ |
mcm | 0:0180d9905fe5 | 493 | uint8_t par_p10; |
mcm | 0:0180d9905fe5 | 494 | |
mcm | 0:0180d9905fe5 | 495 | #ifndef BME680_FLOAT_POINT_COMPENSATION |
mcm | 0:0180d9905fe5 | 496 | /*! Variable to store t_fine size */ |
mcm | 0:0180d9905fe5 | 497 | int32_t t_fine; |
mcm | 0:0180d9905fe5 | 498 | #else |
mcm | 0:0180d9905fe5 | 499 | /*! Variable to store t_fine size */ |
mcm | 0:0180d9905fe5 | 500 | float t_fine; |
mcm | 0:0180d9905fe5 | 501 | #endif |
mcm | 0:0180d9905fe5 | 502 | /*! Variable to store heater resistance range */ |
mcm | 0:0180d9905fe5 | 503 | uint8_t res_heat_range; |
mcm | 0:0180d9905fe5 | 504 | /*! Variable to store heater resistance value */ |
mcm | 0:0180d9905fe5 | 505 | int8_t res_heat_val; |
mcm | 0:0180d9905fe5 | 506 | /*! Variable to store error range */ |
mcm | 0:0180d9905fe5 | 507 | int8_t range_sw_err; |
mcm | 0:0180d9905fe5 | 508 | }; |
mcm | 0:0180d9905fe5 | 509 | |
mcm | 0:0180d9905fe5 | 510 | /*! |
mcm | 0:0180d9905fe5 | 511 | * @brief BME680 sensor settings structure which comprises of ODR, |
mcm | 0:0180d9905fe5 | 512 | * over-sampling and filter settings. |
mcm | 0:0180d9905fe5 | 513 | */ |
mcm | 0:0180d9905fe5 | 514 | struct bme680_tph_sett { |
mcm | 0:0180d9905fe5 | 515 | /*! Humidity oversampling */ |
mcm | 0:0180d9905fe5 | 516 | uint8_t os_hum; |
mcm | 0:0180d9905fe5 | 517 | /*! Temperature oversampling */ |
mcm | 0:0180d9905fe5 | 518 | uint8_t os_temp; |
mcm | 0:0180d9905fe5 | 519 | /*! Pressure oversampling */ |
mcm | 0:0180d9905fe5 | 520 | uint8_t os_pres; |
mcm | 0:0180d9905fe5 | 521 | /*! Filter coefficient */ |
mcm | 0:0180d9905fe5 | 522 | uint8_t filter; |
mcm | 0:0180d9905fe5 | 523 | }; |
mcm | 0:0180d9905fe5 | 524 | |
mcm | 0:0180d9905fe5 | 525 | /*! |
mcm | 0:0180d9905fe5 | 526 | * @brief BME680 gas sensor which comprises of gas settings |
mcm | 0:0180d9905fe5 | 527 | * and status parameters |
mcm | 0:0180d9905fe5 | 528 | */ |
mcm | 0:0180d9905fe5 | 529 | struct bme680_gas_sett { |
mcm | 0:0180d9905fe5 | 530 | /*! Variable to store nb conversion */ |
mcm | 0:0180d9905fe5 | 531 | uint8_t nb_conv; |
mcm | 0:0180d9905fe5 | 532 | /*! Variable to store heater control */ |
mcm | 0:0180d9905fe5 | 533 | uint8_t heatr_ctrl; |
mcm | 0:0180d9905fe5 | 534 | /*! Run gas enable value */ |
mcm | 0:0180d9905fe5 | 535 | uint8_t run_gas; |
mcm | 0:0180d9905fe5 | 536 | /*! Heater temperature value */ |
mcm | 0:0180d9905fe5 | 537 | uint16_t heatr_temp; |
mcm | 0:0180d9905fe5 | 538 | /*! Duration profile value */ |
mcm | 0:0180d9905fe5 | 539 | uint16_t heatr_dur; |
mcm | 0:0180d9905fe5 | 540 | }; |
mcm | 0:0180d9905fe5 | 541 | |
mcm | 0:0180d9905fe5 | 542 | /*! |
mcm | 0:0180d9905fe5 | 543 | * @brief BME680 device structure |
mcm | 0:0180d9905fe5 | 544 | */ |
mcm | 0:0180d9905fe5 | 545 | struct bme680_dev { |
mcm | 0:0180d9905fe5 | 546 | /*! Chip Id */ |
mcm | 0:0180d9905fe5 | 547 | uint8_t chip_id; |
mcm | 0:0180d9905fe5 | 548 | /*! Device Id */ |
mcm | 0:0180d9905fe5 | 549 | uint8_t dev_id; |
mcm | 0:0180d9905fe5 | 550 | /*! SPI/I2C interface */ |
mcm | 0:0180d9905fe5 | 551 | enum bme680_intf intf; |
mcm | 0:0180d9905fe5 | 552 | /*! Memory page used */ |
mcm | 0:0180d9905fe5 | 553 | uint8_t mem_page; |
mcm | 0:0180d9905fe5 | 554 | /*! Ambient temperature in Degree C */ |
mcm | 0:0180d9905fe5 | 555 | int8_t amb_temp; |
mcm | 0:0180d9905fe5 | 556 | /*! Sensor calibration data */ |
mcm | 0:0180d9905fe5 | 557 | struct bme680_calib_data calib; |
mcm | 0:0180d9905fe5 | 558 | /*! Sensor settings */ |
mcm | 0:0180d9905fe5 | 559 | struct bme680_tph_sett tph_sett; |
mcm | 0:0180d9905fe5 | 560 | /*! Gas Sensor settings */ |
mcm | 0:0180d9905fe5 | 561 | struct bme680_gas_sett gas_sett; |
mcm | 0:0180d9905fe5 | 562 | /*! Sensor power modes */ |
mcm | 0:0180d9905fe5 | 563 | uint8_t power_mode; |
mcm | 0:0180d9905fe5 | 564 | /*! New sensor fields */ |
mcm | 0:0180d9905fe5 | 565 | uint8_t new_fields; |
mcm | 0:0180d9905fe5 | 566 | /*! Store the info messages */ |
mcm | 0:0180d9905fe5 | 567 | uint8_t info_msg; |
mcm | 0:0180d9905fe5 | 568 | /*! Bus read function pointer */ |
mcm | 0:0180d9905fe5 | 569 | bme680_com_fptr_t read; |
mcm | 0:0180d9905fe5 | 570 | /*! Bus write function pointer */ |
mcm | 0:0180d9905fe5 | 571 | bme680_com_fptr_t write; |
mcm | 0:0180d9905fe5 | 572 | /*! delay function pointer */ |
mcm | 0:0180d9905fe5 | 573 | bme680_delay_fptr_t delay_ms; |
mcm | 0:0180d9905fe5 | 574 | /*! Communication function result */ |
mcm | 0:0180d9905fe5 | 575 | int8_t com_rslt; |
mcm | 0:0180d9905fe5 | 576 | }; |
mcm | 0:0180d9905fe5 | 577 | |
mcm | 0:0180d9905fe5 | 578 | |
mcm | 0:0180d9905fe5 | 579 | |
mcm | 0:0180d9905fe5 | 580 | #endif /* BME680_DEFS_H_ */ |
mcm | 0:0180d9905fe5 | 581 | /** @}*/ |
mcm | 0:0180d9905fe5 | 582 | /** @}*/ |