mirror of
https://github.com/esphome/esphome.git
synced 2025-09-19 03:32:20 +01:00
Merge branch 'integration' into memory_api
This commit is contained in:
@@ -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) {
|
||||||
|
@@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user