diff --git a/libraries/SPI/SPI.h b/libraries/SPI/SPI.h index b40c84cfcd86b2b03d2c8187cf9004aebf9aacc8..333a2f4e122dfa9ca84b047cca5363b4bb4eae14 100644 --- a/libraries/SPI/SPI.h +++ b/libraries/SPI/SPI.h @@ -318,6 +318,7 @@ class SPIClass { SPIClass(SERCOM *p_sercom, uint8_t uc_pinMISO, uint8_t uc_pinSCK, uint8_t uc_pinMOSI); byte transfer(uint8_t data); + inline void transfer(void *buf, size_t count); // Transaction Functions void usingInterrupt(uint8_t interruptNumber); @@ -342,6 +343,14 @@ class SPIClass { uint8_t _uc_pinSCK; }; +void SPIClass::transfer(void *buf, size_t count) +{ + // TODO: Optimize for faster block-transfer + uint8_t *buffer = reinterpret_cast<uint8_t *>(buf); + for (size_t i=0; i<count; i++) + buffer[i] = transfer(buffer[i]); +} + #if SPI_INTERFACES_COUNT > 0 extern SPIClass SPI; #endif