BME280: Added static function declarations.
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
Signed-off-by: Yilin Sun <imi415@imi.moe>
This commit is contained in:
parent
d1c07c0446
commit
b48b9fb2d8
|
@ -96,6 +96,13 @@ static const ims_bme280_config_t ims_bme280_presets[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static ims_ret_t ims_bme280_reset(ims_bme280_t *bme);
|
||||||
|
static ims_ret_t ims_bme280_read_trim_data(ims_bme280_t *bme);
|
||||||
|
static ims_ret_t ims_bme280_set_mode(ims_bme280_t *bme, ims_bme280_mode_t mode);
|
||||||
|
static ims_ret_t ims_bme_get_mode(ims_bme280_t *bme, ims_bme280_mode_t *mode);
|
||||||
|
static ims_ret_t ims_bme_wait_measure_complete(ims_bme280_t *bme, uint32_t timeout_ms);
|
||||||
|
static ims_ret_t ims_bme280_read_raw_data(ims_bme280_t *bme, uint32_t *raw_t, uint32_t *raw_p, uint32_t *raw_h);
|
||||||
|
|
||||||
static ims_ret_t ims_bme280_read_register(ims_bme280_t *bme, uint8_t reg, uint8_t *data, uint16_t len);
|
static ims_ret_t ims_bme280_read_register(ims_bme280_t *bme, uint8_t reg, uint8_t *data, uint16_t len);
|
||||||
static ims_ret_t ims_bme280_write_register(ims_bme280_t *bme, uint8_t reg, uint8_t data);
|
static ims_ret_t ims_bme280_write_register(ims_bme280_t *bme, uint8_t reg, uint8_t data);
|
||||||
|
|
||||||
|
@ -113,6 +120,127 @@ static uint32_t ims_bme280_compensate_H_int32(ims_bme280_t *bme, int32_t adc_H);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
ims_ret_t ims_bme280_init(ims_bme280_t *bme) {
|
||||||
|
if (!bme) return IMS_FAIL;
|
||||||
|
if (ims_bme280_reset(bme) == IMS_FAIL) return IMS_FAIL;
|
||||||
|
bme->cb.delay(bme->pdev, 100);
|
||||||
|
if (ims_bme280_read_trim_data(bme) == IMS_FAIL) return IMS_FAIL;
|
||||||
|
return IMS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
ims_ret_t ims_bme280_preset_config(ims_bme280_config_t *config, ims_bme280_mode_preset_t preset) {
|
||||||
|
if (preset >= IMS_BME280_PRESET_END) {
|
||||||
|
return IMS_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(config, &ims_bme280_presets[preset], sizeof(ims_bme280_config_t));
|
||||||
|
|
||||||
|
return IMS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
ims_ret_t ims_bme280_config(ims_bme280_t *bme, ims_bme280_config_t *config) {
|
||||||
|
ims_ret_t ret;
|
||||||
|
|
||||||
|
uint8_t reg_config = (config->filter << 0x02) | (config->t_sb << 0x05);
|
||||||
|
uint8_t reg_ctrl_measure = (uint8_t)((config->osrs_t << 0x05) | (config->osrs_p << 0x02) | config->mode);
|
||||||
|
uint8_t reg_ctrl_hum = config->osrs_h;
|
||||||
|
|
||||||
|
ims_bme280_mode_t mode;
|
||||||
|
|
||||||
|
ret = ims_bme_get_mode(bme, &mode);
|
||||||
|
if (ret != IMS_SUCCESS) return ret;
|
||||||
|
|
||||||
|
if (mode != IMS_BME280_MODE_SLEEP) {
|
||||||
|
ret = ims_bme280_set_mode(bme, IMS_BME280_MODE_SLEEP);
|
||||||
|
if (ret != IMS_SUCCESS) return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = ims_bme280_write_register(bme, IMS_BME280_REG_CONFIG, reg_config);
|
||||||
|
if (ret != IMS_SUCCESS) return ret;
|
||||||
|
|
||||||
|
ret = ims_bme280_write_register(bme, IMS_BME280_REG_CTRL_HUM, reg_ctrl_hum);
|
||||||
|
if (ret != IMS_SUCCESS) return ret;
|
||||||
|
|
||||||
|
ret = ims_bme280_write_register(bme, IMS_BME280_REG_CTRL_MEAS, reg_ctrl_measure);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ims_ret_t ims_bme280_read(ims_bme280_t *bme, ims_bme280_result_t *result) {
|
||||||
|
ims_ret_t ret;
|
||||||
|
|
||||||
|
uint32_t raw_P = 0x00;
|
||||||
|
uint32_t raw_T = 0x00;
|
||||||
|
uint32_t raw_H = 0x00;
|
||||||
|
|
||||||
|
ret = ims_bme280_read_raw_data(bme, &raw_T, &raw_P, &raw_H);
|
||||||
|
if (ret != IMS_SUCCESS) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if IMS_CFG_DHT_BME280_ENABLE_FLOAT
|
||||||
|
result->temperature = ims_bme280_compensate_T_double(bme, (int32_t)raw_T);
|
||||||
|
result->pressure = ims_bme280_compensate_P_double(bme, (int32_t)raw_P);
|
||||||
|
result->humidity = ims_bme280_compensate_H_double(bme, (int32_t)raw_H);
|
||||||
|
#else
|
||||||
|
result->temperature = ims_bme280_compensate_T_int32(bme, (int32_t)raw_T);
|
||||||
|
result->pressure = ims_bme280_compensate_P_int64(bme, (int32_t)raw_P);
|
||||||
|
result->humidity = ims_bme280_compensate_H_int32(bme, (int32_t)raw_H);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return IMS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Force a new result to be sampled, or wait for a new result be available if the sensor is in NORMAL mode.
|
||||||
|
* @param bme
|
||||||
|
* @param result
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
ims_ret_t ims_bme280_read_forced(ims_bme280_t *bme, ims_bme280_result_t *result) {
|
||||||
|
ims_ret_t ret;
|
||||||
|
|
||||||
|
uint32_t raw_P = 0x00;
|
||||||
|
uint32_t raw_T = 0x00;
|
||||||
|
uint32_t raw_H = 0x00;
|
||||||
|
|
||||||
|
ims_bme280_mode_t mode;
|
||||||
|
|
||||||
|
ret = ims_bme_get_mode(bme, &mode);
|
||||||
|
if (ret != IMS_SUCCESS) return ret;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the sensor is in SLEEP mode, start a forced measurement;
|
||||||
|
* if the sensor is measuring or in NORMAL mode, wait for a new result to be sampled.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (mode == IMS_BME280_MODE_SLEEP) {
|
||||||
|
ret = ims_bme280_set_mode(bme, IMS_BME280_MODE_FORCED);
|
||||||
|
if (ret != IMS_SUCCESS) return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = ims_bme_wait_measure_complete(bme, IMS_BME280_FORCED_TIMEOUT_MS);
|
||||||
|
if (ret != IMS_SUCCESS) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = ims_bme280_read_raw_data(bme, &raw_T, &raw_P, &raw_H);
|
||||||
|
if (ret != IMS_SUCCESS) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if IMS_CFG_DHT_BME280_ENABLE_FLOAT
|
||||||
|
result->temperature = ims_bme280_compensate_T_double(bme, (int32_t)raw_T);
|
||||||
|
result->pressure = ims_bme280_compensate_P_double(bme, (int32_t)raw_P);
|
||||||
|
result->humidity = ims_bme280_compensate_H_double(bme, (int32_t)raw_H);
|
||||||
|
#else
|
||||||
|
result->temperature = ims_bme280_compensate_T_int32(bme, (int32_t)raw_T);
|
||||||
|
result->pressure = ims_bme280_compensate_P_int64(bme, (int32_t)raw_P);
|
||||||
|
result->humidity = ims_bme280_compensate_H_int32(bme, (int32_t)raw_H);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return IMS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static ims_ret_t ims_bme280_reset(ims_bme280_t *bme) {
|
static ims_ret_t ims_bme280_reset(ims_bme280_t *bme) {
|
||||||
return ims_bme280_write_register(bme, IMS_BME280_REG_RESET, IMS_BME280_CONST_RESET_MAGIC);
|
return ims_bme280_write_register(bme, IMS_BME280_REG_RESET, IMS_BME280_CONST_RESET_MAGIC);
|
||||||
}
|
}
|
||||||
|
@ -263,51 +391,6 @@ static ims_ret_t ims_bme280_read_raw_data(ims_bme280_t *bme, uint32_t *raw_t, ui
|
||||||
return IMS_SUCCESS;
|
return IMS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
ims_ret_t ims_bme280_init(ims_bme280_t *bme) {
|
|
||||||
if (!bme) return IMS_FAIL;
|
|
||||||
if (ims_bme280_reset(bme) == IMS_FAIL) return IMS_FAIL;
|
|
||||||
bme->cb.delay(bme->pdev, 100);
|
|
||||||
if (ims_bme280_read_trim_data(bme) == IMS_FAIL) return IMS_FAIL;
|
|
||||||
return IMS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
ims_ret_t ims_bme280_preset_config(ims_bme280_config_t *config, ims_bme280_mode_preset_t preset) {
|
|
||||||
if (preset >= IMS_BME280_PRESET_END) {
|
|
||||||
return IMS_FAIL;
|
|
||||||
}
|
|
||||||
|
|
||||||
memcpy(config, &ims_bme280_presets[preset], sizeof(ims_bme280_config_t));
|
|
||||||
|
|
||||||
return IMS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
ims_ret_t ims_bme280_config(ims_bme280_t *bme, ims_bme280_config_t *config) {
|
|
||||||
ims_ret_t ret;
|
|
||||||
|
|
||||||
uint8_t reg_config = (config->filter << 0x02) | (config->t_sb << 0x05);
|
|
||||||
uint8_t reg_ctrl_measure = (uint8_t)((config->osrs_t << 0x05) | (config->osrs_p << 0x02) | config->mode);
|
|
||||||
uint8_t reg_ctrl_hum = config->osrs_h;
|
|
||||||
|
|
||||||
ims_bme280_mode_t mode;
|
|
||||||
|
|
||||||
ret = ims_bme_get_mode(bme, &mode);
|
|
||||||
if (ret != IMS_SUCCESS) return ret;
|
|
||||||
|
|
||||||
if (mode != IMS_BME280_MODE_SLEEP) {
|
|
||||||
ret = ims_bme280_set_mode(bme, IMS_BME280_MODE_SLEEP);
|
|
||||||
if (ret != IMS_SUCCESS) return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = ims_bme280_write_register(bme, IMS_BME280_REG_CONFIG, reg_config);
|
|
||||||
if (ret != IMS_SUCCESS) return ret;
|
|
||||||
|
|
||||||
ret = ims_bme280_write_register(bme, IMS_BME280_REG_CTRL_HUM, reg_ctrl_hum);
|
|
||||||
if (ret != IMS_SUCCESS) return ret;
|
|
||||||
|
|
||||||
ret = ims_bme280_write_register(bme, IMS_BME280_REG_CTRL_MEAS, reg_ctrl_measure);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static ims_ret_t ims_bme280_read_register(ims_bme280_t *bme, uint8_t reg, uint8_t *data, uint16_t len) {
|
static ims_ret_t ims_bme280_read_register(ims_bme280_t *bme, uint8_t reg, uint8_t *data, uint16_t len) {
|
||||||
ims_i2c_xfer_desc_t xfer_desc = {
|
ims_i2c_xfer_desc_t xfer_desc = {
|
||||||
.tx_size = 1U,
|
.tx_size = 1U,
|
||||||
|
@ -331,82 +414,6 @@ static ims_ret_t ims_bme280_write_register(ims_bme280_t *bme, uint8_t reg, uint8
|
||||||
return bme->cb.i2c_xfer(bme->pdev, &xfer_desc);
|
return bme->cb.i2c_xfer(bme->pdev, &xfer_desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
ims_ret_t ims_bme280_read(ims_bme280_t *bme, ims_bme280_result_t *result) {
|
|
||||||
ims_ret_t ret;
|
|
||||||
|
|
||||||
uint32_t raw_P = 0x00;
|
|
||||||
uint32_t raw_T = 0x00;
|
|
||||||
uint32_t raw_H = 0x00;
|
|
||||||
|
|
||||||
ret = ims_bme280_read_raw_data(bme, &raw_T, &raw_P, &raw_H);
|
|
||||||
if (ret != IMS_SUCCESS) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if IMS_CFG_DHT_BME280_ENABLE_FLOAT
|
|
||||||
result->temperature = ims_bme280_compensate_T_double(bme, (int32_t)raw_T);
|
|
||||||
result->pressure = ims_bme280_compensate_P_double(bme, (int32_t)raw_P);
|
|
||||||
result->humidity = ims_bme280_compensate_H_double(bme, (int32_t)raw_H);
|
|
||||||
#else
|
|
||||||
result->temperature = ims_bme280_compensate_T_int32(bme, (int32_t)raw_T);
|
|
||||||
result->pressure = ims_bme280_compensate_P_int64(bme, (int32_t)raw_P);
|
|
||||||
result->humidity = ims_bme280_compensate_H_int32(bme, (int32_t)raw_H);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return IMS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Force a new result to be sampled, or wait for a new result be available if the sensor is in NORMAL mode.
|
|
||||||
* @param bme
|
|
||||||
* @param result
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
ims_ret_t ims_bme280_read_forced(ims_bme280_t *bme, ims_bme280_result_t *result) {
|
|
||||||
ims_ret_t ret;
|
|
||||||
|
|
||||||
uint32_t raw_P = 0x00;
|
|
||||||
uint32_t raw_T = 0x00;
|
|
||||||
uint32_t raw_H = 0x00;
|
|
||||||
|
|
||||||
ims_bme280_mode_t mode;
|
|
||||||
|
|
||||||
ret = ims_bme_get_mode(bme, &mode);
|
|
||||||
if (ret != IMS_SUCCESS) return ret;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If the sensor is in SLEEP mode, start a forced measurement;
|
|
||||||
* if the sensor is measuring or in NORMAL mode, wait for a new result to be sampled.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (mode == IMS_BME280_MODE_SLEEP) {
|
|
||||||
ret = ims_bme280_set_mode(bme, IMS_BME280_MODE_FORCED);
|
|
||||||
if (ret != IMS_SUCCESS) return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = ims_bme_wait_measure_complete(bme, IMS_BME280_FORCED_TIMEOUT_MS);
|
|
||||||
if (ret != IMS_SUCCESS) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = ims_bme280_read_raw_data(bme, &raw_T, &raw_P, &raw_H);
|
|
||||||
if (ret != IMS_SUCCESS) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if IMS_CFG_DHT_BME280_ENABLE_FLOAT
|
|
||||||
result->temperature = ims_bme280_compensate_T_double(bme, (int32_t)raw_T);
|
|
||||||
result->pressure = ims_bme280_compensate_P_double(bme, (int32_t)raw_P);
|
|
||||||
result->humidity = ims_bme280_compensate_H_double(bme, (int32_t)raw_H);
|
|
||||||
#else
|
|
||||||
result->temperature = ims_bme280_compensate_T_int32(bme, (int32_t)raw_T);
|
|
||||||
result->pressure = ims_bme280_compensate_P_int64(bme, (int32_t)raw_P);
|
|
||||||
result->humidity = ims_bme280_compensate_H_int32(bme, (int32_t)raw_H);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return IMS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef IMS_CFG_DHT_BME280_ENABLE_FLOAT
|
#ifdef IMS_CFG_DHT_BME280_ENABLE_FLOAT
|
||||||
|
|
||||||
static double ims_bme280_compensate_T_double(ims_bme280_t *bme, int32_t adc_T) {
|
static double ims_bme280_compensate_T_double(ims_bme280_t *bme, int32_t adc_T) {
|
||||||
|
|
Loading…
Reference in New Issue