@@ -115,6 +115,7 @@ void SPIClass::beginTransaction(uint8_t _pin, SPISettings settings)
115115 spiSettings[idx].clk = settings.clk ;
116116 spiSettings[idx].dMode = settings.dMode ;
117117 spiSettings[idx].bOrder = settings.bOrder ;
118+ spiSettings[idx].noReceive = settings.noReceive ;
118119
119120 if ((_pin != CS_PIN_CONTROLLED_BY_USER) && (_spi.pin_ssel == NC)) {
120121 pinMode (_pin, OUTPUT);
@@ -262,9 +263,8 @@ byte SPIClass::transfer(uint8_t _pin, uint8_t data, SPITransferMode _mode)
262263 if (_pin > NUM_DIGITAL_PINS) {
263264 return rx_buffer;
264265 }
265-
266+ uint8_t idx = pinIdx (_pin, GET_IDX);
266267 if (_pin != _CSPinConfig) {
267- uint8_t idx = pinIdx (_pin, GET_IDX);
268268 if (idx >= NB_SPI_SETTINGS) {
269269 return rx_buffer;
270270 }
@@ -278,7 +278,7 @@ byte SPIClass::transfer(uint8_t _pin, uint8_t data, SPITransferMode _mode)
278278 digitalWrite (_pin, LOW);
279279 }
280280
281- spi_transfer (&_spi, &data, &rx_buffer, sizeof (uint8_t ), SPI_TRANSFER_TIMEOUT);
281+ spi_transfer (&_spi, &data, &rx_buffer, sizeof (uint8_t ), SPI_TRANSFER_TIMEOUT, spiSettings[idx]. noReceive );
282282
283283 if ((_pin != CS_PIN_CONTROLLED_BY_USER) && (_mode == SPI_LAST) && (_spi.pin_ssel == NC)) {
284284 digitalWrite (_pin, HIGH);
@@ -330,7 +330,8 @@ uint16_t SPIClass::transfer16(uint8_t _pin, uint16_t data, SPITransferMode _mode
330330 digitalWrite (_pin, LOW);
331331 }
332332
333- spi_transfer (&_spi, (uint8_t *)&data, (uint8_t *)&rx_buffer, sizeof (uint16_t ), SPI_TRANSFER_TIMEOUT);
333+ spi_transfer (&_spi, (uint8_t *)&data, (uint8_t *)&rx_buffer, sizeof (uint16_t ),
334+ SPI_TRANSFER_TIMEOUT, spiSettings[idx].noReceive );
334335
335336 if ((_pin != CS_PIN_CONTROLLED_BY_USER) && (_mode == SPI_LAST) && (_spi.pin_ssel == NC)) {
336337 digitalWrite (_pin, HIGH);
@@ -363,9 +364,8 @@ void SPIClass::transfer(uint8_t _pin, void *_buf, size_t _count, SPITransferMode
363364 if ((_count == 0 ) || (_buf == NULL ) || (_pin > NUM_DIGITAL_PINS)) {
364365 return ;
365366 }
366-
367+ uint8_t idx = pinIdx (_pin, GET_IDX);
367368 if (_pin != _CSPinConfig) {
368- uint8_t idx = pinIdx (_pin, GET_IDX);
369369 if (idx >= NB_SPI_SETTINGS) {
370370 return ;
371371 }
@@ -379,7 +379,8 @@ void SPIClass::transfer(uint8_t _pin, void *_buf, size_t _count, SPITransferMode
379379 digitalWrite (_pin, LOW);
380380 }
381381
382- spi_transfer (&_spi, ((uint8_t *)_buf), ((uint8_t *)_buf), _count, SPI_TRANSFER_TIMEOUT);
382+ spi_transfer (&_spi, ((uint8_t *)_buf), ((uint8_t *)_buf), _count,
383+ SPI_TRANSFER_TIMEOUT, spiSettings[idx].noReceive );
383384
384385 if ((_pin != CS_PIN_CONTROLLED_BY_USER) && (_mode == SPI_LAST) && (_spi.pin_ssel == NC)) {
385386 digitalWrite (_pin, HIGH);
@@ -406,9 +407,8 @@ void SPIClass::transfer(byte _pin, void *_bufout, void *_bufin, size_t _count, S
406407 if ((_count == 0 ) || (_bufout == NULL ) || (_bufin == NULL ) || (_pin > NUM_DIGITAL_PINS)) {
407408 return ;
408409 }
409-
410+ uint8_t idx = pinIdx (_pin, GET_IDX);
410411 if (_pin != _CSPinConfig) {
411- uint8_t idx = pinIdx (_pin, GET_IDX);
412412 if (idx >= NB_SPI_SETTINGS) {
413413 return ;
414414 }
@@ -422,7 +422,8 @@ void SPIClass::transfer(byte _pin, void *_bufout, void *_bufin, size_t _count, S
422422 digitalWrite (_pin, LOW);
423423 }
424424
425- spi_transfer (&_spi, ((uint8_t *)_bufout), ((uint8_t *)_bufin), _count, SPI_TRANSFER_TIMEOUT);
425+ spi_transfer (&_spi, ((uint8_t *)_bufout), ((uint8_t *)_bufin), _count,
426+ SPI_TRANSFER_TIMEOUT, spiSettings[idx].noReceive );
426427
427428 if ((_pin != CS_PIN_CONTROLLED_BY_USER) && (_mode == SPI_LAST) && (_spi.pin_ssel == NC)) {
428429 digitalWrite (_pin, HIGH);
0 commit comments