ESPHome 2026.11.0-dev
Loading...
Searching...
No Matches
pca9505.h
Go to the documentation of this file.
1#pragma once
2
4#include "esphome/core/hal.h"
8
9namespace esphome::pca9505 {
10
12static constexpr uint8_t PIN_COUNT = 40;
14static constexpr uint8_t BANK_COUNT = PIN_COUNT / 8;
15
16class PCA9505Component final : public Component,
17 public i2c::I2CDevice,
18 public gpio_expander::CachedGpioExpander<uint8_t, PIN_COUNT> {
19 public:
21
22 void setup() override;
23 void loop() override;
24 void pin_mode(uint8_t pin, gpio::Flags flags);
25
26 float get_setup_priority() const override;
27
28 void dump_config() override;
29
30 protected:
31 static void IRAM_ATTR gpio_intr(PCA9505Component *arg);
32
33 bool digital_read_hw(uint8_t pin) override;
34 bool digital_read_cache(uint8_t pin) override;
35 void digital_write_hw(uint8_t pin, bool value) override;
36
37 bool read_bank_(uint8_t bank);
38 bool write_bank_(uint8_t reg, uint8_t bank, uint8_t value);
39 bool write_all_banks_(uint8_t reg, uint8_t value);
40
42 uint8_t config_[BANK_COUNT]{};
44 uint8_t output_[BANK_COUNT]{};
46 uint8_t input_[BANK_COUNT]{};
48 uint8_t mask_[BANK_COUNT]{};
50};
51
52class PCA9505GPIOPin final : public GPIOPin, public Parented<PCA9505Component> {
53 public:
54 void setup() override;
55 void pin_mode(gpio::Flags flags) override;
56 bool digital_read() override;
57 void digital_write(bool value) override;
58 size_t dump_summary(char *buffer, size_t len) const override;
59
60 void set_pin(uint8_t pin) { this->pin_ = pin; }
61 void set_inverted(bool inverted) { this->inverted_ = inverted; }
63
64 gpio::Flags get_flags() const override { return this->flags_; }
65
66 protected:
67 uint8_t pin_{0};
68 bool inverted_{false};
70};
71
72} // namespace esphome::pca9505
Helper class to easily give an object a parent of type T.
Definition helpers.h:1997
A class to cache the read state of a GPIO expander.
Definition cached_gpio.h:29
This Class provides the methods to read/write bytes from/to an i2c device.
Definition i2c.h:132
I2CRegister reg(uint8_t a_register)
calls the I2CRegister constructor
Definition i2c.h:152
bool write_all_banks_(uint8_t reg, uint8_t value)
Definition pca9505.cpp:132
uint8_t output_[BANK_COUNT]
The output state per bank - 1 means HIGH, 0 means LOW.
Definition pca9505.h:44
static void IRAM_ATTR gpio_intr(PCA9505Component *arg)
Definition pca9505.cpp:51
InternalGPIOPin * interrupt_pin_
Definition pca9505.h:49
uint8_t config_[BANK_COUNT]
The pin config per bank - 1 means OUTPUT, 0 means INPUT.
Definition pca9505.h:42
void pin_mode(uint8_t pin, gpio::Flags flags)
Definition pca9505.cpp:85
void set_interrupt_pin(InternalGPIOPin *pin)
Definition pca9505.h:20
uint8_t mask_[BANK_COUNT]
Which pins may pull INT low - 1 means masked, matching the chip.
Definition pca9505.h:48
float get_setup_priority() const override
Definition pca9505.cpp:148
bool digital_read_cache(uint8_t pin) override
Definition pca9505.cpp:72
uint8_t input_[BANK_COUNT]
The input pin states per bank - 1 means HIGH, 0 means LOW.
Definition pca9505.h:46
bool write_bank_(uint8_t reg, uint8_t bank, uint8_t value)
Definition pca9505.cpp:120
void digital_write_hw(uint8_t pin, bool value) override
Definition pca9505.cpp:74
bool digital_read_hw(uint8_t pin) override
Definition pca9505.cpp:70
void digital_write(bool value) override
Definition pca9505.cpp:156
void pin_mode(gpio::Flags flags) override
Definition pca9505.cpp:152
void set_flags(gpio::Flags flags)
Definition pca9505.h:62
size_t dump_summary(char *buffer, size_t len) const override
Definition pca9505.cpp:158
void set_inverted(bool inverted)
Definition pca9505.h:61
gpio::Flags get_flags() const override
Definition pca9505.h:64
void set_pin(uint8_t pin)
Definition pca9505.h:60
uint16_t flags
uint32_t buffer
Definition gif.cpp:50
const void size_t len
Definition hal.h:68