From 831b73d342d415ff57bd4a85f6cd53b134c0123e Mon Sep 17 00:00:00 2001 From: totalretribution Date: Fri, 7 Mar 2025 16:39:35 +0000 Subject: [PATCH 1/4] Added MCP23018 class with support for OUTPUT_PULLUP in pinMode. --- src/Adafruit_MCP23X18.cpp | 32 ++++++++++++++++++++++++++++++++ src/Adafruit_MCP23X18.h | 25 +++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 src/Adafruit_MCP23X18.cpp create mode 100644 src/Adafruit_MCP23X18.h diff --git a/src/Adafruit_MCP23X18.cpp b/src/Adafruit_MCP23X18.cpp new file mode 100644 index 0000000..e2aa611 --- /dev/null +++ b/src/Adafruit_MCP23X18.cpp @@ -0,0 +1,32 @@ +/*! + * @file Adafruit_MCP23X18.cpp + */ + +#include "Adafruit_MCP23X18.h" + +/**************************************************************************/ +/*! + @brief default ctor. +*/ +/**************************************************************************/ +Adafruit_MCP23X18::Adafruit_MCP23X18() { pinCount = 16; } + +/**************************************************************************/ +/*! + @brief Configures the specified pin to behave either as an input or an + output. + @param pin the Arduino pin number to set the mode of + @param mode INPUT, OUTPUT, or INPUT_PULLUP +*/ +/**************************************************************************/ +void Adafruit_MCP23X18::pinMode(uint8_t pin, uint8_t mode) { + Adafruit_BusIO_Register IODIR(i2c_dev, spi_dev, MCP23XXX_SPIREG, + getRegister(MCP23XXX_IODIR, MCP_PORT(pin))); + Adafruit_BusIO_Register GPPU(i2c_dev, spi_dev, MCP23XXX_SPIREG, + getRegister(MCP23XXX_GPPU, MCP_PORT(pin))); + Adafruit_BusIO_RegisterBits dir_bit(&IODIR, 1, pin % 8); + Adafruit_BusIO_RegisterBits pullup_bit(&GPPU, 1, pin % 8); + + dir_bit.write((mode == OUTPUT) ? 0 : 1); + pullup_bit.write((mode == INPUT_PULLUP || mode == OUTPUT_PULLUP) ? 1 : 0); +} \ No newline at end of file diff --git a/src/Adafruit_MCP23X18.h b/src/Adafruit_MCP23X18.h new file mode 100644 index 0000000..e5a660b --- /dev/null +++ b/src/Adafruit_MCP23X18.h @@ -0,0 +1,25 @@ +/*! + * @file Adafruit_MCP23X18.h + */ + +#ifndef __ADAFRUIT_MCP23X18_H__ +#define __ADAFRUIT_MCP23X18_H__ + +#include "Adafruit_MCP23X17.h" + +#define OUTPUT_PULLUP 4 + +/**************************************************************************/ +/*! + @brief Class for MCP23018 I2C and MCP23S18 SPI variants. +*/ +/**************************************************************************/ +class Adafruit_MCP23X18 : public Adafruit_MCP23X17 { +public: + Adafruit_MCP23X18(); + + void pinMode(uint8_t pin, uint8_t mode); + +}; + +#endif \ No newline at end of file From cbc9261d2d2de6f69e2a62fc12478237524056b3 Mon Sep 17 00:00:00 2001 From: Neil Date: Mon, 10 Mar 2025 17:24:00 +0000 Subject: [PATCH 2/4] Added comment for OUTPUT_PULLUP --- src/Adafruit_MCP23X18.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Adafruit_MCP23X18.h b/src/Adafruit_MCP23X18.h index e5a660b..6a0d0eb 100644 --- a/src/Adafruit_MCP23X18.h +++ b/src/Adafruit_MCP23X18.h @@ -7,7 +7,7 @@ #include "Adafruit_MCP23X17.h" -#define OUTPUT_PULLUP 4 +#define OUTPUT_PULLUP 4 //!< Additional define for Output with Pullup /**************************************************************************/ /*! @@ -22,4 +22,4 @@ class Adafruit_MCP23X18 : public Adafruit_MCP23X17 { }; -#endif \ No newline at end of file +#endif From ffb972c8e4e4cb5a089edf4f87d4e4e404265aa0 Mon Sep 17 00:00:00 2001 From: Neil Date: Mon, 10 Mar 2025 17:27:28 +0000 Subject: [PATCH 3/4] Removed new line. --- src/Adafruit_MCP23X18.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Adafruit_MCP23X18.h b/src/Adafruit_MCP23X18.h index 6a0d0eb..fc05da3 100644 --- a/src/Adafruit_MCP23X18.h +++ b/src/Adafruit_MCP23X18.h @@ -19,7 +19,6 @@ class Adafruit_MCP23X18 : public Adafruit_MCP23X17 { Adafruit_MCP23X18(); void pinMode(uint8_t pin, uint8_t mode); - }; #endif From 85e2b7c44d6648eaa17fd690fba0f58f02f2b4d7 Mon Sep 17 00:00:00 2001 From: totalretribution Date: Tue, 11 Mar 2025 20:32:08 +0000 Subject: [PATCH 4/4] Removed whitespace. --- src/Adafruit_MCP23X18.cpp | 2 +- src/Adafruit_MCP23X18.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Adafruit_MCP23X18.cpp b/src/Adafruit_MCP23X18.cpp index e2aa611..d8accf4 100644 --- a/src/Adafruit_MCP23X18.cpp +++ b/src/Adafruit_MCP23X18.cpp @@ -27,6 +27,6 @@ void Adafruit_MCP23X18::pinMode(uint8_t pin, uint8_t mode) { Adafruit_BusIO_RegisterBits dir_bit(&IODIR, 1, pin % 8); Adafruit_BusIO_RegisterBits pullup_bit(&GPPU, 1, pin % 8); - dir_bit.write((mode == OUTPUT) ? 0 : 1); + dir_bit.write((mode == OUTPUT) ? 0 : 1); pullup_bit.write((mode == INPUT_PULLUP || mode == OUTPUT_PULLUP) ? 1 : 0); } \ No newline at end of file diff --git a/src/Adafruit_MCP23X18.h b/src/Adafruit_MCP23X18.h index fc05da3..8cd97b1 100644 --- a/src/Adafruit_MCP23X18.h +++ b/src/Adafruit_MCP23X18.h @@ -17,7 +17,7 @@ class Adafruit_MCP23X18 : public Adafruit_MCP23X17 { public: Adafruit_MCP23X18(); - + void pinMode(uint8_t pin, uint8_t mode); };