Skip to content

Commit b1df176

Browse files
joeycastillojosecastillo
authored andcommitted
Allow use of EPD displays on secondary SPI (#18)
* allow use of EPD displays on secondary SPI * fix comment indent Co-authored-by: Joey Castillo <[email protected]>
1 parent effbad7 commit b1df176

File tree

4 files changed

+28
-21
lines changed

4 files changed

+28
-21
lines changed

Adafruit_EPD.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -104,15 +104,17 @@ Adafruit_EPD::Adafruit_EPD(int width, int height, int8_t spi_mosi,
104104
@param CS the chip select pin to use
105105
@param SRCS the SRAM chip select pin to use
106106
@param BUSY the busy pin to use
107+
@param spi the SPI bus to use
107108
*/
108109
/**************************************************************************/
109110
Adafruit_EPD::Adafruit_EPD(int width, int height, int8_t DC, int8_t RST,
110-
int8_t CS, int8_t SRCS, int8_t BUSY)
111+
int8_t CS, int8_t SRCS, int8_t BUSY, SPIClass *spi)
111112
: Adafruit_GFX(width, height), sram(SRCS) {
112113
_cs_pin = CS;
113114
_reset_pin = RST;
114115
_dc_pin = DC;
115116
_busy_pin = BUSY;
117+
_spi = spi;
116118
if (SRCS >= 0) {
117119
use_sram = true;
118120
} else {
@@ -180,9 +182,9 @@ void Adafruit_EPD::begin(bool reset) {
180182
mosipinmask = digitalPinToBitMask(_sid_pin);
181183
#endif
182184
} else {
183-
SPI.begin();
185+
_spi->begin();
184186
#ifndef SPI_HAS_TRANSACTION
185-
SPI.setClockDivider(4);
187+
_spi->setClockDivider(4);
186188
#endif
187189
}
188190

@@ -579,11 +581,11 @@ uint8_t Adafruit_EPD::SPItransfer(uint8_t d) {
579581
if (singleByteTxns) {
580582
uint8_t b;
581583
csLow();
582-
b = SPI.transfer(d);
584+
b = _spi->transfer(d);
583585
csHigh();
584586
return b;
585587
} else
586-
return SPI.transfer(d);
588+
return _spi->transfer(d);
587589
} else {
588590
// TODO: return read data for software SPI
589591
for (uint8_t bit = 0x80; bit; bit >>= 1) {
@@ -614,7 +616,7 @@ uint8_t Adafruit_EPD::SPItransfer(uint8_t d) {
614616
/**************************************************************************/
615617
void Adafruit_EPD::csHigh() {
616618
#ifdef SPI_HAS_TRANSACTION
617-
SPI.endTransaction();
619+
_spi->endTransaction();
618620
_isInTransaction = false;
619621
#endif
620622
#ifdef HAVE_PORTREG
@@ -632,7 +634,7 @@ void Adafruit_EPD::csHigh() {
632634
void Adafruit_EPD::csLow() {
633635
#ifdef SPI_HAS_TRANSACTION
634636
if (!_isInTransaction) {
635-
SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));
637+
_spi->beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));
636638
_isInTransaction = true;
637639
}
638640
#endif

Adafruit_EPD.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ class Adafruit_EPD : public Adafruit_GFX {
8888
int8_t RST, int8_t CS, int8_t SRCS, int8_t MISO,
8989
int8_t BUSY = -1);
9090
Adafruit_EPD(int width, int height, int8_t DC, int8_t RST, int8_t CS,
91-
int8_t SRCS, int8_t BUSY = -1);
91+
int8_t SRCS, int8_t BUSY = -1, SPIClass *spi = &SPI);
9292
~Adafruit_EPD();
9393

9494
void begin(bool reset = true);
@@ -148,6 +148,7 @@ class Adafruit_EPD : public Adafruit_GFX {
148148
_reset_pin, ///< reset pin
149149
_cs_pin, ///< chip select pin
150150
_busy_pin; ///< busy pin
151+
SPIClass *_spi = NULL; ///< SPI object
151152
static bool _isInTransaction; ///< true if SPI bus is in trasnfer state
152153
bool singleByteTxns; ///< if true CS will go high after every data byte
153154
///< transferred

Adafruit_MCPSRAM.cpp

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,12 @@ Adafruit_MCPSRAM::Adafruit_MCPSRAM(int8_t mosi, int8_t miso, int8_t sck,
2626
/*!
2727
@brief Class constructor when using hardware SPI
2828
@param cs chip select pin
29+
@param spi the SPI bus to use
2930
*/
3031
/**************************************************************************/
31-
Adafruit_MCPSRAM::Adafruit_MCPSRAM(int8_t cs) {
32+
Adafruit_MCPSRAM::Adafruit_MCPSRAM(int8_t cs, SPIClass *spi) {
3233
_cs = cs;
34+
_spi = spi;
3335
hwSPI = true;
3436
}
3537

@@ -60,17 +62,17 @@ void Adafruit_MCPSRAM::begin() {
6062
#endif
6163
}
6264
if (hwSPI) {
63-
SPI.begin();
65+
_spi->begin();
6466
#ifndef SPI_HAS_TRANSACTION
65-
SPI.setClockDivider(4);
67+
_spi->setClockDivider(4);
6668
#endif
6769
}
6870

6971
csLow();
7072

7173
for (int i = 0; i < 3; i++) {
7274
if (hwSPI) {
73-
(void)SPI.transfer(0xFF);
75+
(void)_spi->transfer(0xFF);
7476
} else {
7577
for (uint8_t bit = 0x80; bit; bit >>= 1) {
7678
#ifdef HAVE_PORTREG
@@ -119,7 +121,7 @@ void Adafruit_MCPSRAM::write(uint16_t addr, uint8_t *buf, uint16_t num,
119121
uint8_t d = cmdbuf[i];
120122

121123
if (hwSPI) {
122-
(void)SPI.transfer(d);
124+
(void)_spi->transfer(d);
123125
} else {
124126
for (uint8_t bit = 0x80; bit; bit >>= 1) {
125127
#ifdef HAVE_PORTREG
@@ -149,7 +151,7 @@ void Adafruit_MCPSRAM::write(uint16_t addr, uint8_t *buf, uint16_t num,
149151
uint8_t d = buf[i];
150152

151153
if (hwSPI) {
152-
(void)SPI.transfer(d);
154+
(void)_spi->transfer(d);
153155
} else {
154156
for (uint8_t bit = 0x80; bit; bit >>= 1) {
155157
#ifdef HAVE_PORTREG
@@ -197,7 +199,7 @@ void Adafruit_MCPSRAM::read(uint16_t addr, uint8_t *buf, uint16_t num,
197199
uint8_t d = cmdbuf[i];
198200

199201
if (hwSPI) {
200-
(void)SPI.transfer(d);
202+
(void)_spi->transfer(d);
201203
} else {
202204
for (uint8_t bit = 0x80; bit; bit >>= 1) {
203205
#ifdef HAVE_PORTREG
@@ -225,7 +227,7 @@ void Adafruit_MCPSRAM::read(uint16_t addr, uint8_t *buf, uint16_t num,
225227
for (int i = 0; i < num; i++) {
226228

227229
if (hwSPI) {
228-
buf[i] = SPI.transfer(0x00);
230+
buf[i] = _spi->transfer(0x00);
229231
} else {
230232
for (uint8_t bit = 0x80; bit; bit >>= 1) {
231233
#ifdef HAVE_PORTREG
@@ -320,7 +322,7 @@ void Adafruit_MCPSRAM::erase(uint16_t addr, uint16_t length, uint8_t val) {
320322
uint8_t d = cmdbuf[i];
321323

322324
if (hwSPI) {
323-
(void)SPI.transfer(d);
325+
(void)_spi->transfer(d);
324326
} else {
325327
for (uint8_t bit = 0x80; bit; bit >>= 1) {
326328
#ifdef HAVE_PORTREG
@@ -348,7 +350,7 @@ void Adafruit_MCPSRAM::erase(uint16_t addr, uint16_t length, uint8_t val) {
348350
uint8_t d = val;
349351

350352
if (hwSPI) {
351-
(void)SPI.transfer(d);
353+
(void)_spi->transfer(d);
352354
} else {
353355
for (uint8_t bit = 0x80; bit; bit >>= 1) {
354356
#ifdef HAVE_PORTREG
@@ -380,7 +382,7 @@ void Adafruit_MCPSRAM::erase(uint16_t addr, uint16_t length, uint8_t val) {
380382
/**************************************************************************/
381383
void Adafruit_MCPSRAM::csHigh() {
382384
#ifdef SPI_HAS_TRANSACTION
383-
SPI.endTransaction();
385+
_spi->endTransaction();
384386
#endif
385387
#ifdef HAVE_PORTREG
386388
*csport |= cspinmask;
@@ -396,7 +398,7 @@ void Adafruit_MCPSRAM::csHigh() {
396398
/**************************************************************************/
397399
void Adafruit_MCPSRAM::csLow() {
398400
#ifdef SPI_HAS_TRANSACTION
399-
SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));
401+
_spi->beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));
400402
#endif
401403
#ifdef HAVE_PORTREG
402404
*csport &= ~cspinmask;

Adafruit_MCPSRAM.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include <Arduino.h>
2+
#include <SPI.h>
23

34
#define MCPSRAM_READ 0x03 ///< read command
45
#define MCPSRAM_WRITE 0x02 ///< write command
@@ -15,7 +16,7 @@
1516
class Adafruit_MCPSRAM {
1617
public:
1718
Adafruit_MCPSRAM(int8_t mosi, int8_t miso, int8_t sck, int8_t cs);
18-
Adafruit_MCPSRAM(int8_t cs);
19+
Adafruit_MCPSRAM(int8_t cs, SPIClass *spi = &SPI);
1920
~Adafruit_MCPSRAM() {}
2021

2122
void begin();
@@ -42,4 +43,5 @@ class Adafruit_MCPSRAM {
4243
PortMask mosipinmask, clkpinmask, cspinmask, misopinmask;
4344
#endif
4445
int8_t _cs, _mosi, _miso, _sck;
46+
SPIClass *_spi = NULL;
4547
};

0 commit comments

Comments
 (0)