Optimize G-code flag parameters (#21849)
This commit is contained in:
		
				
					committed by
					
						 Scott Lahteine
						Scott Lahteine
					
				
			
			
				
	
			
			
			
						parent
						
							770edea577
						
					
				
				
					commit
					6a1e78e614
				
			| @@ -306,7 +306,7 @@ void unified_bed_leveling::G29() { | |||||||
|   if (G29_parse_parameters()) return; // Abort on parameter error |   if (G29_parse_parameters()) return; // Abort on parameter error | ||||||
|  |  | ||||||
|   const int8_t p_val = parser.intval('P', -1); |   const int8_t p_val = parser.intval('P', -1); | ||||||
|   const bool may_move = p_val == 1 || p_val == 2 || p_val == 4 || parser.seen('J'); |   const bool may_move = p_val == 1 || p_val == 2 || p_val == 4 || parser.seen_test('J'); | ||||||
|   #if ENABLED(HAS_MULTI_HOTEND) |   #if ENABLED(HAS_MULTI_HOTEND) | ||||||
|     const uint8_t old_tool_index = active_extruder; |     const uint8_t old_tool_index = active_extruder; | ||||||
|   #endif |   #endif | ||||||
| @@ -315,7 +315,7 @@ void unified_bed_leveling::G29() { | |||||||
|   if (may_move) { |   if (may_move) { | ||||||
|     planner.synchronize(); |     planner.synchronize(); | ||||||
|     // Send 'N' to force homing before G29 (internal only) |     // Send 'N' to force homing before G29 (internal only) | ||||||
|     if (axes_should_home() || parser.seen('N')) gcode.home_all_axes(); |     if (axes_should_home() || parser.seen_test('N')) gcode.home_all_axes(); | ||||||
|     TERN_(HAS_MULTI_HOTEND, if (active_extruder) tool_change(0)); |     TERN_(HAS_MULTI_HOTEND, if (active_extruder) tool_change(0)); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -380,7 +380,7 @@ void unified_bed_leveling::G29() { | |||||||
|         // Allow the user to specify the height because 10mm is a little extreme in some cases. |         // Allow the user to specify the height because 10mm is a little extreme in some cases. | ||||||
|         for (uint8_t x = (GRID_MAX_POINTS_X) / 3; x < 2 * (GRID_MAX_POINTS_X) / 3; x++)     // Create a rectangular raised area in |         for (uint8_t x = (GRID_MAX_POINTS_X) / 3; x < 2 * (GRID_MAX_POINTS_X) / 3; x++)     // Create a rectangular raised area in | ||||||
|           for (uint8_t y = (GRID_MAX_POINTS_Y) / 3; y < 2 * (GRID_MAX_POINTS_Y) / 3; y++) { // the center of the bed |           for (uint8_t y = (GRID_MAX_POINTS_Y) / 3; y < 2 * (GRID_MAX_POINTS_Y) / 3; y++) { // the center of the bed | ||||||
|             z_values[x][y] += parser.seen('C') ? param.C_constant : 9.99f; |             z_values[x][y] += parser.seen_test('C') ? param.C_constant : 9.99f; | ||||||
|             TERN_(EXTENSIBLE_UI, ExtUI::onMeshUpdate(x, y, z_values[x][y])); |             TERN_(EXTENSIBLE_UI, ExtUI::onMeshUpdate(x, y, z_values[x][y])); | ||||||
|           } |           } | ||||||
|         break; |         break; | ||||||
| @@ -389,7 +389,7 @@ void unified_bed_leveling::G29() { | |||||||
|  |  | ||||||
|   #if HAS_BED_PROBE |   #if HAS_BED_PROBE | ||||||
|  |  | ||||||
|     if (parser.seen('J')) { |     if (parser.seen_test('J')) { | ||||||
|       save_ubl_active_state_and_disable(); |       save_ubl_active_state_and_disable(); | ||||||
|       tilt_mesh_based_on_probed_grid(param.J_grid_size == 0); // Zero size does 3-Point |       tilt_mesh_based_on_probed_grid(param.J_grid_size == 0); // Zero size does 3-Point | ||||||
|       restore_ubl_active_state_and_leave(); |       restore_ubl_active_state_and_leave(); | ||||||
| @@ -402,7 +402,7 @@ void unified_bed_leveling::G29() { | |||||||
|  |  | ||||||
|   #endif // HAS_BED_PROBE |   #endif // HAS_BED_PROBE | ||||||
|  |  | ||||||
|   if (parser.seen('P')) { |   if (parser.seen_test('P')) { | ||||||
|     if (WITHIN(param.P_phase, 0, 1) && storage_slot == -1) { |     if (WITHIN(param.P_phase, 0, 1) && storage_slot == -1) { | ||||||
|       storage_slot = 0; |       storage_slot = 0; | ||||||
|       SERIAL_ECHOLNPGM("Default storage slot 0 selected."); |       SERIAL_ECHOLNPGM("Default storage slot 0 selected."); | ||||||
| @@ -423,7 +423,7 @@ void unified_bed_leveling::G29() { | |||||||
|           // |           // | ||||||
|           // Invalidate Entire Mesh and Automatically Probe Mesh in areas that can be reached by the probe |           // Invalidate Entire Mesh and Automatically Probe Mesh in areas that can be reached by the probe | ||||||
|           // |           // | ||||||
|           if (!parser.seen('C')) { |           if (!parser.seen_test('C')) { | ||||||
|             invalidate(); |             invalidate(); | ||||||
|             SERIAL_ECHOLNPGM("Mesh invalidated. Probing mesh."); |             SERIAL_ECHOLNPGM("Mesh invalidated. Probing mesh."); | ||||||
|           } |           } | ||||||
| @@ -433,7 +433,7 @@ void unified_bed_leveling::G29() { | |||||||
|             SERIAL_DECIMAL(param.XY_pos.y); |             SERIAL_DECIMAL(param.XY_pos.y); | ||||||
|             SERIAL_ECHOLNPGM(").\n"); |             SERIAL_ECHOLNPGM(").\n"); | ||||||
|           } |           } | ||||||
|           probe_entire_mesh(param.XY_pos, parser.seen('T'), parser.seen('E'), parser.seen('U')); |           probe_entire_mesh(param.XY_pos, parser.seen_test('T'), parser.seen_test('E'), parser.seen_test('U')); | ||||||
|  |  | ||||||
|           report_current_position(); |           report_current_position(); | ||||||
|           probe_deployed = true; |           probe_deployed = true; | ||||||
| @@ -449,7 +449,7 @@ void unified_bed_leveling::G29() { | |||||||
|           SERIAL_ECHOLNPGM("Manually probing unreachable points."); |           SERIAL_ECHOLNPGM("Manually probing unreachable points."); | ||||||
|           do_z_clearance(Z_CLEARANCE_BETWEEN_PROBES); |           do_z_clearance(Z_CLEARANCE_BETWEEN_PROBES); | ||||||
|  |  | ||||||
|           if (parser.seen('C') && !param.XY_seen) { |           if (parser.seen_test('C') && !param.XY_seen) { | ||||||
|  |  | ||||||
|             /** |             /** | ||||||
|              * Use a good default location for the path. |              * Use a good default location for the path. | ||||||
| @@ -483,7 +483,7 @@ void unified_bed_leveling::G29() { | |||||||
|           } |           } | ||||||
|  |  | ||||||
|           const float height = parser.floatval('H', Z_CLEARANCE_BETWEEN_PROBES); |           const float height = parser.floatval('H', Z_CLEARANCE_BETWEEN_PROBES); | ||||||
|           manually_probe_remaining_mesh(param.XY_pos, height, param.B_shim_thickness, parser.seen('T')); |           manually_probe_remaining_mesh(param.XY_pos, height, param.B_shim_thickness, parser.seen_test('T')); | ||||||
|  |  | ||||||
|           SERIAL_ECHOLNPGM("G29 P2 finished."); |           SERIAL_ECHOLNPGM("G29 P2 finished."); | ||||||
|  |  | ||||||
| @@ -555,7 +555,7 @@ void unified_bed_leveling::G29() { | |||||||
|  |  | ||||||
|       case 4: // Fine Tune (i.e., Edit) the Mesh |       case 4: // Fine Tune (i.e., Edit) the Mesh | ||||||
|         #if HAS_LCD_MENU |         #if HAS_LCD_MENU | ||||||
|           fine_tune_mesh(param.XY_pos, parser.seen('T')); |           fine_tune_mesh(param.XY_pos, parser.seen_test('T')); | ||||||
|         #else |         #else | ||||||
|           SERIAL_ECHOLNPGM("?P4 is only available when an LCD is present."); |           SERIAL_ECHOLNPGM("?P4 is only available when an LCD is present."); | ||||||
|           return; |           return; | ||||||
| @@ -574,14 +574,14 @@ void unified_bed_leveling::G29() { | |||||||
|     // Much of the 'What?' command can be eliminated. But until we are fully debugged, it is |     // Much of the 'What?' command can be eliminated. But until we are fully debugged, it is | ||||||
|     // good to have the extra information. Soon... we prune this to just a few items |     // good to have the extra information. Soon... we prune this to just a few items | ||||||
|     // |     // | ||||||
|     if (parser.seen('W')) g29_what_command(); |     if (parser.seen_test('W')) g29_what_command(); | ||||||
|  |  | ||||||
|     // |     // | ||||||
|     // When we are fully debugged, this may go away. But there are some valid |     // When we are fully debugged, this may go away. But there are some valid | ||||||
|     // use cases for the users. So we can wait and see what to do with it. |     // use cases for the users. So we can wait and see what to do with it. | ||||||
|     // |     // | ||||||
|  |  | ||||||
|     if (parser.seen('K')) // Kompare Current Mesh Data to Specified Stored Mesh |     if (parser.seen_test('K')) // Kompare Current Mesh Data to Specified Stored Mesh | ||||||
|       g29_compare_current_mesh_to_stored_mesh(); |       g29_compare_current_mesh_to_stored_mesh(); | ||||||
|  |  | ||||||
|   #endif // UBL_DEVEL_DEBUGGING |   #endif // UBL_DEVEL_DEBUGGING | ||||||
| @@ -640,7 +640,7 @@ void unified_bed_leveling::G29() { | |||||||
|     SERIAL_ECHOLNPGM("Done."); |     SERIAL_ECHOLNPGM("Done."); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   if (parser.seen('T')) |   if (parser.seen_test('T')) | ||||||
|     display_map(param.T_map_type); |     display_map(param.T_map_type); | ||||||
|  |  | ||||||
|   LEAVE: |   LEAVE: | ||||||
| @@ -915,7 +915,7 @@ void set_message_with_feedback(PGM_P const msg_P) { | |||||||
|  |  | ||||||
|       if (do_ubl_mesh_map) display_map(param.T_map_type);   // Show user where we're probing |       if (do_ubl_mesh_map) display_map(param.T_map_type);   // Show user where we're probing | ||||||
|  |  | ||||||
|       if (parser.seen('B')) { |       if (parser.seen_test('B')) { | ||||||
|         SERIAL_ECHOPGM_P(GET_TEXT(MSG_UBL_BC_INSERT)); |         SERIAL_ECHOPGM_P(GET_TEXT(MSG_UBL_BC_INSERT)); | ||||||
|         LCD_MESSAGEPGM(MSG_UBL_BC_INSERT); |         LCD_MESSAGEPGM(MSG_UBL_BC_INSERT); | ||||||
|       } |       } | ||||||
| @@ -954,7 +954,7 @@ void set_message_with_feedback(PGM_P const msg_P) { | |||||||
|    *          NOTE: Blocks the G-code queue and captures Marlin UI during use. |    *          NOTE: Blocks the G-code queue and captures Marlin UI during use. | ||||||
|    */ |    */ | ||||||
|   void unified_bed_leveling::fine_tune_mesh(const xy_pos_t &pos, const bool do_ubl_mesh_map) { |   void unified_bed_leveling::fine_tune_mesh(const xy_pos_t &pos, const bool do_ubl_mesh_map) { | ||||||
|     if (!parser.seen('R'))        // fine_tune_mesh() is special. If no repetition count flag is specified |     if (!parser.seen_test('R')) // fine_tune_mesh() is special. If no repetition count flag is specified | ||||||
|       param.R_repetition = 1;   // do exactly one mesh location. Otherwise use what the parser decided. |       param.R_repetition = 1;   // do exactly one mesh location. Otherwise use what the parser decided. | ||||||
|  |  | ||||||
|     #if ENABLED(UBL_MESH_EDIT_MOVES_Z) |     #if ENABLED(UBL_MESH_EDIT_MOVES_Z) | ||||||
| @@ -1091,7 +1091,7 @@ bool unified_bed_leveling::G29_parse_parameters() { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   param.V_verbosity = parser.seen('V') ? parser.value_int() : 0; |   param.V_verbosity = parser.intval('V'); | ||||||
|   if (!WITHIN(param.V_verbosity, 0, 4)) { |   if (!WITHIN(param.V_verbosity, 0, 4)) { | ||||||
|     SERIAL_ECHOLNPGM("?(V)erbose level implausible (0-4).\n"); |     SERIAL_ECHOLNPGM("?(V)erbose level implausible (0-4).\n"); | ||||||
|     err_flag = true; |     err_flag = true; | ||||||
| @@ -1153,15 +1153,15 @@ bool unified_bed_leveling::G29_parse_parameters() { | |||||||
|    *       Leveling is being enabled here with old data, possibly |    *       Leveling is being enabled here with old data, possibly | ||||||
|    *       none. Error handling should disable for safety... |    *       none. Error handling should disable for safety... | ||||||
|    */ |    */ | ||||||
|   if (parser.seen('A')) { |   if (parser.seen_test('A')) { | ||||||
|     if (parser.seen('D')) { |     if (parser.seen_test('D')) { | ||||||
|       SERIAL_ECHOLNPGM("?Can't activate and deactivate at the same time.\n"); |       SERIAL_ECHOLNPGM("?Can't activate and deactivate at the same time.\n"); | ||||||
|       return UBL_ERR; |       return UBL_ERR; | ||||||
|     } |     } | ||||||
|     set_bed_leveling_enabled(true); |     set_bed_leveling_enabled(true); | ||||||
|     report_state(); |     report_state(); | ||||||
|   } |   } | ||||||
|   else if (parser.seen('D')) { |   else if (parser.seen_test('D')) { | ||||||
|     set_bed_leveling_enabled(false); |     set_bed_leveling_enabled(false); | ||||||
|     report_state(); |     report_state(); | ||||||
|   } |   } | ||||||
| @@ -1520,7 +1520,7 @@ void unified_bed_leveling::smart_fill_mesh() { | |||||||
|             SERIAL_ECHOLNPAIR("Tilting mesh point ", point_num, "/", total_points, "\n"); |             SERIAL_ECHOLNPAIR("Tilting mesh point ", point_num, "/", total_points, "\n"); | ||||||
|             TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_LCD_TILTING_MESH), point_num, total_points)); |             TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_LCD_TILTING_MESH), point_num, total_points)); | ||||||
|  |  | ||||||
|             measured_z = probe.probe_at_point(rpos, parser.seen('E') ? PROBE_PT_STOW : PROBE_PT_RAISE, param.V_verbosity); // TODO: Needs error handling |             measured_z = probe.probe_at_point(rpos, parser.seen_test('E') ? PROBE_PT_STOW : PROBE_PT_RAISE, param.V_verbosity); // TODO: Needs error handling | ||||||
|  |  | ||||||
|             abort_flag = isnan(measured_z); |             abort_flag = isnan(measured_z); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -819,11 +819,11 @@ int8_t I2CPositionEncodersMgr::parse() { | |||||||
| void I2CPositionEncodersMgr::M860() { | void I2CPositionEncodersMgr::M860() { | ||||||
|   if (parse()) return; |   if (parse()) return; | ||||||
|  |  | ||||||
|   const bool hasU = parser.seen('U'), hasO = parser.seen('O'); |   const bool hasU = parser.seen_test('U'), hasO = parser.seen_test('O'); | ||||||
|  |  | ||||||
|   if (I2CPE_idx == 0xFF) { |   if (I2CPE_idx == 0xFF) { | ||||||
|     LOOP_XYZE(i) { |     LOOP_XYZE(i) { | ||||||
|       if (!I2CPE_anyaxis || parser.seen(axis_codes[i])) { |       if (!I2CPE_anyaxis || parser.seen_test(axis_codes[i])) { | ||||||
|         const uint8_t idx = idx_from_axis(AxisEnum(i)); |         const uint8_t idx = idx_from_axis(AxisEnum(i)); | ||||||
|         if ((int8_t)idx >= 0) report_position(idx, hasU, hasO); |         if ((int8_t)idx >= 0) report_position(idx, hasU, hasO); | ||||||
|       } |       } | ||||||
| @@ -956,10 +956,10 @@ void I2CPositionEncodersMgr::M864() { | |||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
|   else { |   else { | ||||||
|          if (parser.seen('X')) newAddress = I2CPE_PRESET_ADDR_X; |          if (parser.seen_test('X')) newAddress = I2CPE_PRESET_ADDR_X; | ||||||
|     else if (parser.seen('Y')) newAddress = I2CPE_PRESET_ADDR_Y; |     else if (parser.seen_test('Y')) newAddress = I2CPE_PRESET_ADDR_Y; | ||||||
|     else if (parser.seen('Z')) newAddress = I2CPE_PRESET_ADDR_Z; |     else if (parser.seen_test('Z')) newAddress = I2CPE_PRESET_ADDR_Z; | ||||||
|     else if (parser.seen('E')) newAddress = I2CPE_PRESET_ADDR_E; |     else if (parser.seen_test('E')) newAddress = I2CPE_PRESET_ADDR_E; | ||||||
|     else return; |     else return; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -1012,7 +1012,7 @@ void I2CPositionEncodersMgr::M865() { | |||||||
| void I2CPositionEncodersMgr::M866() { | void I2CPositionEncodersMgr::M866() { | ||||||
|   if (parse()) return; |   if (parse()) return; | ||||||
|  |  | ||||||
|   const bool hasR = parser.seen('R'); |   const bool hasR = parser.seen_test('R'); | ||||||
|  |  | ||||||
|   if (I2CPE_idx == 0xFF) { |   if (I2CPE_idx == 0xFF) { | ||||||
|     LOOP_XYZE(i) { |     LOOP_XYZE(i) { | ||||||
|   | |||||||
| @@ -212,10 +212,10 @@ void FWRetract::retract(const bool retracting | |||||||
|  */ |  */ | ||||||
| void FWRetract::M207() { | void FWRetract::M207() { | ||||||
|   if (!parser.seen("FSWZ")) return M207_report(); |   if (!parser.seen("FSWZ")) return M207_report(); | ||||||
|   if (parser.seen('S')) settings.retract_length = parser.value_axis_units(E_AXIS); |   if (parser.seenval('S')) settings.retract_length        = parser.value_axis_units(E_AXIS); | ||||||
|   if (parser.seen('F')) settings.retract_feedrate_mm_s = MMM_TO_MMS(parser.value_axis_units(E_AXIS)); |   if (parser.seenval('F')) settings.retract_feedrate_mm_s = MMM_TO_MMS(parser.value_axis_units(E_AXIS)); | ||||||
|   if (parser.seen('Z')) settings.retract_zraise = parser.value_linear_units(); |   if (parser.seenval('Z')) settings.retract_zraise        = parser.value_linear_units(); | ||||||
|   if (parser.seen('W')) settings.swap_retract_length = parser.value_axis_units(E_AXIS); |   if (parser.seenval('W')) settings.swap_retract_length   = parser.value_axis_units(E_AXIS); | ||||||
| } | } | ||||||
|  |  | ||||||
| void FWRetract::M207_report(const bool forReplay/*=false*/) { | void FWRetract::M207_report(const bool forReplay/*=false*/) { | ||||||
| @@ -238,10 +238,10 @@ void FWRetract::M207_report(const bool forReplay/*=false*/) { | |||||||
|  */ |  */ | ||||||
| void FWRetract::M208() { | void FWRetract::M208() { | ||||||
|   if (!parser.seen("FSRW")) return M208_report(); |   if (!parser.seen("FSRW")) return M208_report(); | ||||||
|   if (parser.seen('S')) settings.retract_recover_extra = parser.value_axis_units(E_AXIS); |   if (parser.seen('S')) settings.retract_recover_extra              = parser.value_axis_units(E_AXIS); | ||||||
|   if (parser.seen('F')) settings.retract_recover_feedrate_mm_s = MMM_TO_MMS(parser.value_axis_units(E_AXIS)); |   if (parser.seen('F')) settings.retract_recover_feedrate_mm_s      = MMM_TO_MMS(parser.value_axis_units(E_AXIS)); | ||||||
|   if (parser.seen('R')) settings.swap_retract_recover_feedrate_mm_s = MMM_TO_MMS(parser.value_axis_units(E_AXIS)); |   if (parser.seen('R')) settings.swap_retract_recover_feedrate_mm_s = MMM_TO_MMS(parser.value_axis_units(E_AXIS)); | ||||||
|   if (parser.seen('W')) settings.swap_retract_recover_extra = parser.value_axis_units(E_AXIS); |   if (parser.seen('W')) settings.swap_retract_recover_extra         = parser.value_axis_units(E_AXIS); | ||||||
| } | } | ||||||
|  |  | ||||||
| void FWRetract::M208_report(const bool forReplay/*=false*/) { | void FWRetract::M208_report(const bool forReplay/*=false*/) { | ||||||
|   | |||||||
| @@ -648,12 +648,12 @@ void GcodeSuite::G26() { | |||||||
|   #if HAS_LCD_MENU |   #if HAS_LCD_MENU | ||||||
|     g26_repeats = parser.intval('R', GRID_MAX_POINTS + 1); |     g26_repeats = parser.intval('R', GRID_MAX_POINTS + 1); | ||||||
|   #else |   #else | ||||||
|     if (!parser.seen('R')) { |     if (parser.seen('R')) | ||||||
|  |       g26_repeats = parser.has_value() ? parser.value_int() : GRID_MAX_POINTS + 1; | ||||||
|  |     else { | ||||||
|       SERIAL_ECHOLNPGM("?(R)epeat must be specified when not using an LCD."); |       SERIAL_ECHOLNPGM("?(R)epeat must be specified when not using an LCD."); | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|     else |  | ||||||
|       g26_repeats = parser.has_value() ? parser.value_int() : GRID_MAX_POINTS + 1; |  | ||||||
|   #endif |   #endif | ||||||
|   if (g26_repeats < 1) { |   if (g26_repeats < 1) { | ||||||
|     SERIAL_ECHOLNPGM("?(R)epeat value not plausible; must be at least 1."); |     SERIAL_ECHOLNPGM("?(R)epeat value not plausible; must be at least 1."); | ||||||
| @@ -671,7 +671,7 @@ void GcodeSuite::G26() { | |||||||
|   /** |   /** | ||||||
|    * Wait until all parameters are verified before altering the state! |    * Wait until all parameters are verified before altering the state! | ||||||
|    */ |    */ | ||||||
|   set_bed_leveling_enabled(!parser.seen('D')); |   set_bed_leveling_enabled(!parser.seen_test('D')); | ||||||
|  |  | ||||||
|   do_z_clearance(Z_CLEARANCE_BETWEEN_PROBES); |   do_z_clearance(Z_CLEARANCE_BETWEEN_PROBES); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -133,7 +133,7 @@ void GcodeSuite::M420() { | |||||||
|  |  | ||||||
|   #endif // AUTO_BED_LEVELING_UBL |   #endif // AUTO_BED_LEVELING_UBL | ||||||
|  |  | ||||||
|   const bool seenV = parser.seen('V'); |   const bool seenV = parser.seen_test('V'); | ||||||
|  |  | ||||||
|   #if HAS_MESH |   #if HAS_MESH | ||||||
|  |  | ||||||
|   | |||||||
| @@ -223,7 +223,7 @@ G29_TYPE GcodeSuite::G29() { | |||||||
|  |  | ||||||
|   reset_stepper_timeout(); |   reset_stepper_timeout(); | ||||||
|  |  | ||||||
|   const bool seenQ = EITHER(DEBUG_LEVELING_FEATURE, PROBE_MANUALLY) && parser.seen('Q'); |   const bool seenQ = EITHER(DEBUG_LEVELING_FEATURE, PROBE_MANUALLY) && parser.seen_test('Q'); | ||||||
|  |  | ||||||
|   // G29 Q is also available if debugging |   // G29 Q is also available if debugging | ||||||
|   #if ENABLED(DEBUG_LEVELING_FEATURE) |   #if ENABLED(DEBUG_LEVELING_FEATURE) | ||||||
| @@ -235,7 +235,7 @@ G29_TYPE GcodeSuite::G29() { | |||||||
|     if (DISABLED(PROBE_MANUALLY) && seenQ) G29_RETURN(false); |     if (DISABLED(PROBE_MANUALLY) && seenQ) G29_RETURN(false); | ||||||
|   #endif |   #endif | ||||||
|  |  | ||||||
|   const bool seenA = TERN0(PROBE_MANUALLY, parser.seen('A')), |   const bool seenA = TERN0(PROBE_MANUALLY, parser.seen_test('A')), | ||||||
|          no_action = seenA || seenQ, |          no_action = seenA || seenQ, | ||||||
|               faux = ENABLED(DEBUG_LEVELING_FEATURE) && DISABLED(PROBE_MANUALLY) ? parser.boolval('C') : no_action; |               faux = ENABLED(DEBUG_LEVELING_FEATURE) && DISABLED(PROBE_MANUALLY) ? parser.boolval('C') : no_action; | ||||||
|  |  | ||||||
| @@ -245,7 +245,7 @@ G29_TYPE GcodeSuite::G29() { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   // Send 'N' to force homing before G29 (internal only) |   // Send 'N' to force homing before G29 (internal only) | ||||||
|   if (parser.seen('N')) |   if (parser.seen_test('N')) | ||||||
|     process_subcommands_now_P(TERN(G28_L0_ENSURES_LEVELING_OFF, PSTR("G28L0"), G28_STR)); |     process_subcommands_now_P(TERN(G28_L0_ENSURES_LEVELING_OFF, PSTR("G28L0"), G28_STR)); | ||||||
|  |  | ||||||
|   // Don't allow auto-leveling without homing first |   // Don't allow auto-leveling without homing first | ||||||
| @@ -275,7 +275,7 @@ G29_TYPE GcodeSuite::G29() { | |||||||
|  |  | ||||||
|     #if ENABLED(AUTO_BED_LEVELING_BILINEAR) |     #if ENABLED(AUTO_BED_LEVELING_BILINEAR) | ||||||
|  |  | ||||||
|       const bool seen_w = parser.seen('W'); |       const bool seen_w = parser.seen_test('W'); | ||||||
|       if (seen_w) { |       if (seen_w) { | ||||||
|         if (!leveling_is_valid()) { |         if (!leveling_is_valid()) { | ||||||
|           SERIAL_ERROR_MSG("No bilinear grid"); |           SERIAL_ERROR_MSG("No bilinear grid"); | ||||||
| @@ -308,7 +308,7 @@ G29_TYPE GcodeSuite::G29() { | |||||||
|           if (abl.reenable) report_current_position(); |           if (abl.reenable) report_current_position(); | ||||||
|         } |         } | ||||||
|         G29_RETURN(false); |         G29_RETURN(false); | ||||||
|       } // parser.seen('W') |       } // parser.seen_test('W') | ||||||
|  |  | ||||||
|     #else |     #else | ||||||
|  |  | ||||||
| @@ -317,7 +317,7 @@ G29_TYPE GcodeSuite::G29() { | |||||||
|     #endif |     #endif | ||||||
|  |  | ||||||
|     // Jettison bed leveling data |     // Jettison bed leveling data | ||||||
|     if (!seen_w && parser.seen('J')) { |     if (!seen_w && parser.seen_test('J')) { | ||||||
|       reset_bed_level(); |       reset_bed_level(); | ||||||
|       G29_RETURN(false); |       G29_RETURN(false); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -87,7 +87,7 @@ void GcodeSuite::G29() { | |||||||
|       mbl.reset(); |       mbl.reset(); | ||||||
|       mbl_probe_index = 0; |       mbl_probe_index = 0; | ||||||
|       if (!ui.wait_for_move) { |       if (!ui.wait_for_move) { | ||||||
|         queue.inject_P(parser.seen('N') ? PSTR("G28" TERN(G28_L0_ENSURES_LEVELING_OFF, "L0", "") "\nG29S2") : PSTR("G29S2")); |         queue.inject_P(parser.seen_test('N') ? PSTR("G28" TERN(G28_L0_ENSURES_LEVELING_OFF, "L0", "") "\nG29S2") : PSTR("G29S2")); | ||||||
|         return; |         return; | ||||||
|       } |       } | ||||||
|       state = MeshNext; |       state = MeshNext; | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ | |||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * unified.cpp - Unified Bed Leveling |  * M421.cpp - Unified Bed Leveling | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #include "../../../inc/MarlinConfig.h" | #include "../../../inc/MarlinConfig.h" | ||||||
| @@ -39,31 +39,34 @@ | |||||||
|  * M421: Set a single Mesh Bed Leveling Z coordinate |  * M421: Set a single Mesh Bed Leveling Z coordinate | ||||||
|  * |  * | ||||||
|  * Usage: |  * Usage: | ||||||
|  *   M421 I<xindex> J<yindex> Z<linear> |  *   M421 I<xindex> J<yindex> Z<linear>  : Set the Mesh Point IJ to the Z value | ||||||
|  *   M421 I<xindex> J<yindex> Q<offset> |  *   M421 I<xindex> J<yindex> Q<offset>  : Add the Q value to the Mesh Point IJ | ||||||
|  *   M421 I<xindex> J<yindex> N |  *   M421 I<xindex> J<yindex> N          : Set the Mesh Point IJ to NAN (not set) | ||||||
|  *   M421 C Z<linear> |  *   M421 C Z<linear>                    : Set the closest Mesh Point to the Z value | ||||||
|  *   M421 C Q<offset> |  *   M421 C Q<offset>                    : Add the Q value to the closest Mesh Point | ||||||
|  */ |  */ | ||||||
| void GcodeSuite::M421() { | void GcodeSuite::M421() { | ||||||
|   xy_int8_t ij = { int8_t(parser.intval('I', -1)), int8_t(parser.intval('J', -1)) }; |   xy_int8_t ij = { int8_t(parser.intval('I', -1)), int8_t(parser.intval('J', -1)) }; | ||||||
|   const bool hasI = ij.x >= 0, |   const bool hasI = ij.x >= 0, | ||||||
|              hasJ = ij.y >= 0, |              hasJ = ij.y >= 0, | ||||||
|              hasC = parser.seen('C'), |              hasC = parser.seen_test('C'), | ||||||
|              hasN = parser.seen('N'), |              hasN = parser.seen_test('N'), | ||||||
|              hasZ = parser.seen('Z'), |              hasZ = parser.seen('Z'), | ||||||
|              hasQ = !hasZ && parser.seen('Q'); |              hasQ = !hasZ && parser.seen('Q'); | ||||||
|  |  | ||||||
|   if (hasC) ij = ubl.find_closest_mesh_point_of_type(CLOSEST, current_position); |   if (hasC) ij = ubl.find_closest_mesh_point_of_type(CLOSEST, current_position); | ||||||
|  |  | ||||||
|  |   // Test for bad parameter combinations | ||||||
|   if (int(hasC) + int(hasI && hasJ) != 1 || !(hasZ || hasQ || hasN)) |   if (int(hasC) + int(hasI && hasJ) != 1 || !(hasZ || hasQ || hasN)) | ||||||
|     SERIAL_ERROR_MSG(STR_ERR_M421_PARAMETERS); |     SERIAL_ERROR_MSG(STR_ERR_M421_PARAMETERS); | ||||||
|  |  | ||||||
|  |   // Test for I J out of range | ||||||
|   else if (!WITHIN(ij.x, 0, GRID_MAX_POINTS_X - 1) || !WITHIN(ij.y, 0, GRID_MAX_POINTS_Y - 1)) |   else if (!WITHIN(ij.x, 0, GRID_MAX_POINTS_X - 1) || !WITHIN(ij.y, 0, GRID_MAX_POINTS_Y - 1)) | ||||||
|     SERIAL_ERROR_MSG(STR_ERR_MESH_XY); |     SERIAL_ERROR_MSG(STR_ERR_MESH_XY); | ||||||
|   else { |   else { | ||||||
|     float &zval = ubl.z_values[ij.x][ij.y]; |     float &zval = ubl.z_values[ij.x][ij.y];                               // Altering this Mesh Point | ||||||
|     zval = hasN ? NAN : parser.value_linear_units() + (hasQ ? zval : 0); |     zval = hasN ? NAN : parser.value_linear_units() + (hasQ ? zval : 0);  // N=NAN, Z=NEWVAL, or Q=ADDVAL | ||||||
|     TERN_(EXTENSIBLE_UI, ExtUI::onMeshUpdate(ij.x, ij.y, zval)); |     TERN_(EXTENSIBLE_UI, ExtUI::onMeshUpdate(ij.x, ij.y, zval));          // Ping ExtUI in case it's showing the mesh | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -219,7 +219,7 @@ void GcodeSuite::G28() { | |||||||
|   #endif |   #endif | ||||||
|  |  | ||||||
|   #if ENABLED(MARLIN_DEV_MODE) |   #if ENABLED(MARLIN_DEV_MODE) | ||||||
|     if (parser.seen('S')) { |     if (parser.seen_test('S')) { | ||||||
|       LOOP_XYZ(a) set_axis_is_at_home((AxisEnum)a); |       LOOP_XYZ(a) set_axis_is_at_home((AxisEnum)a); | ||||||
|       sync_plan_position(); |       sync_plan_position(); | ||||||
|       SERIAL_ECHOLNPGM("Simulated Homing"); |       SERIAL_ECHOLNPGM("Simulated Homing"); | ||||||
| @@ -321,10 +321,10 @@ void GcodeSuite::G28() { | |||||||
|  |  | ||||||
|   #else |   #else | ||||||
|  |  | ||||||
|     const bool homeZ = parser.seen('Z'), |     const bool homeZ = parser.seen_test('Z'), | ||||||
|                needX = homeZ && TERN0(Z_SAFE_HOMING, axes_should_home(_BV(X_AXIS))), |                needX = homeZ && TERN0(Z_SAFE_HOMING, axes_should_home(_BV(X_AXIS))), | ||||||
|                needY = homeZ && TERN0(Z_SAFE_HOMING, axes_should_home(_BV(Y_AXIS))), |                needY = homeZ && TERN0(Z_SAFE_HOMING, axes_should_home(_BV(Y_AXIS))), | ||||||
|                homeX = needX || parser.seen('X'), homeY = needY || parser.seen('Y'), |                homeX = needX || parser.seen_test('X'), homeY = needY || parser.seen_test('Y'), | ||||||
|                home_all = homeX == homeY && homeX == homeZ, // All or None |                home_all = homeX == homeY && homeX == homeZ, // All or None | ||||||
|                doX = home_all || homeX, doY = home_all || homeY, doZ = home_all || homeZ; |                doX = home_all || homeX, doY = home_all || homeY, doZ = home_all || homeZ; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -395,7 +395,7 @@ void GcodeSuite::G33() { | |||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   const bool towers_set = !parser.seen('T'); |   const bool towers_set = !parser.seen_test('T'); | ||||||
|  |  | ||||||
|   const float calibration_precision = parser.floatval('C', 0.0f); |   const float calibration_precision = parser.floatval('C', 0.0f); | ||||||
|   if (calibration_precision < 0) { |   if (calibration_precision < 0) { | ||||||
| @@ -415,7 +415,7 @@ void GcodeSuite::G33() { | |||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   const bool stow_after_each = parser.seen('E'); |   const bool stow_after_each = parser.seen_test('E'); | ||||||
|  |  | ||||||
|   const bool _0p_calibration      = probe_points == 0, |   const bool _0p_calibration      = probe_points == 0, | ||||||
|              _1p_calibration      = probe_points == 1 || probe_points == -1, |              _1p_calibration      = probe_points == 1 || probe_points == -1, | ||||||
|   | |||||||
| @@ -56,7 +56,7 @@ | |||||||
|  */ |  */ | ||||||
| void GcodeSuite::M125() { | void GcodeSuite::M125() { | ||||||
|   // Initial retract before move to filament change position |   // Initial retract before move to filament change position | ||||||
|   const float retract = -ABS(parser.seen('L') ? parser.value_axis_units(E_AXIS) : (PAUSE_PARK_RETRACT_LENGTH)); |   const float retract = -ABS(parser.axisunitsval('L', E_AXIS, PAUSE_PARK_RETRACT_LENGTH)); | ||||||
|  |  | ||||||
|   xyz_pos_t park_point = NOZZLE_PARK_POINT; |   xyz_pos_t park_point = NOZZLE_PARK_POINT; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -81,8 +81,8 @@ void GcodeSuite::M600() { | |||||||
|  |  | ||||||
|   #if ENABLED(DUAL_X_CARRIAGE) |   #if ENABLED(DUAL_X_CARRIAGE) | ||||||
|     int8_t DXC_ext = target_extruder; |     int8_t DXC_ext = target_extruder; | ||||||
|     if (!parser.seen('T')) {  // If no tool index is specified, M600 was (probably) sent in response to filament runout. |     if (!parser.seen_test('T')) {  // If no tool index is specified, M600 was (probably) sent in response to filament runout. | ||||||
|                               // In this case, for duplicating modes set DXC_ext to the extruder that ran out. |                                    // In this case, for duplicating modes set DXC_ext to the extruder that ran out. | ||||||
|       #if MULTI_FILAMENT_SENSOR |       #if MULTI_FILAMENT_SENSOR | ||||||
|         if (idex_is_duplicating()) |         if (idex_is_duplicating()) | ||||||
|           DXC_ext = (READ(FIL_RUNOUT2_PIN) == FIL_RUNOUT2_STATE) ? 1 : 0; |           DXC_ext = (READ(FIL_RUNOUT2_PIN) == FIL_RUNOUT2_STATE) ? 1 : 0; | ||||||
| @@ -110,7 +110,7 @@ void GcodeSuite::M600() { | |||||||
|   #endif |   #endif | ||||||
|  |  | ||||||
|   // Initial retract before move to filament change position |   // Initial retract before move to filament change position | ||||||
|   const float retract = -ABS(parser.seen('E') ? parser.value_axis_units(E_AXIS) : (PAUSE_PARK_RETRACT_LENGTH)); |   const float retract = -ABS(parser.axisunitsval('E', E_AXIS, PAUSE_PARK_RETRACT_LENGTH)); | ||||||
|  |  | ||||||
|   xyz_pos_t park_point NOZZLE_PARK_POINT; |   xyz_pos_t park_point NOZZLE_PARK_POINT; | ||||||
|  |  | ||||||
| @@ -132,15 +132,11 @@ void GcodeSuite::M600() { | |||||||
|                     fast_load_length = 0.0f; |                     fast_load_length = 0.0f; | ||||||
|   #else |   #else | ||||||
|     // Unload filament |     // Unload filament | ||||||
|     const float unload_length = -ABS(parser.seen('U') ? parser.value_axis_units(E_AXIS) |     const float unload_length = -ABS(parser.axisunitsval('U', E_AXIS, fc_settings[active_extruder].unload_length)); | ||||||
|                                                       : fc_settings[active_extruder].unload_length); |  | ||||||
|  |  | ||||||
|     // Slow load filament |     // Slow load filament | ||||||
|     constexpr float slow_load_length = FILAMENT_CHANGE_SLOW_LOAD_LENGTH; |     constexpr float slow_load_length = FILAMENT_CHANGE_SLOW_LOAD_LENGTH; | ||||||
|  |  | ||||||
|     // Fast load filament |     // Fast load filament | ||||||
|     const float fast_load_length = ABS(parser.seen('L') ? parser.value_axis_units(E_AXIS) |     const float fast_load_length = ABS(parser.axisunitsval('L', E_AXIS, fc_settings[active_extruder].load_length)); | ||||||
|                                                         : fc_settings[active_extruder].load_length); |  | ||||||
|   #endif |   #endif | ||||||
|  |  | ||||||
|   const int beep_count = parser.intval('B', -1 |   const int beep_count = parser.intval('B', -1 | ||||||
|   | |||||||
| @@ -59,7 +59,7 @@ inline void plr_error(PGM_P const prefix) { | |||||||
| void GcodeSuite::M1000() { | void GcodeSuite::M1000() { | ||||||
|  |  | ||||||
|   if (recovery.valid()) { |   if (recovery.valid()) { | ||||||
|     if (parser.seen('S')) { |     if (parser.seen_test('S')) { | ||||||
|       #if HAS_LCD_MENU |       #if HAS_LCD_MENU | ||||||
|         ui.goto_screen(menu_job_recovery); |         ui.goto_screen(menu_job_recovery); | ||||||
|       #elif ENABLED(DWIN_CREALITY_LCD) |       #elif ENABLED(DWIN_CREALITY_LCD) | ||||||
| @@ -70,7 +70,7 @@ void GcodeSuite::M1000() { | |||||||
|         SERIAL_ECHO_MSG("Resume requires LCD."); |         SERIAL_ECHO_MSG("Resume requires LCD."); | ||||||
|       #endif |       #endif | ||||||
|     } |     } | ||||||
|     else if (parser.seen('C')) { |     else if (parser.seen_test('C')) { | ||||||
|       #if HAS_LCD_MENU |       #if HAS_LCD_MENU | ||||||
|         lcd_power_loss_recovery_cancel(); |         lcd_power_loss_recovery_cancel(); | ||||||
|       #else |       #else | ||||||
|   | |||||||
| @@ -48,14 +48,14 @@ void GcodeSuite::M413() { | |||||||
|  |  | ||||||
|   #if ENABLED(DEBUG_POWER_LOSS_RECOVERY) |   #if ENABLED(DEBUG_POWER_LOSS_RECOVERY) | ||||||
|     if (parser.seen("RL")) recovery.load(); |     if (parser.seen("RL")) recovery.load(); | ||||||
|     if (parser.seen('W')) recovery.save(true); |     if (parser.seen_test('W')) recovery.save(true); | ||||||
|     if (parser.seen('P')) recovery.purge(); |     if (parser.seen_test('P')) recovery.purge(); | ||||||
|     if (parser.seen('D')) recovery.debug(PSTR("M413")); |     if (parser.seen_test('D')) recovery.debug(PSTR("M413")); | ||||||
|     #if PIN_EXISTS(POWER_LOSS) |     #if PIN_EXISTS(POWER_LOSS) | ||||||
|       if (parser.seen('O')) recovery._outage(); |       if (parser.seen_test('O')) recovery._outage(); | ||||||
|     #endif |     #endif | ||||||
|     if (parser.seen('E')) SERIAL_ECHOPGM_P(recovery.exists() ? PSTR("PLR Exists\n") : PSTR("No PLR\n")); |     if (parser.seen_test('E')) SERIAL_ECHOPGM_P(recovery.exists() ? PSTR("PLR Exists\n") : PSTR("No PLR\n")); | ||||||
|     if (parser.seen('V')) SERIAL_ECHOPGM_P(recovery.valid() ? PSTR("Valid\n") : PSTR("Invalid\n")); |     if (parser.seen_test('V')) SERIAL_ECHOPGM_P(recovery.valid() ? PSTR("Valid\n") : PSTR("Invalid\n")); | ||||||
|   #endif |   #endif | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -44,7 +44,7 @@ void GcodeSuite::M412() { | |||||||
|     #if ENABLED(HOST_ACTION_COMMANDS) |     #if ENABLED(HOST_ACTION_COMMANDS) | ||||||
|       if (parser.seen('H')) runout.host_handling = parser.value_bool(); |       if (parser.seen('H')) runout.host_handling = parser.value_bool(); | ||||||
|     #endif |     #endif | ||||||
|     const bool seenR = parser.seen('R'), seenS = parser.seen('S'); |     const bool seenR = parser.seen_test('R'), seenS = parser.seen('S'); | ||||||
|     if (seenR || seenS) runout.reset(); |     if (seenR || seenS) runout.reset(); | ||||||
|     if (seenS) runout.enabled = parser.value_bool(); |     if (seenS) runout.enabled = parser.value_bool(); | ||||||
|     #if HAS_FILAMENT_RUNOUT_DISTANCE |     #if HAS_FILAMENT_RUNOUT_DISTANCE | ||||||
|   | |||||||
| @@ -48,7 +48,7 @@ void GcodeSuite::M122() { | |||||||
|       tmc_set_report_interval(interval); |       tmc_set_report_interval(interval); | ||||||
|     #endif |     #endif | ||||||
|  |  | ||||||
|     if (parser.seen('V')) |     if (parser.seen_test('V')) | ||||||
|       tmc_get_registers(print_axis.x, print_axis.y, print_axis.z, print_axis.e); |       tmc_get_registers(print_axis.x, print_axis.y, print_axis.z, print_axis.e); | ||||||
|     else |     else | ||||||
|       tmc_report_all(print_axis.x, print_axis.y, print_axis.z, print_axis.e); |       tmc_report_all(print_axis.x, print_axis.y, print_axis.z, print_axis.e); | ||||||
|   | |||||||
| @@ -52,7 +52,7 @@ | |||||||
|         break; |         break; | ||||||
|  |  | ||||||
|       case 10: |       case 10: | ||||||
|         kill(PSTR("D10"), PSTR("KILL TEST"), parser.seen('P')); |         kill(PSTR("D10"), PSTR("KILL TEST"), parser.seen_test('P')); | ||||||
|         break; |         break; | ||||||
|  |  | ||||||
|       case 1: { |       case 1: { | ||||||
|   | |||||||
| @@ -193,7 +193,7 @@ | |||||||
| void GcodeSuite::M114() { | void GcodeSuite::M114() { | ||||||
|  |  | ||||||
|   #if ENABLED(M114_DETAIL) |   #if ENABLED(M114_DETAIL) | ||||||
|     if (parser.seen('D')) { |     if (parser.seen_test('D')) { | ||||||
|       #if DISABLED(M114_LEGACY) |       #if DISABLED(M114_LEGACY) | ||||||
|         planner.synchronize(); |         planner.synchronize(); | ||||||
|       #endif |       #endif | ||||||
| @@ -201,14 +201,14 @@ void GcodeSuite::M114() { | |||||||
|       report_current_position_detail(); |       report_current_position_detail(); | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|     if (parser.seen('E')) { |     if (parser.seen_test('E')) { | ||||||
|       SERIAL_ECHOLNPAIR("Count E:", stepper.position(E_AXIS)); |       SERIAL_ECHOLNPAIR("Count E:", stepper.position(E_AXIS)); | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|   #endif |   #endif | ||||||
|  |  | ||||||
|   #if ENABLED(M114_REALTIME) |   #if ENABLED(M114_REALTIME) | ||||||
|     if (parser.seen('R')) { report_real_position(); return; } |     if (parser.seen_test('R')) { report_real_position(); return; } | ||||||
|   #endif |   #endif | ||||||
|  |  | ||||||
|   TERN_(M114_LEGACY, planner.synchronize()); |   TERN_(M114_LEGACY, planner.synchronize()); | ||||||
|   | |||||||
| @@ -49,9 +49,9 @@ void GcodeSuite::G0_G1(TERN_(HAS_FAST_MOVES, const bool fast_move/*=false*/)) { | |||||||
|   if (IsRunning() |   if (IsRunning() | ||||||
|     #if ENABLED(NO_MOTION_BEFORE_HOMING) |     #if ENABLED(NO_MOTION_BEFORE_HOMING) | ||||||
|       && !homing_needed_error( |       && !homing_needed_error( | ||||||
|           (parser.seen('X') ? _BV(X_AXIS) : 0) |           (parser.seen_test('X') ? _BV(X_AXIS) : 0) | ||||||
|         | (parser.seen('Y') ? _BV(Y_AXIS) : 0) |         | (parser.seen_test('Y') ? _BV(Y_AXIS) : 0) | ||||||
|         | (parser.seen('Z') ? _BV(Z_AXIS) : 0) ) |         | (parser.seen_test('Z') ? _BV(Z_AXIS) : 0) ) | ||||||
|     #endif |     #endif | ||||||
|   ) { |   ) { | ||||||
|     TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(M_RUNNING)); |     TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(M_RUNNING)); | ||||||
|   | |||||||
| @@ -74,7 +74,7 @@ void GcodeSuite::M290() { | |||||||
|         const float offs = constrain(parser.value_axis_units((AxisEnum)a), -2, 2); |         const float offs = constrain(parser.value_axis_units((AxisEnum)a), -2, 2); | ||||||
|         babystep.add_mm((AxisEnum)a, offs); |         babystep.add_mm((AxisEnum)a, offs); | ||||||
|         #if ENABLED(BABYSTEP_ZPROBE_OFFSET) |         #if ENABLED(BABYSTEP_ZPROBE_OFFSET) | ||||||
|           if (a == Z_AXIS && (!parser.seen('P') || parser.value_bool())) mod_probe_offset(offs); |           if (a == Z_AXIS && parser.boolval('P', true)) mod_probe_offset(offs); | ||||||
|         #endif |         #endif | ||||||
|       } |       } | ||||||
|   #else |   #else | ||||||
|   | |||||||
| @@ -408,6 +408,8 @@ public: | |||||||
|   static inline int32_t   longval(const char c, const int32_t dval=0)    { return seenval(c) ? value_long()         : dval; } |   static inline int32_t   longval(const char c, const int32_t dval=0)    { return seenval(c) ? value_long()         : dval; } | ||||||
|   static inline uint32_t  ulongval(const char c, const uint32_t dval=0)  { return seenval(c) ? value_ulong()        : dval; } |   static inline uint32_t  ulongval(const char c, const uint32_t dval=0)  { return seenval(c) ? value_ulong()        : dval; } | ||||||
|   static inline float     linearval(const char c, const float dval=0)    { return seenval(c) ? value_linear_units() : dval; } |   static inline float     linearval(const char c, const float dval=0)    { return seenval(c) ? value_linear_units() : dval; } | ||||||
|  |   static inline float     axisunitsval(const char c, const AxisEnum a, const float dval=0) | ||||||
|  |                                                                          { return seenval(c) ? value_axis_units(a)  : dval; } | ||||||
|   static inline celsius_t celsiusval(const char c, const float dval=0)   { return seenval(c) ? value_celsius()      : dval; } |   static inline celsius_t celsiusval(const char c, const float dval=0)   { return seenval(c) ? value_celsius()      : dval; } | ||||||
|  |  | ||||||
|   #if ENABLED(MARLIN_DEV_MODE) |   #if ENABLED(MARLIN_DEV_MODE) | ||||||
|   | |||||||
| @@ -33,7 +33,7 @@ | |||||||
|  *      OR, with 'C' get the current filename. |  *      OR, with 'C' get the current filename. | ||||||
|  */ |  */ | ||||||
| void GcodeSuite::M27() { | void GcodeSuite::M27() { | ||||||
|   if (parser.seen('C')) { |   if (parser.seen_test('C')) { | ||||||
|     SERIAL_ECHOPGM("Current file: "); |     SERIAL_ECHOPGM("Current file: "); | ||||||
|     card.printSelectedFilename(); |     card.printSelectedFilename(); | ||||||
|     return; |     return; | ||||||
|   | |||||||
| @@ -44,7 +44,7 @@ void GcodeSuite::M808() { | |||||||
|   // Allowed to go into the queue for logging purposes. |   // Allowed to go into the queue for logging purposes. | ||||||
|  |  | ||||||
|   // M808 K sent from the host to cancel all loops |   // M808 K sent from the host to cancel all loops | ||||||
|   if (parser.seen('K')) repeat.cancel(); |   if (parser.seen_test('K')) repeat.cancel(); | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -68,7 +68,7 @@ void GcodeSuite::M106() { | |||||||
|       if (t > 0) return thermalManager.set_temp_fan_speed(pfan, t); |       if (t > 0) return thermalManager.set_temp_fan_speed(pfan, t); | ||||||
|     #endif |     #endif | ||||||
|  |  | ||||||
|     const uint16_t dspeed = parser.seen('A') ? thermalManager.fan_speed[active_extruder] : 255; |     const uint16_t dspeed = parser.seen_test('A') ? thermalManager.fan_speed[active_extruder] : 255; | ||||||
|  |  | ||||||
|     uint16_t speed = dspeed; |     uint16_t speed = dspeed; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -47,7 +47,7 @@ | |||||||
| void GcodeSuite::M303() { | void GcodeSuite::M303() { | ||||||
|  |  | ||||||
|   #if ANY(PID_DEBUG, PID_BED_DEBUG, PID_CHAMBER_DEBUG) |   #if ANY(PID_DEBUG, PID_BED_DEBUG, PID_CHAMBER_DEBUG) | ||||||
|     if (parser.seen('D')) { |     if (parser.seen_test('D')) { | ||||||
|       thermalManager.pid_debug_flag ^= true; |       thermalManager.pid_debug_flag ^= true; | ||||||
|       SERIAL_ECHO_START(); |       SERIAL_ECHO_START(); | ||||||
|       SERIAL_ECHOPGM("PID Debug "); |       SERIAL_ECHOPGM("PID Debug "); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user