| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -20,72 +20,72 @@
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 * V19 EEPROM Layout:
 | 
					 | 
					 | 
					 | 
					 * V19 EEPROM Layout:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *
 | 
					 | 
					 | 
					 | 
					 *
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  ver
 | 
					 | 
					 | 
					 | 
					 *  ver
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  axis_steps_per_unit (x4)
 | 
					 | 
					 | 
					 | 
					 *  M92 XYZE  axis_steps_per_unit (x4)
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  max_feedrate (x4)
 | 
					 | 
					 | 
					 | 
					 *  M203 XYZE max_feedrate (x4)
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  max_acceleration_units_per_sq_second (x4)
 | 
					 | 
					 | 
					 | 
					 *  M201 XYZE max_acceleration_units_per_sq_second (x4)
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  acceleration
 | 
					 | 
					 | 
					 | 
					 *  M204 P    acceleration
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  retract_acceleration
 | 
					 | 
					 | 
					 | 
					 *  M204 R    retract_acceleration
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  travel_acceleration
 | 
					 | 
					 | 
					 | 
					 *  M204 T    travel_acceleration
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  minimumfeedrate
 | 
					 | 
					 | 
					 | 
					 *  M205 S    minimumfeedrate
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  mintravelfeedrate
 | 
					 | 
					 | 
					 | 
					 *  M205 T    mintravelfeedrate
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  minsegmenttime
 | 
					 | 
					 | 
					 | 
					 *  M205 B    minsegmenttime
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  max_xy_jerk
 | 
					 | 
					 | 
					 | 
					 *  M205 X    max_xy_jerk
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  max_z_jerk
 | 
					 | 
					 | 
					 | 
					 *  M205 Z    max_z_jerk
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  max_e_jerk
 | 
					 | 
					 | 
					 | 
					 *  M205 E    max_e_jerk
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  home_offset (x3)
 | 
					 | 
					 | 
					 | 
					 *  M206 XYZ  home_offset (x3)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *
 | 
					 | 
					 | 
					 | 
					 *
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 * Mesh bed leveling:
 | 
					 | 
					 | 
					 | 
					 * Mesh bed leveling:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  active
 | 
					 | 
					 | 
					 | 
					 *  M420 S    active
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  mesh_num_x
 | 
					 | 
					 | 
					 | 
					 *            mesh_num_x (set in firmware)
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  mesh_num_y
 | 
					 | 
					 | 
					 | 
					 *            mesh_num_y (set in firmware)
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  z_values[][]
 | 
					 | 
					 | 
					 | 
					 *  M421 XYZ  z_values[][]
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  zprobe_zoffset
 | 
					 | 
					 | 
					 | 
					 *  M851      zprobe_zoffset
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *
 | 
					 | 
					 | 
					 | 
					 *
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 * DELTA:
 | 
					 | 
					 | 
					 | 
					 * DELTA:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  endstop_adj (x3)
 | 
					 | 
					 | 
					 | 
					 *  M666 XYZ  endstop_adj (x3)
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  delta_radius
 | 
					 | 
					 | 
					 | 
					 *  M665 R    delta_radius
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  delta_diagonal_rod
 | 
					 | 
					 | 
					 | 
					 *  M665 L    delta_diagonal_rod
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  delta_segments_per_second
 | 
					 | 
					 | 
					 | 
					 *  M665 S    delta_segments_per_second
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *
 | 
					 | 
					 | 
					 | 
					 *
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 * ULTIPANEL:
 | 
					 | 
					 | 
					 | 
					 * ULTIPANEL:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  plaPreheatHotendTemp
 | 
					 | 
					 | 
					 | 
					 *  M145 S0 H plaPreheatHotendTemp
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  plaPreheatHPBTemp
 | 
					 | 
					 | 
					 | 
					 *  M145 S0 B plaPreheatHPBTemp
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  plaPreheatFanSpeed
 | 
					 | 
					 | 
					 | 
					 *  M145 S0 F plaPreheatFanSpeed
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  absPreheatHotendTemp
 | 
					 | 
					 | 
					 | 
					 *  M145 S1 H absPreheatHotendTemp
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  absPreheatHPBTemp
 | 
					 | 
					 | 
					 | 
					 *  M145 S1 B absPreheatHPBTemp
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  absPreheatFanSpeed
 | 
					 | 
					 | 
					 | 
					 *  M145 S1 F absPreheatFanSpeed
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *
 | 
					 | 
					 | 
					 | 
					 *
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 * PIDTEMP:
 | 
					 | 
					 | 
					 | 
					 * PIDTEMP:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  Kp[0], Ki[0], Kd[0], Kc[0]
 | 
					 | 
					 | 
					 | 
					 *  M301 E0 PIDC  Kp[0], Ki[0], Kd[0], Kc[0]
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  Kp[1], Ki[1], Kd[1], Kc[1]
 | 
					 | 
					 | 
					 | 
					 *  M301 E1 PIDC  Kp[1], Ki[1], Kd[1], Kc[1]
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  Kp[2], Ki[2], Kd[2], Kc[2]
 | 
					 | 
					 | 
					 | 
					 *  M301 E2 PIDC  Kp[2], Ki[2], Kd[2], Kc[2]
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  Kp[3], Ki[3], Kd[3], Kc[3]
 | 
					 | 
					 | 
					 | 
					 *  M301 E3 PIDC  Kp[3], Ki[3], Kd[3], Kc[3]
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *
 | 
					 | 
					 | 
					 | 
					 *
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 * PIDTEMPBED:
 | 
					 | 
					 | 
					 | 
					 * PIDTEMPBED:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  bedKp, bedKi, bedKd
 | 
					 | 
					 | 
					 | 
					 *  M304 PID  bedKp, bedKi, bedKd
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *
 | 
					 | 
					 | 
					 | 
					 *
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 * DOGLCD:
 | 
					 | 
					 | 
					 | 
					 * DOGLCD:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  lcd_contrast
 | 
					 | 
					 | 
					 | 
					 *  M250 C    lcd_contrast
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *
 | 
					 | 
					 | 
					 | 
					 *
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 * SCARA:
 | 
					 | 
					 | 
					 | 
					 * SCARA:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  axis_scaling (x3)
 | 
					 | 
					 | 
					 | 
					 *  M365 XYZ  axis_scaling (x3)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *
 | 
					 | 
					 | 
					 | 
					 *
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 * FWRETRACT:
 | 
					 | 
					 | 
					 | 
					 * FWRETRACT:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  autoretract_enabled
 | 
					 | 
					 | 
					 | 
					 *  M209 S    autoretract_enabled
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  retract_length
 | 
					 | 
					 | 
					 | 
					 *  M207 S    retract_length
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  retract_length_swap
 | 
					 | 
					 | 
					 | 
					 *  M207 W    retract_length_swap
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  retract_feedrate
 | 
					 | 
					 | 
					 | 
					 *  M207 F    retract_feedrate
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  retract_zlift
 | 
					 | 
					 | 
					 | 
					 *  M207 Z    retract_zlift
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  retract_recover_length
 | 
					 | 
					 | 
					 | 
					 *  M208 S    retract_recover_length
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  retract_recover_length_swap
 | 
					 | 
					 | 
					 | 
					 *  M208 W    retract_recover_length_swap
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  retract_recover_feedrate
 | 
					 | 
					 | 
					 | 
					 *  M208 F    retract_recover_feedrate
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *
 | 
					 | 
					 | 
					 | 
					 *
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  volumetric_enabled
 | 
					 | 
					 | 
					 | 
					 *  M200 D    volumetric_enabled (D>0 makes this enabled)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *
 | 
					 | 
					 | 
					 | 
					 *
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  filament_size (x4)
 | 
					 | 
					 | 
					 | 
					 *  M200 T D  filament_size (x4) (T0..3)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *
 | 
					 | 
					 | 
					 | 
					 *
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 * Z_DUAL_ENDSTOPS
 | 
					 | 
					 | 
					 | 
					 * Z_DUAL_ENDSTOPS:
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *  z_endstop_adj
 | 
					 | 
					 | 
					 | 
					 *  M666 Z    z_endstop_adj
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 *
 | 
					 | 
					 | 
					 | 
					 *
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 */
 | 
					 | 
					 | 
					 | 
					 */
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include "Marlin.h"
 | 
					 | 
					 | 
					 | 
					#include "Marlin.h"
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -96,8 +96,8 @@
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include "configuration_store.h"
 | 
					 | 
					 | 
					 | 
					#include "configuration_store.h"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#ifdef MESH_BED_LEVELING
 | 
					 | 
					 | 
					 | 
					#ifdef MESH_BED_LEVELING
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					   #include "mesh_bed_leveling.h"
 | 
					 | 
					 | 
					 | 
					  #include "mesh_bed_leveling.h"
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#endif  // MESH_BED_LEVELING
 | 
					 | 
					 | 
					 | 
					#endif
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					void _EEPROM_writeData(int &pos, uint8_t* value, uint8_t size) {
 | 
					 | 
					 | 
					 | 
					void _EEPROM_writeData(int &pos, uint8_t* value, uint8_t size) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  uint8_t c;
 | 
					 | 
					 | 
					 | 
					  uint8_t c;
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -122,7 +122,9 @@ void _EEPROM_readData(int &pos, uint8_t* value, uint8_t size) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#define EEPROM_WRITE_VAR(pos, value) _EEPROM_writeData(pos, (uint8_t*)&value, sizeof(value))
 | 
					 | 
					 | 
					 | 
					#define EEPROM_WRITE_VAR(pos, value) _EEPROM_writeData(pos, (uint8_t*)&value, sizeof(value))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#define EEPROM_READ_VAR(pos, value) _EEPROM_readData(pos, (uint8_t*)&value, sizeof(value))
 | 
					 | 
					 | 
					 | 
					#define EEPROM_READ_VAR(pos, value) _EEPROM_readData(pos, (uint8_t*)&value, sizeof(value))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					//======================================================================================
 | 
					 | 
					 | 
					 | 
					/**
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 * Store Configuration Settings - M500
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 */
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#define DUMMY_PID_VALUE 3000.0f
 | 
					 | 
					 | 
					 | 
					#define DUMMY_PID_VALUE 3000.0f
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -166,9 +168,7 @@ void Config_StoreSettings()  {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    EEPROM_WRITE_VAR(i, mesh_num_x);
 | 
					 | 
					 | 
					 | 
					    EEPROM_WRITE_VAR(i, mesh_num_x);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    EEPROM_WRITE_VAR(i, mesh_num_y);
 | 
					 | 
					 | 
					 | 
					    EEPROM_WRITE_VAR(i, mesh_num_y);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    dummy = 0.0f;
 | 
					 | 
					 | 
					 | 
					    dummy = 0.0f;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    for (int q=0; q<mesh_num_x*mesh_num_y; q++) {
 | 
					 | 
					 | 
					 | 
					    for (int q=0; q<mesh_num_x*mesh_num_y; q++) EEPROM_WRITE_VAR(i, dummy);
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      EEPROM_WRITE_VAR(i, dummy);
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #endif // MESH_BED_LEVELING
 | 
					 | 
					 | 
					 | 
					  #endif // MESH_BED_LEVELING
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #ifndef ENABLE_AUTO_BED_LEVELING
 | 
					 | 
					 | 
					 | 
					  #ifndef ENABLE_AUTO_BED_LEVELING
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -235,7 +235,7 @@ void Config_StoreSettings()  {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  EEPROM_WRITE_VAR(i, bedKi);
 | 
					 | 
					 | 
					 | 
					  EEPROM_WRITE_VAR(i, bedKi);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  EEPROM_WRITE_VAR(i, bedKd);
 | 
					 | 
					 | 
					 | 
					  EEPROM_WRITE_VAR(i, bedKd);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #ifndef DOGLCD
 | 
					 | 
					 | 
					 | 
					  #ifndef HAS_LCD_CONTRAST
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    int lcd_contrast = 32;
 | 
					 | 
					 | 
					 | 
					    int lcd_contrast = 32;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #endif
 | 
					 | 
					 | 
					 | 
					  #endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  EEPROM_WRITE_VAR(i, lcd_contrast);
 | 
					 | 
					 | 
					 | 
					  EEPROM_WRITE_VAR(i, lcd_contrast);
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -286,6 +286,10 @@ void Config_StoreSettings()  {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOLNPGM(" bytes)");
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOLNPGM(" bytes)");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					/**
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 * Retrieve Configuration Settings - M501
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 */
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					void Config_RetrieveSettings() {
 | 
					 | 
					 | 
					 | 
					void Config_RetrieveSettings() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  int i = EEPROM_OFFSET;
 | 
					 | 
					 | 
					 | 
					  int i = EEPROM_OFFSET;
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -319,30 +323,21 @@ void Config_RetrieveSettings() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    EEPROM_READ_VAR(i, max_e_jerk);
 | 
					 | 
					 | 
					 | 
					    EEPROM_READ_VAR(i, max_e_jerk);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    EEPROM_READ_VAR(i, home_offset);
 | 
					 | 
					 | 
					 | 
					    EEPROM_READ_VAR(i, home_offset);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    uint8_t mesh_num_x = 0;
 | 
					 | 
					 | 
					 | 
					    uint8_t dummy_uint8 = 0, mesh_num_x = 0, mesh_num_y = 0;
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    uint8_t mesh_num_y = 0;
 | 
					 | 
					 | 
					 | 
					    EEPROM_READ_VAR(i, dummy_uint8);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    EEPROM_READ_VAR(i, mesh_num_x);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    EEPROM_READ_VAR(i, mesh_num_y);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #ifdef MESH_BED_LEVELING
 | 
					 | 
					 | 
					 | 
					    #ifdef MESH_BED_LEVELING
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      EEPROM_READ_VAR(i, mbl.active);
 | 
					 | 
					 | 
					 | 
					      mbl.active = dummy_uint8;
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      EEPROM_READ_VAR(i, mesh_num_x);
 | 
					 | 
					 | 
					 | 
					      if (mesh_num_x == MESH_NUM_X_POINTS && mesh_num_y == MESH_NUM_Y_POINTS) {
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      EEPROM_READ_VAR(i, mesh_num_y);
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      if (mesh_num_x != MESH_NUM_X_POINTS ||
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          mesh_num_y != MESH_NUM_Y_POINTS) {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        mbl.reset();
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        for (int q=0; q<mesh_num_x*mesh_num_y; q++) {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          EEPROM_READ_VAR(i, dummy);
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        }
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      } else {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        EEPROM_READ_VAR(i, mbl.z_values);
 | 
					 | 
					 | 
					 | 
					        EEPROM_READ_VAR(i, mbl.z_values);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      } else {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        mbl.reset();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        for (int q = 0; q < mesh_num_x * mesh_num_y; q++) EEPROM_READ_VAR(i, dummy);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      }
 | 
					 | 
					 | 
					 | 
					      }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #else
 | 
					 | 
					 | 
					 | 
					    #else
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      uint8_t dummy_uint8 = 0;
 | 
					 | 
					 | 
					 | 
					      for (int q = 0; q < mesh_num_x * mesh_num_y; q++) EEPROM_READ_VAR(i, dummy);
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      EEPROM_READ_VAR(i, dummy_uint8);
 | 
					 | 
					 | 
					 | 
					    #endif // MESH_BED_LEVELING
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      EEPROM_READ_VAR(i, mesh_num_x);
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      EEPROM_READ_VAR(i, mesh_num_y);
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      for (int q=0; q<mesh_num_x*mesh_num_y; q++) {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        EEPROM_READ_VAR(i, dummy);
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      }
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #endif  // MESH_BED_LEVELING
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #ifndef ENABLE_AUTO_BED_LEVELING
 | 
					 | 
					 | 
					 | 
					    #ifndef ENABLE_AUTO_BED_LEVELING
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      float zprobe_zoffset = 0;
 | 
					 | 
					 | 
					 | 
					      float zprobe_zoffset = 0;
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -412,7 +407,7 @@ void Config_RetrieveSettings() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      for (int q=2; q--;) EEPROM_READ_VAR(i, dummy); // bedKi, bedKd
 | 
					 | 
					 | 
					 | 
					      for (int q=2; q--;) EEPROM_READ_VAR(i, dummy); // bedKi, bedKd
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #ifndef DOGLCD
 | 
					 | 
					 | 
					 | 
					    #ifndef HAS_LCD_CONTRAST
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      int lcd_contrast;
 | 
					 | 
					 | 
					 | 
					      int lcd_contrast;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #endif
 | 
					 | 
					 | 
					 | 
					    #endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    EEPROM_READ_VAR(i, lcd_contrast);
 | 
					 | 
					 | 
					 | 
					    EEPROM_READ_VAR(i, lcd_contrast);
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -467,6 +462,10 @@ void Config_RetrieveSettings() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#endif // EEPROM_SETTINGS
 | 
					 | 
					 | 
					 | 
					#endif // EEPROM_SETTINGS
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					/**
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 * Reset Configuration Settings - M502
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 */
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					void Config_ResetDefault() {
 | 
					 | 
					 | 
					 | 
					void Config_ResetDefault() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  float tmp1[] = DEFAULT_AXIS_STEPS_PER_UNIT;
 | 
					 | 
					 | 
					 | 
					  float tmp1[] = DEFAULT_AXIS_STEPS_PER_UNIT;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  float tmp2[] = DEFAULT_MAX_FEEDRATE;
 | 
					 | 
					 | 
					 | 
					  float tmp2[] = DEFAULT_MAX_FEEDRATE;
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -522,7 +521,7 @@ void Config_ResetDefault() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    absPreheatFanSpeed = ABS_PREHEAT_FAN_SPEED;
 | 
					 | 
					 | 
					 | 
					    absPreheatFanSpeed = ABS_PREHEAT_FAN_SPEED;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #endif
 | 
					 | 
					 | 
					 | 
					  #endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #ifdef DOGLCD
 | 
					 | 
					 | 
					 | 
					  #ifdef HAS_LCD_CONTRAST
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    lcd_contrast = DEFAULT_LCD_CONTRAST;
 | 
					 | 
					 | 
					 | 
					    lcd_contrast = DEFAULT_LCD_CONTRAST;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #endif
 | 
					 | 
					 | 
					 | 
					  #endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -584,14 +583,20 @@ void Config_ResetDefault() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#ifndef DISABLE_M503
 | 
					 | 
					 | 
					 | 
					#ifndef DISABLE_M503
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					/**
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 * Print Configuration Settings - M503
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 */
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#define CONFIG_ECHO_START do{ if (!forReplay) SERIAL_ECHO_START; }while(0)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					void Config_PrintSettings(bool forReplay) {
 | 
					 | 
					 | 
					 | 
					void Config_PrintSettings(bool forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  // Always have this function, even with EEPROM_SETTINGS disabled, the current values will be shown
 | 
					 | 
					 | 
					 | 
					  // Always have this function, even with EEPROM_SETTINGS disabled, the current values will be shown
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					  CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (!forReplay) {
 | 
					 | 
					 | 
					 | 
					  if (!forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOLNPGM("Steps per unit:");
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOLNPGM("Steps per unit:");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					    CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  }
 | 
					 | 
					 | 
					 | 
					  }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR("  M92 X", axis_steps_per_unit[X_AXIS]);
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR("  M92 X", axis_steps_per_unit[X_AXIS]);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" Y", axis_steps_per_unit[Y_AXIS]);
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" Y", axis_steps_per_unit[Y_AXIS]);
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -599,23 +604,23 @@ void Config_PrintSettings(bool forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" E", axis_steps_per_unit[E_AXIS]);
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" E", axis_steps_per_unit[E_AXIS]);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					  SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					  CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #ifdef SCARA
 | 
					 | 
					 | 
					 | 
					  #ifdef SCARA
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("Scaling factors:");
 | 
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("Scaling factors:");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					      CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR("  M365 X", axis_scaling[X_AXIS]);
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR("  M365 X", axis_scaling[X_AXIS]);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" Y", axis_scaling[Y_AXIS]);
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" Y", axis_scaling[Y_AXIS]);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" Z", axis_scaling[Z_AXIS]);
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" Z", axis_scaling[Z_AXIS]);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					    SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					    CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #endif // SCARA
 | 
					 | 
					 | 
					 | 
					  #endif // SCARA
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (!forReplay) {
 | 
					 | 
					 | 
					 | 
					  if (!forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOLNPGM("Maximum feedrates (mm/s):");
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOLNPGM("Maximum feedrates (mm/s):");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					    CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  }
 | 
					 | 
					 | 
					 | 
					  }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR("  M203 X", max_feedrate[X_AXIS]);
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR("  M203 X", max_feedrate[X_AXIS]);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" Y", max_feedrate[Y_AXIS]);
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" Y", max_feedrate[Y_AXIS]);
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -623,160 +628,224 @@ void Config_PrintSettings(bool forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" E", max_feedrate[E_AXIS]);
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" E", max_feedrate[E_AXIS]);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					  SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					  CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (!forReplay) {
 | 
					 | 
					 | 
					 | 
					  if (!forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOLNPGM("Maximum Acceleration (mm/s2):");
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOLNPGM("Maximum Acceleration (mm/s2):");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					    CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  }
 | 
					 | 
					 | 
					 | 
					  }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR("  M201 X", max_acceleration_units_per_sq_second[X_AXIS] );
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR("  M201 X", max_acceleration_units_per_sq_second[X_AXIS]);
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" Y", max_acceleration_units_per_sq_second[Y_AXIS] );
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" Y", max_acceleration_units_per_sq_second[Y_AXIS]);
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" Z", max_acceleration_units_per_sq_second[Z_AXIS] );
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" Z", max_acceleration_units_per_sq_second[Z_AXIS]);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" E", max_acceleration_units_per_sq_second[E_AXIS]);
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" E", max_acceleration_units_per_sq_second[E_AXIS]);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					  SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					  CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (!forReplay) {
 | 
					 | 
					 | 
					 | 
					  if (!forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOLNPGM("Accelerations: P=printing, R=retract and T=travel");
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOLNPGM("Accelerations: P=printing, R=retract and T=travel");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					    CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  }
 | 
					 | 
					 | 
					 | 
					  }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR("  M204 P", acceleration );
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR("  M204 P", acceleration);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" R", retract_acceleration);
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" R", retract_acceleration);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" T", travel_acceleration);
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" T", travel_acceleration);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					  SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					  CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (!forReplay) {
 | 
					 | 
					 | 
					 | 
					  if (!forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOLNPGM("Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s),  Z=maximum Z jerk (mm/s),  E=maximum E jerk (mm/s)");
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOLNPGM("Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s),  Z=maximum Z jerk (mm/s),  E=maximum E jerk (mm/s)");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					    CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  }
 | 
					 | 
					 | 
					 | 
					  }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR("  M205 S", minimumfeedrate );
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR("  M205 S", minimumfeedrate);
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" T", mintravelfeedrate );
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" T", mintravelfeedrate);
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" B", minsegmenttime );
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" B", minsegmenttime);
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" X", max_xy_jerk );
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" X", max_xy_jerk);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" Z", max_z_jerk);
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" Z", max_z_jerk);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" E", max_e_jerk);
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" E", max_e_jerk);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					  SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					  CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (!forReplay) {
 | 
					 | 
					 | 
					 | 
					  if (!forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOLNPGM("Home offset (mm):");
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOLNPGM("Home offset (mm):");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					    CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  }
 | 
					 | 
					 | 
					 | 
					  }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR("  M206 X", home_offset[X_AXIS] );
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR("  M206 X", home_offset[X_AXIS]);
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" Y", home_offset[Y_AXIS] );
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" Y", home_offset[Y_AXIS]);
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" Z", home_offset[Z_AXIS] );
 | 
					 | 
					 | 
					 | 
					  SERIAL_ECHOPAIR(" Z", home_offset[Z_AXIS]);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					  SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  #ifdef MESH_BED_LEVELING
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("Mesh bed leveling:");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      CONFIG_ECHO_START;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR("  M420 S", (int32_t)mbl.active);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" X", MESH_NUM_X_POINTS);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" Y", MESH_NUM_Y_POINTS);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    for (int y=0; y<MESH_NUM_Y_POINTS; y++) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      for (int x=0; x<MESH_NUM_X_POINTS; x++) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        CONFIG_ECHO_START;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        SERIAL_ECHOPAIR("  M421 X", mbl.get_x(x));
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        SERIAL_ECHOPAIR(" Y", mbl.get_y(y));
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        SERIAL_ECHOPAIR(" Z", mbl.z_values[y][x]);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  #endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #ifdef DELTA
 | 
					 | 
					 | 
					 | 
					  #ifdef DELTA
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					    CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("Endstop adjustment (mm):");
 | 
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("Endstop adjustment (mm):");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					      CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR("  M666 X", endstop_adj[X_AXIS] );
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR("  M666 X", endstop_adj[X_AXIS]);
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" Y", endstop_adj[Y_AXIS] );
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" Y", endstop_adj[Y_AXIS]);
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" Z", endstop_adj[Z_AXIS] );
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" Z", endstop_adj[Z_AXIS]);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					    SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					    CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOLNPGM("Delta settings: L=delta_diagonal_rod, R=delta_radius, S=delta_segments_per_second");
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOLNPGM("Delta settings: L=delta_diagonal_rod, R=delta_radius, S=delta_segments_per_second");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					    CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR("  M665 L", delta_diagonal_rod );
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR("  M665 L", delta_diagonal_rod);
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" R", delta_radius );
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" R", delta_radius);
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" S", delta_segments_per_second );
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" S", delta_segments_per_second);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					    SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #elif defined(Z_DUAL_ENDSTOPS)
 | 
					 | 
					 | 
					 | 
					  #elif defined(Z_DUAL_ENDSTOPS)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					    CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("Z2 Endstop adjustment (mm):");
 | 
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("Z2 Endstop adjustment (mm):");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					      CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR("  M666 Z", z_endstop_adj );
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR("  M666 Z", z_endstop_adj);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_EOL;  
 | 
					 | 
					 | 
					 | 
					    SERIAL_EOL;  
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #endif // DELTA
 | 
					 | 
					 | 
					 | 
					  #endif // DELTA
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  #ifdef ULTIPANEL
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    CONFIG_ECHO_START;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("Material heatup parameters:");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      CONFIG_ECHO_START;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR("  M145 M0 H", (unsigned long)plaPreheatHotendTemp);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" B", (unsigned long)plaPreheatHPBTemp);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" F", (unsigned long)plaPreheatFanSpeed);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    CONFIG_ECHO_START;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR("  M145 M1 H", (unsigned long)absPreheatHotendTemp);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" B", (unsigned long)absPreheatHPBTemp);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" F", (unsigned long)absPreheatFanSpeed);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  #endif // ULTIPANEL
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #if defined(PIDTEMP) || defined(PIDTEMPBED)
 | 
					 | 
					 | 
					 | 
					  #if defined(PIDTEMP) || defined(PIDTEMPBED)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    CONFIG_ECHO_START;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("PID settings:");
 | 
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("PID settings:");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #if defined(PIDTEMP) && defined(PIDTEMPBED)
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #endif
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #ifdef PIDTEMP
 | 
					 | 
					 | 
					 | 
					    #ifdef PIDTEMP
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHOPAIR("  M301 P", PID_PARAM(Kp, 0)); // for compatibility with hosts, only echos values for E0
 | 
					 | 
					 | 
					 | 
					      #if EXTRUDERS > 1
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHOPAIR(" I", unscalePID_i(PID_PARAM(Ki, 0)));
 | 
					 | 
					 | 
					 | 
					        if (forReplay) {
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHOPAIR(" D", unscalePID_d(PID_PARAM(Kd, 0)));
 | 
					 | 
					 | 
					 | 
					          for (uint8_t i = 0; i < EXTRUDERS; i++) {
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					            CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #endif
 | 
					 | 
					 | 
					 | 
					            SERIAL_ECHOPAIR("  M301 E", (unsigned long)i);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            SERIAL_ECHOPAIR(" P", PID_PARAM(Kp, i));
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            SERIAL_ECHOPAIR(" I", unscalePID_i(PID_PARAM(Ki, i)));
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            SERIAL_ECHOPAIR(" D", unscalePID_d(PID_PARAM(Kd, i)));
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            #ifdef PID_ADD_EXTRUSION_RATE
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					              SERIAL_ECHOPAIR(" C", PID_PARAM(Kc, i));
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            #endif      
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					          }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        else
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      #endif // EXTRUDERS > 1
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      // !forReplay || EXTRUDERS == 1
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        CONFIG_ECHO_START;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        SERIAL_ECHOPAIR("  M301 P", PID_PARAM(Kp, 0)); // for compatibility with hosts, only echo values for E0
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        SERIAL_ECHOPAIR(" I", unscalePID_i(PID_PARAM(Ki, 0)));
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        SERIAL_ECHOPAIR(" D", unscalePID_d(PID_PARAM(Kd, 0)));
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        #ifdef PID_ADD_EXTRUSION_RATE
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					          SERIAL_ECHOPAIR(" C", PID_PARAM(Kc, 0));
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        #endif      
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    #endif // PIDTEMP
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #ifdef PIDTEMPBED
 | 
					 | 
					 | 
					 | 
					    #ifdef PIDTEMPBED
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHOPAIR("  M304 P", bedKp); // for compatibility with hosts, only echos values for E0
 | 
					 | 
					 | 
					 | 
					      CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      SERIAL_ECHOPAIR("  M304 P", bedKp);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHOPAIR(" I", unscalePID_i(bedKi));
 | 
					 | 
					 | 
					 | 
					      SERIAL_ECHOPAIR(" I", unscalePID_i(bedKi));
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHOPAIR(" D", unscalePID_d(bedKd));
 | 
					 | 
					 | 
					 | 
					      SERIAL_ECHOPAIR(" D", unscalePID_d(bedKd));
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					      SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #endif
 | 
					 | 
					 | 
					 | 
					    #endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  #endif // PIDTEMP || PIDTEMPBED
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  #ifdef HAS_LCD_CONTRAST
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    CONFIG_ECHO_START;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("LCD Contrast:");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      CONFIG_ECHO_START;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR("  M250 C", (unsigned long)lcd_contrast);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #endif
 | 
					 | 
					 | 
					 | 
					  #endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #ifdef FWRETRACT
 | 
					 | 
					 | 
					 | 
					  #ifdef FWRETRACT
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					    CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("Retract: S=Length (mm) F:Speed (mm/m) Z: ZLift (mm)");
 | 
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("Retract: S=Length (mm) F:Speed (mm/m) Z: ZLift (mm)");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					      CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR("  M207 S", retract_length);
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR("  M207 S", retract_length);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    #if EXTRUDERS > 1
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      SERIAL_ECHOPAIR(" W", retract_length_swap);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    #endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" F", retract_feedrate*60);
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" F", retract_feedrate*60);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" Z", retract_zlift);
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" Z", retract_zlift);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					    SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					    CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("Recover: S=Extra length (mm) F:Speed (mm/m)");
 | 
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("Recover: S=Extra length (mm) F:Speed (mm/m)");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					      CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR("  M208 S", retract_recover_length);
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR("  M208 S", retract_recover_length);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    #if EXTRUDERS > 1
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      SERIAL_ECHOPAIR(" W", retract_recover_length_swap);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    #endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" F", retract_recover_feedrate*60);
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR(" F", retract_recover_feedrate*60);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					    SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					    CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("Auto-Retract: S=0 to disable, 1 to interpret extrude-only moves as retracts or recoveries");
 | 
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("Auto-Retract: S=0 to disable, 1 to interpret extrude-only moves as retracts or recoveries");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					      CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR("  M209 S", (unsigned long)(autoretract_enabled ? 1 : 0));
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR("  M209 S", (unsigned long)(autoretract_enabled ? 1 : 0));
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					    SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #if EXTRUDERS > 1
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      if (!forReplay) {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        SERIAL_ECHOLNPGM("Multi-extruder settings:");
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        SERIAL_ECHOPAIR("   Swap retract length (mm):    ", retract_length_swap);
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        SERIAL_ECHOPAIR("   Swap rec. addl. length (mm): ", retract_recover_length_swap);
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      }
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #endif // EXTRUDERS > 1
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #endif // FWRETRACT
 | 
					 | 
					 | 
					 | 
					  #endif // FWRETRACT
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (volumetric_enabled) {
 | 
					 | 
					 | 
					 | 
					  if (volumetric_enabled) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      CONFIG_ECHO_START;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("Filament settings:");
 | 
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("Filament settings:");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    CONFIG_ECHO_START;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR("  M200 D", filament_size[0]);
 | 
					 | 
					 | 
					 | 
					    SERIAL_ECHOPAIR("  M200 D", filament_size[0]);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					    SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #if EXTRUDERS > 1
 | 
					 | 
					 | 
					 | 
					    #if EXTRUDERS > 1
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					      CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHOPAIR("  M200 T1 D", filament_size[1]);
 | 
					 | 
					 | 
					 | 
					      SERIAL_ECHOPAIR("  M200 T1 D", filament_size[1]);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					      SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      #if EXTRUDERS > 2
 | 
					 | 
					 | 
					 | 
					      #if EXTRUDERS > 2
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					        CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        SERIAL_ECHOPAIR("  M200 T2 D", filament_size[2]);
 | 
					 | 
					 | 
					 | 
					        SERIAL_ECHOPAIR("  M200 T2 D", filament_size[2]);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					        SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        #if EXTRUDERS > 3
 | 
					 | 
					 | 
					 | 
					        #if EXTRUDERS > 3
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					          CONFIG_ECHO_START;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          SERIAL_ECHOPAIR("  M200 T3 D", filament_size[3]);
 | 
					 | 
					 | 
					 | 
					          SERIAL_ECHOPAIR("  M200 T3 D", filament_size[3]);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          SERIAL_EOL;
 | 
					 | 
					 | 
					 | 
					          SERIAL_EOL;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        #endif
 | 
					 | 
					 | 
					 | 
					        #endif
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -785,21 +854,23 @@ void Config_PrintSettings(bool forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } else {
 | 
					 | 
					 | 
					 | 
					  } else {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
					 | 
					 | 
					 | 
					    if (!forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      CONFIG_ECHO_START;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("Filament settings: Disabled");
 | 
					 | 
					 | 
					 | 
					      SERIAL_ECHOLNPGM("Filament settings: Disabled");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  }
 | 
					 | 
					 | 
					 | 
					  }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #ifdef ENABLE_AUTO_BED_LEVELING
 | 
					 | 
					 | 
					 | 
					  #ifdef ENABLE_AUTO_BED_LEVELING
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #ifdef CUSTOM_M_CODES
 | 
					 | 
					 | 
					 | 
					    #ifdef CUSTOM_M_CODES
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      if (!forReplay) {
 | 
					 | 
					 | 
					 | 
					      if (!forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        CONFIG_ECHO_START;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        SERIAL_ECHOLNPGM("Z-Probe Offset (mm):");
 | 
					 | 
					 | 
					 | 
					        SERIAL_ECHOLNPGM("Z-Probe Offset (mm):");
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        SERIAL_ECHO_START;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      }
 | 
					 | 
					 | 
					 | 
					      }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      CONFIG_ECHO_START;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHOPAIR("  M", (unsigned long)CUSTOM_M_CODE_SET_Z_PROBE_OFFSET);
 | 
					 | 
					 | 
					 | 
					      SERIAL_ECHOPAIR("  M", (unsigned long)CUSTOM_M_CODE_SET_Z_PROBE_OFFSET);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      SERIAL_ECHOPAIR(" Z", -zprobe_zoffset);
 | 
					 | 
					 | 
					 | 
					      SERIAL_ECHOPAIR(" Z", -zprobe_zoffset);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #else
 | 
					 | 
					 | 
					 | 
					    #else
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      if (!forReplay) {
 | 
					 | 
					 | 
					 | 
					      if (!forReplay) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        CONFIG_ECHO_START;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        SERIAL_ECHOPAIR("Z-Probe Offset (mm):", -zprobe_zoffset);
 | 
					 | 
					 | 
					 | 
					        SERIAL_ECHOPAIR("Z-Probe Offset (mm):", -zprobe_zoffset);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      }
 | 
					 | 
					 | 
					 | 
					      }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #endif
 | 
					 | 
					 | 
					 | 
					    #endif
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
 
 |