| 
					
				 | 
			
			
				@@ -102,6 +102,8 @@ int8_t SDscrool = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 int8_t SilentModeMenu = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 int8_t FSensorStateMenu = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+extern void fsensor_enable(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+extern void fsensor_disable(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifdef SNMM 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2472,8 +2474,14 @@ void EEPROM_read(int pos, uint8_t* value, uint8_t size) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void lcd_fsensor_state_set() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!FSensorStateMenu==0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        fsensor_disable(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        fsensor_enable(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	FSensorStateMenu = !FSensorStateMenu; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	lcd_goto_menu(lcd_settings_menu, 7); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void lcd_silent_mode_set() { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -4365,10 +4373,10 @@ static void lcd_selftest() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if (_result) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//current_position[X_AXIS] = current_position[X_AXIS] + 14; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//current_position[Y_AXIS] = current_position[Y_AXIS] + 12; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifdef HAVE_TMC2130_DRIVERS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		tmc2130_home_exit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		sg_homing_delay = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		enable_endstops(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		current_position[X_AXIS] = current_position[X_AXIS] + 14; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		current_position[Y_AXIS] = current_position[Y_AXIS] + 12; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -4429,33 +4437,31 @@ static bool lcd_selfcheck_axis_sg(char axis) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	current_position[axis] = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#ifdef HAVE_TMC2130_DRIVERS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	tmc2130_home_exit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	sg_homing_delay = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	tmc2130_axis_stalled[axis] = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	enable_endstops(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	for (char i = 0; i < 2; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		/*SERIAL_ECHOPGM("i = "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		MYSERIAL.println(int(i)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		SERIAL_ECHOPGM("Current position 2:"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		MYSERIAL.println(current_position[axis]);*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (i == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			current_position[axis] -= (axis_length + margin); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			/*SERIAL_ECHOPGM("Current position 3:"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			MYSERIAL.println(current_position[axis]);*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			current_position[axis] -= margin; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			st_synchronize(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			current_position[axis] -= axis_length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifdef HAVE_TMC2130_DRIVERS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tmc2130_home_enter(axis); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		tmc2130_home_enter(X_AXIS_MASK << axis); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			current_position[axis] -= (axis_length + margin); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		st_synchronize(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifdef HAVE_TMC2130_DRIVERS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		sg_homing_delay = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		tmc2130_home_exit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		//current_position[axis] = st_get_position_mm(axis); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -4463,17 +4469,18 @@ static bool lcd_selfcheck_axis_sg(char axis) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		current_position_init = st_get_position_mm(axis); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (i == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (i < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			current_position[axis] += margin; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			st_synchronize(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			current_position[axis] += axis_length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], manual_feedrate[0] / 60, active_extruder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifdef HAVE_TMC2130_DRIVERS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			tmc2130_home_enter(axis); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			tmc2130_home_enter(X_AXIS_MASK << axis); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			st_synchronize(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifdef HAVE_TMC2130_DRIVERS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			sg_homing_delay = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			tmc2130_home_exit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			//current_position[axis] = st_get_position_mm(axis); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -4489,7 +4496,9 @@ static bool lcd_selfcheck_axis_sg(char axis) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if (abs(measured_axis_length[i] - axis_length) > max_error_mm) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			//axis length 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifdef HAVE_TMC2130_DRIVERS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			sg_homing_delay = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			tmc2130_home_exit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			enable_endstops(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			const char *_error_1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			const char *_error_2; 
			 |