Skip to content

Commit b7b125a

Browse files
author
fpr
committed
Add new functions in SPI class required by SPBTLE library
Signed-off-by: fpr <fabien.perroquin@wi6labs.com>
1 parent 7310e4b commit b7b125a

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

libraries/SPI/SPI.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,25 @@ void SPIClass::transfer(uint8_t _pin, void *_buf, size_t _count, SPITransferMode
258258
digitalWrite(_pin, HIGH);
259259
}
260260

261+
void SPIClass::transfer(byte _pin, void *_bufout, void *_bufin, size_t _count, SPITransferMode _mode)
262+
{
263+
if ((_count == 0) || (_pin > SPI_CHANNELS_NUM))
264+
return;
265+
266+
if(_pin != g_active_id) {
267+
spi_init(&_spi, spiSettings[_pin].clk, spiSettings[_pin].dMode, spiSettings[_pin].msb);
268+
g_active_id = _pin;
269+
}
270+
271+
if((_pin != BOARD_SPI_OWN_SS) && (_spi.pin_ssel == NC))
272+
digitalWrite(_pin, LOW);
273+
274+
spi_transfer(&_spi, ((uint8_t*)_bufout), ((uint8_t*)_bufin), _count, 10000);
275+
276+
if((_pin != BOARD_SPI_OWN_SS) && (_mode == SPI_LAST) && (_spi.pin_ssel == NC))
277+
digitalWrite(_pin, HIGH);
278+
}
279+
261280
void SPIClass::attachInterrupt(void) {
262281
// Should be enableInterrupt()
263282
}

libraries/SPI/SPI.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ class SPIClass {
108108
byte transfer(byte _pin, uint8_t _data, SPITransferMode _mode = SPI_LAST);
109109
uint16_t transfer16(byte _pin, uint16_t _data, SPITransferMode _mode = SPI_LAST);
110110
void transfer(byte _pin, void *_buf, size_t _count, SPITransferMode _mode = SPI_LAST);
111+
void transfer(byte _pin, void *_bufout, void *_bufin, size_t _count, SPITransferMode _mode = SPI_LAST);
111112

112113

113114
// Transfer functions on default pin BOARD_SPI_DEFAULT_SS
@@ -126,6 +127,11 @@ class SPIClass {
126127
transfer(BOARD_SPI_OWN_SS, _buf, _count, _mode);
127128
}
128129

130+
void transfer(void *_bufout, void *_bufin, size_t _count, SPITransferMode _mode = SPI_LAST)
131+
{
132+
transfer(BOARD_SPI_OWN_SS, _bufout, _bufin, _count, _mode);
133+
}
134+
129135
// Transaction Functions
130136
void usingInterrupt(uint8_t interruptNumber);
131137

0 commit comments

Comments
 (0)