-/** \mainpage
-*
-****************************************************************************
-* Copyright (C) 2013 - 2014 Bosch Sensortec GmbH
-*
-* File : bme280.h
-*
-* Date : 2014/12/12
-*
-* Revision : 2.0.3(Pressure and Temperature compensation code revision is 1.1
-* and Humidity compensation code revision is 1.0)
-*
-* Usage: Sensor Driver for BME280 sensor
-*
-****************************************************************************
-*
-* \section License
-*
-* 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 bme280.h
- \brief BME280 Sensor Driver Support Header File */
-#ifndef __BME280_H__
-#define __BME280_H__
-
-
-/*!
-* @brief The following definition uses for define the data types
-*
-* @note While porting the API please consider the following
-* @note Please check the version of C standard
-* @note Are you using Linux platform
-*/
-
-/*!
-* @brief For the Linux platform support
-* Please use the types.h for your data types definitions
-*/
-#ifdef __KERNEL__
-
-#include <linux/types.h>
-#include <linux/math64.h>
-#define BME280_64BITSUPPORT_PRESENT
-/* singed integer type*/
-typedef int8_t s8;/**< used for signed 8bit */
-typedef int16_t s16;/**< used for signed 16bit */
-typedef int32_t s32;/**< used for signed 32bit */
-typedef int64_t s64;/**< used for signed 64bit */
-
-typedef u_int8_t u8;/**< used for unsigned 8bit */
-typedef u_int16_t u16;/**< used for unsigned 16bit */
-typedef u_int32_t u32;/**< used for unsigned 32bit */
-typedef u_int64_t u64;/**< used for unsigned 64bit */
-
-
-
-#else /* ! __KERNEL__ */
-/**********************************************************
-* These definition uses for define the C
-* standard version data types
-***********************************************************/
-# if !defined(__STDC_VERSION__)
-
-/************************************************
- * compiler is C11 C standard
-************************************************/
-#if (__STDC_VERSION__ == 201112L)
-
-/************************************************/
-#include <stdint.h>
-/************************************************/
-
-/*unsigned integer types*/
-typedef uint8_t u8;/**< used for unsigned 8bit */
-typedef uint16_t u16;/**< used for unsigned 16bit */
-typedef uint32_t u32;/**< used for unsigned 32bit */
-typedef uint64_t u64;/**< used for unsigned 64bit */
-
-/*signed integer types*/
-typedef int8_t s8;/**< used for signed 8bit */
-typedef int16_t s16;/**< used for signed 16bit */
-typedef int32_t s32;/**< used for signed 32bit */
-typedef int64_t s64;/**< used for signed 64bit */
-#define BME280_64BITSUPPORT_PRESENT
-/************************************************
- * compiler is C99 C standard
-************************************************/
-
-#elif (__STDC_VERSION__ == 199901L)
-
-/* stdint.h is a C99 supported c library.
-which is used to fixed the integer size*/
-/************************************************/
-#include <stdint.h>
-/************************************************/
-
-/*unsigned integer types*/
-typedef uint8_t u8;/**< used for unsigned 8bit */
-typedef uint16_t u16;/**< used for unsigned 16bit */
-typedef uint32_t u32;/**< used for unsigned 32bit */
-typedef uint64_t u64;/**< used for unsigned 64bit */
-
-/*signed integer types*/
-typedef int8_t s8;/**< used for signed 8bit */
-typedef int16_t s16;/**< used for signed 16bit */
-typedef int32_t s32;/**< used for signed 32bit */
-typedef int64_t s64;/**< used for signed 64bit */
-#define BME280_64BITSUPPORT_PRESENT
-/************************************************
- * compiler is C89 or other C standard
-************************************************/
-
-#else /* !defined(__STDC_VERSION__) */
-/*!
-* @brief By default it is defined as 32 bit machine configuration
-* define your data types based on your
-* machine/compiler/controller configuration
-*/
-#define MACHINE_32_BIT
-
-/*! @brief
- * If your machine support 16 bit
- * define the MACHINE_16_BIT
- */
-#ifdef MACHINE_16_BIT
-#include <limits.h>
-/*signed integer types*/
-typedef signed char s8;/**< used for signed 8bit */
-typedef signed short int s16;/**< used for signed 16bit */
-typedef signed long int s32;/**< used for signed 32bit */
-
-#if defined(LONG_MAX) && LONG_MAX == 0x7fffffffffffffffL
-typedef long int s64;/**< used for signed 64bit */
-typedef unsigned long int u64;/**< used for unsigned 64bit */
-#define BME280_64BITSUPPORT_PRESENT
-#elif defined(LLONG_MAX) && (LLONG_MAX == 0x7fffffffffffffffLL)
-typedef long long int s64;/**< used for signed 64bit */
-typedef unsigned long long int u64;/**< used for unsigned 64bit */
-#define BME280_64BITSUPPORT_PRESENT
-#else
-#warning Either the correct data type for signed 64 bit integer \
-could not be found, or 64 bit integers are not supported in your environment.
-#warning The API will only offer 32 bit pressure calculation.This will \
-slightly impede accuracy(noise of ~1 pascal RMS will be added to output).
-#warning If 64 bit integers are supported on your platform, \
-please set s64 manually and "#define(BMPE80_64BITSUPPORT_PRESENT)" manually.
-#endif
-
-/*unsigned integer types*/
-typedef unsigned char u8;/**< used for unsigned 8bit */
-typedef unsigned short int u16;/**< used for unsigned 16bit */
-typedef unsigned long int u32;/**< used for unsigned 32bit */
-
-/* If your machine support 32 bit
-define the MACHINE_32_BIT*/
-#elif defined MACHINE_32_BIT
-/*signed integer types*/
-typedef signed char s8;/**< used for signed 8bit */
-typedef signed short int s16;/**< used for signed 16bit */
-typedef signed int s32;/**< used for signed 32bit */
-typedef signed long long int s64;/**< used for signed 64bit */
-
-/*unsigned integer types*/
-typedef unsigned char u8;/**< used for unsigned 8bit */
-typedef unsigned short int u16;/**< used for unsigned 16bit */
-typedef unsigned int u32;/**< used for unsigned 32bit */
-typedef unsigned long long int u64;/**< used for unsigned 64bit */
-#define BME280_64BITSUPPORT_PRESENT
-
-/* If your machine support 64 bit
-define the MACHINE_64_BIT*/
-#elif defined MACHINE_64_BIT
-/*signed integer types*/
-typedef signed char s8;/**< used for signed 8bit */
-typedef signed short int s16;/**< used for signed 16bit */
-typedef signed int s32;/**< used for signed 32bit */
-typedef signed long int s64;/**< used for signed 64bit */
-
-/*unsigned integer types*/
-typedef unsigned char u8;/**< used for unsigned 8bit */
-typedef unsigned short int u16;/**< used for unsigned 16bit */
-typedef unsigned int u32;/**< used for unsigned 32bit */
-typedef unsigned long int u64;/**< used for unsigned 64bit */
-#define BME280_64BITSUPPORT_PRESENT
-
-#else
-#warning The data types defined above which not supported \
-define the data types manually
-#endif
-#endif
-
-/*** This else will execute for the compilers
- * which are not supported the C standards
- * Like C89/C99/C11***/
-#else
-/*!
-* @brief By default it is defined as 32 bit machine configuration
-* define your data types based on your
-* machine/compiler/controller configuration
-*/
-#define MACHINE_32_BIT
-
-/* If your machine support 16 bit
-define the MACHINE_16_BIT*/
-#ifdef MACHINE_16_BIT
-#include <limits.h>
-/*signed integer types*/
-typedef signed char s8;/**< used for signed 8bit */
-typedef signed short int s16;/**< used for signed 16bit */
-typedef signed long int s32;/**< used for signed 32bit */
-
-#if defined(LONG_MAX) && LONG_MAX == 0x7fffffffffffffffL
-typedef long int s64;/**< used for signed 64bit */
-typedef unsigned long int u64;/**< used for unsigned 64bit */
-#define BME280_64BITSUPPORT_PRESENT
-#elif defined(LLONG_MAX) && (LLONG_MAX == 0x7fffffffffffffffLL)
-typedef long long int s64;/**< used for signed 64bit */
-typedef unsigned long long int u64;/**< used for unsigned 64bit */
-#define BME280_64BITSUPPORT_PRESENT
-#else
-#warning Either the correct data type for signed 64 bit integer \
-could not be found, or 64 bit integers are not supported in your environment.
-#warning The API will only offer 32 bit pressure calculation.This will \
-slightly impede accuracy(noise of ~1 pascal RMS will be added to output).
-#warning If 64 bit integers are supported on your platform, \
-please set s64 manually and "#define(BME280_64BITSUPPORT_PRESENT)" manually.
-#endif
-
-/*unsigned integer types*/
-typedef unsigned char u8;/**< used for unsigned 8bit */
-typedef unsigned short int u16;/**< used for unsigned 16bit */
-typedef unsigned long int u32;/**< used for unsigned 32bit */
-
-/*! @brief If your machine support 32 bit
-define the MACHINE_32_BIT*/
-#elif defined MACHINE_32_BIT
-/*signed integer types*/
-typedef signed char s8;/**< used for signed 8bit */
-typedef signed short int s16;/**< used for signed 16bit */
-typedef signed int s32;/**< used for signed 32bit */
-typedef signed long long int s64;/**< used for signed 64bit */
-
-/*unsigned integer types*/
-typedef unsigned char u8;/**< used for unsigned 8bit */
-typedef unsigned short int u16;/**< used for unsigned 16bit */
-typedef unsigned int u32;/**< used for unsigned 32bit */
-typedef unsigned long long int u64;/**< used for unsigned 64bit */
-#define BME280_64BITSUPPORT_PRESENT
-
-/* If your machine support 64 bit
-define the MACHINE_64_BIT*/
-#elif defined MACHINE_64_BIT
-/*signed integer types*/
-typedef signed char s8;/**< used for signed 8bit */
-typedef signed short int s16;/**< used for signed 16bit */
-typedef signed int s32;/**< used for signed 32bit */
-typedef signed long int s64;/**< used for signed 64bit */
-
-/*unsigned integer types*/
-typedef unsigned char u8;/**< used for unsigned 8bit */
-typedef unsigned short int u16;/**< used for unsigned 16bit */
-typedef unsigned int u32;/**< used for unsigned 32bit */
-typedef unsigned long int u64;/**< used for unsigned 64bit */
-#define BME280_64BITSUPPORT_PRESENT
-
-#else
-#warning The data types defined above which not supported \
-define the data types manually
-#endif
-#endif
-#endif
-/********************************************/
-/**\name ENABLE FLATING OUTPUT */
-/**************************************/
-/*!
-* @brief If the user wants to support floating point calculations, please set
- the following define. If floating point
- calculation is not wanted or allowed
- (e.g. in Linux kernel), please do not set the define. */
-#define BME280_ENABLE_FLOAT
-/*!
-* @brief If the user wants to support 64 bit integer calculation
- (needed for optimal pressure accuracy) please set
- the following define. If int64 calculation is not wanted
- (e.g. because it would include
- large libraries), please do not set the define. */
-#define BME280_ENABLE_INT64
-/***************************************************************/
-/**\name BUS READ AND WRITE FUNCTION POINTERS */
-/***************************************************************/
-/*!
- @brief Define the calling convention of YOUR bus communication routine.
- @note This includes types of parameters. This example shows the
- configuration for an SPI bus link.
-
- If your communication function looks like this:
-
- write_my_bus_xy(u8 device_addr, u8 register_addr,
- u8 * data, u8 length);
-
- The BME280_WR_FUNC_PTR would equal:
-
- BME280_WR_FUNC_PTR s8 (* bus_write)(u8,
- u8, u8 *, u8)
-
- Parameters can be mixed as needed refer to the
- refer BME280_BUS_WRITE_FUNC macro.
-
-
-*/
-/** defines the return parameter type of the BME280_WR_FUNCTION */
-#define BME280_BUS_WR_RETURN_TYPE s8
-
-/* links the order of parameters defined in
-BME280_BUS_WR_PARAM_TYPE to function calls used inside the API*/
-#define BME280_BUS_WR_PARAM_TYPES u8, u8,\
- u8 *, u8
-
-/* links the order of parameters defined in
-BME280_BUS_WR_PARAM_TYPE to function calls used inside the API*/
-#define BME280_BUS_WR_PARAM_ORDER(device_addr, register_addr,\
- register_data, wr_len)
-
-/* never change this line */
-#define BME280_BUS_WRITE_FUNC(device_addr, register_addr,\
-register_data, wr_len) bus_write(device_addr, register_addr,\
- register_data, wr_len)
-/*!
- @brief link macro between API function calls and bus read function
- @note The bus write function can change since this is a
- system dependant issue.
-
- If the bus_read parameter calling order is like: reg_addr,
- reg_data, wr_len it would be as it is here.
-
- If the parameters are differently ordered or your communication
- function like I2C need to know the device address,
- you can change this macro accordingly.
-
-
- BME280_BUS_READ_FUNC(dev_addr, reg_addr, reg_data, wr_len)\
- bus_read(dev_addr, reg_addr, reg_data, wr_len)
-
- This macro lets all API functions call YOUR communication routine in a
- way that equals your definition in the
- refer BME280_WR_FUNC_PTR definition.
-
- @note: this macro also includes the "MSB='1'
- for reading BME280 addresses.
-
-*/
-/*defines the return parameter type of the BME280_RD_FUNCTION
-*/
-#define BME280_BUS_RD_RETURN_TYPE s8
-
-/**\brief defines the calling parameter types of the BME280_RD_FUNCTION
-*/
-#define BME280_BUS_RD_PARAM_TYPES (u8, u8,\
- u8 *, u8)
-
-/* links the order of parameters defined in \
-BME280_BUS_RD_PARAM_TYPE to function calls used inside the API
-*/
-#define BME280_BUS_RD_PARAM_ORDER (device_addr, register_addr,\
- register_data)
-
-/* never change this line */
-#define BME280_BUS_READ_FUNC(device_addr, register_addr,\
- register_data, rd_len)bus_read(device_addr, register_addr,\
- register_data, rd_len)
-/****************************************/
-/**\name DELAY */
-/****************************************/
-/* defines the return parameter type of the BME280_DELAY_FUNCTION
-*/
-#define BME280_DELAY_RETURN_TYPE void
-
-/* defines the calling parameter types of the BME280_DELAY_FUNCTION
-*/
-#define BME280_DELAY_PARAM_TYPES u16
-/***************************************************************/
-/**\name GET AND SET BITSLICE FUNCTIONS */
-/***************************************************************/
-/* never change this line */
-#define BME280_DELAY_FUNC(delay_in_msec)\
- delay_func(delay_in_msec)
-
-#define BME280_GET_BITSLICE(regvar, bitname)\
- ((regvar & bitname##__MSK) >> bitname##__POS)
-
-#define BME280_SET_BITSLICE(regvar, bitname, val)\
-((regvar & ~bitname##__MSK) | ((val<<bitname##__POS)&bitname##__MSK))
-
-/***************************************************************/
-/**\name COMMON USED CONSTANTS */
-/***************************************************************/
-/* Constants */
-#define BME280_NULL 0
-#define BME280_RETURN_FUNCTION_TYPE s8
-/* right shift definitions*/
-#define SHIFT_RIGHT_1_POSITION 1
-#define SHIFT_RIGHT_2_POSITION 2
-#define SHIFT_RIGHT_3_POSITION 3
-#define SHIFT_RIGHT_4_POSITION 4
-#define SHIFT_RIGHT_7_POSITION 7
-#define SHIFT_RIGHT_8_POSITION 8
-#define SHIFT_RIGHT_10_POSITION 10
-#define SHIFT_RIGHT_11_POSITION 11
-#define SHIFT_RIGHT_12_POSITION 12
-#define SHIFT_RIGHT_13_POSITION 13
-#define SHIFT_RIGHT_14_POSITION 14
-#define SHIFT_RIGHT_15_POSITION 15
-#define SHIFT_RIGHT_18_POSITION 18
-#define SHIFT_RIGHT_19_POSITION 19
-#define SHIFT_RIGHT_25_POSITION 25
-#define SHIFT_RIGHT_33_POSITION 33
-/* left shift definitions*/
-#define SHIFT_LEFT_1_POSITION 1
-#define SHIFT_LEFT_2_POSITION 2
-#define SHIFT_LEFT_4_POSITION 4
-#define SHIFT_LEFT_5_POSITION 5
-#define SHIFT_LEFT_8_POSITION 8
-#define SHIFT_LEFT_12_POSITION 12
-#define SHIFT_LEFT_13_POSITION 13
-#define SHIFT_LEFT_14_POSITION 14
-#define SHIFT_LEFT_16_POSITION 16
-#define SHIFT_LEFT_17_POSITION 17
-#define SHIFT_LEFT_20_POSITION 20
-#define SHIFT_LEFT_31_POSITION 31
-#define SHIFT_LEFT_35_POSITION 35
-#define SHIFT_LEFT_47_POSITION 47
-/* numeric definitions*/
-#define BME280_ONE_U8X 1
-#define BME280_TWO_U8X 2
-#define BME280_THREE_U8X 3
-#define BME280_FOUR_U8X 4
-#define BME280_FIVE_U8X 5
-#define BME280_SEVEN_U8X 7
-#define BME280_ZERO_U8X 0
-#define BME280_EIGHT_U8X 8
-#define BME280_FIVETEEN_U8X 15
-#define BME280_SIXTEEN_U8X 16
-#define BME280_TWENTY_FIVE_U8X 25
-#define BME280_TWENTY_SIX_U8X 26
-#define BME280_ONE_TWENTY_EIGHT_U8X 128
-
-/***************************************************************/
-/**\name PRESSURE AND TEMPERATURE DEFINITIONS */
-/***************************************************************/
-#define BME280_TEMP_1_2_2_8_8_0_DATA 122880
-#define BME280_PRESSURE_6_4_0_0_0_DATA 64000
-#define BME280_PRESSURE_3_1_2_5_DATA 3125
-#define BME280_PRESSURE_3_2_7_6_8_DATA 32768
-#define BME280_PRESSURE_1_0_4_8_5_7_6_DATA 1048576
-#define BME280_HEX_PRESSURE_8_0_0_0_0_0_0_0_DATA 0x80000000
-/***************************************************************/
-/**\name HUMIDITY DEFINITIONS */
-/***************************************************************/
-#define BME280_HUMIDITY_7_6_8_0_0_DATA 76800
-#define BME280_HUMIDITY_1_6_3_8_4_DATA 16384
-#define BME280_HUMIDITY_3_2_7_6_8_DATA 32768
-#define BME280_HUMIDITY_2_0_9_7_1_5_2_DATA 2097152
-#define BME280_HUMIDITY_8_1_9_2_DATA 8192
-#define BME280_HUMIDITY_4_1_9_4_3_0_4_0_0_DATA 419430400
-/***************************************************************/
-/**\name CALIBRATION MASK DEFINITION */
-/***************************************************************/
-#define BME280_HEX_CALIB_0_F_DATA 0x0F
-
-/****************************************************/
-/**\name TRUE TEMPERATURE CALUCULATION PARAMETERS */
-/***************************************************/
-#define BME280_DEC_TRUE_TEMP_FIVE_DATA 5
-#define BME280_DEC_TRUE_TEMP_ONE_TWO_EIGHT_DATA 128
-/****************************************************/
-/**\name TRUE PRESSURE CALUCULATION PARAMETERS */
-/***************************************************/
-#define BME280_DEC_TRUE_PRESSURE_6_4_0_0_0_DATA 64000
-#define BME280_DEC_TRUE_PRESSURE_TWO_DATA 2
-#define BME280_DEC_TRUE_PRESSURE_3_2_7_6_8_DATA 32768
-#define BME280_DEC_TRUE_PRESSURE_1_0_4_8_5_7_6_DATA 1048576
-#define BME280_DEC_TRUE_PRESSURE_3_1_2_5_DATA 3125
-#define BME280_HEX_TRUE_PRESSURE_8_0_0_0_0_0_0_0_DATA 0x80000000
-
-/****************************************************/
-/**\name TRUE TEMPERATURE CALUCULATION FLOAT RETURN */
-/***************************************************/
-#define BME280_FLOAT_TRUE_TEMP_1_6_3_8_4_DATA 16384.0
-#define BME280_FLOAT_TRUE_TEMP_1_0_2_4_DATA 1024.0
-#define BME280_FLOAT_TRUE_TEMP_1_3_1_0_7_2_DATA 131072.0
-#define BME280_FLOAT_TRUE_TEMP_8_1_9_2_DATA 8192.0
-#define BME280_FLOAT_TRUE_TEMP_5_1_2_0_DATA 5120.0
-
-/****************************************************/
-/**\name TRUE PRESSURE CALUCULATION FLOAT RETURN */
-/***************************************************/
-#define BME280_FLAOT_TRUE_PRESSURE_1_DATA 1.0
-#define BME280_FLAOT_TRUE_PRESSURE_0_DATA 0.0
-#define BME280_FLAOT_TRUE_PRESSURE_2_DATA 2.0
-#define BME280_FLAOT_TRUE_PRESSURE_4_DATA 4.0
-#define BME280_FLAOT_TRUE_PRESSURE_1_6_DATA 16.0
-#define BME280_FLAOT_TRUE_PRESSURE_6_4_0_0_0_DATA 64000.0
-#define BME280_FLAOT_TRUE_PRESSURE_3_2_7_6_8_DATA 32768.0
-#define BME280_FLAOT_TRUE_PRESSURE_6_5_5_3_6_DATA 65536.0
-#define BME280_FLAOT_TRUE_PRESSURE_5_2_4_2_8_8_DATA 524288.0
-#define BME280_FLAOT_TRUE_PRESSURE_1_0_4_8_5_7_6_DATA 1048576.0
-#define BME280_FLAOT_TRUE_PRESSURE_4_0_9_6_DATA 4096.0
-#define BME280_FLAOT_TRUE_PRESSURE_6_2_5_0_DATA 6250.0
-#define BME280_FLAOT_TRUE_PRESSURE_2_1_4_7_4_8_3_6_4_8_DATA \
-2147483648.0
-
-/****************************************************/
-/**\name TRUE PRESSURE CALUCULATION 64BIT RETURN */
-/***************************************************/
-#define BME280_TRUE_PRESSURE_1_2_8_0_0_0_DATA 128000
-#define BME280_TRUE_PRESSURE_1_0_4_8_5_7_6_DATA 1048576
-#define BME280_TRUE_PRESSURE_3_1_2_5_DATA 3125
-#define BME280_TRUE_PRESSURE_1_DATA 1
-/****************************************************/
-/**\name TRUE HUMIDITY CALUCULATION FLOAT RETURN */
-/***************************************************/
-#define BME280_TRUE_HUMIDITY_7_6_8_0_0_DATA 76800.0
-#define BME280_TRUE_HUMIDITY_6_4_DATA 64.0
-#define BME280_TRUE_HUMIDITY_1_6_3_8_4_DATA 16384.0
-#define BME280_TRUE_HUMIDITY_6_5_5_3_6_DATA 65536.0
-#define BME280_TRUE_HUMIDITY_0_DATA 0.0
-#define BME280_TRUE_HUMIDITY_1_DATA 1.0
-#define BME280_TRUE_HUMIDITY_1_0_0_DATA 100.0
-#define BME280_TRUE_HUMIDITY_6_7_1_0_8_8_6_4_DATA 67108864.0
-#define BME280_TRUE_HUMIDITY_5_2_4_2_8_8_DATA 524288.0
-#define BME280_TRUE_HUMIDITY_
-/****************************************************/
-/**\name ERROR CODE DEFINITIONS */
-/***************************************************/
-#define SUCCESS ((u8)0)
-#define E_BME280_NULL_PTR ((s8)-127)
-#define E_BME280_COMM_RES ((s8)-1)
-#define E_BME280_OUT_OF_RANGE ((s8)-2)
-#define ERROR ((s8)-1)
-/****************************************************/
-/**\name I2C ADDRESS DEFINITIONS */
-/***************************************************/
-#define BME280_I2C_ADDRESS1 0x76
-#define BME280_I2C_ADDRESS2 0x77
-/****************************************************/
-/**\name POWER MODE DEFINITIONS */
-/***************************************************/
-/* Sensor Specific constants */
-#define BME280_SLEEP_MODE 0x00
-#define BME280_FORCED_MODE 0x01
-#define BME280_NORMAL_MODE 0x03
-#define BME280_SOFT_RESET_CODE 0xB6
-/****************************************************/
-/**\name STANDBY DEFINITIONS */
-/***************************************************/
-#define BME280_STANDBY_TIME_1_MS 0x00
-#define BME280_STANDBY_TIME_63_MS 0x01
-#define BME280_STANDBY_TIME_125_MS 0x02
-#define BME280_STANDBY_TIME_250_MS 0x03
-#define BME280_STANDBY_TIME_500_MS 0x04
-#define BME280_STANDBY_TIME_1000_MS 0x05
-#define BME280_STANDBY_TIME_10_MS 0x06
-#define BME280_STANDBY_TIME_20_MS 0x07
-/****************************************************/
-/**\name OVER SAMPLING DEFINITIONS */
-/***************************************************/
-#define BME280_OVERSAMP_SKIPPED 0x00
-#define BME280_OVERSAMP_1X 0x01
-#define BME280_OVERSAMP_2X 0x02
-#define BME280_OVERSAMP_4X 0x03
-#define BME280_OVERSAMP_8X 0x04
-#define BME280_OVERSAMP_16X 0x05
-/****************************************************/
-/**\name WORK MODE DEFINITIONS */
-/***************************************************/
-/*#define BME280_ULTRALOWPOWER_MODE 0x00
-#define BME280_LOWPOWER_MODE 0x01
-#define BME280_STANDARDRESOLUTION_MODE 0x02
-#define BME280_HIGHRESOLUTION_MODE 0x03
-#define BME280_ULTRAHIGHRESOLUTION_MODE 0x04
-
-#define BME280_ULTRALOWPOWER_OSRS_P BME280_OVERSAMP_1X
-#define BME280_ULTRALOWPOWER_OSRS_T BME280_OVERSAMP_1X
-
-#define BME280_LOWPOWER_OSRS_P BME280_OVERSAMP_2X
-#define BME280_LOWPOWER_OSRS_T BME280_OVERSAMP_1X
-
-#define BME280_STANDARDRESOLUTION_OSRS_P BME280_OVERSAMP_4X
-#define BME280_STANDARDRESOLUTION_OSRS_T BME280_OVERSAMP_1X
-
-#define BME280_HIGHRESOLUTION_OSRS_P BME280_OVERSAMP_8X
-#define BME280_HIGHRESOLUTION_OSRS_T BME280_OVERSAMP_1X
-
-#define BME280_ULTRAHIGHRESOLUTION_OSRS_P BME280_OVERSAMP_16X
-#define BME280_ULTRAHIGHRESOLUTION_OSRS_T BME280_OVERSAMP_2X */
-
-#define BME280_STANDARD_OVERSAMP_HUMIDITY BME280_OVERSAMP_1X
-/****************************************************/
-/**\name FILTER DEFINITIONS */
-/***************************************************/
-#define BME280_FILTER_COEFF_OFF 0x00
-#define BME280_FILTER_COEFF_2 0x01
-#define BME280_FILTER_COEFF_4 0x02
-#define BME280_FILTER_COEFF_8 0x03
-#define BME280_FILTER_COEFF_16 0x04
-/****************************************************/
-/**\name DELAY DEFINITIONS */
-/***************************************************/
-#define T_INIT_MAX 20
- /* 20/16 = 1.25 ms */
-#define T_MEASURE_PER_OSRS_MAX 37
- /* 37/16 = 2.3125 ms*/
-
-#define T_SETUP_PRESSURE_MAX 10
- /* 10/16 = 0.625 ms */
-
-#define T_SETUP_HUMIDITY_MAX 10
- /* 10/16 = 0.625 ms */
-/****************************************************/
-/**\name ARRAY SIZE DEFINITIONS */
-/***************************************************/
-#define ARRAY_SIZE_TWO 2
-#define ARRAY_SIZE_THREE 3
-#define ARRAY_SIZE_SIX 6
-#define ARRAY_SIZE_FIVE 5
-#define ARRAY_SIZE_EIGHT 8
-#define ARRAY_SIZE_TWELVE 12
-#define ARRAY_SIZE_FOURTEEN 14
-#define ARRAY_SIZE_TWENTY_SIX 26
-
-#define INDEX_ZERO 0
-#define INDEX_ONE 1
-#define INDEX_TWO 2
-#define INDEX_THREE 3
-#define INDEX_FOUR 4
-#define INDEX_FIVE 5
-#define INDEX_SIX 6
-#define INDEX_SEVEN 7
-#define INDEX_EIGHT 8
-#define INDEX_NINE 9
-#define INDEX_TEN 10
-#define INDEX_ELEVEN 11
-#define INDEX_TWELVE 12
-#define INDEX_THIRTEEN 13
-#define INDEX_FOURTEEN 14
-#define INDEX_FIVETEEN 15
-#define INDEX_SIXTEEN 16
-#define INDEX_SEVENTEEN 17
-#define INDEX_EIGHTEEN 18
-#define INDEX_NINETEEN 19
-#define INDEX_TWENTY 20
-#define INDEX_TWENTY_ONE 21
-#define INDEX_TWENTY_TWO 22
-#define INDEX_TWENTY_THREE 23
-#define INDEX_TWENTY_FIVE 25
-/****************************************************/
-/**\name ARRAY PARAMETERS */
-/***************************************************/
-#define LSB_ZERO 0
-#define MSB_ONE 1
-#define LSB_TWO 2
-#define MSB_THREE 3
-#define LSB_FOUR 4
-#define MSB_FIVE 5
-#define LSB_SIX 6
-#define MSB_SEVEN 7
-/****************************************************/
-/**\name CALIBRATION REGISTER ADDRESS DEFINITIONS */
-/***************************************************/
-/*calibration parameters */
-#define BME280_DIG_T1_LSB_REG 0x88
-#define BME280_DIG_T1_MSB_REG 0x89
-#define BME280_DIG_T2_LSB_REG 0x8A
-#define BME280_DIG_T2_MSB_REG 0x8B
-#define BME280_DIG_T3_LSB_REG 0x8C
-#define BME280_DIG_T3_MSB_REG 0x8D
-#define BME280_DIG_P1_LSB_REG 0x8E
-#define BME280_DIG_P1_MSB_REG 0x8F
-#define BME280_DIG_P2_LSB_REG 0x90
-#define BME280_DIG_P2_MSB_REG 0x91
-#define BME280_DIG_P3_LSB_REG 0x92
-#define BME280_DIG_P3_MSB_REG 0x93
-#define BME280_DIG_P4_LSB_REG 0x94
-#define BME280_DIG_P4_MSB_REG 0x95
-#define BME280_DIG_P5_LSB_REG 0x96
-#define BME280_DIG_P5_MSB_REG 0x97
-#define BME280_DIG_P6_LSB_REG 0x98
-#define BME280_DIG_P6_MSB_REG 0x99
-#define BME280_DIG_P7_LSB_REG 0x9A
-#define BME280_DIG_P7_MSB_REG 0x9B
-#define BME280_DIG_P8_LSB_REG 0x9C
-#define BME280_DIG_P8_MSB_REG 0x9D
-#define BME280_DIG_P9_LSB_REG 0x9E
-#define BME280_DIG_P9_MSB_REG 0x9F
-
-#define BME280_DIG_H1_REG 0xA1
-
-#define BME280_DIG_H2_LSB_REG 0xE1
-#define BME280_DIG_H2_MSB_REG 0xE2
-#define BME280_DIG_H3_REG 0xE3
-#define BME280_DIG_H4_MSB_REG 0xE4
-#define BME280_DIG_H5_LSB_H4_LSB_REG 0xE5
-#define BME280_DIG_H5_MSB_REG 0xE6
-#define BME280_DIG_H6_REG 0xE7
-/****************************************************/
-/**\name REGISTER ADDRESS DEFINITIONS */
-/***************************************************/
-#define BME280_CHIP_ID_REG 0xD0 /*Chip ID Register */
-#define BME280_RST_REG 0xE0 /*Softreset Register */
-#define BME280_STAT_REG 0xF3 /*Status Register */
-#define BME280_CTRL_MEAS_REG 0xF4 /*Ctrl Measure Register */
-#define BME280_CTRL_HUMIDITY_REG 0xF2 /*Ctrl Humidity Register*/
-#define BME280_CONFIG_REG 0xF5 /*Configuration Register */
-#define BME280_PRESSURE_MSB_REG 0xF7 /*Pressure MSB Register */
-#define BME280_PRESSURE_LSB_REG 0xF8 /*Pressure LSB Register */
-#define BME280_PRESSURE_XLSB_REG 0xF9 /*Pressure XLSB Register */
-#define BME280_TEMPERATURE_MSB_REG 0xFA /*Temperature MSB Reg */
-#define BME280_TEMPERATURE_LSB_REG 0xFB /*Temperature LSB Reg */
-#define BME280_TEMPERATURE_XLSB_REG 0xFC /*Temperature XLSB Reg */
-#define BME280_HUMIDITY_MSB_REG 0xFD /*Humidity MSB Reg */
-#define BME280_HUMIDITY_LSB_REG 0xFE /*Humidity LSB Reg */
-/****************************************************/
-/**\name BIT MASK, LENGTH AND POSITION DEFINITIONS */
-/***************************************************/
-/* Status Register */
-#define BME280_STAT_REG_MEASURING__POS 3
-#define BME280_STAT_REG_MEASURING__MSK 0x08
-#define BME280_STAT_REG_MEASURING__LEN 1
-#define BME280_STAT_REG_MEASURING__REG BME280_STAT_REG
-
-#define BME280_STAT_REG_IM_UPDATE__POS 0
-#define BME280_STAT_REG_IM_UPDATE__MSK 0x01
-#define BME280_STAT_REG_IM_UPDATE__LEN 1
-#define BME280_STAT_REG_IM_UPDATE__REG BME280_STAT_REG
-/****************************************************/
-/**\name BIT MASK, LENGTH AND POSITION DEFINITIONS
-FOR TEMPERATURE OVERSAMPLING */
-/***************************************************/
-/* Control Measurement Register */
-#define BME280_CTRL_MEAS_REG_OVERSAMP_TEMPERATURE__POS 5
-#define BME280_CTRL_MEAS_REG_OVERSAMP_TEMPERATURE__MSK 0xE0
-#define BME280_CTRL_MEAS_REG_OVERSAMP_TEMPERATURE__LEN 3
-#define BME280_CTRL_MEAS_REG_OVERSAMP_TEMPERATURE__REG \
-BME280_CTRL_MEAS_REG
-/****************************************************/
-/**\name BIT MASK, LENGTH AND POSITION DEFINITIONS
-FOR PRESSURE OVERSAMPLING */
-/***************************************************/
-#define BME280_CTRL_MEAS_REG_OVERSAMP_PRESSURE__POS 2
-#define BME280_CTRL_MEAS_REG_OVERSAMP_PRESSURE__MSK 0x1C
-#define BME280_CTRL_MEAS_REG_OVERSAMP_PRESSURE__LEN 3
-#define BME280_CTRL_MEAS_REG_OVERSAMP_PRESSURE__REG \
-BME280_CTRL_MEAS_REG
-/****************************************************/
-/**\name BIT MASK, LENGTH AND POSITION DEFINITIONS
-FOR POWER MODE */
-/***************************************************/
-#define BME280_CTRL_MEAS_REG_POWER_MODE__POS 0
-#define BME280_CTRL_MEAS_REG_POWER_MODE__MSK 0x03
-#define BME280_CTRL_MEAS_REG_POWER_MODE__LEN 2
-#define BME280_CTRL_MEAS_REG_POWER_MODE__REG \
-BME280_CTRL_MEAS_REG
-/****************************************************/
-/**\name BIT MASK, LENGTH AND POSITION DEFINITIONS
-FOR HUMIDITY OVERSAMPLING */
-/***************************************************/
-#define BME280_CTRL_HUMIDITY_REG_OVERSAM_HUMIDITY__POS 0
-#define BME280_CTRL_HUMIDITY_REG_OVERSAM_HUMIDITY__MSK 0x07
-#define BME280_CTRL_HUMIDITY_REG_OVERSAM_HUMIDITY__LEN 3
-#define BME280_CTRL_HUMIDITY_REG_OVERSAM_HUMIDITY__REG \
-BME280_CTRL_HUMIDITY_REG
-/****************************************************/
-/**\name BIT MASK, LENGTH AND POSITION DEFINITIONS
-FOR STANDBY TIME */
-/***************************************************/
-/* Configuration Register */
-#define BME280_CONFIG_REG_TSB__POS 5
-#define BME280_CONFIG_REG_TSB__MSK 0xE0
-#define BME280_CONFIG_REG_TSB__LEN 3
-#define BME280_CONFIG_REG_TSB__REG BME280_CONFIG_REG
-/****************************************************/
-/**\name BIT MASK, LENGTH AND POSITION DEFINITIONS
-FOR FILTER */
-/***************************************************/
-#define BME280_CONFIG_REG_FILTER__POS 2
-#define BME280_CONFIG_REG_FILTER__MSK 0x1C
-#define BME280_CONFIG_REG_FILTER__LEN 3
-#define BME280_CONFIG_REG_FILTER__REG BME280_CONFIG_REG
-/****************************************************/
-/**\name BIT MASK, LENGTH AND POSITION DEFINITIONS
-FOR SPI ENABLE */
-/***************************************************/
-#define BME280_CONFIG_REG_SPI3_ENABLE__POS 0
-#define BME280_CONFIG_REG_SPI3_ENABLE__MSK 0x01
-#define BME280_CONFIG_REG_SPI3_ENABLE__LEN 1
-#define BME280_CONFIG_REG_SPI3_ENABLE__REG BME280_CONFIG_REG
-/****************************************************/
-/**\name BIT MASK, LENGTH AND POSITION DEFINITIONS
-FOR PRESSURE AND TEMPERATURE DATA */
-/***************************************************/
-/* Data Register */
-#define BME280_PRESSURE_XLSB_REG_DATA__POS 4
-#define BME280_PRESSURE_XLSB_REG_DATA__MSK 0xF0
-#define BME280_PRESSURE_XLSB_REG_DATA__LEN 4
-#define BME280_PRESSURE_XLSB_REG_DATA__REG BME280_PRESSURE_XLSB_REG
-
-#define BME280_TEMPERATURE_XLSB_REG_DATA__POS 4
-#define BME280_TEMPERATURE_XLSB_REG_DATA__MSK 0xF0
-#define BME280_TEMPERATURE_XLSB_REG_DATA__LEN 4
-#define BME280_TEMPERATURE_XLSB_REG_DATA__REG BME280_TEMPERATURE_XLSB_REG
-/****************************************************/
-/**\name BUS READ AND WRITE FUNCTION POINTERS */
-/***************************************************/
-#define BME280_WR_FUNC_PTR\
- s8 (*bus_write)(u8, u8,\
- u8 *, u8)
-
-#define BME280_RD_FUNC_PTR\
- s8 (*bus_read)(u8, u8,\
- u8 *, u8)
-
-#define BME280_MDELAY_DATA_TYPE u16
-
-#define BME280_3MS_DELAY 3
-/**************************************************************/
-/**\name STRUCTURE DEFINITIONS */
-/**************************************************************/
-/*!
- * @brief This structure holds all device specific calibration parameters
- */
-struct bme280_calibration_param_t {
- u16 dig_T1;/**<calibration T1 data*/
- s16 dig_T2;/**<calibration T2 data*/
- s16 dig_T3;/**<calibration T3 data*/
- u16 dig_P1;/**<calibration P1 data*/
- s16 dig_P2;/**<calibration P2 data*/
- s16 dig_P3;/**<calibration P3 data*/
- s16 dig_P4;/**<calibration P4 data*/
- s16 dig_P5;/**<calibration P5 data*/
- s16 dig_P6;/**<calibration P6 data*/
- s16 dig_P7;/**<calibration P7 data*/
- s16 dig_P8;/**<calibration P8 data*/
- s16 dig_P9;/**<calibration P9 data*/
-
- u8 dig_H1;/**<calibration H1 data*/
- s16 dig_H2;/**<calibration H2 data*/
- u8 dig_H3;/**<calibration H3 data*/
- s16 dig_H4;/**<calibration H4 data*/
- s16 dig_H5;/**<calibration H5 data*/
- s8 dig_H6;/**<calibration H6 data*/
-
- s32 t_fine;/**<calibration T_FINE data*/
-};
-/*!
- * @brief This structure holds BME280 initialization parameters
- */
-struct bme280_t {
- struct bme280_calibration_param_t cal_param;
- /**< calibration parameters*/
-
- u8 chip_id;/**< chip id of the sensor*/
- u8 dev_addr;/**< device address of the sensor*/
-
- u8 oversamp_temperature;/**< temperature over sampling*/
- u8 oversamp_pressure;/**< pressure over sampling*/
- u8 oversamp_humidity;/**< humidity over sampling*/
- u8 ctrl_hum_reg;/**< status of control humidity register*/
- u8 ctrl_meas_reg;/**< status of control measurement register*/
- u8 config_reg;/**< status of configuration register*/
- BME280_WR_FUNC_PTR;/**< bus write function pointer*/
- BME280_RD_FUNC_PTR;/**< bus read function pointer*/
- void(*delay_msec)(BME280_MDELAY_DATA_TYPE);/**< delay function pointer*/
-};
-/**************************************************************/
-/**\name FUNCTION DECLARATIONS */
-/**************************************************************/
-/**************************************************************/
-/**\name FUNCTION FOR INTIALIZATION */
-/**************************************************************/
-/*!
- * @brief This function is used for initialize
- * the bus read and bus write functions
- * and assign the chip id and I2C address of the BME280 sensor
- * chip id is read in the register 0xD0 bit from 0 to 7
- *
- * @param bme280 structure pointer.
- *
- * @note While changing the parameter of the bme280_t
- * @note consider the following point:
- * Changing the reference value of the parameter
- * will changes the local copy or local reference
- * make sure your changes will not
- * affect the reference value of the parameter
- * (Better case don't change the reference value of the parameter)
- *
- *
- *
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_init(struct bme280_t *bme280);
-/**************************************************************/
-/**\name FUNCTION FOR INTIALIZATION UNCOMPENSATED TEMPERATURE */
-/**************************************************************/
-/*!
- * @brief This API is used to read uncompensated temperature
- * in the registers 0xFA, 0xFB and 0xFC
- * @note 0xFA -> MSB -> bit from 0 to 7
- * @note 0xFB -> LSB -> bit from 0 to 7
- * @note 0xFC -> LSB -> bit from 4 to 7
- *
- * @param v_uncomp_temperature_s32 : The value of uncompensated temperature
- *
- *
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_read_uncomp_temperature(
-s32 *v_uncomp_temperature_s32);
-/**************************************************************/
-/**\name FUNCTION FOR INTIALIZATION TRUE TEMPERATURE */
-/**************************************************************/
-/*!
- * @brief Reads actual temperature from uncompensated temperature
- * @note Returns the value in 0.01 degree Centigrade
- * Output value of "5123" equals 51.23 DegC.
- *
- *
- *
- * @param v_uncomp_temperature_s32 : value of uncompensated temperature
- *
- *
- * @return Returns the actual temperature
- *
-*/
-s32 bme280_compensate_T_int32(s32 v_uncomp_temperature_s32);
-/*!
- * @brief Reads actual temperature from uncompensated temperature
- * @note Returns the value with 500LSB/DegC centred around 24 DegC
- * output value of "5123" equals(5123/500)+24 = 34.246DegC
- *
- *
- * @param v_uncomp_temperature_s32: value of uncompensated temperature
- *
- *
- *
- * @return Return the actual temperature as s16 output
- *
-*/
-s16 bme280_compensate_T_int32_sixteen_bit_output(s32 v_uncomp_temperature_s32);
-/**************************************************************/
-/**\name FUNCTION FOR INTIALIZATION UNCOMPENSATED PRESSURE */
-/**************************************************************/
-/*!
- * @brief This API is used to read uncompensated pressure.
- * in the registers 0xF7, 0xF8 and 0xF9
- * @note 0xF7 -> MSB -> bit from 0 to 7
- * @note 0xF8 -> LSB -> bit from 0 to 7
- * @note 0xF9 -> LSB -> bit from 4 to 7
- *
- *
- *
- * @param v_uncomp_pressure_s32 : The value of uncompensated pressure
- *
- *
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_read_uncomp_pressure(
-s32 *v_uncomp_pressure_s32);
-/**************************************************************/
-/**\name FUNCTION FOR INTIALIZATION TRUE PRESSURE */
-/**************************************************************/
-/*!
- * @brief Reads actual pressure from uncompensated pressure
- * @note Returns the value in Pascal(Pa)
- * Output value of "96386" equals 96386 Pa =
- * 963.86 hPa = 963.86 millibar
- *
- *
- *
- * @param v_uncomp_pressure_s32 : value of uncompensated pressure
- *
- *
- *
- * @return Return the actual pressure output as u32
- *
-*/
-u32 bme280_compensate_P_int32(s32 v_uncomp_pressure_s32);
-/**************************************************************/
-/**\name FUNCTION FOR INTIALIZATION UNCOMPENSATED HUMIDITY */
-/**************************************************************/
-/*!
- * @brief This API is used to read uncompensated humidity.
- * in the registers 0xF7, 0xF8 and 0xF9
- * @note 0xFD -> MSB -> bit from 0 to 7
- * @note 0xFE -> LSB -> bit from 0 to 7
- *
- *
- *
- * @param v_uncomp_humidity_s32 : The value of uncompensated humidity
- *
- *
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_read_uncomp_humidity(
-s32 *v_uncomp_humidity_s32);
-/**************************************************************/
-/**\name FUNCTION FOR INTIALIZATION RELATIVE HUMIDITY */
-/**************************************************************/
-/*!
- * @brief Reads actual humidity from uncompensated humidity
- * @note Returns the value in %rH as unsigned 32bit integer
- * in Q22.10 format(22 integer 10 fractional bits).
- * @note An output value of 42313
- * represents 42313 / 1024 = 41.321 %rH
- *
- *
- *
- * @param v_uncomp_humidity_s32: value of uncompensated humidity
- *
- * @return Return the actual relative humidity output as u32
- *
-*/
-u32 bme280_compensate_H_int32(s32 v_uncomp_humidity_s32);
-/*!
- * @brief Reads actual humidity from uncompensated humidity
- * @note Returns the value in %rH as unsigned 16bit integer
- * @note An output value of 42313
- * represents 42313/512 = 82.643 %rH
- *
- *
- *
- * @param v_uncomp_humidity_s32: value of uncompensated humidity
- *
- *
- * @return Return the actual relative humidity output as u16
- *
-*/
-u16 bme280_compensate_H_int32_sixteen_bit_output(s32 v_uncomp_humidity_s32);
-/**************************************************************/
-/**\name FUNCTION FOR INTIALIZATION UNCOMPENSATED PRESSURE,
- TEMPERATURE AND HUMIDITY */
-/**************************************************************/
-/*!
- * @brief This API used to read uncompensated
- * pressure,temperature and humidity
- *
- *
- *
- *
- * @param v_uncomp_pressure_s32: The value of uncompensated pressure.
- * @param v_uncomp_temperature_s32: The value of uncompensated temperature
- * @param v_uncomp_humidity_s32: The value of uncompensated humidity.
- *
- *
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_read_uncomp_pressure_temperature_humidity(
-s32 *v_uncomp_pressure_s32,
-s32 *v_uncomp_temperature_s32, s32 *v_uncomp_humidity_s32);
-/**************************************************************/
-/**\name FUNCTION FOR TRUE UNCOMPENSATED PRESSURE,
- TEMPERATURE AND HUMIDITY */
-/**************************************************************/
-/*!
- * @brief This API used to read true pressure, temperature and humidity
- *
- *
- *
- *
- * @param v_pressure_u32 : The value of compensated pressure.
- * @param v_temperature_s32 : The value of compensated temperature.
- * @param v_humidity_u32 : The value of compensated humidity.
- *
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_read_pressure_temperature_humidity(
-u32 *v_pressure_u32, s32 *v_temperature_s32, u32 *v_humidity_u32);
-/**************************************************************/
-/**\name FUNCTION FOR CALIBRATION */
-/**************************************************************/
-/*!
- * @brief This API is used to
- * calibration parameters used for calculation in the registers
- *
- * parameter | Register address | bit
- *------------|------------------|----------------
- * dig_T1 | 0x88 and 0x89 | from 0 : 7 to 8: 15
- * dig_T2 | 0x8A and 0x8B | from 0 : 7 to 8: 15
- * dig_T3 | 0x8C and 0x8D | from 0 : 7 to 8: 15
- * dig_P1 | 0x8E and 0x8F | from 0 : 7 to 8: 15
- * dig_P2 | 0x90 and 0x91 | from 0 : 7 to 8: 15
- * dig_P3 | 0x92 and 0x93 | from 0 : 7 to 8: 15
- * dig_P4 | 0x94 and 0x95 | from 0 : 7 to 8: 15
- * dig_P5 | 0x96 and 0x97 | from 0 : 7 to 8: 15
- * dig_P6 | 0x98 and 0x99 | from 0 : 7 to 8: 15
- * dig_P7 | 0x9A and 0x9B | from 0 : 7 to 8: 15
- * dig_P8 | 0x9C and 0x9D | from 0 : 7 to 8: 15
- * dig_P9 | 0x9E and 0x9F | from 0 : 7 to 8: 15
- * dig_H1 | 0xA1 | from 0 to 7
- * dig_H2 | 0xE1 and 0xE2 | from 0 : 7 to 8: 15
- * dig_H3 | 0xE3 | from 0 to 7
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_get_calib_param(void);
-/**************************************************************/
-/**\name FUNCTION FOR TEMPERATURE OVER SAMPLING */
-/**************************************************************/
-/*!
- * @brief This API is used to get
- * the temperature oversampling setting in the register 0xF4
- * bits from 5 to 7
- *
- * value | Temperature oversampling
- * ---------------------|---------------------------------
- * 0x00 | Skipped
- * 0x01 | BME280_OVERSAMP_1X
- * 0x02 | BME280_OVERSAMP_2X
- * 0x03 | BME280_OVERSAMP_4X
- * 0x04 | BME280_OVERSAMP_8X
- * 0x05,0x06 and 0x07 | BME280_OVERSAMP_16X
- *
- *
- * @param v_value_u8 : The value of temperature over sampling
- *
- *
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_get_oversamp_temperature(
-u8 *v_value_u8);
-/*!
- * @brief This API is used to set
- * the temperature oversampling setting in the register 0xF4
- * bits from 5 to 7
- *
- * value | Temperature oversampling
- * ---------------------|---------------------------------
- * 0x00 | Skipped
- * 0x01 | BME280_OVERSAMP_1X
- * 0x02 | BME280_OVERSAMP_2X
- * 0x03 | BME280_OVERSAMP_4X
- * 0x04 | BME280_OVERSAMP_8X
- * 0x05,0x06 and 0x07 | BME280_OVERSAMP_16X
- *
- *
- * @param v_value_u8 : The value of temperature over sampling
- *
- *
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_set_oversamp_temperature(
-u8 v_value_u8);
-/**************************************************************/
-/**\name FUNCTION FOR PRESSURE OVER SAMPLING */
-/**************************************************************/
-/*!
- * @brief This API is used to get
- * the pressure oversampling setting in the register 0xF4
- * bits from 2 to 4
- *
- * value | Pressure oversampling
- * --------------------|--------------------------
- * 0x00 | Skipped
- * 0x01 | BME280_OVERSAMP_1X
- * 0x02 | BME280_OVERSAMP_2X
- * 0x03 | BME280_OVERSAMP_4X
- * 0x04 | BME280_OVERSAMP_8X
- * 0x05,0x06 and 0x07 | BME280_OVERSAMP_16X
- *
- *
- * @param v_value_u8 : The value of pressure oversampling
- *
- *
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_get_oversamp_pressure(
-u8 *v_value_u8);
-/*!
- * @brief This API is used to set
- * the pressure oversampling setting in the register 0xF4
- * bits from 2 to 4
- *
- * value | Pressure oversampling
- * --------------------|--------------------------
- * 0x00 | Skipped
- * 0x01 | BME280_OVERSAMP_1X
- * 0x02 | BME280_OVERSAMP_2X
- * 0x03 | BME280_OVERSAMP_4X
- * 0x04 | BME280_OVERSAMP_8X
- * 0x05,0x06 and 0x07 | BME280_OVERSAMP_16X
- *
- *
- * @param v_value_u8 : The value of pressure oversampling
- *
- *
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_set_oversamp_pressure(
-u8 v_value_u8);
-/**************************************************************/
-/**\name FUNCTION FOR HUMIDITY OVER SAMPLING */
-/**************************************************************/
-/*!
- * @brief This API is used to get
- * the humidity oversampling setting in the register 0xF2
- * bits from 0 to 2
- *
- * value | Humidity oversampling
- * ---------------------|-------------------------
- * 0x00 | Skipped
- * 0x01 | BME280_OVERSAMP_1X
- * 0x02 | BME280_OVERSAMP_2X
- * 0x03 | BME280_OVERSAMP_4X
- * 0x04 | BME280_OVERSAMP_8X
- * 0x05,0x06 and 0x07 | BME280_OVERSAMP_16X
- *
- *
- * @param v_value_u8 : The value of humidity over sampling
- *
- *
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_get_oversamp_humidity(u8 *v_value_u8);
-/*!
- * @brief This API is used to set
- * the humidity oversampling setting in the register 0xF2
- * bits from 0 to 2
- *
- * value | Humidity oversampling
- * ---------------------|-------------------------
- * 0x00 | Skipped
- * 0x01 | BME280_OVERSAMP_1X
- * 0x02 | BME280_OVERSAMP_2X
- * 0x03 | BME280_OVERSAMP_4X
- * 0x04 | BME280_OVERSAMP_8X
- * 0x05,0x06 and 0x07 | BME280_OVERSAMP_16X
- *
- *
- * @param v_value_u8 : The value of humidity over sampling
- *
- *
- *
- * @note The "BME280_CTRL_HUMIDITY_REG_OVERSAM_HUMIDITY"
- * register sets the humidity
- * data acquisition options of the device.
- * @note changes to this registers only become
- * effective after a write operation to
- * "BME280_CTRL_MEAS_REG" register.
- * @note In the code automated reading and writing of
- * "BME280_CTRL_HUMIDITY_REG_OVERSAM_HUMIDITY"
- * @note register first set the
- * "BME280_CTRL_HUMIDITY_REG_OVERSAM_HUMIDITY"
- * and then read and write
- * the "BME280_CTRL_MEAS_REG" register in the function.
- *
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_set_oversamp_humidity(
-u8 v_value_u8);
-/**************************************************************/
-/**\name FUNCTION FOR POWER MODE*/
-/**************************************************************/
-/*!
- * @brief This API used to get the
- * Operational Mode from the sensor in the register 0xF4 bit 0 and 1
- *
- *
- *
- * @param v_power_mode_u8 : The value of power mode
- * value | mode
- * -----------------|------------------
- * 0x00 | BME280_SLEEP_MODE
- * 0x01 and 0x02 | BME280_FORCED_MODE
- * 0x03 | BME280_NORMAL_MODE
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_get_power_mode(u8 *v_power_mode_u8);
-/*!
- * @brief This API used to set the
- * Operational Mode from the sensor in the register 0xF4 bit 0 and 1
- *
- *
- *
- * @param v_power_mode_u8 : The value of power mode
- * value | mode
- * -----------------|------------------
- * 0x00 | BME280_SLEEP_MODE
- * 0x01 and 0x02 | BME280_FORCED_MODE
- * 0x03 | BME280_NORMAL_MODE
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_set_power_mode(u8 v_power_mode_u8);
-/**************************************************************/
-/**\name FUNCTION FOR SOFT RESET*/
-/**************************************************************/
-/*!
- * @brief Used to reset the sensor
- * The value 0xB6 is written to the 0xE0
- * register the device is reset using the
- * complete power-on-reset procedure.
- * @note Soft reset can be easily set using bme280_set_softreset().
- * @note Usage Hint : bme280_set_softreset()
- *
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_set_soft_rst(void);
-/**************************************************************/
-/**\name FUNCTION FOR SPI ENABLE*/
-/**************************************************************/
-/*!
- * @brief This API used to get the sensor
- * SPI mode(communication type) in the register 0xF5 bit 0
- *
- *
- *
- * @param v_enable_disable_u8 : The value of SPI enable
- * value | Description
- * --------|--------------
- * 0 | Disable
- * 1 | Enable
- *
- *
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_get_spi3(u8 *v_enable_disable_u8);
-/*!
- * @brief This API used to set the sensor
- * SPI mode(communication type) in the register 0xF5 bit 0
- *
- *
- *
- * @param v_enable_disable_u8 : The value of SPI enable
- * value | Description
- * --------|--------------
- * 0 | Disable
- * 1 | Enable
- *
- *
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_set_spi3(u8 v_enable_disable_u8);
-/**************************************************************/
-/**\name FUNCTION FOR IIR FILTER*/
-/**************************************************************/
-/*!
- * @brief This API is used to reads filter setting
- * in the register 0xF5 bit 3 and 4
- *
- *
- *
- * @param v_value_u8 : The value of IIR filter coefficient
- *
- * value | Filter coefficient
- * -------------|-------------------------
- * 0x00 | BME280_FILTER_COEFF_OFF
- * 0x01 | BME280_FILTER_COEFF_2
- * 0x02 | BME280_FILTER_COEFF_4
- * 0x03 | BME280_FILTER_COEFF_8
- * 0x04 | BME280_FILTER_COEFF_16
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_get_filter(u8 *v_value_u8);
-/*!
- * @brief This API is used to write filter setting
- * in the register 0xF5 bit 3 and 4
- *
- *
- *
- * @param v_value_u8 : The value of IIR filter coefficient
- *
- * value | Filter coefficient
- * -------------|-------------------------
- * 0x00 | BME280_FILTER_COEFF_OFF
- * 0x01 | BME280_FILTER_COEFF_2
- * 0x02 | BME280_FILTER_COEFF_4
- * 0x03 | BME280_FILTER_COEFF_8
- * 0x04 | BME280_FILTER_COEFF_16
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_set_filter(u8 v_value_u8);
-/**************************************************************/
-/**\name FUNCTION FOR STANDBY DURATION*/
-/**************************************************************/
-/*!
- * @brief This API used to Read the
- * standby duration time from the sensor in the register 0xF5 bit 5 to 7
- *
- * @param v_standby_durn_u8 : The value of standby duration time value.
- * value | standby duration
- * -------------|-----------------------
- * 0x00 | BME280_STANDBY_TIME_1_MS
- * 0x01 | BME280_STANDBY_TIME_63_MS
- * 0x02 | BME280_STANDBY_TIME_125_MS
- * 0x03 | BME280_STANDBY_TIME_250_MS
- * 0x04 | BME280_STANDBY_TIME_500_MS
- * 0x05 | BME280_STANDBY_TIME_1000_MS
- * 0x06 | BME280_STANDBY_TIME_2000_MS
- * 0x07 | BME280_STANDBY_TIME_4000_MS
- *
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_get_standby_durn(u8 *v_standby_durn_u8);
-/*!
- * @brief This API used to write the
- * standby duration time from the sensor in the register 0xF5 bit 5 to 7
- *
- * @param v_standby_durn_u8 : The value of standby duration time value.
- * value | standby duration
- * -------------|-----------------------
- * 0x00 | BME280_STANDBY_TIME_1_MS
- * 0x01 | BME280_STANDBY_TIME_63_MS
- * 0x02 | BME280_STANDBY_TIME_125_MS
- * 0x03 | BME280_STANDBY_TIME_250_MS
- * 0x04 | BME280_STANDBY_TIME_500_MS
- * 0x05 | BME280_STANDBY_TIME_1000_MS
- * 0x06 | BME280_STANDBY_TIME_2000_MS
- * 0x07 | BME280_STANDBY_TIME_4000_MS
- *
- * @note Normal mode comprises an automated perpetual
- * cycling between an (active)
- * Measurement period and an (inactive) standby period.
- * @note The standby time is determined by
- * the contents of the register t_sb.
- * Standby time can be set using BME280_STANDBY_TIME_125_MS.
- *
- * @note Usage Hint : bme280_set_standby_durn(BME280_STANDBY_TIME_125_MS)
- *
- *
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE bme280_set_standby_durn(u8 v_standby_durn_u8);
-/**************************************************************/
-/**\name FUNCTION FOR WORK MODE*/
-/**************************************************************/
-/*
- * @brief Writes the working mode to the sensor
- *
- *
- *
- *
- * @param v_work_mode_u8 : Mode to be set
- * value | Working mode
- * ----------|--------------------
- * 0 | BME280_ULTRALOWPOWER_MODE
- * 1 | BME280_LOWPOWER_MODE
- * 2 | BME280_STANDARDRESOLUTION_MODE
- * 3 | BME280_HIGHRESOLUTION_MODE
- * 4 | BME280_ULTRAHIGHRESOLUTION_MODE
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-/*BME280_RETURN_FUNCTION_TYPE bme280_set_work_mode(u8 v_work_mode_u8);*/
-/**************************************************************/
-/**\name FUNCTION FOR FORCE MODE DATA READ*/
-/**************************************************************/
-/*!
- * @brief This API used to read uncompensated
- * temperature,pressure and humidity in forced mode
- *
- *
- * @param v_uncom_pressure_s32: The value of uncompensated pressure
- * @param v_uncom_temperature_s32: The value of uncompensated temperature
- * @param v_uncom_humidity_s32: The value of uncompensated humidity
- *
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
-*/
-BME280_RETURN_FUNCTION_TYPE
-bme280_get_forced_uncomp_pressure_temperature_humidity(
-s32 *v_uncom_pressure_s32,
-s32 *v_uncom_temperature_s32, s32 *v_uncom_humidity_s32);
-/**************************************************************/
-/**\name FUNCTION FOR COMMON READ AND WRITE */
-/**************************************************************/
-/*!
- * @brief
- * This API write the data to
- * the given register
- *
- *
- * @param v_addr_u8 -> Address of the register
- * @param v_data_u8 -> The data from the register
- * @param v_len_u8 -> no of bytes to read
- *
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
- */
-BME280_RETURN_FUNCTION_TYPE bme280_write_register(u8 v_addr_u8,
-u8 *v_data_u8, u8 v_len_u8);
-/*!
- * @brief
- * This API reads the data from
- * the given register
- *
- *
- * @param v_addr_u8 -> Address of the register
- * @param v_data_u8 -> The data from the register
- * @param v_len_u8 -> no of bytes to read
- *
- *
- * @return results of bus communication function
- * @retval 0 -> Success
- * @retval -1 -> Error
- *
- *
- */
-BME280_RETURN_FUNCTION_TYPE bme280_read_register(u8 v_addr_u8,
-u8 *v_data_u8, u8 v_len_u8);
-/**************************************************************/
-/**\name FUNCTION FOR FLOAT OUTPUT TEMPERATURE*/
-/**************************************************************/
-#ifdef BME280_ENABLE_FLOAT
-/*!
- * @brief Reads actual temperature from uncompensated temperature
- * @note returns the value in Degree centigrade
- * @note Output value of "51.23" equals 51.23 DegC.
- *
- *
- *
- * @param v_uncom_temperature_s32 : value of uncompensated temperature
- *
- *
- *
- * @return Return the actual temperature in floating point
- *
-*/
-double bme280_compensate_T_double(s32 v_uncom_temperature_s32);
-/**************************************************************/
-/**\name FUNCTION FOR FLOAT OUTPUT PRESSURE*/
-/**************************************************************/
-/*!
- * @brief Reads actual pressure from uncompensated pressure
- * @note Returns pressure in Pa as double.
- * @note Output value of "96386.2"
- * equals 96386.2 Pa = 963.862 hPa.
- *
- *
- * @param v_uncom_pressure_s32 : value of uncompensated pressure
- *
- *
- * @return Return the actual pressure in floating point
- *
-*/
-double bme280_compensate_P_double(s32 v_uncom_pressure_s32);
-/**************************************************************/
-/**\name FUNCTION FOR FLOAT OUTPUT HUMIDITY*/
-/**************************************************************/
-/*!
- * @brief Reads actual humidity from uncompensated humidity
- * @note returns the value in relative humidity (%rH)
- * @note Output value of "42.12" equals 42.12 %rH
- *
- * @param v_uncom_humidity_s32 : value of uncompensated humidity
- *
- *
- *
- * @return Return the actual humidity in floating point
- *
-*/
-double bme280_compensate_H_double(s32 v_uncom_humidity_s32);
-#endif
-/**************************************************************/
-/**\name FUNCTION FOR 64BIT OUTPUT PRESSURE*/
-/**************************************************************/
-#if defined(BME280_ENABLE_INT64) && defined(BME280_64BITSUPPORT_PRESENT)
-/*!
- * @brief Reads actual pressure from uncompensated pressure
- * @note Returns the value in Pa as unsigned 32 bit
- * integer in Q24.8 format (24 integer bits and
- * 8 fractional bits).
- * @note Output value of "24674867"
- * represents 24674867 / 256 = 96386.2 Pa = 963.862 hPa
- *
- *
- *
- * @param v_uncom_pressure_s32 : value of uncompensated temperature
- *
- *
- * @return Return the actual pressure in u32
- *
-*/
-u32 bme280_compensate_P_int64(s32 v_uncom_pressure_s32);
-/**************************************************************/
-/**\name FUNCTION FOR 24BIT OUTPUT PRESSURE*/
-/**************************************************************/
-/*!
- * @brief Reads actual pressure from uncompensated pressure
- * @note Returns the value in Pa.
- * @note Output value of "12337434"
- * @note represents 12337434 / 128 = 96386.2 Pa = 963.862 hPa
- *
- *
- *
- * @param v_uncom_pressure_s32 : value of uncompensated pressure
- *
- *
- * @return the actual pressure in u32
- *
-*/
-u32 bme280_compensate_P_int64_twentyfour_bit_output(s32 v_uncom_pressure_s32);
-#endif
-/**************************************************************/
-/**\name FUNCTION FOR WAIT PERIOD*/
-/**************************************************************/
-/*!
- * @brief Computing waiting time for sensor data read
- *
- *
- *
- *
- * @param v_delaytime_u8 : The value of delay time for force mode
- *
- *
- * @retval 0 -> Success
- *
- *
- */
-BME280_RETURN_FUNCTION_TYPE bme280_compute_wait_time(u8
-*v_delaytime_u8r);
-#endif
+/**\r
+* Copyright (c) 2020 Bosch Sensortec GmbH. All rights reserved.\r
+*\r
+* BSD-3-Clause\r
+*\r
+* Redistribution and use in source and binary forms, with or without\r
+* modification, are permitted provided that the following conditions are met:\r
+*\r
+* 1. Redistributions of source code must retain the above copyright\r
+* notice, this list of conditions and the following disclaimer.\r
+*\r
+* 2. Redistributions in binary form must reproduce the above copyright\r
+* notice, this list of conditions and the following disclaimer in the\r
+* documentation and/or other materials provided with the distribution.\r
+*\r
+* 3. Neither the name of the copyright holder nor the names of its\r
+* contributors may be used to endorse or promote products derived from\r
+* this software without specific prior written permission.\r
+*\r
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\r
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\r
+* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
+* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING\r
+* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+* POSSIBILITY OF SUCH DAMAGE.\r
+*\r
+* @file bme280.h\r
+* @date 2020-03-28\r
+* @version v3.5.0\r
+*\r
+*/\r
+\r
+/*! @file bme280.h\r
+ * @brief Sensor driver for BME280 sensor\r
+ */\r
+\r
+/*!\r
+ * @defgroup bme280 BME280\r
+ * @brief <a href="https://www.bosch-sensortec.com/bst/products/all_products/bme280">Product Overview</a>\r
+ * and <a href="https://github.com/BoschSensortec/BME280_driver">Sensor API Source Code</a>\r
+ */\r
+\r
+#ifndef BME280_H_\r
+#define BME280_H_\r
+\r
+/*! CPP guard */\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+/* Header includes */\r
+#include "bme280_defs.h"\r
+\r
+/**\r
+ * \ingroup bme280\r
+ * \defgroup bme280ApiInit Initialization\r
+ * @brief Initialize the sensor and device structure\r
+ */\r
+\r
+/*!\r
+ * \ingroup bme280ApiInit\r
+ * \page bme280_api_bme280_init bme280_init\r
+ * \code\r
+ * int8_t bme280_init(struct bme280_dev *dev);\r
+ * \endcode\r
+ * @details This API reads the chip-id of the sensor which is the first step to\r
+ * verify the sensor and also calibrates the sensor\r
+ * As this API is the entry point, call this API before using other APIs.\r
+ *\r
+ * @param[in,out] dev : Structure instance of bme280_dev\r
+ *\r
+ * @return Result of API execution status.\r
+ *\r
+ * @retval 0 -> Success.\r
+ * @retval > 0 -> Warning.\r
+ * @retval < 0 -> Fail.\r
+ *\r
+ */\r
+int8_t bme280_init(struct bme280_dev *dev);\r
+\r
+/**\r
+ * \ingroup bme280\r
+ * \defgroup bme280ApiRegister Registers\r
+ * @brief Generic API for accessing sensor registers\r
+ */\r
+\r
+/*!\r
+ * \ingroup bme280ApiRegister\r
+ * \page bme280_api_bme280_set_regs bme280_set_regs\r
+ * \code\r
+ * int8_t bme280_set_regs(const uint8_t reg_addr, const uint8_t *reg_data, uint8_t len, struct bme280_dev *dev);\r
+ * \endcode\r
+ * @details This API writes the given data to the register address of the sensor\r
+ *\r
+ * @param[in] reg_addr : Register addresses to where the data is to be written\r
+ * @param[in] reg_data : Pointer to data buffer which is to be written\r
+ * in the reg_addr of sensor.\r
+ * @param[in] len : No of bytes of data to write\r
+ * @param[in,out] dev : Structure instance of bme280_dev\r
+ *\r
+ * @return Result of API execution status.\r
+ *\r
+ * @retval 0 -> Success.\r
+ * @retval > 0 -> Warning.\r
+ * @retval < 0 -> Fail.\r
+ *\r
+ */\r
+int8_t bme280_set_regs(uint8_t *reg_addr, const uint8_t *reg_data, uint8_t len, struct bme280_dev *dev);\r
+\r
+/*!\r
+ * \ingroup bme280ApiRegister\r
+ * \page bme280_api_bme280_get_regs bme280_get_regs\r
+ * \code\r
+ * int8_t bme280_get_regs(uint8_t reg_addr, uint8_t *reg_data, uint8_t len, struct bme280_dev *dev);\r
+ * \endcode\r
+ * @details This API reads the data from the given register address of sensor.\r
+ *\r
+ * @param[in] reg_addr : Register address from where the data to be read\r
+ * @param[out] reg_data : Pointer to data buffer to store the read data.\r
+ * @param[in] len : No of bytes of data to be read.\r
+ * @param[in,out] dev : Structure instance of bme280_dev.\r
+ *\r
+ * @return Result of API execution status.\r
+ *\r
+ * @retval 0 -> Success.\r
+ * @retval > 0 -> Warning.\r
+ * @retval < 0 -> Fail.\r
+ *\r
+ */\r
+int8_t bme280_get_regs(uint8_t reg_addr, uint8_t *reg_data, uint16_t len, struct bme280_dev *dev);\r
+\r
+/**\r
+ * \ingroup bme280\r
+ * \defgroup bme280ApiSensorSettings Sensor Settings\r
+ * @brief Generic API for accessing sensor settings\r
+ */\r
+\r
+/*!\r
+ * \ingroup bme280ApiSensorSettings\r
+ * \page bme280_api_bme280_set_sensor_settings bme280_set_sensor_settings\r
+ * \code\r
+ * int8_t bme280_set_sensor_settings(uint8_t desired_settings, const struct bme280_dev *dev);\r
+ * \endcode\r
+ * @details This API sets the oversampling, filter and standby duration\r
+ * (normal mode) settings in the sensor.\r
+ *\r
+ * @param[in] dev : Structure instance of bme280_dev.\r
+ * @param[in] desired_settings : Variable used to select the settings which\r
+ * are to be set in the sensor.\r
+ *\r
+ * @note : Below are the macros to be used by the user for selecting the\r
+ * desired settings. User can do OR operation of these macros for configuring\r
+ * multiple settings.\r
+ *\r
+ * Macros | Functionality\r
+ * -----------------------|----------------------------------------------\r
+ * BME280_OSR_PRESS_SEL | To set pressure oversampling.\r
+ * BME280_OSR_TEMP_SEL | To set temperature oversampling.\r
+ * BME280_OSR_HUM_SEL | To set humidity oversampling.\r
+ * BME280_FILTER_SEL | To set filter setting.\r
+ * BME280_STANDBY_SEL | To set standby duration setting.\r
+ *\r
+ * @return Result of API execution status\r
+ *\r
+ * @retval 0 -> Success.\r
+ * @retval > 0 -> Warning.\r
+ * @retval < 0 -> Fail.\r
+ *\r
+ */\r
+int8_t bme280_set_sensor_settings(uint8_t desired_settings, struct bme280_dev *dev);\r
+\r
+/*!\r
+ * \ingroup bme280ApiSensorSettings\r
+ * \page bme280_api_bme280_get_sensor_settings bme280_get_sensor_settings\r
+ * \code\r
+ * int8_t bme280_get_sensor_settings(struct bme280_dev *dev);\r
+ * \endcode\r
+ * @details This API gets the oversampling, filter and standby duration\r
+ * (normal mode) settings from the sensor.\r
+ *\r
+ * @param[in,out] dev : Structure instance of bme280_dev.\r
+ *\r
+ * @return Result of API execution status\r
+ *\r
+ * @retval 0 -> Success.\r
+ * @retval > 0 -> Warning.\r
+ * @retval < 0 -> Fail.\r
+ *\r
+ */\r
+int8_t bme280_get_sensor_settings(struct bme280_dev *dev);\r
+\r
+/**\r
+ * \ingroup bme280\r
+ * \defgroup bme280ApiSensorMode Sensor Mode\r
+ * @brief Generic API for configuring sensor power mode\r
+ */\r
+\r
+/*!\r
+ * \ingroup bme280ApiSensorMode\r
+ * \page bme280_api_bme280_set_sensor_mode bme280_set_sensor_mode\r
+ * \code\r
+ * int8_t bme280_set_sensor_mode(uint8_t sensor_mode, const struct bme280_dev *dev);\r
+ * \endcode\r
+ * @details This API sets the power mode of the sensor.\r
+ *\r
+ * @param[in] dev : Structure instance of bme280_dev.\r
+ * @param[in] sensor_mode : Variable which contains the power mode to be set.\r
+ *\r
+ * sensor_mode | Macros\r
+ * ---------------------|-------------------\r
+ * 0 | BME280_SLEEP_MODE\r
+ * 1 | BME280_FORCED_MODE\r
+ * 3 | BME280_NORMAL_MODE\r
+ *\r
+ * @return Result of API execution status\r
+ *\r
+ * @retval 0 -> Success.\r
+ * @retval > 0 -> Warning.\r
+ * @retval < 0 -> Fail.\r
+ *\r
+ */\r
+int8_t bme280_set_sensor_mode(uint8_t sensor_mode, struct bme280_dev *dev);\r
+\r
+/*!\r
+ * \ingroup bme280ApiSensorMode\r
+ * \page bme280_api_bme280_get_sensor_mode bme280_get_sensor_mode\r
+ * \code\r
+ * int8_t bme280_get_sensor_mode(uint8_t *sensor_mode, const struct bme280_dev *dev);\r
+ * \endcode\r
+ * @details This API gets the power mode of the sensor.\r
+ *\r
+ * @param[in] dev : Structure instance of bme280_dev.\r
+ * @param[out] sensor_mode : Pointer variable to store the power mode.\r
+ *\r
+ * sensor_mode | Macros\r
+ * ---------------------|-------------------\r
+ * 0 | BME280_SLEEP_MODE\r
+ * 1 | BME280_FORCED_MODE\r
+ * 3 | BME280_NORMAL_MODE\r
+ *\r
+ * @return Result of API execution status\r
+ *\r
+ * @retval 0 -> Success.\r
+ * @retval > 0 -> Warning.\r
+ * @retval < 0 -> Fail.\r
+ *\r
+ */\r
+int8_t bme280_get_sensor_mode(uint8_t *sensor_mode, struct bme280_dev *dev);\r
+\r
+/**\r
+ * \ingroup bme280\r
+ * \defgroup bme280ApiSystem System\r
+ * @brief API that performs system-level operations\r
+ */\r
+\r
+/*!\r
+ * \ingroup bme280ApiSystem\r
+ * \page bme280_api_bme280_soft_reset bme280_soft_reset\r
+ * \code\r
+ * int8_t bme280_soft_reset(struct bme280_dev *dev);\r
+ * \endcode\r
+ * @details This API soft-resets the sensor.\r
+ *\r
+ * @param[in,out] dev : Structure instance of bme280_dev.\r
+ *\r
+ * @return Result of API execution status.\r
+ *\r
+ * @retval 0 -> Success.\r
+ * @retval > 0 -> Warning.\r
+ * @retval < 0 -> Fail.\r
+ *\r
+ */\r
+int8_t bme280_soft_reset(struct bme280_dev *dev);\r
+\r
+/**\r
+ * \ingroup bme280\r
+ * \defgroup bme280ApiSensorData Sensor Data\r
+ * @brief Data processing of sensor\r
+ */\r
+\r
+/*!\r
+ * \ingroup bme280ApiSensorData\r
+ * \page bme280_api_bme280_get_sensor_data bme280_get_sensor_data\r
+ * \code\r
+ * int8_t bme280_get_sensor_data(uint8_t sensor_comp, struct bme280_data *comp_data, struct bme280_dev *dev);\r
+ * \endcode\r
+ * @details This API reads the pressure, temperature and humidity data from the\r
+ * sensor, compensates the data and store it in the bme280_data structure\r
+ * instance passed by the user.\r
+ *\r
+ * @param[in] sensor_comp : Variable which selects which data to be read from\r
+ * the sensor.\r
+ *\r
+ * sensor_comp | Macros\r
+ * ------------|-------------------\r
+ * 1 | BME280_PRESS\r
+ * 2 | BME280_TEMP\r
+ * 4 | BME280_HUM\r
+ * 7 | BME280_ALL\r
+ *\r
+ * @param[out] comp_data : Structure instance of bme280_data.\r
+ * @param[in] dev : Structure instance of bme280_dev.\r
+ *\r
+ * @return Result of API execution status\r
+ *\r
+ * @retval 0 -> Success.\r
+ * @retval > 0 -> Warning.\r
+ * @retval < 0 -> Fail.\r
+ *\r
+ */\r
+int8_t bme280_get_sensor_data(uint8_t sensor_comp, struct bme280_data *comp_data, struct bme280_dev *dev);\r
+\r
+/*!\r
+ * \ingroup bme280ApiSensorData\r
+ * \page bme280_api_bme280_parse_sensor_data bme280_parse_sensor_data\r
+ * \code\r
+ * void bme280_parse_sensor_data(const uint8_t *reg_data, struct bme280_uncomp_data *uncomp_data);\r
+ * \endcode\r
+ * @details This API is used to parse the pressure, temperature and\r
+ * humidity data and store it in the bme280_uncomp_data structure instance.\r
+ *\r
+ * @param[in] reg_data : Contains register data which needs to be parsed\r
+ * @param[out] uncomp_data : Contains the uncompensated pressure, temperature\r
+ * and humidity data.\r
+ *\r
+ */\r
+void bme280_parse_sensor_data(const uint8_t *reg_data, struct bme280_uncomp_data *uncomp_data);\r
+\r
+/*!\r
+ * \ingroup bme280ApiSensorData\r
+ * \page bme280_api_bme280_compensate_data bme280_compensate_data\r
+ * \code\r
+ * int8_t bme280_compensate_data(uint8_t sensor_comp,\r
+ * const struct bme280_uncomp_data *uncomp_data,\r
+ * struct bme280_data *comp_data,\r
+ * struct bme280_calib_data *calib_data);\r
+ * \endcode\r
+ * @details This API is used to compensate the pressure and/or\r
+ * temperature and/or humidity data according to the component selected by the\r
+ * user.\r
+ *\r
+ * @param[in] sensor_comp : Used to select pressure and/or temperature and/or\r
+ * humidity.\r
+ * @param[in] uncomp_data : Contains the uncompensated pressure, temperature and\r
+ * humidity data.\r
+ * @param[out] comp_data : Contains the compensated pressure and/or temperature\r
+ * and/or humidity data.\r
+ * @param[in] calib_data : Pointer to the calibration data structure.\r
+ *\r
+ * @return Result of API execution status.\r
+ *\r
+ * @retval 0 -> Success.\r
+ * @retval > 0 -> Warning.\r
+ * @retval < 0 -> Fail.\r
+ *\r
+ */\r
+int8_t bme280_compensate_data(uint8_t sensor_comp,\r
+ const struct bme280_uncomp_data *uncomp_data,\r
+ struct bme280_data *comp_data,\r
+ struct bme280_calib_data *calib_data);\r
+\r
+/**\r
+ * \ingroup bme280\r
+ * \defgroup bme280ApiSensorDelay Sensor Delay\r
+ * @brief Generic API for measuring sensor delay\r
+ */\r
+\r
+/*!\r
+ * \ingroup bme280ApiSensorDelay\r
+ * \page bme280_api_bme280_cal_meas_delay bme280_cal_meas_delay\r
+ * \code\r
+ * uint32_t bme280_cal_meas_delay(const struct bme280_settings *settings);\r
+ * \endcode\r
+ * @brief This API is used to calculate the maximum delay in milliseconds required for the\r
+ * temperature/pressure/humidity(which ever are enabled) measurement to complete.\r
+ * The delay depends upon the number of sensors enabled and their oversampling configuration.\r
+ *\r
+ * @param[in] settings : contains the oversampling configurations.\r
+ *\r
+ * @return delay required in milliseconds.\r
+ *\r
+ */\r
+uint32_t bme280_cal_meas_delay(const struct bme280_settings *settings);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif /* End of CPP guard */\r
+#endif /* BME280_H_ */\r
+/** @}*/\r