Skip to content

Commit 574d1b5

Browse files
author
fpr
committed
Add new function in SPI class required by SPBTLE library
Signed-off-by: fpr <[email protected]>
1 parent 949ffce commit 574d1b5

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

libraries/SPI/src/SPI.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,31 @@ void SPIClass::transfer(uint8_t _pin, void *_buf, size_t _count, SPITransferMode
318318
digitalWrite(_pin, HIGH);
319319
}
320320

321+
void SPIClass::transfer(byte _pin, void *_bufout, void *_bufin, size_t _count, SPITransferMode _mode)
322+
{
323+
if ((_count == 0) || (_bufout == NULL) || (_bufin == NULL) || (_pin > NUM_DIGITAL_PINS))
324+
return;
325+
326+
if(_pin != _CSpin) {
327+
uint8_t idx = pinIdx(_pin, GET_IDX);
328+
if(idx == NB_SPI_SETTINGS) {
329+
return;
330+
}
331+
spi_init(&_spi, spiSettings[idx].clk,
332+
spiSettings[idx].dMode,
333+
spiSettings[idx].msb);
334+
_CSpin = _pin;
335+
}
336+
337+
if((_pin != CS_PIN_CONTROLLED_BY_USER) && (_spi.pin_ssel == NC))
338+
digitalWrite(_pin, LOW);
339+
340+
spi_transfer(&_spi, ((uint8_t*)_bufout), ((uint8_t*)_bufin), _count, SPI_TRANSFER_TIMEOUT);
341+
342+
if((_pin != CS_PIN_CONTROLLED_BY_USER) && (_mode == SPI_LAST) && (_spi.pin_ssel == NC))
343+
digitalWrite(_pin, HIGH);
344+
}
345+
321346
void SPIClass::attachInterrupt(void) {
322347
// Should be enableInterrupt()
323348
}

libraries/SPI/src/SPI.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ class SPIClass {
114114
byte transfer(uint8_t pin, uint8_t _data, SPITransferMode _mode = SPI_LAST);
115115
uint16_t transfer16(uint8_t pin, uint16_t _data, SPITransferMode _mode = SPI_LAST);
116116
void transfer(uint8_t pin, void *_buf, size_t _count, SPITransferMode _mode = SPI_LAST);
117+
void transfer(byte _pin, void *_bufout, void *_bufin, size_t _count, SPITransferMode _mode = SPI_LAST);
117118

118119
// Transfer functions when user controls himself the CS pin.
119120
byte transfer(uint8_t _data, SPITransferMode _mode = SPI_LAST)
@@ -131,6 +132,11 @@ class SPIClass {
131132
transfer(CS_PIN_CONTROLLED_BY_USER, _buf, _count, _mode);
132133
}
133134

135+
void transfer(void *_bufout, void *_bufin, size_t _count, SPITransferMode _mode = SPI_LAST)
136+
{
137+
transfer(CS_PIN_CONTROLLED_BY_USER, _bufout, _bufin, _count, _mode);
138+
}
139+
134140
// Transaction Functions
135141
void usingInterrupt(uint8_t interruptNumber);
136142

0 commit comments

Comments
 (0)