From 28cc900343f88dd562a57024d9bba4601d2113df Mon Sep 17 00:00:00 2001 From: Robin Giese Date: Sun, 23 Aug 2020 21:18:19 -0700 Subject: [PATCH 1/4] Help library compile for Spark/Particle --- Adafruit_SPIDevice.cpp | 11 ++++++++++- Adafruit_SPIDevice.h | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Adafruit_SPIDevice.cpp b/Adafruit_SPIDevice.cpp index 50eece8..353f286 100644 --- a/Adafruit_SPIDevice.cpp +++ b/Adafruit_SPIDevice.cpp @@ -112,7 +112,16 @@ bool Adafruit_SPIDevice::begin(void) { void Adafruit_SPIDevice::transfer(uint8_t *buffer, size_t len) { if (_spi) { // hardware SPI is easy - _spi->transfer(buffer, len); + #ifdef SPARK + // Spark uses asynchronous DMA for multi-byte transfers; + // just use the single-byte method for sync transfers. + for (size_t i = 0; i < len; i++) { + _spi->transfer(buffer[i]); + } + #else + _spi->transfer(buffer, len); + #endif + return; } diff --git a/Adafruit_SPIDevice.h b/Adafruit_SPIDevice.h index f1ef0cc..764f316 100644 --- a/Adafruit_SPIDevice.h +++ b/Adafruit_SPIDevice.h @@ -5,7 +5,7 @@ // some modern SPI definitions don't have BitOrder enum #if (defined(__AVR__) && !defined(ARDUINO_ARCH_MEGAAVR)) || \ - defined(ESP8266) || defined(TEENSYDUINO) || \ + defined(ESP8266) || defined(TEENSYDUINO) || defined(SPARK) || \ defined(ARDUINO_ARCH_SPRESENSE) || defined(ARDUINO_attinyxy7) || \ defined(ARDUINO_attinyxy6) || defined(ARDUINO_attinyxy4) || \ defined(ARDUINO_attinyxy2) || defined(ARDUINO_AVR_ATmega4809) || \ From 2fce4a24f27c3138ff77c782acbd11ef0f95e678 Mon Sep 17 00:00:00 2001 From: Robin Giese Date: Sun, 23 Aug 2020 21:19:05 -0700 Subject: [PATCH 2/4] Version bump --- library.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library.properties b/library.properties index a6f5bd9..80c0434 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=Adafruit BusIO -version=1.4.1 +version=1.4.2 author=Adafruit maintainer=Adafruit sentence=This is a library for abstracting away UART, I2C and SPI interfacing From b8da0bd043316c223bbe37bbb224a922036ce5f3 Mon Sep 17 00:00:00 2001 From: Robin Giese Date: Sun, 23 Aug 2020 21:44:10 -0700 Subject: [PATCH 3/4] Formatting fixes --- Adafruit_SPIDevice.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Adafruit_SPIDevice.cpp b/Adafruit_SPIDevice.cpp index 353f286..081c1c1 100644 --- a/Adafruit_SPIDevice.cpp +++ b/Adafruit_SPIDevice.cpp @@ -112,15 +112,16 @@ bool Adafruit_SPIDevice::begin(void) { void Adafruit_SPIDevice::transfer(uint8_t *buffer, size_t len) { if (_spi) { // hardware SPI is easy - #ifdef SPARK - // Spark uses asynchronous DMA for multi-byte transfers; - // just use the single-byte method for sync transfers. - for (size_t i = 0; i < len; i++) { - _spi->transfer(buffer[i]); - } - #else - _spi->transfer(buffer, len); - #endif + +#ifdef SPARK + // Spark uses asynchronous DMA for multi-byte transfers; + // just use the single-byte method for sync transfers. + for (size_t i = 0; i < len; i++) { + _spi->transfer(buffer[i]); + } +#else + _spi->transfer(buffer, len); +#endif return; } From dacc017bb67adeeabfe07e065a8b3b6ec2a286a7 Mon Sep 17 00:00:00 2001 From: Robin Giese Date: Mon, 24 Aug 2020 09:32:20 -0700 Subject: [PATCH 4/4] Use blocking DMA for SPI transfer --- Adafruit_SPIDevice.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Adafruit_SPIDevice.cpp b/Adafruit_SPIDevice.cpp index 081c1c1..d5ecdc9 100644 --- a/Adafruit_SPIDevice.cpp +++ b/Adafruit_SPIDevice.cpp @@ -114,11 +114,7 @@ void Adafruit_SPIDevice::transfer(uint8_t *buffer, size_t len) { // hardware SPI is easy #ifdef SPARK - // Spark uses asynchronous DMA for multi-byte transfers; - // just use the single-byte method for sync transfers. - for (size_t i = 0; i < len; i++) { - _spi->transfer(buffer[i]); - } + _spi->transfer(buffer, buffer, len, NULL); #else _spi->transfer(buffer, len); #endif