2025-04-11 09:40:32 +08:00

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 */