From 0e6ec34228d3f2775952fd0a21b1e3ff8a110159 Mon Sep 17 00:00:00 2001
From: Scott Lahteine <sourcetree@thinkyhead.com>
Date: Sun, 2 Apr 2017 00:45:39 -0500
Subject: [PATCH] Use PSTR versions of lcd_status... to save SRAM

---
 Marlin/G26_Mesh_Validation_Tool.cpp |  2 +-
 Marlin/UBL.h                        |  1 +
 Marlin/UBL_G29.cpp                  | 24 +++++++++++++-----------
 Marlin/ultralcd.cpp                 |  8 ++++----
 4 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/Marlin/G26_Mesh_Validation_Tool.cpp b/Marlin/G26_Mesh_Validation_Tool.cpp
index fc07275c13..d00369d575 100644
--- a/Marlin/G26_Mesh_Validation_Tool.cpp
+++ b/Marlin/G26_Mesh_Validation_Tool.cpp
@@ -128,7 +128,7 @@
   extern bool code_value_bool();
   extern bool code_has_value();
   extern void lcd_init();
-  extern void lcd_setstatuspgm(const char* const message, uint8_t level);
+  extern void lcd_setstatuspgm(const char* const message, const uint8_t level);
   #define PLANNER_XY_FEEDRATE() (min(planner.max_feedrate_mm_s[X_AXIS], planner.max_feedrate_mm_s[Y_AXIS])) //bob
   bool prepare_move_to_destination_cartesian();
   void line_to_destination();
diff --git a/Marlin/UBL.h b/Marlin/UBL.h
index f96d23e668..c62e05a31a 100644
--- a/Marlin/UBL.h
+++ b/Marlin/UBL.h
@@ -29,6 +29,7 @@
 
   #if ENABLED(AUTO_BED_LEVELING_UBL)
 
+    #define UBL_VERSION "1.00"
     #define UBL_OK false
     #define UBL_ERR true
 
diff --git a/Marlin/UBL_G29.cpp b/Marlin/UBL_G29.cpp
index 9512f61b27..3d877cc8d0 100644
--- a/Marlin/UBL_G29.cpp
+++ b/Marlin/UBL_G29.cpp
@@ -307,7 +307,8 @@
   static float x_pos, y_pos, measured_z, card_thickness = 0.0, ubl_constant = 0.0;
 
   #if ENABLED(ULTRA_LCD)
-    void lcd_setstatus(const char* message, bool persist);
+    extern void lcd_setstatus(const char* message, const bool persist);
+    extern void lcd_setstatuspgm(const char* message, const uint8_t level);
   #endif
 
   void gcode_G29() {
@@ -655,7 +656,7 @@
           if (ELAPSED(millis(), nxt)) {
             SERIAL_PROTOCOLLNPGM("\nZ-Offset Adjustment Stopped.");
             do_blocking_move_to_z(Z_CLEARANCE_DEPLOY_PROBE);
-            lcd_setstatus("Z-Offset Stopped", true);
+            lcd_setstatuspgm("Z-Offset Stopped");
             restore_ubl_active_state_and_leave();
             goto LEAVE;
           }
@@ -673,7 +674,8 @@
     LEAVE:
 
     #if ENABLED(ULTRA_LCD)
-      lcd_setstatus("                         ", true);
+      lcd_reset_alert_level();
+      lcd_setstatuspgm("");
       lcd_quick_feedback();
     #endif
 
@@ -977,7 +979,7 @@
 
   bool g29_parameter_parsing() {
     #if ENABLED(ULTRA_LCD)
-      lcd_setstatus("Doing G29 UBL !", true);
+      lcd_setstatuspgm("Doing G29 UBL!");
       lcd_quick_feedback();
     #endif
 
@@ -1088,7 +1090,7 @@
     ubl_state_recursion_chk++;
     if (ubl_state_recursion_chk != 1) {
       SERIAL_ECHOLNPGM("save_ubl_active_state_and_disabled() called multiple times in a row.");
-      lcd_setstatus("save_UBL_active() error", true);
+      lcd_setstatuspgm("save_UBL_active() error");
       lcd_quick_feedback();
       return;
     }
@@ -1099,7 +1101,7 @@
   void restore_ubl_active_state_and_leave() {
     if (--ubl_state_recursion_chk) {
       SERIAL_ECHOLNPGM("restore_ubl_active_state_and_leave() called too many times.");
-      lcd_setstatus("restore_UBL_active() error", true);
+      lcd_setstatuspgm("restore_UBL_active() error");
       lcd_quick_feedback();
       return;
     }
@@ -1114,7 +1116,7 @@
   void g29_what_command() {
     const uint16_t k = E2END - ubl.eeprom_start;
 
-    SERIAL_PROTOCOLPGM("Unified Bed Leveling System Version 1.00 ");
+    SERIAL_PROTOCOLPGM("Unified Bed Leveling System Version " UBL_VERSION " ");
     if (ubl.state.active)
       SERIAL_PROTOCOLCHAR('A');
     else
@@ -1339,7 +1341,7 @@
     memset(not_done, 0xFF, sizeof(not_done));
 
     #if ENABLED(ULTRA_LCD)
-      lcd_setstatus("Fine Tuning Mesh.", true);
+      lcd_setstatuspgm("Fine Tuning Mesh");
     #endif
 
     do_blocking_move_to_z(Z_CLEARANCE_DEPLOY_PROBE);
@@ -1398,7 +1400,7 @@
           lcd_return_to_status();
           //SERIAL_PROTOCOLLNPGM("\nFine Tuning of Mesh Stopped.");
           do_blocking_move_to_z(Z_CLEARANCE_DEPLOY_PROBE);
-          lcd_setstatus("Mesh Editing Stopped", true);
+          lcd_setstatuspgm("Mesh Editing Stopped");
 
           while (ubl_lcd_clicked()) idle();
 
@@ -1426,9 +1428,9 @@
     do_blocking_move_to_xy(lx, ly);
 
     #if ENABLED(ULTRA_LCD)
-      lcd_setstatus("Done Editing Mesh", true);
+      lcd_setstatuspgm("Done Editing Mesh");
     #endif
-    SERIAL_ECHOLNPGM("Done Editing Mesh.");
+    SERIAL_ECHOLNPGM("Done Editing Mesh");
   }
 
 #endif // AUTO_BED_LEVELING_UBL
\ No newline at end of file
diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp
index f407424427..d41281c927 100755
--- a/Marlin/ultralcd.cpp
+++ b/Marlin/ultralcd.cpp
@@ -677,7 +677,7 @@ void kill_screen(const char* lcd_msg) {
         thermalManager.autotempShutdown();
       #endif
       wait_for_heatup = false;
-      lcd_setstatus(MSG_PRINT_ABORTED, true);
+      lcd_setstatuspgm(PSTR(MSG_PRINT_ABORTED), true);
     }
 
   #endif // SDSUPPORT
@@ -3552,13 +3552,13 @@ void lcd_finishstatus(bool persist=false) {
 
 bool lcd_hasstatus() { return (lcd_status_message[0] != '\0'); }
 
-void lcd_setstatus(const char* const message, bool persist) {
+void lcd_setstatus(const char * const message, const bool persist) {
   if (lcd_status_message_level > 0) return;
   strncpy(lcd_status_message, message, 3 * (LCD_WIDTH));
   lcd_finishstatus(persist);
 }
 
-void lcd_setstatuspgm(const char* const message, uint8_t level) {
+void lcd_setstatuspgm(const char * const message, const uint8_t level) {
   if (level < lcd_status_message_level) return;
   lcd_status_message_level = level;
   strncpy_P(lcd_status_message, message, 3 * (LCD_WIDTH));
@@ -3575,7 +3575,7 @@ void status_printf(uint8_t level, const char *status, ...) {
   lcd_finishstatus(level > 0);
 }
 
-void lcd_setalertstatuspgm(const char* const message) {
+void lcd_setalertstatuspgm(const char * const message) {
   lcd_setstatuspgm(message, 1);
   #if ENABLED(ULTIPANEL)
     lcd_return_to_status();