ESPHome 2026.6.0-dev
Loading...
Searching...
No Matches
mcp23016.h
Go to the documentation of this file.
1#pragma once
2
4#include "esphome/core/hal.h"
7
8namespace esphome::mcp23016 {
9
26
27class MCP23016 : public Component, public i2c::I2CDevice, public gpio_expander::CachedGpioExpander<uint16_t, 16> {
28 public:
29 MCP23016() = default;
30
31 void setup() override;
32 void loop() override;
33 void pin_mode(uint8_t pin, gpio::Flags flags);
34
35 float get_setup_priority() const override;
36
38
39 protected:
40 static void IRAM_ATTR gpio_intr(MCP23016 *arg);
41 // Virtual methods from CachedGpioExpander
42 bool digital_read_hw(uint8_t pin) override;
43 bool digital_read_cache(uint8_t pin) override;
44 void digital_write_hw(uint8_t pin, bool value) override;
45
46 // read a given register
47 bool read_reg_(uint8_t reg, uint16_t *value);
48 // write a value to a given register
49 bool write_reg_(uint8_t reg, uint16_t value);
50 // update registers with given pin value.
51 void update_reg_(uint8_t pin, bool pin_value, uint8_t reg_a);
52
53 uint16_t olat_{0x0000};
54 // Cache for input values (16-bit combined for both banks)
55 uint16_t input_mask_{0x0000};
57};
58
59class MCP23016GPIOPin : public GPIOPin {
60 public:
61 void setup() override;
62 void pin_mode(gpio::Flags flags) override;
63 bool digital_read() override;
64 void digital_write(bool value) override;
65 size_t dump_summary(char *buffer, size_t len) const override;
66
67 void set_parent(MCP23016 *parent) { parent_ = parent; }
68 void set_pin(uint8_t pin) { pin_ = pin; }
69 void set_inverted(bool inverted) { inverted_ = inverted; }
71
72 gpio::Flags get_flags() const override { return this->flags_; }
73
74 protected:
76 uint8_t pin_;
79};
80
81} // namespace esphome::mcp23016
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 set_flags(gpio::Flags flags)
Definition mcp23016.h:70
void pin_mode(gpio::Flags flags) override
Definition mcp23016.cpp:96
void set_parent(MCP23016 *parent)
Definition mcp23016.h:67
size_t dump_summary(char *buffer, size_t len) const override
Definition mcp23016.cpp:99
void set_inverted(bool inverted)
Definition mcp23016.h:69
gpio::Flags get_flags() const override
Definition mcp23016.h:72
void digital_write(bool value) override
Definition mcp23016.cpp:98
void setup() override
Definition mcp23016.cpp:9
void pin_mode(uint8_t pin, gpio::Flags flags)
Definition mcp23016.cpp:50
bool digital_read_cache(uint8_t pin) override
Definition mcp23016.cpp:48
InternalGPIOPin * interrupt_pin_
Definition mcp23016.h:56
void set_interrupt_pin(InternalGPIOPin *pin)
Definition mcp23016.h:37
void digital_write_hw(uint8_t pin, bool value) override
Definition mcp23016.cpp:49
static void IRAM_ATTR gpio_intr(MCP23016 *arg)
Definition mcp23016.cpp:35
bool digital_read_hw(uint8_t pin) override
Definition mcp23016.cpp:46
void update_reg_(uint8_t pin, bool pin_value, uint8_t reg_a)
Definition mcp23016.cpp:73
float get_setup_priority() const override
Definition mcp23016.cpp:60
bool read_reg_(uint8_t reg, uint16_t *value)
Definition mcp23016.cpp:61
bool write_reg_(uint8_t reg, uint16_t value)
Definition mcp23016.cpp:67
uint16_t flags
const void size_t len
Definition hal.h:64