#ifndef IMS_BME280_DHT_H #define IMS_BME280_DHT_H #include "imsensors/common/sensors_common.h" typedef enum { IMS_BME280_MODE_SLEEP, IMS_BME280_MODE_FORCED, IMS_BME280_MODE_NORMAL, } ims_bme280_mode_t; typedef enum { IMS_BME280_OSRS_SKIP, IMS_BME280_OSRS_1, IMS_BME280_OSRS_2, IMS_BME280_OSRS_4, IMS_BME280_OSRS_8, IMS_BME280_OSRS_16, } ims_bme280_osrs_config_t; typedef enum { IMS_BME280_FILTER_OFF, IMS_BME280_FILTER_2, IMS_BME280_FILTER_4, IMS_BME280_FILTER_8, IMS_BME280_FILTER_16, } ims_bme280_fiter_config_t; typedef enum { IMS_BME280_PRESET_WEATHER, IMS_BME280_PRESET_HUMIDITY, IMS_BME280_PRESET_INDOOR_NAV, IMS_BME280_PRESET_GAMING, } ims_bme280_mode_preset_t; typedef struct { uint16_t dig_T1; int16_t dig_T2; int16_t dig_T3; uint16_t dig_P1; int16_t dig_P2; int16_t dig_P3; int16_t dig_P4; int16_t dig_P5; int16_t dig_P6; int16_t dig_P7; int16_t dig_P8; int16_t dig_P9; uint8_t dig_H1; int16_t dig_H2; uint8_t dig_H3; int16_t dig_H4; int16_t dig_H5; int8_t dig_H6; } ims_bme280_trim_t; typedef struct { ims_bme280_mode_t mode; ims_bme280_osrs_config_t osrs_t; ims_bme280_osrs_config_t osrs_p; ims_bme280_osrs_config_t osrs_h; uint8_t t_sb; ims_bme280_fiter_config_t filter; } ims_bme280_config_t; #ifdef IMS_CFG_DHT_BME280_ENABLE_FLOAT typedef struct { double temperature; double pressure; double humidity; } ims_bme280_result_t; #else typedef struct { int32_t temperature; /* Temperature (C), multiplied by 100. */ uint32_t pressure; /* Humidity (%), multiplied by 1024. */ int32_t humidity; /* Pressure (Pa) multiplied by 256. */ } ims_bme280_result_t; #endif typedef struct { ims_i2c_xfer_t i2c_xfer; ims_delay_t delay; } ims_bme280_cb_t; typedef struct { void *pdev; ims_bme280_trim_t trim; ims_bme280_cb_t cb; int32_t t_fine; } ims_bme280_t; ims_ret_t ims_bme280_init(ims_bme280_t *bme); ims_ret_t ims_bme280_preset_config(ims_bme280_config_t *config, ims_bme280_mode_preset_t preset); ims_ret_t ims_bme280_apply_config(ims_bme280_t *bme, ims_bme280_config_t *config); #ifdef IMS_CFG_DHT_BME280_ENABLE_FLOAT ims_ret_t ims_bme280_measure(ims_bme280_t *bme, ims_bme280_result_t *result); #else ims_ret_t ims_bme280_measure(ims_bme280_t *bme, ims_bme280_result_t *result); #endif #endif // IMS_BME280_DHT_H