ESPHome 2026.11.0-dev
Loading...
Searching...
No Matches
mcp23xxx_base.h
Go to the documentation of this file.
1#pragma once
2
5#include "esphome/core/hal.h"
6
8
10
11template<uint8_t N> class MCP23XXXBase : public gpio_expander::CachedGpioExpanderComponent<uint8_t, N> {
12 public:
13 virtual void pin_mode(uint8_t pin, gpio::Flags flags);
14 virtual void pin_interrupt_mode(uint8_t pin, MCP23XXXInterruptMode interrupt_mode);
15
16 void set_open_drain_ints(const bool value) { this->open_drain_ints_ = value; }
18
19 protected:
20 // read a given register
21 virtual bool read_reg(uint8_t reg, uint8_t *value) = 0;
22 // write a value to a given register
23 virtual bool write_reg(uint8_t reg, uint8_t value) = 0;
24 // update registers with given pin value.
25 virtual void update_reg(uint8_t pin, bool pin_value, uint8_t reg_a) = 0;
26
28};
29
30template<uint8_t N> class MCP23XXXGPIOPin final : public GPIOPin {
31 public:
32 void setup() override;
33 void pin_mode(gpio::Flags flags) override;
34 bool digital_read() override;
35 void digital_write(bool value) override;
36 size_t dump_summary(char *buffer, size_t len) const override;
37
38 void set_parent(MCP23XXXBase<N> *parent) { parent_ = parent; }
39 void set_pin(uint8_t pin) { pin_ = pin; }
40 void set_inverted(bool inverted) { inverted_ = inverted; }
42 void set_interrupt_mode(MCP23XXXInterruptMode interrupt_mode) { interrupt_mode_ = interrupt_mode; }
43
44 gpio::Flags get_flags() const override { return this->flags_; }
45
46 protected:
48 uint8_t pin_;
52};
53
54} // namespace esphome::mcp23xxx_base
Base for expanders that cache reads per loop. With an interrupt pin the cache stays valid until INT f...
InternalGPIOPin * get_interrupt_pin() const
virtual void pin_interrupt_mode(uint8_t pin, MCP23XXXInterruptMode interrupt_mode)
virtual bool read_reg(uint8_t reg, uint8_t *value)=0
void set_open_drain_ints(const bool value)
virtual void update_reg(uint8_t pin, bool pin_value, uint8_t reg_a)=0
virtual void pin_mode(uint8_t pin, gpio::Flags flags)
virtual bool write_reg(uint8_t reg, uint8_t value)=0
void digital_write(bool value) override
void pin_mode(gpio::Flags flags) override
size_t dump_summary(char *buffer, size_t len) const override
void set_parent(MCP23XXXBase< N > *parent)
void set_interrupt_mode(MCP23XXXInterruptMode interrupt_mode)
gpio::Flags get_flags() const override
uint16_t flags
uint32_t buffer
Definition gif.cpp:50
const void size_t len
Definition hal.h:68