10 #define LOG_I2C_DEVICE(this) ESP_LOGCONFIG(TAG, " Address: 0x%02X", this->address_); 44 bool read_bytes(uint8_t address, uint8_t a_register, uint8_t *data, uint8_t len, uint32_t conversion = 0);
56 bool read_bytes_16(uint8_t address, uint8_t a_register, uint16_t *data, uint8_t len, uint32_t conversion = 0);
59 bool read_byte(uint8_t address, uint8_t a_register, uint8_t *data, uint32_t conversion = 0);
62 bool read_byte_16(uint8_t address, uint8_t a_register, uint16_t *data, uint32_t conversion = 0);
72 bool write_bytes(uint8_t address, uint8_t a_register,
const uint8_t *data, uint8_t len);
73 bool write_bytes_raw(uint8_t address,
const uint8_t *data, uint8_t len);
83 bool write_bytes_16(uint8_t address, uint8_t a_register,
const uint16_t *data, uint8_t len);
86 bool write_byte(uint8_t address, uint8_t a_register, uint8_t data);
89 bool write_byte_16(uint8_t address, uint8_t a_register, uint16_t data);
108 void raw_write(uint8_t address,
const uint8_t *data, uint8_t len);
111 void raw_write_16(uint8_t address,
const uint16_t *data, uint8_t len);
114 bool raw_receive(uint8_t address, uint8_t *data, uint8_t len);
117 bool raw_receive_16(uint8_t address, uint16_t *data, uint8_t len);
120 void setup()
override;
133 #ifdef ARDUINO_ARCH_ESP32 144 I2CRegister &operator=(
const std::vector<uint8_t> &value);
169 void set_i2c_address(uint8_t address);
181 return this->parent_->raw_end_transmission(this->address_, send_stop);
185 void raw_write(
const uint8_t *data, uint8_t len) { this->parent_->raw_write(this->address_, data, len); };
196 bool read_bytes(uint8_t a_register, uint8_t *data, uint8_t len, uint32_t conversion = 0);
197 bool read_bytes_raw(uint8_t *data, uint8_t len) {
return this->parent_->read_bytes_raw(this->address_, data, len); }
200 std::array<uint8_t, N> res;
201 if (!this->
read_bytes(a_register, res.data(), N)) {
207 std::array<uint8_t, N> res;
222 bool read_bytes_16(uint8_t a_register, uint16_t *data, uint8_t len, uint32_t conversion = 0);
225 bool read_byte(uint8_t a_register, uint8_t *data, uint32_t conversion = 0);
235 bool read_byte_16(uint8_t a_register, uint16_t *data, uint32_t conversion = 0);
244 bool write_bytes(uint8_t a_register,
const uint8_t *data, uint8_t len);
246 return this->parent_->write_bytes_raw(this->address_, data, len);
255 bool write_bytes(uint8_t a_register,
const std::vector<uint8_t> &data) {
256 return this->
write_bytes(a_register, data.data(), data.size());
260 template<
size_t N>
bool write_bytes(uint8_t a_register,
const std::array<uint8_t, N> &data) {
261 return this->
write_bytes(a_register, data.data(), data.size());
274 bool write_bytes_16(uint8_t a_register,
const uint16_t *data, uint8_t len);
277 bool write_byte(uint8_t a_register, uint8_t data);
283 uint8_t address_{0x00};
void dump_config() override
bool write_bytes_raw(const uint8_t *data, uint8_t len)
optional< std::array< uint8_t, N > > read_bytes(uint8_t a_register)
bool write_bytes_raw(uint8_t address, const uint8_t *data, uint8_t len)
I2CRegister(I2CDevice *parent, uint8_t a_register)
void raw_begin_transmission()
Begin a write transmission.
void set_frequency(uint32_t frequency)
float get_setup_priority() const override
Set a very high setup priority to make sure it's loaded before all other hardware.
I2CRegister reg(uint8_t a_register)
optional< std::array< uint8_t, N > > read_bytes_raw()
uint8_t next_i2c_bus_num_
bool write_bytes_16(uint8_t address, uint8_t a_register, const uint16_t *data, uint8_t len)
Write len amount of 16-bit words (MSB first) to the specified register for address.
bool write_byte(uint8_t address, uint8_t a_register, uint8_t data)
Write a single byte of data into the specified register of address. Return true if successful...
bool read_bytes_raw(uint8_t *data, uint8_t len)
void raw_write(const uint8_t *data, uint8_t len)
Write len amount of bytes from data. begin_transmission_ must be called before this.
bool read_bytes_raw(uint8_t address, uint8_t *data, uint8_t len)
void raw_write(uint8_t address, const uint8_t *data, uint8_t len)
Write len amount of bytes from data to address. begin_transmission_ must be called before this...
bool write_bytes(uint8_t a_register, const std::array< uint8_t, N > &data)
void raw_begin_transmission(uint8_t address)
Begin a write transmission to an address.
bool read_bytes(uint8_t address, uint8_t a_register, uint8_t *data, uint8_t len, uint32_t conversion=0)
Read len amount of bytes from a register into data.
void set_scl_pin(uint8_t scl_pin)
void raw_write_16(uint8_t address, const uint16_t *data, uint8_t len)
Write len amount of 16-bit words from data to address. begin_transmission_ must be called before this...
bool raw_receive_16(uint8_t address, uint16_t *data, uint8_t len)
Request len amount of 16-bit words from address and write the result into data. Returns true iff was ...
bool read_byte_16(uint8_t address, uint8_t a_register, uint16_t *data, uint32_t conversion=0)
Read a single 16-bit words (MSB first) from a register into the data variable. Return true if success...
bool write_byte_16(uint8_t address, uint8_t a_register, uint16_t data)
Write a single 16-bit word of data into the specified register of address. Return true if successful...
bool read_byte(uint8_t address, uint8_t a_register, uint8_t *data, uint32_t conversion=0)
Read a single byte from a register into the data variable. Return true if successful.
void set_sda_pin(uint8_t sda_pin)
optional< uint8_t > read_byte(uint8_t a_register)
bool write_bytes_raw(const std::array< uint8_t, N > &data)
void setup() override
Setup the i2c. bus.
bool write_bytes(uint8_t a_register, const std::vector< uint8_t > &data)
Write a vector of data to a register.
bool raw_request_from(uint8_t address, uint8_t len)
Request data from an address with a number of (8-bit) bytes.
I2CDevice(I2CComponent *parent, uint8_t address)
bool raw_end_transmission(bool send_stop=true)
End a write transmission, return true if successful.
bool write_bytes(uint8_t address, uint8_t a_register, const uint8_t *data, uint8_t len)
Write len amount of 8-bit bytes to the specified register for address.
bool read_bytes_16(uint8_t address, uint8_t a_register, uint16_t *data, uint8_t len, uint32_t conversion=0)
Read len amount of 16-bit words (MSB first) from a register into data.
bool raw_receive(uint8_t address, uint8_t *data, uint8_t len)
Request len amount of bytes from address and write the result it into data. Returns true iff was succ...
Library based on https://github.com/miguelbalboa/rfid and adapted to ESPHome by . ...
bool raw_end_transmission(uint8_t address, bool send_stop=true)
End a write transmission to an address, return true if successful.
The I2CComponent is the base of ESPHome's i2c communication.
All components doing communication on the I2C bus should subclass I2CDevice.
bool write_bytes_raw(const std::vector< uint8_t > &data)