|  |  | @ -10271,6 +10271,31 @@ inline void invalid_extruder_error(const uint8_t e) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | #endif // PARKING_EXTRUDER
 |  |  |  | #endif // PARKING_EXTRUDER
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | #if HAS_FANMUX | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   void fanmux_switch(const uint8_t e) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     WRITE(FANMUX0_PIN, TEST(e, 0) ? HIGH : LOW); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     #if PIN_EXISTS(FANMUX1) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       WRITE(FANMUX1_PIN, TEST(e, 1) ? HIGH : LOW); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       #if PIN_EXISTS(FANMUX2) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         WRITE(FANMUX2, TEST(e, 2) ? HIGH : LOW); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       #endif | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     #endif | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   FORCE_INLINE void fanmux_init(void){ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     SET_OUTPUT(FANMUX0_PIN); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     #if PIN_EXISTS(FANMUX1) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       SET_OUTPUT(FANMUX1_PIN); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       #if PIN_EXISTS(FANMUX2) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         SET_OUTPUT(FANMUX2_PIN); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       #endif  | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     #endif | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     fanmux_switch(0); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | #endif // HAS_FANMUX
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | /**
 |  |  |  | /**
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  * Perform a tool-change, which may result in moving the |  |  |  |  * Perform a tool-change, which may result in moving the | 
			
		
	
		
		
			
				
					
					|  |  |  |  * previous tool out of the way and the new tool into place. |  |  |  |  * previous tool out of the way and the new tool into place. | 
			
		
	
	
		
		
			
				
					|  |  | @ -10353,7 +10378,7 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n | 
			
		
	
		
		
			
				
					
					|  |  |  |           current_position[Y_AXIS] -= hotend_offset[Y_AXIS][active_extruder] - hotend_offset[Y_AXIS][tmp_extruder]; |  |  |  |           current_position[Y_AXIS] -= hotend_offset[Y_AXIS][active_extruder] - hotend_offset[Y_AXIS][tmp_extruder]; | 
			
		
	
		
		
			
				
					
					|  |  |  |           current_position[Z_AXIS] -= hotend_offset[Z_AXIS][active_extruder] - hotend_offset[Z_AXIS][tmp_extruder]; |  |  |  |           current_position[Z_AXIS] -= hotend_offset[Z_AXIS][active_extruder] - hotend_offset[Z_AXIS][tmp_extruder]; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |           // Activate the new extruder
 |  |  |  |           // Activate the new extruder ahead of calling set_axis_is_at_home!
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |           active_extruder = tmp_extruder; |  |  |  |           active_extruder = tmp_extruder; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |           // This function resets the max/min values - the current position may be overwritten below.
 |  |  |  |           // This function resets the max/min values - the current position may be overwritten below.
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -10687,14 +10712,19 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n | 
			
		
	
		
		
			
				
					
					|  |  |  |         select_multiplexed_stepper(tmp_extruder); |  |  |  |         select_multiplexed_stepper(tmp_extruder); | 
			
		
	
		
		
			
				
					
					|  |  |  |       #endif |  |  |  |       #endif | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       // Set the new active extruder
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       active_extruder = tmp_extruder; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     #endif // HOTENDS <= 1
 |  |  |  |     #endif // HOTENDS <= 1
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     #if ENABLED(SWITCHING_EXTRUDER) && !DONT_SWITCH |  |  |  |     #if ENABLED(SWITCHING_EXTRUDER) && !DONT_SWITCH | 
			
		
	
		
		
			
				
					
					|  |  |  |       stepper.synchronize(); |  |  |  |       stepper.synchronize(); | 
			
		
	
		
		
			
				
					
					|  |  |  |       move_extruder_servo(tmp_extruder); |  |  |  |       move_extruder_servo(active_extruder); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     #endif |  |  |  |     #endif | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     active_extruder = tmp_extruder; |  |  |  |     #if HAS_FANMUX | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       fanmux_switch(active_extruder); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     #endif | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     SERIAL_ECHO_START(); |  |  |  |     SERIAL_ECHO_START(); | 
			
		
	
		
		
			
				
					
					|  |  |  |     SERIAL_ECHOLNPAIR(MSG_ACTIVE_EXTRUDER, (int)active_extruder); |  |  |  |     SERIAL_ECHOLNPAIR(MSG_ACTIVE_EXTRUDER, (int)active_extruder); | 
			
		
	
	
		
		
			
				
					|  |  | @ -13434,6 +13464,10 @@ void setup() { | 
			
		
	
		
		
			
				
					
					|  |  |  |     SET_OUTPUT(E_MUX2_PIN); |  |  |  |     SET_OUTPUT(E_MUX2_PIN); | 
			
		
	
		
		
			
				
					
					|  |  |  |   #endif |  |  |  |   #endif | 
			
		
	
		
		
			
				
					
					|  |  |  |    |  |  |  |    | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   #if HAS_FANMUX | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     fanmux_init(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   #endif | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |    | 
			
		
	
		
		
			
				
					
					|  |  |  |   lcd_init(); |  |  |  |   lcd_init(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   #ifndef CUSTOM_BOOTSCREEN_TIMEOUT |  |  |  |   #ifndef CUSTOM_BOOTSCREEN_TIMEOUT | 
			
		
	
	
		
		
			
				
					|  |  | 
 |