From 6b9d0c91b925194ed4941f510673962bde57fb46 Mon Sep 17 00:00:00 2001 From: Felix Rusu Date: Thu, 13 Dec 2018 19:39:20 -0500 Subject: [PATCH] Add SPI_Transactions --- RFM69.cpp | 13 +++++++++++++ RFM69.h | 3 +++ 2 files changed, 16 insertions(+) diff --git a/RFM69.cpp b/RFM69.cpp index 937f090..9faa6ed 100644 --- a/RFM69.cpp +++ b/RFM69.cpp @@ -108,6 +108,11 @@ bool RFM69::initialize(uint8_t freqBand, uint8_t nodeID, uint8_t networkID) digitalWrite(_slaveSelectPin, HIGH); pinMode(_slaveSelectPin, OUTPUT); SPI.begin(); + +#ifdef SPI_HAS_TRANSACTION + _settings = SPISettings(4000000, MSBFIRST, SPI_MODE0); +#endif + unsigned long start = millis(); uint8_t timeout = 50; do writeReg(REG_SYNCVALUE1, 0xAA); while (readReg(REG_SYNCVALUE1) != 0xaa && millis()-start < timeout); @@ -477,6 +482,11 @@ void RFM69::select() { _SPCR = SPCR; _SPSR = SPSR; #endif + +#ifdef SPI_HAS_TRANSACTION + SPI.beginTransaction(_settings); +#endif + // set RFM69 SPI settings SPI.setDataMode(SPI_MODE0); SPI.setBitOrder(MSBFIRST); @@ -491,6 +501,9 @@ void RFM69::select() { // unselect the RFM69 transceiver (set CS high, restore SPI settings) void RFM69::unselect() { digitalWrite(_slaveSelectPin, HIGH); +#ifdef SPI_HAS_TRANSACTION + SPI.endTransaction(); +#endif // restore SPI settings to what they were before talking to RFM69 #if defined (SPCR) && defined (SPSR) SPCR = _SPCR; diff --git a/RFM69.h b/RFM69.h index 66be994..47cf8c5 100644 --- a/RFM69.h +++ b/RFM69.h @@ -224,6 +224,9 @@ class RFM69 { uint8_t _SPCR; uint8_t _SPSR; #endif +#ifdef SPI_HAS_TRANSACTION + SPISettings _settings; +#endif virtual void receiveBegin(); virtual void setMode(uint8_t mode);