Recursively search libs/* for source and include dirs Move mgos_barometer code to its own subdir, in preparation for release to GitHub.
82 lines
3.1 KiB
C
82 lines
3.1 KiB
C
#pragma once
|
|
|
|
#include "mgos.h"
|
|
#include "mgos_barometer_internal.h"
|
|
|
|
// DevID: 0x56/0x57 are samples of BMP280; 0x58 is mass production BMP280; 0x60 is BME280
|
|
#define BME280_REG_DEVID (0xD0) /* Chip ID Register */
|
|
#define BME280_REG_RESET (0xE0) /* Softreset Register */
|
|
#define BME280_REG_STATUS (0xF3) /* Status Register */
|
|
#define BME280_REG_CTRL_MEAS (0xF4) /* Ctrl Measure Register */
|
|
#define BME280_REG_CONFIG (0xF5) /* Configuration Register */
|
|
#define BME280_REG_PRESSURE_MSB (0xF7) /* Pressure MSB Register */
|
|
#define BME280_REG_PRESSURE_LSB (0xF8) /* Pressure LSB Register */
|
|
#define BME280_REG_PRESSURE_XLSB (0xF9) /* Pressure XLSB Register */
|
|
#define BME280_REG_TEMPERATURE_MSB (0xFA) /* Temperature MSB Reg */
|
|
#define BME280_REG_TEMPERATURE_LSB (0xFB) /* Temperature LSB Reg */
|
|
#define BME280_REG_TEMPERATURE_XLSB (0xFC) /* Temperature XLSB Reg */
|
|
#define BME280_REG_HUMIDITY_MSB (0xFD) /* Humidity MSB Reg (BME280 only)*/
|
|
#define BME280_REG_HUMIDITY_LSB (0xFE) /* Humidity LSB Reg (BME280 only)*/
|
|
#define BME280_MODE_SLEEP (0x00)
|
|
#define BME280_MODE_FORCED (0x01)
|
|
#define BME280_MODE_NORMAL (0x03)
|
|
|
|
#define BME280_REG_TEMPERATURE_CALIB_DIG_T1_LSB (0x88)
|
|
|
|
#define BME280_OVERSAMP_SKIPPED (0x00)
|
|
#define BME280_OVERSAMP_1X (0x01)
|
|
#define BME280_OVERSAMP_2X (0x02)
|
|
#define BME280_OVERSAMP_4X (0x03)
|
|
#define BME280_OVERSAMP_8X (0x04)
|
|
#define BME280_OVERSAMP_16X (0x05)
|
|
|
|
#define BME280_STANDBY_500us (0x00)
|
|
#define BME280_STANDBY_62ms (0x01)
|
|
#define BME280_STANDBY_125ms (0x02)
|
|
#define BME280_STANDBY_250ms (0x03)
|
|
#define BME280_STANDBY_500ms (0x04)
|
|
#define BME280_STANDBY_1000ms (0x05)
|
|
// Note: Datasheet defines 110 == 10ms, 111 == 20ms, but BME280 and BMP280
|
|
// implement this differently.
|
|
#define BME280_FILTER_OFF (0x00)
|
|
#define BME280_FILTER_2X (0x01)
|
|
#define BME280_FILTER_4X (0x02)
|
|
#define BME280_FILTER_8X (0x03)
|
|
#define BME280_FILTER_16X (0x04)
|
|
|
|
|
|
struct mgos_barometer_bme280_calib_data {
|
|
// Calibration data:
|
|
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;
|
|
|
|
// Additional calibration data for BME280
|
|
uint8_t dig_H1;
|
|
int16_t dig_H2;
|
|
uint8_t dig_H3;
|
|
int16_t dig_H4; // Note: this is 0xE4 / 0xE5[3:0]
|
|
int16_t dig_H5; // Note: this is 0xE5[7:4] / 0xE6
|
|
int8_t dig_H6;
|
|
};
|
|
|
|
struct mgos_barometer_bme280_data {
|
|
struct mgos_barometer_bme280_calib_data calib;
|
|
|
|
float humidity;
|
|
};
|
|
|
|
bool mgos_barometer_bme280_detect(struct mgos_barometer *dev);
|
|
bool mgos_barometer_bme280_create(struct mgos_barometer *dev);
|
|
bool mgos_barometer_bme280_destroy(struct mgos_barometer *dev);
|
|
bool mgos_barometer_bme280_read(struct mgos_barometer *dev);
|