* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
* POSSIBILITY OF SUCH DAMAGE.\r
*\r
-* @file bme280.c\r
-* @date 2020-01-24\r
-* @version v3.4.3\r
+* @file bme280.c\r
+* @date 2020-03-28\r
+* @version v3.5.0\r
*\r
*/\r
\r
\r
/**\name Internal macros */\r
/* To identify osr settings selected by user */\r
-#define OVERSAMPLING_SETTINGS UINT8_C(0x07)\r
+#define OVERSAMPLING_SETTINGS UINT8_C(0x07)\r
\r
/* To identify filter and standby settings selected by user */\r
-#define FILTER_STANDBY_SETTINGS UINT8_C(0x18)\r
+#define FILTER_STANDBY_SETTINGS UINT8_C(0x18)\r
\r
/*!\r
* @brief This internal API puts the device to sleep mode.\r
* @param[in] dev : Structure instance of bme280_dev.\r
*\r
* @return Result of API execution status.\r
- * @retval zero -> Success / +ve value -> Warning / -ve value -> Error\r
+ *\r
+ * @retval 0 -> Success.\r
+ * @retval > 0 -> Warning.\r
+ * @retval < 0 -> Fail.\r
+ *\r
*/\r
-static int8_t put_device_to_sleep(const struct bme280_dev *dev);\r
+static int8_t put_device_to_sleep(struct bme280_dev *dev);\r
\r
/*!\r
* @brief This internal API writes the power mode in the sensor.\r
*\r
- * @param[in] dev : Structure instance of bme280_dev.\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
* @return Result of API execution status.\r
- * @retval zero -> Success / +ve value -> Warning / -ve value -> Error\r
+ *\r
+ * @retval 0 -> Success.\r
+ * @retval > 0 -> Warning.\r
+ * @retval < 0 -> Fail.\r
+ *\r
*/\r
-static int8_t write_power_mode(uint8_t sensor_mode, const struct bme280_dev *dev);\r
+static int8_t write_power_mode(uint8_t sensor_mode, struct bme280_dev *dev);\r
\r
/*!\r
* @brief This internal API is used to validate the device pointer for\r
* @param[in] dev : Structure instance of bme280_dev.\r
*\r
* @return Result of API execution status\r
- * @retval zero -> Success / +ve value -> Warning / -ve value -> Error\r
+ *\r
+ * @retval 0 -> Success.\r
+ * @retval > 0 -> Warning.\r
+ * @retval < 0 -> Fail.\r
+ *\r
*/\r
static int8_t null_ptr_check(const struct bme280_dev *dev);\r
\r
* @brief This internal API interleaves the register address between the\r
* register data buffer for burst write operation.\r
*\r
- * @param[in] reg_addr : Contains the register address array.\r
+ * @param[in] reg_addr : Contains the register address array.\r
* @param[out] temp_buff : Contains the temporary buffer to store the\r
* register data and register address.\r
- * @param[in] reg_data : Contains the register data to be written in the\r
+ * @param[in] reg_data : Contains the register data to be written in the\r
* temporary buffer.\r
- * @param[in] len : No of bytes of data to be written for burst write.\r
+ * @param[in] len : No of bytes of data to be written for burst write.\r
+ *\r
*/\r
static void interleave_reg_addr(const uint8_t *reg_addr, uint8_t *temp_buff, const uint8_t *reg_data, uint8_t len);\r
\r
* @param[in] dev : Structure instance of bme280_dev.\r
*\r
* @return Result of API execution status\r
- * @retval zero -> Success / +ve value -> Warning / -ve value -> Error\r
+ *\r
+ * @retval 0 -> Success.\r
+ * @retval > 0 -> Warning.\r
+ * @retval < 0 -> Fail.\r
+ *\r
*/\r
static int8_t get_calib_data(struct bme280_dev *dev);\r
\r
* @brief This internal API is used to parse the temperature and\r
* pressure calibration data and store it in the device structure.\r
*\r
- * @param[out] dev : Structure instance of bme280_dev to store the calib data.\r
+ * @param[out] dev : Structure instance of bme280_dev to store the calib data.\r
* @param[in] reg_data : Contains the calibration data to be parsed.\r
+ *\r
*/\r
static void parse_temp_press_calib_data(const uint8_t *reg_data, struct bme280_dev *dev);\r
\r
* @brief This internal API is used to parse the humidity calibration data\r
* and store it in device structure.\r
*\r
- * @param[out] dev : Structure instance of bme280_dev to store the calib data.\r
+ * @param[out] dev : Structure instance of bme280_dev to store the calib data.\r
* @param[in] reg_data : Contains calibration data to be parsed.\r
+ *\r
*/\r
static void parse_humidity_calib_data(const uint8_t *reg_data, struct bme280_dev *dev);\r
\r
* return the compensated pressure data in double data type.\r
*\r
* @param[in] uncomp_data : Contains the uncompensated pressure data.\r
- * @param[in] calib_data : Pointer to the calibration data structure.\r
+ * @param[in] calib_data : Pointer to the calibration data structure.\r
+ *\r
+ * @return Compensated pressure data in double.\r
*\r
- * @return Compensated pressure data.\r
- * @retval Compensated pressure data in double.\r
*/\r
static double compensate_pressure(const struct bme280_uncomp_data *uncomp_data,\r
const struct bme280_calib_data *calib_data);\r
* return the compensated humidity data in double data type.\r
*\r
* @param[in] uncomp_data : Contains the uncompensated humidity data.\r
- * @param[in] calib_data : Pointer to the calibration data structure.\r
+ * @param[in] calib_data : Pointer to the calibration data structure.\r
+ *\r
+ * @return Compensated humidity data in double.\r
*\r
- * @return Compensated humidity data.\r
- * @retval Compensated humidity data in double.\r
*/\r
static double compensate_humidity(const struct bme280_uncomp_data *uncomp_data,\r
const struct bme280_calib_data *calib_data);\r
* return the compensated temperature data in double data type.\r
*\r
* @param[in] uncomp_data : Contains the uncompensated temperature data.\r
- * @param[in] calib_data : Pointer to calibration data structure.\r
+ * @param[in] calib_data : Pointer to calibration data structure.\r
+ *\r
+ * @return Compensated temperature data in double.\r
*\r
- * @return Compensated temperature data.\r
- * @retval Compensated temperature data in double.\r
*/\r
static double compensate_temperature(const struct bme280_uncomp_data *uncomp_data,\r
struct bme280_calib_data *calib_data);\r
* return the compensated temperature data in integer data type.\r
*\r
* @param[in] uncomp_data : Contains the uncompensated temperature data.\r
- * @param[in] calib_data : Pointer to calibration data structure.\r
+ * @param[in] calib_data : Pointer to calibration data structure.\r
+ *\r
+ * @return Compensated temperature data in integer.\r
*\r
- * @return Compensated temperature data.\r
- * @retval Compensated temperature data in integer.\r
*/\r
static int32_t compensate_temperature(const struct bme280_uncomp_data *uncomp_data,\r
struct bme280_calib_data *calib_data);\r
* return the compensated pressure data in integer data type.\r
*\r
* @param[in] uncomp_data : Contains the uncompensated pressure data.\r
- * @param[in] calib_data : Pointer to the calibration data structure.\r
+ * @param[in] calib_data : Pointer to the calibration data structure.\r
+ *\r
+ * @return Compensated pressure data in integer.\r
*\r
- * @return Compensated pressure data.\r
- * @retval Compensated pressure data in integer.\r
*/\r
static uint32_t compensate_pressure(const struct bme280_uncomp_data *uncomp_data,\r
const struct bme280_calib_data *calib_data);\r
* return the compensated humidity data in integer data type.\r
*\r
* @param[in] uncomp_data : Contains the uncompensated humidity data.\r
- * @param[in] calib_data : Pointer to the calibration data structure.\r
+ * @param[in] calib_data : Pointer to the calibration data structure.\r
+ *\r
+ * @return Compensated humidity data in integer.\r
*\r
- * @return Compensated humidity data.\r
- * @retval Compensated humidity data in integer.\r
*/\r
static uint32_t compensate_humidity(const struct bme280_uncomp_data *uncomp_data,\r
const struct bme280_calib_data *calib_data);\r
* @brief This internal API is used to identify the settings which the user\r
* wants to modify in the sensor.\r
*\r
- * @param[in] sub_settings : Contains the settings subset to identify particular\r
+ * @param[in] sub_settings : Contains the settings subset to identify particular\r
* group of settings which the user is interested to change.\r
* @param[in] desired_settings : Contains the user specified settings.\r
*\r
* @return Indicates whether user is interested to modify the settings which\r
* are related to sub_settings.\r
- * @retval True -> User wants to modify this group of settings\r
- * @retval False -> User does not want to modify this group of settings\r
+ * @return True -> User wants to modify this group of settings\r
+ * @return False -> User does not want to modify this group of settings\r
+ *\r
*/\r
static uint8_t are_settings_changed(uint8_t sub_settings, uint8_t desired_settings);\r
\r
/*!\r
- * @brief This API sets the humidity oversampling settings of the sensor.\r
+ * @brief This API sets the humidity over sampling settings of the sensor.\r
*\r
- * @param[in] dev : Structure instance of bme280_dev.\r
+ * @param[in] dev : Structure instance of bme280_dev.\r
+ * @param[in] settings : Pointer variable which contains the settings to\r
+ * be set in the sensor.\r
*\r
* @return Result of API execution status\r
- * @retval zero -> Success / +ve value -> Warning / -ve value -> Error\r
+ *\r
+ * @retval 0 -> Success.\r
+ * @retval > 0 -> Warning.\r
+ * @retval < 0 -> Fail.\r
+ *\r
*/\r
-static int8_t set_osr_humidity_settings(const struct bme280_settings *settings, const struct bme280_dev *dev);\r
+static int8_t set_osr_humidity_settings(const struct bme280_settings *settings, struct bme280_dev *dev);\r
\r
/*!\r
* @brief This internal API sets the oversampling settings for pressure,\r
*\r
* @param[in] desired_settings : Variable used to select the settings which\r
* are to be set.\r
- * @param[in] dev : Structure instance of bme280_dev.\r
+ * @param[in] settings : Pointer variable which contains the settings to\r
+ * be set in the sensor.\r
+ * @param[in] dev : Structure instance of bme280_dev.\r
*\r
* @return Result of API execution status\r
- * @retval zero -> Success / +ve value -> Warning / -ve value -> Error\r
+ *\r
+ * @retval 0 -> Success.\r
+ * @retval > 0 -> Warning.\r
+ * @retval < 0 -> Fail.\r
+ *\r
*/\r
-static int8_t set_osr_settings(uint8_t desired_settings,\r
- const struct bme280_settings *settings,\r
- const struct bme280_dev *dev);\r
+static int8_t set_osr_settings(uint8_t desired_settings, const struct bme280_settings *settings,\r
+ struct bme280_dev *dev);\r
\r
/*!\r
* @brief This API sets the pressure and/or temperature oversampling settings\r
* @param[in] dev : Structure instance of bme280_dev.\r
* @param[in] desired_settings: variable to select the pressure and/or\r
* temperature oversampling settings.\r
+ * @param[in] settings : Pointer variable which contains the settings to\r
+ * be set in the sensor.\r
*\r
* @return Result of API execution status\r
- * @retval zero -> Success / +ve value -> Warning / -ve value -> Error\r
+ *\r
+ * @retval 0 -> Success.\r
+ * @retval > 0 -> Warning.\r
+ * @retval < 0 -> Fail.\r
+ *\r
*/\r
static int8_t set_osr_press_temp_settings(uint8_t desired_settings,\r
const struct bme280_settings *settings,\r
- const struct bme280_dev *dev);\r
+ struct bme280_dev *dev);\r
\r
/*!\r
* @brief This internal API fills the pressure oversampling settings provided by\r
* the user in the data buffer so as to write in the sensor.\r
*\r
- * @param[in] dev : Structure instance of bme280_dev.\r
+ * @param[in] settings : Pointer variable which contains the settings to\r
+ * be set in the sensor.\r
* @param[out] reg_data : Variable which is filled according to the pressure\r
* oversampling data provided by the user.\r
+ *\r
*/\r
static void fill_osr_press_settings(uint8_t *reg_data, const struct bme280_settings *settings);\r
\r
* @brief This internal API fills the temperature oversampling settings provided\r
* by the user in the data buffer so as to write in the sensor.\r
*\r
- * @param[in] dev : Structure instance of bme280_dev.\r
+ * @param[in] settings : Pointer variable which contains the settings to\r
+ * be set in the sensor.\r
* @param[out] reg_data : Variable which is filled according to the temperature\r
* oversampling data provided by the user.\r
+ *\r
*/\r
static void fill_osr_temp_settings(uint8_t *reg_data, const struct bme280_settings *settings);\r
\r
* in the sensor according to the settings selected by the user.\r
*\r
* @param[in] dev : Structure instance of bme280_dev.\r
- * @param[in] desired_settings : variable to select the filter and/or\r
- * standby duration settings.\r
+ * @param[in] settings : Pointer variable which contains the settings to\r
+ * be set in the sensor.\r
+ * @param[in] settings : Structure instance of bme280_settings.\r
*\r
* @return Result of API execution status\r
- * @retval zero -> Success / +ve value -> Warning / -ve value -> Error\r
+ *\r
+ * @retval 0 -> Success.\r
+ * @retval > 0 -> Warning.\r
+ * @retval < 0 -> Fail.\r
+ *\r
*/\r
static int8_t set_filter_standby_settings(uint8_t desired_settings,\r
const struct bme280_settings *settings,\r
- const struct bme280_dev *dev);\r
+ struct bme280_dev *dev);\r
\r
/*!\r
* @brief This internal API fills the filter settings provided by the user\r
* in the data buffer so as to write in the sensor.\r
*\r
- * @param[in] dev : Structure instance of bme280_dev.\r
+ * @param[in] settings : Pointer variable which contains the settings to\r
+ * be set in the sensor.\r
* @param[out] reg_data : Variable which is filled according to the filter\r
* settings data provided by the user.\r
+ *\r
*/\r
static void fill_filter_settings(uint8_t *reg_data, const struct bme280_settings *settings);\r
\r
* @brief This internal API fills the standby duration settings provided by the\r
* user in the data buffer so as to write in the sensor.\r
*\r
- * @param[in] dev : Structure instance of bme280_dev.\r
+ * @param[in] settings : Pointer variable which contains the settings to\r
+ * be set in the sensor.\r
* @param[out] reg_data : Variable which is filled according to the standby\r
* settings data provided by the user.\r
+ *\r
*/\r
static void fill_standby_settings(uint8_t *reg_data, const struct bme280_settings *settings);\r
\r
* and humidity), filter and standby duration settings and store in the\r
* device structure.\r
*\r
- * @param[out] dev : Structure instance of bme280_dev.\r
+ * @param[in] settings : Pointer variable which contains the settings to\r
+ * be get in the sensor.\r
* @param[in] reg_data : Register data to be parsed.\r
+ *\r
*/\r
static void parse_device_settings(const uint8_t *reg_data, struct bme280_settings *settings);\r
\r
* be set in the sensor.\r
*\r
* @return Result of API execution status\r
- * @retval zero -> Success / +ve value -> Warning / -ve value -> Error\r
+ *\r
+ * @retval 0 -> Success.\r
+ * @retval > 0 -> Warning.\r
+ * @retval < 0 -> Fail.\r
+ *\r
*/\r
-static int8_t reload_device_settings(const struct bme280_settings *settings, const struct bme280_dev *dev);\r
+static int8_t reload_device_settings(const struct bme280_settings *settings, struct bme280_dev *dev);\r
\r
/****************** Global Function Definitions *******************************/\r
\r
\r
/* Reset the sensor */\r
rslt = bme280_soft_reset(dev);\r
+\r
if (rslt == BME280_OK)\r
{\r
/* Read the calibration data */\r
rslt = get_calib_data(dev);\r
}\r
+\r
break;\r
}\r
\r
/* Wait for 1 ms */\r
- dev->delay_ms(1);\r
+ dev->delay_us(1000, dev->intf_ptr);\r
--try_count;\r
}\r
\r
/*!\r
* @brief This API reads the data from the given register address of the sensor.\r
*/\r
-int8_t bme280_get_regs(uint8_t reg_addr, uint8_t *reg_data, uint16_t len, const struct bme280_dev *dev)\r
+int8_t bme280_get_regs(uint8_t reg_addr, uint8_t *reg_data, uint16_t len, struct bme280_dev *dev)\r
{\r
int8_t rslt;\r
\r
rslt = null_ptr_check(dev);\r
\r
/* Proceed if null check is fine */\r
- if (rslt == BME280_OK)\r
+ if ((rslt == BME280_OK) && (reg_data != NULL))\r
{\r
/* If interface selected is SPI */\r
if (dev->intf != BME280_I2C_INTF)\r
}\r
\r
/* Read the data */\r
- rslt = dev->read(dev->dev_id, reg_addr, reg_data, len);\r
+ dev->intf_rslt = dev->read(reg_addr, reg_data, len, dev->intf_ptr);\r
\r
/* Check for communication error */\r
- if (rslt != BME280_OK)\r
+ if (dev->intf_rslt != BME280_INTF_RET_SUCCESS)\r
{\r
rslt = BME280_E_COMM_FAIL;\r
}\r
}\r
+ else\r
+ {\r
+ rslt = BME280_E_NULL_PTR;\r
+ }\r
\r
return rslt;\r
}\r
* @brief This API writes the given data to the register address\r
* of the sensor.\r
*/\r
-int8_t bme280_set_regs(uint8_t *reg_addr, const uint8_t *reg_data, uint8_t len, const struct bme280_dev *dev)\r
+int8_t bme280_set_regs(uint8_t *reg_addr, const uint8_t *reg_data, uint8_t len, struct bme280_dev *dev)\r
{\r
int8_t rslt;\r
uint8_t temp_buff[20]; /* Typically not to write more than 10 registers */\r
{\r
len = 10;\r
}\r
+\r
uint16_t temp_len;\r
uint8_t reg_addr_cnt;\r
\r
{\r
temp_len = len;\r
}\r
- rslt = dev->write(dev->dev_id, reg_addr[0], temp_buff, temp_len);\r
+\r
+ dev->intf_rslt = dev->write(reg_addr[0], temp_buff, temp_len, dev->intf_ptr);\r
\r
/* Check for communication error */\r
- if (rslt != BME280_OK)\r
+ if (dev->intf_rslt != BME280_INTF_RET_SUCCESS)\r
{\r
rslt = BME280_E_COMM_FAIL;\r
}\r
* @brief This API sets the oversampling, filter and standby duration\r
* (normal mode) settings in the sensor.\r
*/\r
-int8_t bme280_set_sensor_settings(uint8_t desired_settings, const struct bme280_dev *dev)\r
+int8_t bme280_set_sensor_settings(uint8_t desired_settings, struct bme280_dev *dev)\r
{\r
int8_t rslt;\r
uint8_t sensor_mode;\r
if (rslt == BME280_OK)\r
{\r
rslt = bme280_get_sensor_mode(&sensor_mode, dev);\r
+\r
if ((rslt == BME280_OK) && (sensor_mode != BME280_SLEEP_MODE))\r
{\r
rslt = put_device_to_sleep(dev);\r
}\r
+\r
if (rslt == BME280_OK)\r
{\r
/* Check if user wants to change oversampling\r
if (rslt == BME280_OK)\r
{\r
rslt = bme280_get_regs(BME280_CTRL_HUM_ADDR, reg_data, 4, dev);\r
+\r
if (rslt == BME280_OK)\r
{\r
parse_device_settings(reg_data, &dev->settings);\r
/*!\r
* @brief This API sets the power mode of the sensor.\r
*/\r
-int8_t bme280_set_sensor_mode(uint8_t sensor_mode, const struct bme280_dev *dev)\r
+int8_t bme280_set_sensor_mode(uint8_t sensor_mode, struct bme280_dev *dev)\r
{\r
int8_t rslt;\r
uint8_t last_set_mode;\r
\r
/* Check for null pointer in the device structure*/\r
rslt = null_ptr_check(dev);\r
+\r
if (rslt == BME280_OK)\r
{\r
rslt = bme280_get_sensor_mode(&last_set_mode, dev);\r
/*!\r
* @brief This API gets the power mode of the sensor.\r
*/\r
-int8_t bme280_get_sensor_mode(uint8_t *sensor_mode, const struct bme280_dev *dev)\r
+int8_t bme280_get_sensor_mode(uint8_t *sensor_mode, struct bme280_dev *dev)\r
{\r
int8_t rslt;\r
\r
/* Check for null pointer in the device structure*/\r
rslt = null_ptr_check(dev);\r
- if (rslt == BME280_OK)\r
+\r
+ if ((rslt == BME280_OK) && (sensor_mode != NULL))\r
{\r
/* Read the power mode register */\r
rslt = bme280_get_regs(BME280_PWR_CTRL_ADDR, sensor_mode, 1, dev);\r
/* Assign the power mode in the device structure */\r
*sensor_mode = BME280_GET_BITS_POS_0(*sensor_mode, BME280_SENSOR_MODE);\r
}\r
+ else\r
+ {\r
+ rslt = BME280_E_NULL_PTR;\r
+ }\r
\r
return rslt;\r
}\r
/*!\r
* @brief This API performs the soft reset of the sensor.\r
*/\r
-int8_t bme280_soft_reset(const struct bme280_dev *dev)\r
+int8_t bme280_soft_reset(struct bme280_dev *dev)\r
{\r
int8_t rslt;\r
uint8_t reg_addr = BME280_RESET_ADDR;\r
do\r
{\r
/* As per data sheet - Table 1, startup time is 2 ms. */\r
- dev->delay_ms(2);\r
+ dev->delay_us(2000, dev->intf_ptr);\r
rslt = bme280_get_regs(BME280_STATUS_REG_ADDR, &status_reg, 1, dev);\r
+\r
} while ((rslt == BME280_OK) && (try_run--) && (status_reg & BME280_STATUS_IM_UPDATE));\r
\r
if (status_reg & BME280_STATUS_IM_UPDATE)\r
{\r
rslt = BME280_E_NVM_COPY_FAILED;\r
}\r
-\r
}\r
}\r
\r
\r
/* Check for null pointer in the device structure*/\r
rslt = null_ptr_check(dev);\r
+\r
if ((rslt == BME280_OK) && (comp_data != NULL))\r
{\r
/* Read the pressure and temperature data from the sensor */\r
rslt = bme280_get_regs(BME280_DATA_ADDR, reg_data, BME280_P_T_H_DATA_LEN, dev);\r
+\r
if (rslt == BME280_OK)\r
{\r
/* Parse the read data from the sensor */\r
/* Compensate the temperature data */\r
comp_data->temperature = compensate_temperature(uncomp_data, calib_data);\r
}\r
+\r
if (sensor_comp & BME280_PRESS)\r
{\r
/* Compensate the pressure data */\r
comp_data->pressure = compensate_pressure(uncomp_data, calib_data);\r
}\r
+\r
if (sensor_comp & BME280_HUM)\r
{\r
/* Compensate the humidity data */\r
* @brief This internal API sets the oversampling settings for pressure,\r
* temperature and humidity in the sensor.\r
*/\r
-static int8_t set_osr_settings(uint8_t desired_settings,\r
- const struct bme280_settings *settings,\r
- const struct bme280_dev *dev)\r
+static int8_t set_osr_settings(uint8_t desired_settings, const struct bme280_settings *settings, struct bme280_dev *dev)\r
{\r
int8_t rslt = BME280_W_INVALID_OSR_MACRO;\r
\r
{\r
rslt = set_osr_humidity_settings(settings, dev);\r
}\r
+\r
if (desired_settings & (BME280_OSR_PRESS_SEL | BME280_OSR_TEMP_SEL))\r
{\r
rslt = set_osr_press_temp_settings(desired_settings, settings, dev);\r
/*!\r
* @brief This API sets the humidity oversampling settings of the sensor.\r
*/\r
-static int8_t set_osr_humidity_settings(const struct bme280_settings *settings, const struct bme280_dev *dev)\r
+static int8_t set_osr_humidity_settings(const struct bme280_settings *settings, struct bme280_dev *dev)\r
{\r
int8_t rslt;\r
uint8_t ctrl_hum;\r
{\r
reg_addr = BME280_CTRL_MEAS_ADDR;\r
rslt = bme280_get_regs(reg_addr, &ctrl_meas, 1, dev);\r
+\r
if (rslt == BME280_OK)\r
{\r
rslt = bme280_set_regs(®_addr, &ctrl_meas, 1, dev);\r
*/\r
static int8_t set_osr_press_temp_settings(uint8_t desired_settings,\r
const struct bme280_settings *settings,\r
- const struct bme280_dev *dev)\r
+ struct bme280_dev *dev)\r
{\r
int8_t rslt;\r
uint8_t reg_addr = BME280_CTRL_MEAS_ADDR;\r
uint8_t reg_data;\r
\r
rslt = bme280_get_regs(reg_addr, ®_data, 1, dev);\r
+\r
if (rslt == BME280_OK)\r
{\r
if (desired_settings & BME280_OSR_PRESS_SEL)\r
{\r
fill_osr_press_settings(®_data, settings);\r
}\r
+\r
if (desired_settings & BME280_OSR_TEMP_SEL)\r
{\r
fill_osr_temp_settings(®_data, settings);\r
*/\r
static int8_t set_filter_standby_settings(uint8_t desired_settings,\r
const struct bme280_settings *settings,\r
- const struct bme280_dev *dev)\r
+ struct bme280_dev *dev)\r
{\r
int8_t rslt;\r
uint8_t reg_addr = BME280_CONFIG_ADDR;\r
uint8_t reg_data;\r
\r
rslt = bme280_get_regs(reg_addr, ®_data, 1, dev);\r
+\r
if (rslt == BME280_OK)\r
{\r
if (desired_settings & BME280_FILTER_SEL)\r
{\r
fill_filter_settings(®_data, settings);\r
}\r
+\r
if (desired_settings & BME280_STANDBY_SEL)\r
{\r
fill_standby_settings(®_data, settings);\r
/*!\r
* @brief This internal API writes the power mode in the sensor.\r
*/\r
-static int8_t write_power_mode(uint8_t sensor_mode, const struct bme280_dev *dev)\r
+static int8_t write_power_mode(uint8_t sensor_mode, struct bme280_dev *dev)\r
{\r
int8_t rslt;\r
uint8_t reg_addr = BME280_PWR_CTRL_ADDR;\r
/*!\r
* @brief This internal API puts the device to sleep mode.\r
*/\r
-static int8_t put_device_to_sleep(const struct bme280_dev *dev)\r
+static int8_t put_device_to_sleep(struct bme280_dev *dev)\r
{\r
int8_t rslt;\r
uint8_t reg_data[4];\r
struct bme280_settings settings;\r
\r
rslt = bme280_get_regs(BME280_CTRL_HUM_ADDR, reg_data, 4, dev);\r
+\r
if (rslt == BME280_OK)\r
{\r
parse_device_settings(reg_data, &settings);\r
rslt = bme280_soft_reset(dev);\r
+\r
if (rslt == BME280_OK)\r
{\r
rslt = reload_device_settings(&settings, dev);\r
* @brief This internal API reloads the already existing device settings in\r
* the sensor after soft reset.\r
*/\r
-static int8_t reload_device_settings(const struct bme280_settings *settings, const struct bme280_dev *dev)\r
+static int8_t reload_device_settings(const struct bme280_settings *settings, struct bme280_dev *dev)\r
{\r
int8_t rslt;\r
\r
rslt = set_osr_settings(BME280_ALL_SETTINGS_SEL, settings, dev);\r
+\r
if (rslt == BME280_OK)\r
{\r
rslt = set_filter_standby_settings(BME280_ALL_SETTINGS_SEL, settings, dev);\r
var2 = (var2 * var2) * ((double)calib_data->dig_t3);\r
calib_data->t_fine = (int32_t)(var1 + var2);\r
temperature = (var1 + var2) / 5120.0;\r
+\r
if (temperature < temperature_min)\r
{\r
temperature = temperature_min;\r
var1 = ((double)calib_data->dig_p9) * pressure * pressure / 2147483648.0;\r
var2 = pressure * ((double)calib_data->dig_p8) / 32768.0;\r
pressure = pressure + (var1 + var2 + ((double)calib_data->dig_p7)) / 16.0;\r
+\r
if (pressure < pressure_min)\r
{\r
pressure = pressure_min;\r
var2 = (((int64_t)calib_data->dig_p8) * var4) / 524288;\r
var4 = ((var4 + var1 + var2) / 256) + (((int64_t)calib_data->dig_p7) * 16);\r
pressure = (uint32_t)(((var4 / 2) * 100) / 128);\r
+\r
if (pressure < pressure_min)\r
{\r
pressure = pressure_min;\r
{\r
var5 = (uint32_t)((uint32_t)1048576) - uncomp_data->pressure;\r
pressure = ((uint32_t)(var5 - (uint32_t)(var2 / 4096))) * 3125;\r
+\r
if (pressure < 0x80000000)\r
{\r
pressure = (pressure << 1) / ((uint32_t)var1);\r
{\r
pressure = (pressure / (uint32_t)var1) * 2;\r
}\r
+\r
var1 = (((int32_t)calib_data->dig_p9) * ((int32_t)(((pressure / 8) * (pressure / 8)) / 8192))) / 4096;\r
var2 = (((int32_t)(pressure / 4)) * ((int32_t)calib_data->dig_p8)) / 8192;\r
pressure = (uint32_t)((int32_t)pressure + ((var1 + var2 + calib_data->dig_p7) / 16));\r
+\r
if (pressure < pressure_min)\r
{\r
pressure = pressure_min;\r
var5 = (var5 < 0 ? 0 : var5);\r
var5 = (var5 > 419430400 ? 419430400 : var5);\r
humidity = (uint32_t)(var5 / 4096);\r
+\r
if (humidity > humidity_max)\r
{\r
humidity = humidity_max;\r
\r
/* Read the calibration data from the sensor */\r
rslt = bme280_get_regs(reg_addr, calib_data, BME280_TEMP_PRESS_CALIB_DATA_LEN, dev);\r
+\r
if (rslt == BME280_OK)\r
{\r
/* Parse temperature and pressure calibration data and store\r
\r
/* Read the humidity calibration data from the sensor */\r
rslt = bme280_get_regs(reg_addr, calib_data, BME280_HUMIDITY_CALIB_DATA_LEN, dev);\r
+\r
if (rslt == BME280_OK)\r
{\r
/* Parse humidity calibration data and store it in\r
{\r
int8_t rslt;\r
\r
- if ((dev == NULL) || (dev->read == NULL) || (dev->write == NULL) || (dev->delay_ms == NULL))\r
+ if ((dev == NULL) || (dev->read == NULL) || (dev->write == NULL) || (dev->delay_us == NULL))\r
{\r
/* Device structure pointer is not valid */\r
rslt = BME280_E_NULL_PTR;\r