6static constexpr const char *
const TAG =
"lps22";
8static constexpr uint8_t WHO_AM_I = 0x0F;
9static constexpr uint8_t LPS22HB_ID = 0xB1;
10static constexpr uint8_t LPS22HH_ID = 0xB3;
11static constexpr uint8_t CTRL_REG2 = 0x11;
12static constexpr uint8_t CTRL_REG2_ONE_SHOT_MASK = 0b1;
13static constexpr uint8_t STATUS = 0x27;
14static constexpr uint8_t STATUS_T_DA_MASK = 0b10;
15static constexpr uint8_t STATUS_P_DA_MASK = 0b01;
16static constexpr uint8_t TEMP_L = 0x2b;
17static constexpr uint8_t PRES_OUT_XL = 0x28;
18static constexpr uint8_t REF_P_XL = 0x28;
19static constexpr uint8_t READ_ATTEMPTS = 10;
20static constexpr uint8_t READ_INTERVAL = 5;
21static constexpr float PRESSURE_SCALE = 1.0f / 4096.0f;
22static constexpr float TEMPERATURE_SCALE = 0.01f;
27 if (value != LPS22HB_ID && value != LPS22HH_ID) {
28 ESP_LOGW(TAG,
"device IDs as %02x, which isn't a known LPS22HB or LPS22HH ID", value);
34 ESP_LOGCONFIG(TAG,
"LPS22:");
38 LOG_UPDATE_INTERVAL(
this);
44 value |= CTRL_REG2_ONE_SHOT_MASK;
46 this->
set_retry(READ_INTERVAL, READ_ATTEMPTS, [
this](uint8_t _) {
return this->
try_read_(); });
52 const uint8_t expected_status_mask = STATUS_T_DA_MASK | STATUS_P_DA_MASK;
53 if ((value & expected_status_mask) != expected_status_mask) {
54 ESP_LOGD(TAG,
"STATUS not ready: %x", value);
61 int16_t encoded =
static_cast<int16_t
>(
encode_uint16(t_buf[1], t_buf[0]));
62 float temp = TEMPERATURE_SCALE *
static_cast<float>(encoded);
virtual void mark_failed()
Mark this component as failed.
void set_retry(const std::string &name, uint32_t initial_wait_time, uint8_t max_attempts, std::function< RetryResult(uint8_t)> &&f, float backoff_increase_factor=1.0f)
Set an retry function with a unique name.
ErrorCode write_register(uint8_t a_register, const uint8_t *data, size_t len, bool stop=true)
writes an array of bytes to a specific register in the I²C device
ErrorCode read_register(uint8_t a_register, uint8_t *data, size_t len, bool stop=true)
reads an array of bytes from a specific register in the I²C device
sensor::Sensor * temperature_sensor_
void dump_config() override
sensor::Sensor * pressure_sensor_
void publish_state(float state)
Publish a new state to the front-end.
Providing packet encoding functions for exchanging data with a remote host.
constexpr uint32_t encode_uint24(uint8_t byte1, uint8_t byte2, uint8_t byte3)
Encode a 24-bit value given three bytes in most to least significant byte order.
constexpr uint16_t encode_uint16(uint8_t msb, uint8_t lsb)
Encode a 16-bit value given the most and least significant byte.