From c7866bfce4197bc5ad4c4c4a9c9a89e5a0e41129 Mon Sep 17 00:00:00 2001
From: Cristian Maglie <c.maglie@arduino.cc>
Date: Thu, 11 Sep 2014 14:07:16 +0200
Subject: [PATCH]  Added SPI block-transfer method

---
 libraries/SPI/SPI.h | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/libraries/SPI/SPI.h b/libraries/SPI/SPI.h
index b40c84cf..333a2f4e 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
-- 
GitLab