22static constexpr uint32_t MEASUREMENT_TIMEOUT_ID = 0;
27static const LogString *oversampling_to_str(
Oversampling oversampling) {
28 return OversamplingStrings::get_log_str(
static_cast<uint8_t
>(oversampling), OversamplingStrings::LAST_INDEX);
34static const LogString *iir_filter_to_str(
IIRFilter filter) {
35 return IIRFilterStrings::get_log_str(
static_cast<uint8_t
>(filter), IIRFilterStrings::LAST_INDEX);
39 ESP_LOGCONFIG(TAG,
"BMP581:");
41 LOG_UPDATE_INTERVAL(
this);
43 ESP_LOGCONFIG(TAG,
" Measurement conversion time: %ums", this->
conversion_time_);
101 if (chip_id != BMP581_ASIC_ID && chip_id != BMP585_ASIC_ID) {
112 this->
mark_failed(LOG_STR(
"Failed to read status register"));
118 if (!(this->
status_.bit.status_nvm_rdy)) {
125 if (this->
status_.bit.status_nvm_err) {
137 this->
mark_failed(LOG_STR(
"Failed to write interrupt source register"));
156 this->
mark_failed(LOG_STR(
"Failed to write oversampling register"));
173 this->
mark_failed(LOG_STR(
"Failed to write IIR configuration registers"));
179 this->
mark_failed(LOG_STR(
"Failed to prime the IIR filter with an initial measurement"));
208 ESP_LOGVV(TAG,
"Requesting measurement");
211 ESP_LOGW(TAG,
"Requesting forced measurement failed");
233 ESP_LOGW(TAG,
"Failed to read temperature and pressure; skipping update");
240 ESP_LOGW(TAG,
"Failed to read temperature; skipping update");
271 ESP_LOGD(TAG,
"Data not ready, sensor is in standby mode");
278 ESP_LOGE(TAG,
"Failed to read interrupt status register");
311 ESP_LOGE(TAG,
"Failed to write oversampling register");
319 ESP_LOGE(TAG,
"Failed to write IIR source register");
329 ESP_LOGE(TAG,
"Failed to request a forced measurement");
341 ESP_LOGE(TAG,
"IIR priming measurement was not ready");
349 ESP_LOGE(TAG,
"Failed to write IIR source register");
365 ESP_LOGW(TAG,
"Data not ready, skipping this update");
373 ESP_LOGW(TAG,
"Failed to read measurement");
394 ESP_LOGW(TAG,
"Data not ready, skipping this update");
402 ESP_LOGW(TAG,
"Failed to read measurement");
413 int32_t raw_press = (int32_t) data[5] << 16 | (int32_t) data[4] << 8 | (int32_t) data[3];
414 pressure = (float) (raw_press / 64.0);
431 ESP_LOGE(TAG,
"Failed to write reset command");
444 ESP_LOGE(TAG,
"Failed to read interrupt status register");
494 this->
int_source_.bit.drdy_data_reg_en = data_ready_enable;
505 this->
osr_config_.bit.osr_t = temperature_oversampling;
506 this->
osr_config_.bit.osr_p = pressure_oversampling;
BedjetMode mode
BedJet operating mode.
void mark_failed()
Mark this component as failed.
void status_set_warning()
void set_timeout(const char *name, uint32_t timeout, std::function< void()> &&f)
Set a timeout function with a const char* name.
void status_clear_warning()
bool read_temperature_(float &temperature)
IIRFilter iir_pressure_level_
IIRFilter iir_temperature_level_
virtual void activate_interface()
union esphome::bmp581_base::BMP581Component::@42 dsp_config_
bool write_interrupt_source_settings_(bool data_ready_enable)
Oversampling pressure_oversampling_
union esphome::bmp581_base::BMP581Component::@43 iir_config_
bool write_oversampling_settings_(Oversampling temperature_oversampling, Oversampling pressure_oversampling)
virtual bool bmp_read_byte(uint8_t a_register, uint8_t *data)=0
virtual bool bmp_read_bytes(uint8_t a_register, uint8_t *data, size_t len)=0
union esphome::bmp581_base::BMP581Component::@41 status_
bool start_measurement_()
union esphome::bmp581_base::BMP581Component::@44 osr_config_
sensor::Sensor * pressure_sensor_
bool write_iir_settings_(IIRFilter temperature_iir, IIRFilter pressure_iir)
union esphome::bmp581_base::BMP581Component::@39 int_source_
union esphome::bmp581_base::BMP581Component::@40 int_status_
virtual bool bmp_write_bytes(uint8_t a_register, uint8_t *data, size_t len)=0
union esphome::bmp581_base::BMP581Component::@45 odr_config_
Oversampling temperature_oversampling_
void dump_config() override
virtual bool bmp_write_byte(uint8_t a_register, uint8_t data)=0
bool read_temperature_and_pressure_(float &temperature, float &pressure)
bool check_data_readiness_()
bool write_power_mode_(OperationMode mode)
sensor::Sensor * temperature_sensor_
void publish_state(float state)
Publish a new state to the front-end.
ESPHOME_LOG_TAG(TAG, "bmp581")
PROGMEM_STRING_TABLE(OversamplingStrings, "None", "2x", "4x", "8x", "16x", "32x", "64x", "128x", "")
@ BMP581_MEASUREMENT_DATA
constexpr uint32_t encode_uint32(uint8_t byte1, uint8_t byte2, uint8_t byte3, uint8_t byte4)
Encode a 32-bit value given four bytes in most to least significant byte order.
void HOT delay(uint32_t ms)