@@ -318,6 +318,31 @@ void SPIClass::transfer(uint8_t _pin, void *_buf, size_t _count, SPITransferMode
318318digitalWrite (_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+
321346void SPIClass::attachInterrupt (void ) {
322347// Should be enableInterrupt()
323348}