objc

drivers_bme280.h
Go to the documentation of this file.
1 
9 #pragma once
10 #include <runtime-hw/hw.h>
11 #include <stdbool.h>
12 #include <stdint.h>
13 
15 // TYPES
16 
17 #define DRIVER_BME280_RESERVED_SIZE 96
18 
19 
28 typedef struct driver_bme280_t {
30  uint8_t address;
31  uint8_t timeout_ms;
32  uint8_t _padding[6];
33  uint8_t reserved[DRIVER_BME280_RESERVED_SIZE]
34  __attribute__((aligned(8)));
36 
44 typedef enum {
49 
51 // LIFECYCLE
52 
75 driver_bme280_t driver_bme280_i2c_init(hw_i2c_t *i2c, uint8_t address);
76 
95 
97 // PROPERTIES
98 
107 static inline bool driver_bme280_valid(driver_bme280_t *bme280) {
108  return bme280 && bme280->i2c && hw_i2c_valid(bme280->i2c) && bme280->address;
109 }
110 
139 bool driver_bme280_set_mode(driver_bme280_t *bme280, driver_bme280_mode_t mode);
140 
162 driver_bme280_mode_t driver_bme280_get_mode(driver_bme280_t *bme280);
163 
165 // METHODS
166 
187 
204 bool driver_bme280_read_data(driver_bme280_t *bme280, float *temperature,
205  float *pressure, float *humidity);
206 
214 
222 
230 
241 float driver_bme280_calculate_altitude(float pressure_pa, float sea_level_pa);
242 
250 float driver_bme280_calculate_sea_level_pressure(float pressure_pa,
251  float altitude_m);
252 
253 // Default sea level pressure constant
254 #define DRIVER_BME280_SEA_LEVEL_PRESSURE_PA \
255  101325.0f
static bool hw_i2c_valid(hw_i2c_t *i2c)
Get true if the I2C interface is valid.
Definition: i2c.h:100
#define DRIVER_BME280_RESERVED_SIZE
Reserved size for internal use.
float driver_bme280_read_temperature(driver_bme280_t *bme280)
Read only temperature from the BME280 sensor.
bool driver_bme280_set_mode(driver_bme280_t *bme280, driver_bme280_mode_t mode)
Set the operating mode of the BME280 sensor.
uint8_t timeout_ms
Read/write timeout in milliseconds.
static bool driver_bme280_valid(driver_bme280_t *bme280)
Get true if the BME280 interface is valid.
float driver_bme280_read_pressure(driver_bme280_t *bme280)
Read only pressure from the BME280 sensor.
uint8_t _padding[6]
Padding to ensure proper alignment.
float driver_bme280_calculate_sea_level_pressure(float pressure_pa, float altitude_m)
Calculate sea level pressure from current pressure and altitude.
struct driver_bme280_t driver_bme280_t
BME280 sensor driver structure.
Hardware interface abstraction layer.
hw_i2c_t * i2c
Pointer to the I2C interface used for communication.
I2C adapter.
Definition: i2c.h:25
BME280 sensor driver structure.
driver_bme280_mode_t
BME280 sensor modes.
float driver_bme280_calculate_altitude(float pressure_pa, float sea_level_pa)
Calculate altitude from pressure measurement.
uint8_t reserved [DRIVER_BME280_RESERVED_SIZE] __attribute__((aligned(8)))
Reserved for internal use.
float driver_bme280_read_humidity(driver_bme280_t *bme280)
Read only humidity from the BME280 sensor.
driver_bme280_mode_t driver_bme280_get_mode(driver_bme280_t *bme280)
Get the current operating mode of the BME280 sensor.
bool driver_bme280_reset(driver_bme280_t *bme280)
Reset the BME280 sensor to its default state.
driver_bme280_t driver_bme280_i2c_init(hw_i2c_t *i2c, uint8_t address)
Initialize a BME280 sensor driver using the I2C interface.
void driver_bme280_finalize(driver_bme280_t *bme280)
Finalize and release a BME280 sensor driver.
bool driver_bme280_read_data(driver_bme280_t *bme280, float *temperature, float *pressure, float *humidity)
Read temperature, pressure, and humidity data from the BME280 sensor.
uint8_t address
I2C address of the BME280 sensor.