Skip to content

Commit 000db0c

Browse files
committed
SPI: allow inheritance from SPIClass
1 parent 39f483e commit 000db0c

File tree

2 files changed

+30
-30
lines changed

2 files changed

+30
-30
lines changed

libraries/SPI/SPI.cpp

+23-23
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ static inline SercomSpiClockMode getDataMode(SPISettings& settings) {
4848
}
4949
}
5050

51-
SPIClass::SPIClass(SERCOM *p_sercom, uint8_t uc_pinMISO, uint8_t uc_pinSCK, uint8_t uc_pinMOSI, SercomSpiTXPad PadTx, SercomRXPad PadRx)
51+
SPIClassSAMD::SPIClassSAMD(SERCOM *p_sercom, uint8_t uc_pinMISO, uint8_t uc_pinSCK, uint8_t uc_pinMOSI, SercomSpiTXPad PadTx, SercomRXPad PadRx)
5252
: settings(0, MSBFIRST, SPI_MODE0)
5353
{
5454
initialized = false;
@@ -65,7 +65,7 @@ SPIClass::SPIClass(SERCOM *p_sercom, uint8_t uc_pinMISO, uint8_t uc_pinSCK, uint
6565
_padRx=PadRx;
6666
}
6767

68-
void SPIClass::begin()
68+
void SPIClassSAMD::begin()
6969
{
7070
init();
7171

@@ -77,7 +77,7 @@ void SPIClass::begin()
7777
config(DEFAULT_SPI_SETTINGS);
7878
}
7979

80-
void SPIClass::init()
80+
void SPIClassSAMD::init()
8181
{
8282
if (initialized)
8383
return;
@@ -87,7 +87,7 @@ void SPIClass::init()
8787
initialized = true;
8888
}
8989

90-
void SPIClass::config(SPISettings settings)
90+
void SPIClassSAMD::config(SPISettings settings)
9191
{
9292
if (this->settings != settings) {
9393
this->settings = settings;
@@ -105,7 +105,7 @@ void SPIClass::config(SPISettings settings)
105105
}
106106
}
107107

108-
void SPIClass::end()
108+
void SPIClassSAMD::end()
109109
{
110110
_p_sercom->resetSPI();
111111
initialized = false;
@@ -121,7 +121,7 @@ static inline unsigned char __interruptsStatus(void)
121121
}
122122
#endif
123123

124-
void SPIClass::usingInterrupt(int interruptNumber)
124+
void SPIClassSAMD::usingInterrupt(int interruptNumber)
125125
{
126126
if ((interruptNumber == NOT_AN_INTERRUPT) || (interruptNumber == EXTERNAL_INT_NMI))
127127
return;
@@ -141,7 +141,7 @@ void SPIClass::usingInterrupt(int interruptNumber)
141141
interrupts();
142142
}
143143

144-
void SPIClass::notUsingInterrupt(int interruptNumber)
144+
void SPIClassSAMD::notUsingInterrupt(int interruptNumber)
145145
{
146146
if ((interruptNumber == NOT_AN_INTERRUPT) || (interruptNumber == EXTERNAL_INT_NMI))
147147
return;
@@ -161,7 +161,7 @@ void SPIClass::notUsingInterrupt(int interruptNumber)
161161
interrupts();
162162
}
163163

164-
void SPIClass::beginTransaction(SPISettings settings)
164+
void SPIClassSAMD::beginTransaction(SPISettings settings)
165165
{
166166
if (interruptMode != SPI_IMODE_NONE)
167167
{
@@ -177,7 +177,7 @@ void SPIClass::beginTransaction(SPISettings settings)
177177
config(settings);
178178
}
179179

180-
void SPIClass::endTransaction(void)
180+
void SPIClassSAMD::endTransaction(void)
181181
{
182182
if (interruptMode != SPI_IMODE_NONE)
183183
{
@@ -191,7 +191,7 @@ void SPIClass::endTransaction(void)
191191
}
192192
}
193193

194-
void SPIClass::setBitOrder(BitOrder order)
194+
void SPIClassSAMD::setBitOrder(BitOrder order)
195195
{
196196
if (order == LSBFIRST) {
197197
_p_sercom->setDataOrderSPI(LSB_FIRST);
@@ -200,7 +200,7 @@ void SPIClass::setBitOrder(BitOrder order)
200200
}
201201
}
202202

203-
void SPIClass::setDataMode(uint8_t mode)
203+
void SPIClassSAMD::setDataMode(uint8_t mode)
204204
{
205205
switch (mode)
206206
{
@@ -225,7 +225,7 @@ void SPIClass::setDataMode(uint8_t mode)
225225
}
226226
}
227227

228-
void SPIClass::setClockDivider(uint8_t div)
228+
void SPIClassSAMD::setClockDivider(uint8_t div)
229229
{
230230
if (div < SPI_MIN_CLOCK_DIVIDER) {
231231
_p_sercom->setBaudrateSPI(SPI_MIN_CLOCK_DIVIDER);
@@ -234,12 +234,12 @@ void SPIClass::setClockDivider(uint8_t div)
234234
}
235235
}
236236

237-
byte SPIClass::transfer(uint8_t data)
237+
byte SPIClassSAMD::transfer(uint8_t data)
238238
{
239239
return _p_sercom->transferDataSPI(data);
240240
}
241241

242-
uint16_t SPIClass::transfer16(uint16_t data) {
242+
uint16_t SPIClassSAMD::transfer16(uint16_t data) {
243243
union { uint16_t val; struct { uint8_t lsb; uint8_t msb; }; } t;
244244

245245
t.val = data;
@@ -255,7 +255,7 @@ uint16_t SPIClass::transfer16(uint16_t data) {
255255
return t.val;
256256
}
257257

258-
void SPIClass::transfer(void *buf, size_t count)
258+
void SPIClassSAMD::transfer(void *buf, size_t count)
259259
{
260260
uint8_t *buffer = reinterpret_cast<uint8_t *>(buf);
261261
for (size_t i=0; i<count; i++) {
@@ -264,11 +264,11 @@ void SPIClass::transfer(void *buf, size_t count)
264264
}
265265
}
266266

267-
void SPIClass::attachInterrupt() {
267+
void SPIClassSAMD::attachInterrupt() {
268268
// Should be enableInterrupt()
269269
}
270270

271-
void SPIClass::detachInterrupt() {
271+
void SPIClassSAMD::detachInterrupt() {
272272
// Should be disableInterrupt()
273273
}
274274

@@ -287,21 +287,21 @@ void SPIClass::detachInterrupt() {
287287
#define PAD_SPI_TX SPI_PAD_2_SCK_3
288288
#define PAD_SPI_RX SERCOM_RX_PAD_0
289289
#endif // PERIPH_SPI
290-
SPIClass SPI (&PERIPH_SPI, PIN_SPI_MISO, PIN_SPI_SCK, PIN_SPI_MOSI, PAD_SPI_TX, PAD_SPI_RX);
290+
SPIClassSAMD SPI (&PERIPH_SPI, PIN_SPI_MISO, PIN_SPI_SCK, PIN_SPI_MOSI, PAD_SPI_TX, PAD_SPI_RX);
291291
#endif
292292
#if SPI_INTERFACES_COUNT > 1
293-
SPIClass SPI1(&PERIPH_SPI1, PIN_SPI1_MISO, PIN_SPI1_SCK, PIN_SPI1_MOSI, PAD_SPI1_TX, PAD_SPI1_RX);
293+
SPIClassSAMD SPI1(&PERIPH_SPI1, PIN_SPI1_MISO, PIN_SPI1_SCK, PIN_SPI1_MOSI, PAD_SPI1_TX, PAD_SPI1_RX);
294294
#endif
295295
#if SPI_INTERFACES_COUNT > 2
296-
SPIClass SPI2(&PERIPH_SPI2, PIN_SPI2_MISO, PIN_SPI2_SCK, PIN_SPI2_MOSI, PAD_SPI2_TX, PAD_SPI2_RX);
296+
SPIClassSAMD SPI2(&PERIPH_SPI2, PIN_SPI2_MISO, PIN_SPI2_SCK, PIN_SPI2_MOSI, PAD_SPI2_TX, PAD_SPI2_RX);
297297
#endif
298298
#if SPI_INTERFACES_COUNT > 3
299-
SPIClass SPI3(&PERIPH_SPI3, PIN_SPI3_MISO, PIN_SPI3_SCK, PIN_SPI3_MOSI, PAD_SPI3_TX, PAD_SPI3_RX);
299+
SPIClassSAMD SPI3(&PERIPH_SPI3, PIN_SPI3_MISO, PIN_SPI3_SCK, PIN_SPI3_MOSI, PAD_SPI3_TX, PAD_SPI3_RX);
300300
#endif
301301
#if SPI_INTERFACES_COUNT > 4
302-
SPIClass SPI4(&PERIPH_SPI4, PIN_SPI4_MISO, PIN_SPI4_SCK, PIN_SPI4_MOSI, PAD_SPI4_TX, PAD_SPI4_RX);
302+
SPIClassSAMD SPI4(&PERIPH_SPI4, PIN_SPI4_MISO, PIN_SPI4_SCK, PIN_SPI4_MOSI, PAD_SPI4_TX, PAD_SPI4_RX);
303303
#endif
304304
#if SPI_INTERFACES_COUNT > 5
305-
SPIClass SPI5(&PERIPH_SPI5, PIN_SPI5_MISO, PIN_SPI5_SCK, PIN_SPI5_MOSI, PAD_SPI5_TX, PAD_SPI5_RX);
305+
SPIClassSAMD SPI5(&PERIPH_SPI5, PIN_SPI5_MISO, PIN_SPI5_SCK, PIN_SPI5_MOSI, PAD_SPI5_TX, PAD_SPI5_RX);
306306
#endif
307307

libraries/SPI/SPI.h

+7-7
Original file line numberDiff line numberDiff line change
@@ -87,25 +87,25 @@ class SPIClassSAMD : public arduino::HardwareSPI {
8787
uint32_t interruptMask;
8888
};
8989

90-
#define SPIClass SPIClassSAMD
90+
//#define SPIClass SPIClassSAMD
9191

9292
#if SPI_INTERFACES_COUNT > 0
93-
extern SPIClass SPI;
93+
extern SPIClassSAMD SPI;
9494
#endif
9595
#if SPI_INTERFACES_COUNT > 1
96-
extern SPIClass SPI1;
96+
extern SPIClassSAMD SPI1;
9797
#endif
9898
#if SPI_INTERFACES_COUNT > 2
99-
extern SPIClass SPI2;
99+
extern SPIClassSAMD SPI2;
100100
#endif
101101
#if SPI_INTERFACES_COUNT > 3
102-
extern SPIClass SPI3;
102+
extern SPIClassSAMD SPI3;
103103
#endif
104104
#if SPI_INTERFACES_COUNT > 4
105-
extern SPIClass SPI4;
105+
extern SPIClassSAMD SPI4;
106106
#endif
107107
#if SPI_INTERFACES_COUNT > 5
108-
extern SPIClass SPI5;
108+
extern SPIClassSAMD SPI5;
109109
#endif
110110

111111
// For compatibility with sketches designed for AVR @ 16 MHz

0 commit comments

Comments
 (0)