From cd4060a99cb11b8cb0915294bb91ea427f89ff33 Mon Sep 17 00:00:00 2001
From: ellensp <ellensp@hotmail.com>
Date: Tue, 24 Mar 2020 11:55:21 +1300
Subject: [PATCH] Add USB serial support to SERIAL_PORT_2 on DUE (#17245)

Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
---
 Marlin/src/HAL/DUE/HAL.h               |  1 -
 Marlin/src/HAL/DUE/MarlinSerial.cpp    | 20 +++++---------------
 Marlin/src/HAL/DUE/MarlinSerial.h      | 12 ++++--------
 Marlin/src/HAL/DUE/MarlinSerialUSB.cpp | 12 ++++++++----
 Marlin/src/HAL/DUE/MarlinSerialUSB.h   | 12 +++++++++---
 Marlin/src/inc/Conditionals_LCD.h      |  4 ++++
 6 files changed, 30 insertions(+), 31 deletions(-)

diff --git a/Marlin/src/HAL/DUE/HAL.h b/Marlin/src/HAL/DUE/HAL.h
index 97b94b5db2..90b6fabc05 100644
--- a/Marlin/src/HAL/DUE/HAL.h
+++ b/Marlin/src/HAL/DUE/HAL.h
@@ -94,7 +94,6 @@
   #endif
 #endif
 
-
 #include "MarlinSerial.h"
 #include "MarlinSerialUSB.h"
 
diff --git a/Marlin/src/HAL/DUE/MarlinSerial.cpp b/Marlin/src/HAL/DUE/MarlinSerial.cpp
index d827def422..d114c75989 100644
--- a/Marlin/src/HAL/DUE/MarlinSerial.cpp
+++ b/Marlin/src/HAL/DUE/MarlinSerial.cpp
@@ -629,23 +629,13 @@ void MarlinSerial<Cfg>::printFloat(double number, uint8_t digits) {
 
 // If not using the USB port as serial port
 #if SERIAL_PORT >= 0
-
-  // Preinstantiate
-  template class MarlinSerial<MarlinSerialCfg<SERIAL_PORT>>;
-
-  // Instantiate
-  MarlinSerial<MarlinSerialCfg<SERIAL_PORT>> customizedSerial1;
-
+  template class MarlinSerial<MarlinSerialCfg<SERIAL_PORT>>;      // Define
+  MarlinSerial<MarlinSerialCfg<SERIAL_PORT>> customizedSerial1;   // Instantiate
 #endif
 
-#ifdef SERIAL_PORT_2
-
-  // Preinstantiate
-  template class MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>>;
-
-  // Instantiate
-  MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>> customizedSerial2;
-
+#if defined(SERIAL_PORT_2) && SERIAL_PORT_2 >= 0
+  template class MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>>;    // Define
+  MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>> customizedSerial2; // Instantiate
 #endif
 
 #endif // ARDUINO_ARCH_SAM
diff --git a/Marlin/src/HAL/DUE/MarlinSerial.h b/Marlin/src/HAL/DUE/MarlinSerial.h
index eb26a5644d..fa6a2c7d15 100644
--- a/Marlin/src/HAL/DUE/MarlinSerial.h
+++ b/Marlin/src/HAL/DUE/MarlinSerial.h
@@ -172,13 +172,9 @@ struct MarlinSerialCfg {
 };
 
 #if SERIAL_PORT >= 0
-
   extern MarlinSerial<MarlinSerialCfg<SERIAL_PORT>> customizedSerial1;
-
-#endif // SERIAL_PORT >= 0
-
-#ifdef SERIAL_PORT_2
-
-  extern MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>> customizedSerial2;
-
+#endif
+
+#if defined(SERIAL_PORT_2) && SERIAL_PORT_2 >= 0
+  extern MarlinSerial<MarlinSerialCfg<SERIAL_PORT_2>> customizedSerial2;
 #endif
diff --git a/Marlin/src/HAL/DUE/MarlinSerialUSB.cpp b/Marlin/src/HAL/DUE/MarlinSerialUSB.cpp
index 41ffb52ba1..7a020bbaf0 100644
--- a/Marlin/src/HAL/DUE/MarlinSerialUSB.cpp
+++ b/Marlin/src/HAL/DUE/MarlinSerialUSB.cpp
@@ -29,7 +29,7 @@
 
 #include "../../inc/MarlinConfig.h"
 
-#if SERIAL_PORT == -1
+#if HAS_USB_SERIAL
 
 #include "MarlinSerialUSB.h"
 
@@ -283,8 +283,12 @@ void MarlinSerialUSB::printFloat(double number, uint8_t digits) {
 }
 
 // Preinstantiate
-MarlinSerialUSB customizedSerial1;
-
-#endif // SERIAL_PORT == -1
+#if SERIAL_PORT == -1
+  MarlinSerialUSB customizedSerial1;
+#endif
+#if SERIAL_PORT_2 == -1
+  MarlinSerialUSB customizedSerial2;
+#endif
 
+#endif // HAS_USB_SERIAL
 #endif // ARDUINO_ARCH_SAM
diff --git a/Marlin/src/HAL/DUE/MarlinSerialUSB.h b/Marlin/src/HAL/DUE/MarlinSerialUSB.h
index d8b051d37e..9aece901b1 100644
--- a/Marlin/src/HAL/DUE/MarlinSerialUSB.h
+++ b/Marlin/src/HAL/DUE/MarlinSerialUSB.h
@@ -28,7 +28,7 @@
 
 #include "../../inc/MarlinConfig.h"
 
-#if SERIAL_PORT == -1
+#if HAS_USB_SERIAL
 
 #include <WString.h>
 
@@ -88,6 +88,12 @@ private:
   static void printFloat(double, uint8_t);
 };
 
-extern MarlinSerialUSB customizedSerial1;
+#if SERIAL_PORT == -1
+  extern MarlinSerialUSB customizedSerial1;
+#endif
 
-#endif // SERIAL_PORT == -1
+#if SERIAL_PORT_2 == -1
+  extern MarlinSerialUSB customizedSerial2;
+#endif
+
+#endif // HAS_USB_SERIAL
diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h
index 2907694fb4..dd1f13fae0 100644
--- a/Marlin/src/inc/Conditionals_LCD.h
+++ b/Marlin/src/inc/Conditionals_LCD.h
@@ -683,6 +683,10 @@
   #define SPI_SPEED SPI_FULL_SPEED
 #endif
 
+#if SERIAL_PORT == -1 || SERIAL_PORT_2 == -1
+  #define HAS_USB_SERIAL 1
+#endif
+
 /**
  * This setting is also used by M109 when trying to calculate
  * a ballpark safe margin to prevent wait-forever situation.