ESPHome 2026.6.0-dev
Loading...
Searching...
No Matches
pca6416a.h
Go to the documentation of this file.
1#pragma once
2
4#include "esphome/core/hal.h"
7
8namespace esphome::pca6416a {
9
11 public i2c::I2CDevice,
12 public gpio_expander::CachedGpioExpander<uint8_t, 16> {
13 public:
14 PCA6416AComponent() = default;
15
17 void setup() override;
18 void loop() override;
20 void pin_mode(uint8_t pin, gpio::Flags flags);
21
22 float get_setup_priority() const override;
23
24 void dump_config() override;
25
27
28 protected:
29 static void IRAM_ATTR gpio_intr(PCA6416AComponent *arg);
30 // Virtual methods from CachedGpioExpander
31 bool digital_read_hw(uint8_t pin) override;
32 bool digital_read_cache(uint8_t pin) override;
33 void digital_write_hw(uint8_t pin, bool value) override;
34
35 bool read_register_(uint8_t reg, uint8_t *value);
36 bool write_register_(uint8_t reg, uint8_t value);
37 void update_register_(uint8_t pin, bool pin_value, uint8_t reg_addr);
38
40 uint8_t output_0_{0x00};
41 uint8_t output_1_{0x00};
43 uint16_t input_mask_{0x00};
47 bool has_pullup_{false};
49};
50
52class PCA6416AGPIOPin : public GPIOPin {
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_parent(PCA6416AComponent *parent) { parent_ = parent; }
61 void set_pin(uint8_t pin) { pin_ = pin; }
62 void set_inverted(bool inverted) { inverted_ = inverted; }
64
65 gpio::Flags get_flags() const override { return this->flags_; }
66
67 protected:
69 uint8_t pin_;
72};
73
74} // namespace esphome::pca6416a
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
void digital_write_hw(uint8_t pin, bool value) override
Definition pca6416a.cpp:103
bool write_register_(uint8_t reg, uint8_t value)
Definition pca6416a.cpp:154
static void IRAM_ATTR gpio_intr(PCA6416AComponent *arg)
Definition pca6416a.cpp:60
bool read_register_(uint8_t reg, uint8_t *value)
Definition pca6416a.cpp:137
esphome::i2c::ErrorCode last_error_
Storage for last I2C error seen.
Definition pca6416a.h:45
void update_register_(uint8_t pin, bool pin_value, uint8_t reg_addr)
Definition pca6416a.cpp:171
uint16_t input_mask_
Cache for input values (16-bit combined for both banks)
Definition pca6416a.h:43
bool has_pullup_
Only the PCAL6416A has pull-up resistors.
Definition pca6416a.h:47
void set_interrupt_pin(InternalGPIOPin *pin)
Definition pca6416a.h:26
void pin_mode(uint8_t pin, gpio::Flags flags)
Helper function to set the pin mode of a pin.
Definition pca6416a.cpp:108
void setup() override
Check i2c availability and setup masks.
Definition pca6416a.cpp:25
float get_setup_priority() const override
Definition pca6416a.cpp:197
bool digital_read_hw(uint8_t pin) override
Definition pca6416a.cpp:85
bool digital_read_cache(uint8_t pin) override
Definition pca6416a.cpp:101
uint8_t output_0_
The mask to write as output state - 1 means HIGH, 0 means LOW.
Definition pca6416a.h:40
Helper class to expose a PCA6416A pin as an internal input GPIO pin.
Definition pca6416a.h:52
size_t dump_summary(char *buffer, size_t len) const override
Definition pca6416a.cpp:203
gpio::Flags get_flags() const override
Definition pca6416a.h:65
void digital_write(bool value) override
Definition pca6416a.cpp:202
void set_flags(gpio::Flags flags)
Definition pca6416a.h:63
PCA6416AComponent * parent_
Definition pca6416a.h:68
void set_inverted(bool inverted)
Definition pca6416a.h:62
void set_parent(PCA6416AComponent *parent)
Definition pca6416a.h:60
void pin_mode(gpio::Flags flags) override
Definition pca6416a.cpp:200
uint16_t flags
ErrorCode
Error codes returned by I2CBus and I2CDevice methods.
Definition i2c_bus.h:12
const void size_t len
Definition hal.h:64