imsensors/include/imsensors/dht/dht_bme280.h

102 lines
2.5 KiB
C

#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