diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 1a9d33a0..68933093 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -2660,16 +2660,15 @@ static void gcode_G28(bool home_x_axis, long home_x_value, bool home_y_axis, lon static void gcode_G28(bool home_x_axis, long home_x_value, bool home_y_axis, long home_y_value, bool home_z_axis, long home_z_value, bool without_mbl) #endif //TMC2130 { + // Flag for the display update routine and to disable the print cancelation during homing. st_synchronize(); + homing_flag = true; #if 0 SERIAL_ECHOPGM("G28, initial "); print_world_coordinates(); SERIAL_ECHOPGM("G28, initial "); print_physical_coordinates(); #endif - // Flag for the display update routine and to disable the print cancelation during homing. - homing_flag = true; - // Which axes should be homed? bool home_x = home_x_axis; bool home_y = home_y_axis; @@ -2912,24 +2911,21 @@ static void gcode_G28(bool home_x_axis, long home_x_value, bool home_y_axis, lon #if (defined(MESH_BED_LEVELING) && !defined(MK1BP)) if (home_x_axis || home_y_axis || without_mbl || home_z_axis) - { + { if (! home_z && mbl_was_active) { // Re-enable the mesh bed leveling if only the X and Y axes were re-homed. mbl.active = true; // and re-adjust the current logical Z axis with the bed leveling offset applicable at the current XY position. current_position[Z_AXIS] -= mbl.get_z(st_get_position_mm(X_AXIS), st_get_position_mm(Y_AXIS)); } - } - else - { - st_synchronize(); - homing_flag = false; - } + } #endif if (farm_mode) { prusa_statistics(20); }; + st_synchronize(); homing_flag = false; + #if 0 SERIAL_ECHOPGM("G28, final "); print_world_coordinates(); SERIAL_ECHOPGM("G28, final "); print_physical_coordinates(); @@ -2950,6 +2946,10 @@ static void gcode_G28(bool home_x_axis, bool home_y_axis, bool home_z_axis) // G80 - Automatic mesh bed leveling static void gcode_G80() { + st_synchronize(); + if (waiting_inside_plan_buffer_line_print_aborted) + return; + mesh_bed_leveling_flag = true; #ifndef PINDA_THERMISTOR static bool run = false; // thermistor-less PINDA temperature compensation is running @@ -3350,9 +3350,11 @@ static void gcode_G80() lcd_setstatuspgm(_T(WELCOME_MSG)); custom_message_type = custom_message_type_old; custom_message_state = custom_message_state_old; - mesh_bed_leveling_flag = false; mesh_bed_run_from_menu = false; lcd_update(2); + + st_synchronize(); + mesh_bed_leveling_flag = false; } @@ -5145,8 +5147,9 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) */ case 30: { - homing_flag = true; st_synchronize(); + homing_flag = true; + // TODO: make sure the bed_level_rotation_matrix is identity or the planner will get set incorectly int l_feedmultiply = setup_for_endstop_move(); @@ -5249,7 +5252,9 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) } } + st_synchronize(); homing_flag = true; // keep homing on to avoid babystepping while the LCD is enabled + lcd_update_enable(true); KEEPALIVE_STATE(NOT_BUSY); //no need to print busy messages as we print current temperatures periodicaly SERIAL_ECHOLNPGM("PINDA probe calibration start");