Browse Source

Remove ancient SNMM code in the MK3 branch

Alex Voinea 2 years ago
parent
commit
a6331d22c8
43 changed files with 81 additions and 1194 deletions
  1. 0 2
      Firmware/Marlin.h
  2. 2 8
      Firmware/MarlinSerial.cpp
  3. 2 104
      Firmware/Marlin_main.cpp
  4. 3 3
      Firmware/eeprom.h
  5. 0 4
      Firmware/messages.cpp
  6. 1 330
      Firmware/mmu.cpp
  7. 0 23
      Firmware/mmu.h
  8. 0 5
      Firmware/pins_Rambo_1_0.h
  9. 0 5
      Firmware/pins_Rambo_1_3.h
  10. 2 10
      Firmware/stepper.cpp
  11. 32 631
      Firmware/ultralcd.cpp
  12. 0 4
      Firmware/ultralcd.h
  13. 2 21
      Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h
  14. 2 21
      Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h
  15. 2 0
      Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h
  16. 2 0
      Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h
  17. 2 0
      Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h
  18. 2 0
      Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h
  19. 2 0
      Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h
  20. 2 0
      Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h
  21. 1 1
      lang/lang_en.txt
  22. 1 1
      lang/lang_en_cz.txt
  23. 1 1
      lang/lang_en_de.txt
  24. 1 1
      lang/lang_en_es.txt
  25. 1 1
      lang/lang_en_fr.txt
  26. 1 1
      lang/lang_en_it.txt
  27. 1 1
      lang/lang_en_nl.txt
  28. 1 1
      lang/lang_en_pl.txt
  29. 1 1
      lang/po/Firmware.pot
  30. 1 1
      lang/po/Firmware_cs.po
  31. 1 1
      lang/po/Firmware_de.po
  32. 1 1
      lang/po/Firmware_es.po
  33. 1 1
      lang/po/Firmware_fr.po
  34. 1 1
      lang/po/Firmware_it.po
  35. 1 1
      lang/po/Firmware_nl.po
  36. 1 1
      lang/po/Firmware_pl.po
  37. 1 1
      lang/po/new/cs.po
  38. 1 1
      lang/po/new/de.po
  39. 1 1
      lang/po/new/es.po
  40. 1 1
      lang/po/new/fr.po
  41. 1 1
      lang/po/new/it.po
  42. 1 1
      lang/po/new/nl.po
  43. 1 1
      lang/po/new/pl.po

+ 0 - 2
Firmware/Marlin.h

@@ -329,14 +329,12 @@ extern uint8_t host_keepalive_interval;
 extern unsigned long starttime;
 extern unsigned long stoptime;
 extern ShortTimer usb_timer;
-extern int bowden_length[4];
 extern bool homing_flag;
 extern bool loading_flag;
 extern unsigned long total_filament_used;
 void save_statistics(unsigned long _total_filament_used, unsigned long _total_print_time);
 extern uint8_t status_number;
 extern uint8_t heating_status_counter;
-extern char snmm_filaments_used;
 extern unsigned long PingTime;
 extern bool no_response;
 extern uint8_t important_status;

+ 2 - 8
Firmware/MarlinSerial.cpp

@@ -75,7 +75,7 @@ ISR(M_USARTx_RX_vect)
 #endif //DEBUG_DUMP_TO_2ND_SERIAL
 	}
 }
-#ifndef SNMM
+
 ISR(USART1_RX_vect)
 {
 	// Test for a framing error.
@@ -97,7 +97,6 @@ ISR(USART1_RX_vect)
 	}
 }
 #endif
-#endif
 
 // Public Methods //////////////////////////////////////////////////////////////
 
@@ -131,8 +130,6 @@ void MarlinSerial::begin(long baud)
   sbi(M_UCSRxB, M_TXENx);
   sbi(M_UCSRxB, M_RXCIEx);
   
-#ifndef SNMM
-
   if (selectedSerialPort == 1) { //set up also the second serial port 
 	  if (useU2X) {
 		  UCSR1A = 1 << U2X1;
@@ -148,9 +145,8 @@ void MarlinSerial::begin(long baud)
 	  
 	  sbi(UCSR1B, RXEN1);
 	  sbi(UCSR1B, TXEN1);
-	  sbi(UCSR1B, RXCIE1);	  
+	  sbi(UCSR1B, RXCIE1);
   }
-#endif
 }
 
 void MarlinSerial::end()
@@ -159,11 +155,9 @@ void MarlinSerial::end()
   cbi(M_UCSRxB, M_TXENx);
   cbi(M_UCSRxB, M_RXCIEx);
 
-#ifndef SNMM
   cbi(UCSR1B, RXEN1);
   cbi(UCSR1B, TXEN1);
   cbi(UCSR1B, RXCIE1);
-#endif
 }
 
 

+ 2 - 104
Firmware/Marlin_main.cpp

@@ -190,7 +190,6 @@ int extruder_multiply[EXTRUDERS] = {100
   #endif
 };
 
-int bowden_length[4] = {385, 385, 385, 385};
 
 bool homing_flag = false;
 
@@ -219,8 +218,6 @@ bool loading_flag = false;
 
 #define XY_NO_RESTORE_FLAG (mesh_bed_leveling_flag || homing_flag)
 
-char snmm_filaments_used = 0;
-
 
 bool fan_state[2];
 int fan_edge_counter[2];
@@ -769,13 +766,6 @@ static void factory_reset(char level)
 		menu_progressbar_finish();
 		softReset();
 		break;
-
-
-#ifdef SNMM
-	case 5:
-		bowden_menu();
-		break;
-#endif
 	default:
 		break;
 	}
@@ -1493,15 +1483,6 @@ void setup()
 #endif //DEBUG_SD_SPEED_TEST
 
     eeprom_init();
-#ifdef SNMM
-	if (eeprom_read_dword((uint32_t*)EEPROM_BOWDEN_LENGTH) == 0x0ffffffff) { //bowden length used for SNMM
-	  int _z = BOWDEN_LENGTH;
-	  for(uint8_t i = 0; i < 4; i++) {
-	  	eeprom_update_word((uint16_t*)EEPROM_BOWDEN_LENGTH + i, _z);
-	  }
-	}
-#endif
-
   // In the future, somewhere here would one compare the current firmware version against the firmware version stored in the EEPROM.
   // If they differ, an update procedure may need to be performed. At the end of this block, the current firmware version
   // is being written into the EEPROM, so the update procedure will be triggered only once.
@@ -1569,7 +1550,6 @@ void setup()
 #ifdef PAT9125
 	fsensor_setup_interrupt();
 #endif //PAT9125
-	eeprom_update_block(bowden_length, (uint16_t*)EEPROM_BOWDEN_LENGTH, sizeof(bowden_length));
 
 #ifndef DEBUG_DISABLE_STARTMSGS
   KEEPALIVE_STATE(PAUSED_FOR_USER);
@@ -4257,12 +4237,6 @@ void process_commands()
 
   // PRUSA GCODES
   KEEPALIVE_STATE(IN_HANDLER);
-
-#ifdef SNMM
-  float tmp_motor[3] = DEFAULT_PWM_MOTOR_CURRENT;
-  float tmp_motor_loud[3] = DEFAULT_PWM_MOTOR_CURRENT_LOUD;
-  int8_t SilentMode;
-#endif
     /*!
 
     ---------------------------------------------------------------------------------
@@ -6903,7 +6877,6 @@ Sigma_Exit:
           #endif
         }
       }
-	  snmm_filaments_used = 0;
       break;
 
     /*!
@@ -8881,20 +8854,11 @@ Sigma_Exit:
         M702 [ U | C ]
     
     #### Parameters
-    - `U` - Unload all filaments used in current print
     - `C` - Unload just current filament
     - without any parameters unload all filaments
     */
 	case 702:
 	{
-#ifdef SNMM
-		if (code_seen('U'))
-			extr_unload_used(); //! if "U" unload all filaments which were used in current print
-		else if (code_seen('C'))
-			extr_unload(); //! if "C" unload just current filament
-		else
-			extr_unload_all(); //! otherwise unload all filaments
-#else
 		if (code_seen('C')) {
 			if(mmu_enabled) extr_unload(); //! if "C" unload current filament; if mmu is not present no action is performed
 		}
@@ -8902,8 +8866,6 @@ Sigma_Exit:
 			if(mmu_enabled) extr_unload(); //! unload current filament
 			else unload_filament();
 		}
-
-#endif //SNMM
 	}
 	break;
 
@@ -8996,7 +8958,6 @@ Sigma_Exit:
               }
           }
           st_synchronize();
-          snmm_filaments_used |= (1 << tmp_extruder); //for stop print
 
           if (mmu_enabled)
           {
@@ -9027,47 +8988,6 @@ Sigma_Exit:
           }
           else
           {
-#ifdef SNMM
-              mmu_extruder = tmp_extruder;
-
-              _delay(100);
-
-              disable_e0();
-              disable_e1();
-              disable_e2();
-
-              SET_OUTPUT(E_MUX0_PIN);
-              SET_OUTPUT(E_MUX1_PIN);
-
-              _delay(100);
-              SERIAL_ECHO_START;
-              SERIAL_ECHO("T:");
-              SERIAL_ECHOLN((int)tmp_extruder);
-              switch (tmp_extruder) {
-              case 1:
-                  WRITE(E_MUX0_PIN, HIGH);
-                  WRITE(E_MUX1_PIN, LOW);
-
-                  break;
-              case 2:
-                  WRITE(E_MUX0_PIN, LOW);
-                  WRITE(E_MUX1_PIN, HIGH);
-
-                  break;
-              case 3:
-                  WRITE(E_MUX0_PIN, HIGH);
-                  WRITE(E_MUX1_PIN, HIGH);
-
-                  break;
-              default:
-                  WRITE(E_MUX0_PIN, LOW);
-                  WRITE(E_MUX1_PIN, LOW);
-
-                  break;
-              }
-              _delay(100);
-
-#else //SNMM
               if (tmp_extruder >= EXTRUDERS) {
                   SERIAL_ECHO_START;
                   SERIAL_ECHO('T');
@@ -9111,8 +9031,6 @@ Sigma_Exit:
                   SERIAL_ECHORPGM(_n("Active Extruder: "));////MSG_ACTIVE_EXTRUDER
                   SERIAL_PROTOCOLLN((int)active_extruder);
               }
-
-#endif //SNMM
           }
       }
   } // end if(code_seen('T')) (end of T codes)
@@ -12039,35 +11957,15 @@ void M600_wait_for_user(float HotendTempBckp) {
 
 void M600_load_filament_movements()
 {
-#ifdef SNMM
-	display_loading();
-	do
-	{
-		current_position[E_AXIS] += 0.002;
-		plan_buffer_line_curposXYZE(500, active_extruder);
-		delay_keep_alive(2);
-	}
-	while (!lcd_clicked());
-	st_synchronize();
-	current_position[E_AXIS] += bowden_length[mmu_extruder];
-	plan_buffer_line_curposXYZE(3000, active_extruder);
-	current_position[E_AXIS] += FIL_LOAD_LENGTH - 60;
-	plan_buffer_line_curposXYZE(1400, active_extruder);
-	current_position[E_AXIS] += 40;
-	plan_buffer_line_curposXYZE(400, active_extruder);
-	current_position[E_AXIS] += 10;
-	plan_buffer_line_curposXYZE(50, active_extruder);
-#else
-	current_position[E_AXIS]+= FILAMENTCHANGE_FIRSTFEED ;
+	current_position[E_AXIS]+= FILAMENTCHANGE_FIRSTFEED;
 	plan_buffer_line_curposXYZE(FILAMENTCHANGE_EFEED_FIRST);
-#endif                
 	load_filament_final_feed();
 	lcd_loading_filament();
 	st_synchronize();
 }
 
 void M600_load_filament() {
-	//load filament for single material and SNMM 
+	//load filament for single material and MMU
 	lcd_wait_interact();
 
 	//load_filament_time = _millis();

+ 3 - 3
Firmware/eeprom.h

@@ -122,7 +122,7 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
 | 0x0FB0h 4016		| int16		| EEPROM_PROBE_TEMP_SHIFT				| ???			| ???					| ???												| ??? 			| D3 Ax0fb0 C10
 | 0x0FAFh 4015		| bool		| EEPROM_TEMP_CAL_ACTIVE				| 00h 0			| 00h 0					| PINDA Temp cal.: __inactive__						| LCD menu		| D3 Ax0faf C1
 | ^					| ^			| ^										| ffh 255		| ^						| PINDA Temp cal.: __active__						| ^ 			| ^
-| 0x0FA7h 4007		| uint32	| EEPROM_BOWDEN_LENGTH					| ???			| ff 00 00 00h			| Bowden length										| ??? 			| D3 Ax0fae C8
+| 0x0FA7h 4007		| ???		| _EEPROM_FREE_NR6_						| ???			| 						| _Free EEPROM space_								| ??? 			| D3 Ax0fae C8
 | ^					| ^			| ^										| ^				| 00 00 00 00h			| ^													| ^ 			| ^
 | 0x0FA6h 4006		| uint8		| EEPROM_CALIBRATION_STATUS_PINDA		| 00h 0			| ffh 255				| PINDA Temp: __not calibrated__					| ??? 			| D3 Ax0fa6 C1
 | ^					| ^			| ^										| 01h 1			| ^						| PINDA Temp: __calibrated__						| ^ 			| ^
@@ -379,8 +379,8 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
 #define EEPROM_PRINT_FLAG (EEPROM_TOSHIBA_FLASH_AIR_COMPATIBLITY-1)
 #define EEPROM_PROBE_TEMP_SHIFT (EEPROM_PRINT_FLAG - 2*5) //5 x int for storing pinda probe temp shift relative to 50 C; unit: motor steps 
 #define EEPROM_TEMP_CAL_ACTIVE (EEPROM_PROBE_TEMP_SHIFT - 1)
-#define EEPROM_BOWDEN_LENGTH (EEPROM_TEMP_CAL_ACTIVE - 2*4) //4 x int for bowden lengths for multimaterial
-#define EEPROM_CALIBRATION_STATUS_PINDA (EEPROM_BOWDEN_LENGTH - 1) //0 - not calibrated; 1 - calibrated
+#define _EEPROM_FREE_NR6_ (EEPROM_TEMP_CAL_ACTIVE - 2*4) //4 x int (used to be for bowden lengths for SNMM)
+#define EEPROM_CALIBRATION_STATUS_PINDA (_EEPROM_FREE_NR6_ - 1) //0 - not calibrated; 1 - calibrated
 #define EEPROM_UVLO						(EEPROM_CALIBRATION_STATUS_PINDA - 1) //1 - uvlo during print
 #define EEPROM_UVLO_CURRENT_POSITION	(EEPROM_UVLO-2*4) // 2 x float for current_position in X and Y axes
 #define EEPROM_FILENAME (EEPROM_UVLO_CURRENT_POSITION - 8) //8chars to store filename without extension

+ 0 - 4
Firmware/messages.cpp

@@ -34,10 +34,6 @@ const char MSG_FILAMENT[] PROGMEM_I1 = ISTR("Filament"); ////c=17
 const char MSG_FAN_SPEED[] PROGMEM_I1 = ISTR("Fan speed"); ////c=14
 const char MSG_FILAMENT_CLEAN[] PROGMEM_I1 = ISTR("Filament extruding & with correct color?"); ////c=20 r=2
 const char MSG_FILAMENT_LOADED[] PROGMEM_I1 = ISTR("Is filament loaded?"); ////c=20 r=2
-const char MSG_FILAMENT_LOADING_T0[] PROGMEM_I1 = ISTR("Insert filament into extruder 1. Click when done."); ////c=20 r=4
-const char MSG_FILAMENT_LOADING_T1[] PROGMEM_I1 = ISTR("Insert filament into extruder 2. Click when done."); ////c=20 r=4
-const char MSG_FILAMENT_LOADING_T2[] PROGMEM_I1 = ISTR("Insert filament into extruder 3. Click when done."); ////c=20 r=4
-const char MSG_FILAMENT_LOADING_T3[] PROGMEM_I1 = ISTR("Insert filament into extruder 4. Click when done."); ////c=20 r=4
 const char MSG_FILAMENTCHANGE[] PROGMEM_I1 = ISTR("Change filament"); ////c=18
 const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE1[] PROGMEM_I1 = ISTR("Searching bed calibration point"); ////c=20 r=3
 const char MSG_FINISHING_MOVEMENTS[] PROGMEM_I1 = ISTR("Finishing movements"); ////c=20

+ 1 - 330
Firmware/mmu.cpp

@@ -879,7 +879,6 @@ void mmu_M600_load_filament(bool automatic, float nozzle_temp)
     lcd_puts_at_P(0, 1, _T(MSG_LOADING_FILAMENT));
     lcd_print(' ');
     lcd_print(tmp_extruder + 1);
-    snmm_filaments_used |= (1 << tmp_extruder); //for stop print
 
     //printf_P(PSTR("T code: %d \n"), tmp_extruder);
     //mmu_printf_P(PSTR("T%d\n"), tmp_extruder);
@@ -897,86 +896,8 @@ void mmu_M600_load_filament(bool automatic, float nozzle_temp)
     st_synchronize();
 }
 
-
-#ifdef SNMM
-void extr_mov(float shift, float feed_rate)
-{ //move extruder no matter what the current heater temperature is
-	set_extrude_min_temp(.0);
-	current_position[E_AXIS] += shift;
-	plan_buffer_line_curposXYZE(feed_rate, active_extruder);
-	set_extrude_min_temp(EXTRUDE_MINTEMP);
-}
-#endif //SNMM
-
-
-void change_extr(int
-#ifdef SNMM
-        extr
-#endif //SNMM
-        ) { //switches multiplexer for extruders
-#ifdef SNMM
-	st_synchronize();
-	_delay(100);
-
-	disable_e0();
-	disable_e1();
-	disable_e2();
-
-	mmu_extruder = extr;
-
-	SET_OUTPUT(E_MUX0_PIN);
-	SET_OUTPUT(E_MUX1_PIN);
-
-	switch (extr) {
-	case 1:
-		WRITE(E_MUX0_PIN, HIGH);
-		WRITE(E_MUX1_PIN, LOW);
-		
-		break;
-	case 2:
-		WRITE(E_MUX0_PIN, LOW);
-		WRITE(E_MUX1_PIN, HIGH);
-		
-		break;
-	case 3:
-		WRITE(E_MUX0_PIN, HIGH);
-		WRITE(E_MUX1_PIN, HIGH);
-		
-		break;
-	default:
-		WRITE(E_MUX0_PIN, LOW);
-		WRITE(E_MUX1_PIN, LOW);
-		
-		break;
-	}
-	_delay(100);
-#endif
-}
-
-int get_ext_nr()
-{ //reads multiplexer input pins and return current extruder number (counted from 0)
-#ifndef SNMM
-	return(mmu_extruder); //update needed
-#else 
-	return(2 * READ(E_MUX1_PIN) + READ(E_MUX0_PIN));
-#endif
-}
-
-
-void display_loading()
+void extr_adj(uint8_t extruder) //loading filament into the MMU unit
 {
-	switch (mmu_extruder) 
-	{
-	case 1: lcd_display_message_fullscreen_P(_T(MSG_FILAMENT_LOADING_T1)); break;
-	case 2: lcd_display_message_fullscreen_P(_T(MSG_FILAMENT_LOADING_T2)); break;
-	case 3: lcd_display_message_fullscreen_P(_T(MSG_FILAMENT_LOADING_T3)); break;
-	default: lcd_display_message_fullscreen_P(_T(MSG_FILAMENT_LOADING_T0)); break;
-	}
-}
-
-void extr_adj(uint8_t extruder) //loading filament for SNMM
-{
-#ifndef SNMM
     MmuCmd cmd = MmuCmd::L0 + extruder;
     if (extruder > (MmuCmd::L4 - MmuCmd::L0))
     {
@@ -1002,45 +923,6 @@ void extr_adj(uint8_t extruder) //loading filament for SNMM
 	
 	
 	//lcd_return_to_status();
-#else
-
-	bool correct;
-	max_feedrate[E_AXIS] =80;
-	//max_feedrate[E_AXIS] = 50;
-	START:
-	lcd_clear();
-	lcd_set_cursor(0, 0); 
-	switch (extruder) {
-	case 1: lcd_display_message_fullscreen_P(_T(MSG_FILAMENT_LOADING_T1)); break;
-	case 2: lcd_display_message_fullscreen_P(_T(MSG_FILAMENT_LOADING_T2)); break;
-	case 3: lcd_display_message_fullscreen_P(_T(MSG_FILAMENT_LOADING_T3)); break;
-	default: lcd_display_message_fullscreen_P(_T(MSG_FILAMENT_LOADING_T0)); break;   
-	}
-	KEEPALIVE_STATE(PAUSED_FOR_USER);
-	do{
-		extr_mov(0.001,1000);
-		delay_keep_alive(2);
-	} while (!lcd_clicked());
-	//delay_keep_alive(500);
-	KEEPALIVE_STATE(IN_HANDLER);
-	st_synchronize();
-	//correct = lcd_show_fullscreen_message_yes_no_and_wait_P(MSG_FIL_LOADED_CHECK, false);
-	//if (!correct) goto	START;
-	//extr_mov(BOWDEN_LENGTH/2.f, 500); //dividing by 2 is there because of max. extrusion length limitation (x_max + y_max)
-	//extr_mov(BOWDEN_LENGTH/2.f, 500);
-	extr_mov(bowden_length[extruder], 500);
-	lcd_clear();
-	lcd_set_cursor(0, 0); lcd_puts_P(_T(MSG_LOADING_FILAMENT));
-	if(strlen(_T(MSG_LOADING_FILAMENT))>18) lcd_set_cursor(0, 1);
-	else lcd_print(' ');
-	lcd_print(mmu_extruder + 1);
-	lcd_set_cursor(0, 2); lcd_puts_P(_T(MSG_PLEASE_WAIT));
-	st_synchronize();
-	max_feedrate[E_AXIS] = 50;
-	lcd_update_enable(true);
-	lcd_return_to_status();
-	lcdDrawUpdate = 2;
-#endif
 }
 
 struct E_step
@@ -1087,15 +969,8 @@ void extr_unload_view()
 
 void extr_unload()
 { //unload just current filament for multimaterial printers
-#ifdef SNMM
-	float tmp_motor[3] = DEFAULT_PWM_MOTOR_CURRENT;
-	float tmp_motor_loud[3] = DEFAULT_PWM_MOTOR_CURRENT_LOUD;
-	uint8_t SilentMode = eeprom_read_byte((uint8_t*)EEPROM_SILENT);
-#endif
-
 	if (degHotend0() > EXTRUDE_MINTEMP)
 	{
-#ifndef SNMM
 		st_synchronize();
 
         menu_submenu(extr_unload_view);
@@ -1107,58 +982,6 @@ void extr_unload()
 		manage_response(false, true, MMU_UNLOAD_MOVE);
 
         menu_back();
-#else //SNMM
-
-		lcd_clear();
-		lcd_display_message_fullscreen_P(PSTR(""));
-		max_feedrate[E_AXIS] = 50;
-		lcd_set_cursor(0, 0); lcd_puts_P(_T(MSG_UNLOADING_FILAMENT));
-		lcd_print(' ');
-		lcd_print(mmu_extruder + 1);
-		lcd_set_cursor(0, 2); lcd_puts_P(_T(MSG_PLEASE_WAIT));
-		if (current_position[Z_AXIS] < 15) {
-			current_position[Z_AXIS] += 15; //lifting in Z direction to make space for extrusion
-			plan_buffer_line_curposXYZE(25, active_extruder);
-		}
-		
-		current_position[E_AXIS] += 10; //extrusion
-		plan_buffer_line_curposXYZE(10, active_extruder);
-		st_current_set(2, E_MOTOR_HIGH_CURRENT);
-		if (current_temperature[0] < 230) { //PLA & all other filaments
-			current_position[E_AXIS] += 5.4;
-			plan_buffer_line_curposXYZE(2800 / 60, active_extruder);
-			current_position[E_AXIS] += 3.2;
-			plan_buffer_line_curposXYZE(3000 / 60, active_extruder);
-			current_position[E_AXIS] += 3;
-			plan_buffer_line_curposXYZE(3400 / 60, active_extruder);
-		}
-		else { //ABS
-			current_position[E_AXIS] += 3.1;
-			plan_buffer_line_curposXYZE(2000 / 60, active_extruder);
-			current_position[E_AXIS] += 3.1;
-			plan_buffer_line_curposXYZE(2500 / 60, active_extruder);
-			current_position[E_AXIS] += 4;
-			plan_buffer_line_curposXYZE(3000 / 60, active_extruder);
-			/*current_position[X_AXIS] += 23; //delay
-			plan_buffer_line_curposXYZE(600 / 60, active_extruder); //delay
-			current_position[X_AXIS] -= 23; //delay
-			plan_buffer_line_curposXYZE(600 / 60, active_extruder); //delay*/
-			delay_keep_alive(4700);
-		}
-	
-		max_feedrate[E_AXIS] = 80;
-		current_position[E_AXIS] -= (bowden_length[mmu_extruder] + 60 + FIL_LOAD_LENGTH) / 2;
-		plan_buffer_line_curposXYZE(500, active_extruder);
-		current_position[E_AXIS] -= (bowden_length[mmu_extruder] + 60 + FIL_LOAD_LENGTH) / 2;
-		plan_buffer_line_curposXYZE(500, active_extruder);
-		st_synchronize();
-		//st_current_init();
-		if (SilentMode != SILENT_MODE_OFF) st_current_set(2, tmp_motor[2]); //set back to normal operation currents
-		else st_current_set(2, tmp_motor_loud[2]);
-		lcd_update_enable(true);
-		lcd_return_to_status();
-		max_feedrate[E_AXIS] = 50;
-#endif //SNMM
 	}
 	else
 	{
@@ -1166,165 +989,13 @@ void extr_unload()
 	}
 }
 
-//wrapper functions for loading filament
-void extr_adj_0()
-{
-#ifndef SNMM
-	enquecommand_P(PSTR("M701 E0"));
-#else
-	change_extr(0);
-	extr_adj(0);
-#endif
-}
-
-void extr_adj_1()
-{
-#ifndef SNMM
-	enquecommand_P(PSTR("M701 E1"));
-#else
-	change_extr(1);
-	extr_adj(1);
-#endif
-}
-
-void extr_adj_2()
-{
-#ifndef SNMM
-	enquecommand_P(PSTR("M701 E2"));
-#else
-	change_extr(2);
-	extr_adj(2);
-#endif
-}
-
-void extr_adj_3()
-{
-#ifndef SNMM
-	enquecommand_P(PSTR("M701 E3"));
-#else
-	change_extr(3);
-	extr_adj(3);
-#endif
-}
-
-void extr_adj_4()
-{
-#ifndef SNMM
-	enquecommand_P(PSTR("M701 E4"));
-#else
-	change_extr(4);
-	extr_adj(4);
-#endif
-}
-
 void load_all()
 {
-#ifndef SNMM
 	enquecommand_P(PSTR("M701 E0"));
 	enquecommand_P(PSTR("M701 E1"));
 	enquecommand_P(PSTR("M701 E2"));
 	enquecommand_P(PSTR("M701 E3"));
 	enquecommand_P(PSTR("M701 E4"));
-#else
-	for (int i = 0; i < 4; i++)
-	{
-		change_extr(i);
-		extr_adj(i);
-	}
-#endif
-}
-
-//wrapper functions for changing extruders
-void extr_change_0()
-{
-	change_extr(0);
-	lcd_return_to_status();
-}
-
-void extr_change_1()
-{
-	change_extr(1);
-	lcd_return_to_status();
-}
-
-void extr_change_2()
-{
-	change_extr(2);
-	lcd_return_to_status();
-}
-
-void extr_change_3()
-{
-	change_extr(3);
-	lcd_return_to_status();
-}
-
-#ifdef SNMM
-//wrapper functions for unloading filament
-void extr_unload_all()
-{
-	if (degHotend0() > EXTRUDE_MINTEMP)
-	{
-		for (int i = 0; i < 4; i++)
-		{
-			change_extr(i);
-			extr_unload();
-		}
-	}
-	else
-	{
-		show_preheat_nozzle_warning();
-		lcd_return_to_status();
-	}
-}
-
-//unloading just used filament (for snmm)
-void extr_unload_used()
-{
-	if (degHotend0() > EXTRUDE_MINTEMP) {
-		for (int i = 0; i < 4; i++) {
-			if (snmm_filaments_used & (1 << i)) {
-				change_extr(i);
-				extr_unload();
-			}
-		}
-		snmm_filaments_used = 0;
-	}
-	else {
-		show_preheat_nozzle_warning();
-		lcd_return_to_status();
-	}
-}
-#endif //SNMM
-
-void extr_unload_0()
-{
-	change_extr(0);
-	extr_unload();
-}
-
-void extr_unload_1()
-{
-	change_extr(1);
-	extr_unload();
-}
-
-void extr_unload_2()
-{
-	change_extr(2);
-	extr_unload();
-}
-
-void extr_unload_3()
-{
-	change_extr(3);
-	extr_unload();
-}
-
-void extr_unload_4()
-{
-	change_extr(4);
-	extr_unload();
 }
 
 bool mmu_check_version()

+ 0 - 23
Firmware/mmu.h

@@ -101,32 +101,9 @@ extern void mmu_load_to_nozzle();
 extern void mmu_M600_load_filament(bool automatic, float nozzle_temp);
 extern void mmu_M600_wait_and_beep();
 
-extern void extr_mov(float shift, float feed_rate);
-extern void change_extr(int extr);
-extern int get_ext_nr();
-extern void display_loading();
 extern void extr_adj(uint8_t extruder);
 extern void extr_unload();
-
-extern void extr_adj_0();
-extern void extr_adj_1();
-extern void extr_adj_2();
-extern void extr_adj_3();
-extern void extr_adj_4();
 extern void load_all();
-extern void extr_change_0();
-extern void extr_change_1();
-extern void extr_change_2();
-extern void extr_change_3();
-#ifdef SNMM
-extern void extr_unload_all();
-extern void extr_unload_used();
-#endif //SNMM
-extern void extr_unload_0();
-extern void extr_unload_1();
-extern void extr_unload_2();
-extern void extr_unload_3();
-extern void extr_unload_4();
 
 extern bool mmu_check_version();
 extern void mmu_show_warning();

+ 0 - 5
Firmware/pins_Rambo_1_0.h

@@ -64,11 +64,6 @@
 #define E0_MS1_PIN             65
 #define E0_MS2_PIN             66
 
-#ifdef SNMM 
-  #define E_MUX0_PIN 17
-  #define E_MUX1_PIN 16
-#endif
-
 
 #define MOTOR_CURRENT_PWM_XY_PIN 46
 #define MOTOR_CURRENT_PWM_Z_PIN  45

+ 0 - 5
Firmware/pins_Rambo_1_3.h

@@ -67,11 +67,6 @@
 #define E0_MS1_PIN             65
 #define E0_MS2_PIN             66
 
-#ifdef SNMM 
-  #define E_MUX0_PIN 17
-  #define E_MUX1_PIN 16
-#endif
-
 
 #define MOTOR_CURRENT_PWM_XY_PIN 46
 #define MOTOR_CURRENT_PWM_Z_PIN  45

+ 2 - 10
Firmware/stepper.cpp

@@ -446,20 +446,12 @@ FORCE_INLINE void stepper_next_block()
     }
     if ((out_bits & (1 << E_AXIS)) != 0) { // -direction
 #ifndef LIN_ADVANCE
-      WRITE(E0_DIR_PIN, 
-  #ifdef SNMM
-        (mmu_extruder == 0 || mmu_extruder == 2) ? !INVERT_E0_DIR :
-  #endif // SNMM
-        INVERT_E0_DIR);
+      WRITE(E0_DIR_PIN, INVERT_E0_DIR);
 #endif /* LIN_ADVANCE */
       count_direction[E_AXIS] = -1;
     } else { // +direction
 #ifndef LIN_ADVANCE
-      WRITE(E0_DIR_PIN,
-  #ifdef SNMM
-        (mmu_extruder == 0 || mmu_extruder == 2) ? INVERT_E0_DIR :
-  #endif // SNMM
-        !INVERT_E0_DIR);
+      WRITE(E0_DIR_PIN, !INVERT_E0_DIR);
 #endif /* LIN_ADVANCE */
       count_direction[E_AXIS] = 1;
     }

+ 32 - 631
Firmware/ultralcd.cpp

@@ -239,18 +239,11 @@ static void lcd_detect_IRsensor();
 static void lcd_selftest_error(TestError error, const char *_error_1, const char *_error_2);
 static void lcd_colorprint_change();
 
-#if defined (SNMM) || defined(SNMM_V2)
-static void fil_load_menu();
-static void fil_unload_menu();
-#endif // SNMM || SNMM_V2
 static void lcd_disable_farm_mode();
 static void lcd_set_fan_check();
 #ifdef MMU_HAS_CUTTER
 static void lcd_cutter_enabled();
 #endif
-#ifdef SNMM
-static char snmm_stop_print_menu();
-#endif //SNMM
 #ifdef SDCARD_SORT_ALPHA
  static void lcd_sort_type_set();
 #endif
@@ -889,273 +882,6 @@ void lcd_commands()
 		}
 	}
 
-
-#ifdef SNMM
-	if (lcd_commands_type == LcdCommands::Layer1Cal)
-	{
-		char cmd1[30];
-		float width = 0.4;
-		float length = 20 - width;
-		float extr = count_e(0.2, width, length);
-		float extr_short_segment = count_e(0.2, width, width);
-
-		if (lcd_commands_step>1) lcd_timeoutToStatus.start(); //if user dont confirm live adjust Z value by pressing the knob, we are saving last value by timeout to status screen
-		if (lcd_commands_step == 0)
-		{
-			lcd_commands_step = 10;
-		}
-		if (lcd_commands_step == 10 && !blocks_queued() && cmd_buffer_empty())
-		{
-			enquecommand_P(PSTR("M107"));
-			enquecommand_P(PSTR("M104 S" STRINGIFY(PLA_PREHEAT_HOTEND_TEMP)));
-			enquecommand_P(PSTR("M140 S" STRINGIFY(PLA_PREHEAT_HPB_TEMP)));
-			enquecommand_P(PSTR("M190 S" STRINGIFY(PLA_PREHEAT_HPB_TEMP)));
-			enquecommand_P(PSTR("M109 S" STRINGIFY(PLA_PREHEAT_HOTEND_TEMP)));
-			enquecommand_P(PSTR("T0"));
-			enquecommand_P(_T(MSG_M117_V2_CALIBRATION));
-			enquecommand_P(PSTR("G87")); //sets calibration status
-			enquecommand_P(PSTR("G28"));
-			enquecommand_P(PSTR("G21")); //set units to millimeters
-			enquecommand_P(PSTR("G90")); //use absolute coordinates
-			enquecommand_P(PSTR("M83")); //use relative distances for extrusion
-			enquecommand_P(PSTR("G92 E0"));
-			enquecommand_P(PSTR("M203 E100"));
-			enquecommand_P(PSTR("M92 E140"));
-			lcd_commands_step = 9;
-		}
-		if (lcd_commands_step == 9 && !blocks_queued() && cmd_buffer_empty())
-		{
-			lcd_timeoutToStatus.start();
-			enquecommand_P(PSTR("G1 Z0.250 F7200.000"));
-			enquecommand_P(PSTR("G1 X50.0 E80.0 F1000.0"));
-			enquecommand_P(PSTR("G1 X160.0 E20.0 F1000.0"));
-			enquecommand_P(PSTR("G1 Z0.200 F7200.000"));
-			enquecommand_P(PSTR("G1 X220.0 E13 F1000.0"));
-			enquecommand_P(PSTR("G1 X240.0 E0 F1000.0"));
-			enquecommand_P(PSTR("G92 E0.0"));
-			enquecommand_P(PSTR("G21"));
-			enquecommand_P(PSTR("G90"));
-			enquecommand_P(PSTR("M83"));
-			enquecommand_P(PSTR("G1 E-4 F2100.00000"));
-			enquecommand_P(PSTR("G1 Z0.150 F7200.000"));
-			enquecommand_P(PSTR("M204 S1000"));
-			enquecommand_P(PSTR("G1 F4000"));
-
-			lcd_clear();
-			menu_goto(lcd_babystep_z, 0, false, true);
-
-
-			lcd_commands_step = 8;
-		}
-		if (lcd_commands_step == 8 && !blocks_queued() && cmd_buffer_empty()) //draw meander
-		{
-			lcd_timeoutToStatus.start();
-
-
-			enquecommand_P(PSTR("G1 X50 Y155"));
-			enquecommand_P(PSTR("G1 X60 Y155 E4"));
-			enquecommand_P(PSTR("G1 F1080"));
-			enquecommand_P(PSTR("G1 X75 Y155 E2.5"));
-			enquecommand_P(PSTR("G1 X100 Y155 E2"));
-			enquecommand_P(PSTR("G1 X200 Y155 E2.62773"));
-			enquecommand_P(PSTR("G1 X200 Y135 E0.66174"));
-			enquecommand_P(PSTR("G1 X50 Y135 E3.62773"));
-			enquecommand_P(PSTR("G1 X50 Y115 E0.49386"));
-			enquecommand_P(PSTR("G1 X200 Y115 E3.62773"));
-			enquecommand_P(PSTR("G1 X200 Y95 E0.49386"));
-			enquecommand_P(PSTR("G1 X50 Y95 E3.62773"));
-			enquecommand_P(PSTR("G1 X50 Y75 E0.49386"));
-			enquecommand_P(PSTR("G1 X200 Y75 E3.62773"));
-			enquecommand_P(PSTR("G1 X200 Y55 E0.49386"));
-			enquecommand_P(PSTR("G1 X50 Y55 E3.62773"));
-
-			lcd_commands_step = 7;
-		}
-
-		if (lcd_commands_step == 7 && !blocks_queued() && cmd_buffer_empty())
-		{
-			lcd_timeoutToStatus.start();
-			strcpy(cmd1, "G1 X50 Y35 E");
-			strcat(cmd1, ftostr43(extr));
-			enquecommand(cmd1);
-
-			for (int i = 0; i < 4; i++) {
-				strcpy(cmd1, "G1 X70 Y");
-				strcat(cmd1, ftostr32(35 - i*width * 2));
-				strcat(cmd1, " E");
-				strcat(cmd1, ftostr43(extr));
-				enquecommand(cmd1);
-				strcpy(cmd1, "G1 Y");
-				strcat(cmd1, ftostr32(35 - (2 * i + 1)*width));
-				strcat(cmd1, " E");
-				strcat(cmd1, ftostr43(extr_short_segment));
-				enquecommand(cmd1);
-				strcpy(cmd1, "G1 X50 Y");
-				strcat(cmd1, ftostr32(35 - (2 * i + 1)*width));
-				strcat(cmd1, " E");
-				strcat(cmd1, ftostr43(extr));
-				enquecommand(cmd1);
-				strcpy(cmd1, "G1 Y");
-				strcat(cmd1, ftostr32(35 - (i + 1)*width * 2));
-				strcat(cmd1, " E");
-				strcat(cmd1, ftostr43(extr_short_segment));
-				enquecommand(cmd1);
-			}
-
-			lcd_commands_step = 6;
-		}
-
-		if (lcd_commands_step == 6 && !blocks_queued() && cmd_buffer_empty())
-		{
-			lcd_timeoutToStatus.start();
-			for (int i = 4; i < 8; i++) {
-				strcpy(cmd1, "G1 X70 Y");
-				strcat(cmd1, ftostr32(35 - i*width * 2));
-				strcat(cmd1, " E");
-				strcat(cmd1, ftostr43(extr));
-				enquecommand(cmd1);
-				strcpy(cmd1, "G1 Y");
-				strcat(cmd1, ftostr32(35 - (2 * i + 1)*width));
-				strcat(cmd1, " E");
-				strcat(cmd1, ftostr43(extr_short_segment));
-				enquecommand(cmd1);
-				strcpy(cmd1, "G1 X50 Y");
-				strcat(cmd1, ftostr32(35 - (2 * i + 1)*width));
-				strcat(cmd1, " E");
-				strcat(cmd1, ftostr43(extr));
-				enquecommand(cmd1);
-				strcpy(cmd1, "G1 Y");
-				strcat(cmd1, ftostr32(35 - (i + 1)*width * 2));
-				strcat(cmd1, " E");
-				strcat(cmd1, ftostr43(extr_short_segment));
-				enquecommand(cmd1);
-			}
-
-			lcd_commands_step = 5;
-		}
-
-		if (lcd_commands_step == 5 && !blocks_queued() && cmd_buffer_empty())
-		{
-			lcd_timeoutToStatus.start();
-			for (int i = 8; i < 12; i++) {
-				strcpy(cmd1, "G1 X70 Y");
-				strcat(cmd1, ftostr32(35 - i*width * 2));
-				strcat(cmd1, " E");
-				strcat(cmd1, ftostr43(extr));
-				enquecommand(cmd1);
-				strcpy(cmd1, "G1 Y");
-				strcat(cmd1, ftostr32(35 - (2 * i + 1)*width));
-				strcat(cmd1, " E");
-				strcat(cmd1, ftostr43(extr_short_segment));
-				enquecommand(cmd1);
-				strcpy(cmd1, "G1 X50 Y");
-				strcat(cmd1, ftostr32(35 - (2 * i + 1)*width));
-				strcat(cmd1, " E");
-				strcat(cmd1, ftostr43(extr));
-				enquecommand(cmd1);
-				strcpy(cmd1, "G1 Y");
-				strcat(cmd1, ftostr32(35 - (i + 1)*width * 2));
-				strcat(cmd1, " E");
-				strcat(cmd1, ftostr43(extr_short_segment));
-				enquecommand(cmd1);
-			}
-
-			lcd_commands_step = 4;
-		}
-
-		if (lcd_commands_step == 4 && !blocks_queued() && cmd_buffer_empty())
-		{
-			lcd_timeoutToStatus.start();
-			for (int i = 12; i < 16; i++) {
-				strcpy(cmd1, "G1 X70 Y");
-				strcat(cmd1, ftostr32(35 - i*width * 2));
-				strcat(cmd1, " E");
-				strcat(cmd1, ftostr43(extr));
-				enquecommand(cmd1);
-				strcpy(cmd1, "G1 Y");
-				strcat(cmd1, ftostr32(35 - (2 * i + 1)*width));
-				strcat(cmd1, " E");
-				strcat(cmd1, ftostr43(extr_short_segment));
-				enquecommand(cmd1);
-				strcpy(cmd1, "G1 X50 Y");
-				strcat(cmd1, ftostr32(35 - (2 * i + 1)*width));
-				strcat(cmd1, " E");
-				strcat(cmd1, ftostr43(extr));
-				enquecommand(cmd1);
-				strcpy(cmd1, "G1 Y");
-				strcat(cmd1, ftostr32(35 - (i + 1)*width * 2));
-				strcat(cmd1, " E");
-				strcat(cmd1, ftostr43(extr_short_segment));
-				enquecommand(cmd1);
-			}
-
-			lcd_commands_step = 3;
-		}
-
-		if (lcd_commands_step == 3 && !blocks_queued() && cmd_buffer_empty())
-		{
-			lcd_timeoutToStatus.start();
-			enquecommand_P(PSTR("G1 E-0.07500 F2100.00000"));
-			enquecommand_P(PSTR("G4 S0"));
-			enquecommand_P(PSTR("G1 E-4 F2100.00000"));
-			enquecommand_P(PSTR("G1 Z0.5 F7200.000"));
-			enquecommand_P(PSTR("G1 X245 Y1"));
-			enquecommand_P(PSTR("G1 X240 E4"));
-			enquecommand_P(PSTR("G1 F4000"));
-			enquecommand_P(PSTR("G1 X190 E2.7"));
-			enquecommand_P(PSTR("G1 F4600"));
-			enquecommand_P(PSTR("G1 X110 E2.8"));
-			enquecommand_P(PSTR("G1 F5200"));
-			enquecommand_P(PSTR("G1 X40 E3"));
-			enquecommand_P(PSTR("G1 E-15.0000 F5000"));
-			enquecommand_P(PSTR("G1 E-50.0000 F5400"));
-			enquecommand_P(PSTR("G1 E-15.0000 F3000"));
-			enquecommand_P(PSTR("G1 E-12.0000 F2000"));
-			enquecommand_P(PSTR("G1 F1600"));
-
-			lcd_commands_step = 2;
-		}
-		if (lcd_commands_step == 2 && !blocks_queued() && cmd_buffer_empty())
-		{
-			lcd_timeoutToStatus.start();
-
-			enquecommand_P(PSTR("G1 X0 Y1 E3.0000"));
-			enquecommand_P(PSTR("G1 X50 Y1 E-5.0000"));
-			enquecommand_P(PSTR("G1 F2000"));
-			enquecommand_P(PSTR("G1 X0 Y1 E5.0000"));
-			enquecommand_P(PSTR("G1 X50 Y1 E-5.0000"));
-			enquecommand_P(PSTR("G1 F2400"));
-			enquecommand_P(PSTR("G1 X0 Y1 E5.0000"));
-			enquecommand_P(PSTR("G1 X50 Y1 E-5.0000"));
-			enquecommand_P(PSTR("G1 F2400"));
-			enquecommand_P(PSTR("G1 X0 Y1 E5.0000"));
-			enquecommand_P(PSTR("G1 X50 Y1 E-3.0000"));
-			enquecommand_P(PSTR("G4 S0"));
-			enquecommand_P(PSTR("M107"));
-			enquecommand_P(PSTR("M104 S0"));
-			enquecommand_P(PSTR("M140 S0"));
-			enquecommand_P(PSTR("G1 X10 Y180 F4000"));
-			enquecommand_P(PSTR("G1 Z10 F1300.000"));
-			enquecommand_P(PSTR("M84"));
-
-			lcd_commands_step = 1;
-
-		}
-
-		if (lcd_commands_step == 1 && !blocks_queued() && cmd_buffer_empty())
-		{
-			lcd_setstatuspgm(MSG_WELCOME);
-			lcd_commands_step = 0;
-			lcd_commands_type = 0;
-			if (eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE) == 1) {
-				lcd_wizard(WizState::RepeatLay1Cal);
-			}
-		}
-
-	}
-
-#else //if not SNMM
-
 	if (lcd_commands_type == LcdCommands::Layer1Cal)
 	{
 		char cmd1[30];
@@ -1245,8 +971,6 @@ void lcd_commands()
 			}
 		}
 
-#endif // not SNMM
-
 	if (lcd_commands_type == LcdCommands::FarmModeConfirm)   /// farm mode confirm
 	{
 
@@ -1280,11 +1004,7 @@ void lcd_commands()
 			enquecommand_P(PSTR("G91"));
 			enquecommand_P(PSTR("G1 Z15 F1500"));
 			st_synchronize();
-			#ifdef SNMM
-			lcd_commands_step = 7;
-			#else
 			lcd_commands_step = 5;
-			#endif
 		}
 
 	}
@@ -2443,12 +2163,7 @@ void lcd_wait_interact() {
 
   lcd_clear();
 
-  lcd_set_cursor(0, 1);
-#ifdef SNMM 
-  lcd_puts_P(_i("Prepare new filament"));////MSG_PREPARE_FILAMENT c=20
-#else
-  lcd_puts_P(_i("Insert filament"));////MSG_INSERT_FILAMENT c=20
-#endif
+  lcd_puts_at_P(0, 1, _i("Insert filament"));////MSG_INSERT_FILAMENT c=20
   if (!fsensor_autoload_enabled) {
 	  lcd_puts_at_P(0, 2, _i("and press the knob"));////MSG_PRESS c=20 r=2
   }
@@ -2494,25 +2209,9 @@ void lcd_loading_filament() {
 
   lcd_puts_at_P(0, 0, _T(MSG_LOADING_FILAMENT));
   lcd_puts_at_P(0, 2, _T(MSG_PLEASE_WAIT));
-#ifdef SNMM
-  for (int i = 0; i < 20; i++) {
-
-    lcd_set_cursor(i, 3);
-    lcd_print('.');
-    for (int j = 0; j < 10 ; j++) {
-      manage_heater();
-      manage_inactivity(true);
-
-      _delay(153);
-    }
-
-
-  }
-#else //SNMM
   uint16_t slow_seq_time = (FILAMENTCHANGE_FINALFEED * 1000ul) / FILAMENTCHANGE_EFEED_FINAL;
   uint16_t fast_seq_time = (FILAMENTCHANGE_FIRSTFEED * 1000ul) / FILAMENTCHANGE_EFEED_FIRST;
   lcd_loading_progress_bar(slow_seq_time + fast_seq_time); //show progress bar for total time of filament loading fast + slow sequence
-#endif //SNMM
 }
 
 
@@ -4454,97 +4153,6 @@ void lcd_calibrate_pinda() {
 	lcd_return_to_status();
 }
 
-#ifndef SNMM
-
-/*void lcd_calibrate_extruder() {
-	
-	if (degHotend0() > EXTRUDE_MINTEMP)
-	{
-		current_position[E_AXIS] = 0;									//set initial position to zero
-		plan_set_e_position(current_position[E_AXIS]);
-		
-		//long steps_start = st_get_position(E_AXIS);
-
-		long steps_final;
-		float e_steps_per_unit;
-		float feedrate = (180 / axis_steps_per_unit[E_AXIS]) * 1;	//3	//initial automatic extrusion feedrate (depends on current value of axis_steps_per_unit to avoid too fast extrusion)
-		float e_shift_calibration = (axis_steps_per_unit[E_AXIS] > 180 ) ? ((180 / axis_steps_per_unit[E_AXIS]) * 70): 70; //length of initial automatic extrusion sequence
-		const char   *msg_e_cal_knob = _i("Rotate knob until mark reaches extruder body. Click when done.");////MSG_E_CAL_KNOB c=20 r=8
-		const char   *msg_next_e_cal_knob = lcd_display_message_fullscreen_P(msg_e_cal_knob);
-		const bool    multi_screen = msg_next_e_cal_knob != NULL;
-		unsigned long msg_millis;
-
-		lcd_show_fullscreen_message_and_wait_P(_i("Mark filament 100mm from extruder body. Click when done."));////MSG_MARK_FIL c=20 r=8
-		lcd_clear();
-		
-		
-		lcd_set_cursor(0, 1); lcd_puts_P(_T(MSG_PLEASE_WAIT));
-		current_position[E_AXIS] += e_shift_calibration;
-		plan_buffer_line_curposXYZE(feedrate, active_extruder);
-		st_synchronize();
-
-		lcd_display_message_fullscreen_P(msg_e_cal_knob);
-		msg_millis = _millis();
-		while (!LCD_CLICKED) {
-			if (multi_screen && _millis() - msg_millis > 5000) {
-				if (msg_next_e_cal_knob == NULL)
-					msg_next_e_cal_knob = msg_e_cal_knob;
-					msg_next_e_cal_knob = lcd_display_message_fullscreen_P(msg_next_e_cal_knob);
-					msg_millis = _millis();
-			}
-
-			//manage_inactivity(true);
-			manage_heater();
-			if (abs(lcd_encoder_diff) >= ENCODER_PULSES_PER_STEP) {						//adjusting mark by knob rotation
-				delay_keep_alive(50);
-				//previous_millis_cmd = _millis();
-				lcd_encoder += (lcd_encoder_diff / ENCODER_PULSES_PER_STEP);
-				lcd_encoder_diff = 0;
-				if (!planner_queue_full()) {
-					current_position[E_AXIS] += float(abs((int)lcd_encoder)) * 0.01; //0.05
-					lcd_encoder = 0;
-					plan_buffer_line_curposXYZE(feedrate, active_extruder);
-					
-				}
-			}	
-		}
-		
-		steps_final = current_position[E_AXIS] * axis_steps_per_unit[E_AXIS];
-		//steps_final = st_get_position(E_AXIS);
-		lcd_draw_update = 1;
-		e_steps_per_unit = ((float)(steps_final)) / 100.0f;
-		if (e_steps_per_unit < MIN_E_STEPS_PER_UNIT) e_steps_per_unit = MIN_E_STEPS_PER_UNIT;				
-		if (e_steps_per_unit > MAX_E_STEPS_PER_UNIT) e_steps_per_unit = MAX_E_STEPS_PER_UNIT;
-
-		lcd_clear();
-
-		axis_steps_per_unit[E_AXIS] = e_steps_per_unit;
-		enquecommand_P(PSTR("M500")); //store settings to eeprom
-	
-		//lcd_drawedit(PSTR("Result"), ftostr31(axis_steps_per_unit[E_AXIS]));
-		//delay_keep_alive(2000);
-		delay_keep_alive(500);
-		lcd_show_fullscreen_message_and_wait_P(_i("E calibration finished. Please clean the nozzle. Click when done."));////MSG_CLEAN_NOZZLE_E c=20 r=8
-		lcd_update_enable(true);
-		lcd_draw_update = 2;
-
-	}
-	else
-	{
-		show_preheat_nozzle_warning();
-	}
-	lcd_return_to_status();
-}
-
-void lcd_extr_cal_reset() {
-	float tmp1[] = DEFAULT_AXIS_STEPS_PER_UNIT;
-	axis_steps_per_unit[E_AXIS] = tmp1[3];
-	//extrudemultiply = 100;
-	enquecommand_P(PSTR("M500"));
-}*/
-
-#endif
-
 void lcd_toshiba_flash_air_compatibility_toggle()
 {
    card.ToshibaFlashAir_enable(! card.ToshibaFlashAir_isEnabled());
@@ -4723,9 +4331,6 @@ static void lcd_wizard_load()
 	lcd_update_enable(false);
 	lcd_clear();
 	lcd_puts_at_P(0, 2, _T(MSG_LOADING_FILAMENT));
-#ifdef SNMM
-	change_extr(0);
-#endif
 	loading_flag = true;
 	gcode_M701();
 }
@@ -5685,11 +5290,8 @@ static void lcd_calibration_menu()
     MENU_ITEM_FUNCTION_P(_i("Calibrate XYZ"), lcd_mesh_calibration);////MSG_CALIBRATE_BED c=18
     // "Calibrate Z" with storing the reference values to EEPROM.
     MENU_ITEM_SUBMENU_P(_T(MSG_HOMEYZ), lcd_mesh_calibration_z);
-#ifndef SNMM
-	//MENU_ITEM_FUNCTION_P(_i("Calibrate E"), lcd_calibrate_extruder);////MSG_CALIBRATE_E c=20
-#endif
-    // "Mesh Bed Leveling"
-    MENU_ITEM_SUBMENU_P(_T(MSG_MESH_BED_LEVELING), lcd_mesh_bedleveling);
+
+    MENU_ITEM_SUBMENU_P(_T(MSG_MESH_BED_LEVELING), lcd_mesh_bedleveling); ////MSG_MESH_BED_LEVELING c=18
 
     MENU_ITEM_SUBMENU_P(_i("Bed level correct"), lcd_adjust_bed);////MSG_BED_CORRECTION_MENU c=18
 	MENU_ITEM_SUBMENU_P(_i("PID calibration"), pid_extruder);////MSG_PID_EXTRUDER c=17
@@ -5697,9 +5299,6 @@ static void lcd_calibration_menu()
     MENU_ITEM_SUBMENU_P(_i("Show end stops"), menu_show_end_stops);////MSG_SHOW_END_STOPS c=18
 #endif
     MENU_ITEM_GCODE_P(_i("Reset XYZ calibr."), PSTR("M44"));////MSG_CALIBRATE_BED_RESET c=18
-#ifndef SNMM
-	//MENU_ITEM_FUNCTION_P(MSG_RESET_CALIBRATE_E, lcd_extr_cal_reset);
-#endif
     if(has_temperature_compensation())
     {
 	    MENU_ITEM_SUBMENU_P(_i("Temp. calibration"), lcd_pinda_calibration_menu);////MSG_CALIBRATION_PINDA_MENU c=17
@@ -5709,156 +5308,6 @@ static void lcd_calibration_menu()
   MENU_END();
 }
 
-void bowden_menu() {
-	int enc_dif = lcd_encoder_diff;
-	int cursor_pos = 0;
-	lcd_clear();
-	lcd_putc_at(0, 0, '>');
-	for (uint_least8_t i = 0; i < 4; i++) {
-		lcd_puts_at_P(1, i, PSTR("Extruder "));
-		lcd_print(i);
-		lcd_print(": ");
-		bowden_length[i] = eeprom_read_word((uint16_t*)EEPROM_BOWDEN_LENGTH + i);
-		lcd_print(bowden_length[i] - 48);
-
-	}
-	enc_dif = lcd_encoder_diff;
-	lcd_consume_click();
-	while (1) {
-
-		manage_heater();
-		manage_inactivity(true);
-
-		if (abs((enc_dif - lcd_encoder_diff)) > 2) {
-
-			if (enc_dif > lcd_encoder_diff) {
-					cursor_pos--;
-				}
-
-				if (enc_dif < lcd_encoder_diff) {
-					cursor_pos++;
-				}
-
-				if (cursor_pos > 3) {
-					cursor_pos = 3;
-					Sound_MakeSound(e_SOUND_TYPE_BlindAlert);
-				}
-
-				if (cursor_pos < 0) {
-					cursor_pos = 0;
-					Sound_MakeSound(e_SOUND_TYPE_BlindAlert);
-				}
-
-				lcd_puts_at_P(0, 0, PSTR(" \n \n \n "));
-				lcd_putc_at(0, cursor_pos, '>');
-				Sound_MakeSound(e_SOUND_TYPE_EncoderMove);
-				enc_dif = lcd_encoder_diff;
-				_delay(100);
-		}
-
-		if (lcd_clicked()) {
-			Sound_MakeSound(e_SOUND_TYPE_ButtonEcho);
-			lcd_clear();
-			while (1) {
-
-				manage_heater();
-				manage_inactivity(true);
-
-				lcd_puts_at_P(1, 1, PSTR("Extruder "));
-				lcd_print(cursor_pos);
-				lcd_print(": ");
-				lcd_set_cursor(13, 1);
-				lcd_print(bowden_length[cursor_pos] - 48);
-
-				if (abs((enc_dif - lcd_encoder_diff)) > 2) {
-						if (enc_dif > lcd_encoder_diff) {
-							bowden_length[cursor_pos]--;
-							lcd_set_cursor(13, 1);
-							lcd_print(bowden_length[cursor_pos] - 48);
-							enc_dif = lcd_encoder_diff;
-						}
-
-						if (enc_dif < lcd_encoder_diff) {
-							bowden_length[cursor_pos]++;
-							lcd_set_cursor(13, 1);
-							lcd_print(bowden_length[cursor_pos] - 48);
-							enc_dif = lcd_encoder_diff;
-						}
-				}
-				_delay(100);
-				if (lcd_clicked()) {
-					Sound_MakeSound(e_SOUND_TYPE_ButtonEcho);
-					eeprom_update_word((uint16_t*)EEPROM_BOWDEN_LENGTH + cursor_pos, bowden_length[cursor_pos]);
-					if (lcd_show_fullscreen_message_yes_no_and_wait_P(PSTR("Continue with another bowden?"))) {
-						lcd_update_enable(true);
-						lcd_clear();
-						enc_dif = lcd_encoder_diff;
-						lcd_putc_at(0, cursor_pos, '>');
-						for (uint_least8_t i = 0; i < 4; i++) {
-							lcd_puts_at_P(1, i, PSTR("Extruder "));
-							lcd_print(i);
-							lcd_print(": ");
-							bowden_length[i] = eeprom_read_word((uint16_t*)EEPROM_BOWDEN_LENGTH + i);
-							lcd_print(bowden_length[i] - 48);
-
-						}
-						break;
-					}
-					else return;
-				}
-			}
-		}
-	}
-}
-
-#ifdef SNMM
-
-static char snmm_stop_print_menu() { //menu for choosing which filaments will be unloaded in stop print
-	lcd_clear();
-	lcd_puts_at_P(0,0,_T(MSG_UNLOAD_FILAMENT)); lcd_print(':');
-	lcd_set_cursor(0, 1); lcd_print('>');
-	lcd_puts_at_P(1,2,_i("Used during print"));////MSG_USED c=19
-	lcd_puts_at_P(1,3,_i("Current"));////MSG_CURRENT c=19
-	char cursor_pos = 1;
-	int enc_dif = 0;
-	KEEPALIVE_STATE(PAUSED_FOR_USER);
-	lcd_consume_click();
-	while (1) {
-		manage_heater();
-		manage_inactivity(true);
-		if (abs((enc_dif - lcd_encoder_diff)) > 4) {
-
-			if ((abs(enc_dif - lcd_encoder_diff)) > 1) {
-				if (enc_dif > lcd_encoder_diff) cursor_pos--;
-				if (enc_dif < lcd_encoder_diff) cursor_pos++;
-				if (cursor_pos > 3) {
-					cursor_pos = 3;
-					Sound_MakeSound(e_SOUND_TYPE_BlindAlert);
-				}
-				if (cursor_pos < 1){
-					cursor_pos = 1;
-					Sound_MakeSound(e_SOUND_TYPE_BlindAlert);
-				}	
-
-				lcd_puts_at_P(0, 1, PSTR(" \n \n "));
-				lcd_set_cursor(0, cursor_pos);
-				lcd_print('>');
-				enc_dif = lcd_encoder_diff;
-				Sound_MakeSound(e_SOUND_TYPE_EncoderMove);
-				_delay(100);
-			}
-		}
-		if (lcd_clicked()) {
-			Sound_MakeSound(e_SOUND_TYPE_ButtonEcho);
-			KEEPALIVE_STATE(IN_HANDLER);
-			return(cursor_pos - 1);
-		}
-	}
-	
-}
-
-#endif //SNMM
-
 //! @brief Select one of numbered items
 //!
 //! Create list of items with header. Header can not be selected.
@@ -5960,28 +5409,25 @@ uint8_t choose_menu_P(const char *header, const char *item, const char *last_ite
 }
 
 char reset_menu() {
-    const uint8_t items_no =
-#ifdef SNMM
-        6;
-#else
-        5;
-#endif
-    static int8_t first = 0;
-    int8_t enc_dif = 0;
+	const uint8_t items_no = 5;
+	static int8_t first = 0;
+	int8_t enc_dif = 0;
 	char cursor_pos = 0;
 
-    const char *const item[items_no] = {PSTR("Language"), PSTR("Statistics"), PSTR("Shipping prep"), PSTR("Service prep"), PSTR("All Data")
-#ifdef SNMM
-    , PSTR("Bowden length")
-#endif
-    };
+	const char *const item[items_no] = {
+		PSTR("Language"),
+		PSTR("Statistics"),
+		PSTR("Shipping prep"),
+		PSTR("Service prep"),
+		PSTR("All Data"),
+	};
 	
 	enc_dif = lcd_encoder_diff;
 	lcd_clear();
 	lcd_set_cursor(0, 0);
-    lcd_putc('>');
+	lcd_putc('>');
 	lcd_consume_click();
-	while (1) {		
+	while (1) {
 
 		for (uint_least8_t i = 0; i < 4; i++) {
 			lcd_puts_at_P(1, i, item[first + i]);
@@ -6052,20 +5498,13 @@ static void lcd_disable_farm_mode()
 
 
 
-static void fil_load_menu()
+static void mmu_load_filament_menu()
 {
     MENU_BEGIN();
     MENU_ITEM_BACK_P(_T(MSG_MAIN));
-    MENU_ITEM_FUNCTION_P(_i("Load all"), load_all); ////MSG_LOAD_ALL c=17
-    MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '1', extr_adj, 0); ////MSG_LOAD_FILAMENT_1 c=16
-    MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '2', extr_adj, 1); ////MSG_LOAD_FILAMENT_2 c=17
-    MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '3', extr_adj, 2); ////MSG_LOAD_FILAMENT_3 c=17
-    MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '4', extr_adj, 3); ////MSG_LOAD_FILAMENT_4 c=17
-
-    if (mmu_enabled)
-    {
-        MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '5', extr_adj, 4);
-    }
+    MENU_ITEM_FUNCTION_P(_i("Load all"), load_all); ////MSG_LOAD_ALL c=18
+    for (uint8_t i = 0; i < MMU_FILAMENT_COUNT; i++)
+        MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), i + '1', extr_adj, i); ////MSG_LOAD_FILAMENT c=16
     MENU_END();
 }
 
@@ -6075,11 +5514,8 @@ static void mmu_load_to_nozzle_menu()
     {
         MENU_BEGIN();
         MENU_ITEM_BACK_P(_T(MSG_MAIN));
-        MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '1', lcd_mmu_load_to_nozzle, 0);
-        MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '2', lcd_mmu_load_to_nozzle, 1);
-        MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '3', lcd_mmu_load_to_nozzle, 2);
-        MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '4', lcd_mmu_load_to_nozzle, 3);
-        MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), '5', lcd_mmu_load_to_nozzle, 4);
+        for (uint8_t i = 0; i < MMU_FILAMENT_COUNT; i++)
+            MENU_ITEM_FUNCTION_NR_P(_T(MSG_LOAD_FILAMENT), i + '1', lcd_mmu_load_to_nozzle, i); ////MSG_LOAD_FILAMENT c=16
         MENU_END();
     }
     else
@@ -6101,11 +5537,11 @@ static void mmu_fil_eject_menu()
     {
         MENU_BEGIN();
         MENU_ITEM_BACK_P(_T(MSG_MAIN));
-        MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '1', mmu_eject_filament, 0);
-        MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '2', mmu_eject_filament, 1);
-        MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '3', mmu_eject_filament, 2);
-        MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '4', mmu_eject_filament, 3);
-        MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '5', mmu_eject_filament, 4);
+        MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '1', mmu_eject_filament, 0); ////MSG_EJECT_FILAMENT c=16
+        MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '2', mmu_eject_filament, 1); ////MSG_EJECT_FILAMENT c=16
+        MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '3', mmu_eject_filament, 2); ////MSG_EJECT_FILAMENT c=16
+        MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '4', mmu_eject_filament, 3); ////MSG_EJECT_FILAMENT c=16
+        MENU_ITEM_FUNCTION_NR_P(_T(MSG_EJECT_FILAMENT), '5', mmu_eject_filament, 4); ////MSG_EJECT_FILAMENT c=16
         MENU_END();
     }
     else
@@ -6123,11 +5559,11 @@ static void mmu_cut_filament_menu()
     {
         MENU_BEGIN();
         MENU_ITEM_BACK_P(_T(MSG_MAIN));
-        MENU_ITEM_FUNCTION_NR_P(_T(MSG_CUT_FILAMENT), '1', mmu_cut_filament, 0);
-        MENU_ITEM_FUNCTION_NR_P(_T(MSG_CUT_FILAMENT), '2', mmu_cut_filament, 1);
-        MENU_ITEM_FUNCTION_NR_P(_T(MSG_CUT_FILAMENT), '3', mmu_cut_filament, 2);
-        MENU_ITEM_FUNCTION_NR_P(_T(MSG_CUT_FILAMENT), '4', mmu_cut_filament, 3);
-        MENU_ITEM_FUNCTION_NR_P(_T(MSG_CUT_FILAMENT), '5', mmu_cut_filament, 4);
+        MENU_ITEM_FUNCTION_NR_P(_T(MSG_CUT_FILAMENT), '1', mmu_cut_filament, 0); ////MSG_CUT_FILAMENT c=16
+        MENU_ITEM_FUNCTION_NR_P(_T(MSG_CUT_FILAMENT), '2', mmu_cut_filament, 1); ////MSG_CUT_FILAMENT c=16
+        MENU_ITEM_FUNCTION_NR_P(_T(MSG_CUT_FILAMENT), '3', mmu_cut_filament, 2); ////MSG_CUT_FILAMENT c=16
+        MENU_ITEM_FUNCTION_NR_P(_T(MSG_CUT_FILAMENT), '4', mmu_cut_filament, 3); ////MSG_CUT_FILAMENT c=16
+        MENU_ITEM_FUNCTION_NR_P(_T(MSG_CUT_FILAMENT), '5', mmu_cut_filament, 4); ////MSG_CUT_FILAMENT c=16
         MENU_END();
     }
     else
@@ -6144,35 +5580,6 @@ static void mmu_cut_filament_menu()
 }
 #endif //MMU_HAS_CUTTER
 
-#ifdef SNMM
-static void fil_unload_menu()
-{
-	MENU_BEGIN();
-	MENU_ITEM_BACK_P(_T(MSG_MAIN));
-	MENU_ITEM_FUNCTION_P(_i("Unload all"), extr_unload_all);////MSG_UNLOAD_ALL c=17
-	MENU_ITEM_FUNCTION_P(_i("Unload filament 1"), extr_unload_0);////MSG_UNLOAD_FILAMENT_1 c=17
-	MENU_ITEM_FUNCTION_P(_i("Unload filament 2"), extr_unload_1);////MSG_UNLOAD_FILAMENT_2 c=17
-	MENU_ITEM_FUNCTION_P(_i("Unload filament 3"), extr_unload_2);////MSG_UNLOAD_FILAMENT_3 c=17
-	MENU_ITEM_FUNCTION_P(_i("Unload filament 4"), extr_unload_3);////MSG_UNLOAD_FILAMENT_4 c=17
-
-	if (mmu_enabled)
-		MENU_ITEM_FUNCTION_P(_i("Unload filament 5"), extr_unload_4);////MSG_UNLOAD_FILAMENT_5 c=17
-
-	MENU_END();
-}
-
-
-static void change_extr_menu(){
-	MENU_BEGIN();
-	MENU_ITEM_BACK_P(_T(MSG_MAIN));
-	MENU_ITEM_FUNCTION_P(_i("Extruder 1"), extr_change_0);////MSG_EXTRUDER_1 c=17
-	MENU_ITEM_FUNCTION_P(_i("Extruder 2"), extr_change_1);////MSG_EXTRUDER_2 c=17
-	MENU_ITEM_FUNCTION_P(_i("Extruder 3"), extr_change_2);////MSG_EXTRUDER_3 c=17
-	MENU_ITEM_FUNCTION_P(_i("Extruder 4"), extr_change_3);////MSG_EXTRUDER_4 c=17
-
-	MENU_END();
-}
-#endif //SNMM
 
 // unload filament for single material printer (used in M702 gcode)
 // @param automatic: If true, unload_filament is part of a unload+load sequence (M600)
@@ -6526,20 +5933,14 @@ static void lcd_main_menu()
 
     if ( ! ( IS_SD_PRINTING || usb_timer.running() || (lcd_commands_type == LcdCommands::Layer1Cal) ) ) {
         if (mmu_enabled) {
-            MENU_ITEM_SUBMENU_P(_T(MSG_LOAD_FILAMENT), fil_load_menu);
+            MENU_ITEM_SUBMENU_P(_T(MSG_LOAD_FILAMENT), mmu_load_filament_menu);
             MENU_ITEM_SUBMENU_P(_i("Load to nozzle"), mmu_load_to_nozzle_menu);////MSG_LOAD_TO_NOZZLE c=18
-//-//          MENU_ITEM_FUNCTION_P(_T(MSG_UNLOAD_FILAMENT), extr_unload);
-//bFilamentFirstRun=true;
             MENU_ITEM_SUBMENU_P(_T(MSG_UNLOAD_FILAMENT), mmu_unload_filament);
             MENU_ITEM_SUBMENU_P(_T(MSG_EJECT_FILAMENT), mmu_fil_eject_menu);
 #ifdef  MMU_HAS_CUTTER
             MENU_ITEM_SUBMENU_P(_T(MSG_CUT_FILAMENT), mmu_cut_filament_menu);
 #endif //MMU_HAS_CUTTER
         } else {
-#ifdef SNMM
-            MENU_ITEM_SUBMENU_P(_T(MSG_UNLOAD_FILAMENT), fil_unload_menu);
-            MENU_ITEM_SUBMENU_P(_i("Change extruder"), change_extr_menu);////MSG_CHANGE_EXTR c=20
-#endif
 #ifdef FILAMENT_SENSOR
             if ((fsensor_autoload_enabled == true) && (fsensor_enabled == true) && (mmu_enabled == false))
                 MENU_ITEM_SUBMENU_P(_i("AutoLoad filament"), lcd_menu_AutoLoadFilament);////MSG_AUTOLOAD_FILAMENT c=18

+ 0 - 4
Firmware/ultralcd.h

@@ -189,12 +189,9 @@ void unload_filament(bool automatic = false);
 void lcd_printer_connected();
 void lcd_ping();
 
-void lcd_calibrate_extruder();
-
 void lcd_wait_for_heater();
 void lcd_wait_for_cool_down();
 void lcd_move_e(); // NOT static due to usage in Marlin_main
-void lcd_extr_cal_reset();
 
 void lcd_temp_cal_show_result(bool result);
 #ifdef PINDA_THERMISTOR
@@ -202,7 +199,6 @@ bool lcd_wait_for_pinda(float temp);
 #endif //PINDA_THERMISTOR
 
 
-void bowden_menu();
 char reset_menu();
 uint8_t choose_menu_P(const char *header, const char *item, const char *last_item = nullptr);
 

+ 2 - 21
Firmware/variants/1_75mm_MK2-RAMBo10a-E3Dv6full.h

@@ -24,9 +24,6 @@ GENERAL SETTINGS
 // Electronics
 #define MOTHERBOARD BOARD_RAMBO_MINI_1_0
 
-// Prusa Single extruder multiple material suport
-//#define SNMM
-
 // Uncomment the below for the E3D PT100 temperature sensor (with or without PT100 Amplifier)
 //#define E3D_PT100_EXTRUDER_WITH_AMP
 //#define E3D_PT100_EXTRUDER_NO_AMP
@@ -39,11 +36,7 @@ AXIS SETTINGS
 *------------------------------------*/
 
 // Steps per unit {X,Y,Z,E}
-#ifdef SNMM
-#define DEFAULT_AXIS_STEPS_PER_UNIT   {100,100,3200/8,140}
-#else
 #define DEFAULT_AXIS_STEPS_PER_UNIT   {100,100,3200/8,161.3}
-#endif
 
 
 // Endstop inverting
@@ -157,18 +150,6 @@ EXTRUDER SETTINGS
 #define EXTRUDER_AUTO_FAN_SPEED   255  // == full speed
 
 
-#ifdef SNMM
-//#define BOWDEN_LENGTH	408
-#define BOWDEN_LENGTH 433 //default total length for filament fast loading part; max length for extrusion is 465 mm!; this length can be adjusted in service menu
-#define FIL_LOAD_LENGTH 102 //length for loading filament into the nozzle
-#define FIL_COOLING 10 //length for cooling moves
-#define E_MOTOR_LOW_CURRENT 350 // current for PRUSAY code
-#define E_MOTOR_HIGH_CURRENT 700 //current for unloading filament, stop print, PRUSAY ramming
-#endif //SNMM
-
-//#define DIS //for measuring bed heigth and PINDa detection heigth relative to auto home point, experimental function
-
-
 /*------------------------------------
 CHANGE FILAMENT SETTINGS
 *------------------------------------*/
@@ -460,11 +441,11 @@ THERMISTORS SETTINGS
 
 #define M600_TIMEOUT 600  //seconds
 
+#define MMU_FILAMENT_COUNT 5
+
 #define MMU_REQUIRED_FW_BUILDNR 132
 
-#ifndef SNMM
 //#define SUPPORT_VERBOSITY
-#endif
 
 #define MMU_IDLER_SENSOR_ATTEMPTS_NR 21 //max. number of attempts to load filament if first load failed; value for max bowden length and case when loading fails right at the beginning
 

+ 2 - 21
Firmware/variants/1_75mm_MK2-RAMBo13a-E3Dv6full.h

@@ -24,9 +24,6 @@ GENERAL SETTINGS
 // Electronics
 #define MOTHERBOARD BOARD_RAMBO_MINI_1_3
 
-// Prusa Single extruder multiple material suport
-//#define SNMM
-
 // Uncomment the below for the E3D PT100 temperature sensor (with or without PT100 Amplifier)
 //#define E3D_PT100_EXTRUDER_WITH_AMP
 //#define E3D_PT100_EXTRUDER_NO_AMP
@@ -39,11 +36,7 @@ AXIS SETTINGS
 *------------------------------------*/
 
 // Steps per unit {X,Y,Z,E}
-#ifdef SNMM
-#define DEFAULT_AXIS_STEPS_PER_UNIT   {100,100,3200/8,140}
-#else
 #define DEFAULT_AXIS_STEPS_PER_UNIT   {100,100,3200/8,161.3}
-#endif
 
 
 // Endstop inverting
@@ -156,18 +149,6 @@ EXTRUDER SETTINGS
 #define EXTRUDER_AUTO_FAN_SPEED   255  // == full speed
 
 
-#ifdef SNMM
-//#define BOWDEN_LENGTH	408
-#define BOWDEN_LENGTH 433 //default total length for filament fast loading part; max length for extrusion is 465 mm!; this length can be adjusted in service menu
-#define FIL_LOAD_LENGTH 102 //length for loading filament into the nozzle
-#define FIL_COOLING 10 //length for cooling moves
-#define E_MOTOR_LOW_CURRENT 350 // current for PRUSAY code
-#define E_MOTOR_HIGH_CURRENT 700 //current for unloading filament, stop print, PRUSAY ramming
-#endif //SNMM
-
-//#define DIS //for measuring bed heigth and PINDa detection heigth relative to auto home point, experimental function
-
-
 /*------------------------------------
 CHANGE FILAMENT SETTINGS
 *------------------------------------*/
@@ -449,11 +430,11 @@ THERMISTORS SETTINGS
 
 #define M600_TIMEOUT 600  //seconds
 
+#define MMU_FILAMENT_COUNT 5
+
 #define MMU_REQUIRED_FW_BUILDNR 132
 
-#ifndef SNMM
 //#define SUPPORT_VERBOSITY
-#endif
 
 #define MMU_IDLER_SENSOR_ATTEMPTS_NR 21 //max. number of attempts to load filament if first load failed; value for max bowden length and case when loading fails right at the beginning
 

+ 2 - 0
Firmware/variants/1_75mm_MK25-RAMBo10a-E3Dv6full.h

@@ -516,6 +516,8 @@
 
 //#define SUPPORT_VERBOSITY
 
+#define MMU_FILAMENT_COUNT 5
+
 #define MMU_REQUIRED_FW_BUILDNR 132
 #define MMU_FORCE_STEALTH_MODE
 #define MMU_DEBUG //print communication between MMU2 and printer on serial

+ 2 - 0
Firmware/variants/1_75mm_MK25-RAMBo13a-E3Dv6full.h

@@ -517,6 +517,8 @@
 
 //#define SUPPORT_VERBOSITY
 
+#define MMU_FILAMENT_COUNT 5
+
 #define MMU_REQUIRED_FW_BUILDNR 132
 #define MMU_FORCE_STEALTH_MODE
 #define MMU_DEBUG //print communication between MMU2 and printer on serial

+ 2 - 0
Firmware/variants/1_75mm_MK25S-RAMBo10a-E3Dv6full.h

@@ -516,6 +516,8 @@
 
 //#define SUPPORT_VERBOSITY
 
+#define MMU_FILAMENT_COUNT 5
+
 #define MMU_REQUIRED_FW_BUILDNR 132
 #define MMU_FORCE_STEALTH_MODE
 #define MMU_DEBUG //print communication between MMU2 and printer on serial

+ 2 - 0
Firmware/variants/1_75mm_MK25S-RAMBo13a-E3Dv6full.h

@@ -517,6 +517,8 @@
 
 //#define SUPPORT_VERBOSITY
 
+#define MMU_FILAMENT_COUNT 5
+
 #define MMU_REQUIRED_FW_BUILDNR 132
 #define MMU_FORCE_STEALTH_MODE
 #define MMU_DEBUG //print communication between MMU2 and printer on serial

+ 2 - 0
Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h

@@ -663,6 +663,8 @@
 
 //#define SUPPORT_VERBOSITY
 
+#define MMU_FILAMENT_COUNT 5
+
 #define MMU_REQUIRED_FW_BUILDNR 83
 #define MMU_HWRESET
 #define MMU_DEBUG //print communication between MMU2 and printer on serial

+ 2 - 0
Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h

@@ -667,6 +667,8 @@
 
 //#define SUPPORT_VERBOSITY
 
+#define MMU_FILAMENT_COUNT 5
+
 #define MMU_REQUIRED_FW_BUILDNR 83
 #define MMU_HWRESET
 #define MMU_DEBUG //print communication between MMU2 and printer on serial

+ 1 - 1
lang/lang_en.txt

@@ -922,7 +922,7 @@
 #MSG_BED_SKEW_OFFSET_DETECTION_WARNING_FRONT_RIGHT_FAR c=20 r=8
 "XYZ calibration compromised. Right front calibration point not reachable."
 
-#MSG_LOAD_ALL c=17
+#MSG_LOAD_ALL c=18
 "Load all"
 
 #MSG_BED_SKEW_OFFSET_DETECTION_POINT_NOT_FOUND c=20 r=6

+ 1 - 1
lang/lang_en_cz.txt

@@ -1230,7 +1230,7 @@
 "XYZ calibration compromised. Right front calibration point not reachable."
 "Kalibrace XYZ nepresna. Pravy predni bod moc vpredu."
 
-#MSG_LOAD_ALL c=17
+#MSG_LOAD_ALL c=18
 "Load all"
 "Zavest vse"
 

+ 1 - 1
lang/lang_en_de.txt

@@ -1230,7 +1230,7 @@
 "XYZ calibration compromised. Right front calibration point not reachable."
 "XYZ-Kalibrierung beeintraechtigt. Rechter vorderer Kalibrierpunkt nicht erreichbar."
 
-#MSG_LOAD_ALL c=17
+#MSG_LOAD_ALL c=18
 "Load all"
 "Alle laden"
 

+ 1 - 1
lang/lang_en_es.txt

@@ -1230,7 +1230,7 @@
 "XYZ calibration compromised. Right front calibration point not reachable."
 "Calibrazion XYZ comprometida. Punto frontal derecho no alcanzable."
 
-#MSG_LOAD_ALL c=17
+#MSG_LOAD_ALL c=18
 "Load all"
 "Intr. todos fil."
 

+ 1 - 1
lang/lang_en_fr.txt

@@ -1230,7 +1230,7 @@
 "XYZ calibration compromised. Right front calibration point not reachable."
 "Calibration XYZ compromise. Le point de calibration avant droit n'est pas atteignable."
 
-#MSG_LOAD_ALL c=17
+#MSG_LOAD_ALL c=18
 "Load all"
 "Charger un par un"
 

+ 1 - 1
lang/lang_en_it.txt

@@ -1230,7 +1230,7 @@
 "XYZ calibration compromised. Right front calibration point not reachable."
 "Calibrazione XYZ compromessa. Punto anteriore destro non raggiungibile."
 
-#MSG_LOAD_ALL c=17
+#MSG_LOAD_ALL c=18
 "Load all"
 "Caricare tutti"
 

+ 1 - 1
lang/lang_en_nl.txt

@@ -1230,7 +1230,7 @@
 "XYZ calibration compromised. Right front calibration point not reachable."
 "XYZ-kalibratie niet gelukt. Rechter voor kalibratiepunt niet bereikbaar."
 
-#MSG_LOAD_ALL c=17
+#MSG_LOAD_ALL c=18
 "Load all"
 "Laad alle"
 

+ 1 - 1
lang/lang_en_pl.txt

@@ -1230,7 +1230,7 @@
 "XYZ calibration compromised. Right front calibration point not reachable."
 "Kalibracja XYZ niedokladna. Prawy przedni punkt nieosiagalny."
 
-#MSG_LOAD_ALL c=17
+#MSG_LOAD_ALL c=18
 "Load all"
 "Zalad. wszystkie"
 

+ 1 - 1
lang/po/Firmware.pot

@@ -1555,7 +1555,7 @@ msgstr ""
 msgid "XYZ calibration compromised. Right front calibration point not reachable."
 msgstr ""
 
-# MSG_LOAD_ALL c=17
+# MSG_LOAD_ALL c=18
 #: ultralcd.cpp:6167
 msgid "Load all"
 msgstr ""

+ 1 - 1
lang/po/Firmware_cs.po

@@ -1555,7 +1555,7 @@ msgstr "Kalibrace XYZ nepresna. Predni kalibracni body moc vpredu."
 msgid "XYZ calibration compromised. Right front calibration point not reachable."
 msgstr "Kalibrace XYZ nepresna. Pravy predni bod moc vpredu."
 
-# MSG_LOAD_ALL c=17
+# MSG_LOAD_ALL c=18
 #: ultralcd.cpp:6167
 msgid "Load all"
 msgstr "Zavest vse"

+ 1 - 1
lang/po/Firmware_de.po

@@ -1555,7 +1555,7 @@ msgstr "XYZ-Kalibrierung beeintraechtigt. Vordere Kalibrierpunkte nicht erreichb
 msgid "XYZ calibration compromised. Right front calibration point not reachable."
 msgstr "XYZ-Kalibrierung beeintraechtigt. Rechter vorderer Kalibrierpunkt nicht erreichbar."
 
-# MSG_LOAD_ALL c=17
+# MSG_LOAD_ALL c=18
 #: ultralcd.cpp:6167
 msgid "Load all"
 msgstr "Alle laden"

+ 1 - 1
lang/po/Firmware_es.po

@@ -1555,7 +1555,7 @@ msgstr "Calibrazion XYZ comprometida. Puntos frontales no alcanzables."
 msgid "XYZ calibration compromised. Right front calibration point not reachable."
 msgstr "Calibrazion XYZ comprometida. Punto frontal derecho no alcanzable."
 
-# MSG_LOAD_ALL c=17
+# MSG_LOAD_ALL c=18
 #: ultralcd.cpp:6167
 msgid "Load all"
 msgstr "Intr. todos fil."

+ 1 - 1
lang/po/Firmware_fr.po

@@ -1555,7 +1555,7 @@ msgstr "Calibration XYZ compromise. Les points de calibration en avant ne sont p
 msgid "XYZ calibration compromised. Right front calibration point not reachable."
 msgstr "Calibration XYZ compromise. Le point de calibration avant droit n'est pas atteignable."
 
-# MSG_LOAD_ALL c=17
+# MSG_LOAD_ALL c=18
 #: ultralcd.cpp:6167
 msgid "Load all"
 msgstr "Charger un par un"

+ 1 - 1
lang/po/Firmware_it.po

@@ -1555,7 +1555,7 @@ msgstr "Calibrazione XYZ compromessa. Punti anteriori non raggiungibili."
 msgid "XYZ calibration compromised. Right front calibration point not reachable."
 msgstr "Calibrazione XYZ compromessa. Punto anteriore destro non raggiungibile."
 
-# MSG_LOAD_ALL c=17
+# MSG_LOAD_ALL c=18
 #: ultralcd.cpp:6167
 msgid "Load all"
 msgstr "Caricare tutti"

+ 1 - 1
lang/po/Firmware_nl.po

@@ -1555,7 +1555,7 @@ msgstr "XYZ-kalibratie niet gelukt. Voorste kalibratiepunten niet bereikbaar."
 msgid "XYZ calibration compromised. Right front calibration point not reachable."
 msgstr "XYZ-kalibratie niet gelukt. Rechter voor kalibratiepunt niet bereikbaar."
 
-# MSG_LOAD_ALL c=17
+# MSG_LOAD_ALL c=18
 #: ultralcd.cpp:6167
 msgid "Load all"
 msgstr "Laad alle"

+ 1 - 1
lang/po/Firmware_pl.po

@@ -1555,7 +1555,7 @@ msgstr "Kalibr. XYZ niedokladna. Przednie punkty kalibr. nieosiagalne."
 msgid "XYZ calibration compromised. Right front calibration point not reachable."
 msgstr "Kalibracja XYZ niedokladna. Prawy przedni punkt nieosiagalny."
 
-# MSG_LOAD_ALL c=17
+# MSG_LOAD_ALL c=18
 #: ultralcd.cpp:6167
 msgid "Load all"
 msgstr "Zalad. wszystkie"

+ 1 - 1
lang/po/new/cs.po

@@ -1555,7 +1555,7 @@ msgstr "Kalibrace XYZ nepresna. Predni kalibracni body moc vpredu."
 msgid "XYZ calibration compromised. Right front calibration point not reachable."
 msgstr "Kalibrace XYZ nepresna. Pravy predni bod moc vpredu."
 
-# MSG_LOAD_ALL c=17
+# MSG_LOAD_ALL c=18
 #: ultralcd.cpp:6167
 msgid "Load all"
 msgstr "Zavest vse"

+ 1 - 1
lang/po/new/de.po

@@ -1555,7 +1555,7 @@ msgstr "XYZ-Kalibrierung beeintraechtigt. Vordere Kalibrierpunkte nicht erreichb
 msgid "XYZ calibration compromised. Right front calibration point not reachable."
 msgstr "XYZ-Kalibrierung beeintraechtigt. Rechter vorderer Kalibrierpunkt nicht erreichbar."
 
-# MSG_LOAD_ALL c=17
+# MSG_LOAD_ALL c=18
 #: ultralcd.cpp:6167
 msgid "Load all"
 msgstr "Alle laden"

+ 1 - 1
lang/po/new/es.po

@@ -1555,7 +1555,7 @@ msgstr "Calibrazion XYZ comprometida. Puntos frontales no alcanzables."
 msgid "XYZ calibration compromised. Right front calibration point not reachable."
 msgstr "Calibrazion XYZ comprometida. Punto frontal derecho no alcanzable."
 
-# MSG_LOAD_ALL c=17
+# MSG_LOAD_ALL c=18
 #: ultralcd.cpp:6167
 msgid "Load all"
 msgstr "Intr. todos fil."

+ 1 - 1
lang/po/new/fr.po

@@ -1555,7 +1555,7 @@ msgstr "Calibration XYZ compromise. Les points de calibration en avant ne sont p
 msgid "XYZ calibration compromised. Right front calibration point not reachable."
 msgstr "Calibration XYZ compromise. Le point de calibration avant droit n'est pas atteignable."
 
-# MSG_LOAD_ALL c=17
+# MSG_LOAD_ALL c=18
 #: ultralcd.cpp:6167
 msgid "Load all"
 msgstr "Charger un par un"

+ 1 - 1
lang/po/new/it.po

@@ -1555,7 +1555,7 @@ msgstr "Calibrazione XYZ compromessa. Punti anteriori non raggiungibili."
 msgid "XYZ calibration compromised. Right front calibration point not reachable."
 msgstr "Calibrazione XYZ compromessa. Punto anteriore destro non raggiungibile."
 
-# MSG_LOAD_ALL c=17
+# MSG_LOAD_ALL c=18
 #: ultralcd.cpp:6167
 msgid "Load all"
 msgstr "Caricare tutti"

+ 1 - 1
lang/po/new/nl.po

@@ -1555,7 +1555,7 @@ msgstr "XYZ-kalibratie niet gelukt. Voorste kalibratiepunten niet bereikbaar."
 msgid "XYZ calibration compromised. Right front calibration point not reachable."
 msgstr "XYZ-kalibratie niet gelukt. Rechter voor kalibratiepunt niet bereikbaar."
 
-# MSG_LOAD_ALL c=17
+# MSG_LOAD_ALL c=18
 #: ultralcd.cpp:6167
 msgid "Load all"
 msgstr "Laad alle"

+ 1 - 1
lang/po/new/pl.po

@@ -1555,7 +1555,7 @@ msgstr "Kalibr. XYZ niedokladna. Przednie punkty kalibr. nieosiagalne."
 msgid "XYZ calibration compromised. Right front calibration point not reachable."
 msgstr "Kalibracja XYZ niedokladna. Prawy przedni punkt nieosiagalny."
 
-# MSG_LOAD_ALL c=17
+# MSG_LOAD_ALL c=18
 #: ultralcd.cpp:6167
 msgid "Load all"
 msgstr "Zalad. wszystkie"