parent
bf282b0a12
commit
4158f225e1
@ -1,225 +0,0 @@ |
||||
/**
|
||||
* Copyright (C) 2017 - 2018 Bosch Sensortec GmbH |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are met: |
||||
* |
||||
* Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* |
||||
* Redistributions in binary form must reproduce the above copyright |
||||
* notice, this list of conditions and the following disclaimer in the |
||||
* documentation and/or other materials provided with the distribution. |
||||
* |
||||
* Neither the name of the copyright holder nor the names of the |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND |
||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR |
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
* DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER |
||||
* OR CONTRIBUTORS BE LIABLE FOR ANY |
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, |
||||
* OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, |
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
||||
* ANY WAY OUT OF THE USE OF THIS |
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE |
||||
* |
||||
* The information provided is believed to be accurate and reliable. |
||||
* The copyright holder assumes no responsibility |
||||
* for the consequences of use |
||||
* of such information nor for any infringement of patents or |
||||
* other rights of third parties which may result from its use. |
||||
* No license is granted by implication or otherwise under any patent or |
||||
* patent rights of the copyright holder. |
||||
* |
||||
* @file bme680.h |
||||
* @date 30 Oct 2017 |
||||
* @version 3.5.3 |
||||
* @brief |
||||
* |
||||
*/ |
||||
/*! @file bme680.h
|
||||
@brief Sensor driver for BME680 sensor */ |
||||
/*!
|
||||
* @defgroup BME680 SENSOR API |
||||
* @{*/ |
||||
#ifndef BME680_H_ |
||||
#define BME680_H_ |
||||
|
||||
/*! CPP guard */ |
||||
#ifdef __cplusplus |
||||
extern "C" |
||||
{ |
||||
#endif |
||||
|
||||
/* Header includes */ |
||||
#include "bme680_defs.h" |
||||
|
||||
/* function prototype declarations */ |
||||
/*!
|
||||
* @brief This API is the entry point. |
||||
* It reads the chip-id and calibration data from the sensor. |
||||
* |
||||
* @param[in,out] dev : Structure instance of bme680_dev |
||||
* |
||||
* @return Result of API execution status |
||||
* @retval zero -> Success / +ve value -> Warning / -ve value -> Error |
||||
*/ |
||||
int8_t bme680_init(struct bme680_dev *dev); |
||||
|
||||
/*!
|
||||
* @brief This API writes the given data to the register address |
||||
* of the sensor. |
||||
* |
||||
* @param[in] reg_addr : Register address from where the data to be written. |
||||
* @param[in] reg_data : Pointer to data buffer which is to be written |
||||
* in the sensor. |
||||
* @param[in] len : No of bytes of data to write.. |
||||
* @param[in] dev : Structure instance of bme680_dev. |
||||
* |
||||
* @return Result of API execution status |
||||
* @retval zero -> Success / +ve value -> Warning / -ve value -> Error |
||||
*/ |
||||
int8_t bme680_set_regs(const uint8_t *reg_addr, const uint8_t *reg_data, uint8_t len, struct bme680_dev *dev); |
||||
|
||||
/*!
|
||||
* @brief This API reads the data from the given register address of the sensor. |
||||
* |
||||
* @param[in] reg_addr : Register address from where the data to be read |
||||
* @param[out] reg_data : Pointer to data buffer to store the read data. |
||||
* @param[in] len : No of bytes of data to be read. |
||||
* @param[in] dev : Structure instance of bme680_dev. |
||||
* |
||||
* @return Result of API execution status |
||||
* @retval zero -> Success / +ve value -> Warning / -ve value -> Error |
||||
*/ |
||||
int8_t bme680_get_regs(uint8_t reg_addr, uint8_t *reg_data, uint16_t len, struct bme680_dev *dev); |
||||
|
||||
/*!
|
||||
* @brief This API performs the soft reset of the sensor. |
||||
* |
||||
* @param[in] dev : Structure instance of bme680_dev. |
||||
* |
||||
* @return Result of API execution status |
||||
* @retval zero -> Success / +ve value -> Warning / -ve value -> Error. |
||||
*/ |
||||
int8_t bme680_soft_reset(struct bme680_dev *dev); |
||||
|
||||
/*!
|
||||
* @brief This API is used to set the power mode of the sensor. |
||||
* |
||||
* @param[in] dev : Structure instance of bme680_dev |
||||
* @note : Pass the value to bme680_dev.power_mode structure variable. |
||||
* |
||||
* value | mode |
||||
* -------------|------------------ |
||||
* 0x00 | BME680_SLEEP_MODE |
||||
* 0x01 | BME680_FORCED_MODE |
||||
* |
||||
* * @return Result of API execution status |
||||
* @retval zero -> Success / +ve value -> Warning / -ve value -> Error |
||||
*/ |
||||
int8_t bme680_set_sensor_mode(struct bme680_dev *dev); |
||||
|
||||
/*!
|
||||
* @brief This API is used to get the power mode of the sensor. |
||||
* |
||||
* @param[in] dev : Structure instance of bme680_dev |
||||
* @note : bme680_dev.power_mode structure variable hold the power mode. |
||||
* |
||||
* value | mode |
||||
* ---------|------------------ |
||||
* 0x00 | BME680_SLEEP_MODE |
||||
* 0x01 | BME680_FORCED_MODE |
||||
* |
||||
* @return Result of API execution status |
||||
* @retval zero -> Success / +ve value -> Warning / -ve value -> Error |
||||
*/ |
||||
int8_t bme680_get_sensor_mode(struct bme680_dev *dev); |
||||
|
||||
/*!
|
||||
* @brief This API is used to set the profile duration of the sensor. |
||||
* |
||||
* @param[in] dev : Structure instance of bme680_dev. |
||||
* @param[in] duration : Duration of the measurement in ms. |
||||
* |
||||
* @return Nothing |
||||
*/ |
||||
void bme680_set_profile_dur(uint16_t duration, struct bme680_dev *dev); |
||||
|
||||
/*!
|
||||
* @brief This API is used to get the profile duration of the sensor. |
||||
* |
||||
* @param[in] dev : Structure instance of bme680_dev. |
||||
* @param[in] duration : Duration of the measurement in ms. |
||||
* |
||||
* @return Nothing |
||||
*/ |
||||
void bme680_get_profile_dur(uint16_t *duration, const struct bme680_dev *dev); |
||||
|
||||
/*!
|
||||
* @brief This API reads the pressure, temperature and humidity and gas data |
||||
* from the sensor, compensates the data and store it in the bme680_data |
||||
* structure instance passed by the user. |
||||
* |
||||
* @param[out] data: Structure instance to hold the data. |
||||
* @param[in] dev : Structure instance of bme680_dev. |
||||
* |
||||
* @return Result of API execution status |
||||
* @retval zero -> Success / +ve value -> Warning / -ve value -> Error |
||||
*/ |
||||
int8_t bme680_get_sensor_data(struct bme680_field_data *data, struct bme680_dev *dev); |
||||
|
||||
/*!
|
||||
* @brief This API is used to set the oversampling, filter and T,P,H, gas selection |
||||
* settings in the sensor. |
||||
* |
||||
* @param[in] dev : Structure instance of bme680_dev. |
||||
* @param[in] desired_settings : Variable used to select the settings which |
||||
* are to be set in the sensor. |
||||
* |
||||
* Macros | Functionality |
||||
*---------------------------------|---------------------------------------------- |
||||
* BME680_OST_SEL | To set temperature oversampling. |
||||
* BME680_OSP_SEL | To set pressure oversampling. |
||||
* BME680_OSH_SEL | To set humidity oversampling. |
||||
* BME680_GAS_MEAS_SEL | To set gas measurement setting. |
||||
* BME680_FILTER_SEL | To set filter setting. |
||||
* BME680_HCNTRL_SEL | To set humidity control setting. |
||||
* BME680_RUN_GAS_SEL | To set run gas setting. |
||||
* BME680_NBCONV_SEL | To set NB conversion setting. |
||||
* BME680_GAS_SENSOR_SEL | To set all gas sensor related settings |
||||
* |
||||
* @note : Below are the macros to be used by the user for selecting the |
||||
* desired settings. User can do OR operation of these macros for configuring |
||||
* multiple settings. |
||||
* |
||||
* @return Result of API execution status |
||||
* @retval zero -> Success / +ve value -> Warning / -ve value -> Error. |
||||
*/ |
||||
int8_t bme680_set_sensor_settings(uint16_t desired_settings, struct bme680_dev *dev); |
||||
|
||||
/*!
|
||||
* @brief This API is used to get the oversampling, filter and T,P,H, gas selection |
||||
* settings in the sensor. |
||||
* |
||||
* @param[in] dev : Structure instance of bme680_dev. |
||||
* @param[in] desired_settings : Variable used to select the settings which |
||||
* are to be get from the sensor. |
||||
* |
||||
* @return Result of API execution status |
||||
* @retval zero -> Success / +ve value -> Warning / -ve value -> Error. |
||||
*/ |
||||
int8_t bme680_get_sensor_settings(uint16_t desired_settings, struct bme680_dev *dev); |
||||
#ifdef __cplusplus |
||||
} |
||||
#endif /* End of CPP guard */ |
||||
#endif /* BME680_H_ */ |
||||
/** @}*/ |
@ -1,512 +0,0 @@ |
||||
/**
|
||||
* Copyright (C) 2017 - 2018 Bosch Sensortec GmbH |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are met: |
||||
* |
||||
* Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* |
||||
* Redistributions in binary form must reproduce the above copyright |
||||
* notice, this list of conditions and the following disclaimer in the |
||||
* documentation and/or other materials provided with the distribution. |
||||
* |
||||
* Neither the name of the copyright holder nor the names of the |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND |
||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR |
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
* DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER |
||||
* OR CONTRIBUTORS BE LIABLE FOR ANY |
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, |
||||
* OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, |
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
||||
* ANY WAY OUT OF THE USE OF THIS |
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE |
||||
* |
||||
* The information provided is believed to be accurate and reliable. |
||||
* The copyright holder assumes no responsibility |
||||
* for the consequences of use |
||||
* of such information nor for any infringement of patents or |
||||
* other rights of third parties which may result from its use. |
||||
* No license is granted by implication or otherwise under any patent or |
||||
* patent rights of the copyright holder. |
||||
* |
||||
* @file bme680_defs.h |
||||
* @date 30 Oct 2017 |
||||
* @version 3.5.3 |
||||
* @brief |
||||
* |
||||
*/ |
||||
|
||||
/*! @file bme680_defs.h
|
||||
@brief Sensor driver for BME680 sensor */ |
||||
/*!
|
||||
* @defgroup BME680 SENSOR API |
||||
* @brief |
||||
* @{*/ |
||||
#ifndef BME680_DEFS_H_ |
||||
#define BME680_DEFS_H_ |
||||
|
||||
/********************************************************/ |
||||
/* header includes */ |
||||
#ifdef __KERNEL__ |
||||
#include <linux/types.h> |
||||
#include <linux/kernel.h> |
||||
#else |
||||
#include <stdint.h> |
||||
#include <stddef.h> |
||||
#endif |
||||
|
||||
/******************************************************************************/ |
||||
/*! @name Common macros */ |
||||
/******************************************************************************/ |
||||
|
||||
#if !defined(UINT8_C) && !defined(INT8_C) |
||||
#define INT8_C(x) S8_C(x) |
||||
#define UINT8_C(x) U8_C(x) |
||||
#endif |
||||
|
||||
#if !defined(UINT16_C) && !defined(INT16_C) |
||||
#define INT16_C(x) S16_C(x) |
||||
#define UINT16_C(x) U16_C(x) |
||||
#endif |
||||
|
||||
#if !defined(INT32_C) && !defined(UINT32_C) |
||||
#define INT32_C(x) S32_C(x) |
||||
#define UINT32_C(x) U32_C(x) |
||||
#endif |
||||
|
||||
#if !defined(INT64_C) && !defined(UINT64_C) |
||||
#define INT64_C(x) S64_C(x) |
||||
#define UINT64_C(x) U64_C(x) |
||||
#endif |
||||
|
||||
/**@}*/ |
||||
|
||||
/**\name C standard macros */ |
||||
#ifndef NULL |
||||
#ifdef __cplusplus |
||||
#define NULL 0 |
||||
#else |
||||
#define NULL ((void *) 0) |
||||
#endif |
||||
#endif |
||||
|
||||
/** BME680 General config */ |
||||
#define BME680_POLL_PERIOD_MS UINT8_C(10) |
||||
|
||||
/** BME680 I2C addresses */ |
||||
#define BME680_I2C_ADDR_PRIMARY UINT8_C(0x76) |
||||
#define BME680_I2C_ADDR_SECONDARY UINT8_C(0x77) |
||||
|
||||
/** BME680 unique chip identifier */ |
||||
#define BME680_CHIP_ID UINT8_C(0x61) |
||||
|
||||
/** BME680 coefficients related defines */ |
||||
#define BME680_COEFF_SIZE UINT8_C(0x41) |
||||
#define BME680_COEFF_ADDR1_LEN UINT8_C(25) |
||||
#define BME680_COEFF_ADDR2_LEN UINT8_C(16) |
||||
|
||||
/** BME680 field_x related defines */ |
||||
#define BME680_FIELD_LENGTH UINT8_C(15) |
||||
#define BME680_FIELD_ADDR_OFFSET UINT8_C(17) |
||||
|
||||
/** Soft reset command */ |
||||
#define BME680_SOFT_RESET_CMD UINT8_C(0xb6) |
||||
|
||||
/** Error code definitions */ |
||||
#define BME680_OK INT8_C(0) |
||||
/* Errors */ |
||||
#define BME680_E_NULL_PTR INT8_C(-1) |
||||
#define BME680_E_COM_FAIL INT8_C(-2) |
||||
#define BME680_E_DEV_NOT_FOUND INT8_C(-3) |
||||
#define BME680_E_INVALID_LENGTH INT8_C(-4) |
||||
|
||||
/* Warnings */ |
||||
#define BME680_W_DEFINE_PWR_MODE INT8_C(1) |
||||
#define BME680_W_NO_NEW_DATA INT8_C(2) |
||||
|
||||
/* Info's */ |
||||
#define BME680_I_MIN_CORRECTION UINT8_C(1) |
||||
#define BME680_I_MAX_CORRECTION UINT8_C(2) |
||||
|
||||
/** Register map */ |
||||
/** Other coefficient's address */ |
||||
#define BME680_ADDR_RES_HEAT_VAL_ADDR UINT8_C(0x00) |
||||
#define BME680_ADDR_RES_HEAT_RANGE_ADDR UINT8_C(0x02) |
||||
#define BME680_ADDR_RANGE_SW_ERR_ADDR UINT8_C(0x04) |
||||
#define BME680_ADDR_SENS_CONF_START UINT8_C(0x5A) |
||||
#define BME680_ADDR_GAS_CONF_START UINT8_C(0x64) |
||||
|
||||
/** Field settings */ |
||||
#define BME680_FIELD0_ADDR UINT8_C(0x1d) |
||||
|
||||
/** Heater settings */ |
||||
#define BME680_RES_HEAT0_ADDR UINT8_C(0x5a) |
||||
#define BME680_GAS_WAIT0_ADDR UINT8_C(0x64) |
||||
|
||||
/** Sensor configuration registers */ |
||||
#define BME680_CONF_HEAT_CTRL_ADDR UINT8_C(0x70) |
||||
#define BME680_CONF_ODR_RUN_GAS_NBC_ADDR UINT8_C(0x71) |
||||
#define BME680_CONF_OS_H_ADDR UINT8_C(0x72) |
||||
#define BME680_MEM_PAGE_ADDR UINT8_C(0xf3) |
||||
#define BME680_CONF_T_P_MODE_ADDR UINT8_C(0x74) |
||||
#define BME680_CONF_ODR_FILT_ADDR UINT8_C(0x75) |
||||
|
||||
/** Coefficient's address */ |
||||
#define BME680_COEFF_ADDR1 UINT8_C(0x89) |
||||
#define BME680_COEFF_ADDR2 UINT8_C(0xe1) |
||||
|
||||
/** Chip identifier */ |
||||
#define BME680_CHIP_ID_ADDR UINT8_C(0xd0) |
||||
|
||||
/** Soft reset register */ |
||||
#define BME680_SOFT_RESET_ADDR UINT8_C(0xe0) |
||||
|
||||
/** Heater control settings */ |
||||
#define BME680_ENABLE_HEATER UINT8_C(0x00) |
||||
#define BME680_DISABLE_HEATER UINT8_C(0x08) |
||||
|
||||
/** Gas measurement settings */ |
||||
#define BME680_DISABLE_GAS_MEAS UINT8_C(0x00) |
||||
#define BME680_ENABLE_GAS_MEAS UINT8_C(0x01) |
||||
|
||||
/** Over-sampling settings */ |
||||
#define BME680_OS_NONE UINT8_C(0) |
||||
#define BME680_OS_1X UINT8_C(1) |
||||
#define BME680_OS_2X UINT8_C(2) |
||||
#define BME680_OS_4X UINT8_C(3) |
||||
#define BME680_OS_8X UINT8_C(4) |
||||
#define BME680_OS_16X UINT8_C(5) |
||||
|
||||
/** IIR filter settings */ |
||||
#define BME680_FILTER_SIZE_0 UINT8_C(0) |
||||
#define BME680_FILTER_SIZE_1 UINT8_C(1) |
||||
#define BME680_FILTER_SIZE_3 UINT8_C(2) |
||||
#define BME680_FILTER_SIZE_7 UINT8_C(3) |
||||
#define BME680_FILTER_SIZE_15 UINT8_C(4) |
||||
#define BME680_FILTER_SIZE_31 UINT8_C(5) |
||||
#define BME680_FILTER_SIZE_63 UINT8_C(6) |
||||
#define BME680_FILTER_SIZE_127 UINT8_C(7) |
||||
|
||||
/** Power mode settings */ |
||||
#define BME680_SLEEP_MODE UINT8_C(0) |
||||
#define BME680_FORCED_MODE UINT8_C(1) |
||||
|
||||
/** Delay related macro declaration */ |
||||
#define BME680_RESET_PERIOD UINT32_C(10) |
||||
|
||||
/** SPI memory page settings */ |
||||
#define BME680_MEM_PAGE0 UINT8_C(0x10) |
||||
#define BME680_MEM_PAGE1 UINT8_C(0x00) |
||||
|
||||
/** Ambient humidity shift value for compensation */ |
||||
#define BME680_HUM_REG_SHIFT_VAL UINT8_C(4) |
||||
|
||||
/** Run gas enable and disable settings */ |
||||
#define BME680_RUN_GAS_DISABLE UINT8_C(0) |
||||
#define BME680_RUN_GAS_ENABLE UINT8_C(1) |
||||
|
||||
/** Buffer length macro declaration */ |
||||
#define BME680_TMP_BUFFER_LENGTH UINT8_C(40) |
||||
#define BME680_REG_BUFFER_LENGTH UINT8_C(6) |
||||
#define BME680_FIELD_DATA_LENGTH UINT8_C(3) |
||||
#define BME680_GAS_REG_BUF_LENGTH UINT8_C(20) |
||||
#define BME680_GAS_HEATER_PROF_LEN_MAX UINT8_C(10) |
||||
|
||||
/** Settings selector */ |
||||
#define BME680_OST_SEL UINT16_C(1) |
||||
#define BME680_OSP_SEL UINT16_C(2) |
||||
#define BME680_OSH_SEL UINT16_C(4) |
||||
#define BME680_GAS_MEAS_SEL UINT16_C(8) |
||||
#define BME680_FILTER_SEL UINT16_C(16) |
||||
#define BME680_HCNTRL_SEL UINT16_C(32) |
||||
#define BME680_RUN_GAS_SEL UINT16_C(64) |
||||
#define BME680_NBCONV_SEL UINT16_C(128) |
||||
#define BME680_GAS_SENSOR_SEL (BME680_GAS_MEAS_SEL | BME680_RUN_GAS_SEL | BME680_NBCONV_SEL) |
||||
|
||||
/** Number of conversion settings*/ |
||||
#define BME680_NBCONV_MIN UINT8_C(0) |
||||
#define BME680_NBCONV_MAX UINT8_C(10) |
||||
|
||||
/** Mask definitions */ |
||||
#define BME680_GAS_MEAS_MSK UINT8_C(0x30) |
||||
#define BME680_NBCONV_MSK UINT8_C(0X0F) |
||||
#define BME680_FILTER_MSK UINT8_C(0X1C) |
||||
#define BME680_OST_MSK UINT8_C(0XE0) |
||||
#define BME680_OSP_MSK UINT8_C(0X1C) |
||||
#define BME680_OSH_MSK UINT8_C(0X07) |
||||
#define BME680_HCTRL_MSK UINT8_C(0x08) |
||||
#define BME680_RUN_GAS_MSK UINT8_C(0x10) |
||||
#define BME680_MODE_MSK UINT8_C(0x03) |
||||
#define BME680_RHRANGE_MSK UINT8_C(0x30) |
||||
#define BME680_RSERROR_MSK UINT8_C(0xf0) |
||||
#define BME680_NEW_DATA_MSK UINT8_C(0x80) |
||||
#define BME680_GAS_INDEX_MSK UINT8_C(0x0f) |
||||
#define BME680_GAS_RANGE_MSK UINT8_C(0x0f) |
||||
#define BME680_GASM_VALID_MSK UINT8_C(0x20) |
||||
#define BME680_HEAT_STAB_MSK UINT8_C(0x10) |
||||
#define BME680_MEM_PAGE_MSK UINT8_C(0x10) |
||||
#define BME680_SPI_RD_MSK UINT8_C(0x80) |
||||
#define BME680_SPI_WR_MSK UINT8_C(0x7f) |
||||
#define BME680_BIT_H1_DATA_MSK UINT8_C(0x0F) |
||||
|
||||
/** Bit position definitions for sensor settings */ |
||||
#define BME680_GAS_MEAS_POS UINT8_C(4) |
||||
#define BME680_FILTER_POS UINT8_C(2) |
||||
#define BME680_OST_POS UINT8_C(5) |
||||
#define BME680_OSP_POS UINT8_C(2) |
||||
#define BME680_RUN_GAS_POS UINT8_C(4) |
||||
|
||||
/** Array Index to Field data mapping for Calibration Data*/ |
||||
#define BME680_T2_LSB_REG (1) |
||||
#define BME680_T2_MSB_REG (2) |
||||
#define BME680_T3_REG (3) |
||||
#define BME680_P1_LSB_REG (5) |
||||
#define BME680_P1_MSB_REG (6) |
||||
#define BME680_P2_LSB_REG (7) |
||||
#define BME680_P2_MSB_REG (8) |
||||
#define BME680_P3_REG (9) |
||||
#define BME680_P4_LSB_REG (11) |
||||
#define BME680_P4_MSB_REG (12) |
||||
#define BME680_P5_LSB_REG (13) |
||||
#define BME680_P5_MSB_REG (14) |
||||
#define BME680_P7_REG (15) |
||||
#define BME680_P6_REG (16) |
||||
#define BME680_P8_LSB_REG (19) |
||||
#define BME680_P8_MSB_REG (20) |
||||
#define BME680_P9_LSB_REG (21) |
||||
#define BME680_P9_MSB_REG (22) |
||||
#define BME680_P10_REG (23) |
||||
#define BME680_H2_MSB_REG (25) |
||||
#define BME680_H2_LSB_REG (26) |
||||
#define BME680_H1_LSB_REG (26) |
||||
#define BME680_H1_MSB_REG (27) |
||||
#define BME680_H3_REG (28) |
||||
#define BME680_H4_REG (29) |
||||
#define BME680_H5_REG (30) |
||||
#define BME680_H6_REG (31) |
||||
#define BME680_H7_REG (32) |
||||
#define BME680_T1_LSB_REG (33) |
||||
#define BME680_T1_MSB_REG (34) |
||||
#define BME680_GH2_LSB_REG (35) |
||||
#define BME680_GH2_MSB_REG (36) |
||||
#define BME680_GH1_REG (37) |
||||
#define BME680_GH3_REG (38) |
||||
|
||||
/** BME680 register buffer index settings*/ |
||||
#define BME680_REG_FILTER_INDEX UINT8_C(5) |
||||
#define BME680_REG_TEMP_INDEX UINT8_C(4) |
||||
#define BME680_REG_PRES_INDEX UINT8_C(4) |
||||
#define BME680_REG_HUM_INDEX UINT8_C(2) |
||||
#define BME680_REG_NBCONV_INDEX UINT8_C(1) |
||||
#define BME680_REG_RUN_GAS_INDEX UINT8_C(1) |
||||
#define BME680_REG_HCTRL_INDEX UINT8_C(0) |
||||
|
||||
/** Macro to combine two 8 bit data's to form a 16 bit data */ |
||||
#define BME680_CONCAT_BYTES(msb, lsb) (((uint16_t)msb << 8) | (uint16_t)lsb) |
||||
|
||||
/** Macro to SET and GET BITS of a register */ |
||||
#define BME680_SET_BITS(reg_data, bitname, data) \ |
||||
((reg_data & ~(bitname##_MSK)) | \
|
||||
((data << bitname##_POS) & bitname##_MSK)) |
||||
#define BME680_GET_BITS(reg_data, bitname) ((reg_data & (bitname##_MSK)) >> \ |
||||
(bitname##_POS)) |
||||
|
||||
/** Macro variant to handle the bitname position if it is zero */ |
||||
#define BME680_SET_BITS_POS_0(reg_data, bitname, data) \ |
||||
((reg_data & ~(bitname##_MSK)) | \
|
||||
(data & bitname##_MSK)) |
||||
#define BME680_GET_BITS_POS_0(reg_data, bitname) (reg_data & (bitname##_MSK)) |
||||
|
||||
/** Type definitions */ |
||||
/*
|
||||
* Generic communication function pointer |
||||
* @param[in] dev_id: Place holder to store the id of the device structure |
||||
* Can be used to store the index of the Chip select or |
||||
* I2C address of the device. |
||||
* @param[in] reg_addr: Used to select the register the where data needs to |
||||
* be read from or written to. |
||||
* @param[in/out] reg_data: Data array to read/write |
||||
* @param[in] len: Length of the data array |
||||
*/ |
||||
typedef int8_t (*bme680_com_fptr_t)(uint8_t dev_id, uint8_t reg_addr, uint8_t *data, uint16_t len); |
||||
|
||||
/*
|
||||
* Delay function pointer |
||||
* @param[in] period: Time period in milliseconds |
||||
*/ |
||||
typedef void (*bme680_delay_fptr_t)(uint32_t period); |
||||
|
||||
/*!
|
||||
* @brief Interface selection Enumerations |
||||
*/ |
||||
enum bme680_intf { |
||||
/*! SPI interface */ |
||||
BME680_SPI_INTF, |
||||
/*! I2C interface */ |
||||
BME680_I2C_INTF |
||||
}; |
||||
|
||||
/* structure definitions */ |
||||
/*!
|
||||
* @brief Sensor field data structure |
||||
*/ |
||||
struct bme680_field_data { |
||||
/*! Contains new_data, gasm_valid & heat_stab */ |
||||
uint8_t status; |
||||
/*! The index of the heater profile used */ |
||||
uint8_t gas_index; |
||||
/*! Measurement index to track order */ |
||||
uint8_t meas_index; |
||||
/*! Temperature in degree celsius x100 */ |
||||
int16_t temperature; |
||||
/*! Pressure in Pascal */ |
||||
uint32_t pressure; |
||||
/*! Humidity in % relative humidity x1000 */ |
||||
uint32_t humidity; |
||||
/*! Gas resistance in Ohms */ |
||||
uint32_t gas_resistance; |
||||
}; |
||||
|
||||
/*!
|
||||
* @brief Structure to hold the Calibration data |
||||
*/ |
||||
struct bme680_calib_data { |
||||
/*! Variable to store calibrated humidity data */ |
||||
uint16_t par_h1; |
||||
/*! Variable to store calibrated humidity data */ |
||||
uint16_t par_h2; |
||||
/*! Variable to store calibrated humidity data */ |
||||
int8_t par_h3; |
||||
/*! Variable to store calibrated humidity data */ |
||||
int8_t par_h4; |
||||
/*! Variable to store calibrated humidity data */ |
||||
int8_t par_h5; |
||||
/*! Variable to store calibrated humidity data */ |
||||
uint8_t par_h6; |
||||
/*! Variable to store calibrated humidity data */ |
||||
int8_t par_h7; |
||||
/*! Variable to store calibrated gas data */ |
||||
int8_t par_gh1; |
||||
/*! Variable to store calibrated gas data */ |
||||
int16_t par_gh2; |
||||
/*! Variable to store calibrated gas data */ |
||||
int8_t par_gh3; |
||||
/*! Variable to store calibrated temperature data */ |
||||
uint16_t par_t1; |
||||
/*! Variable to store calibrated temperature data */ |
||||
int16_t par_t2; |
||||
/*! Variable to store calibrated temperature data */ |
||||
int8_t par_t3; |
||||
/*! Variable to store calibrated pressure data */ |
||||
uint16_t par_p1; |
||||
/*! Variable to store calibrated pressure data */ |
||||
int16_t par_p2; |
||||
/*! Variable to store calibrated pressure data */ |
||||
int8_t par_p3; |
||||
/*! Variable to store calibrated pressure data */ |
||||
int16_t par_p4; |
||||
/*! Variable to store calibrated pressure data */ |
||||
int16_t par_p5; |
||||
/*! Variable to store calibrated pressure data */ |
||||
int8_t par_p6; |
||||
/*! Variable to store calibrated pressure data */ |
||||
int8_t par_p7; |
||||
/*! Variable to store calibrated pressure data */ |
||||
int16_t par_p8; |
||||
/*! Variable to store calibrated pressure data */ |
||||
int16_t par_p9; |
||||
/*! Variable to store calibrated pressure data */ |
||||
uint8_t par_p10; |
||||
/*! Variable to store t_fine size */ |
||||
int32_t t_fine; |
||||
/*! Variable to store heater resistance range */ |
||||
uint8_t res_heat_range; |
||||
/*! Variable to store heater resistance value */ |
||||
int8_t res_heat_val; |
||||
/*! Variable to store error range */ |
||||
int8_t range_sw_err; |
||||
}; |
||||
|
||||
/*!
|
||||
* @brief BME680 sensor settings structure which comprises of ODR, |
||||
* over-sampling and filter settings. |
||||
*/ |
||||
struct bme680_tph_sett { |
||||
/*! Humidity oversampling */ |
||||
uint8_t os_hum; |
||||
/*! Temperature oversampling */ |
||||
uint8_t os_temp; |
||||
/*! Pressure oversampling */ |
||||
uint8_t os_pres; |
||||
/*! Filter coefficient */ |
||||
uint8_t filter; |
||||
}; |
||||
|
||||
/*!
|
||||
* @brief BME680 gas sensor which comprises of gas settings |
||||
* and status parameters |
||||
*/ |
||||
struct bme680_gas_sett { |
||||
/*! Variable to store nb conversion */ |
||||
uint8_t nb_conv; |
||||
/*! Variable to store heater control */ |
||||
uint8_t heatr_ctrl; |
||||
/*! Run gas enable value */ |
||||
uint8_t run_gas; |
||||
/*! Pointer to store heater temperature */ |
||||
uint16_t heatr_temp; |
||||
/*! Pointer to store duration profile */ |
||||
uint16_t heatr_dur; |
||||
}; |
||||
|
||||
/*!
|
||||
* @brief BME680 device structure |
||||
*/ |
||||
struct bme680_dev { |
||||
/*! Chip Id */ |
||||
uint8_t chip_id; |
||||
/*! Device Id */ |
||||
uint8_t dev_id; |
||||
/*! SPI/I2C interface */ |
||||
enum bme680_intf intf; |
||||
/*! Memory page used */ |
||||
uint8_t mem_page; |
||||
/*! Ambient temperature in Degree C*/ |
||||
int8_t amb_temp; |
||||
/*! Sensor calibration data */ |
||||
struct bme680_calib_data calib; |
||||
/*! Sensor settings */ |
||||
struct bme680_tph_sett tph_sett; |
||||
/*! Gas Sensor settings */ |
||||
struct bme680_gas_sett gas_sett; |
||||
/*! Sensor power modes */ |
||||
uint8_t power_mode; |
||||
/*! New sensor fields */ |
||||
uint8_t new_fields; |
||||
/*! Store the info messages */ |
||||
uint8_t info_msg; |
||||
/*! Burst read structure */ |
||||
bme680_com_fptr_t read; |
||||
/*! Burst write structure */ |
||||
bme680_com_fptr_t write; |
||||
/*! Delay in ms */ |
||||
bme680_delay_fptr_t delay_ms; |
||||
/*! Communication function result */ |
||||
int8_t com_rslt; |
||||
}; |
||||
|
||||
|
||||
|
||||
#endif /* BME680_DEFS_H_ */ |
||||
/** @}*/ |
||||
/** @}*/ |
@ -0,0 +1,323 @@ |
||||
/**
|
||||
* Copyright (c) 2021 Bosch Sensortec GmbH. All rights reserved. |
||||
* |
||||
* BSD-3-Clause |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* |
||||
* 2. Redistributions in binary form must reproduce the above copyright |
||||
* notice, this list of conditions and the following disclaimer in the |
||||
* documentation and/or other materials provided with the distribution. |
||||
* |
||||
* 3. Neither the name of the copyright holder nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
||||
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
* POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
* @file bme68x.h |
||||
* @date 2021-11-09 |
||||
* @version v4.4.7 |
||||
* |
||||
*/ |
||||
|
||||
/*!
|
||||
* @defgroup bme68x BME68X |
||||
* @brief <a href="https://www.bosch-sensortec.com/bst/products/all_products/bme680">Product Overview</a> |
||||
* and <a href="https://github.com/BoschSensortec/BME68x-Sensor-API">Sensor API Source Code</a> |
||||
*/ |
||||
|
||||
#ifndef BME68X_H_ |
||||
#define BME68X_H_ |
||||
|
||||
#include "bme68x_defs.h" |
||||
|
||||
/* CPP guard */ |
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/**
|
||||
* \ingroup bme68x |
||||
* \defgroup bme68xApiInit Initialization |
||||
* @brief Initialize the sensor and device structure |
||||
*/ |
||||
|
||||
/*!
|
||||
* \ingroup bme68xApiInit |
||||
* \page bme68x_api_bme68x_init bme68x_init |
||||
* \code |
||||
* int8_t bme68x_init(struct bme68x_dev *dev); |
||||
* \endcode |
||||
* @details This API reads the chip-id of the sensor which is the first step to |
||||
* verify the sensor and also calibrates the sensor |
||||
* As this API is the entry point, call this API before using other APIs. |
||||
* |
||||
* @param[in,out] dev : Structure instance of bme68x_dev |
||||
* |
||||
* @return Result of API execution status |
||||
* @retval 0 -> Success |
||||
* @retval < 0 -> Fail |
||||
*/ |
||||
int8_t bme68x_init(struct bme68x_dev *dev); |
||||
|
||||
/**
|
||||
* \ingroup bme68x |
||||
* \defgroup bme68xApiRegister Registers |
||||
* @brief Generic API for accessing sensor registers |
||||
*/ |
||||
|
||||
/*!
|
||||
* \ingroup bme68xApiRegister |
||||
* \page bme68x_api_bme68x_set_regs bme68x_set_regs |
||||
* \code |
||||
* int8_t bme68x_set_regs(const uint8_t reg_addr, const uint8_t *reg_data, uint32_t len, struct bme68x_dev *dev) |
||||
* \endcode |
||||
* @details This API writes the given data to the register address of the sensor |
||||
* |
||||
* @param[in] reg_addr : Register addresses to where the data is to be written |
||||
* @param[in] reg_data : Pointer to data buffer which is to be written |
||||
* in the reg_addr of sensor. |
||||
* @param[in] len : No of bytes of data to write |
||||
* @param[in,out] dev : Structure instance of bme68x_dev |
||||
* |
||||
* @return Result of API execution status |
||||
* @retval 0 -> Success |
||||
* @retval < 0 -> Fail |
||||
*/ |
||||
int8_t bme68x_set_regs(const uint8_t *reg_addr, const uint8_t *reg_data, uint32_t len, struct bme68x_dev *dev); |
||||
|
||||
/*!
|
||||
* \ingroup bme68xApiRegister |
||||
* \page bme68x_api_bme68x_get_regs bme68x_get_regs |
||||
* \code |
||||
* int8_t bme68x_get_regs(uint8_t reg_addr, uint8_t *reg_data, uint32_t len, struct bme68x_dev *dev) |
||||
* \endcode |
||||
* @details This API reads the data from the given register address of sensor. |
||||
* |
||||
* @param[in] reg_addr : Register address from where the data to be read |
||||
* @param[out] reg_data : Pointer to data buffer to store the read data. |
||||
* @param[in] len : No of bytes of data to be read. |
||||
* @param[in,out] dev : Structure instance of bme68x_dev. |
||||
* |
||||
* @return Result of API execution status |
||||
* @retval 0 -> Success |
||||
* @retval < 0 -> Fail |
||||
*/ |
||||
int8_t bme68x_get_regs(uint8_t reg_addr, uint8_t *reg_data, uint32_t len, struct bme68x_dev *dev); |
||||
|
||||
/**
|
||||
* \ingroup bme68x |
||||
* \defgroup bme68xApiSystem System |
||||
* @brief API that performs system-level operations |
||||
*/ |
||||
|
||||
/*!
|
||||
* \ingroup bme68xApiSystem |
||||
* \page bme68x_api_bme68x_soft_reset bme68x_soft_reset |
||||
* \code |
||||
* int8_t bme68x_soft_reset(struct bme68x_dev *dev); |
||||
* \endcode |
||||
* @details This API soft-resets the sensor. |
||||
* |
||||
* @param[in,out] dev : Structure instance of bme68x_dev. |
||||
* |
||||
* @return Result of API execution status |
||||
* @retval 0 -> Success |
||||
* @retval < 0 -> Fail |
||||
*/ |
||||
int8_t bme68x_soft_reset(struct bme68x_dev *dev); |
||||
|
||||
/**
|
||||
* \ingroup bme68x |
||||
* \defgroup bme68xApiOm Operation mode |
||||
* @brief API to configure operation mode |
||||
*/ |
||||
|
||||
/*!
|
||||
* \ingroup bme68xApiOm |
||||
* \page bme68x_api_bme68x_set_op_mode bme68x_set_op_mode |
||||
* \code |
||||
* int8_t bme68x_set_op_mode(const uint8_t op_mode, struct bme68x_dev *dev); |
||||
* \endcode |
||||
* @details This API is used to set the operation mode of the sensor |
||||
* @param[in] op_mode : Desired operation mode. |
||||
* @param[in] dev : Structure instance of bme68x_dev |
||||
* |
||||
* @return Result of API execution status |
||||
* @retval 0 -> Success |
||||
* @retval < 0 -> Fail |
||||
*/ |
||||
int8_t bme68x_set_op_mode(const uint8_t op_mode, struct bme68x_dev *dev); |
||||
|
||||
/*!
|
||||
* \ingroup bme68xApiOm |
||||
* \page bme68x_api_bme68x_get_op_mode bme68x_get_op_mode |
||||
* \code |
||||
* int8_t bme68x_get_op_mode(uint8_t *op_mode, struct bme68x_dev *dev); |
||||
* \endcode |
||||
* @details This API is used to get the operation mode of the sensor. |
||||
* |
||||
* @param[out] op_mode : Desired operation mode. |
||||
* @param[in,out] dev : Structure instance of bme68x_dev |
||||
* |
||||
* @return Result of API execution status |
||||
* @retval 0 -> Success |
||||
* @retval < 0 -> Fail |
||||
*/ |
||||
int8_t bme68x_get_op_mode(uint8_t *op_mode, struct bme68x_dev *dev); |
||||
|
||||
/*!
|
||||
* \ingroup bme68xApiConfig |
||||
* \page bme68x_api_bme68x_get_meas_dur bme68x_get_meas_dur |
||||
* \code |
||||
* uint32_t bme68x_get_meas_dur(const uint8_t op_mode, struct bme68x_conf *conf, struct bme68x_dev *dev); |
||||
* \endcode |
||||
* @details This API is used to get the remaining duration that can be used for heating. |
||||
* |
||||
* @param[in] op_mode : Desired operation mode. |
||||
* @param[in] conf : Desired sensor configuration. |
||||
* @param[in] dev : Structure instance of bme68x_dev |
||||
* |
||||
* @return Measurement duration calculated in microseconds |
||||
*/ |
||||
uint32_t bme68x_get_meas_dur(const uint8_t op_mode, struct bme68x_conf *conf, struct bme68x_dev *dev); |
||||
|
||||
/**
|
||||
* \ingroup bme68x |
||||
* \defgroup bme68xApiData Data Read out |
||||
* @brief Read our data from the sensor |
||||
*/ |
||||
|
||||
/*!
|
||||
* \ingroup bme68xApiData |
||||
* \page bme68x_api_bme68x_get_data bme68x_get_data |
||||
* \code |
||||
* int8_t bme68x_get_data(uint8_t op_mode, struct bme68x_data *data, uint8_t *n_data, struct bme68x_dev *dev); |
||||
* \endcode |
||||
* @details This API reads the pressure, temperature and humidity and gas data |
||||
* from the sensor, compensates the data and store it in the bme68x_data |
||||
* structure instance passed by the user. |
||||
* |
||||
* @param[in] op_mode : Expected operation mode. |
||||
* @param[out] data : Structure instance to hold the data. |
||||
* @param[out] n_data : Number of data instances available. |
||||
* @param[in,out] dev : Structure instance of bme68x_dev |
||||
* |
||||
* @return Result of API execution status |
||||
* @retval 0 -> Success |
||||
* @retval < 0 -> Fail |
||||
*/ |
||||
int8_t bme68x_get_data(uint8_t op_mode, struct bme68x_data *data, uint8_t *n_data, struct bme68x_dev *dev); |
||||
|
||||
/**
|
||||
* \ingroup bme68x |
||||
* \defgroup bme68xApiConfig Configuration |
||||
* @brief Configuration API of sensor |
||||
*/ |
||||
|
||||
/*!
|
||||
* \ingroup bme68xApiConfig |
||||
* \page bme68x_api_bme68x_set_conf bme68x_set_conf |
||||
* \code |
||||
* int8_t bme68x_set_conf(struct bme68x_conf *conf, struct bme68x_dev *dev); |
||||
* \endcode |
||||
* @details This API is used to set the oversampling, filter and odr configuration |
||||
* |
||||
* @param[in] conf : Desired sensor configuration. |
||||
* @param[in,out] dev : Structure instance of bme68x_dev. |
||||
* |
||||
* @return Result of API execution status |
||||
* @retval 0 -> Success |
||||
* @retval < 0 -> Fail |
||||
*/ |
||||
int8_t bme68x_set_conf(struct bme68x_conf *conf, struct bme68x_dev *dev); |
||||
|
||||
/*!
|
||||
* \ingroup bme68xApiConfig |
||||
* \page bme68x_api_bme68x_get_conf bme68x_get_conf |
||||
* \code |
||||
* int8_t bme68x_get_conf(struct bme68x_conf *conf, struct bme68x_dev *dev); |
||||
* \endcode |
||||
* @details This API is used to get the oversampling, filter and odr |
||||
* configuration |
||||
* |
||||
* @param[out] conf : Present sensor configuration. |
||||
* @param[in,out] dev : Structure instance of bme68x_dev. |
||||
* |
||||
* @return Result of API execution status |
||||
* @retval 0 -> Success |
||||
* @retval < 0 -> Fail |
||||
*/ |
||||
int8_t bme68x_get_conf(struct bme68x_conf *conf, struct bme68x_dev *dev); |
||||
|
||||
/*!
|
||||
* \ingroup bme68xApiConfig |
||||
* \page bme68x_api_bme68x_set_heatr_conf bme68x_set_heatr_conf |
||||
* \code |
||||
* int8_t bme68x_set_heatr_conf(uint8_t op_mode, const struct bme68x_heatr_conf *conf, struct bme68x_dev *dev); |
||||
* \endcode |
||||
* @details This API is used to set the gas configuration of the sensor. |
||||
* |
||||
* @param[in] op_mode : Expected operation mode of the sensor. |
||||
* @param[in] conf : Desired heating configuration. |
||||
* @param[in,out] dev : Structure instance of bme68x_dev. |
||||
* |
||||
* @return Result of API execution status |
||||
* @retval 0 -> Success |
||||
* @retval < 0 -> Fail |
||||
*/ |
||||
int8_t bme68x_set_heatr_conf(uint8_t op_mode, const struct bme68x_heatr_conf *conf, struct bme68x_dev *dev); |
||||
|
||||
/*!
|
||||
* \ingroup bme68xApiConfig |
||||
* \page bme68x_api_bme68x_get_heatr_conf bme68x_get_heatr_conf |
||||
* \code |
||||
* int8_t bme68x_get_heatr_conf(const struct bme68x_heatr_conf *conf, struct bme68x_dev *dev); |
||||
* \endcode |
||||
* @details This API is used to get the gas configuration of the sensor. |
||||
* |
||||
* @param[out] conf : Current configurations of the gas sensor. |
||||
* @param[in,out] dev : Structure instance of bme68x_dev. |
||||
* |
||||
* @return Result of API execution status |
||||
* @retval 0 -> Success |
||||
* @retval < 0 -> Fail |
||||
*/ |
||||
int8_t bme68x_get_heatr_conf(const struct bme68x_heatr_conf *conf, struct bme68x_dev *dev); |
||||
|
||||
/*!
|
||||
* \ingroup bme68xApiSystem |
||||
* \page bme68x_api_bme68x_selftest_check bme68x_selftest_check |
||||
* \code |
||||
* int8_t bme68x_selftest_check(const struct bme68x_dev *dev); |
||||
* \endcode |
||||
* @details This API performs Self-test of low gas variant of BME68X |
||||
* |
||||
* @param[in, out] dev : Structure instance of bme68x_dev |
||||
* |
||||
* @return Result of API execution status |
||||
* @retval 0 -> Success |
||||
* @retval < 0 -> Fail |
||||
*/ |
||||
int8_t bme68x_selftest_check(const struct bme68x_dev *dev); |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif /* End of CPP guard */ |
||||
#endif /* BME68X_H_ */ |
@ -0,0 +1,972 @@ |
||||
/**
|
||||
* Copyright (c) 2021 Bosch Sensortec GmbH. All rights reserved. |
||||
* |
||||
* BSD-3-Clause |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* |
||||
* 2. Redistributions in binary form must reproduce the above copyright |
||||
* notice, this list of conditions and the following disclaimer in the |
||||
* documentation and/or other materials provided with the distribution. |
||||
* |
||||
* 3. Neither the name of the copyright holder nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
||||
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
* POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
* @file bme68x_defs.h |
||||
* @date 2021-11-09 |
||||
* @version v4.4.7 |
||||
* |
||||
*/ |
||||
|
||||
/*! @cond DOXYGEN_SUPRESS */ |
||||
|
||||
#ifndef BME68X_DEFS_H_ |
||||
#define BME68X_DEFS_H_ |
||||
|
||||
/********************************************************* */ |
||||
/*! Header includes */ |
||||
/********************************************************* */ |
||||
#ifdef __KERNEL__ |
||||
#include <linux/types.h> |
||||
#include <linux/kernel.h> |
||||
#else |
||||
#include <stdint.h> |
||||
#include <stddef.h> |
||||
#endif |
||||
|
||||
/********************************************************* */ |
||||
/*! Common Macros */ |
||||
/********************************************************* */ |
||||
#ifdef __KERNEL__ |
||||
#if !defined(UINT8_C) && !defined(INT8_C) |
||||
#define INT8_C(x) S8_C(x) |
||||
#define UINT8_C(x) U8_C(x) |
||||
#endif |
||||
|
||||
#if !defined(UINT16_C) && !defined(INT16_C) |
||||
#define INT16_C(x) S16_C(x) |
||||
#define UINT16_C(x) U16_C(x) |
||||
#endif |
||||
|
||||
#if !defined(INT32_C) && !defined(UINT32_C) |
||||
#define INT32_C(x) S32_C(x) |
||||
#define UINT32_C(x) U32_C(x) |
||||
#endif |
||||
|
||||
#if !defined(INT64_C) && !defined(UINT64_C) |
||||
#define INT64_C(x) S64_C(x) |
||||
#define UINT64_C(x) U64_C(x) |
||||
#endif |
||||
#endif |
||||
|
||||
/*! C standard macros */ |
||||
#ifndef NULL |
||||
#ifdef __cplusplus |
||||
#define NULL 0 |
||||
#else |
||||
#define NULL ((void *) 0) |
||||
#endif |
||||
#endif |
||||
|
||||
#ifndef BME68X_DO_NOT_USE_FPU |
||||
|
||||
/* Comment or un-comment the macro to provide floating point data output */ |
||||
#define BME68X_USE_FPU |
||||
#endif |
||||
|
||||
/* Period between two polls (value can be given by user) */ |
||||
#ifndef BME68X_PERIOD_POLL |
||||
#define BME68X_PERIOD_POLL UINT32_C(10000) |
||||
#endif |
||||
|
||||
/* BME68X unique chip identifier */ |
||||
#define BME68X_CHIP_ID UINT8_C(0x61) |
||||
|
||||
/* Period for a soft reset */ |
||||
#define BME68X_PERIOD_RESET UINT32_C(10000) |
||||
|
||||
/* BME68X lower I2C address */ |
||||
#define BME68X_I2C_ADDR_LOW UINT8_C(0x76) |
||||
|
||||
/* BME68X higher I2C address */ |
||||
#define BME68X_I2C_ADDR_HIGH UINT8_C(0x77) |
||||
|
||||
/* Soft reset command */ |
||||
#define BME68X_SOFT_RESET_CMD UINT8_C(0xb6) |
||||
|
||||
/* Return code definitions */ |
||||
/* Success */ |
||||
#define BME68X_OK INT8_C(0) |
||||
|
||||
/* Errors */ |
||||
/* Null pointer passed */ |
||||
#define BME68X_E_NULL_PTR INT8_C(-1) |
||||
|
||||
/* Communication failure */ |
||||
#define BME68X_E_COM_FAIL INT8_C(-2) |
||||
|
||||
/* Sensor not found */ |
||||
#define BME68X_E_DEV_NOT_FOUND INT8_C(-3) |
||||
|
||||
/* Incorrect length parameter */ |
||||
#define BME68X_E_INVALID_LENGTH INT8_C(-4) |
||||
|
||||
/* Self test fail error */ |
||||
#define BME68X_E_SELF_TEST INT8_C(-5) |
||||
|
||||
/* Warnings */ |
||||
/* Define a valid operation mode */ |
||||
#define BME68X_W_DEFINE_OP_MODE INT8_C(1) |
||||
|
||||
/* No new data was found */ |
||||
#define BME68X_W_NO_NEW_DATA INT8_C(2) |
||||
|
||||
/* Define the shared heating duration */ |
||||
#define BME68X_W_DEFINE_SHD_HEATR_DUR INT8_C(3) |
||||
|
||||
/* Information - only available via bme68x_dev.info_msg */ |
||||
#define BME68X_I_PARAM_CORR UINT8_C(1) |
||||
|
||||
/* Register map addresses in I2C */ |
||||
/* Register for 3rd group of coefficients */ |
||||
#define BME68X_REG_COEFF3 UINT8_C(0x00) |
||||
|
||||
/* 0th Field address*/ |
||||
#define BME68X_REG_FIELD0 UINT8_C(0x1d) |
||||
|
||||
/* 0th Current DAC address*/ |
||||
#define BME68X_REG_IDAC_HEAT0 UINT8_C(0x50) |
||||
|
||||
/* 0th Res heat address */ |
||||
#define BME68X_REG_RES_HEAT0 UINT8_C(0x5a) |
||||
|
||||
/* 0th Gas wait address */ |
||||
#define BME68X_REG_GAS_WAIT0 UINT8_C(0x64) |
||||
|
||||
/* Shared heating duration address */ |
||||
#define BME68X_REG_SHD_HEATR_DUR UINT8_C(0x6E) |
||||
|
||||
/* CTRL_GAS_0 address */ |
||||
#define BME68X_REG_CTRL_GAS_0 UINT8_C(0x70) |
||||
|
||||
/* CTRL_GAS_1 address */ |
||||
#define BME68X_REG_CTRL_GAS_1 UINT8_C(0x71) |
||||
|
||||
/* CTRL_HUM address */ |
||||
#define BME68X_REG_CTRL_HUM UINT8_C(0x72) |
||||
|
||||
/* CTRL_MEAS address */ |
||||
#define BME68X_REG_CTRL_MEAS UINT8_C(0x74) |
||||
|
||||
/* CONFIG address */ |
||||
#define BME68X_REG_CONFIG UINT8_C(0x75) |
||||
|
||||
/* MEM_PAGE address */ |
||||
#define BME68X_REG_MEM_PAGE UINT8_C(0xf3) |
||||
|
||||
/* Unique ID address */ |
||||
#define BME68X_REG_UNIQUE_ID UINT8_C(0x83) |
||||
|
||||
/* Register for 1st group of coefficients */ |
||||
#define BME68X_REG_COEFF1 UINT8_C(0x8a) |
||||
|
||||
/* Chip ID address */ |
||||
#define BME68X_REG_CHIP_ID UINT8_C(0xd0) |
||||
|
||||
/* Soft reset address */ |
||||
#define BME68X_REG_SOFT_RESET UINT8_C(0xe0) |
||||
|
||||
/* Register for 2nd group of coefficients */ |
||||
#define BME68X_REG_COEFF2 UINT8_C(0xe1) |
||||
|
||||
/* Variant ID Register */ |
||||
#define BME68X_REG_VARIANT_ID UINT8_C(0xF0) |
||||
|
||||
/* Enable/Disable macros */ |
||||
|
||||
/* Enable */ |
||||
#define BME68X_ENABLE UINT8_C(0x01) |
||||
|
||||
/* Disable */ |
||||
#define BME68X_DISABLE UINT8_C(0x00) |
||||
|
||||
/* Variant ID macros */ |
||||
|
||||
/* Low Gas variant */ |
||||
#define BME68X_VARIANT_GAS_LOW UINT8_C(0x00) |
||||
|
||||
/* High Gas variant */ |
||||
#define BME68X_VARIANT_GAS_HIGH UINT8_C(0x01) |
||||
|
||||
/* Oversampling setting macros */ |
||||
|
||||
/* Switch off measurement */ |
||||
#define BME68X_OS_NONE UINT8_C(0) |
||||
|
||||
/* Perform 1 measurement */ |
||||
#define BME68X_OS_1X UINT8_C(1) |
||||
|
||||
/* Perform 2 measurements */ |
||||
#define BME68X_OS_2X UINT8_C(2) |
||||
|
||||
/* Perform 4 measurements */ |
||||
#define BME68X_OS_4X UINT8_C(3) |
||||
|
||||
/* Perform 8 measurements */ |
||||
#define BME68X_OS_8X UINT8_C(4) |
||||
|
||||
/* Perform 16 measurements */ |
||||
#define BME68X_OS_16X UINT8_C(5) |
||||
|
||||
/* IIR Filter settings */ |
||||
|
||||
/* Switch off the filter */ |
||||
#define BME68X_FILTER_OFF UINT8_C(0) |
||||
|
||||
/* Filter coefficient of 2 */ |
||||
#define BME68X_FILTER_SIZE_1 UINT8_C(1) |
||||
|
||||
/* Filter coefficient of 4 */ |
||||
#define BME68X_FILTER_SIZE_3 UINT8_C(2) |
||||
|
||||
/* Filter coefficient of 8 */ |
||||
#define BME68X_FILTER_SIZE_7 UINT8_C(3) |
||||
|
||||
/* Filter coefficient of 16 */ |
||||
#define BME68X_FILTER_SIZE_15 UINT8_C(4) |
||||
|
||||
/* Filter coefficient of 32 */ |
||||
#define BME68X_FILTER_SIZE_31 UINT8_C(5) |
||||
|
||||
/* Filter coefficient of 64 */ |
||||
#define BME68X_FILTER_SIZE_63 UINT8_C(6) |
||||
|
||||
/* Filter coefficient of 128 */ |
||||
#define BME68X_FILTER_SIZE_127 UINT8_C(7) |
||||
|
||||
/* ODR/Standby time macros */ |
||||
|
||||
/* Standby time of 0.59ms */ |
||||
#define BME68X_ODR_0_59_MS UINT8_C(0) |
||||
|
||||
/* Standby time of 62.5ms */ |
||||
#define BME68X_ODR_62_5_MS UINT8_C(1) |
||||
|
||||
/* Standby time of 125ms */ |
||||
#define BME68X_ODR_125_MS UINT8_C(2) |
||||
|
||||
/* Standby time of 250ms */ |
||||
#define BME68X_ODR_250_MS UINT8_C(3) |
||||
|
||||
/* Standby time of 500ms */ |
||||
#define BME68X_ODR_500_MS UINT8_C(4) |
||||
|
||||
/* Standby time of 1s */ |
||||
#define BME68X_ODR_1000_MS UINT8_C(5) |
||||
|
||||
/* Standby time of 10ms */ |
||||
#define BME68X_ODR_10_MS UINT8_C(6) |
||||
|
||||
/* Standby time of 20ms */ |
||||
#define BME68X_ODR_20_MS UINT8_C(7) |
||||
|
||||
/* No standby time */ |
||||
#define BME68X_ODR_NONE UINT8_C(8) |
||||
|
||||
/* Operating mode macros */ |
||||
|
||||
/* Sleep operation mode */ |
||||
#define BME68X_SLEEP_MODE UINT8_C(0) |
||||
|
||||
/* Forced operation mode */ |
||||
#define BME68X_FORCED_MODE UINT8_C(1) |
||||
|
||||
/* Parallel operation mode */ |
||||
#define BME68X_PARALLEL_MODE UINT8_C(2) |
||||
|
||||
/* Sequential operation mode */ |
||||
#define BME68X_SEQUENTIAL_MODE UINT8_C(3) |
||||
|
||||
/* SPI page macros */ |
||||
|
||||
/* SPI memory page 0 */ |
||||
#define BME68X_MEM_PAGE0 UINT8_C(0x10) |
||||
|
||||
/* SPI memory page 1 */ |
||||
#define BME68X_MEM_PAGE1 UINT8_C(0x00) |
||||
|
||||
/* Coefficient index macros */ |
||||
|
||||
/* Length for all coefficients */ |
||||
#define BME68X_LEN_COEFF_ALL UINT8_C(42) |
||||
|
||||
/* Length for 1st group of coefficients */ |
||||
#define BME68X_LEN_COEFF1 UINT8_C(23) |
||||
|
||||
/* Length for 2nd group of coefficients */ |
||||
#define BME68X_LEN_COEFF2 UINT8_C(14) |
||||
|
||||
/* Length for 3rd group of coefficients */ |
||||
#define BME68X_LEN_COEFF3 UINT8_C(5) |
||||
|
||||
/* Length of the field */ |
||||
#define BME68X_LEN_FIELD UINT8_C(17) |
||||
|
||||
/* Length between two fields */ |
||||
#define BME68X_LEN_FIELD_OFFSET UINT8_C(17) |
||||
|
||||
/* Length of the configuration register */ |
||||
#define BME68X_LEN_CONFIG UINT8_C(5) |
||||
|
||||
/* Length of the interleaved buffer */ |
||||
#define BME68X_LEN_INTERLEAVE_BUFF UINT8_C(20) |
||||
|
||||
/* Coefficient index macros */ |
||||
|
||||
/* Coefficient T2 LSB position */ |
||||
#define BME68X_IDX_T2_LSB (0) |
||||
|
||||
/* Coefficient T2 MSB position */ |
||||
#define BME68X_IDX_T2_MSB (1) |
||||
|
||||
/* Coefficient T3 position */ |
||||
#define BME68X_IDX_T3 (2) |
||||
|
||||
/* Coefficient P1 LSB position */ |
||||
#define BME68X_IDX_P1_LSB (4) |
||||
|
||||
/* Coefficient P1 MSB position */ |
||||
#define BME68X_IDX_P1_MSB (5) |
||||
|
||||
/* Coefficient P2 LSB position */ |
||||
#define BME68X_IDX_P2_LSB (6) |
||||
|
||||
/* Coefficient P2 MSB position */ |
||||
#define BME68X_IDX_P2_MSB (7) |
||||
|
||||
/* Coefficient P3 position */ |
||||
#define BME68X_IDX_P3 (8) |
||||
|
||||
/* Coefficient P4 LSB position */ |
||||
#define BME68X_IDX_P4_LSB (10) |
||||
|
||||
/* Coefficient P4 MSB position */ |
||||
#define BME68X_IDX_P4_MSB (11) |
||||
|
||||
/* Coefficient P5 LSB position */ |
||||
#define BME68X_IDX_P5_LSB (12) |
||||
|
||||
/* Coefficient P5 MSB position */ |
||||
#define BME68X_IDX_P5_MSB (13) |
||||
|
||||