ESPHome 2026.5.0b1
Loading...
Searching...
No Matches
ade7953_i2c.cpp
Go to the documentation of this file.
1#include "ade7953_i2c.h"
3#include "esphome/core/log.h"
4
6
7static const char *const TAG = "ade7953";
8
10 ESP_LOGCONFIG(TAG, "ADE7953_i2c:");
11 LOG_I2C_DEVICE(this);
13}
14bool AdE7953I2c::ade_write_8(uint16_t reg, uint8_t value) {
15 uint8_t data[3];
16 data[0] = reg >> 8;
17 data[1] = reg >> 0;
18 data[2] = value;
19 return this->write(data, 3) != i2c::ERROR_OK;
20}
21bool AdE7953I2c::ade_write_16(uint16_t reg, uint16_t value) {
22 uint8_t data[4];
23 data[0] = reg >> 8;
24 data[1] = reg >> 0;
25 data[2] = value >> 8;
26 data[3] = value >> 0;
27 return this->write(data, 4) != i2c::ERROR_OK;
28}
29bool AdE7953I2c::ade_write_32(uint16_t reg, uint32_t value) {
30 uint8_t data[6];
31 data[0] = reg >> 8;
32 data[1] = reg >> 0;
33 data[2] = value >> 24;
34 data[3] = value >> 16;
35 data[4] = value >> 8;
36 data[5] = value >> 0;
37 return this->write(data, 6) != i2c::ERROR_OK;
38}
39bool AdE7953I2c::ade_read_8(uint16_t reg, uint8_t *value) {
40 uint8_t reg_data[2];
41 reg_data[0] = reg >> 8;
42 reg_data[1] = reg >> 0;
43 i2c::ErrorCode err = this->write(reg_data, 2);
44 if (err != i2c::ERROR_OK)
45 return true;
46 err = this->read(value, 1);
47 return (err != i2c::ERROR_OK);
48}
49bool AdE7953I2c::ade_read_16(uint16_t reg, uint16_t *value) {
50 uint8_t reg_data[2];
51 reg_data[0] = reg >> 8;
52 reg_data[1] = reg >> 0;
53 i2c::ErrorCode err = this->write(reg_data, 2);
54 if (err != i2c::ERROR_OK)
55 return true;
56 uint8_t recv[2];
57 err = this->read(recv, 2);
58 if (err != i2c::ERROR_OK)
59 return true;
60 *value = encode_uint16(recv[0], recv[1]);
61 return false;
62}
63bool AdE7953I2c::ade_read_32(uint16_t reg, uint32_t *value) {
64 uint8_t reg_data[2];
65 reg_data[0] = reg >> 8;
66 reg_data[1] = reg >> 0;
67 i2c::ErrorCode err = this->write(reg_data, 2);
68 if (err != i2c::ERROR_OK)
69 return true;
70 uint8_t recv[4];
71 err = this->read(recv, 4);
72 if (err != i2c::ERROR_OK)
73 return true;
74 *value = encode_uint32(recv[0], recv[1], recv[2], recv[3]);
75 return false;
76}
77
78} // namespace esphome::ade7953_i2c
bool ade_write_8(uint16_t reg, uint8_t value) override
bool ade_read_32(uint16_t reg, uint32_t *value) override
bool ade_write_32(uint16_t reg, uint32_t value) override
bool ade_read_16(uint16_t reg, uint16_t *value) override
bool ade_write_16(uint16_t reg, uint16_t value) override
bool ade_read_8(uint16_t reg, uint8_t *value) override
ErrorCode write(const uint8_t *data, size_t len) const
writes an array of bytes to a device using an I2CBus
Definition i2c.h:183
ErrorCode read(uint8_t *data, size_t len) const
reads an array of bytes from the device using an I2CBus
Definition i2c.h:163
I2CRegister reg(uint8_t a_register)
calls the I2CRegister constructor
Definition i2c.h:152
ErrorCode
Error codes returned by I2CBus and I2CDevice methods.
Definition i2c_bus.h:12
@ ERROR_OK
No error found during execution of method.
Definition i2c_bus.h:14
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.
Definition helpers.h:867
constexpr uint16_t encode_uint16(uint8_t msb, uint8_t lsb)
Encode a 16-bit value given the most and least significant byte.
Definition helpers.h:859
static void uint32_t