Add a hack to work around the differences between the Adafruit SAMD core and the official Arduino SAMD core.

This commit is contained in:
Monroe Williams 2022-01-21 18:12:50 -08:00
parent 7f66a34b9c
commit 67bd6e7db5
1 changed files with 16 additions and 2 deletions

View File

@ -310,7 +310,14 @@ bool Adafruit_SPIDevice::write(uint8_t *buffer, size_t len,
_spi->transferBytes(buffer, nullptr, len); _spi->transferBytes(buffer, nullptr, len);
} }
} else } else
#elif defined(ARDUINO_ARCH_SAMD) #elif defined(ARDUINO_ARCH_SAMD) && defined(_ADAFRUIT_ZERODMA_H_)
// The variant of transfer() used below currently only exists in the Adafruit core.
// It causes a build failure when building against the main Arduino SAMD core.
// Unfortunately there doesn't seem to be a supported #define that this code
// can use to tell which core it's building against. This hack
// (checking for the include guard that gets defined when the Adafruit core's
// SPI.h includes Adafruit_ZeroDMA.h) works for now, but it should be improved
// when possible.
if (_spi) { if (_spi) {
if (prefix_len > 0) { if (prefix_len > 0) {
_spi->transfer(prefix_buffer, nullptr, prefix_len); _spi->transfer(prefix_buffer, nullptr, prefix_len);
@ -423,7 +430,14 @@ bool Adafruit_SPIDevice::write_then_read(uint8_t *write_buffer,
_spi->transferBytes(write_buffer, nullptr, write_len); _spi->transferBytes(write_buffer, nullptr, write_len);
} }
} else } else
#elif defined(ARDUINO_ARCH_SAMD) #elif defined(ARDUINO_ARCH_SAMD) && defined(_ADAFRUIT_ZERODMA_H_)
// The variant of transfer() used below currently only exists in the Adafruit core.
// It causes a build failure when building against the main Arduino SAMD core.
// Unfortunately there doesn't seem to be a supported #define that this code
// can use to tell which core it's building against. This hack
// (checking for the include guard that gets defined when the Adafruit core's
// SPI.h includes Adafruit_ZeroDMA.h) works for now, but it should be improved
// when possible.
if (_spi) { if (_spi) {
if (write_len > 0) { if (write_len > 0) {
_spi->transfer(write_buffer, nullptr, write_len); _spi->transfer(write_buffer, nullptr, write_len);