🎨 Standard material presets behavior
This commit is contained in:
		
				
					committed by
					
						
						Scott Lahteine
					
				
			
			
				
	
			
			
			
						parent
						
							84f9490149
						
					
				
				
					commit
					205d867e4b
				
			@@ -166,8 +166,14 @@ typedef struct {
 | 
			
		||||
 | 
			
		||||
select_t select_page{0}, select_file{0}, select_print{0}, select_prepare{0}
 | 
			
		||||
       , select_control{0}, select_axis{0}, select_temp{0}, select_motion{0}, select_tune{0}
 | 
			
		||||
       , select_advset{0}, select_PLA{0}, select_ABS{0}
 | 
			
		||||
       , select_speed{0}, select_acc{0}, select_jerk{0}, select_step{0}, select_item{0};
 | 
			
		||||
       , select_advset{0}, select_speed{0}, select_acc{0}, select_jerk{0}, select_step{0}, select_item{0};
 | 
			
		||||
 | 
			
		||||
#if HAS_PREHEAT
 | 
			
		||||
  select_t select_PLA{0};
 | 
			
		||||
  #if PREHEAT_COUNT > 1
 | 
			
		||||
    select_t select_ABS{0};
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
uint8_t index_file     = MROWS,
 | 
			
		||||
        index_prepare  = MROWS,
 | 
			
		||||
@@ -492,8 +498,8 @@ inline bool Apply_Encoder(const EncoderState &encoder_diffState, T &valref) {
 | 
			
		||||
#define PREPARE_CASE_DISA  2
 | 
			
		||||
#define PREPARE_CASE_HOME  3
 | 
			
		||||
#define PREPARE_CASE_ZOFF (PREPARE_CASE_HOME + ENABLED(HAS_ZOFFSET_ITEM))
 | 
			
		||||
#define PREPARE_CASE_PLA  (PREPARE_CASE_ZOFF + ENABLED(HAS_HOTEND))
 | 
			
		||||
#define PREPARE_CASE_ABS  (PREPARE_CASE_PLA + ENABLED(HAS_HOTEND))
 | 
			
		||||
#define PREPARE_CASE_PLA  (PREPARE_CASE_ZOFF + ENABLED(HAS_PREHEAT))
 | 
			
		||||
#define PREPARE_CASE_ABS  (PREPARE_CASE_PLA + (TERN0(HAS_PREHEAT, PREHEAT_COUNT > 1)))
 | 
			
		||||
#define PREPARE_CASE_COOL (PREPARE_CASE_ABS + EITHER(HAS_HOTEND, HAS_HEATED_BED))
 | 
			
		||||
#define PREPARE_CASE_LANG (PREPARE_CASE_COOL + 1)
 | 
			
		||||
#define PREPARE_CASE_TOTAL PREPARE_CASE_LANG
 | 
			
		||||
@@ -517,8 +523,8 @@ inline bool Apply_Encoder(const EncoderState &encoder_diffState, T &valref) {
 | 
			
		||||
#define TEMP_CASE_TEMP (0 + ENABLED(HAS_HOTEND))
 | 
			
		||||
#define TEMP_CASE_BED  (TEMP_CASE_TEMP + ENABLED(HAS_HEATED_BED))
 | 
			
		||||
#define TEMP_CASE_FAN  (TEMP_CASE_BED + ENABLED(HAS_FAN))
 | 
			
		||||
#define TEMP_CASE_PLA  (TEMP_CASE_FAN + ENABLED(HAS_HOTEND))
 | 
			
		||||
#define TEMP_CASE_ABS  (TEMP_CASE_PLA + ENABLED(HAS_HOTEND))
 | 
			
		||||
#define TEMP_CASE_PLA  (TEMP_CASE_FAN + ENABLED(HAS_PREHEAT))
 | 
			
		||||
#define TEMP_CASE_ABS  (TEMP_CASE_PLA + (TERN0(HAS_PREHEAT, PREHEAT_COUNT > 1)))
 | 
			
		||||
#define TEMP_CASE_TOTAL TEMP_CASE_ABS
 | 
			
		||||
 | 
			
		||||
#define PREHEAT_CASE_TEMP (0 + ENABLED(HAS_HOTEND))
 | 
			
		||||
@@ -785,6 +791,8 @@ void Draw_Prepare_Menu() {
 | 
			
		||||
    #if PREHEAT_COUNT > 1
 | 
			
		||||
      if (PVISI(PREPARE_CASE_ABS)) Item_Prepare_ABS(PSCROL(PREPARE_CASE_ABS));    // Preheat ABS
 | 
			
		||||
    #endif
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_HOTEND || HAS_HEATED_BED
 | 
			
		||||
    if (PVISI(PREPARE_CASE_COOL)) Item_Prepare_Cool(PSCROL(PREPARE_CASE_COOL));   // Cooldown
 | 
			
		||||
  #endif
 | 
			
		||||
  if (PVISI(PREPARE_CASE_LANG)) Item_Prepare_Lang(PSCROL(PREPARE_CASE_LANG));     // Language CN/EN
 | 
			
		||||
@@ -2664,10 +2672,10 @@ void HMI_Prepare() {
 | 
			
		||||
        // Draw "More" icon for sub-menus
 | 
			
		||||
        if (index_prepare < 7) Draw_More_Icon(MROWS - index_prepare + 1);
 | 
			
		||||
 | 
			
		||||
        #if HAS_HOTEND
 | 
			
		||||
        #if PREHEAT_COUNT > 1
 | 
			
		||||
          if (index_prepare == PREPARE_CASE_ABS) Item_Prepare_ABS(MROWS);
 | 
			
		||||
        #endif
 | 
			
		||||
        #if HAS_PREHEAT
 | 
			
		||||
        #if HAS_HOTEND || HAS_HEATED_BED
 | 
			
		||||
          if (index_prepare == PREPARE_CASE_COOL) Item_Prepare_Cool(MROWS);
 | 
			
		||||
        #endif
 | 
			
		||||
        if (index_prepare == PREPARE_CASE_LANG) Item_Prepare_Lang(MROWS);
 | 
			
		||||
@@ -2743,16 +2751,13 @@ void HMI_Prepare() {
 | 
			
		||||
          break;
 | 
			
		||||
      #endif
 | 
			
		||||
      #if HAS_PREHEAT
 | 
			
		||||
        case PREPARE_CASE_PLA:
 | 
			
		||||
          TERN_(HAS_HOTEND, thermalManager.setTargetHotend(ui.material_preset[0].hotend_temp, 0));
 | 
			
		||||
          TERN_(HAS_HEATED_BED, thermalManager.setTargetBed(ui.material_preset[0].bed_temp));
 | 
			
		||||
          TERN_(HAS_FAN, thermalManager.set_fan_speed(0, ui.material_preset[0].fan_speed));
 | 
			
		||||
          break;
 | 
			
		||||
        case PREPARE_CASE_ABS:
 | 
			
		||||
          TERN_(HAS_HOTEND, thermalManager.setTargetHotend(ui.material_preset[1].hotend_temp, 0));
 | 
			
		||||
          TERN_(HAS_HEATED_BED, thermalManager.setTargetBed(ui.material_preset[1].bed_temp));
 | 
			
		||||
          TERN_(HAS_FAN, thermalManager.set_fan_speed(0, ui.material_preset[1].fan_speed));
 | 
			
		||||
          break;
 | 
			
		||||
        case PREPARE_CASE_PLA: ui.preheat_all(0); break;
 | 
			
		||||
        #if PREHEAT_COUNT > 1
 | 
			
		||||
          case PREPARE_CASE_ABS: ui.preheat_all(1); break;
 | 
			
		||||
        #endif
 | 
			
		||||
      #endif
 | 
			
		||||
 | 
			
		||||
      #if HAS_HOTEND || HAS_HEATED_BED
 | 
			
		||||
        case PREPARE_CASE_COOL:
 | 
			
		||||
          TERN_(HAS_FAN, thermalManager.zero_fan_speeds());
 | 
			
		||||
          #if HAS_HOTEND || HAS_HEATED_BED
 | 
			
		||||
@@ -2760,6 +2765,7 @@ void HMI_Prepare() {
 | 
			
		||||
          #endif
 | 
			
		||||
          break;
 | 
			
		||||
      #endif
 | 
			
		||||
 | 
			
		||||
      case PREPARE_CASE_LANG:
 | 
			
		||||
        HMI_ToggleLanguage();
 | 
			
		||||
        Draw_Prepare_Menu();
 | 
			
		||||
@@ -2784,9 +2790,11 @@ void Draw_Temperature_Menu() {
 | 
			
		||||
    #if HAS_FAN
 | 
			
		||||
      Item_AreaCopy(115, 134, 170, 146, TEMP_CASE_FAN);
 | 
			
		||||
    #endif
 | 
			
		||||
    #if HAS_HOTEND
 | 
			
		||||
    #if HAS_PREHEAT
 | 
			
		||||
      Item_AreaCopy(100, 89, 178, 101, TEMP_CASE_PLA);
 | 
			
		||||
      Item_AreaCopy(180, 89, 260, 100, TEMP_CASE_ABS);
 | 
			
		||||
      #if PREHEAT_COUNT > 1
 | 
			
		||||
        Item_AreaCopy(180, 89, 260, 100, TEMP_CASE_ABS);
 | 
			
		||||
      #endif
 | 
			
		||||
    #endif
 | 
			
		||||
  }
 | 
			
		||||
  else {
 | 
			
		||||
@@ -2805,30 +2813,33 @@ void Draw_Temperature_Menu() {
 | 
			
		||||
      #if HAS_FAN
 | 
			
		||||
        DWIN_Draw_Label(TEMP_CASE_FAN, GET_TEXT_F(MSG_FAN_SPEED));
 | 
			
		||||
      #endif
 | 
			
		||||
      #if HAS_HOTEND
 | 
			
		||||
      #if HAS_PREHEAT
 | 
			
		||||
        DWIN_Draw_Label(TEMP_CASE_PLA, F(PREHEAT_1_LABEL " Preheat Settings"));
 | 
			
		||||
        DWIN_Draw_Label(TEMP_CASE_ABS, F(PREHEAT_2_LABEL " Preheat Settings"));
 | 
			
		||||
        #if PREHEAT_COUNT > 1
 | 
			
		||||
          DWIN_Draw_Label(TEMP_CASE_ABS, F(PREHEAT_2_LABEL " Preheat Settings"));
 | 
			
		||||
        #endif
 | 
			
		||||
      #endif
 | 
			
		||||
    #else
 | 
			
		||||
      #if HAS_HOTEND
 | 
			
		||||
        Item_AreaCopy(197, 104, 238, 114, TEMP_CASE_TEMP);    // "Nozzle"
 | 
			
		||||
        Item_AreaCopy(1,  89,  83, 101, TEMP_CASE_TEMP, 44);  // "Temperature"
 | 
			
		||||
        Item_AreaCopy(197, 104, 238, 114, TEMP_CASE_TEMP);      // "Nozzle"
 | 
			
		||||
        Item_AreaCopy(1,  89,  83, 101, TEMP_CASE_TEMP, 44);    // "Temperature"
 | 
			
		||||
      #endif
 | 
			
		||||
      #if HAS_HEATED_BED
 | 
			
		||||
        Item_AreaCopy(240, 104, 264, 114, TEMP_CASE_BED);     // "Bed"
 | 
			
		||||
        Item_AreaCopy(1,  89,  83, 101, TEMP_CASE_BED, 27);   // "Temperature"
 | 
			
		||||
        Item_AreaCopy(240, 104, 264, 114, TEMP_CASE_BED);       // "Bed"
 | 
			
		||||
        Item_AreaCopy(1,  89,  83, 101, TEMP_CASE_BED, 27);     // "Temperature"
 | 
			
		||||
      #endif
 | 
			
		||||
      #if HAS_FAN
 | 
			
		||||
        Item_AreaCopy(  1, 119,  61, 132, TEMP_CASE_FAN);     // "Fan speed"
 | 
			
		||||
        Item_AreaCopy(  1, 119,  61, 132, TEMP_CASE_FAN);       // "Fan speed"
 | 
			
		||||
      #endif
 | 
			
		||||
      #if HAS_HOTEND
 | 
			
		||||
        Item_AreaCopy(107,  76, 156,  86, TEMP_CASE_PLA);     // "Preheat"
 | 
			
		||||
        say_pla_en(52, TEMP_CASE_PLA);                        // "PLA"
 | 
			
		||||
        Item_AreaCopy(150, 135, 202, 148, TEMP_CASE_PLA, 79); // "Settings"
 | 
			
		||||
 | 
			
		||||
        Item_AreaCopy(107,  76, 156,  86, TEMP_CASE_ABS);     // "Preheat"
 | 
			
		||||
        say_abs_en(52, TEMP_CASE_ABS);                        // "ABS"
 | 
			
		||||
        Item_AreaCopy(150, 135, 202, 148, TEMP_CASE_ABS, 81); // "Settings"
 | 
			
		||||
      #if HAS_PREHEAT
 | 
			
		||||
        Item_AreaCopy(107,  76, 156,  86, TEMP_CASE_PLA);       // "Preheat"
 | 
			
		||||
        say_pla_en(52, TEMP_CASE_PLA);                          // "PLA"
 | 
			
		||||
        Item_AreaCopy(150, 135, 202, 148, TEMP_CASE_PLA, 79);   // "Settings"
 | 
			
		||||
        #if PREHEAT_COUNT > 1
 | 
			
		||||
          Item_AreaCopy(107,  76, 156,  86, TEMP_CASE_ABS);     // "Preheat"
 | 
			
		||||
          say_abs_en(52, TEMP_CASE_ABS);                        // "ABS"
 | 
			
		||||
          Item_AreaCopy(150, 135, 202, 148, TEMP_CASE_ABS, 81); // "Settings"
 | 
			
		||||
        #endif
 | 
			
		||||
      #endif
 | 
			
		||||
    #endif
 | 
			
		||||
  }
 | 
			
		||||
@@ -2851,12 +2862,12 @@ void Draw_Temperature_Menu() {
 | 
			
		||||
    _TMENU_ICON(TEMP_CASE_FAN);
 | 
			
		||||
    Draw_Edit_Integer3(i, thermalManager.fan_speed[0]);
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_HOTEND
 | 
			
		||||
  #if HAS_PREHEAT
 | 
			
		||||
    // PLA/ABS items have submenus
 | 
			
		||||
    _TMENU_ICON(TEMP_CASE_PLA);
 | 
			
		||||
    Draw_More_Icon(i);
 | 
			
		||||
    _TMENU_ICON(TEMP_CASE_ABS);
 | 
			
		||||
    Draw_More_Icon(i);
 | 
			
		||||
    _TMENU_ICON(TEMP_CASE_PLA); Draw_More_Icon(i);
 | 
			
		||||
    #if PREHEAT_COUNT > 1
 | 
			
		||||
      _TMENU_ICON(TEMP_CASE_ABS); Draw_More_Icon(i);
 | 
			
		||||
    #endif
 | 
			
		||||
  #endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -3076,6 +3087,7 @@ void HMI_Temperature() {
 | 
			
		||||
          EncoderRate.enabled = true;
 | 
			
		||||
          break;
 | 
			
		||||
      #endif
 | 
			
		||||
 | 
			
		||||
      #if HAS_PREHEAT
 | 
			
		||||
        case TEMP_CASE_PLA: {
 | 
			
		||||
          checkkey = PLAPreheat;
 | 
			
		||||
@@ -3153,7 +3165,8 @@ void HMI_Temperature() {
 | 
			
		||||
            Draw_Menu_Line(++i, ICON_WriteEEPROM);
 | 
			
		||||
          #endif
 | 
			
		||||
        } break;
 | 
			
		||||
      #endif
 | 
			
		||||
      #endif // HAS_PREHEAT
 | 
			
		||||
 | 
			
		||||
      #if PREHEAT_COUNT > 1
 | 
			
		||||
        case TEMP_CASE_ABS: { // ABS preheat setting
 | 
			
		||||
          checkkey = ABSPreheat;
 | 
			
		||||
@@ -3236,7 +3249,7 @@ void HMI_Temperature() {
 | 
			
		||||
 | 
			
		||||
        } break;
 | 
			
		||||
 | 
			
		||||
      #endif // HAS_HOTEND
 | 
			
		||||
      #endif // PREHEAT_COUNT > 1
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  DWIN_UpdateLCD();
 | 
			
		||||
@@ -3579,14 +3592,12 @@ void HMI_AdvSet() {
 | 
			
		||||
 | 
			
		||||
      #if HAS_HOTEND
 | 
			
		||||
        case ADVSET_CASE_HEPID:
 | 
			
		||||
          thermalManager.setTargetHotend(ui.material_preset[0].hotend_temp, 0);
 | 
			
		||||
          thermalManager.PID_autotune(ui.material_preset[0].hotend_temp, H_E0, 10, true);
 | 
			
		||||
          break;
 | 
			
		||||
      #endif
 | 
			
		||||
 | 
			
		||||
      #if HAS_HEATED_BED
 | 
			
		||||
        case ADVSET_CASE_BEDPID:
 | 
			
		||||
          thermalManager.setTargetBed(ui.material_preset[0].bed_temp);
 | 
			
		||||
          thermalManager.PID_autotune(ui.material_preset[0].bed_temp, H_BED, 10, true);
 | 
			
		||||
          break;
 | 
			
		||||
      #endif
 | 
			
		||||
@@ -3881,63 +3892,65 @@ void HMI_Tune() {
 | 
			
		||||
    DWIN_UpdateLCD();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // ABS Preheat
 | 
			
		||||
  void HMI_ABSPreheatSetting() {
 | 
			
		||||
    EncoderState encoder_diffState = get_encoder_state();
 | 
			
		||||
    if (encoder_diffState == ENCODER_DIFF_NO) return;
 | 
			
		||||
  #if PREHEAT_COUNT > 1
 | 
			
		||||
    // ABS Preheat
 | 
			
		||||
    void HMI_ABSPreheatSetting() {
 | 
			
		||||
      EncoderState encoder_diffState = get_encoder_state();
 | 
			
		||||
      if (encoder_diffState == ENCODER_DIFF_NO) return;
 | 
			
		||||
 | 
			
		||||
    // Avoid flicker by updating only the previous menu
 | 
			
		||||
    if (encoder_diffState == ENCODER_DIFF_CW) {
 | 
			
		||||
      if (select_ABS.inc(1 + PREHEAT_CASE_TOTAL)) Move_Highlight(1, select_ABS.now);
 | 
			
		||||
    }
 | 
			
		||||
    else if (encoder_diffState == ENCODER_DIFF_CCW) {
 | 
			
		||||
      if (select_ABS.dec()) Move_Highlight(-1, select_ABS.now);
 | 
			
		||||
    }
 | 
			
		||||
    else if (encoder_diffState == ENCODER_DIFF_ENTER) {
 | 
			
		||||
      switch (select_ABS.now) {
 | 
			
		||||
        case CASE_BACK:
 | 
			
		||||
          checkkey = TemperatureID;
 | 
			
		||||
          select_temp.now = TEMP_CASE_ABS;
 | 
			
		||||
          HMI_ValueStruct.show_mode = -1;
 | 
			
		||||
          Draw_Temperature_Menu();
 | 
			
		||||
          break;
 | 
			
		||||
        #if HAS_HOTEND
 | 
			
		||||
          case PREHEAT_CASE_TEMP:
 | 
			
		||||
            checkkey = ETemp;
 | 
			
		||||
            HMI_ValueStruct.E_Temp = ui.material_preset[1].hotend_temp;
 | 
			
		||||
            Draw_Edit_Integer3(PREHEAT_CASE_TEMP, ui.material_preset[1].hotend_temp, true);
 | 
			
		||||
            EncoderRate.enabled = true;
 | 
			
		||||
            break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if HAS_HEATED_BED
 | 
			
		||||
          case PREHEAT_CASE_BED:
 | 
			
		||||
            checkkey = BedTemp;
 | 
			
		||||
            HMI_ValueStruct.Bed_Temp = ui.material_preset[1].bed_temp;
 | 
			
		||||
            Draw_Edit_Integer3(PREHEAT_CASE_BED, ui.material_preset[1].bed_temp, true);
 | 
			
		||||
            EncoderRate.enabled = true;
 | 
			
		||||
            break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if HAS_FAN
 | 
			
		||||
          case PREHEAT_CASE_FAN:
 | 
			
		||||
            checkkey = FanSpeed;
 | 
			
		||||
            HMI_ValueStruct.Fan_speed = ui.material_preset[1].fan_speed;
 | 
			
		||||
            Draw_Edit_Integer3(PREHEAT_CASE_FAN, ui.material_preset[1].fan_speed, true);
 | 
			
		||||
            EncoderRate.enabled = true;
 | 
			
		||||
            break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if ENABLED(EEPROM_SETTINGS)
 | 
			
		||||
          case PREHEAT_CASE_SAVE: {
 | 
			
		||||
            const bool success = settings.save();
 | 
			
		||||
            HMI_AudioFeedback(success);
 | 
			
		||||
          } break;
 | 
			
		||||
        #endif
 | 
			
		||||
        default: break;
 | 
			
		||||
      // Avoid flicker by updating only the previous menu
 | 
			
		||||
      if (encoder_diffState == ENCODER_DIFF_CW) {
 | 
			
		||||
        if (select_ABS.inc(1 + PREHEAT_CASE_TOTAL)) Move_Highlight(1, select_ABS.now);
 | 
			
		||||
      }
 | 
			
		||||
      else if (encoder_diffState == ENCODER_DIFF_CCW) {
 | 
			
		||||
        if (select_ABS.dec()) Move_Highlight(-1, select_ABS.now);
 | 
			
		||||
      }
 | 
			
		||||
      else if (encoder_diffState == ENCODER_DIFF_ENTER) {
 | 
			
		||||
        switch (select_ABS.now) {
 | 
			
		||||
          case CASE_BACK:
 | 
			
		||||
            checkkey = TemperatureID;
 | 
			
		||||
            select_temp.now = TEMP_CASE_ABS;
 | 
			
		||||
            HMI_ValueStruct.show_mode = -1;
 | 
			
		||||
            Draw_Temperature_Menu();
 | 
			
		||||
            break;
 | 
			
		||||
          #if HAS_HOTEND
 | 
			
		||||
            case PREHEAT_CASE_TEMP:
 | 
			
		||||
              checkkey = ETemp;
 | 
			
		||||
              HMI_ValueStruct.E_Temp = ui.material_preset[1].hotend_temp;
 | 
			
		||||
              Draw_Edit_Integer3(PREHEAT_CASE_TEMP, ui.material_preset[1].hotend_temp, true);
 | 
			
		||||
              EncoderRate.enabled = true;
 | 
			
		||||
              break;
 | 
			
		||||
          #endif
 | 
			
		||||
          #if HAS_HEATED_BED
 | 
			
		||||
            case PREHEAT_CASE_BED:
 | 
			
		||||
              checkkey = BedTemp;
 | 
			
		||||
              HMI_ValueStruct.Bed_Temp = ui.material_preset[1].bed_temp;
 | 
			
		||||
              Draw_Edit_Integer3(PREHEAT_CASE_BED, ui.material_preset[1].bed_temp, true);
 | 
			
		||||
              EncoderRate.enabled = true;
 | 
			
		||||
              break;
 | 
			
		||||
          #endif
 | 
			
		||||
          #if HAS_FAN
 | 
			
		||||
            case PREHEAT_CASE_FAN:
 | 
			
		||||
              checkkey = FanSpeed;
 | 
			
		||||
              HMI_ValueStruct.Fan_speed = ui.material_preset[1].fan_speed;
 | 
			
		||||
              Draw_Edit_Integer3(PREHEAT_CASE_FAN, ui.material_preset[1].fan_speed, true);
 | 
			
		||||
              EncoderRate.enabled = true;
 | 
			
		||||
              break;
 | 
			
		||||
          #endif
 | 
			
		||||
          #if ENABLED(EEPROM_SETTINGS)
 | 
			
		||||
            case PREHEAT_CASE_SAVE: {
 | 
			
		||||
              const bool success = settings.save();
 | 
			
		||||
              HMI_AudioFeedback(success);
 | 
			
		||||
            } break;
 | 
			
		||||
          #endif
 | 
			
		||||
          default: break;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      DWIN_UpdateLCD();
 | 
			
		||||
    }
 | 
			
		||||
    DWIN_UpdateLCD();
 | 
			
		||||
  }
 | 
			
		||||
  #endif // PREHEAT_COUNT > 1
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
#endif // HAS_PREHEAT
 | 
			
		||||
 | 
			
		||||
// Max Speed
 | 
			
		||||
void HMI_MaxSpeed() {
 | 
			
		||||
@@ -4241,7 +4254,9 @@ void DWIN_HandleScreen() {
 | 
			
		||||
    case Tune:            HMI_Tune(); break;
 | 
			
		||||
    #if HAS_PREHEAT
 | 
			
		||||
      case PLAPreheat:    HMI_PLAPreheatSetting(); break;
 | 
			
		||||
      case ABSPreheat:    HMI_ABSPreheatSetting(); break;
 | 
			
		||||
      #if PREHEAT_COUNT > 1
 | 
			
		||||
        case ABSPreheat:  HMI_ABSPreheatSetting(); break;
 | 
			
		||||
      #endif
 | 
			
		||||
    #endif
 | 
			
		||||
    case MaxSpeed:        HMI_MaxSpeed(); break;
 | 
			
		||||
    case MaxAcceleration: HMI_MaxAcceleration(); break;
 | 
			
		||||
 
 | 
			
		||||
@@ -2116,21 +2116,15 @@ void SetHome() {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if HAS_PREHEAT
 | 
			
		||||
  void SetPreheat(const uint8_t i) {
 | 
			
		||||
    TERN_(HAS_HOTEND,     thermalManager.setTargetHotend(ui.material_preset[i].hotend_temp, 0));
 | 
			
		||||
    TERN_(HAS_HEATED_BED, thermalManager.setTargetBed(ui.material_preset[i].bed_temp));
 | 
			
		||||
    TERN_(HAS_FAN,        thermalManager.set_fan_speed(0, ui.material_preset[i].fan_speed));
 | 
			
		||||
  }
 | 
			
		||||
  void SetPreheat0() { SetPreheat(0); }
 | 
			
		||||
  void SetPreheat1() { SetPreheat(1); }
 | 
			
		||||
  void SetPreheat2() { SetPreheat(2); }
 | 
			
		||||
 | 
			
		||||
  void SetCoolDown() {
 | 
			
		||||
    TERN_(HAS_FAN, thermalManager.zero_fan_speeds());
 | 
			
		||||
    #if HAS_HOTEND || HAS_HEATED_BED
 | 
			
		||||
      thermalManager.disable_all_heaters();
 | 
			
		||||
    #endif
 | 
			
		||||
  }
 | 
			
		||||
  void DoPreheat0() { ui.preheat_all(0); }
 | 
			
		||||
  void DoPreheat1() { ui.preheat_all(1); }
 | 
			
		||||
  void DoPreheat2() { ui.preheat_all(2); }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void SetLanguage() {
 | 
			
		||||
@@ -3125,12 +3119,12 @@ void Draw_Prepare_Menu() {
 | 
			
		||||
      #endif
 | 
			
		||||
    #endif
 | 
			
		||||
    #if HAS_PREHEAT
 | 
			
		||||
      ADDMENUITEM(ICON_PLAPreheat, GET_TEXT_F(MSG_PREHEAT_1), onDrawPreheat1, SetPreheat0);
 | 
			
		||||
      ADDMENUITEM(ICON_PLAPreheat, GET_TEXT_F(MSG_PREHEAT_1), onDrawPreheat1, DoPreheat0);
 | 
			
		||||
      #if PREHEAT_COUNT > 1
 | 
			
		||||
        ADDMENUITEM(ICON_ABSPreheat, PSTR("Preheat " PREHEAT_2_LABEL), onDrawPreheat2, SetPreheat1);
 | 
			
		||||
        ADDMENUITEM(ICON_ABSPreheat, PSTR("Preheat " PREHEAT_2_LABEL), onDrawPreheat2, DoPreheat1);
 | 
			
		||||
      #endif
 | 
			
		||||
      #if PREHEAT_COUNT > 2
 | 
			
		||||
        ADDMENUITEM(ICON_CustomPreheat, GET_TEXT_F(MSG_PREHEAT_CUSTOM), onDrawMenuItem, SetPreheat2);
 | 
			
		||||
        ADDMENUITEM(ICON_CustomPreheat, GET_TEXT_F(MSG_PREHEAT_CUSTOM), onDrawMenuItem, DoPreheat2);
 | 
			
		||||
      #endif
 | 
			
		||||
      ADDMENUITEM(ICON_Cool, GET_TEXT_F(MSG_COOLDOWN), onDrawCooldown, SetCoolDown);
 | 
			
		||||
    #endif
 | 
			
		||||
 
 | 
			
		||||
@@ -1584,9 +1584,9 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    #endif
 | 
			
		||||
    #if HAS_PREHEAT
 | 
			
		||||
      case Preheat:
 | 
			
		||||
 | 
			
		||||
    #if HAS_PREHEAT
 | 
			
		||||
      case Preheat: {
 | 
			
		||||
        #define PREHEAT_BACK 0
 | 
			
		||||
        #define PREHEAT_MODE (PREHEAT_BACK + 1)
 | 
			
		||||
        #define PREHEAT_1 (PREHEAT_MODE + 1)
 | 
			
		||||
@@ -1596,6 +1596,13 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
 | 
			
		||||
        #define PREHEAT_5 (PREHEAT_4 + (PREHEAT_COUNT >= 5))
 | 
			
		||||
        #define PREHEAT_TOTAL PREHEAT_5
 | 
			
		||||
 | 
			
		||||
        auto do_preheat = [](const uint8_t m) {
 | 
			
		||||
          thermalManager.disable_all_heaters();
 | 
			
		||||
          TERN_(HAS_FAN, thermalManager.zero_fan_speeds());
 | 
			
		||||
          if (preheatmode == 0 || preheatmode == 1) { ui.preheat_hotend_and_fan(m); }
 | 
			
		||||
          if (preheatmode == 0 || preheatmode == 2) ui.preheat_bed(m);
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        switch (item) {
 | 
			
		||||
          case PREHEAT_BACK:
 | 
			
		||||
            if (draw)
 | 
			
		||||
@@ -1616,17 +1623,8 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
 | 
			
		||||
            case PREHEAT_1:
 | 
			
		||||
              if (draw)
 | 
			
		||||
                Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_1_LABEL));
 | 
			
		||||
              else {
 | 
			
		||||
                thermalManager.disable_all_heaters();
 | 
			
		||||
                TERN_(HAS_FAN, thermalManager.zero_fan_speeds());
 | 
			
		||||
                if (preheatmode == 0 || preheatmode == 1) {
 | 
			
		||||
                  TERN_(HAS_HOTEND, thermalManager.setTargetHotend(ui.material_preset[0].hotend_temp, 0));
 | 
			
		||||
                  TERN_(HAS_FAN, thermalManager.set_fan_speed(0, ui.material_preset[0].fan_speed));
 | 
			
		||||
                }
 | 
			
		||||
                #if HAS_HEATED_BED
 | 
			
		||||
                  if (preheatmode == 0 || preheatmode == 2) thermalManager.setTargetBed(ui.material_preset[0].bed_temp);
 | 
			
		||||
                #endif
 | 
			
		||||
              }
 | 
			
		||||
              else
 | 
			
		||||
                do_preheat(0);
 | 
			
		||||
              break;
 | 
			
		||||
          #endif
 | 
			
		||||
 | 
			
		||||
@@ -1634,17 +1632,8 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
 | 
			
		||||
            case PREHEAT_2:
 | 
			
		||||
              if (draw)
 | 
			
		||||
                Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_2_LABEL));
 | 
			
		||||
              else {
 | 
			
		||||
                thermalManager.disable_all_heaters();
 | 
			
		||||
                TERN_(HAS_FAN, thermalManager.zero_fan_speeds());
 | 
			
		||||
                if (preheatmode == 0 || preheatmode == 1) {
 | 
			
		||||
                  TERN_(HAS_HOTEND, thermalManager.setTargetHotend(ui.material_preset[1].hotend_temp, 0));
 | 
			
		||||
                  TERN_(HAS_FAN, thermalManager.set_fan_speed(0, ui.material_preset[1].fan_speed));
 | 
			
		||||
                }
 | 
			
		||||
                #if HAS_HEATED_BED
 | 
			
		||||
                  if (preheatmode == 0 || preheatmode == 2) thermalManager.setTargetBed(ui.material_preset[1].bed_temp);
 | 
			
		||||
                #endif
 | 
			
		||||
              }
 | 
			
		||||
              else
 | 
			
		||||
                do_preheat(1);
 | 
			
		||||
              break;
 | 
			
		||||
          #endif
 | 
			
		||||
 | 
			
		||||
@@ -1652,17 +1641,8 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
 | 
			
		||||
            case PREHEAT_3:
 | 
			
		||||
              if (draw)
 | 
			
		||||
                Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_3_LABEL));
 | 
			
		||||
              else {
 | 
			
		||||
                thermalManager.disable_all_heaters();
 | 
			
		||||
                TERN_(HAS_FAN, thermalManager.zero_fan_speeds());
 | 
			
		||||
                if (preheatmode == 0 || preheatmode == 1) {
 | 
			
		||||
                  TERN_(HAS_HOTEND, thermalManager.setTargetHotend(ui.material_preset[2].hotend_temp, 0));
 | 
			
		||||
                  TERN_(HAS_FAN, thermalManager.set_fan_speed(0, ui.material_preset[2].fan_speed));
 | 
			
		||||
                }
 | 
			
		||||
                #if HAS_HEATED_BED
 | 
			
		||||
                  if (preheatmode == 0 || preheatmode == 2) thermalManager.setTargetBed(ui.material_preset[2].bed_temp);
 | 
			
		||||
                #endif
 | 
			
		||||
              }
 | 
			
		||||
              else
 | 
			
		||||
                do_preheat(2);
 | 
			
		||||
              break;
 | 
			
		||||
          #endif
 | 
			
		||||
 | 
			
		||||
@@ -1670,17 +1650,8 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
 | 
			
		||||
            case PREHEAT_4:
 | 
			
		||||
              if (draw)
 | 
			
		||||
                Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_4_LABEL));
 | 
			
		||||
              else {
 | 
			
		||||
                thermalManager.disable_all_heaters();
 | 
			
		||||
                TERN_(HAS_FAN, thermalManager.zero_fan_speeds());
 | 
			
		||||
                if (preheatmode == 0 || preheatmode == 1) {
 | 
			
		||||
                  TERN_(HAS_HOTEND, thermalManager.setTargetHotend(ui.material_preset[3].hotend_temp, 0));
 | 
			
		||||
                  TERN_(HAS_FAN, thermalManager.set_fan_speed(0, ui.material_preset[3].fan_speed));
 | 
			
		||||
                }
 | 
			
		||||
                #if HAS_HEATED_BED
 | 
			
		||||
                  if (preheatmode == 0 || preheatmode == 2) thermalManager.setTargetBed(ui.material_preset[3].bed_temp);
 | 
			
		||||
                #endif
 | 
			
		||||
              }
 | 
			
		||||
              else
 | 
			
		||||
                do_preheat(3);
 | 
			
		||||
              break;
 | 
			
		||||
          #endif
 | 
			
		||||
 | 
			
		||||
@@ -1688,22 +1659,13 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
 | 
			
		||||
            case PREHEAT_5:
 | 
			
		||||
              if (draw)
 | 
			
		||||
                Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_5_LABEL));
 | 
			
		||||
              else {
 | 
			
		||||
                thermalManager.disable_all_heaters();
 | 
			
		||||
                TERN_(HAS_FAN, thermalManager.zero_fan_speeds());
 | 
			
		||||
                if (preheatmode == 0 || preheatmode == 1) {
 | 
			
		||||
                  TERN_(HAS_HOTEND, thermalManager.setTargetHotend(ui.material_preset[4].hotend_temp, 0));
 | 
			
		||||
                  TERN_(HAS_FAN, thermalManager.set_fan_speed(0, ui.material_preset[4].fan_speed));
 | 
			
		||||
                }
 | 
			
		||||
                #if HAS_HEATED_BED
 | 
			
		||||
                  if (preheatmode == 0 || preheatmode == 2) thermalManager.setTargetBed(ui.material_preset[4].bed_temp);
 | 
			
		||||
                #endif
 | 
			
		||||
              }
 | 
			
		||||
              else
 | 
			
		||||
                do_preheat(4);
 | 
			
		||||
              break;
 | 
			
		||||
          #endif
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    #endif
 | 
			
		||||
      } break;
 | 
			
		||||
    #endif // HAS_PREHEAT
 | 
			
		||||
 | 
			
		||||
    #if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES)
 | 
			
		||||
      case ChangeFilament:
 | 
			
		||||
@@ -3964,50 +3926,40 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
 | 
			
		||||
            case PREHEATHOTEND_1:
 | 
			
		||||
              if (draw)
 | 
			
		||||
                Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_1_LABEL));
 | 
			
		||||
              else {
 | 
			
		||||
                thermalManager.setTargetHotend(ui.material_preset[0].hotend_temp, 0);
 | 
			
		||||
                thermalManager.set_fan_speed(0, ui.material_preset[0].fan_speed);
 | 
			
		||||
              }
 | 
			
		||||
              else
 | 
			
		||||
                ui.preheat_hotend_and_fan(0);
 | 
			
		||||
              break;
 | 
			
		||||
          #endif
 | 
			
		||||
          #if PREHEAT_COUNT >= 2
 | 
			
		||||
            case PREHEATHOTEND_2:
 | 
			
		||||
              if (draw)
 | 
			
		||||
                Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_2_LABEL));
 | 
			
		||||
              else {
 | 
			
		||||
                thermalManager.setTargetHotend(ui.material_preset[1].hotend_temp, 0);
 | 
			
		||||
                thermalManager.set_fan_speed(0, ui.material_preset[1].fan_speed);
 | 
			
		||||
              }
 | 
			
		||||
              else
 | 
			
		||||
                ui.preheat_hotend_and_fan(1);
 | 
			
		||||
              break;
 | 
			
		||||
          #endif
 | 
			
		||||
          #if PREHEAT_COUNT >= 3
 | 
			
		||||
            case PREHEATHOTEND_3:
 | 
			
		||||
              if (draw)
 | 
			
		||||
                Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_3_LABEL));
 | 
			
		||||
              else {
 | 
			
		||||
                thermalManager.setTargetHotend(ui.material_preset[2].hotend_temp, 0);
 | 
			
		||||
                thermalManager.set_fan_speed(0, ui.material_preset[2].fan_speed);
 | 
			
		||||
              }
 | 
			
		||||
              else
 | 
			
		||||
                ui.preheat_hotend_and_fan(2);
 | 
			
		||||
              break;
 | 
			
		||||
          #endif
 | 
			
		||||
          #if PREHEAT_COUNT >= 4
 | 
			
		||||
            case PREHEATHOTEND_4:
 | 
			
		||||
              if (draw)
 | 
			
		||||
                Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_4_LABEL));
 | 
			
		||||
              else {
 | 
			
		||||
                thermalManager.setTargetHotend(ui.material_preset[3].hotend_temp, 0);
 | 
			
		||||
                thermalManager.set_fan_speed(0, ui.material_preset[3].fan_speed);
 | 
			
		||||
              }
 | 
			
		||||
              else
 | 
			
		||||
                ui.preheat_hotend_and_fan(3);
 | 
			
		||||
              break;
 | 
			
		||||
          #endif
 | 
			
		||||
          #if PREHEAT_COUNT >= 5
 | 
			
		||||
            case PREHEATHOTEND_5:
 | 
			
		||||
              if (draw)
 | 
			
		||||
                Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_5_LABEL));
 | 
			
		||||
              else {
 | 
			
		||||
                thermalManager.setTargetHotend(ui.material_preset[4].hotend_temp, 0);
 | 
			
		||||
                thermalManager.set_fan_speed(0, ui.material_preset[4].fan_speed);
 | 
			
		||||
              }
 | 
			
		||||
              else
 | 
			
		||||
                ui.preheat_hotend_and_fan(4);
 | 
			
		||||
              break;
 | 
			
		||||
          #endif
 | 
			
		||||
          case PREHEATHOTEND_CUSTOM:
 | 
			
		||||
 
 | 
			
		||||
@@ -621,55 +621,19 @@ void DGUSScreenHandler::HandleHeaterControl(DGUS_VP_Variable &var, void *val_ptr
 | 
			
		||||
  void DGUSScreenHandler::HandlePreheat(DGUS_VP_Variable &var, void *val_ptr) {
 | 
			
		||||
    DEBUG_ECHOLNPGM("HandlePreheat");
 | 
			
		||||
 | 
			
		||||
    uint8_t e_temp = 0;
 | 
			
		||||
    #if HAS_HEATED_BED
 | 
			
		||||
      uint8_t bed_temp = 0;
 | 
			
		||||
    #endif
 | 
			
		||||
    const uint16_t preheat_option = swap16(*(uint16_t*)val_ptr);
 | 
			
		||||
    switch (preheat_option) {
 | 
			
		||||
      default:
 | 
			
		||||
      case 0: // Preheat PLA
 | 
			
		||||
        #if defined(PREHEAT_1_TEMP_HOTEND) && defined(PREHEAT_1_TEMP_BED)
 | 
			
		||||
          e_temp = PREHEAT_1_TEMP_HOTEND;
 | 
			
		||||
          TERN_(HAS_HEATED_BED, bed_temp = PREHEAT_1_TEMP_BED);
 | 
			
		||||
        #endif
 | 
			
		||||
        break;
 | 
			
		||||
      case 1: // Preheat ABS
 | 
			
		||||
        #if defined(PREHEAT_2_TEMP_HOTEND) && defined(PREHEAT_2_TEMP_BED)
 | 
			
		||||
          e_temp = PREHEAT_2_TEMP_HOTEND;
 | 
			
		||||
          TERN_(HAS_HEATED_BED, bed_temp = PREHEAT_2_TEMP_BED);
 | 
			
		||||
        #endif
 | 
			
		||||
        break;
 | 
			
		||||
      case 2: // Preheat PET
 | 
			
		||||
        #if defined(PREHEAT_3_TEMP_HOTEND) && defined(PREHEAT_3_TEMP_BED)
 | 
			
		||||
          e_temp = PREHEAT_3_TEMP_HOTEND;
 | 
			
		||||
          TERN_(HAS_HEATED_BED, bed_temp = PREHEAT_3_TEMP_BED);
 | 
			
		||||
        #endif
 | 
			
		||||
        break;
 | 
			
		||||
      case 3: // Preheat FLEX
 | 
			
		||||
        #if defined(PREHEAT_4_TEMP_HOTEND) && defined(PREHEAT_4_TEMP_BED)
 | 
			
		||||
          e_temp = PREHEAT_4_TEMP_HOTEND;
 | 
			
		||||
          TERN_(HAS_HEATED_BED, bed_temp = PREHEAT_4_TEMP_BED);
 | 
			
		||||
        #endif
 | 
			
		||||
        break;
 | 
			
		||||
      switch (var.VP) {
 | 
			
		||||
        default: return;
 | 
			
		||||
        case VP_E0_BED_PREHEAT: TERN_(HAS_HOTEND, ui.preheat_all(0)); break;
 | 
			
		||||
        case VP_E1_BED_PREHEAT: TERN_(HAS_MULTI_HOTEND, ui.preheat_all(1)); break;
 | 
			
		||||
      }
 | 
			
		||||
      case 7: break; // Custom preheat
 | 
			
		||||
      case 9: break; // Cool down
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    switch (var.VP) {
 | 
			
		||||
      default: return;
 | 
			
		||||
        #if HAS_HOTEND
 | 
			
		||||
          case VP_E0_BED_PREHEAT:
 | 
			
		||||
            thermalManager.setTargetHotend(e_temp, 0);
 | 
			
		||||
            TERN_(HAS_HEATED_BED, thermalManager.setTargetBed(bed_temp));
 | 
			
		||||
            break;
 | 
			
		||||
        #endif
 | 
			
		||||
        #if HOTENDS >= 2
 | 
			
		||||
          case VP_E1_BED_PREHEAT:
 | 
			
		||||
            thermalManager.setTargetHotend(e_temp, 1);
 | 
			
		||||
            TERN_(HAS_HEATED_BED, thermalManager.setTargetBed(bed_temp));
 | 
			
		||||
            break;
 | 
			
		||||
        #endif
 | 
			
		||||
      case 9: // Cool down
 | 
			
		||||
        thermalManager.zero_fan_speeds();
 | 
			
		||||
        thermalManager.disable_all_heaters();
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Go to the preheat screen to show the heating progress
 | 
			
		||||
 
 | 
			
		||||
@@ -1035,10 +1035,7 @@ namespace ExtUI {
 | 
			
		||||
  void setFeedrate_percent(const_float_t value) { feedrate_percentage = constrain(value, 10, 500); }
 | 
			
		||||
 | 
			
		||||
  void coolDown() {
 | 
			
		||||
    #if HAS_HOTEND
 | 
			
		||||
      HOTEND_LOOP() thermalManager.setTargetHotend(0, e);
 | 
			
		||||
    #endif
 | 
			
		||||
    TERN_(HAS_HEATED_BED, thermalManager.setTargetBed(0));
 | 
			
		||||
    thermalManager.disable_all_heaters();
 | 
			
		||||
    TERN_(HAS_FAN, thermalManager.zero_fan_speeds());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -135,7 +135,10 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if HAS_PREHEAT
 | 
			
		||||
  #include "../module/temperature.h"
 | 
			
		||||
 | 
			
		||||
  preheat_t MarlinUI::material_preset[PREHEAT_COUNT];  // Initialized by settings.load()
 | 
			
		||||
 | 
			
		||||
  PGM_P MarlinUI::get_preheat_label(const uint8_t m) {
 | 
			
		||||
    #define _PDEF(N) static PGMSTR(preheat_##N##_label, PREHEAT_##N##_LABEL);
 | 
			
		||||
    #define _PLBL(N) preheat_##N##_label,
 | 
			
		||||
@@ -143,6 +146,14 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
 | 
			
		||||
    static PGM_P const preheat_labels[PREHEAT_COUNT] PROGMEM = { REPEAT_1(PREHEAT_COUNT, _PLBL) };
 | 
			
		||||
    return (PGM_P)pgm_read_ptr(&preheat_labels[m]);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void MarlinUI::apply_preheat(const uint8_t m, const uint8_t pmask, const uint8_t e/*=active_extruder*/) {
 | 
			
		||||
    const preheat_t &pre = material_preset[m];
 | 
			
		||||
    TERN_(HAS_HOTEND,           if (TEST(pmask, PM_HOTEND))  thermalManager.setTargetHotend(pre.hotend_temp, e));
 | 
			
		||||
    TERN_(HAS_HEATED_BED,       if (TEST(pmask, PM_BED))     thermalManager.setTargetBed(pre.bed_temp));
 | 
			
		||||
    //TERN_(HAS_HEATED_CHAMBER, if (TEST(pmask, PM_CHAMBER)) thermalManager.setTargetBed(pre.chamber_temp));
 | 
			
		||||
    TERN_(HAS_FAN,              if (TEST(pmask, PM_FAN))     thermalManager.set_fan_speed(0, pre.fan_speed));
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if EITHER(HAS_LCD_MENU, EXTENSIBLE_UI)
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,6 @@
 | 
			
		||||
 | 
			
		||||
#if ENABLED(ADVANCED_PAUSE_FEATURE) && ANY(HAS_LCD_MENU, EXTENSIBLE_UI, HAS_DWIN_E3V2)
 | 
			
		||||
  #include "../feature/pause.h"
 | 
			
		||||
  #include "../module/motion.h" // for active_extruder
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if ENABLED(DWIN_CREALITY_LCD)
 | 
			
		||||
@@ -498,8 +497,15 @@ public:
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #if HAS_PREHEAT
 | 
			
		||||
    enum PreheatMask : uint8_t { PM_HOTEND = _BV(0), PM_BED = _BV(1), PM_FAN = _BV(2), PM_CHAMBER = _BV(3) };
 | 
			
		||||
    static preheat_t material_preset[PREHEAT_COUNT];
 | 
			
		||||
    static PGM_P get_preheat_label(const uint8_t m);
 | 
			
		||||
    static void apply_preheat(const uint8_t m, const uint8_t pmask, const uint8_t e=active_extruder);
 | 
			
		||||
    static inline void preheat_set_fan(const uint8_t m) { TERN_(HAS_FAN, apply_preheat(m, PM_FAN)); }
 | 
			
		||||
    static inline void preheat_hotend(const uint8_t m, const uint8_t e=active_extruder) { TERN_(HAS_HOTEND, apply_preheat(m, PM_HOTEND)); }
 | 
			
		||||
    static inline void preheat_hotend_and_fan(const uint8_t m, const uint8_t e=active_extruder) { preheat_hotend(m, e); preheat_set_fan(m); }
 | 
			
		||||
    static inline void preheat_bed(const uint8_t m) { TERN_(HAS_HEATED_BED, apply_preheat(m, PM_BED)); }
 | 
			
		||||
    static inline void preheat_all(const uint8_t m) { apply_preheat(m, 0xFF); }
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #if SCREENS_CAN_TIME_OUT
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user