64 if (!this->
read_bytes(ENS160_REG_PART_ID,
reinterpret_cast<uint8_t *
>(&part_id), 2)) {
68 if (part_id != ENS160_PART_ID) {
69 this->
mark_failed(LOG_STR(
"Sensor reported an invalid ID. Is this a ENS160?"));
74 if (!this->
write_byte(ENS160_REG_OPMODE, ENS160_OPMODE_RESET)) {
78 delay(ENS160_BOOTING);
82 if (!this->
read_byte(ENS160_REG_DATA_STATUS, &status_value)) {
89 this->
mark_failed(LOG_STR(
"Invalid Device Status - No valid output"));
94 if (!this->
write_byte(ENS160_REG_OPMODE, ENS160_OPMODE_IDLE)) {
98 delay(ENS160_BOOTING);
101 if (!this->
write_byte(ENS160_REG_COMMAND, ENS160_COMMAND_NOP)) {
105 if (!this->
write_byte(ENS160_REG_COMMAND, ENS160_COMMAND_CLRGPR)) {
109 delay(ENS160_BOOTING);
112 if (!this->
write_byte(ENS160_REG_COMMAND, ENS160_COMMAND_GET_APPVER)) {
116 delay(ENS160_BOOTING);
118 uint8_t version_data[3];
119 if (!this->
read_bytes(ENS160_REG_GPR_READ_4, version_data, 3)) {
128 if (!this->
write_byte(ENS160_REG_OPMODE, ENS160_OPMODE_STD)) {
135 if (!this->
read_byte(ENS160_REG_OPMODE, &op_mode)) {
140 if (op_mode != ENS160_OPMODE_STD) {
141 this->
mark_failed(LOG_STR(
"Device failed to achieve Standard Operating Mode"));
147 uint8_t status_value, data_ready;
149 if (!this->
read_byte(ENS160_REG_DATA_STATUS, &status_value)) {
150 ESP_LOGW(TAG,
"Error reading status register");
157 "ENS160 Status Register: 0x%02x\n"
160 " VALIDITY FLAG 0x%02x\n"
163 status_value, (ENS160_DATA_STATUS_STATAS & (status_value)) == ENS160_DATA_STATUS_STATAS,
164 (ENS160_DATA_STATUS_STATER & (status_value)) == ENS160_DATA_STATUS_STATER,
165 (ENS160_DATA_STATUS_VALIDITY & status_value) >> 2,
166 (ENS160_DATA_STATUS_NEWDAT & (status_value)) == ENS160_DATA_STATUS_NEWDAT,
167 (ENS160_DATA_STATUS_NEWGPR & (status_value)) == ENS160_DATA_STATUS_NEWGPR);
169 data_ready = ENS160_DATA_STATUS_NEWDAT & status_value;
174 if (data_ready != ENS160_DATA_STATUS_NEWDAT) {
175 ESP_LOGD(TAG,
"ENS160 readings unavailable - Normal Operation but readings not ready");
182 ESP_LOGI(TAG,
"ENS160 readings unavailable - 1 hour startup required after first power on");
188 ESP_LOGI(TAG,
"ENS160 readings not available yet - Warming up requires 3 minutes");
193 ESP_LOGE(TAG,
"ENS160 Invalid Status - No valid output");
200 if (!this->
read_bytes(ENS160_REG_DATA_ECO2,
reinterpret_cast<uint8_t *
>(&data_eco2), 2)) {
201 ESP_LOGW(TAG,
"Error reading eCO2 data register");
205 if (this->
co2_ !=
nullptr) {
210 if (!this->
read_bytes(ENS160_REG_DATA_TVOC,
reinterpret_cast<uint8_t *
>(&data_tvoc), 2)) {
211 ESP_LOGW(TAG,
"Error reading TVOC data register");
215 if (this->
tvoc_ !=
nullptr) {
220 if (!this->
read_byte(ENS160_REG_DATA_AQI, &data_aqi)) {
221 ESP_LOGW(TAG,
"Error reading AQI data register");
225 if (this->
aqi_ !=
nullptr) {
227 data_aqi = ENS160_DATA_AQI & data_aqi;