11#include " Adafruit_SPIDevice.h"
22
3- #if !defined(SPI_INTERFACES_COUNT) || \
4- (defined (SPI_INTERFACES_COUNT) && (SPI_INTERFACES_COUNT > 0 ))
5-
63// #define DEBUG_SERIAL Serial
74
85/* !
1714Adafruit_SPIDevice::Adafruit_SPIDevice (int8_t cspin, uint32_t freq,
1815 BusIOBitOrder dataOrder,
1916 uint8_t dataMode, SPIClass *theSPI) {
17+ #ifdef BUSIO_HAS_HW_SPI
2018 _cs = cspin;
2119 _sck = _mosi = _miso = -1 ;
2220 _spi = theSPI;
@@ -25,6 +23,14 @@ Adafruit_SPIDevice::Adafruit_SPIDevice(int8_t cspin, uint32_t freq,
2523 _freq = freq;
2624 _dataOrder = dataOrder;
2725 _dataMode = dataMode;
26+ #else
27+ // unused, but needed to suppress compiler warns
28+ (void )cspin;
29+ (void )freq;
30+ (void )dataOrder;
31+ (void )dataMode;
32+ (void )theSPI;
33+ #endif
2834}
2935
3036/* !
@@ -68,14 +74,15 @@ Adafruit_SPIDevice::Adafruit_SPIDevice(int8_t cspin, int8_t sckpin,
6874 _dataOrder = dataOrder;
6975 _dataMode = dataMode;
7076 _begun = false ;
71- _spiSetting = new SPISettings (freq, dataOrder, dataMode);
72- _spi = nullptr ;
7377}
7478
7579/* !
7680 * @brief Release memory allocated in constructors
7781 */
78- Adafruit_SPIDevice::~Adafruit_SPIDevice () { delete _spiSetting; }
82+ Adafruit_SPIDevice::~Adafruit_SPIDevice () {
83+ if (_spiSetting)
84+ delete _spiSetting;
85+ }
7986
8087/* !
8188 * @brief Initializes SPI bus and sets CS pin high
@@ -89,7 +96,9 @@ bool Adafruit_SPIDevice::begin(void) {
8996 }
9097
9198 if (_spi) { // hardware SPI
99+ #ifdef BUSIO_HAS_HW_SPI
92100 _spi->begin ();
101+ #endif
93102 } else {
94103 pinMode (_sck, OUTPUT);
95104
@@ -120,9 +129,11 @@ bool Adafruit_SPIDevice::begin(void) {
120129 * @param len The number of bytes to transfer
121130 */
122131void Adafruit_SPIDevice::transfer (uint8_t *buffer, size_t len) {
132+ //
133+ // HARDWARE SPI
134+ //
123135 if (_spi) {
124- // hardware SPI is easy
125-
136+ #ifdef BUSIO_HAS_HW_SPI
126137#if defined(SPARK)
127138 _spi->transfer (buffer, buffer, len, nullptr );
128139#elif defined(STM32)
@@ -133,8 +144,12 @@ void Adafruit_SPIDevice::transfer(uint8_t *buffer, size_t len) {
133144 _spi->transfer (buffer, len);
134145#endif
135146 return ;
147+ #endif
136148 }
137149
150+ //
151+ // SOFTWARE SPI
152+ //
138153 uint8_t startbit;
139154 if (_dataOrder == SPI_BITORDER_LSBFIRST) {
140155 startbit = 0x1 ;
@@ -145,9 +160,7 @@ void Adafruit_SPIDevice::transfer(uint8_t *buffer, size_t len) {
145160 bool towrite, lastmosi = !(buffer[0 ] & startbit);
146161 uint8_t bitdelay_us = (1000000 / _freq) / 2 ;
147162
148- // for softSPI we'll do it by hand
149163 for (size_t i = 0 ; i < len; i++) {
150- // software SPI
151164 uint8_t reply = 0 ;
152165 uint8_t send = buffer[i];
153166
@@ -269,7 +282,9 @@ uint8_t Adafruit_SPIDevice::transfer(uint8_t send) {
269282 */
270283void Adafruit_SPIDevice::beginTransaction (void ) {
271284 if (_spi) {
285+ #ifdef BUSIO_HAS_HW_SPI
272286 _spi->beginTransaction (*_spiSetting);
287+ #endif
273288 }
274289}
275290
@@ -278,7 +293,9 @@ void Adafruit_SPIDevice::beginTransaction(void) {
278293 */
279294void Adafruit_SPIDevice::endTransaction (void ) {
280295 if (_spi) {
296+ #ifdef BUSIO_HAS_HW_SPI
281297 _spi->endTransaction ();
298+ #endif
282299 }
283300}
284301
@@ -489,5 +506,3 @@ bool Adafruit_SPIDevice::write_and_read(uint8_t *buffer, size_t len) {
489506
490507 return true ;
491508}
492-
493- #endif // SPI exists
0 commit comments