mirror of https://github.com/esphome/esphome.git
81 lines
2.1 KiB
C++
81 lines
2.1 KiB
C++
#include "ade7953_i2c.h"
|
|
#include "esphome/core/log.h"
|
|
#include "esphome/core/helpers.h"
|
|
|
|
namespace esphome {
|
|
namespace ade7953_i2c {
|
|
|
|
static const char *const TAG = "ade7953";
|
|
|
|
void AdE7953I2c::dump_config() {
|
|
ESP_LOGCONFIG(TAG, "ADE7953_i2c:");
|
|
LOG_I2C_DEVICE(this);
|
|
ade7953_base::ADE7953::dump_config();
|
|
}
|
|
bool AdE7953I2c::ade_write_8(uint16_t reg, uint8_t value) {
|
|
uint8_t data[3];
|
|
data[0] = reg >> 8;
|
|
data[1] = reg >> 0;
|
|
data[2] = value;
|
|
return this->write(data, 3) != i2c::ERROR_OK;
|
|
}
|
|
bool AdE7953I2c::ade_write_16(uint16_t reg, uint16_t value) {
|
|
uint8_t data[4];
|
|
data[0] = reg >> 8;
|
|
data[1] = reg >> 0;
|
|
data[2] = value >> 8;
|
|
data[3] = value >> 0;
|
|
return this->write(data, 4) != i2c::ERROR_OK;
|
|
}
|
|
bool AdE7953I2c::ade_write_32(uint16_t reg, uint32_t value) {
|
|
uint8_t data[6];
|
|
data[0] = reg >> 8;
|
|
data[1] = reg >> 0;
|
|
data[2] = value >> 24;
|
|
data[3] = value >> 16;
|
|
data[4] = value >> 8;
|
|
data[5] = value >> 0;
|
|
return this->write(data, 6) != i2c::ERROR_OK;
|
|
}
|
|
bool AdE7953I2c::ade_read_8(uint16_t reg, uint8_t *value) {
|
|
uint8_t reg_data[2];
|
|
reg_data[0] = reg >> 8;
|
|
reg_data[1] = reg >> 0;
|
|
i2c::ErrorCode err = this->write(reg_data, 2);
|
|
if (err != i2c::ERROR_OK)
|
|
return true;
|
|
err = this->read(value, 1);
|
|
return (err != i2c::ERROR_OK);
|
|
}
|
|
bool AdE7953I2c::ade_read_16(uint16_t reg, uint16_t *value) {
|
|
uint8_t reg_data[2];
|
|
reg_data[0] = reg >> 8;
|
|
reg_data[1] = reg >> 0;
|
|
i2c::ErrorCode err = this->write(reg_data, 2);
|
|
if (err != i2c::ERROR_OK)
|
|
return true;
|
|
uint8_t recv[2];
|
|
err = this->read(recv, 2);
|
|
if (err != i2c::ERROR_OK)
|
|
return true;
|
|
*value = encode_uint16(recv[0], recv[1]);
|
|
return false;
|
|
}
|
|
bool AdE7953I2c::ade_read_32(uint16_t reg, uint32_t *value) {
|
|
uint8_t reg_data[2];
|
|
reg_data[0] = reg >> 8;
|
|
reg_data[1] = reg >> 0;
|
|
i2c::ErrorCode err = this->write(reg_data, 2);
|
|
if (err != i2c::ERROR_OK)
|
|
return true;
|
|
uint8_t recv[4];
|
|
err = this->read(recv, 4);
|
|
if (err != i2c::ERROR_OK)
|
|
return true;
|
|
*value = encode_uint32(recv[0], recv[1], recv[2], recv[3]);
|
|
return false;
|
|
}
|
|
|
|
} // namespace ade7953_i2c
|
|
} // namespace esphome
|