1
0
mirror of https://github.com/esphome/esphome.git synced 2025-09-19 11:42:20 +01:00

Merge branch 'integration' into memory_api

This commit is contained in:
J. Nick Koston
2025-09-04 11:04:30 -05:00
2 changed files with 13 additions and 1 deletions

View File

@@ -16,6 +16,11 @@ void PCF8574Component::setup() {
this->write_gpio_(); this->write_gpio_();
this->read_gpio_(); this->read_gpio_();
} }
void PCF8574Component::loop() {
// Invalidate the cache at the start of each loop.
// The actual read will happen on demand in digital_read()
this->cache_valid_ = false;
}
void PCF8574Component::dump_config() { void PCF8574Component::dump_config() {
ESP_LOGCONFIG(TAG, "PCF8574:"); ESP_LOGCONFIG(TAG, "PCF8574:");
LOG_I2C_DEVICE(this) LOG_I2C_DEVICE(this)
@@ -25,7 +30,10 @@ void PCF8574Component::dump_config() {
} }
} }
bool PCF8574Component::digital_read(uint8_t pin) { bool PCF8574Component::digital_read(uint8_t pin) {
this->read_gpio_(); // Read the inputs once per loop on demand and cache the result
if (!this->cache_valid_ && this->read_gpio_()) {
this->cache_valid_ = true;
}
return this->input_mask_ & (1 << pin); return this->input_mask_ & (1 << pin);
} }
void PCF8574Component::digital_write(uint8_t pin, bool value) { void PCF8574Component::digital_write(uint8_t pin, bool value) {

View File

@@ -15,6 +15,8 @@ class PCF8574Component : public Component, public i2c::I2CDevice {
/// Check i2c availability and setup masks /// Check i2c availability and setup masks
void setup() override; void setup() override;
/// Invalidate cache at start of each loop
void loop() override;
/// Helper function to read the value of a pin. /// Helper function to read the value of a pin.
bool digital_read(uint8_t pin); bool digital_read(uint8_t pin);
/// Helper function to write the value of a pin. /// Helper function to write the value of a pin.
@@ -37,6 +39,8 @@ class PCF8574Component : public Component, public i2c::I2CDevice {
uint16_t output_mask_{0x00}; uint16_t output_mask_{0x00};
/// The state read in read_gpio_ - 1 means HIGH, 0 means LOW /// The state read in read_gpio_ - 1 means HIGH, 0 means LOW
uint16_t input_mask_{0x00}; uint16_t input_mask_{0x00};
/// Cache validity flag - true if we've read inputs this loop cycle
bool cache_valid_{false};
bool pcf8575_; ///< TRUE->16-channel PCF8575, FALSE->8-channel PCF8574 bool pcf8575_; ///< TRUE->16-channel PCF8575, FALSE->8-channel PCF8574
}; };