Browse Source

Internal G29N for G28+G29 (#20800)

Scott Lahteine 4 years ago
parent
commit
bb597dcf66
No account linked to committer's email address

+ 2
- 2
Marlin/Configuration_adv.h View File

3344
   //#define USER_SCRIPT_RETURN  // Return to status screen after a script
3344
   //#define USER_SCRIPT_RETURN  // Return to status screen after a script
3345
 
3345
 
3346
   #define USER_DESC_1 "Home & UBL Info"
3346
   #define USER_DESC_1 "Home & UBL Info"
3347
-  #define USER_GCODE_1 "G28\nG29 W"
3347
+  #define USER_GCODE_1 "G29NW"
3348
 
3348
 
3349
   #define USER_DESC_2 "Preheat for " PREHEAT_1_LABEL
3349
   #define USER_DESC_2 "Preheat for " PREHEAT_1_LABEL
3350
   #define USER_GCODE_2 "M140 S" STRINGIFY(PREHEAT_1_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND)
3350
   #define USER_GCODE_2 "M140 S" STRINGIFY(PREHEAT_1_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND)
3353
   #define USER_GCODE_3 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_2_TEMP_HOTEND)
3353
   #define USER_GCODE_3 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_2_TEMP_HOTEND)
3354
 
3354
 
3355
   #define USER_DESC_4 "Heat Bed/Home/Level"
3355
   #define USER_DESC_4 "Heat Bed/Home/Level"
3356
-  #define USER_GCODE_4 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nG28\nG29"
3356
+  #define USER_GCODE_4 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nG29N"
3357
 
3357
 
3358
   #define USER_DESC_5 "Home & Info"
3358
   #define USER_DESC_5 "Home & Info"
3359
   #define USER_GCODE_5 "G28\nM503"
3359
   #define USER_GCODE_5 "G28\nM503"

+ 2
- 1
Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp View File

321
     // Check for commands that require the printer to be homed
321
     // Check for commands that require the printer to be homed
322
     if (may_move) {
322
     if (may_move) {
323
       planner.synchronize();
323
       planner.synchronize();
324
-      if (axes_should_home()) gcode.home_all_axes();
324
+      // Send 'N' to force homing before G29 (internal only)
325
+      if (axes_should_home() || parser.seen('N')) gcode.home_all_axes();
325
       TERN_(HAS_MULTI_HOTEND, if (active_extruder) tool_change(0));
326
       TERN_(HAS_MULTI_HOTEND, if (active_extruder) tool_change(0));
326
     }
327
     }
327
 
328
 

+ 9
- 4
Marlin/src/gcode/bedlevel/abl/G29.cpp View File

181
          no_action = seenA || seenQ,
181
          no_action = seenA || seenQ,
182
               faux = ENABLED(DEBUG_LEVELING_FEATURE) && DISABLED(PROBE_MANUALLY) ? parser.boolval('C') : no_action;
182
               faux = ENABLED(DEBUG_LEVELING_FEATURE) && DISABLED(PROBE_MANUALLY) ? parser.boolval('C') : no_action;
183
 
183
 
184
-  // Don't allow auto-leveling without homing first
185
-  if (homing_needed_error()) G29_RETURN(false);
186
-
187
   if (!no_action && planner.leveling_active && parser.boolval('O')) { // Auto-level only if needed
184
   if (!no_action && planner.leveling_active && parser.boolval('O')) { // Auto-level only if needed
188
     if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> Auto-level not needed, skip");
185
     if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> Auto-level not needed, skip");
189
     G29_RETURN(false);
186
     G29_RETURN(false);
190
   }
187
   }
191
 
188
 
189
+  // Send 'N' to force homing before G29 (internal only)
190
+  if (parser.seen('N'))
191
+    gcode.process_subcommands_now_P(TERN(G28_L0_ENSURES_LEVELING_OFF, PSTR("G28L0"), G28_STR));
192
+
193
+  // Don't allow auto-leveling without homing first
194
+  if (homing_needed_error()) G29_RETURN(false);
195
+
192
   // Define local vars 'static' for manual probing, 'auto' otherwise
196
   // Define local vars 'static' for manual probing, 'auto' otherwise
193
   #define ABL_VAR TERN_(PROBE_MANUALLY, static)
197
   #define ABL_VAR TERN_(PROBE_MANUALLY, static)
194
 
198
 
249
 
253
 
250
   #if ENABLED(AUTO_BED_LEVELING_LINEAR)
254
   #if ENABLED(AUTO_BED_LEVELING_LINEAR)
251
     struct linear_fit_data lsf_results;
255
     struct linear_fit_data lsf_results;
252
-    incremental_LSF_reset(&lsf_results);
253
   #endif
256
   #endif
254
 
257
 
255
   /**
258
   /**
324
 
327
 
325
     #if ENABLED(AUTO_BED_LEVELING_LINEAR)
328
     #if ENABLED(AUTO_BED_LEVELING_LINEAR)
326
 
329
 
330
+      incremental_LSF_reset(&lsf_results);
331
+
327
       do_topography_map = verbose_level > 2 || parser.boolval('T');
332
       do_topography_map = verbose_level > 2 || parser.boolval('T');
328
 
333
 
329
       // X and Y specify points in each direction, overriding the default
334
       // X and Y specify points in each direction, overriding the default

+ 1
- 1
Marlin/src/gcode/bedlevel/mbl/G29.cpp View File

85
       mbl.reset();
85
       mbl.reset();
86
       mbl_probe_index = 0;
86
       mbl_probe_index = 0;
87
       if (!ui.wait_for_move) {
87
       if (!ui.wait_for_move) {
88
-        queue.inject_P(PSTR("G28\nG29 S2"));
88
+        queue.inject_P(parser.seen('N') ? PSTR("G28" TERN(G28_L0_ENSURES_LEVELING_OFF, "L0", "") "\nG29S2") : PSTR("G29S2"));
89
         return;
89
         return;
90
       }
90
       }
91
       state = MeshNext;
91
       state = MeshNext;

+ 1
- 1
Marlin/src/gcode/feature/pause/M600.cpp View File

102
 
102
 
103
   #if ENABLED(HOME_BEFORE_FILAMENT_CHANGE)
103
   #if ENABLED(HOME_BEFORE_FILAMENT_CHANGE)
104
     // If needed, home before parking for filament change
104
     // If needed, home before parking for filament change
105
-    if (!all_axes_trusted()) home_all_axes();
105
+    if (!all_axes_trusted()) home_all_axes(true);
106
   #endif
106
   #endif
107
 
107
 
108
   #if HAS_MULTI_EXTRUDER
108
   #if HAS_MULTI_EXTRUDER

+ 2
- 2
Marlin/src/gcode/gcode.h View File

369
   static void process_subcommands_now_P(PGM_P pgcode);
369
   static void process_subcommands_now_P(PGM_P pgcode);
370
   static void process_subcommands_now(char * gcode);
370
   static void process_subcommands_now(char * gcode);
371
 
371
 
372
-  static inline void home_all_axes() {
372
+  static inline void home_all_axes(const bool keep_leveling=false) {
373
     extern const char G28_STR[];
373
     extern const char G28_STR[];
374
-    process_subcommands_now_P(G28_STR);
374
+    process_subcommands_now_P(keep_leveling ? G28_STR : TERN(G28_L0_ENSURES_LEVELING_OFF, PSTR("G28L0"), G28_STR));
375
   }
375
   }
376
 
376
 
377
   #if EITHER(HAS_AUTO_REPORTING, HOST_KEEPALIVE_FEATURE)
377
   #if EITHER(HAS_AUTO_REPORTING, HOST_KEEPALIVE_FEATURE)

+ 1
- 1
Marlin/src/lcd/extui/lib/anycubic_i3mega/anycubic_i3mega_lcd.cpp View File

324
 
324
 
325
               case '2': // "<02ABL>"
325
               case '2': // "<02ABL>"
326
                 SERIAL_ECHOLNPGM("Special Menu: Auto Bed Leveling");
326
                 SERIAL_ECHOLNPGM("Special Menu: Auto Bed Leveling");
327
-                ExtUI::injectCommands_P(PSTR("G28\nG29"));
327
+                ExtUI::injectCommands_P(PSTR("G29N"));
328
                 break;
328
                 break;
329
 
329
 
330
               case '3': // "<03HtendPID>"
330
               case '3': // "<03HtendPID>"

+ 1
- 1
Marlin/src/lcd/extui/lib/mks_ui/draw_ui.cpp View File

75
 extern void LCD_IO_WriteData(uint16_t RegValue);
75
 extern void LCD_IO_WriteData(uint16_t RegValue);
76
 
76
 
77
 static const char custom_gcode_command[][100] = {
77
 static const char custom_gcode_command[][100] = {
78
-  "G28\nG29\nM500",
78
+  "G29N\nM500",
79
   "G28",
79
   "G28",
80
   "G28",
80
   "G28",
81
   "G28",
81
   "G28",

+ 1
- 1
Marlin/src/lcd/menu/menu_bed_corners.cpp View File

213
   void _lcd_draw_level_prompt() {
213
   void _lcd_draw_level_prompt() {
214
     if (!ui.should_draw()) return;
214
     if (!ui.should_draw()) return;
215
     MenuItem_confirm::confirm_screen(
215
     MenuItem_confirm::confirm_screen(
216
-      []{ queue.inject_P(TERN(HAS_LEVELING, PSTR("G28\nG29"), G28_STR));
216
+      []{ queue.inject_P(TERN(HAS_LEVELING, PSTR("G29N"), G28_STR));
217
           ui.return_to_status();
217
           ui.return_to_status();
218
       }
218
       }
219
       , []{ ui.goto_previous_screen_no_defer(); }
219
       , []{ ui.goto_previous_screen_no_defer(); }

+ 1
- 1
Marlin/src/lcd/menu/menu_bed_leveling.cpp View File

254
     SUBMENU(MSG_LEVEL_BED, _lcd_level_bed_continue);
254
     SUBMENU(MSG_LEVEL_BED, _lcd_level_bed_continue);
255
   #else
255
   #else
256
     // Automatic leveling can just run the G-code
256
     // Automatic leveling can just run the G-code
257
-    GCODES_ITEM(MSG_LEVEL_BED, is_homed ? PSTR("G29") : PSTR("G28\nG29"));
257
+    GCODES_ITEM(MSG_LEVEL_BED, is_homed ? PSTR("G29") : PSTR("G29N"));
258
   #endif
258
   #endif
259
 
259
 
260
   #if ENABLED(MESH_EDIT_MENU)
260
   #if ENABLED(MESH_EDIT_MENU)

+ 1
- 1
Marlin/src/lcd/menu/menu_motion.cpp View File

382
   #elif HAS_LEVELING && DISABLED(SLIM_LCD_MENUS)
382
   #elif HAS_LEVELING && DISABLED(SLIM_LCD_MENUS)
383
 
383
 
384
     #if DISABLED(PROBE_MANUALLY)
384
     #if DISABLED(PROBE_MANUALLY)
385
-      GCODES_ITEM(MSG_LEVEL_BED, PSTR("G28\nG29"));
385
+      GCODES_ITEM(MSG_LEVEL_BED, PSTR("G29N"));
386
     #endif
386
     #endif
387
 
387
 
388
     if (all_axes_homed() && leveling_is_valid()) {
388
     if (all_axes_homed() && leveling_is_valid()) {

+ 2
- 2
Marlin/src/lcd/menu/menu_ubl.cpp View File

355
   #endif // PREHEAT_COUNT
355
   #endif // PREHEAT_COUNT
356
 
356
 
357
   SUBMENU(MSG_UBL_BUILD_CUSTOM_MESH, _lcd_ubl_custom_mesh);
357
   SUBMENU(MSG_UBL_BUILD_CUSTOM_MESH, _lcd_ubl_custom_mesh);
358
-  GCODES_ITEM(MSG_UBL_BUILD_COLD_MESH, PSTR("G28\nG29P1"));
358
+  GCODES_ITEM(MSG_UBL_BUILD_COLD_MESH, PSTR("G29NP1"));
359
   SUBMENU(MSG_UBL_FILLIN_MESH, _menu_ubl_fillin);
359
   SUBMENU(MSG_UBL_FILLIN_MESH, _menu_ubl_fillin);
360
   GCODES_ITEM(MSG_UBL_CONTINUE_MESH, PSTR("G29P1C"));
360
   GCODES_ITEM(MSG_UBL_CONTINUE_MESH, PSTR("G29P1C"));
361
   ACTION_ITEM(MSG_UBL_INVALIDATE_ALL, _lcd_ubl_invalidate);
361
   ACTION_ITEM(MSG_UBL_INVALIDATE_ALL, _lcd_ubl_invalidate);
589
   void _lcd_ubl_step_by_step() {
589
   void _lcd_ubl_step_by_step() {
590
     START_MENU();
590
     START_MENU();
591
     BACK_ITEM(MSG_UBL_LEVEL_BED);
591
     BACK_ITEM(MSG_UBL_LEVEL_BED);
592
-    GCODES_ITEM(MSG_UBL_1_BUILD_COLD_MESH, PSTR("G28\nG29P1"));
592
+    GCODES_ITEM(MSG_UBL_1_BUILD_COLD_MESH, PSTR("G29NP1"));
593
     GCODES_ITEM(MSG_UBL_2_SMART_FILLIN, PSTR("G29P3T0"));
593
     GCODES_ITEM(MSG_UBL_2_SMART_FILLIN, PSTR("G29P3T0"));
594
     SUBMENU(MSG_UBL_3_VALIDATE_MESH_MENU, _lcd_ubl_validate_mesh);
594
     SUBMENU(MSG_UBL_3_VALIDATE_MESH_MENU, _lcd_ubl_validate_mesh);
595
     GCODES_ITEM(MSG_UBL_4_FINE_TUNE_ALL, PSTR("G29P4R999T"));
595
     GCODES_ITEM(MSG_UBL_4_FINE_TUNE_ALL, PSTR("G29P4R999T"));

Loading…
Cancel
Save