diff --git a/src/mgos_barometer.c b/src/mgos_barometer.c index dad9db1..d063d67 100644 --- a/src/mgos_barometer.c +++ b/src/mgos_barometer.c @@ -99,12 +99,12 @@ void mgos_barometer_destroy(struct mgos_barometer **sensor) { bool mgos_barometer_has_thermometer(struct mgos_barometer *sensor) { if (!sensor) return false; - return sensor->has_thermometer; + return (sensor->capabilities & MGOS_BAROMETER_CAP_THERMOMETER); } bool mgos_barometer_has_barometer(struct mgos_barometer *sensor) { if (!sensor) return false; - return sensor->has_barometer; + return (sensor->capabilities & MGOS_BAROMETER_CAP_BAROMETER); } bool mgos_barometer_read(struct mgos_barometer *sensor) { diff --git a/src/mgos_barometer_bme280.c b/src/mgos_barometer_bme280.c index 8b94f4c..15e8493 100644 --- a/src/mgos_barometer_bme280.c +++ b/src/mgos_barometer_bme280.c @@ -20,8 +20,10 @@ bool mgos_barometer_bme280_detect(struct mgos_barometer *dev) { if (val == 0x58) // Mass production BMP280 return true; - if (val == 0x60) // Mass production BME280 + if (val == 0x60) { // Mass production BME280 + dev->capabilities|=MGOS_BAROMETER_CAP_HYGROMETER; return true; + } return true; } @@ -52,8 +54,8 @@ bool mgos_barometer_bme280_create(struct mgos_barometer *dev) { if (!mgos_i2c_write_reg_b(dev->i2c, dev->i2caddr, BME280_REG_CTRL_MEAS, BME280_MODE_NORMAL | BME280_OVERSAMP_1X << 2 | BME280_OVERSAMP_1X << 5)) return false; - dev->has_barometer=true; - dev->has_thermometer=true; + dev->capabilities|=MGOS_BAROMETER_CAP_BAROMETER; + dev->capabilities|=MGOS_BAROMETER_CAP_THERMOMETER; return true; } diff --git a/src/mgos_barometer_internal.h b/src/mgos_barometer_internal.h index ba07743..845e9b9 100644 --- a/src/mgos_barometer_internal.h +++ b/src/mgos_barometer_internal.h @@ -29,13 +29,17 @@ typedef bool (*mgos_barometer_mag_create_fn)(struct mgos_barometer *dev); typedef bool (*mgos_barometer_mag_destroy_fn)(struct mgos_barometer *dev); typedef bool (*mgos_barometer_mag_read_fn)(struct mgos_barometer *dev); +#define MGOS_BAROMETER_CAP_BAROMETER (0x01) +#define MGOS_BAROMETER_CAP_THERMOMETER (0x02) +#define MGOS_BAROMETER_CAP_HYGROMETER (0x04) + struct mgos_barometer { struct mgos_i2c * i2c; uint8_t i2caddr; uint16_t cache_ttl_ms; enum mgos_barometer_type type; - bool has_thermometer; - bool has_barometer; + + uint8_t capabilities; mgos_barometer_mag_detect_fn detect; mgos_barometer_mag_create_fn create; diff --git a/src/mgos_barometer_mpl115.c b/src/mgos_barometer_mpl115.c index eb79140..6272352 100644 --- a/src/mgos_barometer_mpl115.c +++ b/src/mgos_barometer_mpl115.c @@ -28,8 +28,8 @@ bool mgos_barometer_mpl115_create(struct mgos_barometer *dev) { mpl115_data->c12=(float)c12/(1<<22); dev->user_data=mpl115_data; - dev->has_barometer=true; - dev->has_thermometer=true; + dev->capabilities|=MGOS_BAROMETER_CAP_BAROMETER; + dev->capabilities|=MGOS_BAROMETER_CAP_THERMOMETER; return true; } diff --git a/src/mgos_barometer_mpl3115.c b/src/mgos_barometer_mpl3115.c index 533333c..8b475d7 100644 --- a/src/mgos_barometer_mpl3115.c +++ b/src/mgos_barometer_mpl3115.c @@ -49,8 +49,8 @@ bool mgos_barometer_mpl3115_create(struct mgos_barometer *dev) { return false; } - dev->has_barometer = true; - dev->has_thermometer = true; + dev->capabilities|=MGOS_BAROMETER_CAP_BAROMETER; + dev->capabilities|=MGOS_BAROMETER_CAP_THERMOMETER; return true; }