| /* |
| * Copyright (c) 2021 Leonard Pollak |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef ZEPHYR_DRIVERS_SENSOR_SHT4X_SHT4X_H_ |
| #define ZEPHYR_DRIVERS_SENSOR_SHT4X_SHT4X_H_ |
| |
| #include <zephyr/device.h> |
| |
| #define SHT4X_CMD_READ_SERIAL 0x89 |
| #define SHT4X_CMD_RESET 0x94 |
| |
| #define SHT4X_RESET_WAIT_MS 1 |
| |
| #define SHT4X_HEATER_POWER_IDX_MAX 3 |
| #define SHT4X_HEATER_DURATION_IDX_MAX 2 |
| |
| /* |
| * CRC parameters were taken from the |
| * "Checksum Calculation" section of the datasheet. |
| */ |
| #define SHT4X_CRC_POLY 0x31 |
| #define SHT4X_CRC_INIT 0xFF |
| |
| struct sht4x_config { |
| struct i2c_dt_spec bus; |
| uint8_t repeatability; |
| }; |
| |
| struct sht4x_data { |
| uint16_t t_sample; |
| uint16_t rh_sample; |
| uint8_t heater_power; |
| uint8_t heater_duration; |
| }; |
| |
| static const uint8_t measure_cmd[3] = { |
| 0xE0, 0xF6, 0xFD |
| }; |
| |
| static const uint16_t measure_wait_us[3] = { |
| 1700, 4500, 8200 |
| }; |
| |
| /* |
| * heater specifics |
| * |
| * power: |
| * High power heater pulse -> ~200 mW @3.3V |
| * Medium power heater pulse -> ~110 mW @3.3V |
| * Low power heater pulse -> ~20 mW @3.3V |
| * |
| * duration: |
| * Long heater pulse -> 1.1s |
| * Short heater pulse -> 0.11s |
| */ |
| |
| static const int8_t heater_cmd[SHT4X_HEATER_POWER_IDX_MAX][SHT4X_HEATER_DURATION_IDX_MAX] = { |
| { 0x39, 0x32 }, |
| { 0x2F, 0x24 }, |
| { 0x1E, 0x15 } |
| }; |
| |
| static const uint32_t heater_wait_ms[SHT4X_HEATER_DURATION_IDX_MAX] = { |
| 1000, 100 |
| }; |
| |
| #endif /* ZEPHYR_DRIVERS_SENSOR_SHT4X_SHT4X_H_ */ |