Browse Source

Optimize G-code flag parameters (#21849)

vanilla_fb_2.0.x
Scott Lahteine 4 years ago
committed by Scott Lahteine
parent
commit
6a1e78e614
  1. 40
      Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
  2. 14
      Marlin/src/feature/encoder_i2c.cpp
  3. 14
      Marlin/src/feature/fwretract.cpp
  4. 8
      Marlin/src/gcode/bedlevel/G26.cpp
  5. 2
      Marlin/src/gcode/bedlevel/M420.cpp
  6. 12
      Marlin/src/gcode/bedlevel/abl/G29.cpp
  7. 2
      Marlin/src/gcode/bedlevel/mbl/G29.cpp
  8. 25
      Marlin/src/gcode/bedlevel/ubl/M421.cpp
  9. 6
      Marlin/src/gcode/calibrate/G28.cpp
  10. 4
      Marlin/src/gcode/calibrate/G33.cpp
  11. 2
      Marlin/src/gcode/feature/pause/M125.cpp
  12. 14
      Marlin/src/gcode/feature/pause/M600.cpp
  13. 4
      Marlin/src/gcode/feature/powerloss/M1000.cpp
  14. 12
      Marlin/src/gcode/feature/powerloss/M413.cpp
  15. 2
      Marlin/src/gcode/feature/runout/M412.cpp
  16. 2
      Marlin/src/gcode/feature/trinamic/M122.cpp
  17. 2
      Marlin/src/gcode/gcode_d.cpp
  18. 6
      Marlin/src/gcode/host/M114.cpp
  19. 6
      Marlin/src/gcode/motion/G0_G1.cpp
  20. 2
      Marlin/src/gcode/motion/M290.cpp
  21. 2
      Marlin/src/gcode/parser.h
  22. 2
      Marlin/src/gcode/sd/M27.cpp
  23. 2
      Marlin/src/gcode/sd/M808.cpp
  24. 2
      Marlin/src/gcode/temp/M106_M107.cpp
  25. 2
      Marlin/src/gcode/temp/M303.cpp

40
Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp

@ -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);

14
Marlin/src/feature/encoder_i2c.cpp

@ -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) {

14
Marlin/src/feature/fwretract.cpp

@ -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*/) {

8
Marlin/src/gcode/bedlevel/G26.cpp

@ -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);

2
Marlin/src/gcode/bedlevel/M420.cpp

@ -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

12
Marlin/src/gcode/bedlevel/abl/G29.cpp

@ -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);
} }

2
Marlin/src/gcode/bedlevel/mbl/G29.cpp

@ -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;

25
Marlin/src/gcode/bedlevel/ubl/M421.cpp

@ -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
} }
} }

6
Marlin/src/gcode/calibrate/G28.cpp

@ -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;

4
Marlin/src/gcode/calibrate/G33.cpp

@ -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,

2
Marlin/src/gcode/feature/pause/M125.cpp

@ -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;

14
Marlin/src/gcode/feature/pause/M600.cpp

@ -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

4
Marlin/src/gcode/feature/powerloss/M1000.cpp

@ -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

12
Marlin/src/gcode/feature/powerloss/M413.cpp

@ -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
} }

2
Marlin/src/gcode/feature/runout/M412.cpp

@ -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

2
Marlin/src/gcode/feature/trinamic/M122.cpp

@ -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);

2
Marlin/src/gcode/gcode_d.cpp

@ -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: {

6
Marlin/src/gcode/host/M114.cpp

@ -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());

6
Marlin/src/gcode/motion/G0_G1.cpp

@ -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));

2
Marlin/src/gcode/motion/M290.cpp

@ -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

2
Marlin/src/gcode/parser.h

@ -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)

2
Marlin/src/gcode/sd/M27.cpp

@ -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;

2
Marlin/src/gcode/sd/M808.cpp

@ -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();
} }

2
Marlin/src/gcode/temp/M106_M107.cpp

@ -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;

2
Marlin/src/gcode/temp/M303.cpp

@ -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 ");

Loading…
Cancel
Save