Sfoglia il codice sorgente

switching stealth/normal mode for mmu in settings menu and tune menu

PavelSindler 5 anni fa
parent
commit
819a91ab1e
3 ha cambiato i file con 45 aggiunte e 11 eliminazioni
  1. 24 3
      Firmware/mmu.cpp
  2. 20 8
      Firmware/ultralcd.cpp
  3. 1 0
      Firmware/ultralcd.h

+ 24 - 3
Firmware/mmu.cpp

@@ -45,6 +45,7 @@ namespace
         WaitCmd, //!< wait for command response
         Pause,
         GetDrvError, //!< get power failures count
+		SwitchMode //switch mmu between stealth and normal mode 
     };
 }
 
@@ -183,9 +184,9 @@ bool check_for_ir_sensor()
 
 static bool activate_stealth_mode()
 {
-#if defined (MMU_FORCE_STEALTH_MODE)
+#ifdef MMU_FORCE_STEALTH_MODE
 	return true;
-#elif
+#else
 	return (eeprom_read_byte((uint8_t*)EEPROM_MMU_STEALTH) == 1);
 #endif
 }
@@ -335,6 +336,12 @@ void mmu_loop(void)
 			mmu_last_cmd = mmu_cmd;
 			mmu_cmd = MmuCmd::None;
 		}
+		else if ((eeprom_read_byte((uint8_t*)EEPROM_MMU_STEALTH) != SilentModeMenu_MMU) && mmu_ready) {
+				DEBUG_PRINTF_P(PSTR("MMU <= 'M%d'\n"), SilentModeMenu_MMU);
+				mmu_printf_P(PSTR("M%d\n"), SilentModeMenu_MMU);
+				mmu_ready = false;
+				mmu_state = S::SwitchMode;
+		}
 		else if ((mmu_last_response + 300) < _millis()) //request every 300ms
 		{
 #ifndef IR_SENSOR
@@ -450,9 +457,23 @@ void mmu_loop(void)
 			mmu_state = S::Idle;
 		}
 		else if ((mmu_last_request + MMU_CMD_TIMEOUT) < _millis())
-		{ //resend request after timeout (5 min)
+		{ //timeout 45 s
+			mmu_state = S::Idle;
+		}
+		return;
+	case S::SwitchMode:
+		if (mmu_rx_ok() > 0)
+		{
+			DEBUG_PRINTF_P(PSTR("MMU => 'ok'\n"));
+			eeprom_update_byte((uint8_t*)EEPROM_MMU_STEALTH, SilentModeMenu_MMU);
+			mmu_ready = true;
+			mmu_state = S::Idle;
+		}
+		else if ((mmu_last_request + MMU_CMD_TIMEOUT) < _millis())
+		{ //timeout 45 s
 			mmu_state = S::Idle;
 		}
+		return;		
 	}
 }
 

+ 20 - 8
Firmware/ultralcd.cpp

@@ -4516,11 +4516,13 @@ static void lcd_sound_state_set(void)
 Sound_CycleState();
 }
 
+#ifndef MMU_FORCE_STEALTH_MODE
 static void lcd_silent_mode_mmu_set() {
 	if (SilentModeMenu_MMU == 1) SilentModeMenu_MMU = 0;
 	else SilentModeMenu_MMU = 1;
-	eeprom_update_byte((uint8_t*)EEPROM_MMU_STEALTH, SilentModeMenu_MMU);
+	//saving to eeprom is done in mmu_loop() after mmu actually switches state and confirms with "ok"
 }
+#endif //MMU_FORCE_STEALTH_MODE
 
 static void lcd_silent_mode_set() {
 	switch (SilentModeMenu) {
@@ -5295,16 +5297,25 @@ do\
             break; /* (probably) not needed*/\
         }\
     }\
+
+}\
+while (0)
+#endif //TMC2130
+
 #ifndef MMU_FORCE_STEALTH_MODE
-	if(mmu_enabled)\
+#define SETTINGS_MMU_MODE \
+do\
+{\
+	if (mmu_enabled)\
 	{\
-		if (SilentModeMenu_MMU == 0) MENU_ITEM_FUNCTION_P(_i("MMU Mode [Fast]"), lcd_silent_mode_mmu_set);\
-		else MENU_ITEM_FUNCTION_P(_i("MMU Mode [Stealth]"), lcd_silent_mode_mmu_set);\
+		if (SilentModeMenu_MMU == 0) MENU_ITEM_FUNCTION_P(_i("MMU Mode  [Fast]"), lcd_silent_mode_mmu_set); \
+		else MENU_ITEM_FUNCTION_P(_i("MMU Mode[Stealth]"), lcd_silent_mode_mmu_set); \
 	}\
-#endif //MMU_FORCE_STEALTH_MODE
 }\
-while (0)
-#endif //TMC2130
+while (0) 
+#else //MMU_FORCE_STEALTH_MODE
+#define SETTINGS_MMU_MODE
+#endif //MMU_FORCE_STEALTH_MODE
 
 #ifdef SDCARD_SORT_ALPHA
 #define SETTINGS_SD \
@@ -5410,6 +5421,7 @@ static void lcd_settings_menu()
 		MENU_ITEM_FUNCTION_P(_i("Fans check  [off]"), lcd_set_fan_check);////MSG_FANS_CHECK_OFF c=17 r=1
 
 	SETTINGS_SILENT_MODE;
+	SETTINGS_MMU_MODE;
 
 	MENU_ITEM_SUBMENU_P(_i("Mesh bed leveling"), lcd_mesh_bed_leveling_settings);////MSG_MBL_SETTINGS c=18 r=1
 
@@ -6626,7 +6638,7 @@ static void lcd_tune_menu()
 		}
 	}
 #endif //TMC2130
-
+	 SETTINGS_MMU_MODE;
      switch(eSoundMode)
           {
           case e_SOUND_MODE_LOUD:

+ 1 - 0
Firmware/ultralcd.h

@@ -117,6 +117,7 @@ extern int farm_status;
 #endif
 
 extern int8_t SilentModeMenu;
+extern uint8_t SilentModeMenu_MMU;
 
 extern bool cancel_heatup;
 extern bool isPrintPaused;