| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -314,8 +314,8 @@ bool target_direction;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  };
 | 
					 | 
					 | 
					 | 
					  };
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#endif
 | 
					 | 
					 | 
					 | 
					#endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#ifdef SERVO_ENDSTOPS
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const int servo_endstops[] = SERVO_ENDSTOPS;
 | 
					 | 
					 | 
					 | 
					  const int servo_endstops[] = SERVO_ENDSTOPS;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#if HAS_SERVO_ENDSTOPS
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const int servo_endstop_angles[][2] = SERVO_ENDSTOP_ANGLES;
 | 
					 | 
					 | 
					 | 
					  const int servo_endstop_angles[][2] = SERVO_ENDSTOP_ANGLES;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#endif
 | 
					 | 
					 | 
					 | 
					#endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -578,7 +578,7 @@ void servo_init() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #endif
 | 
					 | 
					 | 
					 | 
					  #endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  // Set position of Servo Endstops that are defined
 | 
					 | 
					 | 
					 | 
					  // Set position of Servo Endstops that are defined
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #ifdef SERVO_ENDSTOPS
 | 
					 | 
					 | 
					 | 
					  #if HAS_SERVO_ENDSTOPS
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    for (int i = 0; i < 3; i++)
 | 
					 | 
					 | 
					 | 
					    for (int i = 0; i < 3; i++)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      if (servo_endstops[i] >= 0)
 | 
					 | 
					 | 
					 | 
					      if (servo_endstops[i] >= 0)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        servo[servo_endstops[i]].move(servo_endstop_angles[i][1]);
 | 
					 | 
					 | 
					 | 
					        servo[servo_endstops[i]].move(servo_endstop_angles[i][1]);
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -1322,7 +1322,7 @@ static void setup_for_endstop_move() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  static void deploy_z_probe() {
 | 
					 | 
					 | 
					 | 
					  static void deploy_z_probe() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #ifdef SERVO_ENDSTOPS
 | 
					 | 
					 | 
					 | 
					    #if HAS_SERVO_ENDSTOPS
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      // Engage Z Servo endstop if enabled
 | 
					 | 
					 | 
					 | 
					      // Engage Z Servo endstop if enabled
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      if (servo_endstops[Z_AXIS] >= 0) servo[servo_endstops[Z_AXIS]].move(servo_endstop_angles[Z_AXIS][0]);
 | 
					 | 
					 | 
					 | 
					      if (servo_endstops[Z_AXIS] >= 0) servo[servo_endstops[Z_AXIS]].move(servo_endstop_angles[Z_AXIS][0]);
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -1412,7 +1412,7 @@ static void setup_for_endstop_move() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  static void stow_z_probe(bool doRaise=true) {
 | 
					 | 
					 | 
					 | 
					  static void stow_z_probe(bool doRaise=true) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #ifdef SERVO_ENDSTOPS
 | 
					 | 
					 | 
					 | 
					    #if HAS_SERVO_ENDSTOPS
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      // Retract Z Servo endstop if enabled
 | 
					 | 
					 | 
					 | 
					      // Retract Z Servo endstop if enabled
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      if (servo_endstops[Z_AXIS] >= 0) {
 | 
					 | 
					 | 
					 | 
					      if (servo_endstops[Z_AXIS] >= 0) {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -1676,7 +1676,7 @@ static void homeaxis(AxisEnum axis) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #endif
 | 
					 | 
					 | 
					 | 
					    #endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #ifdef SERVO_ENDSTOPS
 | 
					 | 
					 | 
					 | 
					    #if HAS_SERVO_ENDSTOPS
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      // Engage Servo endstop if enabled
 | 
					 | 
					 | 
					 | 
					      // Engage Servo endstop if enabled
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      if (axis != Z_AXIS && servo_endstops[axis] >= 0)
 | 
					 | 
					 | 
					 | 
					      if (axis != Z_AXIS && servo_endstops[axis] >= 0)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        servo[servo_endstops[axis]].move(servo_endstop_angles[axis][0]);
 | 
					 | 
					 | 
					 | 
					        servo[servo_endstops[axis]].move(servo_endstop_angles[axis][0]);
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -1778,7 +1778,7 @@ static void homeaxis(AxisEnum axis) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #endif
 | 
					 | 
					 | 
					 | 
					    #endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    {
 | 
					 | 
					 | 
					 | 
					    {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      #ifdef SERVO_ENDSTOPS
 | 
					 | 
					 | 
					 | 
					      #if HAS_SERVO_ENDSTOPS
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        // Retract Servo endstop if enabled
 | 
					 | 
					 | 
					 | 
					        // Retract Servo endstop if enabled
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (servo_endstops[axis] >= 0)
 | 
					 | 
					 | 
					 | 
					        if (servo_endstops[axis] >= 0)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          servo[servo_endstops[axis]].move(servo_endstop_angles[axis][1]);
 | 
					 | 
					 | 
					 | 
					          servo[servo_endstops[axis]].move(servo_endstop_angles[axis][1]);
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -2778,7 +2778,7 @@ inline void gcode_G28() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        //      added here, it could be seen as a compensating factor for the Z probe.
 | 
					 | 
					 | 
					 | 
					        //      added here, it could be seen as a compensating factor for the Z probe.
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        //
 | 
					 | 
					 | 
					 | 
					        //
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        current_position[Z_AXIS] = -zprobe_zoffset + (z_tmp - real_z)
 | 
					 | 
					 | 
					 | 
					        current_position[Z_AXIS] = -zprobe_zoffset + (z_tmp - real_z)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          #if defined(SERVO_ENDSTOPS) || ENABLED(Z_PROBE_ALLEN_KEY) || ENABLED(Z_PROBE_SLED)
 | 
					 | 
					 | 
					 | 
					          #if HAS_SERVO_ENDSTOPS || ENABLED(Z_PROBE_ALLEN_KEY) || ENABLED(Z_PROBE_SLED)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					             + Z_RAISE_AFTER_PROBING
 | 
					 | 
					 | 
					 | 
					             + Z_RAISE_AFTER_PROBING
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          #endif
 | 
					 | 
					 | 
					 | 
					          #endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          ;
 | 
					 | 
					 | 
					 | 
					          ;
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -4570,9 +4570,9 @@ inline void gcode_M303() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 */
 | 
					 | 
					 | 
					 | 
					 */
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					inline void gcode_M400() { st_synchronize(); }
 | 
					 | 
					 | 
					 | 
					inline void gcode_M400() { st_synchronize(); }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#if defined(ENABLE_AUTO_BED_LEVELING) && !defined(Z_PROBE_SLED) && (defined(SERVO_ENDSTOPS) || defined(Z_PROBE_ALLEN_KEY))
 | 
					 | 
					 | 
					 | 
					#if defined(ENABLE_AUTO_BED_LEVELING) && !defined(Z_PROBE_SLED) && (HAS_SERVO_ENDSTOPS || defined(Z_PROBE_ALLEN_KEY))
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  #ifdef SERVO_ENDSTOPS
 | 
					 | 
					 | 
					 | 
					  #if HAS_SERVO_ENDSTOPS
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    void raise_z_for_servo() {
 | 
					 | 
					 | 
					 | 
					    void raise_z_for_servo() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      float zpos = current_position[Z_AXIS], z_dest = Z_RAISE_BEFORE_HOMING;
 | 
					 | 
					 | 
					 | 
					      float zpos = current_position[Z_AXIS], z_dest = Z_RAISE_BEFORE_HOMING;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      z_dest += axis_known_position[Z_AXIS] ? zprobe_zoffset : zpos;
 | 
					 | 
					 | 
					 | 
					      z_dest += axis_known_position[Z_AXIS] ? zprobe_zoffset : zpos;
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -4584,7 +4584,7 @@ inline void gcode_M400() { st_synchronize(); }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					   * M401: Engage Z Servo endstop if available
 | 
					 | 
					 | 
					 | 
					   * M401: Engage Z Servo endstop if available
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					   */
 | 
					 | 
					 | 
					 | 
					   */
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  inline void gcode_M401() {
 | 
					 | 
					 | 
					 | 
					  inline void gcode_M401() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #ifdef SERVO_ENDSTOPS
 | 
					 | 
					 | 
					 | 
					    #if HAS_SERVO_ENDSTOPS
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      raise_z_for_servo();
 | 
					 | 
					 | 
					 | 
					      raise_z_for_servo();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #endif
 | 
					 | 
					 | 
					 | 
					    #endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    deploy_z_probe();
 | 
					 | 
					 | 
					 | 
					    deploy_z_probe();
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -4594,13 +4594,13 @@ inline void gcode_M400() { st_synchronize(); }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					   * M402: Retract Z Servo endstop if enabled
 | 
					 | 
					 | 
					 | 
					   * M402: Retract Z Servo endstop if enabled
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					   */
 | 
					 | 
					 | 
					 | 
					   */
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  inline void gcode_M402() {
 | 
					 | 
					 | 
					 | 
					  inline void gcode_M402() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #ifdef SERVO_ENDSTOPS
 | 
					 | 
					 | 
					 | 
					    #if HAS_SERVO_ENDSTOPS
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      raise_z_for_servo();
 | 
					 | 
					 | 
					 | 
					      raise_z_for_servo();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #endif
 | 
					 | 
					 | 
					 | 
					    #endif
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    stow_z_probe(false);
 | 
					 | 
					 | 
					 | 
					    stow_z_probe(false);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  }
 | 
					 | 
					 | 
					 | 
					  }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#endif // ENABLE_AUTO_BED_LEVELING && (SERVO_ENDSTOPS || Z_PROBE_ALLEN_KEY) && !Z_PROBE_SLED
 | 
					 | 
					 | 
					 | 
					#endif // ENABLE_AUTO_BED_LEVELING && (HAS_SERVO_ENDSTOPS || Z_PROBE_ALLEN_KEY) && !Z_PROBE_SLED
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#ifdef FILAMENT_SENSOR
 | 
					 | 
					 | 
					 | 
					#ifdef FILAMENT_SENSOR
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -5645,14 +5645,14 @@ void process_next_command() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        gcode_M400();
 | 
					 | 
					 | 
					 | 
					        gcode_M400();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        break;
 | 
					 | 
					 | 
					 | 
					        break;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      #if defined(ENABLE_AUTO_BED_LEVELING) && (defined(SERVO_ENDSTOPS) || defined(Z_PROBE_ALLEN_KEY)) && !defined(Z_PROBE_SLED)
 | 
					 | 
					 | 
					 | 
					      #if defined(ENABLE_AUTO_BED_LEVELING) && (HAS_SERVO_ENDSTOPS || defined(Z_PROBE_ALLEN_KEY)) && !defined(Z_PROBE_SLED)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        case 401:
 | 
					 | 
					 | 
					 | 
					        case 401:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          gcode_M401();
 | 
					 | 
					 | 
					 | 
					          gcode_M401();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          break;
 | 
					 | 
					 | 
					 | 
					          break;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        case 402:
 | 
					 | 
					 | 
					 | 
					        case 402:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          gcode_M402();
 | 
					 | 
					 | 
					 | 
					          gcode_M402();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          break;
 | 
					 | 
					 | 
					 | 
					          break;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      #endif // ENABLE_AUTO_BED_LEVELING && (SERVO_ENDSTOPS || Z_PROBE_ALLEN_KEY) && !Z_PROBE_SLED
 | 
					 | 
					 | 
					 | 
					      #endif // ENABLE_AUTO_BED_LEVELING && (HAS_SERVO_ENDSTOPS || Z_PROBE_ALLEN_KEY) && !Z_PROBE_SLED
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      #ifdef FILAMENT_SENSOR
 | 
					 | 
					 | 
					 | 
					      #ifdef FILAMENT_SENSOR
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        case 404:  //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or display nominal filament width
 | 
					 | 
					 | 
					 | 
					        case 404:  //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or display nominal filament width
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
 
 |