From 94a9cd647765301d7bb2e0dce2523e2afef9097a Mon Sep 17 00:00:00 2001
From: Scott Lahteine <github@thinkyhead.com>
Date: Sat, 20 Jan 2018 22:43:05 -0600
Subject: [PATCH] CR-10S filament change length, enhanced status bitmap

---
 .../Creality/CR-10S/Configuration.h           |   4 +-
 .../Creality/CR-10S/Configuration_adv.h       |  16 +--
 .../Creality/CR-10S/_Statusscreen.h           | 112 ++++++++++++++++++
 3 files changed, 122 insertions(+), 10 deletions(-)
 create mode 100644 Marlin/example_configurations/Creality/CR-10S/_Statusscreen.h

diff --git a/Marlin/example_configurations/Creality/CR-10S/Configuration.h b/Marlin/example_configurations/Creality/CR-10S/Configuration.h
index 39eb07e7a5c..a33812fd128 100644
--- a/Marlin/example_configurations/Creality/CR-10S/Configuration.h
+++ b/Marlin/example_configurations/Creality/CR-10S/Configuration.h
@@ -93,7 +93,7 @@
 //#define SHOW_CUSTOM_BOOTSCREEN
 
 // Enable to show the bitmap in Marlin/_Statusscreen.h on the status screen.
-//#define CUSTOM_STATUS_SCREEN_IMAGE
+#define CUSTOM_STATUS_SCREEN_IMAGE
 
 // @section machine
 
@@ -428,7 +428,7 @@
 // This option prevents a single extrusion longer than EXTRUDE_MAXLENGTH.
 // Note that for Bowden Extruders a too-small value here may prevent loading.
 #define PREVENT_LENGTHY_EXTRUDE
-#define EXTRUDE_MAXLENGTH 200
+#define EXTRUDE_MAXLENGTH 435
 
 //===========================================================================
 //======================== Thermal Runaway Protection =======================
diff --git a/Marlin/example_configurations/Creality/CR-10S/Configuration_adv.h b/Marlin/example_configurations/Creality/CR-10S/Configuration_adv.h
index b06796b95eb..32d97fd8e8b 100644
--- a/Marlin/example_configurations/Creality/CR-10S/Configuration_adv.h
+++ b/Marlin/example_configurations/Creality/CR-10S/Configuration_adv.h
@@ -388,7 +388,7 @@
 // @section lcd
 
 #if ENABLED(ULTIPANEL)
-  #define MANUAL_FEEDRATE {50*60, 50*60, 4*60, 60} // Feedrates for manual moves along X, Y, Z, E from panel
+  #define MANUAL_FEEDRATE {50*60, 50*60, 4*60, 1*60} // Feedrates (mm/m) for manual moves along X, Y, Z, E from panel
   #define ULTIPANEL_FEEDMULTIPLY  // Comment to disable setting feedrate multiplier via encoder
 #endif
 
@@ -887,25 +887,25 @@
   #define PAUSE_PARK_RETRACT_FEEDRATE 60      // (mm/s) Initial retract feedrate.
   #define PAUSE_PARK_RETRACT_LENGTH 4         // (mm) Initial retract.
                                               // This short retract is done immediately, before parking the nozzle.
-  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10  // (mm/s) Unload filament feedrate. This can be pretty fast.
-  #define FILAMENT_CHANGE_UNLOAD_LENGTH 100   // (mm) The length of filament for a complete unload.
+  #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 41  // (mm/s) Unload filament feedrate. This can be pretty fast.
+  #define FILAMENT_CHANGE_UNLOAD_LENGTH 430   // (mm) The length of filament for a complete unload.
                                               //   For Bowden, the full length of the tube and nozzle.
                                               //   For direct drive, the full length of the nozzle.
                                               //   Set to 0 for manual unloading.
-  #define FILAMENT_CHANGE_LOAD_FEEDRATE 6     // (mm/s) Load filament feedrate. This can be pretty fast.
-  #define FILAMENT_CHANGE_LOAD_LENGTH 0       // (mm) Load length of filament, from extruder gear to nozzle.
+  #define FILAMENT_CHANGE_LOAD_FEEDRATE 41    // (mm/s) Load filament feedrate. This can be pretty fast.
+  #define FILAMENT_CHANGE_LOAD_LENGTH 430     // (mm) Load length of filament, from extruder gear to nozzle.
                                               //   For Bowden, the full length of the tube and nozzle.
                                               //   For direct drive, the full length of the nozzle.
   #define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3   // (mm/s) Extrude feedrate (after loading). Should be slower than load feedrate.
-  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 50    // (mm) Length to extrude after loading.
+  #define ADVANCED_PAUSE_EXTRUDE_LENGTH 20    // (mm) Length to extrude after loading.
                                               //   Set to 0 for manual extrusion.
                                               //   Filament can be extruded repeatedly from the Filament Change menu
                                               //   until extrusion is consistent, and to purge old filament.
 
                                               // Filament Unload does a Retract, Delay, and Purge first:
-  #define FILAMENT_UNLOAD_RETRACT_LENGTH 2    // (mm) Unload initial retract length.
+  #define FILAMENT_UNLOAD_RETRACT_LENGTH 4    // (mm) Unload initial retract length.
   #define FILAMENT_UNLOAD_DELAY 5000          // (ms) Delay for the filament to cool after retract.
-  #define FILAMENT_UNLOAD_PURGE_LENGTH 8      // (mm) An unretract is done, then this length is purged.
+  #define FILAMENT_UNLOAD_PURGE_LENGTH 0      // (mm) An unretract is done, then this length is purged.
 
   #define PAUSE_PARK_NOZZLE_TIMEOUT 45        // (seconds) Time limit before the nozzle is turned off for safety.
   #define FILAMENT_CHANGE_ALERT_BEEPS 6       // Number of alert beeps to play when a response is needed.
diff --git a/Marlin/example_configurations/Creality/CR-10S/_Statusscreen.h b/Marlin/example_configurations/Creality/CR-10S/_Statusscreen.h
new file mode 100644
index 00000000000..c785ca632b8
--- /dev/null
+++ b/Marlin/example_configurations/Creality/CR-10S/_Statusscreen.h
@@ -0,0 +1,112 @@
+#ifndef _STATUSSCREEN_H_
+#define _STATUSSCREEN_H_
+
+#define STATUS_SCREENWIDTH 128 // Width in pixels
+
+#define STATUS_SCREEN_X 0
+#define STATUS_SCREEN_HOTEND_TEXT_X(E) (38 + (E) * 20)
+#define STATUS_SCREEN_FAN_TEXT_X 103
+
+#include "MarlinConfig.h"
+
+#if HOTENDS < 2
+
+  const unsigned char status_screen0_bmp[] PROGMEM = {
+    //-----"CR-10S 300"-----|-nozzle--|---------|-----bed------|----|-----fan------|
+    0x3D,0xF0,0x02,0x38,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xF0,
+    0x44,0x88,0x06,0x45,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x70,
+    0x80,0x88,0x02,0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x87,0x30,
+    0x80,0xF0,0x02,0x44,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x27,0x87,0x90,
+    0x80,0xA3,0xF2,0x44,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,0x87,0xD0,
+    0x80,0x90,0x02,0x44,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,0x87,0xD0,
+    0x80,0x90,0x02,0x44,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,0x03,0xD0,
+    0x44,0x88,0x02,0x45,0x10,0x1F,0xE0,0x00,0x00,0x08,0x20,0x80,0x00,0x20,0x30,0x10,
+    0x39,0xCC,0x07,0x39,0xE0,0x3F,0xF0,0x00,0x00,0x04,0x10,0x40,0x00,0x20,0x78,0x10,
+    0x00,0x00,0x00,0x00,0x00,0x3F,0xF0,0x00,0x00,0x04,0x10,0x40,0x00,0x20,0x78,0x10,
+    0x00,0x38,0x70,0xE0,0x00,0x3F,0xF0,0x00,0x00,0x08,0x20,0x80,0x00,0x20,0x30,0x10,
+    0x00,0x44,0x89,0x10,0x00,0x1F,0xE0,0x00,0x00,0x10,0x41,0x00,0x00,0x2F,0x03,0xD0,
+    0x00,0x04,0x89,0x10,0x00,0x1F,0xE0,0x00,0x00,0x20,0x82,0x00,0x00,0x2F,0x87,0xD0,
+    0x00,0x18,0x89,0x10,0x00,0x3F,0xF0,0x00,0x00,0x20,0x82,0x00,0x00,0x2F,0x87,0xD0,
+    0x00,0x04,0x89,0x10,0x00,0x3F,0xF0,0x00,0x00,0x10,0x41,0x00,0x00,0x27,0x87,0x90,
+    0x00,0x04,0x89,0x10,0x00,0x3F,0xF0,0x00,0x00,0x08,0x20,0x80,0x00,0x33,0x87,0x30,
+    0x00,0x04,0x89,0x10,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x70,
+    0x00,0x44,0x89,0x10,0x00,0x07,0x80,0x00,0x00,0xFF,0xFF,0xC0,0x00,0x3F,0xFF,0xF0,
+    0x00,0x38,0x70,0xE0,0x00,0x03,0x00,0x00,0x00,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00
+  };
+  const unsigned char status_screen1_bmp[] PROGMEM = {
+    //-----"CR-10S 300"-----|-nozzle--|---------|-----bed------|----|-----fan------|
+    0x3D,0xF0,0x02,0x38,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xF0,
+    0x44,0x88,0x06,0x45,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x70,
+    0x80,0x88,0x02,0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0xFC,0x30,
+    0x80,0xF0,0x02,0x44,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xFC,0x10,
+    0x80,0xA3,0xF2,0x44,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x78,0x10,
+    0x80,0x90,0x02,0x44,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x30,0x10,
+    0x80,0x90,0x02,0x44,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2C,0x00,0xD0,
+    0x44,0x88,0x02,0x45,0x10,0x1F,0xE0,0x00,0x00,0x08,0x20,0x80,0x00,0x2E,0x31,0xD0,
+    0x39,0xCC,0x07,0x39,0xE0,0x3F,0xF0,0x00,0x00,0x04,0x10,0x40,0x00,0x2F,0x7B,0xD0,
+    0x00,0x00,0x00,0x00,0x00,0x3F,0xF0,0x00,0x00,0x04,0x10,0x40,0x00,0x2F,0x7B,0xD0,
+    0x00,0x38,0x70,0xE0,0x00,0x3F,0xF0,0x00,0x00,0x08,0x20,0x80,0x00,0x2E,0x31,0xD0,
+    0x00,0x44,0x89,0x10,0x00,0x1F,0xE0,0x00,0x00,0x10,0x41,0x00,0x00,0x2C,0x00,0xD0,
+    0x00,0x04,0x89,0x10,0x00,0x1F,0xE0,0x00,0x00,0x20,0x82,0x00,0x00,0x20,0x30,0x10,
+    0x00,0x18,0x89,0x10,0x00,0x3F,0xF0,0x00,0x00,0x20,0x82,0x00,0x00,0x20,0x78,0x10,
+    0x00,0x04,0x89,0x10,0x00,0x3F,0xF0,0x00,0x00,0x10,0x41,0x00,0x00,0x20,0xFC,0x10,
+    0x00,0x04,0x89,0x10,0x00,0x3F,0xF0,0x00,0x00,0x08,0x20,0x80,0x00,0x30,0xFC,0x30,
+    0x00,0x04,0x89,0x10,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x70,
+    0x00,0x44,0x89,0x10,0x00,0x07,0x80,0x00,0x00,0xFF,0xFF,0xC0,0x00,0x3F,0xFF,0xF0,
+    0x00,0x38,0x70,0xE0,0x00,0x03,0x00,0x00,0x00,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00
+  };
+
+  #define STATUS_SCREEN_BED_TEXT_X 73
+
+#else // HOTENDS >= 2
+
+  const unsigned char status_screen0_bmp[] PROGMEM = {
+    //-----"CR-10S 300"------|nozzle|----|nozzle|----|-----bed-----|------fan------|
+    0x3D,0xF0,0x02,0x38,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xF0,
+    0x44,0x88,0x06,0x45,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x70,
+    0x80,0x88,0x02,0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x87,0x30,
+    0x80,0xF0,0x02,0x44,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x27,0x87,0x90,
+    0x80,0xA3,0xF2,0x44,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,0x87,0xD0,
+    0x80,0x90,0x02,0x44,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,0x87,0xD0,
+    0x80,0x90,0x02,0x44,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2F,0x03,0xD0,
+    0x44,0x88,0x02,0x45,0x10,0x1F,0xE0,0x01,0xFE,0x00,0x08,0x20,0x80,0x20,0x30,0x10,
+    0x39,0xCC,0x07,0x39,0xE0,0x3F,0xF0,0x03,0xFF,0x00,0x04,0x10,0x40,0x20,0x78,0x10,
+    0x00,0x00,0x00,0x00,0x00,0x3F,0xF0,0x03,0xFF,0x00,0x04,0x10,0x40,0x20,0x78,0x10,
+    0x00,0x38,0x70,0xE0,0x00,0x3F,0xF0,0x03,0xFF,0x00,0x08,0x20,0x80,0x20,0x30,0x10,
+    0x00,0x44,0x89,0x10,0x00,0x1F,0xE0,0x01,0xFE,0x00,0x10,0x41,0x00,0x2F,0x03,0xD0,
+    0x00,0x04,0x89,0x10,0x00,0x1F,0xE0,0x01,0xFE,0x00,0x20,0x82,0x00,0x2F,0x87,0xD0,
+    0x00,0x18,0x89,0x10,0x00,0x3F,0xF0,0x03,0xFF,0x00,0x20,0x82,0x00,0x2F,0x87,0xD0,
+    0x00,0x04,0x89,0x10,0x00,0x3F,0xF0,0x03,0xFF,0x00,0x10,0x41,0x00,0x27,0x87,0x90,
+    0x00,0x04,0x89,0x10,0x00,0x3F,0xF0,0x03,0xFF,0x00,0x08,0x20,0x80,0x33,0x87,0x30,
+    0x00,0x04,0x89,0x10,0x00,0x0F,0xC0,0x00,0xFC,0x00,0x00,0x00,0x00,0x38,0x00,0x70,
+    0x00,0x44,0x89,0x10,0x00,0x07,0x80,0x00,0x78,0x00,0xFF,0xFF,0xC0,0x3F,0xFF,0xF0,
+    0x00,0x38,0x70,0xE0,0x00,0x03,0x00,0x00,0x30,0x00,0xFF,0xFF,0xC0,0x00,0x00,0x00
+  };
+  const unsigned char status_screen1_bmp[] PROGMEM = {
+    //-----"CR-10S 300"------|nozzle|----|nozzle|----|-----bed-----|------fan------|
+    0x3D,0xF0,0x02,0x38,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xF0,
+    0x44,0x88,0x06,0x45,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x70,
+    0x80,0x88,0x02,0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0xFC,0x30,
+    0x80,0xF0,0x02,0x44,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xFC,0x10,
+    0x80,0xA3,0xF2,0x44,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x78,0x10,
+    0x80,0x90,0x02,0x44,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x30,0x10,
+    0x80,0x90,0x02,0x44,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2C,0x00,0xD0,
+    0x44,0x88,0x02,0x45,0x10,0x1F,0xE0,0x01,0xFE,0x00,0x08,0x20,0x80,0x2E,0x31,0xD0,
+    0x39,0xCC,0x07,0x39,0xE0,0x3F,0xF0,0x03,0xFF,0x00,0x04,0x10,0x40,0x2F,0x7B,0xD0,
+    0x00,0x00,0x00,0x00,0x00,0x3F,0xF0,0x03,0xFF,0x00,0x04,0x10,0x40,0x2F,0x7B,0xD0,
+    0x00,0x38,0x70,0xE0,0x00,0x3F,0xF0,0x03,0xFF,0x00,0x08,0x20,0x80,0x2E,0x31,0xD0,
+    0x00,0x44,0x89,0x10,0x00,0x1F,0xE0,0x01,0xFE,0x00,0x10,0x41,0x00,0x2C,0x00,0xD0,
+    0x00,0x04,0x89,0x10,0x00,0x1F,0xE0,0x01,0xFE,0x00,0x20,0x82,0x00,0x20,0x30,0x10,
+    0x00,0x18,0x89,0x10,0x00,0x3F,0xF0,0x03,0xFF,0x00,0x20,0x82,0x00,0x20,0x78,0x10,
+    0x00,0x04,0x89,0x10,0x00,0x3F,0xF0,0x03,0xFF,0x00,0x10,0x41,0x00,0x20,0xFC,0x10,
+    0x00,0x04,0x89,0x10,0x00,0x3F,0xF0,0x03,0xFF,0x00,0x08,0x20,0x80,0x30,0xFC,0x30,
+    0x00,0x04,0x89,0x10,0x00,0x0F,0xC0,0x00,0xFC,0x00,0x00,0x00,0x00,0x38,0x00,0x70,
+    0x00,0x44,0x89,0x10,0x00,0x07,0x80,0x00,0x78,0x00,0xFF,0xFF,0xC0,0x3F,0xFF,0xF0,
+    0x00,0x38,0x70,0xE0,0x00,0x03,0x00,0x00,0x30,0x00,0xFF,0xFF,0xC0,0x00,0x00,0x00
+  };
+
+  #define STATUS_SCREEN_BED_TEXT_X 81
+
+#endif // HOTENDS >= 2
+
+#endif // _STATUSSCREEN_H_