From 7c7a4051fef627f19ae3bbe67a4329f47d54f4ea Mon Sep 17 00:00:00 2001
From: Scott Lahteine <sourcetree@thinkyhead.com>
Date: Fri, 4 Sep 2015 16:54:15 -0700
Subject: [PATCH 1/2] Disable SDSUPPORT by default
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

As noted in #133 you can’t disable `SDSUPPORT` with `MAKRPANEL`,
`PANEL_ONE`, `MINIPANEL`, or `ULTIPANEL`. This patch makes it possible
to disable `SDSUPPORT` on these controllers and then disables it by
default.

Users of these controllers will now need to enable `SDSUPPORT` in their
configurations as others currently do.
---
 Marlin/Conditionals.h | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/Marlin/Conditionals.h b/Marlin/Conditionals.h
index 29659feb81..e654f07fa7 100644
--- a/Marlin/Conditionals.h
+++ b/Marlin/Conditionals.h
@@ -16,7 +16,6 @@
 
   #if ENABLED(MAKRPANEL)
     #define DOGLCD
-    #define SDSUPPORT
     #define DEFAULT_LCD_CONTRAST 17
     #define ULTIPANEL
     #define NEWPANEL
@@ -48,7 +47,6 @@
 
 
   #if ENABLED(PANEL_ONE)
-    #define SDSUPPORT
     #define ULTIMAKERCONTROLLER
   #endif
 
@@ -77,7 +75,6 @@
 
   #if ENABLED(MINIPANEL)
    #define DOGLCD
-   #define SDSUPPORT
    #define ULTIPANEL
    #define NEWPANEL
    #define DEFAULT_LCD_CONTRAST 17
@@ -145,7 +142,6 @@
 
   #if ENABLED(ULTIPANEL)
     #define NEWPANEL  //enable this if you have a click-encoder panel
-    #define SDSUPPORT
     #define ULTRA_LCD
     #if ENABLED(DOGLCD) // Change number of lines to match the DOG graphic display
       #define LCD_WIDTH 22

From 2b30e8ac99dd21544b1d1f6d21b9287e8e0f3ae3 Mon Sep 17 00:00:00 2001
From: Scott Lahteine <sourcetree@thinkyhead.com>
Date: Fri, 4 Sep 2015 17:40:12 -0700
Subject: [PATCH 2/2] Conditionals for ULTIPANEL without SDSUPPORT

---
 Marlin/ultralcd.cpp | 159 +++++++++++++++++++++++++-------------------
 1 file changed, 89 insertions(+), 70 deletions(-)

diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp
index 29c97e6854..636a1c9b68 100644
--- a/Marlin/ultralcd.cpp
+++ b/Marlin/ultralcd.cpp
@@ -283,22 +283,25 @@ static void lcd_status_screen() {
     #if PROGRESS_MSG_EXPIRE > 0
       // Handle message expire
       if (expire_status_ms > 0) {
-        if (card.isFileOpen()) {
-          // Expire the message when printing is active
-          if (IS_SD_PRINTING) {
+        #if ENABLED(SDSUPPORT)
+          if (card.isFileOpen()) {
             // Expire the message when printing is active
-            if (ms >= expire_status_ms) {
-              lcd_status_message[0] = '\0';
-              expire_status_ms = 0;
+            if (IS_SD_PRINTING) {
+              if (ms >= expire_status_ms) {
+                lcd_status_message[0] = '\0';
+                expire_status_ms = 0;
+              }
+            }
+            else {
+              expire_status_ms += LCD_UPDATE_INTERVAL;
             }
           }
           else {
-            expire_status_ms += LCD_UPDATE_INTERVAL;
+            expire_status_ms = 0;
           }
-        }
-        else {
+        #else
           expire_status_ms = 0;
-        }
+        #endif //SDSUPPORT
       }
     #endif
   #endif //LCD_PROGRESS_BAR
@@ -367,18 +370,22 @@ static void lcd_status_screen() {
 
 static void lcd_return_to_status() { lcd_goto_menu(lcd_status_screen); }
 
-static void lcd_sdcard_pause() { card.pauseSDPrint(); }
+#if ENABLED(SDSUPPORT)
 
-static void lcd_sdcard_resume() { card.startFileprint(); }
+  static void lcd_sdcard_pause() { card.pauseSDPrint(); }
 
-static void lcd_sdcard_stop() {
-  quickStop();
-  card.sdprinting = false;
-  card.closefile();
-  autotempShutdown();
-  cancel_heatup = true;
-  lcd_setstatus(MSG_PRINT_ABORTED, true);
-}
+  static void lcd_sdcard_resume() { card.startFileprint(); }
+
+  static void lcd_sdcard_stop() {
+    quickStop();
+    card.sdprinting = false;
+    card.closefile();
+    autotempShutdown();
+    cancel_heatup = true;
+    lcd_setstatus(MSG_PRINT_ABORTED, true);
+  }
+
+#endif //SDSUPPORT
 
 /**
  *
@@ -1186,57 +1193,61 @@ static void lcd_control_volumetric_menu() {
   }
 #endif // FWRETRACT
 
-#if !PIN_EXISTS(SD_DETECT)
-  static void lcd_sd_refresh() {
-    card.initsd();
+#if ENABLED(SDSUPPORT)
+
+  #if !PIN_EXISTS(SD_DETECT)
+    static void lcd_sd_refresh() {
+      card.initsd();
+      currentMenuViewOffset = 0;
+    }
+  #endif
+
+  static void lcd_sd_updir() {
+    card.updir();
     currentMenuViewOffset = 0;
   }
-#endif
 
-static void lcd_sd_updir() {
-  card.updir();
-  currentMenuViewOffset = 0;
-}
-
-/**
- *
- * "Print from SD" submenu
- *
- */
-void lcd_sdcard_menu() {
-  if (lcdDrawUpdate == 0 && LCD_CLICKED == 0) return;	// nothing to do (so don't thrash the SD card)
-  uint16_t fileCnt = card.getnrfilenames();
-  START_MENU();
-  MENU_ITEM(back, MSG_MAIN, lcd_main_menu);
-  card.getWorkDirName();
-  if (card.filename[0] == '/') {
-    #if !PIN_EXISTS(SD_DETECT)
-      MENU_ITEM(function, LCD_STR_REFRESH MSG_REFRESH, lcd_sd_refresh);
-    #endif
-  }
-  else {
-    MENU_ITEM(function, LCD_STR_FOLDER "..", lcd_sd_updir);
-  }
-
-  for (uint16_t i = 0; i < fileCnt; i++) {
-    if (_menuItemNr == _lineNr) {
-      card.getfilename(
-        #if ENABLED(SDCARD_RATHERRECENTFIRST)
-          fileCnt-1 -
-        #endif
-        i
-      );
-      if (card.filenameIsDir)
-        MENU_ITEM(sddirectory, MSG_CARD_MENU, card.filename, card.longFilename);
-      else
-        MENU_ITEM(sdfile, MSG_CARD_MENU, card.filename, card.longFilename);
+  /**
+   *
+   * "Print from SD" submenu
+   *
+   */
+  void lcd_sdcard_menu() {
+    if (lcdDrawUpdate == 0 && LCD_CLICKED == 0) return;	// nothing to do (so don't thrash the SD card)
+    uint16_t fileCnt = card.getnrfilenames();
+    START_MENU();
+    MENU_ITEM(back, MSG_MAIN, lcd_main_menu);
+    card.getWorkDirName();
+    if (card.filename[0] == '/') {
+      #if !PIN_EXISTS(SD_DETECT)
+        MENU_ITEM(function, LCD_STR_REFRESH MSG_REFRESH, lcd_sd_refresh);
+      #endif
     }
     else {
-      MENU_ITEM_DUMMY();
+      MENU_ITEM(function, LCD_STR_FOLDER "..", lcd_sd_updir);
     }
+
+    for (uint16_t i = 0; i < fileCnt; i++) {
+      if (_menuItemNr == _lineNr) {
+        card.getfilename(
+          #if ENABLED(SDCARD_RATHERRECENTFIRST)
+            fileCnt-1 -
+          #endif
+          i
+        );
+        if (card.filenameIsDir)
+          MENU_ITEM(sddirectory, MSG_CARD_MENU, card.filename, card.longFilename);
+        else
+          MENU_ITEM(sdfile, MSG_CARD_MENU, card.filename, card.longFilename);
+      }
+      else {
+        MENU_ITEM_DUMMY();
+      }
+    }
+    END_MENU();
   }
-  END_MENU();
-}
+
+ #endif //SDSUPPORT
 
 /**
  *
@@ -1389,10 +1400,16 @@ static void menu_action_sdfile(const char* filename, char* longFilename) {
   enqueuecommands_P(PSTR("M24"));
   lcd_return_to_status();
 }
-static void menu_action_sddirectory(const char* filename, char* longFilename) {
-  card.chdir(filename);
-  encoderPosition = 0;
-}
+
+#if ENABLED(SDSUPPORT)
+
+  static void menu_action_sddirectory(const char* filename, char* longFilename) {
+    card.chdir(filename);
+    encoderPosition = 0;
+  }
+
+#endif
+
 static void menu_action_setting_edit_bool(const char* pstr, bool* ptr) { *ptr = !(*ptr); }
 static void menu_action_setting_edit_callback_bool(const char* pstr, bool* ptr, menuFunc_t callback) {
   menu_action_setting_edit_bool(pstr, ptr);
@@ -1496,7 +1513,8 @@ void lcd_update() {
 
   lcd_buttons_update();
 
-  #if PIN_EXISTS(SD_DETECT)
+  #if ENABLED(SDSUPPORT) && PIN_EXISTS(SD_DETECT)
+
     if (IS_SD_INSERTED != lcd_oldcardstatus && lcd_detected()) {
       lcdDrawUpdate = 2;
       lcd_oldcardstatus = IS_SD_INSERTED;
@@ -1515,7 +1533,8 @@ void lcd_update() {
         LCD_MESSAGEPGM(MSG_SD_REMOVED);
       }
     }
-  #endif//CARDINSERTED
+
+  #endif //SDSUPPORT && SD_DETECT_PIN
   
   millis_t ms = millis();
   if (ms > next_lcd_update_ms) {