Patches for leveling reactivation in G28 / M48
This commit is contained in:
		
							parent
							
								
									7d5cd7e0d7
								
							
						
					
					
						commit
						e79b335367
					
				| @ -2429,7 +2429,7 @@ static void clean_up_after_endstop_or_probe_move() { | |||||||
|       ubl.state.active = enable; |       ubl.state.active = enable; | ||||||
|       //set_current_from_steppers_for_axis(Z_AXIS);
 |       //set_current_from_steppers_for_axis(Z_AXIS);
 | ||||||
| 
 | 
 | ||||||
|     #elif HAS_ABL |     #else | ||||||
| 
 | 
 | ||||||
|       #if ENABLED(AUTO_BED_LEVELING_BILINEAR) |       #if ENABLED(AUTO_BED_LEVELING_BILINEAR) | ||||||
|         const bool can_change = (!enable || (bilinear_grid_spacing[0] && bilinear_grid_spacing[1])); |         const bool can_change = (!enable || (bilinear_grid_spacing[0] && bilinear_grid_spacing[1])); | ||||||
| @ -3750,9 +3750,6 @@ inline void gcode_G28() { | |||||||
| 
 | 
 | ||||||
|   // Disable the leveling matrix before homing
 |   // Disable the leveling matrix before homing
 | ||||||
|   #if HAS_LEVELING |   #if HAS_LEVELING | ||||||
|     #if ENABLED(AUTO_BED_LEVELING_UBL) |  | ||||||
|       const bool bed_leveling_state_at_entry = ubl.state.active; |  | ||||||
|     #endif |  | ||||||
|     set_bed_leveling_enabled(false); |     set_bed_leveling_enabled(false); | ||||||
|   #endif |   #endif | ||||||
| 
 | 
 | ||||||
| @ -3895,25 +3892,6 @@ inline void gcode_G28() { | |||||||
|     do_blocking_move_to_z(delta_clip_start_height); |     do_blocking_move_to_z(delta_clip_start_height); | ||||||
|   #endif |   #endif | ||||||
| 
 | 
 | ||||||
|   #if ENABLED(AUTO_BED_LEVELING_UBL) |  | ||||||
|     set_bed_leveling_enabled(bed_leveling_state_at_entry); |  | ||||||
|   #endif |  | ||||||
| 
 |  | ||||||
|   // Enable mesh leveling again
 |  | ||||||
|   #if ENABLED(MESH_BED_LEVELING) |  | ||||||
|     if (mbl.reactivate()) { |  | ||||||
|       set_bed_leveling_enabled(true); |  | ||||||
|       if (home_all_axis || (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && homeZ)) { |  | ||||||
|         #if ENABLED(MESH_G28_REST_ORIGIN) |  | ||||||
|           current_position[Z_AXIS] = LOGICAL_Z_POSITION(Z_MIN_POS); |  | ||||||
|           set_destination_to_current(); |  | ||||||
|           line_to_destination(homing_feedrate_mm_s[Z_AXIS]); |  | ||||||
|           stepper.synchronize(); |  | ||||||
|         #endif |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   #endif |  | ||||||
| 
 |  | ||||||
|   clean_up_after_endstop_or_probe_move(); |   clean_up_after_endstop_or_probe_move(); | ||||||
| 
 | 
 | ||||||
|   // Restore the active tool after homing
 |   // Restore the active tool after homing
 | ||||||
| @ -3982,6 +3960,18 @@ void home_all_axes() { gcode_G28(); } | |||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   void mesh_probing_done() { | ||||||
|  |     mbl.set_has_mesh(true); | ||||||
|  |     home_all_axes(); | ||||||
|  |     set_bed_leveling_enabled(true); | ||||||
|  |     #if ENABLED(MESH_G28_REST_ORIGIN) | ||||||
|  |       current_position[Z_AXIS] = LOGICAL_Z_POSITION(Z_MIN_POS); | ||||||
|  |       set_destination_to_current(); | ||||||
|  |       line_to_destination(homing_feedrate_mm_s[Z_AXIS]); | ||||||
|  |       stepper.synchronize(); | ||||||
|  |     #endif | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   /**
 |   /**
 | ||||||
|    * G29: Mesh-based Z probe, probes a grid and produces a |    * G29: Mesh-based Z probe, probes a grid and produces a | ||||||
|    *      mesh to compensate for variable bed height |    *      mesh to compensate for variable bed height | ||||||
| @ -4072,14 +4062,12 @@ void home_all_axes() { gcode_G28(); } | |||||||
|           line_to_current_position(); |           line_to_current_position(); | ||||||
|           stepper.synchronize(); |           stepper.synchronize(); | ||||||
| 
 | 
 | ||||||
|           // After recording the last point, activate the mbl and home
 |           // After recording the last point, activate home and activate
 | ||||||
|           SERIAL_PROTOCOLLNPGM("Mesh probing done."); |  | ||||||
|           mbl_probe_index = -1; |           mbl_probe_index = -1; | ||||||
|           mbl.set_has_mesh(true); |           SERIAL_PROTOCOLLNPGM("Mesh probing done."); | ||||||
|           mbl.set_reactivate(true); |  | ||||||
|           enqueue_and_echo_commands_P(PSTR("G28")); |  | ||||||
|           BUZZ(100, 659); |           BUZZ(100, 659); | ||||||
|           BUZZ(100, 698); |           BUZZ(100, 698); | ||||||
|  |           mesh_probing_done(); | ||||||
|         } |         } | ||||||
|         break; |         break; | ||||||
| 
 | 
 | ||||||
| @ -5015,7 +5003,7 @@ void home_all_axes() { gcode_G28(); } | |||||||
|       SYNC_PLAN_POSITION_KINEMATIC(); |       SYNC_PLAN_POSITION_KINEMATIC(); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| #endif // HAS_ABL && DISABLED(AUTO_BED_LEVELING_UBL)
 | #endif // HAS_ABL && !AUTO_BED_LEVELING_UBL
 | ||||||
| 
 | 
 | ||||||
| #if HAS_BED_PROBE | #if HAS_BED_PROBE | ||||||
| 
 | 
 | ||||||
| @ -6200,10 +6188,6 @@ inline void gcode_M42() { | |||||||
|    * regenerated. |    * regenerated. | ||||||
|    */ |    */ | ||||||
|   inline void gcode_M48() { |   inline void gcode_M48() { | ||||||
|   #if ENABLED(AUTO_BED_LEVELING_UBL) |  | ||||||
|   bool bed_leveling_state_at_entry=0; |  | ||||||
|     bed_leveling_state_at_entry = ubl.state.active; |  | ||||||
|   #endif |  | ||||||
| 
 | 
 | ||||||
|     if (axis_unhomed_error(true, true, true)) return; |     if (axis_unhomed_error(true, true, true)) return; | ||||||
| 
 | 
 | ||||||
| @ -6269,8 +6253,17 @@ inline void gcode_M42() { | |||||||
|       SERIAL_PROTOCOLLNPGM("Positioning the probe..."); |       SERIAL_PROTOCOLLNPGM("Positioning the probe..."); | ||||||
| 
 | 
 | ||||||
|     // Disable bed level correction in M48 because we want the raw data when we probe
 |     // Disable bed level correction in M48 because we want the raw data when we probe
 | ||||||
|     #if HAS_ABL | 
 | ||||||
|       const bool abl_was_enabled = planner.abl_enabled; |     #if HAS_LEVELING | ||||||
|  |       const bool was_enabled = | ||||||
|  |         #if ENABLED(AUTO_BED_LEVELING_UBL) | ||||||
|  |           ubl.state.active | ||||||
|  |         #elif ENABLED(MESH_BED_LEVELING) | ||||||
|  |           mbl.active() | ||||||
|  |         #else | ||||||
|  |           planner.abl_enabled | ||||||
|  |         #endif | ||||||
|  |       ; | ||||||
|       set_bed_leveling_enabled(false); |       set_bed_leveling_enabled(false); | ||||||
|     #endif |     #endif | ||||||
| 
 | 
 | ||||||
| @ -6422,14 +6415,9 @@ inline void gcode_M42() { | |||||||
| 
 | 
 | ||||||
|     clean_up_after_endstop_or_probe_move(); |     clean_up_after_endstop_or_probe_move(); | ||||||
| 
 | 
 | ||||||
|     // Re-enable bed level correction if it has been on
 |     // Re-enable bed level correction if it had been on
 | ||||||
|     #if HAS_ABL |     #if HAS_ABL | ||||||
|       set_bed_leveling_enabled(abl_was_enabled); |       set_bed_leveling_enabled(was_enabled); | ||||||
|     #endif |  | ||||||
| 
 |  | ||||||
|     #if ENABLED(AUTO_BED_LEVELING_UBL) |  | ||||||
|       set_bed_leveling_enabled(bed_leveling_state_at_entry); |  | ||||||
|       ubl.state.active = bed_leveling_state_at_entry; |  | ||||||
|     #endif |     #endif | ||||||
| 
 | 
 | ||||||
|     report_current_position(); |     report_current_position(); | ||||||
|  | |||||||
| @ -36,8 +36,7 @@ | |||||||
|   enum MBLStatus { |   enum MBLStatus { | ||||||
|     MBL_STATUS_NONE = 0, |     MBL_STATUS_NONE = 0, | ||||||
|     MBL_STATUS_HAS_MESH_BIT = 0, |     MBL_STATUS_HAS_MESH_BIT = 0, | ||||||
|     MBL_STATUS_ACTIVE_BIT = 1, |     MBL_STATUS_ACTIVE_BIT = 1 | ||||||
|     MBL_STATUS_REACTIVATE_BIT = 2 |  | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   #define MESH_X_DIST ((MESH_MAX_X - (MESH_MIN_X)) / (GRID_MAX_POINTS_X - 1)) |   #define MESH_X_DIST ((MESH_MAX_X - (MESH_MIN_X)) / (GRID_MAX_POINTS_X - 1)) | ||||||
| @ -61,8 +60,6 @@ | |||||||
|     static void set_active(const bool onOff)   { onOff ? SBI(status, MBL_STATUS_ACTIVE_BIT) : CBI(status, MBL_STATUS_ACTIVE_BIT); } |     static void set_active(const bool onOff)   { onOff ? SBI(status, MBL_STATUS_ACTIVE_BIT) : CBI(status, MBL_STATUS_ACTIVE_BIT); } | ||||||
|     static bool has_mesh()                     { return TEST(status, MBL_STATUS_HAS_MESH_BIT); } |     static bool has_mesh()                     { return TEST(status, MBL_STATUS_HAS_MESH_BIT); } | ||||||
|     static void set_has_mesh(const bool onOff) { onOff ? SBI(status, MBL_STATUS_HAS_MESH_BIT) : CBI(status, MBL_STATUS_HAS_MESH_BIT); } |     static void set_has_mesh(const bool onOff) { onOff ? SBI(status, MBL_STATUS_HAS_MESH_BIT) : CBI(status, MBL_STATUS_HAS_MESH_BIT); } | ||||||
|     static bool reactivate()                   { bool b = TEST(status, MBL_STATUS_REACTIVATE_BIT); CBI(status, MBL_STATUS_REACTIVATE_BIT); return b; } |  | ||||||
|     static void set_reactivate(const bool onOff) { onOff ? SBI(status, MBL_STATUS_REACTIVATE_BIT) : CBI(status, MBL_STATUS_REACTIVATE_BIT); } |  | ||||||
| 
 | 
 | ||||||
|     static inline void zigzag(const int8_t index, int8_t &px, int8_t &py) { |     static inline void zigzag(const int8_t index, int8_t &px, int8_t &py) { | ||||||
|       px = index % (GRID_MAX_POINTS_X); |       px = index % (GRID_MAX_POINTS_X); | ||||||
|  | |||||||
| @ -162,6 +162,7 @@ uint16_t max_display_update_time = 0; | |||||||
| 
 | 
 | ||||||
|   #if ENABLED(MESH_BED_LEVELING) && ENABLED(LCD_BED_LEVELING) |   #if ENABLED(MESH_BED_LEVELING) && ENABLED(LCD_BED_LEVELING) | ||||||
|     #include "mesh_bed_leveling.h" |     #include "mesh_bed_leveling.h" | ||||||
|  |     extern void mesh_probing_done(); | ||||||
|   #endif |   #endif | ||||||
| 
 | 
 | ||||||
|   ////////////////////////////////////////////
 |   ////////////////////////////////////////////
 | ||||||
| @ -1539,9 +1540,9 @@ void kill_screen(const char* lcd_msg) { | |||||||
|           // Enable leveling, if needed
 |           // Enable leveling, if needed
 | ||||||
|           #if ENABLED(MESH_BED_LEVELING) |           #if ENABLED(MESH_BED_LEVELING) | ||||||
| 
 | 
 | ||||||
|  |             lcd_synchronize(); | ||||||
|             mbl.set_has_mesh(true); |             mbl.set_has_mesh(true); | ||||||
|             mbl.set_reactivate(true); |             mesh_probing_done(); | ||||||
|             enqueue_and_echo_commands_P(PSTR("G28")); |  | ||||||
| 
 | 
 | ||||||
|           #elif ENABLED(AUTO_BED_LEVELING_UBL) |           #elif ENABLED(AUTO_BED_LEVELING_UBL) | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user