394 lines
12 KiB
C
394 lines
12 KiB
C
/**
|
|
* 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 bmp2.h
|
|
* @date 2021-05-21
|
|
* @version v1.0.1
|
|
*
|
|
*/
|
|
|
|
/*! @file bmp2.h
|
|
* @brief Sensor driver for BMP2 sensor
|
|
*/
|
|
|
|
/*!
|
|
* @defgroup bmp2 BMP2
|
|
*/
|
|
|
|
#ifndef _BMP2_H
|
|
#define _BMP2_H
|
|
|
|
/*! CPP guard */
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/****************************************************************************/
|
|
|
|
/*! Header files
|
|
****************************************************************************/
|
|
#include "bmp2_defs.h"
|
|
|
|
/***************************************************************************/
|
|
|
|
/*! BMP2 User Interface function prototypes
|
|
****************************************************************************/
|
|
|
|
/**
|
|
* \ingroup bmp2
|
|
* \defgroup bmp2ApiInit Initialization
|
|
* @brief Perform initialization of sensor
|
|
*/
|
|
|
|
/*!
|
|
* \ingroup bmp2ApiInit
|
|
* \page bmp2_api_bmp2_init bmp2_init
|
|
* \code
|
|
* int8_t bmp2_init(struct bmp2_dev *dev);
|
|
* \endcode
|
|
* @details This API is the entry point.
|
|
* It reads the chip-id and calibration data from the sensor.
|
|
*
|
|
* @param[in,out] dev : Structure instance of bmp2_dev
|
|
*
|
|
* @return Result of API execution status.
|
|
*
|
|
* @retval 0 -> Success.
|
|
* @retval < 0 -> Fail.
|
|
*/
|
|
int8_t bmp2_init(struct bmp2_dev *dev);
|
|
|
|
/**
|
|
* \ingroup bmp2
|
|
* \defgroup bmp2ApiRegs Registers
|
|
* @brief Initialize the sensor and device structure
|
|
*/
|
|
|
|
/*!
|
|
* \ingroup bmp2ApiRegs
|
|
* \page bmp2_api_bmp2_get_regs bmp2_get_regs
|
|
* \code
|
|
* int8_t bmp2_get_regs(uint8_t reg_addr, uint8_t *reg_data, uint32_t len, struct bmp2_dev *dev);
|
|
* \endcode
|
|
* @details 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 bmp2_dev.
|
|
*
|
|
* @return Result of API execution status.
|
|
*
|
|
* @retval 0 -> Success.
|
|
* @retval < 0 -> Fail.
|
|
*/
|
|
int8_t bmp2_get_regs(uint8_t reg_addr, uint8_t *reg_data, uint32_t len, struct bmp2_dev *dev);
|
|
|
|
/*!
|
|
* \ingroup bmp2ApiRegs
|
|
* \page bmp2_api_bmp2_set_regs bmp2_set_regs
|
|
* \code
|
|
* int8_t bmp2_set_regs(uint8_t *reg_addr, const uint8_t *reg_data, uint32_t len, struct bmp2_dev *dev);
|
|
* \endcode
|
|
* @details This API writes the given data to the register addresses
|
|
* 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 bmp2_dev.
|
|
*
|
|
* @return Result of API execution status.
|
|
*
|
|
* @retval 0 -> Success.
|
|
* @retval < 0 -> Fail.
|
|
*/
|
|
int8_t bmp2_set_regs(uint8_t *reg_addr, const uint8_t *reg_data, uint32_t len, struct bmp2_dev *dev);
|
|
|
|
/**
|
|
* \ingroup bmp2
|
|
* \defgroup bmp2ApiSoftreset Soft reset
|
|
* @brief Perform self test
|
|
*/
|
|
|
|
/*!
|
|
* \ingroup bmp2ApiSoftreset
|
|
* \page bmp2_api_bmp2_soft_reset bmp2_soft_reset
|
|
* \code
|
|
* int8_t bmp2_soft_reset(struct bmp2_dev *dev);
|
|
* \endcode
|
|
* @details This API triggers the soft reset of the sensor.
|
|
*
|
|
* @param[in] dev : Structure instance of bmp2_dev.
|
|
*
|
|
* @return Result of API execution status.
|
|
*
|
|
* @retval 0 -> Success.
|
|
* @retval < 0 -> Fail.
|
|
*/
|
|
int8_t bmp2_soft_reset(struct bmp2_dev *dev);
|
|
|
|
/**
|
|
* \ingroup bmp2
|
|
* \defgroup bmp2ApiPowermode Power mode
|
|
* @brief Set / Get power mode of the sensor
|
|
*/
|
|
|
|
/*!
|
|
* \ingroup bmp2ApiPowermode
|
|
* \page bmp2_api_bmp2_get_power_mode bmp2_get_power_mode
|
|
* \code
|
|
* int8_t bmp2_get_power_mode(uint8_t *mode, struct bmp2_dev *dev);
|
|
* \endcode
|
|
* @details This API reads the power mode.
|
|
*
|
|
* @param[out] mode : BMP2_POWERMODE_SLEEP, BMP2_POWERMODE_NORMAL,
|
|
* BMP2_POWERMODE_FORCED
|
|
* @param[in] dev : Structure instance of bmp2_dev
|
|
*
|
|
* @return Result of API execution status.
|
|
*
|
|
* @retval 0 -> Success.
|
|
* @retval < 0 -> Fail.
|
|
*/
|
|
int8_t bmp2_get_power_mode(uint8_t *mode, struct bmp2_dev *dev);
|
|
|
|
/*!
|
|
* \ingroup bmp2ApiPowermode
|
|
* \page bmp2_api_bmp2_set_power_mode bmp2_set_power_mode
|
|
* \code
|
|
* int8_t bmp2_set_power_mode(uint8_t mode, const struct bmp2_config *conf, struct bmp2_dev *dev);
|
|
* \endcode
|
|
* @details This API writes the power mode.
|
|
*
|
|
* @param[in] mode : BMP2_POWERMODE_SLEEP, BMP2_POWERMODE_NORMAL,
|
|
* BMP2_POWERMODE_FORCED
|
|
* @param[in] conf : Structure instance of bmp2_config
|
|
* @param[in] dev : Structure instance of bmp2_dev
|
|
*
|
|
* @return Result of API execution status.
|
|
*
|
|
* @retval 0 -> Success.
|
|
* @retval < 0 -> Fail.
|
|
*/
|
|
int8_t bmp2_set_power_mode(uint8_t mode, const struct bmp2_config *conf, struct bmp2_dev *dev);
|
|
|
|
/**
|
|
* \ingroup bmp2
|
|
* \defgroup bmp2ApiConfig Configuration
|
|
* @brief Set / Get configurations of the sensor
|
|
*/
|
|
|
|
/*!
|
|
* \ingroup bmp2ApiConfig
|
|
* \page bmp2_api_bmp2_get_config bmp2_get_config
|
|
* \code
|
|
* int8_t bmp2_get_config(struct bmp2_config *conf, struct bmp2_dev *dev);
|
|
* \endcode
|
|
* @details This API reads the data from the ctrl_meas register and config
|
|
* register. It gives the currently set temperature and pressure over-sampling
|
|
* configuration, power mode configuration, sleep duration and
|
|
* IIR filter coefficient.
|
|
*
|
|
* @param[out] conf : Current configuration of the bmp2
|
|
* conf->osrs_t, conf->osrs_p = BMP2_OS_NONE, BMP2_OS_1X,
|
|
* BMP2_OS_2X, BMP2_OS_4X, BMP2_OS_8X, BMP2_OS_16X
|
|
*
|
|
* conf->odr = BMP2_ODR_0_5_MS, BMP2_ODR_62_5_MS, BMP2_ODR_125_MS,
|
|
* BMP2_ODR_250_MS, BMP2_ODR_500_MS, BMP2_ODR_1000_MS,
|
|
* BMP2_ODR_2000_MS, BMP2_ODR_4000_MS
|
|
*
|
|
* conf->filter = BMP2_FILTER_OFF, BMP2_FILTER_COEFF_2,
|
|
* BMP2_FILTER_COEFF_4, BMP2_FILTER_COEFF_8, BMP2_FILTER_COEFF_16
|
|
*
|
|
* conf->spi3w_en = BMP2_SPI3_WIRE_ENABLE, BMP2_SPI3_WIRE_DISABLE
|
|
*
|
|
* @param[in] dev : Structure instance of bmp2_dev
|
|
*
|
|
* @return Result of API execution status.
|
|
*
|
|
* @retval 0 -> Success.
|
|
* @retval < 0 -> Fail.
|
|
*/
|
|
int8_t bmp2_get_config(struct bmp2_config *conf, struct bmp2_dev *dev);
|
|
|
|
/*!
|
|
* \ingroup bmp2ApiConfig
|
|
* \page bmp2_api_bmp2_set_config bmp2_set_config
|
|
* \code
|
|
* int8_t bmp2_set_config(const struct bmp2_config *conf, struct bmp2_dev *dev);
|
|
* \endcode
|
|
* @details This API writes the data to the ctrl_meas register and config register.
|
|
* It sets the over-sampling mode, power mode configuration,
|
|
* sleep duration and IIR filter coefficient.
|
|
*
|
|
* @param[in] conf : Desired configuration to the bmp2
|
|
* conf->osrs_t, conf->osrs_p = BMP2_OS_NONE, BMP2_OS_1X,
|
|
* BMP2_OS_2X, BMP2_OS_4X, BMP2_OS_8X, BMP2_OS_16X
|
|
*
|
|
* conf->odr = BMP2_ODR_0_5_MS, BMP2_ODR_62_5_MS, BMP2_ODR_125_MS,
|
|
* BMP2_ODR_250_MS, BMP2_ODR_500_MS, BMP2_ODR_1000_MS,
|
|
* BMP2_ODR_2000_MS, BMP2_ODR_4000_MS
|
|
*
|
|
* conf->filter = BMP2_FILTER_OFF, BMP2_FILTER_COEFF_2,
|
|
* BMP2_FILTER_COEFF_4, BMP2_FILTER_COEFF_8, BMP2_FILTER_COEFF_16
|
|
*
|
|
* conf->spi3w_en = BMP2_SPI3_WIRE_ENABLE, BMP2_SPI3_WIRE_DISABLE
|
|
*
|
|
* Over-sampling settings | conf->os_pres | conf->os_temp
|
|
*--------------------------|-------------------|---------------------------
|
|
* Ultra low power | 1 | 1
|
|
* Low power | 2 | 1
|
|
* Standard resolution | 4 | 1
|
|
* High resolution | 8 | 1
|
|
* Ultra high resolution | 16 | 2
|
|
*
|
|
* @param[in] dev : Structure instance of bmp2_dev
|
|
*
|
|
* @return Result of API execution status.
|
|
*
|
|
* @retval 0 -> Success.
|
|
* @retval < 0 -> Fail.
|
|
*/
|
|
int8_t bmp2_set_config(const struct bmp2_config *conf, struct bmp2_dev *dev);
|
|
|
|
/**
|
|
* \ingroup bmp2
|
|
* \defgroup bmp2ApiStatus Status register
|
|
* @brief Read status register
|
|
*/
|
|
|
|
/*!
|
|
* \ingroup bmp2ApiStatus
|
|
* \page bmp2_api_bmp2_get_status bmp2_get_status
|
|
* \code
|
|
* int8_t bmp2_get_status(struct bmp2_status *status, struct bmp2_dev *dev);
|
|
* \endcode
|
|
* @details This API reads the status register
|
|
*
|
|
* @param[in,out] status : Structure instance of bmp2_status.
|
|
* @param[in] dev : Structure instance of bmp2_dev
|
|
*
|
|
* @return Result of API execution status.
|
|
*
|
|
* @retval 0 -> Success.
|
|
* @retval < 0 -> Fail.
|
|
*/
|
|
int8_t bmp2_get_status(struct bmp2_status *status, struct bmp2_dev *dev);
|
|
|
|
/**
|
|
* \ingroup bmp2
|
|
* \defgroup bmp2ApiSensorData Sensor Data
|
|
* @brief Data processing of sensor
|
|
*/
|
|
|
|
/*!
|
|
* \ingroup bmp2ApiSensorData
|
|
* \page bmp2_api_bmp2_get_sensor_data bmp2_get_sensor_data
|
|
* \code
|
|
* int8_t bmp2_get_sensor_data(struct bmp2_data *comp_data, struct bmp2_dev *dev);
|
|
* \endcode
|
|
* @details This API reads the pressure and temperature data from the
|
|
* sensor, compensates the data and store it in the bmp2_data structure
|
|
* instance passed by the user.
|
|
*
|
|
* @param[in] comp_data : Structure instance of bmp2_data
|
|
* @param[in] dev : Structure instance of bmp2_dev
|
|
*
|
|
* @return Result of API execution status.
|
|
*
|
|
* @retval 0 -> Success.
|
|
* @retval < 0 -> Fail.
|
|
*/
|
|
int8_t bmp2_get_sensor_data(struct bmp2_data *comp_data, struct bmp2_dev *dev);
|
|
|
|
/*!
|
|
* \ingroup bmp2ApiSensorData
|
|
* \page bmp2_api_bmp2_compensate_data bmp2_compensate_data
|
|
* \code
|
|
* int8_t bmp2_compensate_data(const struct bmp2_uncomp_data *uncomp_data,
|
|
* struct bmp2_data *comp_data,
|
|
* struct bmp2_dev *dev);
|
|
* \endcode
|
|
* @details This API is used to compensate the pressure and
|
|
* temperature data.
|
|
*
|
|
* @param[in] uncomp_data : Contains the uncompensated pressure, temperature data.
|
|
* @param[out] comp_data : Contains the compensated pressure and/or temperature data.
|
|
* @param[in] dev : Structure instance of bmp2_dev.
|
|
*
|
|
* @return Result of API execution status.
|
|
*
|
|
* @retval 0 -> Success.
|
|
* @retval > 0 -> Warning.
|
|
* @retval < 0 -> Fail.
|
|
*
|
|
*/
|
|
int8_t bmp2_compensate_data(const struct bmp2_uncomp_data *uncomp_data,
|
|
struct bmp2_data *comp_data,
|
|
struct bmp2_dev *dev);
|
|
|
|
/**
|
|
* \ingroup bmp2
|
|
* \defgroup bmp2ApiMeasTime Compute measurement time
|
|
* @brief Computes measurement time (in microseconds)
|
|
*/
|
|
|
|
/*!
|
|
* \ingroup bmp2ApiMeasTime
|
|
* \page bmp2_api_bmp2_compute_meas_time bmp2_compute_meas_time
|
|
* \code
|
|
* int8_t bmp2_compute_meas_time(uint32_t *sampling_time, const struct bmp2_config *conf, const struct bmp2_dev *dev);
|
|
* \endcode
|
|
* @details This API computes the measurement time in microseconds for the
|
|
* active configuration based on standbytime(conf->odr) and over-sampling mode(conf->os_mode)
|
|
*
|
|
* @param[out] sampling_time : Measurement time for the active configuration in microseconds
|
|
* @param[in] conf : Structure instance of bmp2_config
|
|
* @param[in] dev : Structure instance of bmp2_dev
|
|
*
|
|
* @return Result of API execution status.
|
|
*
|
|
* @retval 0 -> Success.
|
|
* @retval < 0 -> Fail.
|
|
*
|
|
*/
|
|
int8_t bmp2_compute_meas_time(uint32_t *sampling_time, const struct bmp2_config *conf, const struct bmp2_dev *dev);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* End of CPP guard */
|
|
|
|
#endif /* _BMP2_H */
|