ESPHome 2026.5.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 {
9namespace mcp23016 {
10
27
28class MCP23016 : public Component, public i2c::I2CDevice, public gpio_expander::CachedGpioExpander<uint16_t, 16> {
29 public:
30 MCP23016() = default;
31
32 void setup() override;
33 void loop() override;
34 void pin_mode(uint8_t pin, gpio::Flags flags);
35
36 float get_setup_priority() const override;
37
39
40 protected:
41 static void IRAM_ATTR gpio_intr(MCP23016 *arg);
42 // Virtual methods from CachedGpioExpander
43 bool digital_read_hw(uint8_t pin) override;
44 bool digital_read_cache(uint8_t pin) override;
45 void digital_write_hw(uint8_t pin, bool value) override;
46
47 // read a given register
48 bool read_reg_(uint8_t reg, uint16_t *value);
49 // write a value to a given register
50 bool write_reg_(uint8_t reg, uint16_t value);
51 // update registers with given pin value.
52 void update_reg_(uint8_t pin, bool pin_value, uint8_t reg_a);
53
54 uint16_t olat_{0x0000};
55 // Cache for input values (16-bit combined for both banks)
56 uint16_t input_mask_{0x0000};
58};
59
60class MCP23016GPIOPin : public GPIOPin {
61 public:
62 void setup() override;
63 void pin_mode(gpio::Flags flags) override;
64 bool digital_read() override;
65 void digital_write(bool value) override;
66 size_t dump_summary(char *buffer, size_t len) const override;
67
68 void set_parent(MCP23016 *parent) { parent_ = parent; }
69 void set_pin(uint8_t pin) { pin_ = pin; }
70 void set_inverted(bool inverted) { inverted_ = inverted; }
72
73 gpio::Flags get_flags() const override { return this->flags_; }
74
75 protected:
77 uint8_t pin_;
80};
81
82} // namespace mcp23016
83} // namespace esphome
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:71
void pin_mode(gpio::Flags flags) override
Definition mcp23016.cpp:94
void set_parent(MCP23016 *parent)
Definition mcp23016.h:68
size_t dump_summary(char *buffer, size_t len) const override
Definition mcp23016.cpp:97
void set_inverted(bool inverted)
Definition mcp23016.h:70
gpio::Flags get_flags() const override
Definition mcp23016.h:73
void digital_write(bool value) override
Definition mcp23016.cpp:96
void pin_mode(uint8_t pin, gpio::Flags flags)
Definition mcp23016.cpp:48
bool digital_read_cache(uint8_t pin) override
Definition mcp23016.cpp:46
InternalGPIOPin * interrupt_pin_
Definition mcp23016.h:57
void set_interrupt_pin(InternalGPIOPin *pin)
Definition mcp23016.h:38
void digital_write_hw(uint8_t pin, bool value) override
Definition mcp23016.cpp:47
static void IRAM_ATTR gpio_intr(MCP23016 *arg)
Definition mcp23016.cpp:36
bool digital_read_hw(uint8_t pin) override
Definition mcp23016.cpp:44
void update_reg_(uint8_t pin, bool pin_value, uint8_t reg_a)
Definition mcp23016.cpp:71
float get_setup_priority() const override
Definition mcp23016.cpp:58
bool read_reg_(uint8_t reg, uint16_t *value)
Definition mcp23016.cpp:59
bool write_reg_(uint8_t reg, uint16_t value)
Definition mcp23016.cpp:65
uint16_t flags
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
std::string size_t len
Definition helpers.h:1045