diff --git a/Adafruit_SPITFT.cpp b/Adafruit_SPITFT.cpp index 51b53cc..7e80a2b 100644 --- a/Adafruit_SPITFT.cpp +++ b/Adafruit_SPITFT.cpp @@ -126,10 +126,29 @@ Adafruit_SPITFT::Adafruit_SPITFT(uint16_t w, uint16_t h, /**************************************************************************/ Adafruit_SPITFT::Adafruit_SPITFT(uint16_t w, uint16_t h, int8_t cs, int8_t dc, int8_t rst) + : Adafruit_SPITFT(w, h, &SPI, cs, dc, rst) +{ + // We just call the hardware SPI instantiator with the default SPI device (&SPI) +} + +/**************************************************************************/ +/*! + @brief Instantiate Adafruit SPI display driver with hardware SPI + @param w Display width in pixels + @param h Display height in pixels + @param spiClass A pointer to an SPI hardware interface, e.g. &SPI1 + @param cs Chip select pin # + @param dc Data/Command pin # + @param rst Reset pin # (optional, pass -1 if unused) +*/ +/**************************************************************************/ +Adafruit_SPITFT::Adafruit_SPITFT(uint16_t w, uint16_t h, SPIClass *spiClass, + int8_t cs, int8_t dc, int8_t rst) : Adafruit_GFX(w, h) { _cs = cs; _dc = dc; _rst = rst; + _spi = spiClass; _sclk = -1; _mosi = -1; _miso = -1; diff --git a/Adafruit_SPITFT.h b/Adafruit_SPITFT.h index 53cdd98..44bed33 100644 --- a/Adafruit_SPITFT.h +++ b/Adafruit_SPITFT.h @@ -37,6 +37,7 @@ class Adafruit_SPITFT : public Adafruit_GFX { public: Adafruit_SPITFT(uint16_t w, uint16_t h, int8_t _CS, int8_t _DC, int8_t _MOSI, int8_t _SCLK, int8_t _RST = -1, int8_t _MISO = -1); Adafruit_SPITFT(uint16_t w, uint16_t h, int8_t _CS, int8_t _DC, int8_t _RST = -1); + Adafruit_SPITFT(uint16_t w, uint16_t h, SPIClass *spiClass, int8_t _CS, int8_t _DC, int8_t _RST = -1); virtual void begin(uint32_t freq) = 0; ///< Virtual begin() function to set SPI frequency, must be overridden in subclass. @param freq Maximum SPI hardware clock speed @@ -87,6 +88,7 @@ class Adafruit_SPITFT : public Adafruit_GFX { uint16_t color565(uint8_t r, uint8_t g, uint8_t b); protected: + SPIClass *_spi; ///< The SPI device we want to use (set in constructor) uint32_t _freq; ///< SPI clock frequency (for hardware SPI) #if defined (__AVR__) || defined(TEENSYDUINO) || defined (ESP8266) || defined (ESP32) int8_t _cs, _dc, _rst, _sclk, _mosi, _miso; diff --git a/Adafruit_SPITFT_Macros.h b/Adafruit_SPITFT_Macros.h index f0466ef..d75cced 100644 --- a/Adafruit_SPITFT_Macros.h +++ b/Adafruit_SPITFT_Macros.h @@ -46,27 +46,25 @@ * Hardware SPI Macros * */ -#define SPI_OBJECT SPI - #if defined (__AVR__) || defined(TEENSYDUINO) || defined(ARDUINO_ARCH_STM32F1) - #define HSPI_SET_CLOCK() SPI_OBJECT.setClockDivider(SPI_CLOCK_DIV2); + #define HSPI_SET_CLOCK() _spi->setClockDivider(SPI_CLOCK_DIV2); #elif defined (__arm__) - #define HSPI_SET_CLOCK() SPI_OBJECT.setClockDivider(11); + #define HSPI_SET_CLOCK() _spi->setClockDivider(11); #elif defined(ESP8266) || defined(ESP32) - #define HSPI_SET_CLOCK() SPI_OBJECT.setFrequency(_freq); + #define HSPI_SET_CLOCK() _spi->setFrequency(_freq); #elif defined(RASPI) - #define HSPI_SET_CLOCK() SPI_OBJECT.setClock(_freq); + #define HSPI_SET_CLOCK() _spi->setClock(_freq); #elif defined(ARDUINO_ARCH_STM32F1) - #define HSPI_SET_CLOCK() SPI_OBJECT.setClock(_freq); + #define HSPI_SET_CLOCK() _spi->setClock(_freq); #else #define HSPI_SET_CLOCK() #endif #ifdef SPI_HAS_TRANSACTION - #define HSPI_BEGIN_TRANSACTION() SPI_OBJECT.beginTransaction(SPISettings(_freq, MSBFIRST, SPI_MODE0)) - #define HSPI_END_TRANSACTION() SPI_OBJECT.endTransaction() + #define HSPI_BEGIN_TRANSACTION() _spi->beginTransaction(SPISettings(_freq, MSBFIRST, SPI_MODE0)) + #define HSPI_END_TRANSACTION() _spi->endTransaction() #else - #define HSPI_BEGIN_TRANSACTION() HSPI_SET_CLOCK(); SPI_OBJECT.setBitOrder(MSBFIRST); SPI_OBJECT.setDataMode(SPI_MODE0) + #define HSPI_BEGIN_TRANSACTION() HSPI_SET_CLOCK(); _spi->setBitOrder(MSBFIRST); _spi->setDataMode(SPI_MODE0) #define HSPI_END_TRANSACTION() #endif @@ -75,13 +73,13 @@ #endif #if defined(ESP8266) || defined(ESP32) // Optimized SPI (ESP8266 and ESP32) - #define HSPI_READ() SPI_OBJECT.transfer(0) - #define HSPI_WRITE(b) SPI_OBJECT.write(b) - #define HSPI_WRITE16(s) SPI_OBJECT.write16(s) - #define HSPI_WRITE32(l) SPI_OBJECT.write32(l) + #define HSPI_READ() _spi->transfer(0) + #define HSPI_WRITE(b) _spi->write(b) + #define HSPI_WRITE16(s) _spi->write16(s) + #define HSPI_WRITE32(l) _spi->write32(l) #ifdef SPI_HAS_WRITE_PIXELS #define SPI_MAX_PIXELS_AT_ONCE 32 - #define HSPI_WRITE_PIXELS(c,l) SPI_OBJECT.writePixels(c,l) + #define HSPI_WRITE_PIXELS(c,l) _spi->writePixels(c,l) #else #define HSPI_WRITE_PIXELS(c,l) for(uint32_t i=0; i<((l)/2); i++){ SPI_WRITE16(((uint16_t*)(c))[i]); } #endif @@ -100,7 +98,7 @@ static inline uint8_t _avr_spi_read(void) { #define HSPI_WRITE(b) {SPDR = (b); while(!(SPSR & _BV(SPIF)));} #define HSPI_READ() _avr_spi_read() #else - #define HSPI_WRITE(b) SPI_OBJECT.transfer((uint8_t)(b)) + #define HSPI_WRITE(b) _spi->transfer((uint8_t)(b)) #define HSPI_READ() HSPI_WRITE(0) #endif #define HSPI_WRITE16(s) HSPI_WRITE((s) >> 8); HSPI_WRITE(s) @@ -108,7 +106,7 @@ static inline uint8_t _avr_spi_read(void) { #define HSPI_WRITE_PIXELS(c,l) for(uint32_t i=0; i<(l); i+=2){ HSPI_WRITE(((uint8_t*)(c))[i+1]); HSPI_WRITE(((uint8_t*)(c))[i]); } #endif -#define SPI_BEGIN() if(_sclk < 0){SPI_OBJECT.begin();} +#define SPI_BEGIN() if(_sclk < 0){_spi->begin();} #define SPI_BEGIN_TRANSACTION() if(_sclk < 0){HSPI_BEGIN_TRANSACTION();} #define SPI_END_TRANSACTION() if(_sclk < 0){HSPI_END_TRANSACTION();} #define SPI_WRITE16(s) if(_sclk < 0){HSPI_WRITE16(s);}else{SSPI_WRITE16(s);} diff --git a/library.properties b/library.properties index eea4780..6c42ec9 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=Adafruit GFX Library -version=1.2.9 +version=1.3.0 author=Adafruit maintainer=Adafruit sentence=Adafruit GFX graphics core library, this is the 'core' class that all our other graphics libraries derive from.