]> git.itanic.dy.fi Git - BME280_driver/blobdiff - bme280.c
Updated interface design and examples.
[BME280_driver] / bme280.c
index c3eabb58f7ce7412b924144775c9550e44b131d6..cabefc20e34c6dbce2298c553a52f1b76690ad34 100644 (file)
--- a/bme280.c
+++ b/bme280.c
@@ -30,9 +30,9 @@
 * 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
@@ -76,7 +84,11 @@ static int8_t write_power_mode(uint8_t sensor_mode, const struct bme280_dev *dev
  * @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
@@ -84,12 +96,13 @@ static int8_t null_ptr_check(const struct bme280_dev *dev);
  * @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
@@ -100,7 +113,11 @@ static void interleave_reg_addr(const uint8_t *reg_addr, uint8_t *temp_buff, con
  * @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
@@ -108,8 +125,9 @@ static int8_t get_calib_data(struct bme280_dev *dev);
  *  @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
@@ -117,8 +135,9 @@ static void parse_temp_press_calib_data(const uint8_t *reg_data, struct bme280_d
  *  @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
@@ -129,10 +148,10 @@ static void parse_humidity_calib_data(const uint8_t *reg_data, struct bme280_dev
  * 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
@@ -142,10 +161,10 @@ static double compensate_pressure(const struct bme280_uncomp_data *uncomp_data,
  * 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
@@ -155,10 +174,10 @@ static double compensate_humidity(const struct bme280_uncomp_data *uncomp_data,
  * 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
@@ -170,10 +189,10 @@ static double compensate_temperature(const struct bme280_uncomp_data *uncomp_dat
  * 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
@@ -183,10 +202,10 @@ static int32_t compensate_temperature(const struct bme280_uncomp_data *uncomp_da
  * 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
@@ -196,10 +215,10 @@ static uint32_t compensate_pressure(const struct bme280_uncomp_data *uncomp_data
  * 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
@@ -210,26 +229,33 @@ static uint32_t compensate_humidity(const struct bme280_uncomp_data *uncomp_data
  * @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
@@ -237,14 +263,19 @@ static int8_t set_osr_humidity_settings(const struct bme280_settings *settings,
  *\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
@@ -253,21 +284,29 @@ static int8_t set_osr_settings(uint8_t desired_settings,
  * @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
@@ -275,9 +314,11 @@ static void fill_osr_press_settings(uint8_t *reg_data, const struct bme280_setti
  * @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
@@ -286,23 +327,30 @@ static void fill_osr_temp_settings(uint8_t *reg_data, const struct bme280_settin
  * 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
@@ -310,9 +358,11 @@ static void fill_filter_settings(uint8_t *reg_data, const struct bme280_settings
  * @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
@@ -321,8 +371,10 @@ static void fill_standby_settings(uint8_t *reg_data, const struct bme280_setting
  * 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
@@ -335,9 +387,13 @@ static void parse_device_settings(const uint8_t *reg_data, struct bme280_setting
  * 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
@@ -371,16 +427,18 @@ int8_t bme280_init(struct bme280_dev *dev)
 \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
@@ -397,7 +455,7 @@ int8_t bme280_init(struct bme280_dev *dev)
 /*!\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
@@ -405,7 +463,7 @@ int8_t bme280_get_regs(uint8_t reg_addr, uint8_t *reg_data, uint16_t len, const
     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
@@ -414,14 +472,18 @@ int8_t bme280_get_regs(uint8_t reg_addr, uint8_t *reg_data, uint16_t len, const
         }\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
@@ -430,7 +492,7 @@ int8_t bme280_get_regs(uint8_t reg_addr, uint8_t *reg_data, uint16_t len, const
  * @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
@@ -439,6 +501,7 @@ int8_t bme280_set_regs(uint8_t *reg_addr, const uint8_t *reg_data, uint8_t len,
     {\r
         len = 10;\r
     }\r
+\r
     uint16_t temp_len;\r
     uint8_t reg_addr_cnt;\r
 \r
@@ -474,10 +537,11 @@ int8_t bme280_set_regs(uint8_t *reg_addr, const uint8_t *reg_data, uint8_t len,
             {\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
@@ -499,7 +563,7 @@ int8_t bme280_set_regs(uint8_t *reg_addr, const uint8_t *reg_data, uint8_t len,
  * @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
@@ -511,10 +575,12 @@ int8_t bme280_set_sensor_settings(uint8_t desired_settings, const struct bme280_
     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
@@ -554,6 +620,7 @@ int8_t bme280_get_sensor_settings(struct bme280_dev *dev)
     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
@@ -566,13 +633,14 @@ int8_t bme280_get_sensor_settings(struct bme280_dev *dev)
 /*!\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
@@ -598,13 +666,14 @@ int8_t bme280_set_sensor_mode(uint8_t sensor_mode, const struct bme280_dev *dev)
 /*!\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
@@ -612,6 +681,10 @@ int8_t bme280_get_sensor_mode(uint8_t *sensor_mode, const struct bme280_dev *dev
         /* 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
@@ -619,7 +692,7 @@ int8_t bme280_get_sensor_mode(uint8_t *sensor_mode, const struct bme280_dev *dev
 /*!\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
@@ -644,15 +717,15 @@ int8_t bme280_soft_reset(const struct bme280_dev *dev)
             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
@@ -676,10 +749,12 @@ int8_t bme280_get_sensor_data(uint8_t sensor_comp, struct bme280_data *comp_data
 \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
@@ -753,11 +828,13 @@ int8_t bme280_compensate_data(uint8_t sensor_comp,
             /* 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
@@ -826,9 +903,7 @@ uint32_t bme280_cal_meas_delay(const struct bme280_settings *settings)
  * @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
@@ -836,6 +911,7 @@ static int8_t set_osr_settings(uint8_t desired_settings,
     {\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
@@ -847,7 +923,7 @@ static int8_t set_osr_settings(uint8_t desired_settings,
 /*!\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
@@ -866,6 +942,7 @@ static int8_t set_osr_humidity_settings(const struct bme280_settings *settings,
     {\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(&reg_addr, &ctrl_meas, 1, dev);\r
@@ -881,19 +958,21 @@ static int8_t set_osr_humidity_settings(const struct bme280_settings *settings,
  */\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, &reg_data, 1, dev);\r
+\r
     if (rslt == BME280_OK)\r
     {\r
         if (desired_settings & BME280_OSR_PRESS_SEL)\r
         {\r
             fill_osr_press_settings(&reg_data, settings);\r
         }\r
+\r
         if (desired_settings & BME280_OSR_TEMP_SEL)\r
         {\r
             fill_osr_temp_settings(&reg_data, settings);\r
@@ -912,19 +991,21 @@ static int8_t set_osr_press_temp_settings(uint8_t desired_settings,
  */\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, &reg_data, 1, dev);\r
+\r
     if (rslt == BME280_OK)\r
     {\r
         if (desired_settings & BME280_FILTER_SEL)\r
         {\r
             fill_filter_settings(&reg_data, settings);\r
         }\r
+\r
         if (desired_settings & BME280_STANDBY_SEL)\r
         {\r
             fill_standby_settings(&reg_data, settings);\r
@@ -990,7 +1071,7 @@ static void parse_device_settings(const uint8_t *reg_data, struct bme280_setting
 /*!\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
@@ -1016,17 +1097,19 @@ static int8_t write_power_mode(uint8_t sensor_mode, const struct bme280_dev *dev
 /*!\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
@@ -1040,11 +1123,12 @@ static int8_t put_device_to_sleep(const struct bme280_dev *dev)
  * @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
@@ -1073,6 +1157,7 @@ static double compensate_temperature(const struct bme280_uncomp_data *uncomp_dat
     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
@@ -1115,6 +1200,7 @@ static double compensate_pressure(const struct bme280_uncomp_data *uncomp_data,
         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
@@ -1238,6 +1324,7 @@ static uint32_t compensate_pressure(const struct bme280_uncomp_data *uncomp_data
         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
@@ -1286,6 +1373,7 @@ static uint32_t compensate_pressure(const struct bme280_uncomp_data *uncomp_data
     {\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
@@ -1294,9 +1382,11 @@ static uint32_t compensate_pressure(const struct bme280_uncomp_data *uncomp_data
         {\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
@@ -1345,6 +1435,7 @@ static uint32_t compensate_humidity(const struct bme280_uncomp_data *uncomp_data
     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
@@ -1368,6 +1459,7 @@ static int8_t get_calib_data(struct bme280_dev *dev)
 \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
@@ -1378,6 +1470,7 @@ static int8_t get_calib_data(struct bme280_dev *dev)
 \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
@@ -1481,7 +1574,7 @@ static int8_t null_ptr_check(const struct bme280_dev *dev)
 {\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