🎨 Combine M104/M109 and M140/M190 code
This commit is contained in:
		| @@ -648,8 +648,9 @@ private: | |||||||
|   #endif |   #endif | ||||||
|  |  | ||||||
|   #if HAS_EXTRUDERS |   #if HAS_EXTRUDERS | ||||||
|     static void M104(); |     static void M104_M109(const bool isM109); | ||||||
|     static void M109(); |     FORCE_INLINE static void M104() { M104_M109(false); } | ||||||
|  |     FORCE_INLINE static void M109() { M104_M109(true); } | ||||||
|   #endif |   #endif | ||||||
|  |  | ||||||
|   static void M105(); |   static void M105(); | ||||||
| @@ -699,8 +700,9 @@ private: | |||||||
|   #endif |   #endif | ||||||
|  |  | ||||||
|   #if HAS_HEATED_BED |   #if HAS_HEATED_BED | ||||||
|     static void M140(); |     static void M140_M190(const bool isM190); | ||||||
|     static void M190(); |     FORCE_INLINE static void M140() { M140_M190(false); } | ||||||
|  |     FORCE_INLINE static void M190() { M140_M190(true); } | ||||||
|   #endif |   #endif | ||||||
|  |  | ||||||
|   #if HAS_HEATED_CHAMBER |   #if HAS_HEATED_CHAMBER | ||||||
|   | |||||||
| @@ -51,89 +51,29 @@ | |||||||
|  |  | ||||||
| /** | /** | ||||||
|  * M104: Set Hotend Temperature target and return immediately |  * M104: Set Hotend Temperature target and return immediately | ||||||
|  * |  | ||||||
|  * Parameters: |  | ||||||
|  *  I<preset> : Material Preset index (if material presets are defined) |  | ||||||
|  *  T<index>  : Tool index. If omitted, applies to the active tool |  | ||||||
|  *  S<target> : The target temperature in current units |  | ||||||
|  */ |  | ||||||
| void GcodeSuite::M104() { |  | ||||||
|  |  | ||||||
|   if (DEBUGGING(DRYRUN)) return; |  | ||||||
|  |  | ||||||
|   #if ENABLED(MIXING_EXTRUDER) && MIXING_VIRTUAL_TOOLS > 1 |  | ||||||
|     constexpr int8_t target_extruder = 0; |  | ||||||
|   #else |  | ||||||
|     const int8_t target_extruder = get_target_extruder_from_command(); |  | ||||||
|     if (target_extruder < 0) return; |  | ||||||
|   #endif |  | ||||||
|  |  | ||||||
|   bool got_temp = false; |  | ||||||
|   celsius_t temp = 0; |  | ||||||
|  |  | ||||||
|   // Accept 'I' if temperature presets are defined |  | ||||||
|   #if PREHEAT_COUNT |  | ||||||
|     got_temp = parser.seenval('I'); |  | ||||||
|     if (got_temp) { |  | ||||||
|       const uint8_t index = parser.value_byte(); |  | ||||||
|       temp = ui.material_preset[_MIN(index, PREHEAT_COUNT - 1)].hotend_temp; |  | ||||||
|     } |  | ||||||
|   #endif |  | ||||||
|  |  | ||||||
|   // If no 'I' get the temperature from 'S' |  | ||||||
|   if (!got_temp) { |  | ||||||
|     got_temp = parser.seenval('S'); |  | ||||||
|     if (got_temp) temp = parser.value_celsius(); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   if (got_temp) { |  | ||||||
|     #if ENABLED(SINGLENOZZLE_STANDBY_TEMP) |  | ||||||
|       thermalManager.singlenozzle_temp[target_extruder] = temp; |  | ||||||
|       if (target_extruder != active_extruder) return; |  | ||||||
|     #endif |  | ||||||
|     thermalManager.setTargetHotend(temp, target_extruder); |  | ||||||
|  |  | ||||||
|     #if ENABLED(DUAL_X_CARRIAGE) |  | ||||||
|       if (idex_is_duplicating() && target_extruder == 0) |  | ||||||
|         thermalManager.setTargetHotend(temp ? temp + duplicate_extruder_temp_offset : 0, 1); |  | ||||||
|     #endif |  | ||||||
|  |  | ||||||
|     #if ENABLED(PRINTJOB_TIMER_AUTOSTART) |  | ||||||
|       /** |  | ||||||
|        * Stop the timer at the end of print. Start is managed by 'heat and wait' M109. |  | ||||||
|        * Hotends use EXTRUDE_MINTEMP / 2 to allow nozzles to be put into hot standby |  | ||||||
|        * mode, for instance in a dual extruder setup, without affecting the running |  | ||||||
|        * print timer. |  | ||||||
|        */ |  | ||||||
|       thermalManager.auto_job_check_timer(false, true); |  | ||||||
|     #endif |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   TERN_(AUTOTEMP, planner.autotemp_M104_M109()); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * M109: Set Hotend Temperature target and wait |  * M109: Set Hotend Temperature target and wait | ||||||
|  * |  * | ||||||
|  * Parameters |  * Parameters | ||||||
|  *  I<preset> : Material Preset index (if material presets are defined) |  *  I<preset> : Material Preset index (if material presets are defined) | ||||||
|  *  T<index>  : Tool index. If omitted, applies to the active tool |  *  T<index>  : Tool index. If omitted, applies to the active tool | ||||||
|  *  S<target> : The target temperature in current units. Wait for heating only. |  *  S<target> : The target temperature in current units. For M109, only wait when heating up. | ||||||
|  *  R<target> : The target temperature in current units. Wait for heating and cooling. |  | ||||||
|  * |  * | ||||||
|  * With AUTOTEMP... |  * With AUTOTEMP... | ||||||
|  *  F<factor> : Autotemp Scaling Factor. Set non-zero to enable Auto-temp. |  *  F<factor> : Autotemp Scaling Factor. Set non-zero to enable Auto-temp. | ||||||
|  *  S<min>    : Minimum temperature, in current units. |  *  S<min>    : Minimum temperature, in current units. | ||||||
|  *  B<max>    : Maximum temperature, in current units. |  *  B<max>    : Maximum temperature, in current units. | ||||||
|  * |  * | ||||||
|  |  * M109 Parameters | ||||||
|  |  *  R<target> : The target temperature in current units. Wait for heating and cooling. | ||||||
|  |  * | ||||||
|  * Examples |  * Examples | ||||||
|  *  M109 S100 : Set target to 100°. Wait until the hotend is at or above 100°. |  *  M104 S100 : Set target to 100° and return. | ||||||
|  *  M109 R150 : Set target to 150°. Wait until the hotend gets close to 150°. |  *  M109 R150 : Set target to 150°. Wait until the hotend gets close to 150°. | ||||||
|  * |  * | ||||||
|  * With PRINTJOB_TIMER_AUTOSTART turning on heaters will start the print job timer |  * With PRINTJOB_TIMER_AUTOSTART turning on heaters will start the print job timer | ||||||
|  *  (used by printingIsActive, etc.) and turning off heaters will stop the timer. |  *  (used by printingIsActive, etc.) and turning off heaters will stop the timer. | ||||||
|  */ |  */ | ||||||
| void GcodeSuite::M109() { | void GcodeSuite::M104_M109(const bool isM109) { | ||||||
|  |  | ||||||
|   if (DEBUGGING(DRYRUN)) return; |   if (DEBUGGING(DRYRUN)) return; | ||||||
|  |  | ||||||
| @@ -160,7 +100,7 @@ void GcodeSuite::M109() { | |||||||
|   bool no_wait_for_cooling = false; |   bool no_wait_for_cooling = false; | ||||||
|   if (!got_temp) { |   if (!got_temp) { | ||||||
|     no_wait_for_cooling = parser.seenval('S'); |     no_wait_for_cooling = parser.seenval('S'); | ||||||
|     got_temp = no_wait_for_cooling || parser.seenval('R'); |     got_temp = no_wait_for_cooling || (isM109 && parser.seenval('R')); | ||||||
|     if (got_temp) temp = parser.value_celsius(); |     if (got_temp) temp = parser.value_celsius(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -182,7 +122,7 @@ void GcodeSuite::M109() { | |||||||
|        * standby mode, (e.g., in a dual extruder setup) without affecting |        * standby mode, (e.g., in a dual extruder setup) without affecting | ||||||
|        * the running print timer. |        * the running print timer. | ||||||
|        */ |        */ | ||||||
|       thermalManager.auto_job_check_timer(true, true); |       thermalManager.auto_job_check_timer(isM109, true); | ||||||
|     #endif |     #endif | ||||||
|  |  | ||||||
|     #if HAS_STATUS_MESSAGE |     #if HAS_STATUS_MESSAGE | ||||||
| @@ -193,7 +133,7 @@ void GcodeSuite::M109() { | |||||||
|  |  | ||||||
|   TERN_(AUTOTEMP, planner.autotemp_M104_M109()); |   TERN_(AUTOTEMP, planner.autotemp_M104_M109()); | ||||||
|  |  | ||||||
|   if (got_temp) |   if (isM109 && got_temp) | ||||||
|     (void)thermalManager.wait_for_hotend(target_extruder, no_wait_for_cooling); |     (void)thermalManager.wait_for_hotend(target_extruder, no_wait_for_cooling); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -35,62 +35,28 @@ | |||||||
| #include "../../lcd/marlinui.h" | #include "../../lcd/marlinui.h" | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * M140: Set bed temperature |  * M140 - Set Bed Temperature target and return immediately | ||||||
|  |  * M190 - Set Bed Temperature target and wait | ||||||
|  * |  * | ||||||
|  *  I<index>  : Preset index (if material presets are defined) |  *  I<index>  : Preset index (if material presets are defined) | ||||||
|  *  S<target> : The target temperature in current units |  *  S<target> : The target temperature in current units | ||||||
|  */ |  | ||||||
| void GcodeSuite::M140() { |  | ||||||
|   if (DEBUGGING(DRYRUN)) return; |  | ||||||
|  |  | ||||||
|   bool got_temp = false; |  | ||||||
|   celsius_t temp = 0; |  | ||||||
|  |  | ||||||
|   // Accept 'I' if temperature presets are defined |  | ||||||
|   #if PREHEAT_COUNT |  | ||||||
|     got_temp = parser.seenval('I'); |  | ||||||
|     if (got_temp) { |  | ||||||
|       const uint8_t index = parser.value_byte(); |  | ||||||
|       temp = ui.material_preset[_MIN(index, PREHEAT_COUNT - 1)].bed_temp; |  | ||||||
|     } |  | ||||||
|   #endif |  | ||||||
|  |  | ||||||
|   // If no 'I' get the temperature from 'S' |  | ||||||
|   if (!got_temp) { |  | ||||||
|     got_temp = parser.seenval('S'); |  | ||||||
|     if (got_temp) temp = parser.value_celsius(); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   if (got_temp) { |  | ||||||
|     thermalManager.setTargetBed(temp); |  | ||||||
|  |  | ||||||
|     #if ENABLED(PRINTJOB_TIMER_AUTOSTART) |  | ||||||
|       /** |  | ||||||
|        * Stop the timer at the end of print. Hotend, bed target, and chamber |  | ||||||
|        * temperatures need to be set below mintemp. Order of M140, M104, and M141 |  | ||||||
|        * at the end of the print does not matter. |  | ||||||
|        */ |  | ||||||
|       thermalManager.auto_job_check_timer(false, true); |  | ||||||
|     #endif |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * M190 - Set Bed Temperature target and wait |  | ||||||
|  * |  * | ||||||
|  * Parameters: |  * Parameters | ||||||
|  *  I<index>  : Preset index (if material presets are defined) |  *  I<index>  : Preset index (if material presets are defined) | ||||||
|  *  S<target> : The target temperature in current units. Wait for heating only. |  *  S<target> : The target temperature in current units. Wait for heating only. | ||||||
|  |  * | ||||||
|  |  * M190 Parameters | ||||||
|  *  R<target> : The target temperature in current units. Wait for heating and cooling. |  *  R<target> : The target temperature in current units. Wait for heating and cooling. | ||||||
|  * |  * | ||||||
|  * Examples: |  * Examples | ||||||
|  *  M190 S60 : Set target to 60°. Wait until the bed is at or above 60°. |  *  M140 S60 : Set target to 60° and return right away. | ||||||
|  *  M190 R40 : Set target to 40°. Wait until the bed gets close to 40°. |  *  M190 R40 : Set target to 40°. Wait until the bed gets close to 40°. | ||||||
|  * |  * | ||||||
|  * With PRINTJOB_TIMER_AUTOSTART turning on heaters will start the print job timer |  * With PRINTJOB_TIMER_AUTOSTART turning on heaters will start the print job timer | ||||||
|  *  (used by printingIsActive, etc.) and turning off heaters will stop the timer. |  *  (used by printingIsActive, etc.) and turning off heaters will stop the timer. | ||||||
|  */ |  */ | ||||||
| void GcodeSuite::M190() { | void GcodeSuite::M140_M190(const bool isM190) { | ||||||
|  |  | ||||||
|   if (DEBUGGING(DRYRUN)) return; |   if (DEBUGGING(DRYRUN)) return; | ||||||
|  |  | ||||||
|   bool got_temp = false; |   bool got_temp = false; | ||||||
| @@ -109,7 +75,7 @@ void GcodeSuite::M190() { | |||||||
|   bool no_wait_for_cooling = false; |   bool no_wait_for_cooling = false; | ||||||
|   if (!got_temp) { |   if (!got_temp) { | ||||||
|     no_wait_for_cooling = parser.seenval('S'); |     no_wait_for_cooling = parser.seenval('S'); | ||||||
|     got_temp = no_wait_for_cooling || parser.seenval('R'); |     got_temp = no_wait_for_cooling || (isM190 && parser.seenval('R')); | ||||||
|     if (got_temp) temp = parser.value_celsius(); |     if (got_temp) temp = parser.value_celsius(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -121,7 +87,8 @@ void GcodeSuite::M190() { | |||||||
|  |  | ||||||
|   ui.set_status_P(thermalManager.isHeatingBed() ? GET_TEXT(MSG_BED_HEATING) : GET_TEXT(MSG_BED_COOLING)); |   ui.set_status_P(thermalManager.isHeatingBed() ? GET_TEXT(MSG_BED_HEATING) : GET_TEXT(MSG_BED_COOLING)); | ||||||
|  |  | ||||||
|   thermalManager.wait_for_bed(no_wait_for_cooling); |   if (isM190) | ||||||
|  |     thermalManager.wait_for_bed(no_wait_for_cooling); | ||||||
| } | } | ||||||
|  |  | ||||||
| #endif // HAS_HEATED_BED | #endif // HAS_HEATED_BED | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user