From a0ebe7c8ff846e94755c86cda076abc839388132 Mon Sep 17 00:00:00 2001
From: Jin <3448324+jinhong-@users.noreply.github.com>
Date: Thu, 26 Aug 2021 06:33:08 +0800
Subject: [PATCH] =?UTF-8?q?=F0=9F=A9=B9=20Use=20<SoftwareSPI.h>=20in=20MAX?=
 =?UTF-8?q?31865=20lib=20(#22618)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Marlin/src/libs/MAX31865.cpp | 26 +++++++++-----------------
 Marlin/src/libs/MAX31865.h   |  1 +
 2 files changed, 10 insertions(+), 17 deletions(-)

diff --git a/Marlin/src/libs/MAX31865.cpp b/Marlin/src/libs/MAX31865.cpp
index 909adb3807..86c31edee9 100644
--- a/Marlin/src/libs/MAX31865.cpp
+++ b/Marlin/src/libs/MAX31865.cpp
@@ -44,7 +44,7 @@
 //#define MAX31865_DEBUG
 //#define MAX31865_DEBUG_SPI
 
-//TODO: switch to SPIclass/SoftSPI
+#include <SoftwareSPI.h>
 
 #include "../inc/MarlinConfig.h"
 
@@ -62,7 +62,7 @@ SPISettings MAX31865::spiConfig = SPISettings(
     500000
   #endif
   , MSBFIRST
-  , SPI_MODE_1 // CPOL0 CPHA1
+  , SPI_MODE1 // CPOL0 CPHA1
 );
 
 #ifndef LARGE_PINMAP
@@ -157,10 +157,9 @@ void MAX31865::begin(max31865_numwires_t wires, float zero, float ref) {
     #ifdef MAX31865_DEBUG
       SERIAL_ECHOLN("Initializing MAX31865 Software SPI");
     #endif
-
-    OUT_WRITE(_sclk, LOW);
-    SET_OUTPUT(_mosi);
-    SET_INPUT(_miso);
+    
+    swSpiBegin(_sclk, _miso, _mosi);
+    
   } else {
     // start and configure hardware SPI
     #ifdef MAX31865_DEBUG
@@ -170,6 +169,9 @@ void MAX31865::begin(max31865_numwires_t wires, float zero, float ref) {
     SPI.begin();
   }
 
+  // SPI Begin must be called first, then init
+  _spi_speed = swSpiInit(SPI_QUARTER_SPEED, _sclk, _mosi);
+
   setWires(wires);
   enableBias(false);
   autoConvert(false);
@@ -484,17 +486,7 @@ uint8_t MAX31865::spixfer(uint8_t x) {
   if (_sclk == TERN(LARGE_PINMAP, -1UL, -1))
     return SPI.transfer(x);
 
-  uint8_t reply = 0;
-  for (int i = 7; i >= 0; i--) {
-    reply <<= 1;
-    WRITE(_sclk, HIGH);
-    WRITE(_mosi, x & (1 << i));
-    WRITE(_sclk, LOW);
-    if (READ(_miso))
-      reply |= 1;
-  }
-
-  return reply;
+  return swSpiTransfer(x, _spi_speed, _sclk, _miso, _mosi);
 }
 
 #endif // HAS_MAX31865 && !LIB_USR_MAX31865
diff --git a/Marlin/src/libs/MAX31865.h b/Marlin/src/libs/MAX31865.h
index 5d50e870ec..13a117447d 100644
--- a/Marlin/src/libs/MAX31865.h
+++ b/Marlin/src/libs/MAX31865.h
@@ -90,6 +90,7 @@ private:
   static SPISettings spiConfig;
 
   TERN(LARGE_PINMAP, uint32_t, uint8_t) _sclk, _miso, _mosi, _cs;
+  uint8_t _spi_speed;
   float Rzero, Rref;
 
   void setConfig(uint8_t config, bool enable);