@ -1300,6 +1300,10 @@ static void setup_for_endstop_move() {
 
			
		
	
		
		
			
				
					
					    feedrate  =  oldFeedRate ; 
    feedrate  =  oldFeedRate ; 
 
			
		
	
		
		
			
				
					
					  } 
  } 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  inline  void  do_blocking_move_to_xy ( float  x ,  float  y )  {  do_blocking_move_to ( x ,  y ,  current_position [ Z_AXIS ] ) ;  } 
 
			
		
	
		
		
			
				
					
					  inline  void  do_blocking_move_to_x ( float  x )  {  do_blocking_move_to ( x ,  current_position [ Y_AXIS ] ,  current_position [ Z_AXIS ] ) ;  } 
 
			
		
	
		
		
			
				
					
					  inline  void  do_blocking_move_to_z ( float  z )  {  do_blocking_move_to ( current_position [ X_AXIS ] ,  current_position [ Y_AXIS ] ,  z ) ;  } 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  static  void  clean_up_after_endstop_move ( )  { 
  static  void  clean_up_after_endstop_move ( )  { 
 
			
		
	
		
		
			
				
					
					    # ifdef ENDSTOPS_ONLY_FOR_HOMING 
    # ifdef ENDSTOPS_ONLY_FOR_HOMING 
 
			
		
	
		
		
			
				
					
					      enable_endstops ( false ) ; 
      enable_endstops ( false ) ; 
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -1408,7 +1412,7 @@ static void setup_for_endstop_move() {
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        # if Z_RAISE_AFTER_PROBING > 0 
        # if Z_RAISE_AFTER_PROBING > 0 
 
			
		
	
		
		
			
				
					
					          if  ( doRaise )  { 
          if  ( doRaise )  { 
 
			
		
	
		
		
			
				
					
					            do_blocking_move_to ( current_position [ X_AXIS ] ,  current_position [ Y_AXIS ] ,  current_position [ Z_AXIS ]  +  Z_RAISE_AFTER_PROBING ) ;  // this also updates current_position
 
            do_blocking_move_to _z(  current_position [ Z_AXIS ]  +  Z_RAISE_AFTER_PROBING ) ;  // this also updates current_position
 
 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					            st_synchronize ( ) ; 
            st_synchronize ( ) ; 
 
			
		
	
		
		
			
				
					
					          } 
          } 
 
			
		
	
		
		
			
				
					
					        # endif 
        # endif 
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -1494,8 +1498,8 @@ static void setup_for_endstop_move() {
 
			
		
	
		
		
			
				
					
					  // Probe bed height at position (x,y), returns the measured z value
 
  // Probe bed height at position (x,y), returns the measured z value
 
 
			
		
	
		
		
			
				
					
					  static  float  probe_pt ( float  x ,  float  y ,  float  z_before ,  ProbeAction  probe_action = ProbeDeployAndStow ,  int  verbose_level = 1 )  { 
  static  float  probe_pt ( float  x ,  float  y ,  float  z_before ,  ProbeAction  probe_action = ProbeDeployAndStow ,  int  verbose_level = 1 )  { 
 
			
		
	
		
		
			
				
					
					    // Move Z up to the z_before height, then move the probe to the given XY
 
    // Move Z up to the z_before height, then move the probe to the given XY
 
 
			
		
	
		
		
			
				
					
					    do_blocking_move_to ( current_position [ X_AXIS ] ,  current_position [ Y_AXIS ] ,  z_before ) ;  // this also updates current_position
 
    do_blocking_move_to _z(  z_before ) ;  // this also updates current_position
 
 
			
				
				
			
		
	
		
		
			
				
					
					    do_blocking_move_to ( x  -  X_PROBE_OFFSET_FROM_EXTRUDER ,  y  -  Y_PROBE_OFFSET_FROM_EXTRUDER ,  current_position [ Z_AXIS ] ) ;  // this also updates current_position
 
    do_blocking_move_to _xy ( x  -  X_PROBE_OFFSET_FROM_EXTRUDER ,  y  -  Y_PROBE_OFFSET_FROM_EXTRUDER ) ;  // this also updates current_position
 
 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    # if !defined(Z_PROBE_SLED) && !defined(Z_PROBE_ALLEN_KEY) 
    # if !defined(Z_PROBE_SLED) && !defined(Z_PROBE_ALLEN_KEY) 
 
			
		
	
		
		
			
				
					
					      if  ( probe_action  &  ProbeDeploy )  deploy_z_probe ( ) ; 
      if  ( probe_action  &  ProbeDeploy )  deploy_z_probe ( ) ; 
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -1604,20 +1608,18 @@ static void setup_for_endstop_move() {
 
			
		
	
		
		
			
				
					
					      return ; 
      return ; 
 
			
		
	
		
		
			
				
					
					    } 
    } 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    float  oldXpos  =  current_position [ X_AXIS ] ;  // save x position
 
 
			
		
	
		
		
			
				
					
					    if  ( dock )  { 
    if  ( dock )  { 
 
			
		
	
		
		
			
				
					
					      float  oldXpos  =  current_position [ X_AXIS ] ;  // save x position
 
      do_blocking_move_to_z ( current_position [ Z_AXIS ]  +  Z_RAISE_AFTER_PROBING ) ;  // raise Z   
 
 
			
				
				
			
		
	
		
		
			
				
					
					      do_blocking_move_to ( current_position [ X_AXIS ] ,  current_position [ Y_AXIS ] ,  current_position [ Z_AXIS ]  +  Z_RAISE_AFTER_PROBING ) ;  // rise Z   
 
      do_blocking_move_to_x ( X_MAX_POS  +  SLED_DOCKING_OFFSET  +  offset  -  1 ) ;   // Dock sled a bit closer to ensure proper capturing
 
 
			
				
				
			
		
	
		
		
			
				
					
					      do_blocking_move_to ( X_MAX_POS  +  SLED_DOCKING_OFFSET  +  offset  -  1 ,  current_position [ Y_AXIS ] ,  current_position [ Z_AXIS ] ) ;   // Dock sled a bit closer to ensure proper capturing                                                                                                                           
 
 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					      digitalWrite ( SLED_PIN ,  LOW ) ;  // turn off magnet
 
      digitalWrite ( SLED_PIN ,  LOW ) ;  // turn off magnet
 
 
			
		
	
		
		
			
				
					
					      do_blocking_move_to ( oldXpos ,  current_position [ Y_AXIS ] ,  current_position [ Z_AXIS ] ) ;  // return to position before docking
 
 
			
		
	
		
		
			
				
					
					    }  else  { 
    }  else  { 
 
			
		
	
		
		
			
				
					
					      float  oldXpos  =  current_position [ X_AXIS ] ;  // save x position
 
 
			
		
	
		
		
			
				
					
					      float  z_loc  =  current_position [ Z_AXIS ] ; 
      float  z_loc  =  current_position [ Z_AXIS ] ; 
 
			
		
	
		
		
			
				
					
					      if  ( z_loc  <  Z_RAISE_BEFORE_PROBING  +  5 )  z_loc  =  Z_RAISE_BEFORE_PROBING ; 
      if  ( z_loc  <  Z_RAISE_BEFORE_PROBING  +  5 )  z_loc  =  Z_RAISE_BEFORE_PROBING ; 
 
			
		
	
		
		
			
				
					
					      do_blocking_move_to ( X_MAX_POS  +  SLED_DOCKING_OFFSET  +  offset ,  current_position [ Y_AXIS ] ,  z_loc ) ;  // this also updates current_position
 
      do_blocking_move_to ( X_MAX_POS  +  SLED_DOCKING_OFFSET  +  offset ,  current_position [ Y_AXIS ] ,  z_loc ) ;  // this also updates current_position
 
 
			
		
	
		
		
			
				
					
					      digitalWrite ( SLED_PIN ,  HIGH ) ;  // turn on magnet
 
      digitalWrite ( SLED_PIN ,  HIGH ) ;  // turn on magnet
 
 
			
		
	
		
		
			
				
					
					      do_blocking_move_to ( oldXpos ,  current_position [ Y_AXIS ] ,  current_position [ Z_AXIS ] ) ;  // return to position before docking
 
 
			
		
	
		
		
			
				
					
					    } 
    } 
 
			
		
	
		
		
			
				
					
					    do_blocking_move_to_x ( oldXpos ) ;  // return to position before docking
 
 
			
		
	
		
		
			
				
					
					  } 
  } 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					# endif  // Z_PROBE_SLED
 # endif  // Z_PROBE_SLED
  
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -4559,8 +4561,7 @@ inline void gcode_M400() { st_synchronize(); }
 
			
		
	
		
		
			
				
					
					    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 ; 
 
			
		
	
		
		
			
				
					
					      if  ( zpos  <  z_dest ) 
      if  ( zpos  <  z_dest )  do_blocking_move_to_z ( z_dest ) ;  // also updates current_position
 
 
			
				
				
			
		
	
		
		
			
				
					
					        do_blocking_move_to ( current_position [ X_AXIS ] ,  current_position [ Y_AXIS ] ,  z_dest ) ;  // also updates current_position
 
 
			
		
	
		
		
	
		
		
			
				
					
					    } 
    } 
 
			
		
	
		
		
			
				
					
					  # endif 
  # endif