1
0
mirror of https://github.com/esphome/esphome.git synced 2025-09-25 06:32:22 +01:00

[gpio_expander] Fix bank caching (#10077)

Co-authored-by: J. Nick Koston <nick@koston.org>
Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
This commit is contained in:
Jesse Hills
2025-08-05 13:45:52 +12:00
committed by GitHub
parent 396c02c6de
commit c85eb448e4
6 changed files with 245 additions and 15 deletions

View File

@@ -0,0 +1,25 @@
import esphome.codegen as cg
import esphome.config_validation as cv
from esphome.const import CONF_ID
AUTO_LOAD = ["gpio_expander"]
gpio_expander_test_component_ns = cg.esphome_ns.namespace(
"gpio_expander_test_component"
)
GPIOExpanderTestComponent = gpio_expander_test_component_ns.class_(
"GPIOExpanderTestComponent", cg.Component
)
CONFIG_SCHEMA = cv.Schema(
{
cv.GenerateID(): cv.declare_id(GPIOExpanderTestComponent),
}
).extend(cv.COMPONENT_SCHEMA)
async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID])
await cg.register_component(var, config)

View File

@@ -0,0 +1,38 @@
#include "gpio_expander_test_component.h"
#include "esphome/core/application.h"
#include "esphome/core/log.h"
namespace esphome::gpio_expander_test_component {
static const char *const TAG = "gpio_expander_test";
void GPIOExpanderTestComponent::setup() {
for (uint8_t pin = 0; pin < 32; pin++) {
this->digital_read(pin);
}
this->digital_read(3);
this->digital_read(3);
this->digital_read(4);
this->digital_read(3);
this->digital_read(10);
this->reset_pin_cache_(); // Reset cache to ensure next read is from hardware
this->digital_read(15);
this->digital_read(14);
this->digital_read(14);
ESP_LOGD(TAG, "DONE");
}
bool GPIOExpanderTestComponent::digital_read_hw(uint8_t pin) {
ESP_LOGD(TAG, "digital_read_hw pin=%d", pin);
return true;
}
bool GPIOExpanderTestComponent::digital_read_cache(uint8_t pin) {
ESP_LOGD(TAG, "digital_read_cache pin=%d", pin);
return true;
}
} // namespace esphome::gpio_expander_test_component

View File

@@ -0,0 +1,18 @@
#pragma once
#include "esphome/components/gpio_expander/cached_gpio.h"
#include "esphome/core/component.h"
namespace esphome::gpio_expander_test_component {
class GPIOExpanderTestComponent : public Component, public esphome::gpio_expander::CachedGpioExpander<uint8_t, 32> {
public:
void setup() override;
protected:
bool digital_read_hw(uint8_t pin) override;
bool digital_read_cache(uint8_t pin) override;
void digital_write_hw(uint8_t pin, bool value) override{};
};
} // namespace esphome::gpio_expander_test_component