imsensors/include/imsensors/dht/dht_bme280.h

109 lines
2.8 KiB
C

#ifndef IMS_BME280_DHT_H
#define IMS_BME280_DHT_H
#include "imsensors/common/sensors_common.h"
typedef enum {
IMS_BME280_MODE_SLEEP = 0x00U,
IMS_BME280_MODE_FORCED = 0x01U,
IMS_BME280_MODE_NORMAL = 0x03U,
} 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_STANDBY_TIME_0_5_MS = 0x00U,
IMS_BME280_STANDBY_TIME_62_5_MS = 0x01U,
IMS_BME280_STANDBY_TIME_125_MS = 0x02U,
IMS_BME280_STANDBY_TIME_250_MS = 0x03U,
IMS_BME280_STANDBY_TIME_500_MS = 0x04U,
IMS_BME280_STANDBY_TIME_1_SEC = 0x05U,
IMS_BME280_STANDBY_TIME_10_MS = 0x06U,
IMS_BME280_STANDBY_TIME_20_MS = 0x07U,
} ims_bme280_standby_time_t;
typedef enum {
IMS_BME280_PRESET_WEATHER,
IMS_BME280_PRESET_HUMIDITY,
IMS_BME280_PRESET_INDOOR_NAV,
IMS_BME280_PRESET_GAMING,
IMS_BME280_PRESET_END,
} 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;
ims_bme280_standby_time_t t_sb;
ims_bme280_fiter_config_t filter;
} ims_bme280_config_t;
typedef struct {
#ifdef IMS_CFG_DHT_BME280_ENABLE_FLOAT
double temperature;
double pressure;
double humidity;
#else
uint32_t pressure; /* Pressure (Pa) multiplied by 256. */
int32_t temperature; /* Temperature (C), multiplied by 100. */
uint32_t humidity; /* Humidity (%), multiplied by 1024. */
#endif
} ims_bme280_result_t;
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_config(ims_bme280_t *bme, ims_bme280_config_t *config);
ims_ret_t ims_bme280_read(ims_bme280_t *bme, ims_bme280_result_t *result);
ims_ret_t ims_bme280_read_forced(ims_bme280_t *bme, ims_bme280_result_t *result);
#endif // IMS_BME280_DHT_H