8static constexpr uint8_t INPUT_REG = 0x00;
9static constexpr uint8_t OUTPUT_REG = 0x08;
10static constexpr uint8_t INVERT_REG = 0x10;
11static constexpr uint8_t CONFIG_REG = 0x18;
12static constexpr uint8_t MASK_REG = 0x20;
13static constexpr uint8_t AUTO_INCREMENT = 0x80;
20 ESP_LOGE(TAG,
"PCA9505 not detected at 0x%02X", this->
address_);
35 for (uint8_t &bank : this->
mask_) {
65 ESP_LOGCONFIG(TAG,
"PCA9505:");
75 const uint8_t bank = pin / 8;
76 const uint8_t mask = 1 << (pin % 8);
86 const uint8_t bank = pin / 8;
87 const uint8_t mask = 1 << (pin % 8);
91 this->
mask_[bank] &= ~mask;
98 this->
mask_[bank] |= mask;
136 uint8_t values[BANK_COUNT];
137 for (uint8_t &bank : values) {
159 return buf_append_printf(
buffer,
len, 0,
"%u via PCA9505", this->
pin_);
void mark_failed()
Mark this component as failed.
void status_set_warning()
void enable_loop_soon_any_context()
Thread and ISR-safe version of enable_loop() that can be called from any context.
void enable_loop()
Enable this component's loop.
void disable_loop()
Disable this component's loop.
void status_clear_warning()
PCA9505Component * parent_
void attach_interrupt(void(*func)(T *), T *arg, gpio::InterruptType type) const
bool digital_read() override
void set_invalidate_on_read_(bool invalidate)
ErrorCode write_register(uint8_t a_register, const uint8_t *data, size_t len) const
writes an array of bytes to a specific register in the I²C device
uint8_t address_
store the address of the device on the bus
ErrorCode read_register(uint8_t a_register, uint8_t *data, size_t len)
reads an array of bytes from a specific register in the I²C device
bool write_all_banks_(uint8_t reg, uint8_t value)
uint8_t output_[BANK_COUNT]
The output state per bank - 1 means HIGH, 0 means LOW.
bool read_bank_(uint8_t bank)
static void IRAM_ATTR gpio_intr(PCA9505Component *arg)
InternalGPIOPin * interrupt_pin_
uint8_t config_[BANK_COUNT]
The pin config per bank - 1 means OUTPUT, 0 means INPUT.
void pin_mode(uint8_t pin, gpio::Flags flags)
uint8_t mask_[BANK_COUNT]
Which pins may pull INT low - 1 means masked, matching the chip.
float get_setup_priority() const override
bool digital_read_cache(uint8_t pin) override
uint8_t input_[BANK_COUNT]
The input pin states per bank - 1 means HIGH, 0 means LOW.
void dump_config() override
bool write_bank_(uint8_t reg, uint8_t bank, uint8_t value)
void digital_write_hw(uint8_t pin, bool value) override
bool digital_read_hw(uint8_t pin) override
void digital_write(bool value) override
void pin_mode(gpio::Flags flags) override
bool digital_read() override
size_t dump_summary(char *buffer, size_t len) const override
@ ERROR_OK
No error found during execution of method.
ESPHOME_LOG_TAG(TAG, "pca9505")
constexpr float IO
For components that represent GPIO pins like PCF8573.