Browse Source

Add SRAM command injection (#17459)

Scott Lahteine 5 years ago
parent
commit
48919c54fb
No account linked to committer's email address

+ 34
- 16
Marlin/src/gcode/queue.cpp View File

86
 bool send_ok[BUFSIZE];
86
 bool send_ok[BUFSIZE];
87
 
87
 
88
 /**
88
 /**
89
- * Next Injected Command pointer. nullptr if no commands are being injected.
90
- * Used by Marlin internally to ensure that commands initiated from within
91
- * are enqueued ahead of any pending serial or sd card commands.
89
+ * Next Injected PROGMEM Command pointer. (nullptr == empty)
90
+ * Internal commands are enqueued ahead of serial / SD commands.
92
  */
91
  */
93
-static PGM_P injected_commands_P = nullptr;
92
+PGM_P GCodeQueue::injected_commands_P; // = nullptr
93
+
94
+/**
95
+ * Injected SRAM Commands
96
+ */
97
+char GCodeQueue::injected_commands[64]; // = { 0 }
94
 
98
 
95
 GCodeQueue::GCodeQueue() {
99
 GCodeQueue::GCodeQueue() {
96
   // Send "ok" after commands by default
100
   // Send "ok" after commands by default
101
  * Check whether there are any commands yet to be executed
105
  * Check whether there are any commands yet to be executed
102
  */
106
  */
103
 bool GCodeQueue::has_commands_queued() {
107
 bool GCodeQueue::has_commands_queued() {
104
-  return queue.length || injected_commands_P;
108
+  return queue.length || injected_commands_P || injected_commands[0];
105
 }
109
 }
106
 
110
 
107
 /**
111
 /**
172
 }
176
 }
173
 
177
 
174
 /**
178
 /**
175
- * Process the next "immediate" command.
176
- * Return 'true' if any commands were processed,
177
- * or remain to process.
179
+ * Process the next "immediate" command from PROGMEM.
180
+ * Return 'true' if any commands were processed.
178
  */
181
  */
179
-bool GCodeQueue::process_injected_command() {
182
+bool GCodeQueue::process_injected_command_P() {
180
   if (injected_commands_P == nullptr) return false;
183
   if (injected_commands_P == nullptr) return false;
181
 
184
 
182
   char c;
185
   char c;
198
 }
201
 }
199
 
202
 
200
 /**
203
 /**
201
- * Enqueue one or many commands to run from program memory.
202
- * Do not inject a comment or use leading spaces!
203
- * Aborts the current queue, if any.
204
- * Note: process_injected_command() will be called to drain any commands afterwards
204
+ * Process the next "immediate" command from SRAM.
205
+ * Return 'true' if any commands were processed.
205
  */
206
  */
206
-void GCodeQueue::inject_P(PGM_P const pgcode) { injected_commands_P = pgcode; }
207
+bool GCodeQueue::process_injected_command() {
208
+  if (injected_commands[0] == '\0') return false;
209
+
210
+  char c;
211
+  size_t i = 0;
212
+  while ((c = injected_commands[i]) && c != '\n') i++;
213
+
214
+  // Execute a non-blank command
215
+  if (i) {
216
+    injected_commands[i] = '\0';
217
+    parser.parse(injected_commands);
218
+    gcode.process_parsed_command();
219
+  }
220
+
221
+  // Copy the next command into place
222
+  strcpy(injected_commands, &injected_commands[i + (c != '\0')]);
223
+  return true;
224
+}
207
 
225
 
208
 /**
226
 /**
209
  * Enqueue and return only when commands are actually enqueued.
227
  * Enqueue and return only when commands are actually enqueued.
575
 
593
 
576
 /**
594
 /**
577
  * Add to the circular command queue the next command from:
595
  * Add to the circular command queue the next command from:
578
- *  - The command-injection queue (injected_commands_P)
596
+ *  - The command-injection queues (injected_commands_P, injected_commands)
579
  *  - The active serial input (usually USB)
597
  *  - The active serial input (usually USB)
580
  *  - The SD card file being actively printed
598
  *  - The SD card file being actively printed
581
  */
599
  */
594
 void GCodeQueue::advance() {
612
 void GCodeQueue::advance() {
595
 
613
 
596
   // Process immediate commands
614
   // Process immediate commands
597
-  if (process_injected_command()) return;
615
+  if (process_injected_command_P() || process_injected_command()) return;
598
 
616
 
599
   // Return if the G-code buffer is empty
617
   // Return if the G-code buffer is empty
600
   if (!length) return;
618
   if (!length) return;

+ 27
- 5
Marlin/src/gcode/queue.h View File

66
   static void clear();
66
   static void clear();
67
 
67
 
68
   /**
68
   /**
69
-   * Enqueue one or many commands to run from program memory.
70
-   * Aborts the current queue, if any.
71
-   * Note: process_injected_command() will process them.
69
+   * Next Injected Command (PROGMEM) pointer. (nullptr == empty)
70
+   * Internal commands are enqueued ahead of serial / SD commands.
72
    */
71
    */
73
-  static void inject_P(PGM_P const pgcode);
72
+  static PGM_P injected_commands_P;
73
+
74
+  /**
75
+   * Injected Commands (SRAM)
76
+   */
77
+  static char injected_commands[64];
78
+
79
+  /**
80
+   * Enqueue command(s) to run from PROGMEM. Drained by process_injected_command_P().
81
+   * Don't inject comments or use leading spaces!
82
+   * Aborts the current PROGMEM queue so only use for one or two commands.
83
+   */
84
+  static inline void inject_P(PGM_P const pgcode) { injected_commands_P = pgcode; }
85
+
86
+  /**
87
+   * Enqueue command(s) to run from SRAM. Drained by process_injected_command().
88
+   * Aborts the current SRAM queue so only use for one or two commands.
89
+   */
90
+  static inline void inject(char * const gcode) {
91
+    strncpy(injected_commands, gcode, sizeof(injected_commands) - 1);
92
+  }
74
 
93
 
75
   /**
94
   /**
76
    * Enqueue and return only when commands are actually enqueued
95
    * Enqueue and return only when commands are actually enqueued
145
     #endif
164
     #endif
146
   );
165
   );
147
 
166
 
148
-  // Process the next "immediate" command
167
+  // Process the next "immediate" command (PROGMEM)
168
+  static bool process_injected_command_P();
169
+
170
+  // Process the next "immediate" command (SRAM)
149
   static bool process_injected_command();
171
   static bool process_injected_command();
150
 
172
 
151
   /**
173
   /**

+ 2
- 2
Marlin/src/lcd/language/language_cz.h View File

197
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Paměťový slot");
197
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Paměťový slot");
198
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Načíst síť bodů");
198
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Načíst síť bodů");
199
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Uložit síť bodů");
199
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Uložit síť bodů");
200
-  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Síť %i načtena");
201
-  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Síť %i uložena");
200
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("Síť %i načtena");
201
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("Síť %i uložena");
202
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Nedostatek místa");
202
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Nedostatek místa");
203
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Ch.: Uložit UBL");
203
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Ch.: Uložit UBL");
204
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Ch.: Obnovit UBL");
204
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Ch.: Obnovit UBL");

+ 2
- 2
Marlin/src/lcd/language/language_de.h View File

179
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Speicherort");
179
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Speicherort");
180
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Bettnetz laden");
180
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Bettnetz laden");
181
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Bettnetz speichern");
181
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Bettnetz speichern");
182
-  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Netz %i geladen");
183
-  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Netz %i gespeichert");
182
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("Netz %i geladen");
183
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("Netz %i gespeichert");
184
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Kein Speicher");
184
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Kein Speicher");
185
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Err:UBL speichern");
185
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Err:UBL speichern");
186
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Err:UBL wiederherst.");
186
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Err:UBL wiederherst.");

+ 2
- 2
Marlin/src/lcd/language/language_en.h View File

190
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Memory Slot");
190
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Memory Slot");
191
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Load Bed Mesh");
191
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Load Bed Mesh");
192
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Save Bed Mesh");
192
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Save Bed Mesh");
193
-  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Mesh %i Loaded");
194
-  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Mesh %i Saved");
193
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("Mesh %i Loaded");
194
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("Mesh %i Saved");
195
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("No Storage");
195
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("No Storage");
196
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Err: UBL Save");
196
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Err: UBL Save");
197
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Err: UBL Restore");
197
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Err: UBL Restore");

+ 2
- 2
Marlin/src/lcd/language/language_es.h View File

186
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Huecos de memoria");
186
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Huecos de memoria");
187
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Cargar Mallado cama");
187
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Cargar Mallado cama");
188
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Guardar Mallado cama");
188
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Guardar Mallado cama");
189
-  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Mall. %i Carga.");
190
-  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Mall. %i Guard.");
189
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("Mall. %i Carga.");
190
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("Mall. %i Guard.");
191
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Sin guardar");
191
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Sin guardar");
192
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Error: Guardar UBL");
192
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Error: Guardar UBL");
193
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Error: Restaurar UBL");
193
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Error: Restaurar UBL");

+ 2
- 2
Marlin/src/lcd/language/language_gl.h View File

189
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Rañura Memoria");
189
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Rañura Memoria");
190
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Cargar Malla Cama");
190
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Cargar Malla Cama");
191
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Gardar Malla Cama");
191
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Gardar Malla Cama");
192
-  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Malla %i Cargada");
193
-  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Malla %i Gardada");
192
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("Malla %i Cargada");
193
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("Malla %i Gardada");
194
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Sen Gardar");
194
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Sen Gardar");
195
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Erro: Gardadado UBL");
195
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Erro: Gardadado UBL");
196
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Erro: Recuperación UBL");
196
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Erro: Recuperación UBL");

+ 2
- 2
Marlin/src/lcd/language/language_it.h View File

188
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Slot di memoria");
188
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Slot di memoria");
189
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Carica Mesh Piatto");
189
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Carica Mesh Piatto");
190
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Salva Mesh Piatto");
190
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Salva Mesh Piatto");
191
-  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Mesh %i caricata");
192
-  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Mesh %i salvata");
191
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("Mesh %i caricata");
192
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("Mesh %i salvata");
193
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Nessuna memoria");
193
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Nessuna memoria");
194
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Err: Salvataggio UBL");
194
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Err: Salvataggio UBL");
195
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Err: Ripristino UBL");
195
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Err: Ripristino UBL");

+ 2
- 2
Marlin/src/lcd/language/language_pl.h View File

186
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Slot Pamięci");
186
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Slot Pamięci");
187
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Załaduj siatke stołu");
187
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Załaduj siatke stołu");
188
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Zapisz siatke stołu");
188
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Zapisz siatke stołu");
189
-  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Siatka %i załadowana");
190
-  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Siatka %i Zapisana");
189
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("Siatka %i załadowana");
190
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("Siatka %i Zapisana");
191
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Brak magazynu");
191
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Brak magazynu");
192
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Błąd: Zapis UBL");
192
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Błąd: Zapis UBL");
193
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Bład: Odczyt UBL");
193
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Bład: Odczyt UBL");

+ 2
- 2
Marlin/src/lcd/language/language_pt_br.h View File

156
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Slot de Memória");
156
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Slot de Memória");
157
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Ler Malha");
157
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Ler Malha");
158
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Salvar Malha");
158
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Salvar Malha");
159
-  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Malha %i carregada");
160
-  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Malha %i salva");
159
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("Malha %i carregada");
160
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("Malha %i salva");
161
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Sem armazenamento");
161
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Sem armazenamento");
162
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Erro ao salvar UBL");
162
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Erro ao salvar UBL");
163
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Erro no restauro UBL");
163
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Erro no restauro UBL");

+ 2
- 2
Marlin/src/lcd/language/language_ru.h View File

167
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Слот памяти");
167
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Слот памяти");
168
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Загрузить сетку стола");
168
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Загрузить сетку стола");
169
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Сохранить сетку стола");
169
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Сохранить сетку стола");
170
-  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Сетка %i загружена");
171
-  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Сетка %i сохранена");
170
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("Сетка %i загружена");
171
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("Сетка %i сохранена");
172
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Нет хранилища");
172
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Нет хранилища");
173
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Ошибка: Сохран. UBL");
173
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Ошибка: Сохран. UBL");
174
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Ошибка: Восстан. UBL");
174
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Ошибка: Восстан. UBL");

+ 2
- 2
Marlin/src/lcd/language/language_sk.h View File

189
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Pamäťový slot");
189
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Pamäťový slot");
190
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Načítať sieť bodov");
190
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Načítať sieť bodov");
191
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Uložiť sieť bodov");
191
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Uložiť sieť bodov");
192
-  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Sieť %i načítaná");
193
-  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Sieť %i uložená");
192
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("Sieť %i načítaná");
193
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("Sieť %i uložená");
194
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Nedostatok miesta");
194
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Nedostatok miesta");
195
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Chyba: Ukladanie UBL");
195
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Chyba: Ukladanie UBL");
196
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Chyba: Obnovenie UBL");
196
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Chyba: Obnovenie UBL");

+ 2
- 2
Marlin/src/lcd/language/language_tr.h View File

191
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Bellek Yuvası");
191
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Bellek Yuvası");
192
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Yatak Mesh Yükle");
192
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Yatak Mesh Yükle");
193
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Yatak Mesh Kayıt Et");
193
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Yatak Mesh Kayıt Et");
194
-  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 Mesh %i yüklendi");
195
-  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 Mesh %i kayıtlandı");
194
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("Mesh %i yüklendi");
195
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("Mesh %i kayıtlandı");
196
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Depolama Yok");
196
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("Depolama Yok");
197
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Hata: UBL Kayıt");
197
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Hata: UBL Kayıt");
198
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Hata: UBL Yenileme");
198
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Hata: UBL Yenileme");

+ 2
- 2
Marlin/src/lcd/language/language_vi.h View File

159
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Khe nhớ");                              // Memory Slot
159
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("Khe nhớ");                              // Memory Slot
160
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Tải lưới bàn");                         // Load Bed Mesh
160
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("Tải lưới bàn");                         // Load Bed Mesh
161
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Lưu lưới bàn");                         // Save Bed Mesh
161
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("Lưu lưới bàn");                         // Save Bed Mesh
162
-  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 %i lưới được nạp");                // Mesh %i loaded
163
-  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 %i lưới đã lưu");
162
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("%i lưới được nạp");                // Mesh %i loaded
163
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("%i lưới đã lưu");
164
   PROGMEM Language_Str MSG_NO_STORAGE                      = _UxGT("Không lưu trữ");                        // No Storage
164
   PROGMEM Language_Str MSG_NO_STORAGE                      = _UxGT("Không lưu trữ");                        // No Storage
165
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Điều sai: Lưu UBL");                    // Err: UBL Save
165
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("Điều sai: Lưu UBL");                    // Err: UBL Save
166
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Điều Sai: Khôi Phục UBL");              // Err: UBL Restore
166
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("Điều Sai: Khôi Phục UBL");              // Err: UBL Restore

+ 2
- 2
Marlin/src/lcd/language/language_zh_CN.h View File

136
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("存储槽");     // "Memory Slot"
136
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("存储槽");     // "Memory Slot"
137
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("装载热床网格");     // "Load Bed Mesh"
137
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("装载热床网格");     // "Load Bed Mesh"
138
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("保存热床网格");     // "Save Bed Mesh"
138
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("保存热床网格");     // "Save Bed Mesh"
139
-  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 网格 %i 已装载");     // "Mesh %i loaded"
140
-  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 网格 %i 已保存");     // "Mesh %i saved"
139
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("网格 %i 已装载");     // "Mesh %i loaded"
140
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("网格 %i 已保存");     // "Mesh %i saved"
141
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("没有存储");     // "No storage"
141
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("没有存储");     // "No storage"
142
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("错误: UBL保存");     // "Err: UBL Save"
142
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("错误: UBL保存");     // "Err: UBL Save"
143
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("错误: UBL还原");     // "Err: UBL Restore"
143
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("错误: UBL还原");     // "Err: UBL Restore"

+ 2
- 2
Marlin/src/lcd/language/language_zh_TW.h View File

184
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("存儲槽");     // "Memory Slot"
184
   PROGMEM Language_Str MSG_UBL_STORAGE_SLOT                = _UxGT("存儲槽");     // "Memory Slot"
185
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("裝載熱床網格");     // "Load Bed Mesh"
185
   PROGMEM Language_Str MSG_UBL_LOAD_MESH                   = _UxGT("裝載熱床網格");     // "Load Bed Mesh"
186
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("保存熱床網格");     // "Save Bed Mesh"
186
   PROGMEM Language_Str MSG_UBL_SAVE_MESH                   = _UxGT("保存熱床網格");     // "Save Bed Mesh"
187
-  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("M117 網格 %i 已裝載");     // "Mesh %i loaded"
188
-  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("M117 網格 %i 已保存");     // "Mesh %i saved"
187
+  PROGMEM Language_Str MSG_MESH_LOADED                     = _UxGT("網格 %i 已裝載");     // "Mesh %i loaded"
188
+  PROGMEM Language_Str MSG_MESH_SAVED                      = _UxGT("網格 %i 已保存");     // "Mesh %i saved"
189
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("沒有存儲");     // "No storage"
189
   PROGMEM Language_Str MSG_UBL_NO_STORAGE                  = _UxGT("沒有存儲");     // "No storage"
190
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("錯誤: UBL保存");     // "Err: UBL Save"
190
   PROGMEM Language_Str MSG_UBL_SAVE_ERROR                  = _UxGT("錯誤: UBL保存");     // "Err: UBL Save"
191
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("錯誤: UBL還原");     // "Err: UBL Restore"
191
   PROGMEM Language_Str MSG_UBL_RESTORE_ERROR               = _UxGT("錯誤: UBL還原");     // "Err: UBL Restore"

+ 0
- 16
Marlin/src/lcd/menu/menu.cpp View File

438
 
438
 
439
 #endif // BABYSTEP_ZPROBE_OFFSET
439
 #endif // BABYSTEP_ZPROBE_OFFSET
440
 
440
 
441
-#if ANY(AUTO_BED_LEVELING_UBL, PID_AUTOTUNE_MENU, ADVANCED_PAUSE_FEATURE)
442
-
443
-  void lcd_enqueue_one_now(const char * const cmd) {
444
-    no_reentry = true;
445
-    queue.enqueue_one_now(cmd);
446
-    no_reentry = false;
447
-  }
448
-
449
-  void lcd_enqueue_one_now_P(PGM_P const cmd) {
450
-    no_reentry = true;
451
-    queue.enqueue_now_P(cmd);
452
-    no_reentry = false;
453
-  }
454
-
455
-#endif
456
-
457
 #if ENABLED(EEPROM_SETTINGS)
441
 #if ENABLED(EEPROM_SETTINGS)
458
   void lcd_store_settings() {
442
   void lcd_store_settings() {
459
     const bool saved = settings.save();
443
     const bool saved = settings.save();

+ 0
- 5
Marlin/src/lcd/menu/menu.h View File

547
   void line_to_z(const float &z);
547
   void line_to_z(const float &z);
548
 #endif
548
 #endif
549
 
549
 
550
-#if ANY(AUTO_BED_LEVELING_UBL, PID_AUTOTUNE_MENU, ADVANCED_PAUSE_FEATURE)
551
-  void lcd_enqueue_one_now(const char * const cmd);
552
-  void lcd_enqueue_one_now_P(PGM_P const cmd);
553
-#endif
554
-
555
 #if HAS_GRAPHICAL_LCD && EITHER(BABYSTEP_ZPROBE_GFX_OVERLAY, MESH_EDIT_GFX_OVERLAY)
550
 #if HAS_GRAPHICAL_LCD && EITHER(BABYSTEP_ZPROBE_GFX_OVERLAY, MESH_EDIT_GFX_OVERLAY)
556
   void _lcd_zoffset_overlay_gfx(const float zvalue);
551
   void _lcd_zoffset_overlay_gfx(const float zvalue);
557
 #endif
552
 #endif

+ 4
- 4
Marlin/src/lcd/menu/menu_advanced.cpp View File

178
     int16_t autotune_temp_bed = 70;
178
     int16_t autotune_temp_bed = 70;
179
   #endif
179
   #endif
180
 
180
 
181
+  #include "../../gcode/queue.h"
182
+
181
   void _lcd_autotune(const int16_t e) {
183
   void _lcd_autotune(const int16_t e) {
182
     char cmd[30];
184
     char cmd[30];
183
     sprintf_P(cmd, PSTR("M303 U1 E%i S%i"), e,
185
     sprintf_P(cmd, PSTR("M303 U1 E%i S%i"), e,
184
       #if HAS_PID_FOR_BOTH
186
       #if HAS_PID_FOR_BOTH
185
         e < 0 ? autotune_temp_bed : autotune_temp[e]
187
         e < 0 ? autotune_temp_bed : autotune_temp[e]
186
-      #elif ENABLED(PIDTEMPBED)
187
-        autotune_temp_bed
188
       #else
188
       #else
189
-        autotune_temp[e]
189
+        TERN(PIDTEMPBED, autotune_temp_bed, autotune_temp[e])
190
       #endif
190
       #endif
191
     );
191
     );
192
-    lcd_enqueue_one_now(cmd);
192
+    queue.inject(cmd);
193
   }
193
   }
194
 
194
 
195
 #endif // PID_AUTOTUNE_MENU
195
 #endif // PID_AUTOTUNE_MENU

+ 5
- 4
Marlin/src/lcd/menu/menu_filament.cpp View File

31
 #include "menu.h"
31
 #include "menu.h"
32
 #include "../../module/temperature.h"
32
 #include "../../module/temperature.h"
33
 #include "../../feature/pause.h"
33
 #include "../../feature/pause.h"
34
+#include "../../gcode/queue.h"
34
 #if HAS_FILAMENT_SENSOR
35
 #if HAS_FILAMENT_SENSOR
35
   #include "../../feature/runout.h"
36
   #include "../../feature/runout.h"
36
 #endif
37
 #endif
60
   char cmd[11];
61
   char cmd[11];
61
   sprintf_P(cmd, _change_filament_temp_command(), _change_filament_temp_extruder);
62
   sprintf_P(cmd, _change_filament_temp_command(), _change_filament_temp_extruder);
62
   thermalManager.setTargetHotend(temperature, _change_filament_temp_extruder);
63
   thermalManager.setTargetHotend(temperature, _change_filament_temp_extruder);
63
-  lcd_enqueue_one_now(cmd);
64
+  queue.inject(cmd);
64
 }
65
 }
65
 
66
 
66
 //
67
 //
121
           ACTION_ITEM_N_P(s, msg, []{
122
           ACTION_ITEM_N_P(s, msg, []{
122
             char cmd[13];
123
             char cmd[13];
123
             sprintf_P(cmd, PSTR("M600 B0 T%i"), int(MenuItemBase::itemIndex));
124
             sprintf_P(cmd, PSTR("M600 B0 T%i"), int(MenuItemBase::itemIndex));
124
-            lcd_enqueue_one_now(cmd);
125
+            queue.inject(cmd);
125
           });
126
           });
126
         }
127
         }
127
       }
128
       }
145
               ACTION_ITEM_N_P(s, msg_load, []{
146
               ACTION_ITEM_N_P(s, msg_load, []{
146
                 char cmd[12];
147
                 char cmd[12];
147
                 sprintf_P(cmd, PSTR("M701 T%i"), int(MenuItemBase::itemIndex));
148
                 sprintf_P(cmd, PSTR("M701 T%i"), int(MenuItemBase::itemIndex));
148
-                lcd_enqueue_one_now(cmd);
149
+                queue.inject(cmd);
149
               });
150
               });
150
             }
151
             }
151
           }
152
           }
181
               ACTION_ITEM_N_P(s, msg_unload, []{
182
               ACTION_ITEM_N_P(s, msg_unload, []{
182
                 char cmd[12];
183
                 char cmd[12];
183
                 sprintf_P(cmd, PSTR("M702 T%i"), int(MenuItemBase::itemIndex));
184
                 sprintf_P(cmd, PSTR("M702 T%i"), int(MenuItemBase::itemIndex));
184
-                lcd_enqueue_one_now(cmd);
185
+                queue.inject(cmd);
185
               });
186
               });
186
             }
187
             }
187
           }
188
           }

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

29
 #if HAS_LCD_MENU && ENABLED(AUTO_BED_LEVELING_UBL)
29
 #if HAS_LCD_MENU && ENABLED(AUTO_BED_LEVELING_UBL)
30
 
30
 
31
 #include "menu.h"
31
 #include "menu.h"
32
+#include "../../gcode/gcode.h"
33
+#include "../../gcode/queue.h"
32
 #include "../../module/planner.h"
34
 #include "../../module/planner.h"
33
 #include "../../module/configuration_store.h"
35
 #include "../../module/configuration_store.h"
34
 #include "../../feature/bedlevel/bedlevel.h"
36
 #include "../../feature/bedlevel/bedlevel.h"
106
  * UBL Build Custom Mesh Command
108
  * UBL Build Custom Mesh Command
107
  */
109
  */
108
 void _lcd_ubl_build_custom_mesh() {
110
 void _lcd_ubl_build_custom_mesh() {
109
-  char ubl_lcd_gcode[20];
110
-  queue.inject_P(G28_STR);
111
+  char ubl_lcd_gcode[64];
111
   #if HAS_HEATED_BED
112
   #if HAS_HEATED_BED
112
-    sprintf_P(ubl_lcd_gcode, PSTR("M190 S%i"), custom_bed_temp);
113
-    lcd_enqueue_one_now(ubl_lcd_gcode);
113
+    sprintf_P(ubl_lcd_gcode, PSTR("G28\nM190 S%i\nM109 S%i\nG29 P1"), custom_bed_temp, custom_hotend_temp);
114
+  #else
115
+    sprintf_P(ubl_lcd_gcode, PSTR("G28\nM109 S%i\nG29 P1"), custom_hotend_temp);
114
   #endif
116
   #endif
115
-  sprintf_P(ubl_lcd_gcode, PSTR("M109 S%i"), custom_hotend_temp);
116
-  lcd_enqueue_one_now(ubl_lcd_gcode);
117
-  queue.inject_P(PSTR("G29 P1"));
117
+  queue.inject(ubl_lcd_gcode);
118
 }
118
 }
119
 
119
 
120
 /**
120
 /**
144
   const int ind = ubl_height_amount > 0 ? 9 : 10;
144
   const int ind = ubl_height_amount > 0 ? 9 : 10;
145
   strcpy_P(ubl_lcd_gcode, PSTR("G29 P6 C -"));
145
   strcpy_P(ubl_lcd_gcode, PSTR("G29 P6 C -"));
146
   sprintf_P(&ubl_lcd_gcode[ind], PSTR(".%i"), ABS(ubl_height_amount));
146
   sprintf_P(&ubl_lcd_gcode[ind], PSTR(".%i"), ABS(ubl_height_amount));
147
-  lcd_enqueue_one_now(ubl_lcd_gcode);
147
+  queue.inject(ubl_lcd_gcode);
148
 }
148
 }
149
 
149
 
150
 /**
150
 /**
187
  */
187
  */
188
 void _lcd_ubl_validate_custom_mesh() {
188
 void _lcd_ubl_validate_custom_mesh() {
189
   char ubl_lcd_gcode[24];
189
   char ubl_lcd_gcode[24];
190
-  const int temp =
191
-    #if HAS_HEATED_BED
192
-      custom_bed_temp
193
-    #else
194
-      0
195
-    #endif
196
-  ;
197
-  sprintf_P(ubl_lcd_gcode, PSTR("G26 C B%i H%i P"), temp, custom_hotend_temp);
198
-  lcd_enqueue_one_now_P(G28_STR);
199
-  lcd_enqueue_one_now(ubl_lcd_gcode);
190
+  const int temp = TERN(HAS_HEATED_BED, custom_bed_temp, 0);
191
+  sprintf_P(ubl_lcd_gcode, PSTR("G28\nG26 C B%i H%i P"), temp, custom_hotend_temp);
192
+  queue.inject(ubl_lcd_gcode);
200
 }
193
 }
201
 
194
 
202
 /**
195
 /**
237
   ACTION_ITEM(MSG_UBL_MESH_LEVEL, []{
230
   ACTION_ITEM(MSG_UBL_MESH_LEVEL, []{
238
     char ubl_lcd_gcode[12];
231
     char ubl_lcd_gcode[12];
239
     sprintf_P(ubl_lcd_gcode, PSTR("G29 J%i"), side_points);
232
     sprintf_P(ubl_lcd_gcode, PSTR("G29 J%i"), side_points);
240
-    lcd_enqueue_one_now(ubl_lcd_gcode);
233
+    queue.inject(ubl_lcd_gcode);
241
   });
234
   });
242
   END_MENU();
235
   END_MENU();
243
 }
236
 }
265
 void _lcd_ubl_fillin_amount_cmd() {
258
 void _lcd_ubl_fillin_amount_cmd() {
266
   char ubl_lcd_gcode[18];
259
   char ubl_lcd_gcode[18];
267
   sprintf_P(ubl_lcd_gcode, PSTR("G29 P3 R C.%i"), ubl_fillin_amount);
260
   sprintf_P(ubl_lcd_gcode, PSTR("G29 P3 R C.%i"), ubl_fillin_amount);
268
-  lcd_enqueue_one_now(ubl_lcd_gcode);
261
+  gcode.process_subcommands_now(ubl_lcd_gcode);
269
 }
262
 }
270
 
263
 
271
 /**
264
 /**
355
  * UBL Load Mesh Command
348
  * UBL Load Mesh Command
356
  */
349
  */
357
 void _lcd_ubl_load_mesh_cmd() {
350
 void _lcd_ubl_load_mesh_cmd() {
358
-  char ubl_lcd_gcode[25];
359
-  sprintf_P(ubl_lcd_gcode, PSTR("G29 L%i"), ubl_storage_slot);
360
-  lcd_enqueue_one_now(ubl_lcd_gcode);
361
-  sprintf_P(ubl_lcd_gcode, GET_TEXT(MSG_MESH_LOADED), ubl_storage_slot);
362
-  lcd_enqueue_one_now(ubl_lcd_gcode);
351
+  char ubl_lcd_gcode[40];
352
+  sprintf_P(ubl_lcd_gcode, PSTR("G29 L%i\nM117 "), ubl_storage_slot);
353
+  sprintf_P(&ubl_lcd_gcode[strlen(ubl_lcd_gcode)], GET_TEXT(MSG_MESH_LOADED), ubl_storage_slot);
354
+  gcode.process_subcommands_now(ubl_lcd_gcode);
363
 }
355
 }
364
 
356
 
365
 /**
357
 /**
366
  * UBL Save Mesh Command
358
  * UBL Save Mesh Command
367
  */
359
  */
368
 void _lcd_ubl_save_mesh_cmd() {
360
 void _lcd_ubl_save_mesh_cmd() {
369
-  char ubl_lcd_gcode[25];
370
-  sprintf_P(ubl_lcd_gcode, PSTR("G29 S%i"), ubl_storage_slot);
371
-  lcd_enqueue_one_now(ubl_lcd_gcode);
372
-  sprintf_P(ubl_lcd_gcode, GET_TEXT(MSG_MESH_SAVED), ubl_storage_slot);
373
-  lcd_enqueue_one_now(ubl_lcd_gcode);
361
+  char ubl_lcd_gcode[40];
362
+  sprintf_P(ubl_lcd_gcode, PSTR("G29 S%i\nM117 "), ubl_storage_slot);
363
+  sprintf_P(&ubl_lcd_gcode[strlen(ubl_lcd_gcode)], GET_TEXT(MSG_MESH_SAVED), ubl_storage_slot);
364
+  gcode.process_subcommands_now(ubl_lcd_gcode);
374
 }
365
 }
375
 
366
 
376
 /**
367
 /**
418
   dtostrf(ubl.mesh_index_to_xpos(x_plot), 0, 2, str);
409
   dtostrf(ubl.mesh_index_to_xpos(x_plot), 0, 2, str);
419
   dtostrf(ubl.mesh_index_to_ypos(y_plot), 0, 2, str2);
410
   dtostrf(ubl.mesh_index_to_ypos(y_plot), 0, 2, str2);
420
   snprintf_P(ubl_lcd_gcode, sizeof(ubl_lcd_gcode), PSTR("G29 P4 X%s Y%s R%i"), str, str2, int(n_edit_pts));
411
   snprintf_P(ubl_lcd_gcode, sizeof(ubl_lcd_gcode), PSTR("G29 P4 X%s Y%s R%i"), str, str2, int(n_edit_pts));
421
-  lcd_enqueue_one_now(ubl_lcd_gcode);
412
+  queue.inject(ubl_lcd_gcode);
422
 }
413
 }
423
 
414
 
424
 /**
415
 /**

Loading…
Cancel
Save