mirror of
https://github.com/esphome/esphome.git
synced 2025-09-05 21:02:20 +01:00
Add ADE7953 Support (#593)
* Add ADE795 support * Lint * Fix * Fix, add test
This commit is contained in:
@@ -135,6 +135,9 @@ bool I2CComponent::read_bytes(uint8_t address, uint8_t a_register, uint8_t *data
|
||||
delay(conversion);
|
||||
return this->raw_receive(address, data, len);
|
||||
}
|
||||
bool I2CComponent::read_bytes_raw(uint8_t address, uint8_t *data, uint8_t len) {
|
||||
return this->raw_receive(address, data, len);
|
||||
}
|
||||
bool I2CComponent::read_bytes_16(uint8_t address, uint8_t a_register, uint16_t *data, uint8_t len,
|
||||
uint32_t conversion) {
|
||||
if (!this->write_bytes(address, a_register, nullptr, 0))
|
||||
@@ -156,6 +159,11 @@ bool I2CComponent::write_bytes(uint8_t address, uint8_t a_register, const uint8_
|
||||
this->raw_write(address, data, len);
|
||||
return this->raw_end_transmission(address);
|
||||
}
|
||||
bool I2CComponent::write_bytes_raw(uint8_t address, const uint8_t *data, uint8_t len) {
|
||||
this->raw_begin_transmission(address);
|
||||
this->raw_write(address, data, len);
|
||||
return this->raw_end_transmission(address);
|
||||
}
|
||||
bool I2CComponent::write_bytes_16(uint8_t address, uint8_t a_register, const uint16_t *data, uint8_t len) {
|
||||
this->raw_begin_transmission(address);
|
||||
this->raw_write(address, &a_register, 1);
|
||||
|
@@ -42,6 +42,7 @@ class I2CComponent : public Component {
|
||||
* @return If the operation was successful.
|
||||
*/
|
||||
bool read_bytes(uint8_t address, uint8_t a_register, uint8_t *data, uint8_t len, uint32_t conversion = 0);
|
||||
bool read_bytes_raw(uint8_t address, uint8_t *data, uint8_t len);
|
||||
|
||||
/** Read len amount of 16-bit words (MSB first) from a register into data.
|
||||
*
|
||||
@@ -69,6 +70,7 @@ class I2CComponent : public Component {
|
||||
* @return If the operation was successful.
|
||||
*/
|
||||
bool write_bytes(uint8_t address, uint8_t a_register, const uint8_t *data, uint8_t len);
|
||||
bool write_bytes_raw(uint8_t address, const uint8_t *data, uint8_t len);
|
||||
|
||||
/** Write len amount of 16-bit words (MSB first) to the specified register for address.
|
||||
*
|
||||
@@ -151,7 +153,6 @@ class I2CDevice {
|
||||
/// Manually set the parent i2c bus for this device.
|
||||
void set_i2c_parent(I2CComponent *parent);
|
||||
|
||||
protected:
|
||||
/** Read len amount of bytes from a register into data. Optionally with a conversion time after
|
||||
* writing the register value to the bus.
|
||||
*
|
||||
@@ -161,15 +162,23 @@ class I2CDevice {
|
||||
* @param conversion The time in ms between writing the register value and reading out the value.
|
||||
* @return If the operation was successful.
|
||||
*/
|
||||
bool read_bytes(uint8_t a_register, uint8_t *data, uint8_t len, uint32_t conversion = 0); // NOLINT
|
||||
bool read_bytes(uint8_t a_register, uint8_t *data, uint8_t len, uint32_t conversion = 0);
|
||||
bool read_bytes_raw(uint8_t *data, uint8_t len) { return this->parent_->read_bytes_raw(this->address_, data, len); }
|
||||
|
||||
template<size_t N> optional<std::array<uint8_t, N>> read_bytes(uint8_t a_register) { // NOLINT
|
||||
template<size_t N> optional<std::array<uint8_t, N>> read_bytes(uint8_t a_register) {
|
||||
std::array<uint8_t, N> res;
|
||||
if (!this->read_bytes(a_register, res.data(), N)) {
|
||||
return {};
|
||||
}
|
||||
return res;
|
||||
}
|
||||
template<size_t N> optional<std::array<uint8_t, N>> read_bytes_raw() {
|
||||
std::array<uint8_t, N> res;
|
||||
if (!this->read_bytes_raw(res.data(), N)) {
|
||||
return {};
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/** Read len amount of 16-bit words (MSB first) from a register into data.
|
||||
*
|
||||
@@ -179,12 +188,12 @@ class I2CDevice {
|
||||
* @param conversion The time in ms between writing the register value and reading out the value.
|
||||
* @return If the operation was successful.
|
||||
*/
|
||||
bool read_bytes_16(uint8_t a_register, uint16_t *data, uint8_t len, uint32_t conversion = 0); // NOLINT
|
||||
bool read_bytes_16(uint8_t a_register, uint16_t *data, uint8_t len, uint32_t conversion = 0);
|
||||
|
||||
/// Read a single byte from a register into the data variable. Return true if successful.
|
||||
bool read_byte(uint8_t a_register, uint8_t *data, uint32_t conversion = 0); // NOLINT
|
||||
bool read_byte(uint8_t a_register, uint8_t *data, uint32_t conversion = 0);
|
||||
|
||||
optional<uint8_t> read_byte(uint8_t a_register) { // NOLINT
|
||||
optional<uint8_t> read_byte(uint8_t a_register) {
|
||||
uint8_t data;
|
||||
if (!this->read_byte(a_register, &data))
|
||||
return {};
|
||||
@@ -192,7 +201,7 @@ class I2CDevice {
|
||||
}
|
||||
|
||||
/// Read a single 16-bit words (MSB first) from a register into the data variable. Return true if successful.
|
||||
bool read_byte_16(uint8_t a_register, uint16_t *data, uint32_t conversion = 0); // NOLINT
|
||||
bool read_byte_16(uint8_t a_register, uint16_t *data, uint32_t conversion = 0);
|
||||
|
||||
/** Write len amount of 8-bit bytes to the specified register.
|
||||
*
|
||||
@@ -201,7 +210,10 @@ class I2CDevice {
|
||||
* @param len The amount of bytes to write to the bus.
|
||||
* @return If the operation was successful.
|
||||
*/
|
||||
bool write_bytes(uint8_t a_register, const uint8_t *data, uint8_t len); // NOLINT
|
||||
bool write_bytes(uint8_t a_register, const uint8_t *data, uint8_t len);
|
||||
bool write_bytes_raw(const uint8_t *data, uint8_t len) {
|
||||
return this->parent_->write_bytes_raw(this->address_, data, len);
|
||||
}
|
||||
|
||||
/** Write a vector of data to a register.
|
||||
*
|
||||
@@ -209,13 +221,17 @@ class I2CDevice {
|
||||
* @param data The data to write.
|
||||
* @return If the operation was successful.
|
||||
*/
|
||||
bool write_bytes(uint8_t a_register, const std::vector<uint8_t> &data) { // NOLINT
|
||||
bool write_bytes(uint8_t a_register, const std::vector<uint8_t> &data) {
|
||||
return this->write_bytes(a_register, data.data(), data.size());
|
||||
}
|
||||
bool write_bytes_raw(const std::vector<uint8_t> &data) { return this->write_bytes_raw(data.data(), data.size()); }
|
||||
|
||||
template<size_t N> bool write_bytes(uint8_t a_register, const std::array<uint8_t, N> &data) { // NOLINT
|
||||
template<size_t N> bool write_bytes(uint8_t a_register, const std::array<uint8_t, N> &data) {
|
||||
return this->write_bytes(a_register, data.data(), data.size());
|
||||
}
|
||||
template<size_t N> bool write_bytes_raw(const std::array<uint8_t, N> &data) {
|
||||
return this->write_bytes_raw(data.data(), data.size());
|
||||
}
|
||||
|
||||
/** Write len amount of 16-bit words (MSB first) to the specified register.
|
||||
*
|
||||
@@ -224,14 +240,15 @@ class I2CDevice {
|
||||
* @param len The amount of bytes to write to the bus.
|
||||
* @return If the operation was successful.
|
||||
*/
|
||||
bool write_bytes_16(uint8_t a_register, const uint16_t *data, uint8_t len); // NOLINT
|
||||
bool write_bytes_16(uint8_t a_register, const uint16_t *data, uint8_t len);
|
||||
|
||||
/// Write a single byte of data into the specified register. Return true if successful.
|
||||
bool write_byte(uint8_t a_register, uint8_t data); // NOLINT
|
||||
bool write_byte(uint8_t a_register, uint8_t data);
|
||||
|
||||
/// Write a single 16-bit word of data into the specified register. Return true if successful.
|
||||
bool write_byte_16(uint8_t a_register, uint16_t data); // NOLINT
|
||||
bool write_byte_16(uint8_t a_register, uint16_t data);
|
||||
|
||||
protected:
|
||||
uint8_t address_{0x00};
|
||||
I2CComponent *parent_{nullptr};
|
||||
};
|
||||
|
Reference in New Issue
Block a user