Parcourir la source

🎨 Fewer serial macros

Scott Lahteine il y a 2 ans
Parent
révision
754b31918a
100 fichiers modifiés avec 546 ajouts et 558 suppressions
  1. 5
    5
      Marlin/src/HAL/AVR/fastio.cpp
  2. 8
    8
      Marlin/src/HAL/AVR/pinsDebug.h
  3. 17
    17
      Marlin/src/HAL/DUE/eeprom_flash.cpp
  4. 1
    1
      Marlin/src/HAL/DUE/pinsDebug.h
  5. 1
    1
      Marlin/src/HAL/ESP32/wifi.cpp
  6. 4
    4
      Marlin/src/HAL/LPC1768/eeprom_sdcard.cpp
  7. 1
    1
      Marlin/src/HAL/SAMD51/pinsDebug.h
  8. 8
    8
      Marlin/src/HAL/STM32/eeprom_flash.cpp
  9. 1
    1
      Marlin/src/HAL/STM32/pinsDebug.h
  10. 3
    3
      Marlin/src/HAL/STM32/usb_host.cpp
  11. 3
    3
      Marlin/src/HAL/shared/Delay.cpp
  12. 2
    2
      Marlin/src/MarlinCore.cpp
  13. 6
    6
      Marlin/src/core/bug_on.h
  14. 8
    14
      Marlin/src/core/debug_out.h
  15. 1
    1
      Marlin/src/core/serial.cpp
  16. 15
    21
      Marlin/src/core/serial.h
  17. 6
    6
      Marlin/src/core/utility.cpp
  18. 2
    2
      Marlin/src/feature/backlash.cpp
  19. 5
    5
      Marlin/src/feature/bedlevel/abl/abl.cpp
  20. 1
    1
      Marlin/src/feature/bedlevel/ubl/ubl.cpp
  21. 4
    4
      Marlin/src/feature/bedlevel/ubl/ubl.h
  22. 30
    30
      Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
  23. 7
    7
      Marlin/src/feature/binary_stream.h
  24. 4
    4
      Marlin/src/feature/bltouch.cpp
  25. 4
    4
      Marlin/src/feature/dac/stepper_dac.cpp
  26. 27
    27
      Marlin/src/feature/encoder_i2c.cpp
  27. 6
    6
      Marlin/src/feature/encoder_i2c.h
  28. 17
    17
      Marlin/src/feature/fwretract.cpp
  29. 3
    3
      Marlin/src/feature/joystick.cpp
  30. 1
    1
      Marlin/src/feature/max7219.cpp
  31. 1
    1
      Marlin/src/feature/meatpack.cpp
  32. 2
    2
      Marlin/src/feature/mixing.cpp
  33. 1
    1
      Marlin/src/feature/mixing.h
  34. 9
    9
      Marlin/src/feature/mmu/mmu2.cpp
  35. 9
    9
      Marlin/src/feature/pause.cpp
  36. 17
    17
      Marlin/src/feature/powerloss.cpp
  37. 2
    2
      Marlin/src/feature/probe_temp_comp.cpp
  38. 4
    4
      Marlin/src/feature/repeat.cpp
  39. 1
    1
      Marlin/src/feature/runout.cpp
  40. 3
    3
      Marlin/src/feature/runout.h
  41. 2
    2
      Marlin/src/feature/tmc_util.cpp
  42. 2
    2
      Marlin/src/feature/tmc_util.h
  43. 1
    1
      Marlin/src/feature/twibus.cpp
  44. 1
    1
      Marlin/src/gcode/bedlevel/G26.cpp
  45. 7
    7
      Marlin/src/gcode/bedlevel/G35.cpp
  46. 5
    5
      Marlin/src/gcode/bedlevel/M420.cpp
  47. 9
    9
      Marlin/src/gcode/bedlevel/abl/G29.cpp
  48. 3
    3
      Marlin/src/gcode/bedlevel/mbl/G29.cpp
  49. 2
    2
      Marlin/src/gcode/calibrate/G28.cpp
  50. 3
    3
      Marlin/src/gcode/calibrate/G33.cpp
  51. 13
    13
      Marlin/src/gcode/calibrate/G34_M422.cpp
  52. 37
    37
      Marlin/src/gcode/calibrate/G425.cpp
  53. 5
    5
      Marlin/src/gcode/calibrate/G76_M192_M871.cpp
  54. 18
    18
      Marlin/src/gcode/calibrate/M100.cpp
  55. 3
    3
      Marlin/src/gcode/calibrate/M425.cpp
  56. 4
    4
      Marlin/src/gcode/calibrate/M48.cpp
  57. 2
    2
      Marlin/src/gcode/calibrate/M665.cpp
  58. 9
    9
      Marlin/src/gcode/calibrate/M666.cpp
  59. 9
    9
      Marlin/src/gcode/config/M200-M205.cpp
  60. 10
    10
      Marlin/src/gcode/config/M217.cpp
  61. 1
    1
      Marlin/src/gcode/config/M218.cpp
  62. 1
    1
      Marlin/src/gcode/config/M220.cpp
  63. 1
    1
      Marlin/src/gcode/config/M221.cpp
  64. 1
    1
      Marlin/src/gcode/config/M281.cpp
  65. 4
    4
      Marlin/src/gcode/config/M301.cpp
  66. 1
    1
      Marlin/src/gcode/config/M302.cpp
  67. 1
    1
      Marlin/src/gcode/config/M309.cpp
  68. 6
    6
      Marlin/src/gcode/config/M43.cpp
  69. 5
    5
      Marlin/src/gcode/config/M92.cpp
  70. 4
    4
      Marlin/src/gcode/control/M111.cpp
  71. 1
    1
      Marlin/src/gcode/control/M211.cpp
  72. 15
    15
      Marlin/src/gcode/control/M605.cpp
  73. 2
    2
      Marlin/src/gcode/control/M993_M994.cpp
  74. 1
    1
      Marlin/src/gcode/control/T.cpp
  75. 3
    3
      Marlin/src/gcode/eeprom/M500-M504.cpp
  76. 1
    1
      Marlin/src/gcode/feature/L6470/M122.cpp
  77. 6
    6
      Marlin/src/gcode/feature/L6470/M906.cpp
  78. 14
    14
      Marlin/src/gcode/feature/L6470/M916-918.cpp
  79. 5
    5
      Marlin/src/gcode/feature/advance/M900.cpp
  80. 1
    1
      Marlin/src/gcode/feature/controllerfan/M710.cpp
  81. 1
    1
      Marlin/src/gcode/feature/digipot/M907-M910.cpp
  82. 2
    2
      Marlin/src/gcode/feature/filwidth/M404-M407.cpp
  83. 3
    3
      Marlin/src/gcode/feature/mixing/M166.cpp
  84. 1
    1
      Marlin/src/gcode/feature/password/M510-M512.cpp
  85. 1
    1
      Marlin/src/gcode/feature/pause/G60.cpp
  86. 2
    2
      Marlin/src/gcode/feature/pause/G61.cpp
  87. 2
    2
      Marlin/src/gcode/feature/pause/M603.cpp
  88. 1
    1
      Marlin/src/gcode/feature/power_monitor/M430.cpp
  89. 1
    1
      Marlin/src/gcode/feature/powerloss/M413.cpp
  90. 2
    2
      Marlin/src/gcode/feature/runout/M412.cpp
  91. 19
    19
      Marlin/src/gcode/feature/trinamic/M906.cpp
  92. 30
    30
      Marlin/src/gcode/feature/trinamic/M911-M914.cpp
  93. 3
    3
      Marlin/src/gcode/gcode.cpp
  94. 3
    3
      Marlin/src/gcode/gcode_d.cpp
  95. 2
    2
      Marlin/src/gcode/geometry/G53-G59.cpp
  96. 1
    1
      Marlin/src/gcode/geometry/M206_M428.cpp
  97. 1
    1
      Marlin/src/gcode/host/M114.cpp
  98. 1
    1
      Marlin/src/gcode/host/M115.cpp
  99. 1
    1
      Marlin/src/gcode/host/M360.cpp
  100. 0
    0
      Marlin/src/gcode/lcd/M145.cpp

+ 5
- 5
Marlin/src/HAL/AVR/fastio.cpp Voir le fichier

267
     SET_WGM(5, FAST_PWM_ICRn);            // Fast PWM with ICR5 as TOP
267
     SET_WGM(5, FAST_PWM_ICRn);            // Fast PWM with ICR5 as TOP
268
 
268
 
269
     //SERIAL_ECHOLNPGM("Timer 5 Settings:");
269
     //SERIAL_ECHOLNPGM("Timer 5 Settings:");
270
-    //SERIAL_ECHOLNPAIR("  Prescaler=", prescaler);
271
-    //SERIAL_ECHOLNPAIR("        TOP=", ICR5);
272
-    //SERIAL_ECHOLNPAIR("      OCR5A=", OCR5A);
273
-    //SERIAL_ECHOLNPAIR("      OCR5B=", OCR5B);
274
-    //SERIAL_ECHOLNPAIR("      OCR5C=", OCR5C);
270
+    //SERIAL_ECHOLNPGM("  Prescaler=", prescaler);
271
+    //SERIAL_ECHOLNPGM("        TOP=", ICR5);
272
+    //SERIAL_ECHOLNPGM("      OCR5A=", OCR5A);
273
+    //SERIAL_ECHOLNPGM("      OCR5B=", OCR5B);
274
+    //SERIAL_ECHOLNPGM("      OCR5C=", OCR5C);
275
   }
275
   }
276
   else {
276
   else {
277
     // Restore the default for Timer 5
277
     // Restore the default for Timer 5

+ 8
- 8
Marlin/src/HAL/AVR/pinsDebug.h Voir le fichier

235
 
235
 
236
 inline void com_print(const uint8_t N, const uint8_t Z) {
236
 inline void com_print(const uint8_t N, const uint8_t Z) {
237
   const uint8_t *TCCRA = (uint8_t*)TCCR_A(N);
237
   const uint8_t *TCCRA = (uint8_t*)TCCR_A(N);
238
-  SERIAL_ECHOPAIR("    COM", AS_DIGIT(N));
238
+  SERIAL_ECHOPGM("    COM", AS_DIGIT(N));
239
   SERIAL_CHAR(Z);
239
   SERIAL_CHAR(Z);
240
-  SERIAL_ECHOPAIR(": ", int((*TCCRA >> (6 - Z * 2)) & 0x03));
240
+  SERIAL_ECHOPGM(": ", int((*TCCRA >> (6 - Z * 2)) & 0x03));
241
 }
241
 }
242
 
242
 
243
 void timer_prefix(uint8_t T, char L, uint8_t N) {  // T - timer    L - pwm  N - WGM bit layout
243
 void timer_prefix(uint8_t T, char L, uint8_t N) {  // T - timer    L - pwm  N - WGM bit layout
247
   uint8_t WGM = (((*TCCRB & _BV(WGM_2)) >> 1) | (*TCCRA & (_BV(WGM_0) | _BV(WGM_1))));
247
   uint8_t WGM = (((*TCCRB & _BV(WGM_2)) >> 1) | (*TCCRA & (_BV(WGM_0) | _BV(WGM_1))));
248
   if (N == 4) WGM |= ((*TCCRB & _BV(WGM_3)) >> 1);
248
   if (N == 4) WGM |= ((*TCCRB & _BV(WGM_3)) >> 1);
249
 
249
 
250
-  SERIAL_ECHOPAIR("    TIMER", AS_DIGIT(T));
250
+  SERIAL_ECHOPGM("    TIMER", AS_DIGIT(T));
251
   SERIAL_CHAR(L);
251
   SERIAL_CHAR(L);
252
   SERIAL_ECHO_SP(3);
252
   SERIAL_ECHO_SP(3);
253
 
253
 
259
     const uint16_t *OCRVAL16 = (uint16_t*)OCR_VAL(T, L - 'A');
259
     const uint16_t *OCRVAL16 = (uint16_t*)OCR_VAL(T, L - 'A');
260
     PWM_PRINT(*OCRVAL16);
260
     PWM_PRINT(*OCRVAL16);
261
   }
261
   }
262
-  SERIAL_ECHOPAIR("    WGM: ", WGM);
262
+  SERIAL_ECHOPGM("    WGM: ", WGM);
263
   com_print(T,L);
263
   com_print(T,L);
264
-  SERIAL_ECHOPAIR("    CS: ", (*TCCRB & (_BV(CS_0) | _BV(CS_1) | _BV(CS_2)) ));
265
-  SERIAL_ECHOPAIR("    TCCR", AS_DIGIT(T), "A: ", *TCCRA);
266
-  SERIAL_ECHOPAIR("    TCCR", AS_DIGIT(T), "B: ", *TCCRB);
264
+  SERIAL_ECHOPGM("    CS: ", (*TCCRB & (_BV(CS_0) | _BV(CS_1) | _BV(CS_2)) ));
265
+  SERIAL_ECHOPGM("    TCCR", AS_DIGIT(T), "A: ", *TCCRA);
266
+  SERIAL_ECHOPGM("    TCCR", AS_DIGIT(T), "B: ", *TCCRB);
267
 
267
 
268
   const uint8_t *TMSK = (uint8_t*)TIMSK(T);
268
   const uint8_t *TMSK = (uint8_t*)TIMSK(T);
269
-  SERIAL_ECHOPAIR("    TIMSK", AS_DIGIT(T), ": ", *TMSK);
269
+  SERIAL_ECHOPGM("    TIMSK", AS_DIGIT(T), ": ", *TMSK);
270
 
270
 
271
   const uint8_t OCIE = L - 'A' + 1;
271
   const uint8_t OCIE = L - 'A' + 1;
272
   if (N == 3) { if (WGM == 0 || WGM == 2 || WGM ==  4 || WGM ==  6) err_is_counter(); }
272
   if (N == 3) { if (WGM == 0 || WGM == 2 || WGM ==  4 || WGM ==  6) err_is_counter(); }

+ 17
- 17
Marlin/src/HAL/DUE/eeprom_flash.cpp Voir le fichier

200
     pageContents[i] = (((uint32_t*)data)[i]) | (~(pageContents[i] ^ ((uint32_t*)data)[i]));
200
     pageContents[i] = (((uint32_t*)data)[i]) | (~(pageContents[i] ^ ((uint32_t*)data)[i]));
201
 
201
 
202
   DEBUG_ECHO_START();
202
   DEBUG_ECHO_START();
203
-  DEBUG_ECHOLNPAIR("EEPROM PageWrite   ", page);
204
-  DEBUG_ECHOLNPAIR(" in FLASH address ", (uint32_t)addrflash);
205
-  DEBUG_ECHOLNPAIR(" base address     ", (uint32_t)getFlashStorage(0));
203
+  DEBUG_ECHOLNPGM("EEPROM PageWrite   ", page);
204
+  DEBUG_ECHOLNPGM(" in FLASH address ", (uint32_t)addrflash);
205
+  DEBUG_ECHOLNPGM(" base address     ", (uint32_t)getFlashStorage(0));
206
   DEBUG_FLUSH();
206
   DEBUG_FLUSH();
207
 
207
 
208
   // Get the page relative to the start of the EFC controller, and the EFC controller to use
208
   // Get the page relative to the start of the EFC controller, and the EFC controller to use
246
     __enable_irq();
246
     __enable_irq();
247
 
247
 
248
     DEBUG_ECHO_START();
248
     DEBUG_ECHO_START();
249
-    DEBUG_ECHOLNPAIR("EEPROM Unlock failure for page ", page);
249
+    DEBUG_ECHOLNPGM("EEPROM Unlock failure for page ", page);
250
     return false;
250
     return false;
251
   }
251
   }
252
 
252
 
271
     __enable_irq();
271
     __enable_irq();
272
 
272
 
273
     DEBUG_ECHO_START();
273
     DEBUG_ECHO_START();
274
-    DEBUG_ECHOLNPAIR("EEPROM Write failure for page ", page);
274
+    DEBUG_ECHOLNPGM("EEPROM Write failure for page ", page);
275
 
275
 
276
     return false;
276
     return false;
277
   }
277
   }
287
 
287
 
288
     #ifdef EE_EMU_DEBUG
288
     #ifdef EE_EMU_DEBUG
289
       DEBUG_ECHO_START();
289
       DEBUG_ECHO_START();
290
-      DEBUG_ECHOLNPAIR("EEPROM Verify Write failure for page ", page);
290
+      DEBUG_ECHOLNPGM("EEPROM Verify Write failure for page ", page);
291
 
291
 
292
       ee_Dump( page, (uint32_t *)addrflash);
292
       ee_Dump( page, (uint32_t *)addrflash);
293
       ee_Dump(-page, data);
293
       ee_Dump(-page, data);
306
           }
306
           }
307
         }
307
         }
308
       }
308
       }
309
-      DEBUG_ECHOLNPAIR("--> Differing bits: ", count);
309
+      DEBUG_ECHOLNPGM("--> Differing bits: ", count);
310
     #endif
310
     #endif
311
 
311
 
312
     return false;
312
     return false;
326
   uint32_t addrflash = uint32_t(getFlashStorage(page));
326
   uint32_t addrflash = uint32_t(getFlashStorage(page));
327
 
327
 
328
   DEBUG_ECHO_START();
328
   DEBUG_ECHO_START();
329
-  DEBUG_ECHOLNPAIR("EEPROM PageErase  ", page);
330
-  DEBUG_ECHOLNPAIR(" in FLASH address ", (uint32_t)addrflash);
331
-  DEBUG_ECHOLNPAIR(" base address     ", (uint32_t)getFlashStorage(0));
329
+  DEBUG_ECHOLNPGM("EEPROM PageErase  ", page);
330
+  DEBUG_ECHOLNPGM(" in FLASH address ", (uint32_t)addrflash);
331
+  DEBUG_ECHOLNPGM(" base address     ", (uint32_t)getFlashStorage(0));
332
   DEBUG_FLUSH();
332
   DEBUG_FLUSH();
333
 
333
 
334
   // Get the page relative to the start of the EFC controller, and the EFC controller to use
334
   // Get the page relative to the start of the EFC controller, and the EFC controller to use
371
     __enable_irq();
371
     __enable_irq();
372
 
372
 
373
     DEBUG_ECHO_START();
373
     DEBUG_ECHO_START();
374
-    DEBUG_ECHOLNPAIR("EEPROM Unlock failure for page ",page);
374
+    DEBUG_ECHOLNPGM("EEPROM Unlock failure for page ",page);
375
 
375
 
376
     return false;
376
     return false;
377
   }
377
   }
395
     __enable_irq();
395
     __enable_irq();
396
 
396
 
397
     DEBUG_ECHO_START();
397
     DEBUG_ECHO_START();
398
-    DEBUG_ECHOLNPAIR("EEPROM Erase failure for page ",page);
398
+    DEBUG_ECHOLNPGM("EEPROM Erase failure for page ",page);
399
 
399
 
400
     return false;
400
     return false;
401
   }
401
   }
411
   for (i = 0; i < PageSize >> 2; i++) {
411
   for (i = 0; i < PageSize >> 2; i++) {
412
     if (*aligned_src++ != 0xFFFFFFFF) {
412
     if (*aligned_src++ != 0xFFFFFFFF) {
413
       DEBUG_ECHO_START();
413
       DEBUG_ECHO_START();
414
-      DEBUG_ECHOLNPAIR("EEPROM Verify Erase failure for page ",page);
414
+      DEBUG_ECHOLNPGM("EEPROM Verify Erase failure for page ",page);
415
       ee_Dump(page, (uint32_t *)addrflash);
415
       ee_Dump(page, (uint32_t *)addrflash);
416
       return false;
416
       return false;
417
     }
417
     }
922
   if (curGroup >= GroupCount) curGroup = 0;
922
   if (curGroup >= GroupCount) curGroup = 0;
923
 
923
 
924
   DEBUG_ECHO_START();
924
   DEBUG_ECHO_START();
925
-  DEBUG_ECHOLNPAIR("EEPROM Current Group: ",curGroup);
925
+  DEBUG_ECHOLNPGM("EEPROM Current Group: ",curGroup);
926
   DEBUG_FLUSH();
926
   DEBUG_FLUSH();
927
 
927
 
928
   // Now, validate that all the other group pages are empty
928
   // Now, validate that all the other group pages are empty
932
     for (int page = 0; page < PagesPerGroup; page++) {
932
     for (int page = 0; page < PagesPerGroup; page++) {
933
       if (!ee_IsPageClean(grp * PagesPerGroup + page)) {
933
       if (!ee_IsPageClean(grp * PagesPerGroup + page)) {
934
         DEBUG_ECHO_START();
934
         DEBUG_ECHO_START();
935
-        DEBUG_ECHOLNPAIR("EEPROM Page ", page, " not clean on group ", grp);
935
+        DEBUG_ECHOLNPGM("EEPROM Page ", page, " not clean on group ", grp);
936
         DEBUG_FLUSH();
936
         DEBUG_FLUSH();
937
         ee_PageErase(grp * PagesPerGroup + page);
937
         ee_PageErase(grp * PagesPerGroup + page);
938
       }
938
       }
949
   }
949
   }
950
 
950
 
951
   DEBUG_ECHO_START();
951
   DEBUG_ECHO_START();
952
-  DEBUG_ECHOLNPAIR("EEPROM Active page: ", curPage);
952
+  DEBUG_ECHOLNPGM("EEPROM Active page: ", curPage);
953
   DEBUG_FLUSH();
953
   DEBUG_FLUSH();
954
 
954
 
955
   // Make sure the pages following the first clean one are also clean
955
   // Make sure the pages following the first clean one are also clean
956
   for (int page = curPage + 1; page < PagesPerGroup; page++) {
956
   for (int page = curPage + 1; page < PagesPerGroup; page++) {
957
     if (!ee_IsPageClean(curGroup * PagesPerGroup + page)) {
957
     if (!ee_IsPageClean(curGroup * PagesPerGroup + page)) {
958
       DEBUG_ECHO_START();
958
       DEBUG_ECHO_START();
959
-      DEBUG_ECHOLNPAIR("EEPROM Page ", page, " not clean on active group ", curGroup);
959
+      DEBUG_ECHOLNPGM("EEPROM Page ", page, " not clean on active group ", curGroup);
960
       DEBUG_FLUSH();
960
       DEBUG_FLUSH();
961
       ee_Dump(curGroup * PagesPerGroup + page, getFlashStorage(curGroup * PagesPerGroup + page));
961
       ee_Dump(curGroup * PagesPerGroup + page, getFlashStorage(curGroup * PagesPerGroup + page));
962
       ee_PageErase(curGroup * PagesPerGroup + page);
962
       ee_PageErase(curGroup * PagesPerGroup + page);

+ 1
- 1
Marlin/src/HAL/DUE/pinsDebug.h Voir le fichier

87
 void pwm_details(int32_t pin) {
87
 void pwm_details(int32_t pin) {
88
   if (pwm_status(pin)) {
88
   if (pwm_status(pin)) {
89
     uint32_t chan = g_APinDescription[pin].ulPWMChannel;
89
     uint32_t chan = g_APinDescription[pin].ulPWMChannel;
90
-    SERIAL_ECHOPAIR("PWM = ", PWM_INTERFACE->PWM_CH_NUM[chan].PWM_CDTY);
90
+    SERIAL_ECHOPGM("PWM = ", PWM_INTERFACE->PWM_CH_NUM[chan].PWM_CDTY);
91
   }
91
   }
92
 }
92
 }
93
 
93
 

+ 1
- 1
Marlin/src/HAL/ESP32/wifi.cpp Voir le fichier

59
 
59
 
60
   MDNS.addService("http", "tcp", 80);
60
   MDNS.addService("http", "tcp", 80);
61
 
61
 
62
-  SERIAL_ECHOLNPAIR("Successfully connected to WiFi with SSID '" WIFI_SSID "', hostname: '" WIFI_HOSTNAME "', IP address: ", WiFi.localIP().toString().c_str());
62
+  SERIAL_ECHOLNPGM("Successfully connected to WiFi with SSID '" WIFI_SSID "', hostname: '" WIFI_HOSTNAME "', IP address: ", WiFi.localIP().toString().c_str());
63
 }
63
 }
64
 
64
 
65
 #endif // WIFISUPPORT
65
 #endif // WIFISUPPORT

+ 4
- 4
Marlin/src/HAL/LPC1768/eeprom_sdcard.cpp Voir le fichier

84
   PGM_P const rw_str = write ? PSTR("write") : PSTR("read");
84
   PGM_P const rw_str = write ? PSTR("write") : PSTR("read");
85
   SERIAL_CHAR(' ');
85
   SERIAL_CHAR(' ');
86
   SERIAL_ECHOPGM_P(rw_str);
86
   SERIAL_ECHOPGM_P(rw_str);
87
-  SERIAL_ECHOLNPAIR("_data(", pos, ",", value, ",", size, ", ...)");
87
+  SERIAL_ECHOLNPGM("_data(", pos, ",", value, ",", size, ", ...)");
88
   if (total) {
88
   if (total) {
89
     SERIAL_ECHOPGM(" f_");
89
     SERIAL_ECHOPGM(" f_");
90
     SERIAL_ECHOPGM_P(rw_str);
90
     SERIAL_ECHOPGM_P(rw_str);
91
-    SERIAL_ECHOPAIR("()=", s, "\n size=", size, "\n bytes_");
92
-    SERIAL_ECHOLNPAIR_P(write ? PSTR("written=") : PSTR("read="), total);
91
+    SERIAL_ECHOPGM("()=", s, "\n size=", size, "\n bytes_");
92
+    SERIAL_ECHOLNPGM_P(write ? PSTR("written=") : PSTR("read="), total);
93
   }
93
   }
94
   else
94
   else
95
-    SERIAL_ECHOLNPAIR(" f_lseek()=", s);
95
+    SERIAL_ECHOLNPGM(" f_lseek()=", s);
96
 }
96
 }
97
 
97
 
98
 // File function return codes for type FRESULT. This goes away soon, but
98
 // File function return codes for type FRESULT. This goes away soon, but

+ 1
- 1
Marlin/src/HAL/SAMD51/pinsDebug.h Voir le fichier

48
 void pwm_details(int32_t pin) {
48
 void pwm_details(int32_t pin) {
49
   if (pwm_status(pin)) {
49
   if (pwm_status(pin)) {
50
     //uint32_t chan = g_APinDescription[pin].ulPWMChannel TODO when fast pwm is operative;
50
     //uint32_t chan = g_APinDescription[pin].ulPWMChannel TODO when fast pwm is operative;
51
-    //SERIAL_ECHOPAIR("PWM = ", duty);
51
+    //SERIAL_ECHOPGM("PWM = ", duty);
52
   }
52
   }
53
 }
53
 }
54
 
54
 

+ 8
- 8
Marlin/src/HAL/STM32/eeprom_flash.cpp Voir le fichier

133
         // load current settings
133
         // load current settings
134
         uint8_t *eeprom_data = (uint8_t *)SLOT_ADDRESS(current_slot);
134
         uint8_t *eeprom_data = (uint8_t *)SLOT_ADDRESS(current_slot);
135
         for (int i = 0; i < MARLIN_EEPROM_SIZE; i++) ram_eeprom[i] = eeprom_data[i];
135
         for (int i = 0; i < MARLIN_EEPROM_SIZE; i++) ram_eeprom[i] = eeprom_data[i];
136
-        DEBUG_ECHOLNPAIR("EEPROM loaded from slot ", current_slot, ".");
136
+        DEBUG_ECHOLNPGM("EEPROM loaded from slot ", current_slot, ".");
137
       }
137
       }
138
       eeprom_data_written = false;
138
       eeprom_data_written = false;
139
     }
139
     }
179
         ENABLE_ISRS();
179
         ENABLE_ISRS();
180
         TERN_(HAS_PAUSE_SERVO_OUTPUT, RESUME_SERVO_OUTPUT());
180
         TERN_(HAS_PAUSE_SERVO_OUTPUT, RESUME_SERVO_OUTPUT());
181
         if (status != HAL_OK) {
181
         if (status != HAL_OK) {
182
-          DEBUG_ECHOLNPAIR("HAL_FLASHEx_Erase=", status);
183
-          DEBUG_ECHOLNPAIR("GetError=", HAL_FLASH_GetError());
184
-          DEBUG_ECHOLNPAIR("SectorError=", SectorError);
182
+          DEBUG_ECHOLNPGM("HAL_FLASHEx_Erase=", status);
183
+          DEBUG_ECHOLNPGM("GetError=", HAL_FLASH_GetError());
184
+          DEBUG_ECHOLNPGM("SectorError=", SectorError);
185
           LOCK_FLASH();
185
           LOCK_FLASH();
186
           return false;
186
           return false;
187
         }
187
         }
204
           offset += sizeof(uint32_t);
204
           offset += sizeof(uint32_t);
205
         }
205
         }
206
         else {
206
         else {
207
-          DEBUG_ECHOLNPAIR("HAL_FLASH_Program=", status);
208
-          DEBUG_ECHOLNPAIR("GetError=", HAL_FLASH_GetError());
209
-          DEBUG_ECHOLNPAIR("address=", address);
207
+          DEBUG_ECHOLNPGM("HAL_FLASH_Program=", status);
208
+          DEBUG_ECHOLNPGM("GetError=", HAL_FLASH_GetError());
209
+          DEBUG_ECHOLNPGM("address=", address);
210
           success = false;
210
           success = false;
211
           break;
211
           break;
212
         }
212
         }
216
 
216
 
217
       if (success) {
217
       if (success) {
218
         eeprom_data_written = false;
218
         eeprom_data_written = false;
219
-        DEBUG_ECHOLNPAIR("EEPROM saved to slot ", current_slot, ".");
219
+        DEBUG_ECHOLNPGM("EEPROM saved to slot ", current_slot, ".");
220
       }
220
       }
221
 
221
 
222
       return success;
222
       return success;

+ 1
- 1
Marlin/src/HAL/STM32/pinsDebug.h Voir le fichier

237
       if (over_7) pin_number -= 8;
237
       if (over_7) pin_number -= 8;
238
 
238
 
239
       uint8_t alt_func = (alt_all >> (4 * pin_number)) & 0x0F;
239
       uint8_t alt_func = (alt_all >> (4 * pin_number)) & 0x0F;
240
-      SERIAL_ECHOPAIR("Alt Function: ", alt_func);
240
+      SERIAL_ECHOPGM("Alt Function: ", alt_func);
241
       if (alt_func < 10) SERIAL_CHAR(' ');
241
       if (alt_func < 10) SERIAL_CHAR(' ');
242
       SERIAL_ECHOPGM(" - ");
242
       SERIAL_ECHOPGM(" - ");
243
       switch (alt_func) {
243
       switch (alt_func) {

+ 3
- 3
Marlin/src/HAL/STM32/usb_host.cpp Voir le fichier

88
     capacity = info.capacity.block_nbr / 2000;
88
     capacity = info.capacity.block_nbr / 2000;
89
     block_size = info.capacity.block_size;
89
     block_size = info.capacity.block_size;
90
     block_count = info.capacity.block_nbr;
90
     block_count = info.capacity.block_nbr;
91
-    // SERIAL_ECHOLNPAIR("info.capacity.block_nbr : %ld\n", info.capacity.block_nbr);
92
-    // SERIAL_ECHOLNPAIR("info.capacity.block_size: %d\n", info.capacity.block_size);
93
-    // SERIAL_ECHOLNPAIR("capacity                : %d MB\n", capacity);
91
+    //SERIAL_ECHOLNPGM("info.capacity.block_nbr : %ld\n", info.capacity.block_nbr);
92
+    //SERIAL_ECHOLNPGM("info.capacity.block_size: %d\n", info.capacity.block_size);
93
+    //SERIAL_ECHOLNPGM("capacity                : %d MB\n", capacity);
94
   }
94
   }
95
 };
95
 };
96
 
96
 

+ 3
- 3
Marlin/src/HAL/shared/Delay.cpp Voir le fichier

110
       auto report_call_time = [](PGM_P const name, PGM_P const unit, const uint32_t cycles, const uint32_t total, const bool do_flush=true) {
110
       auto report_call_time = [](PGM_P const name, PGM_P const unit, const uint32_t cycles, const uint32_t total, const bool do_flush=true) {
111
         SERIAL_ECHOPGM("Calling ");
111
         SERIAL_ECHOPGM("Calling ");
112
         SERIAL_ECHOPGM_P(name);
112
         SERIAL_ECHOPGM_P(name);
113
-        SERIAL_ECHOLNPAIR(" for ", cycles);
113
+        SERIAL_ECHOLNPGM(" for ", cycles);
114
         SERIAL_ECHOPGM_P(unit);
114
         SERIAL_ECHOPGM_P(unit);
115
-        SERIAL_ECHOLNPAIR(" took: ", total);
115
+        SERIAL_ECHOLNPGM(" took: ", total);
116
         SERIAL_ECHOPGM_P(unit);
116
         SERIAL_ECHOPGM_P(unit);
117
         if (do_flush) SERIAL_FLUSHTX();
117
         if (do_flush) SERIAL_FLUSHTX();
118
       };
118
       };
119
 
119
 
120
       uint32_t s, e;
120
       uint32_t s, e;
121
 
121
 
122
-      SERIAL_ECHOLNPAIR("Computed delay calibration value: ", ASM_CYCLES_PER_ITERATION);
122
+      SERIAL_ECHOLNPGM("Computed delay calibration value: ", ASM_CYCLES_PER_ITERATION);
123
       SERIAL_FLUSH();
123
       SERIAL_FLUSH();
124
       // Display the results of the calibration above
124
       // Display the results of the calibration above
125
       constexpr uint32_t testValues[] = { 1, 5, 10, 20, 50, 100, 150, 200, 350, 500, 750, 1000 };
125
       constexpr uint32_t testValues[] = { 1, 5, 10, 20, 50, 100, 150, 200, 350, 500, 750, 1000 };

+ 2
- 2
Marlin/src/MarlinCore.cpp Voir le fichier

798
 void idle(bool no_stepper_sleep/*=false*/) {
798
 void idle(bool no_stepper_sleep/*=false*/) {
799
   #if ENABLED(MARLIN_DEV_MODE)
799
   #if ENABLED(MARLIN_DEV_MODE)
800
     static uint16_t idle_depth = 0;
800
     static uint16_t idle_depth = 0;
801
-    if (++idle_depth > 5) SERIAL_ECHOLNPAIR("idle() call depth: ", idle_depth);
801
+    if (++idle_depth > 5) SERIAL_ECHOLNPGM("idle() call depth: ", idle_depth);
802
   #endif
802
   #endif
803
 
803
 
804
   // Core Marlin activities
804
   // Core Marlin activities
1623
   #if BOTH(HAS_WIRED_LCD, SHOW_BOOTSCREEN)
1623
   #if BOTH(HAS_WIRED_LCD, SHOW_BOOTSCREEN)
1624
     const millis_t elapsed = millis() - bootscreen_ms;
1624
     const millis_t elapsed = millis() - bootscreen_ms;
1625
     #if ENABLED(MARLIN_DEV_MODE)
1625
     #if ENABLED(MARLIN_DEV_MODE)
1626
-      SERIAL_ECHOLNPAIR("elapsed=", elapsed);
1626
+      SERIAL_ECHOLNPGM("elapsed=", elapsed);
1627
     #endif
1627
     #endif
1628
     SETUP_RUN(ui.bootscreen_completion(elapsed));
1628
     SETUP_RUN(ui.bootscreen_completion(elapsed));
1629
   #endif
1629
   #endif

+ 6
- 6
Marlin/src/core/bug_on.h Voir le fichier

20
  */
20
  */
21
 #pragma once
21
 #pragma once
22
 
22
 
23
-// We need SERIAL_ECHOPAIR and macros.h
23
+// We need SERIAL_ECHOPGM and macros.h
24
 #include "serial.h"
24
 #include "serial.h"
25
 
25
 
26
 #if ENABLED(POSTMORTEM_DEBUGGING)
26
 #if ENABLED(POSTMORTEM_DEBUGGING)
27
   // Useful macro for stopping the CPU on an unexpected condition
27
   // Useful macro for stopping the CPU on an unexpected condition
28
-  // This is used like SERIAL_ECHOPAIR, that is: a key-value call of the local variables you want
28
+  // This is used like SERIAL_ECHOPGM, that is: a key-value call of the local variables you want
29
   // to dump to the serial port before stopping the CPU.
29
   // to dump to the serial port before stopping the CPU.
30
-                          // \/ Don't replace by SERIAL_ECHOPAIR since ONLY_FILENAME cannot be transformed to a PGM string on Arduino and it breaks building
31
-  #define BUG_ON(V...) do { SERIAL_ECHO(ONLY_FILENAME); SERIAL_ECHO(__LINE__); SERIAL_ECHOLNPGM(": "); SERIAL_ECHOLNPAIR(V); SERIAL_FLUSHTX(); *(char*)0 = 42; } while(0)
30
+                          // \/ Don't replace by SERIAL_ECHOPGM since ONLY_FILENAME cannot be transformed to a PGM string on Arduino and it breaks building
31
+  #define BUG_ON(V...) do { SERIAL_ECHO(ONLY_FILENAME); SERIAL_ECHO(__LINE__); SERIAL_ECHOLNPGM(": "); SERIAL_ECHOLNPGM(V); SERIAL_FLUSHTX(); *(char*)0 = 42; } while(0)
32
 #elif ENABLED(MARLIN_DEV_MODE)
32
 #elif ENABLED(MARLIN_DEV_MODE)
33
   // Don't stop the CPU here, but at least dump the bug on the serial port
33
   // Don't stop the CPU here, but at least dump the bug on the serial port
34
-                          // \/ Don't replace by SERIAL_ECHOPAIR since ONLY_FILENAME cannot be transformed to a PGM string on Arduino and it breaks building
35
-  #define BUG_ON(V...) do { SERIAL_ECHO(ONLY_FILENAME); SERIAL_ECHO(__LINE__); SERIAL_ECHOLNPGM(": BUG!"); SERIAL_ECHOLNPAIR(V); SERIAL_FLUSHTX(); } while(0)
34
+                          // \/ Don't replace by SERIAL_ECHOPGM since ONLY_FILENAME cannot be transformed to a PGM string on Arduino and it breaks building
35
+  #define BUG_ON(V...) do { SERIAL_ECHO(ONLY_FILENAME); SERIAL_ECHO(__LINE__); SERIAL_ECHOLNPGM(": BUG!"); SERIAL_ECHOLNPGM(V); SERIAL_FLUSHTX(); } while(0)
36
 #else
36
 #else
37
   // Release mode, let's ignore the bug
37
   // Release mode, let's ignore the bug
38
   #define BUG_ON(V...) NOOP
38
   #define BUG_ON(V...) NOOP

+ 8
- 14
Marlin/src/core/debug_out.h Voir le fichier

27
 //
27
 //
28
 
28
 
29
 #undef DEBUG_SECTION
29
 #undef DEBUG_SECTION
30
-#undef DEBUG_ECHOPGM_P
31
 #undef DEBUG_ECHO_START
30
 #undef DEBUG_ECHO_START
32
 #undef DEBUG_ERROR_START
31
 #undef DEBUG_ERROR_START
33
 #undef DEBUG_CHAR
32
 #undef DEBUG_CHAR
37
 #undef DEBUG_ECHOLN
36
 #undef DEBUG_ECHOLN
38
 #undef DEBUG_ECHOPGM
37
 #undef DEBUG_ECHOPGM
39
 #undef DEBUG_ECHOLNPGM
38
 #undef DEBUG_ECHOLNPGM
40
-#undef DEBUG_ECHOPAIR
41
-#undef DEBUG_ECHOPAIR_P
39
+#undef DEBUG_ECHOPGM_P
40
+#undef DEBUG_ECHOLNPGM_P
42
 #undef DEBUG_ECHOPAIR_F
41
 #undef DEBUG_ECHOPAIR_F
43
 #undef DEBUG_ECHOPAIR_F_P
42
 #undef DEBUG_ECHOPAIR_F_P
44
-#undef DEBUG_ECHOLNPAIR
45
-#undef DEBUG_ECHOLNPAIR_P
46
 #undef DEBUG_ECHOLNPAIR_F
43
 #undef DEBUG_ECHOLNPAIR_F
47
 #undef DEBUG_ECHOLNPAIR_F_P
44
 #undef DEBUG_ECHOLNPAIR_F_P
48
 #undef DEBUG_ECHO_MSG
45
 #undef DEBUG_ECHO_MSG
69
   #define DEBUG_ECHOLN            SERIAL_ECHOLN
66
   #define DEBUG_ECHOLN            SERIAL_ECHOLN
70
   #define DEBUG_ECHOPGM           SERIAL_ECHOPGM
67
   #define DEBUG_ECHOPGM           SERIAL_ECHOPGM
71
   #define DEBUG_ECHOLNPGM         SERIAL_ECHOLNPGM
68
   #define DEBUG_ECHOLNPGM         SERIAL_ECHOLNPGM
72
-  #define DEBUG_ECHOPAIR          SERIAL_ECHOPAIR
73
-  #define DEBUG_ECHOPAIR_P        SERIAL_ECHOPAIR_P
69
+  #define DEBUG_ECHOPGM           SERIAL_ECHOPGM
70
+  #define DEBUG_ECHOPGM_P         SERIAL_ECHOPGM_P
74
   #define DEBUG_ECHOPAIR_F        SERIAL_ECHOPAIR_F
71
   #define DEBUG_ECHOPAIR_F        SERIAL_ECHOPAIR_F
75
   #define DEBUG_ECHOPAIR_F_P      SERIAL_ECHOPAIR_F_P
72
   #define DEBUG_ECHOPAIR_F_P      SERIAL_ECHOPAIR_F_P
76
-  #define DEBUG_ECHOLNPAIR        SERIAL_ECHOLNPAIR
77
-  #define DEBUG_ECHOLNPAIR_P      SERIAL_ECHOLNPAIR_P
73
+  #define DEBUG_ECHOLNPGM         SERIAL_ECHOLNPGM
74
+  #define DEBUG_ECHOLNPGM_P       SERIAL_ECHOLNPGM_P
78
   #define DEBUG_ECHOLNPAIR_F      SERIAL_ECHOLNPAIR_F
75
   #define DEBUG_ECHOLNPAIR_F      SERIAL_ECHOLNPAIR_F
79
   #define DEBUG_ECHOLNPAIR_F_P    SERIAL_ECHOLNPAIR_F_P
76
   #define DEBUG_ECHOLNPAIR_F_P    SERIAL_ECHOLNPAIR_F_P
80
   #define DEBUG_ECHO_MSG          SERIAL_ECHO_MSG
77
   #define DEBUG_ECHO_MSG          SERIAL_ECHO_MSG
89
 #else
86
 #else
90
 
87
 
91
   #define DEBUG_SECTION(...)        NOOP
88
   #define DEBUG_SECTION(...)        NOOP
92
-  #define DEBUG_ECHOPGM_P(P)          NOOP
93
   #define DEBUG_ECHO_START()        NOOP
89
   #define DEBUG_ECHO_START()        NOOP
94
   #define DEBUG_ERROR_START()       NOOP
90
   #define DEBUG_ERROR_START()       NOOP
95
   #define DEBUG_CHAR(...)           NOOP
91
   #define DEBUG_CHAR(...)           NOOP
99
   #define DEBUG_ECHOLN(...)         NOOP
95
   #define DEBUG_ECHOLN(...)         NOOP
100
   #define DEBUG_ECHOPGM(...)        NOOP
96
   #define DEBUG_ECHOPGM(...)        NOOP
101
   #define DEBUG_ECHOLNPGM(...)      NOOP
97
   #define DEBUG_ECHOLNPGM(...)      NOOP
102
-  #define DEBUG_ECHOPAIR(...)       NOOP
103
-  #define DEBUG_ECHOPAIR_P(...)     NOOP
98
+  #define DEBUG_ECHOPGM_P(...)      NOOP
99
+  #define DEBUG_ECHOLNPGM_P(...)    NOOP
104
   #define DEBUG_ECHOPAIR_F(...)     NOOP
100
   #define DEBUG_ECHOPAIR_F(...)     NOOP
105
   #define DEBUG_ECHOPAIR_F_P(...)   NOOP
101
   #define DEBUG_ECHOPAIR_F_P(...)   NOOP
106
-  #define DEBUG_ECHOLNPAIR(...)     NOOP
107
-  #define DEBUG_ECHOLNPAIR_P(...)   NOOP
108
   #define DEBUG_ECHOLNPAIR_F(...)   NOOP
102
   #define DEBUG_ECHOLNPAIR_F(...)   NOOP
109
   #define DEBUG_ECHOLNPAIR_F_P(...) NOOP
103
   #define DEBUG_ECHOLNPAIR_F_P(...) NOOP
110
   #define DEBUG_ECHO_MSG(...)       NOOP
104
   #define DEBUG_ECHO_MSG(...)       NOOP

+ 1
- 1
Marlin/src/core/serial.cpp Voir le fichier

96
 
96
 
97
 void print_pos(LINEAR_AXIS_ARGS(const_float_t), PGM_P const prefix/*=nullptr*/, PGM_P const suffix/*=nullptr*/) {
97
 void print_pos(LINEAR_AXIS_ARGS(const_float_t), PGM_P const prefix/*=nullptr*/, PGM_P const suffix/*=nullptr*/) {
98
   if (prefix) serialprintPGM(prefix);
98
   if (prefix) serialprintPGM(prefix);
99
-  SERIAL_ECHOPAIR_P(
99
+  SERIAL_ECHOPGM_P(
100
     LIST_N(DOUBLE(LINEAR_AXES), SP_X_STR, x, SP_Y_STR, y, SP_Z_STR, z, SP_I_STR, i, SP_J_STR, j, SP_K_STR, k)
100
     LIST_N(DOUBLE(LINEAR_AXES), SP_X_STR, x, SP_Y_STR, y, SP_Z_STR, z, SP_I_STR, i, SP_J_STR, j, SP_K_STR, k)
101
   );
101
   );
102
   if (suffix) serialprintPGM(suffix); else SERIAL_EOL();
102
   if (suffix) serialprintPGM(suffix); else SERIAL_EOL();

+ 15
- 21
Marlin/src/core/serial.h Voir le fichier

188
 void serialprintPGM(PGM_P str);
188
 void serialprintPGM(PGM_P str);
189
 
189
 
190
 //
190
 //
191
-// SERIAL_ECHOPAIR... macros are used to output string-value pairs.
191
+// SERIAL_ECHOPGM... macros are used to output string-value pairs.
192
 //
192
 //
193
 
193
 
194
 // Print up to 20 pairs of values. Odd elements must be literal strings.
194
 // Print up to 20 pairs of values. Odd elements must be literal strings.
195
 #define __SEP_N(N,V...)           _SEP_##N(V)
195
 #define __SEP_N(N,V...)           _SEP_##N(V)
196
 #define _SEP_N(N,V...)            __SEP_N(N,V)
196
 #define _SEP_N(N,V...)            __SEP_N(N,V)
197
 #define _SEP_N_REF()              _SEP_N
197
 #define _SEP_N_REF()              _SEP_N
198
-#define _SEP_1(s)                 SERIAL_ECHOPGM(s);
198
+#define _SEP_1(s)                 serialprintPGM(PSTR(s));
199
 #define _SEP_2(s,v)               serial_echopair_PGM(PSTR(s),v);
199
 #define _SEP_2(s,v)               serial_echopair_PGM(PSTR(s),v);
200
 #define _SEP_3(s,v,V...)          _SEP_2(s,v); DEFER2(_SEP_N_REF)()(TWO_ARGS(V),V);
200
 #define _SEP_3(s,v,V...)          _SEP_2(s,v); DEFER2(_SEP_N_REF)()(TWO_ARGS(V),V);
201
-#define SERIAL_ECHOPAIR(V...)     do{ EVAL(_SEP_N(TWO_ARGS(V),V)); }while(0)
201
+#define SERIAL_ECHOPGM(V...)      do{ EVAL(_SEP_N(TWO_ARGS(V),V)); }while(0)
202
 
202
 
203
 // Print up to 20 pairs of values followed by newline. Odd elements must be literal strings.
203
 // Print up to 20 pairs of values followed by newline. Odd elements must be literal strings.
204
 #define __SELP_N(N,V...)          _SELP_##N(V)
204
 #define __SELP_N(N,V...)          _SELP_##N(V)
205
 #define _SELP_N(N,V...)           __SELP_N(N,V)
205
 #define _SELP_N(N,V...)           __SELP_N(N,V)
206
 #define _SELP_N_REF()             _SELP_N
206
 #define _SELP_N_REF()             _SELP_N
207
-#define _SELP_1(s)                SERIAL_ECHOLNPGM(s);
207
+#define _SELP_1(s)                serialprintPGM(PSTR(s "\n"));
208
 #define _SELP_2(s,v)              serial_echopair_PGM(PSTR(s),v); SERIAL_EOL();
208
 #define _SELP_2(s,v)              serial_echopair_PGM(PSTR(s),v); SERIAL_EOL();
209
 #define _SELP_3(s,v,V...)         _SEP_2(s,v); DEFER2(_SELP_N_REF)()(TWO_ARGS(V),V);
209
 #define _SELP_3(s,v,V...)         _SEP_2(s,v); DEFER2(_SELP_N_REF)()(TWO_ARGS(V),V);
210
-#define SERIAL_ECHOLNPAIR(V...)   do{ EVAL(_SELP_N(TWO_ARGS(V),V)); }while(0)
210
+#define SERIAL_ECHOLNPGM(V...)    do{ EVAL(_SELP_N(TWO_ARGS(V),V)); }while(0)
211
 
211
 
212
 // Print up to 20 pairs of values. Odd elements must be PSTR pointers.
212
 // Print up to 20 pairs of values. Odd elements must be PSTR pointers.
213
 #define __SEP_N_P(N,V...)         _SEP_##N##_P(V)
213
 #define __SEP_N_P(N,V...)         _SEP_##N##_P(V)
214
 #define _SEP_N_P(N,V...)          __SEP_N_P(N,V)
214
 #define _SEP_N_P(N,V...)          __SEP_N_P(N,V)
215
 #define _SEP_N_P_REF()            _SEP_N_P
215
 #define _SEP_N_P_REF()            _SEP_N_P
216
-#define _SEP_1_P(s)               serialprintPGM(s);
217
-#define _SEP_2_P(s,v)             serial_echopair_PGM(s,v);
218
-#define _SEP_3_P(s,v,V...)        _SEP_2_P(s,v); DEFER2(_SEP_N_P_REF)()(TWO_ARGS(V),V);
219
-#define SERIAL_ECHOPAIR_P(V...)   do{ EVAL(_SEP_N_P(TWO_ARGS(V),V)); }while(0)
216
+#define _SEP_1_P(p)               serialprintPGM(p);
217
+#define _SEP_2_P(p,v)             serial_echopair_PGM(p,v);
218
+#define _SEP_3_P(p,v,V...)        _SEP_2_P(p,v); DEFER2(_SEP_N_P_REF)()(TWO_ARGS(V),V);
219
+#define SERIAL_ECHOPGM_P(V...)    do{ EVAL(_SEP_N_P(TWO_ARGS(V),V)); }while(0)
220
 
220
 
221
 // Print up to 20 pairs of values followed by newline. Odd elements must be PSTR pointers.
221
 // Print up to 20 pairs of values followed by newline. Odd elements must be PSTR pointers.
222
 #define __SELP_N_P(N,V...)        _SELP_##N##_P(V)
222
 #define __SELP_N_P(N,V...)        _SELP_##N##_P(V)
223
 #define _SELP_N_P(N,V...)         __SELP_N_P(N,V)
223
 #define _SELP_N_P(N,V...)         __SELP_N_P(N,V)
224
 #define _SELP_N_P_REF()           _SELP_N_P
224
 #define _SELP_N_P_REF()           _SELP_N_P
225
-#define _SELP_1_P(s)              { serialprintPGM(s); SERIAL_EOL(); }
226
-#define _SELP_2_P(s,v)            { serial_echopair_PGM(s,v); SERIAL_EOL(); }
227
-#define _SELP_3_P(s,v,V...)       { _SEP_2_P(s,v); DEFER2(_SELP_N_P_REF)()(TWO_ARGS(V),V); }
228
-#define SERIAL_ECHOLNPAIR_P(V...) do{ EVAL(_SELP_N_P(TWO_ARGS(V),V)); }while(0)
225
+#define _SELP_1_P(p)              { serialprintPGM(p); SERIAL_EOL(); }
226
+#define _SELP_2_P(p,v)            { serial_echopair_PGM(p,v); SERIAL_EOL(); }
227
+#define _SELP_3_P(p,v,V...)       { _SEP_2_P(p,v); DEFER2(_SELP_N_P_REF)()(TWO_ARGS(V),V); }
228
+#define SERIAL_ECHOLNPGM_P(V...)  do{ EVAL(_SELP_N_P(TWO_ARGS(V),V)); }while(0)
229
 
229
 
230
 #ifdef AllowDifferentTypeInList
230
 #ifdef AllowDifferentTypeInList
231
 
231
 
261
 
261
 
262
 #endif
262
 #endif
263
 
263
 
264
-#define SERIAL_ECHOPGM_P(P)         (serialprintPGM(P))
265
-#define SERIAL_ECHOLNPGM_P(P)       do{ serialprintPGM(P); SERIAL_EOL(); }while(0)
266
-
267
-#define SERIAL_ECHOPGM(S)           (serialprintPGM(PSTR(S)))
268
-#define SERIAL_ECHOLNPGM(S)         (serialprintPGM(PSTR(S "\n")))
269
-
270
 #define SERIAL_ECHOPAIR_F_P(P,V...) do{ serialprintPGM(P); SERIAL_ECHO_F(V); }while(0)
264
 #define SERIAL_ECHOPAIR_F_P(P,V...) do{ serialprintPGM(P); SERIAL_ECHO_F(V); }while(0)
271
 #define SERIAL_ECHOLNPAIR_F_P(V...) do{ SERIAL_ECHOPAIR_F_P(V); SERIAL_EOL(); }while(0)
265
 #define SERIAL_ECHOLNPAIR_F_P(V...) do{ SERIAL_ECHOPAIR_F_P(V); SERIAL_EOL(); }while(0)
272
 
266
 
277
 #define SERIAL_ERROR_START()        serial_error_start()
271
 #define SERIAL_ERROR_START()        serial_error_start()
278
 #define SERIAL_EOL()                SERIAL_CHAR('\n')
272
 #define SERIAL_EOL()                SERIAL_CHAR('\n')
279
 
273
 
280
-#define SERIAL_ECHO_MSG(V...)       do{ SERIAL_ECHO_START(); SERIAL_ECHOLNPAIR(V); }while(0)
281
-#define SERIAL_ERROR_MSG(V...)      do{ SERIAL_ERROR_START(); SERIAL_ECHOLNPAIR(V); }while(0)
274
+#define SERIAL_ECHO_MSG(V...)       do{ SERIAL_ECHO_START();  SERIAL_ECHOLNPGM(V); }while(0)
275
+#define SERIAL_ERROR_MSG(V...)      do{ SERIAL_ERROR_START(); SERIAL_ECHOLNPGM(V); }while(0)
282
 
276
 
283
 #define SERIAL_ECHO_SP(C)           serial_spaces(C)
277
 #define SERIAL_ECHO_SP(C)           serial_spaces(C)
284
 
278
 

+ 6
- 6
Marlin/src/core/utility.cpp Voir le fichier

79
     #if HAS_BED_PROBE
79
     #if HAS_BED_PROBE
80
 
80
 
81
       #if !HAS_PROBE_XY_OFFSET
81
       #if !HAS_PROBE_XY_OFFSET
82
-        SERIAL_ECHOPAIR("Probe Offset X0 Y0 Z", probe.offset.z, " (");
82
+        SERIAL_ECHOPGM("Probe Offset X0 Y0 Z", probe.offset.z, " (");
83
       #else
83
       #else
84
-        SERIAL_ECHOPAIR_P(PSTR("Probe Offset X"), probe.offset_xy.x, SP_Y_STR, probe.offset_xy.y, SP_Z_STR, probe.offset.z);
84
+        SERIAL_ECHOPGM_P(PSTR("Probe Offset X"), probe.offset_xy.x, SP_Y_STR, probe.offset_xy.y, SP_Z_STR, probe.offset.z);
85
         if (probe.offset_xy.x > 0)
85
         if (probe.offset_xy.x > 0)
86
           SERIAL_ECHOPGM(" (Right");
86
           SERIAL_ECHOPGM(" (Right");
87
         else if (probe.offset_xy.x < 0)
87
         else if (probe.offset_xy.x < 0)
119
         SERIAL_ECHOLNPGM(" (enabled)");
119
         SERIAL_ECHOLNPGM(" (enabled)");
120
         #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
120
         #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
121
           if (planner.z_fade_height)
121
           if (planner.z_fade_height)
122
-            SERIAL_ECHOLNPAIR("Z Fade: ", planner.z_fade_height);
122
+            SERIAL_ECHOLNPGM("Z Fade: ", planner.z_fade_height);
123
         #endif
123
         #endif
124
         #if ABL_PLANAR
124
         #if ABL_PLANAR
125
           SERIAL_ECHOPGM("ABL Adjustment");
125
           SERIAL_ECHOPGM("ABL Adjustment");
140
           SERIAL_ECHO(ftostr43sign(rz, '+'));
140
           SERIAL_ECHO(ftostr43sign(rz, '+'));
141
           #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
141
           #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
142
             if (planner.z_fade_height) {
142
             if (planner.z_fade_height) {
143
-              SERIAL_ECHOPAIR(" (", ftostr43sign(rz * planner.fade_scaling_factor_for_z(current_position.z), '+'));
143
+              SERIAL_ECHOPGM(" (", ftostr43sign(rz * planner.fade_scaling_factor_for_z(current_position.z), '+'));
144
               SERIAL_CHAR(')');
144
               SERIAL_CHAR(')');
145
             }
145
             }
146
           #endif
146
           #endif
156
       SERIAL_ECHOPGM("Mesh Bed Leveling");
156
       SERIAL_ECHOPGM("Mesh Bed Leveling");
157
       if (planner.leveling_active) {
157
       if (planner.leveling_active) {
158
         SERIAL_ECHOLNPGM(" (enabled)");
158
         SERIAL_ECHOLNPGM(" (enabled)");
159
-        SERIAL_ECHOPAIR("MBL Adjustment Z", ftostr43sign(mbl.get_z(current_position), '+'));
159
+        SERIAL_ECHOPGM("MBL Adjustment Z", ftostr43sign(mbl.get_z(current_position), '+'));
160
         #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
160
         #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
161
           if (planner.z_fade_height) {
161
           if (planner.z_fade_height) {
162
-            SERIAL_ECHOPAIR(" (", ftostr43sign(
162
+            SERIAL_ECHOPGM(" (", ftostr43sign(
163
               mbl.get_z(current_position, planner.fade_scaling_factor_for_z(current_position.z)), '+'
163
               mbl.get_z(current_position, planner.fade_scaling_factor_for_z(current_position.z)), '+'
164
             ));
164
             ));
165
             SERIAL_CHAR(')');
165
             SERIAL_CHAR(')');

+ 2
- 2
Marlin/src/feature/backlash.cpp Voir le fichier

134
           switch (axis) {
134
           switch (axis) {
135
             case CORE_AXIS_1:
135
             case CORE_AXIS_1:
136
               //block->steps[CORE_AXIS_2] += influence_distance_mm[axis] * planner.settings.axis_steps_per_mm[CORE_AXIS_2];
136
               //block->steps[CORE_AXIS_2] += influence_distance_mm[axis] * planner.settings.axis_steps_per_mm[CORE_AXIS_2];
137
-              //SERIAL_ECHOLNPAIR("CORE_AXIS_1 dir change. distance=", distance_mm[axis], " r.err=", residual_error[axis],
137
+              //SERIAL_ECHOLNPGM("CORE_AXIS_1 dir change. distance=", distance_mm[axis], " r.err=", residual_error[axis],
138
               //  " da=", da, " db=", db, " block->steps[axis]=", block->steps[axis], " err_corr=", error_correction);
138
               //  " da=", da, " db=", db, " block->steps[axis]=", block->steps[axis], " err_corr=", error_correction);
139
               break;
139
               break;
140
             case CORE_AXIS_2:
140
             case CORE_AXIS_2:
141
               //block->steps[CORE_AXIS_1] += influence_distance_mm[axis] * planner.settings.axis_steps_per_mm[CORE_AXIS_1];;
141
               //block->steps[CORE_AXIS_1] += influence_distance_mm[axis] * planner.settings.axis_steps_per_mm[CORE_AXIS_1];;
142
-              //SERIAL_ECHOLNPAIR("CORE_AXIS_2 dir change. distance=", distance_mm[axis], " r.err=", residual_error[axis],
142
+              //SERIAL_ECHOLNPGM("CORE_AXIS_2 dir change. distance=", distance_mm[axis], " r.err=", residual_error[axis],
143
               //  " da=", da, " db=", db, " block->steps[axis]=", block->steps[axis], " err_corr=", error_correction);
143
               //  " da=", da, " db=", db, " block->steps[axis]=", block->steps[axis], " err_corr=", error_correction);
144
               break;
144
               break;
145
             case NORMAL_AXIS: break;
145
             case NORMAL_AXIS: break;

+ 5
- 5
Marlin/src/feature/bedlevel/abl/abl.cpp Voir le fichier

336
   /*
336
   /*
337
   static float last_offset = 0;
337
   static float last_offset = 0;
338
   if (ABS(last_offset - offset) > 0.2) {
338
   if (ABS(last_offset - offset) > 0.2) {
339
-    SERIAL_ECHOLNPAIR("Sudden Shift at x=", rel.x, " / ", bilinear_grid_spacing.x, " -> thisg.x=", thisg.x);
340
-    SERIAL_ECHOLNPAIR(" y=", rel.y, " / ", bilinear_grid_spacing.y, " -> thisg.y=", thisg.y);
341
-    SERIAL_ECHOLNPAIR(" ratio.x=", ratio.x, " ratio.y=", ratio.y);
342
-    SERIAL_ECHOLNPAIR(" z1=", z1, " z2=", z2, " z3=", z3, " z4=", z4);
343
-    SERIAL_ECHOLNPAIR(" L=", L, " R=", R, " offset=", offset);
339
+    SERIAL_ECHOLNPGM("Sudden Shift at x=", rel.x, " / ", bilinear_grid_spacing.x, " -> thisg.x=", thisg.x);
340
+    SERIAL_ECHOLNPGM(" y=", rel.y, " / ", bilinear_grid_spacing.y, " -> thisg.y=", thisg.y);
341
+    SERIAL_ECHOLNPGM(" ratio.x=", ratio.x, " ratio.y=", ratio.y);
342
+    SERIAL_ECHOLNPGM(" z1=", z1, " z2=", z2, " z3=", z3, " z4=", z4);
343
+    SERIAL_ECHOLNPGM(" L=", L, " R=", R, " offset=", offset);
344
   }
344
   }
345
   last_offset = offset;
345
   last_offset = offset;
346
   //*/
346
   //*/

+ 1
- 1
Marlin/src/feature/bedlevel/ubl/ubl.cpp Voir le fichier

51
   GRID_LOOP(x, y)
51
   GRID_LOOP(x, y)
52
     if (!isnan(z_values[x][y])) {
52
     if (!isnan(z_values[x][y])) {
53
       SERIAL_ECHO_START();
53
       SERIAL_ECHO_START();
54
-      SERIAL_ECHOPAIR("  M421 I", x, " J", y);
54
+      SERIAL_ECHOPGM("  M421 I", x, " J", y);
55
       SERIAL_ECHOLNPAIR_F_P(SP_Z_STR, z_values[x][y], 4);
55
       SERIAL_ECHOLNPAIR_F_P(SP_Z_STR, z_values[x][y], 4);
56
       serial_delay(75); // Prevent Printrun from exploding
56
       serial_delay(75); // Prevent Printrun from exploding
57
     }
57
     }

+ 4
- 4
Marlin/src/feature/bedlevel/ubl/ubl.h Voir le fichier

208
 
208
 
209
       if (DEBUGGING(LEVELING)) {
209
       if (DEBUGGING(LEVELING)) {
210
         if (WITHIN(x1_i, 0, (GRID_MAX_POINTS_X) - 1)) DEBUG_ECHOPGM("yi"); else DEBUG_ECHOPGM("x1_i");
210
         if (WITHIN(x1_i, 0, (GRID_MAX_POINTS_X) - 1)) DEBUG_ECHOPGM("yi"); else DEBUG_ECHOPGM("x1_i");
211
-        DEBUG_ECHOLNPAIR(" out of bounds in z_correction_for_x_on_horizontal_mesh_line(rx0=", rx0, ",x1_i=", x1_i, ",yi=", yi, ")");
211
+        DEBUG_ECHOLNPGM(" out of bounds in z_correction_for_x_on_horizontal_mesh_line(rx0=", rx0, ",x1_i=", x1_i, ",yi=", yi, ")");
212
       }
212
       }
213
 
213
 
214
       // The requested location is off the mesh. Return UBL_Z_RAISE_WHEN_OFF_MESH or NAN.
214
       // The requested location is off the mesh. Return UBL_Z_RAISE_WHEN_OFF_MESH or NAN.
231
 
231
 
232
       if (DEBUGGING(LEVELING)) {
232
       if (DEBUGGING(LEVELING)) {
233
         if (WITHIN(xi, 0, (GRID_MAX_POINTS_X) - 1)) DEBUG_ECHOPGM("y1_i"); else DEBUG_ECHOPGM("xi");
233
         if (WITHIN(xi, 0, (GRID_MAX_POINTS_X) - 1)) DEBUG_ECHOPGM("y1_i"); else DEBUG_ECHOPGM("xi");
234
-        DEBUG_ECHOLNPAIR(" out of bounds in z_correction_for_y_on_vertical_mesh_line(ry0=", ry0, ", xi=", xi, ", y1_i=", y1_i, ")");
234
+        DEBUG_ECHOLNPGM(" out of bounds in z_correction_for_y_on_vertical_mesh_line(ry0=", ry0, ", xi=", xi, ", y1_i=", y1_i, ")");
235
       }
235
       }
236
 
236
 
237
       // The requested location is off the mesh. Return UBL_Z_RAISE_WHEN_OFF_MESH or NAN.
237
       // The requested location is off the mesh. Return UBL_Z_RAISE_WHEN_OFF_MESH or NAN.
275
                      // because part of the Mesh is undefined and we don't have the
275
                      // because part of the Mesh is undefined and we don't have the
276
                      // information we need to complete the height correction.
276
                      // information we need to complete the height correction.
277
 
277
 
278
-      if (DEBUGGING(MESH_ADJUST)) DEBUG_ECHOLNPAIR("??? Yikes! NAN in ");
278
+      if (DEBUGGING(MESH_ADJUST)) DEBUG_ECHOLNPGM("??? Yikes! NAN in ");
279
     }
279
     }
280
 
280
 
281
     if (DEBUGGING(MESH_ADJUST)) {
281
     if (DEBUGGING(MESH_ADJUST)) {
282
-      DEBUG_ECHOPAIR("get_z_correction(", rx0, ", ", ry0);
282
+      DEBUG_ECHOPGM("get_z_correction(", rx0, ", ", ry0);
283
       DEBUG_ECHOLNPAIR_F(") => ", z0, 6);
283
       DEBUG_ECHOLNPAIR_F(") => ", z0, 6);
284
     }
284
     }
285
 
285
 

+ 30
- 30
Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp Voir le fichier

428
             SERIAL_ECHOLNPGM("Mesh invalidated. Probing mesh.");
428
             SERIAL_ECHOLNPGM("Mesh invalidated. Probing mesh.");
429
           }
429
           }
430
           if (param.V_verbosity > 1) {
430
           if (param.V_verbosity > 1) {
431
-            SERIAL_ECHOPAIR("Probing around (", param.XY_pos.x);
431
+            SERIAL_ECHOPGM("Probing around (", param.XY_pos.x);
432
             SERIAL_CHAR(',');
432
             SERIAL_CHAR(',');
433
             SERIAL_DECIMAL(param.XY_pos.y);
433
             SERIAL_DECIMAL(param.XY_pos.y);
434
             SERIAL_ECHOLNPGM(").\n");
434
             SERIAL_ECHOLNPGM(").\n");
602
     }
602
     }
603
 
603
 
604
     if (!WITHIN(param.KLS_storage_slot, 0, a - 1)) {
604
     if (!WITHIN(param.KLS_storage_slot, 0, a - 1)) {
605
-      SERIAL_ECHOLNPAIR("?Invalid storage slot.\n?Use 0 to ", a - 1);
605
+      SERIAL_ECHOLNPGM("?Invalid storage slot.\n?Use 0 to ", a - 1);
606
       return;
606
       return;
607
     }
607
     }
608
 
608
 
630
     }
630
     }
631
 
631
 
632
     if (!WITHIN(param.KLS_storage_slot, 0, a - 1)) {
632
     if (!WITHIN(param.KLS_storage_slot, 0, a - 1)) {
633
-      SERIAL_ECHOLNPAIR("?Invalid storage slot.\n?Use 0 to ", a - 1);
633
+      SERIAL_ECHOLNPGM("?Invalid storage slot.\n?Use 0 to ", a - 1);
634
       goto LEAVE;
634
       goto LEAVE;
635
     }
635
     }
636
 
636
 
653
   #endif
653
   #endif
654
 
654
 
655
   #ifdef Z_PROBE_END_SCRIPT
655
   #ifdef Z_PROBE_END_SCRIPT
656
-    if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Z Probe End Script: ", Z_PROBE_END_SCRIPT);
656
+    if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Z Probe End Script: ", Z_PROBE_END_SCRIPT);
657
     if (probe_deployed) {
657
     if (probe_deployed) {
658
       planner.synchronize();
658
       planner.synchronize();
659
       gcode.process_subcommands_now_P(PSTR(Z_PROBE_END_SCRIPT));
659
       gcode.process_subcommands_now_P(PSTR(Z_PROBE_END_SCRIPT));
690
     if (!isnan(z_values[x][y]))
690
     if (!isnan(z_values[x][y]))
691
       sum_of_diff_squared += sq(z_values[x][y] - mean);
691
       sum_of_diff_squared += sq(z_values[x][y] - mean);
692
 
692
 
693
-  SERIAL_ECHOLNPAIR("# of samples: ", n);
693
+  SERIAL_ECHOLNPGM("# of samples: ", n);
694
   SERIAL_ECHOLNPAIR_F("Mean Mesh Height: ", mean, 6);
694
   SERIAL_ECHOLNPAIR_F("Mean Mesh Height: ", mean, 6);
695
 
695
 
696
   const float sigma = SQRT(sum_of_diff_squared / (n + 1));
696
   const float sigma = SQRT(sum_of_diff_squared / (n + 1));
735
       if (do_ubl_mesh_map) display_map(param.T_map_type);
735
       if (do_ubl_mesh_map) display_map(param.T_map_type);
736
 
736
 
737
       const uint8_t point_num = (GRID_MAX_POINTS - count) + 1;
737
       const uint8_t point_num = (GRID_MAX_POINTS - count) + 1;
738
-      SERIAL_ECHOLNPAIR("Probing mesh point ", point_num, "/", GRID_MAX_POINTS, ".");
738
+      SERIAL_ECHOLNPGM("Probing mesh point ", point_num, "/", GRID_MAX_POINTS, ".");
739
       TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_POINT), point_num, int(GRID_MAX_POINTS)));
739
       TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_POINT), point_num, int(GRID_MAX_POINTS)));
740
 
740
 
741
       #if HAS_LCD_MENU
741
       #if HAS_LCD_MENU
1450
         #endif
1450
         #endif
1451
         if (param.V_verbosity > 3) {
1451
         if (param.V_verbosity > 3) {
1452
           serial_spaces(16);
1452
           serial_spaces(16);
1453
-          SERIAL_ECHOLNPAIR("Corrected_Z=", measured_z);
1453
+          SERIAL_ECHOLNPGM("Corrected_Z=", measured_z);
1454
         }
1454
         }
1455
         incremental_LSF(&lsf_results, points[0], measured_z);
1455
         incremental_LSF(&lsf_results, points[0], measured_z);
1456
       }
1456
       }
1469
           measured_z -= get_z_correction(points[1]);
1469
           measured_z -= get_z_correction(points[1]);
1470
           if (param.V_verbosity > 3) {
1470
           if (param.V_verbosity > 3) {
1471
             serial_spaces(16);
1471
             serial_spaces(16);
1472
-            SERIAL_ECHOLNPAIR("Corrected_Z=", measured_z);
1472
+            SERIAL_ECHOLNPGM("Corrected_Z=", measured_z);
1473
           }
1473
           }
1474
           incremental_LSF(&lsf_results, points[1], measured_z);
1474
           incremental_LSF(&lsf_results, points[1], measured_z);
1475
         }
1475
         }
1489
           measured_z -= get_z_correction(points[2]);
1489
           measured_z -= get_z_correction(points[2]);
1490
           if (param.V_verbosity > 3) {
1490
           if (param.V_verbosity > 3) {
1491
             serial_spaces(16);
1491
             serial_spaces(16);
1492
-            SERIAL_ECHOLNPAIR("Corrected_Z=", measured_z);
1492
+            SERIAL_ECHOLNPGM("Corrected_Z=", measured_z);
1493
           }
1493
           }
1494
           incremental_LSF(&lsf_results, points[2], measured_z);
1494
           incremental_LSF(&lsf_results, points[2], measured_z);
1495
         }
1495
         }
1517
           rpos.y = y_min + dy * (zig_zag ? param.J_grid_size - 1 - iy : iy);
1517
           rpos.y = y_min + dy * (zig_zag ? param.J_grid_size - 1 - iy : iy);
1518
 
1518
 
1519
           if (!abort_flag) {
1519
           if (!abort_flag) {
1520
-            SERIAL_ECHOLNPAIR("Tilting mesh point ", point_num, "/", total_points, "\n");
1520
+            SERIAL_ECHOLNPGM("Tilting mesh point ", point_num, "/", total_points, "\n");
1521
             TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_LCD_TILTING_MESH), point_num, total_points));
1521
             TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_LCD_TILTING_MESH), point_num, total_points));
1522
 
1522
 
1523
             measured_z = probe.probe_at_point(rpos, parser.seen_test('E') ? PROBE_PT_STOW : PROBE_PT_RAISE, param.V_verbosity); // TODO: Needs error handling
1523
             measured_z = probe.probe_at_point(rpos, parser.seen_test('E') ? PROBE_PT_STOW : PROBE_PT_RAISE, param.V_verbosity); // TODO: Needs error handling
1545
 
1545
 
1546
             if (param.V_verbosity > 3) {
1546
             if (param.V_verbosity > 3) {
1547
               serial_spaces(16);
1547
               serial_spaces(16);
1548
-              SERIAL_ECHOLNPAIR("Corrected_Z=", measured_z);
1548
+              SERIAL_ECHOLNPGM("Corrected_Z=", measured_z);
1549
             }
1549
             }
1550
             incremental_LSF(&lsf_results, rpos, measured_z);
1550
             incremental_LSF(&lsf_results, rpos, measured_z);
1551
           }
1551
           }
1648
         DEBUG_ECHOLNPAIR_F("0 : ", normed(safe_homing_xy, 0), 6);
1648
         DEBUG_ECHOLNPAIR_F("0 : ", normed(safe_homing_xy, 0), 6);
1649
         d_from(); DEBUG_ECHOPGM("safe home with Z=");
1649
         d_from(); DEBUG_ECHOPGM("safe home with Z=");
1650
         DEBUG_ECHOLNPAIR_F("mesh value ", normed(safe_homing_xy, get_z_correction(safe_homing_xy)), 6);
1650
         DEBUG_ECHOLNPAIR_F("mesh value ", normed(safe_homing_xy, get_z_correction(safe_homing_xy)), 6);
1651
-        DEBUG_ECHOPAIR("   Z error = (", Z_SAFE_HOMING_X_POINT, ",", Z_SAFE_HOMING_Y_POINT);
1651
+        DEBUG_ECHOPGM("   Z error = (", Z_SAFE_HOMING_X_POINT, ",", Z_SAFE_HOMING_Y_POINT);
1652
         DEBUG_ECHOLNPAIR_F(") = ", get_z_correction(safe_homing_xy), 6);
1652
         DEBUG_ECHOLNPAIR_F(") = ", get_z_correction(safe_homing_xy), 6);
1653
       #endif
1653
       #endif
1654
     } // DEBUGGING(LEVELING)
1654
     } // DEBUGGING(LEVELING)
1722
     if (storage_slot == -1)
1722
     if (storage_slot == -1)
1723
       SERIAL_ECHOPGM("No Mesh Loaded.");
1723
       SERIAL_ECHOPGM("No Mesh Loaded.");
1724
     else
1724
     else
1725
-      SERIAL_ECHOPAIR("Mesh ", storage_slot, " Loaded.");
1725
+      SERIAL_ECHOPGM("Mesh ", storage_slot, " Loaded.");
1726
     SERIAL_EOL();
1726
     SERIAL_EOL();
1727
     serial_delay(50);
1727
     serial_delay(50);
1728
 
1728
 
1736
       SERIAL_ECHOLNPAIR_F("Probe Offset M851 Z", probe.offset.z, 7);
1736
       SERIAL_ECHOLNPAIR_F("Probe Offset M851 Z", probe.offset.z, 7);
1737
     #endif
1737
     #endif
1738
 
1738
 
1739
-    SERIAL_ECHOLNPAIR("MESH_MIN_X  " STRINGIFY(MESH_MIN_X) "=", MESH_MIN_X); serial_delay(50);
1740
-    SERIAL_ECHOLNPAIR("MESH_MIN_Y  " STRINGIFY(MESH_MIN_Y) "=", MESH_MIN_Y); serial_delay(50);
1741
-    SERIAL_ECHOLNPAIR("MESH_MAX_X  " STRINGIFY(MESH_MAX_X) "=", MESH_MAX_X); serial_delay(50);
1742
-    SERIAL_ECHOLNPAIR("MESH_MAX_Y  " STRINGIFY(MESH_MAX_Y) "=", MESH_MAX_Y); serial_delay(50);
1743
-    SERIAL_ECHOLNPAIR("GRID_MAX_POINTS_X  ", GRID_MAX_POINTS_X);             serial_delay(50);
1744
-    SERIAL_ECHOLNPAIR("GRID_MAX_POINTS_Y  ", GRID_MAX_POINTS_Y);             serial_delay(50);
1745
-    SERIAL_ECHOLNPAIR("MESH_X_DIST  ", MESH_X_DIST);
1746
-    SERIAL_ECHOLNPAIR("MESH_Y_DIST  ", MESH_Y_DIST);                         serial_delay(50);
1739
+    SERIAL_ECHOLNPGM("MESH_MIN_X  " STRINGIFY(MESH_MIN_X) "=", MESH_MIN_X); serial_delay(50);
1740
+    SERIAL_ECHOLNPGM("MESH_MIN_Y  " STRINGIFY(MESH_MIN_Y) "=", MESH_MIN_Y); serial_delay(50);
1741
+    SERIAL_ECHOLNPGM("MESH_MAX_X  " STRINGIFY(MESH_MAX_X) "=", MESH_MAX_X); serial_delay(50);
1742
+    SERIAL_ECHOLNPGM("MESH_MAX_Y  " STRINGIFY(MESH_MAX_Y) "=", MESH_MAX_Y); serial_delay(50);
1743
+    SERIAL_ECHOLNPGM("GRID_MAX_POINTS_X  ", GRID_MAX_POINTS_X);             serial_delay(50);
1744
+    SERIAL_ECHOLNPGM("GRID_MAX_POINTS_Y  ", GRID_MAX_POINTS_Y);             serial_delay(50);
1745
+    SERIAL_ECHOLNPGM("MESH_X_DIST  ", MESH_X_DIST);
1746
+    SERIAL_ECHOLNPGM("MESH_Y_DIST  ", MESH_Y_DIST);                         serial_delay(50);
1747
 
1747
 
1748
     SERIAL_ECHOPGM("X-Axis Mesh Points at: ");
1748
     SERIAL_ECHOPGM("X-Axis Mesh Points at: ");
1749
     LOOP_L_N(i, GRID_MAX_POINTS_X) {
1749
     LOOP_L_N(i, GRID_MAX_POINTS_X) {
1762
     SERIAL_EOL();
1762
     SERIAL_EOL();
1763
 
1763
 
1764
     #if HAS_KILL
1764
     #if HAS_KILL
1765
-      SERIAL_ECHOLNPAIR("Kill pin on :", KILL_PIN, "  state:", kill_state());
1765
+      SERIAL_ECHOLNPGM("Kill pin on :", KILL_PIN, "  state:", kill_state());
1766
     #endif
1766
     #endif
1767
 
1767
 
1768
     SERIAL_EOL();
1768
     SERIAL_EOL();
1769
     serial_delay(50);
1769
     serial_delay(50);
1770
 
1770
 
1771
     #if ENABLED(UBL_DEVEL_DEBUGGING)
1771
     #if ENABLED(UBL_DEVEL_DEBUGGING)
1772
-      SERIAL_ECHOLNPAIR("ubl_state_at_invocation :", ubl_state_at_invocation, "\nubl_state_recursion_chk :", ubl_state_recursion_chk);
1772
+      SERIAL_ECHOLNPGM("ubl_state_at_invocation :", ubl_state_at_invocation, "\nubl_state_recursion_chk :", ubl_state_recursion_chk);
1773
       serial_delay(50);
1773
       serial_delay(50);
1774
 
1774
 
1775
-      SERIAL_ECHOLNPAIR("Meshes go from ", hex_address((void*)settings.meshes_start_index()), " to ", hex_address((void*)settings.meshes_end_index()));
1775
+      SERIAL_ECHOLNPGM("Meshes go from ", hex_address((void*)settings.meshes_start_index()), " to ", hex_address((void*)settings.meshes_end_index()));
1776
       serial_delay(50);
1776
       serial_delay(50);
1777
 
1777
 
1778
-      SERIAL_ECHOLNPAIR("sizeof(ubl) :  ", sizeof(ubl));         SERIAL_EOL();
1779
-      SERIAL_ECHOLNPAIR("z_value[][] size: ", sizeof(z_values)); SERIAL_EOL();
1778
+      SERIAL_ECHOLNPGM("sizeof(ubl) :  ", sizeof(ubl));         SERIAL_EOL();
1779
+      SERIAL_ECHOLNPGM("z_value[][] size: ", sizeof(z_values)); SERIAL_EOL();
1780
       serial_delay(25);
1780
       serial_delay(25);
1781
 
1781
 
1782
-      SERIAL_ECHOLNPAIR("EEPROM free for UBL: ", hex_address((void*)(settings.meshes_end_index() - settings.meshes_start_index())));
1782
+      SERIAL_ECHOLNPGM("EEPROM free for UBL: ", hex_address((void*)(settings.meshes_end_index() - settings.meshes_start_index())));
1783
       serial_delay(50);
1783
       serial_delay(50);
1784
 
1784
 
1785
-      SERIAL_ECHOLNPAIR("EEPROM can hold ", settings.calc_num_meshes(), " meshes.\n");
1785
+      SERIAL_ECHOLNPGM("EEPROM can hold ", settings.calc_num_meshes(), " meshes.\n");
1786
       serial_delay(25);
1786
       serial_delay(25);
1787
     #endif // UBL_DEVEL_DEBUGGING
1787
     #endif // UBL_DEVEL_DEBUGGING
1788
 
1788
 
1829
     }
1829
     }
1830
 
1830
 
1831
     if (!parser.has_value() || !WITHIN(parser.value_int(), 0, a - 1)) {
1831
     if (!parser.has_value() || !WITHIN(parser.value_int(), 0, a - 1)) {
1832
-      SERIAL_ECHOLNPAIR("?Invalid storage slot.\n?Use 0 to ", a - 1);
1832
+      SERIAL_ECHOLNPGM("?Invalid storage slot.\n?Use 0 to ", a - 1);
1833
       return;
1833
       return;
1834
     }
1834
     }
1835
 
1835
 
1838
     float tmp_z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y];
1838
     float tmp_z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y];
1839
     settings.load_mesh(param.KLS_storage_slot, &tmp_z_values);
1839
     settings.load_mesh(param.KLS_storage_slot, &tmp_z_values);
1840
 
1840
 
1841
-    SERIAL_ECHOLNPAIR("Subtracting mesh in slot ", param.KLS_storage_slot, " from current mesh.");
1841
+    SERIAL_ECHOLNPGM("Subtracting mesh in slot ", param.KLS_storage_slot, " from current mesh.");
1842
 
1842
 
1843
     GRID_LOOP(x, y) {
1843
     GRID_LOOP(x, y) {
1844
       z_values[x][y] -= tmp_z_values[x][y];
1844
       z_values[x][y] -= tmp_z_values[x][y];

+ 7
- 7
Marlin/src/feature/binary_stream.h Voir le fichier

146
     transfer_timeout = millis() + TIMEOUT;
146
     transfer_timeout = millis() + TIMEOUT;
147
     switch (static_cast<FileTransfer>(packet_type)) {
147
     switch (static_cast<FileTransfer>(packet_type)) {
148
       case FileTransfer::QUERY:
148
       case FileTransfer::QUERY:
149
-        SERIAL_ECHOPAIR("PFT:version:", VERSION_MAJOR, ".", VERSION_MINOR, ".", VERSION_PATCH);
149
+        SERIAL_ECHOPGM("PFT:version:", VERSION_MAJOR, ".", VERSION_MINOR, ".", VERSION_PATCH);
150
         #if ENABLED(BINARY_STREAM_COMPRESSION)
150
         #if ENABLED(BINARY_STREAM_COMPRESSION)
151
-          SERIAL_ECHOLNPAIR(":compression:heatshrink,", HEATSHRINK_STATIC_WINDOW_BITS, ",", HEATSHRINK_STATIC_LOOKAHEAD_BITS);
151
+          SERIAL_ECHOLNPGM(":compression:heatshrink,", HEATSHRINK_STATIC_WINDOW_BITS, ",", HEATSHRINK_STATIC_LOOKAHEAD_BITS);
152
         #else
152
         #else
153
           SERIAL_ECHOLNPGM(":compression:none");
153
           SERIAL_ECHOLNPGM(":compression:none");
154
         #endif
154
         #endif
322
             if (packet.header.checksum == packet.header_checksum) {
322
             if (packet.header.checksum == packet.header_checksum) {
323
               // The SYNC control packet is a special case in that it doesn't require the stream sync to be correct
323
               // The SYNC control packet is a special case in that it doesn't require the stream sync to be correct
324
               if (static_cast<Protocol>(packet.header.protocol()) == Protocol::CONTROL && static_cast<ProtocolControl>(packet.header.type()) == ProtocolControl::SYNC) {
324
               if (static_cast<Protocol>(packet.header.protocol()) == Protocol::CONTROL && static_cast<ProtocolControl>(packet.header.type()) == ProtocolControl::SYNC) {
325
-                  SERIAL_ECHOLNPAIR("ss", sync, ",", buffer_size, ",", VERSION_MAJOR, ".", VERSION_MINOR, ".", VERSION_PATCH);
325
+                  SERIAL_ECHOLNPGM("ss", sync, ",", buffer_size, ",", VERSION_MAJOR, ".", VERSION_MINOR, ".", VERSION_PATCH);
326
                   stream_state = StreamState::PACKET_RESET;
326
                   stream_state = StreamState::PACKET_RESET;
327
                   break;
327
                   break;
328
               }
328
               }
337
                   stream_state = StreamState::PACKET_PROCESS;
337
                   stream_state = StreamState::PACKET_PROCESS;
338
               }
338
               }
339
               else if (packet.header.sync == sync - 1) {           // ok response must have been lost
339
               else if (packet.header.sync == sync - 1) {           // ok response must have been lost
340
-                SERIAL_ECHOLNPAIR("ok", packet.header.sync);  // transmit valid packet received and drop the payload
340
+                SERIAL_ECHOLNPGM("ok", packet.header.sync);  // transmit valid packet received and drop the payload
341
                 stream_state = StreamState::PACKET_RESET;
341
                 stream_state = StreamState::PACKET_RESET;
342
               }
342
               }
343
               else if (packet_retries) {
343
               else if (packet_retries) {
393
           packet_retries = 0;
393
           packet_retries = 0;
394
           bytes_received += packet.header.size;
394
           bytes_received += packet.header.size;
395
 
395
 
396
-          SERIAL_ECHOLNPAIR("ok", packet.header.sync); // transmit valid packet received
396
+          SERIAL_ECHOLNPGM("ok", packet.header.sync); // transmit valid packet received
397
           dispatch();
397
           dispatch();
398
           stream_state = StreamState::PACKET_RESET;
398
           stream_state = StreamState::PACKET_RESET;
399
           break;
399
           break;
402
             packet_retries++;
402
             packet_retries++;
403
             stream_state = StreamState::PACKET_RESET;
403
             stream_state = StreamState::PACKET_RESET;
404
             SERIAL_ECHO_MSG("Resend request ", packet_retries);
404
             SERIAL_ECHO_MSG("Resend request ", packet_retries);
405
-            SERIAL_ECHOLNPAIR("rs", sync);
405
+            SERIAL_ECHOLNPGM("rs", sync);
406
           }
406
           }
407
           else
407
           else
408
             stream_state = StreamState::PACKET_ERROR;
408
             stream_state = StreamState::PACKET_ERROR;
412
           stream_state = StreamState::PACKET_RESEND;
412
           stream_state = StreamState::PACKET_RESEND;
413
           break;
413
           break;
414
         case StreamState::PACKET_ERROR:
414
         case StreamState::PACKET_ERROR:
415
-          SERIAL_ECHOLNPAIR("fe", packet.header.sync);
415
+          SERIAL_ECHOLNPGM("fe", packet.header.sync);
416
           reset(); // reset everything, resync required
416
           reset(); // reset everything, resync required
417
           stream_state = StreamState::PACKET_RESET;
417
           stream_state = StreamState::PACKET_RESET;
418
           break;
418
           break;

+ 4
- 4
Marlin/src/feature/bltouch.cpp Voir le fichier

39
 #include "../core/debug_out.h"
39
 #include "../core/debug_out.h"
40
 
40
 
41
 bool BLTouch::command(const BLTCommand cmd, const millis_t &ms) {
41
 bool BLTouch::command(const BLTCommand cmd, const millis_t &ms) {
42
-  if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPAIR("BLTouch Command :", cmd);
42
+  if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("BLTouch Command :", cmd);
43
   MOVE_SERVO(Z_PROBE_SERVO_NR, cmd);
43
   MOVE_SERVO(Z_PROBE_SERVO_NR, cmd);
44
   safe_delay(_MAX(ms, (uint32_t)BLTOUCH_DELAY)); // BLTOUCH_DELAY is also the *minimum* delay
44
   safe_delay(_MAX(ms, (uint32_t)BLTOUCH_DELAY)); // BLTOUCH_DELAY is also the *minimum* delay
45
   return triggered();
45
   return triggered();
64
   #else
64
   #else
65
 
65
 
66
     if (DEBUGGING(LEVELING)) {
66
     if (DEBUGGING(LEVELING)) {
67
-      DEBUG_ECHOLNPAIR("last_written_mode - ", last_written_mode);
67
+      DEBUG_ECHOLNPGM("last_written_mode - ", last_written_mode);
68
       DEBUG_ECHOLNPGM("config mode - "
68
       DEBUG_ECHOLNPGM("config mode - "
69
         #if ENABLED(BLTOUCH_SET_5V_MODE)
69
         #if ENABLED(BLTOUCH_SET_5V_MODE)
70
           "BLTOUCH_SET_5V_MODE"
70
           "BLTOUCH_SET_5V_MODE"
175
   _set_SW_mode();              // Incidentally, _set_SW_mode() will also RESET any active alarm
175
   _set_SW_mode();              // Incidentally, _set_SW_mode() will also RESET any active alarm
176
   const bool tr = triggered(); // If triggered in SW mode, the pin is up, it is STOWED
176
   const bool tr = triggered(); // If triggered in SW mode, the pin is up, it is STOWED
177
 
177
 
178
-  if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("BLTouch is ", tr);
178
+  if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("BLTouch is ", tr);
179
 
179
 
180
   if (tr) _stow(); else _deploy();  // Turn off SW mode, reset any trigger, honor pin state
180
   if (tr) _stow(); else _deploy();  // Turn off SW mode, reset any trigger, honor pin state
181
   return !tr;
181
   return !tr;
187
    * BLTOUCH V3.0: This will set the mode (twice) and sadly, a STOW is needed at the end, because of the deploy
187
    * BLTOUCH V3.0: This will set the mode (twice) and sadly, a STOW is needed at the end, because of the deploy
188
    * BLTOUCH V3.1: This will set the mode and store it in the eeprom. The STOW is not needed but does not hurt
188
    * BLTOUCH V3.1: This will set the mode and store it in the eeprom. The STOW is not needed but does not hurt
189
    */
189
    */
190
-  if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("BLTouch Set Mode - ", M5V);
190
+  if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("BLTouch Set Mode - ", M5V);
191
   _deploy();
191
   _deploy();
192
   if (M5V) _set_5V_mode(); else _set_OD_mode();
192
   if (M5V) _set_5V_mode(); else _set_OD_mode();
193
   _mode_store();
193
   _mode_store();

+ 4
- 4
Marlin/src/feature/dac/stepper_dac.cpp Voir le fichier

85
   if (!dac_present) return;
85
   if (!dac_present) return;
86
   SERIAL_ECHO_MSG("Stepper current values in % (Amps):");
86
   SERIAL_ECHO_MSG("Stepper current values in % (Amps):");
87
   SERIAL_ECHO_START();
87
   SERIAL_ECHO_START();
88
-  SERIAL_ECHOPAIR_P(SP_X_LBL, dac_perc(X_AXIS), PSTR(" ("), dac_amps(X_AXIS), PSTR(")"));
88
+  SERIAL_ECHOPGM_P(SP_X_LBL, dac_perc(X_AXIS), PSTR(" ("), dac_amps(X_AXIS), PSTR(")"));
89
   #if HAS_Y_AXIS
89
   #if HAS_Y_AXIS
90
-    SERIAL_ECHOPAIR_P(SP_Y_LBL, dac_perc(Y_AXIS), PSTR(" ("), dac_amps(Y_AXIS), PSTR(")"));
90
+    SERIAL_ECHOPGM_P(SP_Y_LBL, dac_perc(Y_AXIS), PSTR(" ("), dac_amps(Y_AXIS), PSTR(")"));
91
   #endif
91
   #endif
92
   #if HAS_Z_AXIS
92
   #if HAS_Z_AXIS
93
-    SERIAL_ECHOPAIR_P(SP_Z_LBL, dac_perc(Z_AXIS), PSTR(" ("), dac_amps(Z_AXIS), PSTR(")"));
93
+    SERIAL_ECHOPGM_P(SP_Z_LBL, dac_perc(Z_AXIS), PSTR(" ("), dac_amps(Z_AXIS), PSTR(")"));
94
   #endif
94
   #endif
95
   #if HAS_EXTRUDERS
95
   #if HAS_EXTRUDERS
96
-    SERIAL_ECHOLNPAIR_P(SP_E_LBL, dac_perc(E_AXIS), PSTR(" ("), dac_amps(E_AXIS), PSTR(")"));
96
+    SERIAL_ECHOLNPGM_P(SP_E_LBL, dac_perc(E_AXIS), PSTR(" ("), dac_amps(E_AXIS), PSTR(")"));
97
   #endif
97
   #endif
98
 }
98
 }
99
 
99
 

+ 27
- 27
Marlin/src/feature/encoder_i2c.cpp Voir le fichier

49
 
49
 
50
   initialized = true;
50
   initialized = true;
51
 
51
 
52
-  SERIAL_ECHOLNPAIR("Setting up encoder on ", AS_CHAR(axis_codes[encoderAxis]), " axis, addr = ", address);
52
+  SERIAL_ECHOLNPGM("Setting up encoder on ", AS_CHAR(axis_codes[encoderAxis]), " axis, addr = ", address);
53
 
53
 
54
   position = get_position();
54
   position = get_position();
55
 }
55
 }
67
     /*
67
     /*
68
     if (trusted) { //commented out as part of the note below
68
     if (trusted) { //commented out as part of the note below
69
       trusted = false;
69
       trusted = false;
70
-      SERIAL_ECHOLNPAIR("Fault detected on ", AS_CHAR(axis_codes[encoderAxis]), " axis encoder. Disengaging error correction until module is trusted again.");
70
+      SERIAL_ECHOLNPGM("Fault detected on ", AS_CHAR(axis_codes[encoderAxis]), " axis encoder. Disengaging error correction until module is trusted again.");
71
     }
71
     }
72
     */
72
     */
73
     return;
73
     return;
92
       if (millis() - lastErrorTime > I2CPE_TIME_TRUSTED) {
92
       if (millis() - lastErrorTime > I2CPE_TIME_TRUSTED) {
93
         trusted = true;
93
         trusted = true;
94
 
94
 
95
-        SERIAL_ECHOLNPAIR("Untrusted encoder module on ", AS_CHAR(axis_codes[encoderAxis]), " axis has been fault-free for set duration, reinstating error correction.");
95
+        SERIAL_ECHOLNPGM("Untrusted encoder module on ", AS_CHAR(axis_codes[encoderAxis]), " axis has been fault-free for set duration, reinstating error correction.");
96
 
96
 
97
         //the encoder likely lost its place when the error occurred, so we'll reset and use the printer's
97
         //the encoder likely lost its place when the error occurred, so we'll reset and use the printer's
98
         //idea of where it the axis is to re-initialize
98
         //idea of where it the axis is to re-initialize
103
         zeroOffset -= (positionInTicks - get_position());
103
         zeroOffset -= (positionInTicks - get_position());
104
 
104
 
105
         #ifdef I2CPE_DEBUG
105
         #ifdef I2CPE_DEBUG
106
-          SERIAL_ECHOLNPAIR("Current position is ", pos);
107
-          SERIAL_ECHOLNPAIR("Position in encoder ticks is ", positionInTicks);
108
-          SERIAL_ECHOLNPAIR("New zero-offset of ", zeroOffset);
109
-          SERIAL_ECHOPAIR("New position reads as ", get_position());
106
+          SERIAL_ECHOLNPGM("Current position is ", pos);
107
+          SERIAL_ECHOLNPGM("Position in encoder ticks is ", positionInTicks);
108
+          SERIAL_ECHOLNPGM("New zero-offset of ", zeroOffset);
109
+          SERIAL_ECHOPGM("New position reads as ", get_position());
110
           SERIAL_CHAR('(');
110
           SERIAL_CHAR('(');
111
           SERIAL_DECIMAL(mm_from_count(get_position()));
111
           SERIAL_DECIMAL(mm_from_count(get_position()));
112
           SERIAL_ECHOLNPGM(")");
112
           SERIAL_ECHOLNPGM(")");
149
       const int32_t error = get_axis_error_steps(false);
149
       const int32_t error = get_axis_error_steps(false);
150
     #endif
150
     #endif
151
 
151
 
152
-    //SERIAL_ECHOLNPAIR("Axis error steps: ", error);
152
+    //SERIAL_ECHOLNPGM("Axis error steps: ", error);
153
 
153
 
154
     #ifdef I2CPE_ERR_THRESH_ABORT
154
     #ifdef I2CPE_ERR_THRESH_ABORT
155
       if (ABS(error) > I2CPE_ERR_THRESH_ABORT * planner.settings.axis_steps_per_mm[encoderAxis]) {
155
       if (ABS(error) > I2CPE_ERR_THRESH_ABORT * planner.settings.axis_steps_per_mm[encoderAxis]) {
156
         //kill(PSTR("Significant Error"));
156
         //kill(PSTR("Significant Error"));
157
-        SERIAL_ECHOLNPAIR("Axis error over threshold, aborting!", error);
157
+        SERIAL_ECHOLNPGM("Axis error over threshold, aborting!", error);
158
         safe_delay(5000);
158
         safe_delay(5000);
159
       }
159
       }
160
     #endif
160
     #endif
173
             LOOP_L_N(i, I2CPE_ERR_PRST_ARRAY_SIZE) sumP += errPrst[i];
173
             LOOP_L_N(i, I2CPE_ERR_PRST_ARRAY_SIZE) sumP += errPrst[i];
174
             const int32_t errorP = int32_t(sumP * RECIPROCAL(I2CPE_ERR_PRST_ARRAY_SIZE));
174
             const int32_t errorP = int32_t(sumP * RECIPROCAL(I2CPE_ERR_PRST_ARRAY_SIZE));
175
             SERIAL_CHAR(axis_codes[encoderAxis]);
175
             SERIAL_CHAR(axis_codes[encoderAxis]);
176
-            SERIAL_ECHOLNPAIR(" : CORRECT ERR ", errorP * planner.steps_to_mm[encoderAxis], "mm");
176
+            SERIAL_ECHOLNPGM(" : CORRECT ERR ", errorP * planner.steps_to_mm[encoderAxis], "mm");
177
             babystep.add_steps(encoderAxis, -LROUND(errorP));
177
             babystep.add_steps(encoderAxis, -LROUND(errorP));
178
             errPrstIdx = 0;
178
             errPrstIdx = 0;
179
           }
179
           }
193
       const millis_t ms = millis();
193
       const millis_t ms = millis();
194
       if (ELAPSED(ms, nextErrorCountTime)) {
194
       if (ELAPSED(ms, nextErrorCountTime)) {
195
         SERIAL_CHAR(axis_codes[encoderAxis]);
195
         SERIAL_CHAR(axis_codes[encoderAxis]);
196
-        SERIAL_ECHOLNPAIR(" : LARGE ERR ", error, "; diffSum=", diffSum);
196
+        SERIAL_ECHOLNPGM(" : LARGE ERR ", error, "; diffSum=", diffSum);
197
         errorCount++;
197
         errorCount++;
198
         nextErrorCountTime = ms + I2CPE_ERR_CNT_DEBOUNCE_MS;
198
         nextErrorCountTime = ms + I2CPE_ERR_CNT_DEBOUNCE_MS;
199
       }
199
       }
213
 
213
 
214
     #ifdef I2CPE_DEBUG
214
     #ifdef I2CPE_DEBUG
215
       SERIAL_CHAR(axis_codes[encoderAxis]);
215
       SERIAL_CHAR(axis_codes[encoderAxis]);
216
-      SERIAL_ECHOLNPAIR(" axis encoder homed, offset of ", zeroOffset, " ticks.");
216
+      SERIAL_ECHOLNPGM(" axis encoder homed, offset of ", zeroOffset, " ticks.");
217
     #endif
217
     #endif
218
   }
218
   }
219
 }
219
 }
253
 
253
 
254
   if (report) {
254
   if (report) {
255
     SERIAL_CHAR(axis_codes[encoderAxis]);
255
     SERIAL_CHAR(axis_codes[encoderAxis]);
256
-    SERIAL_ECHOLNPAIR(" axis target=", target, "mm; actual=", actual, "mm; err=", error, "mm");
256
+    SERIAL_ECHOLNPGM(" axis target=", target, "mm; actual=", actual, "mm; err=", error, "mm");
257
   }
257
   }
258
 
258
 
259
   return error;
259
   return error;
288
 
288
 
289
   if (report) {
289
   if (report) {
290
     SERIAL_CHAR(axis_codes[encoderAxis]);
290
     SERIAL_CHAR(axis_codes[encoderAxis]);
291
-    SERIAL_ECHOLNPAIR(" axis target=", target, "; actual=", encoderCountInStepperTicksScaled, "; err=", error);
291
+    SERIAL_ECHOLNPGM(" axis target=", target, "; actual=", encoderCountInStepperTicksScaled, "; err=", error);
292
   }
292
   }
293
 
293
 
294
   if (suppressOutput) {
294
   if (suppressOutput) {
424
 
424
 
425
     travelledDistance = mm_from_count(ABS(stopCount - startCount));
425
     travelledDistance = mm_from_count(ABS(stopCount - startCount));
426
 
426
 
427
-    SERIAL_ECHOLNPAIR("Attempted travel: ", travelDistance, "mm");
428
-    SERIAL_ECHOLNPAIR("   Actual travel:  ", travelledDistance, "mm");
427
+    SERIAL_ECHOLNPGM("Attempted travel: ", travelDistance, "mm");
428
+    SERIAL_ECHOLNPGM("   Actual travel:  ", travelledDistance, "mm");
429
 
429
 
430
     //Calculate new axis steps per unit
430
     //Calculate new axis steps per unit
431
     old_steps_mm = planner.settings.axis_steps_per_mm[encoderAxis];
431
     old_steps_mm = planner.settings.axis_steps_per_mm[encoderAxis];
432
     new_steps_mm = (old_steps_mm * travelDistance) / travelledDistance;
432
     new_steps_mm = (old_steps_mm * travelDistance) / travelledDistance;
433
 
433
 
434
-    SERIAL_ECHOLNPAIR("Old steps/mm: ", old_steps_mm);
435
-    SERIAL_ECHOLNPAIR("New steps/mm: ", new_steps_mm);
434
+    SERIAL_ECHOLNPGM("Old steps/mm: ", old_steps_mm);
435
+    SERIAL_ECHOLNPGM("New steps/mm: ", new_steps_mm);
436
 
436
 
437
     //Save new value
437
     //Save new value
438
     planner.settings.axis_steps_per_mm[encoderAxis] = new_steps_mm;
438
     planner.settings.axis_steps_per_mm[encoderAxis] = new_steps_mm;
449
 
449
 
450
   if (iter > 1) {
450
   if (iter > 1) {
451
     total /= (float)iter;
451
     total /= (float)iter;
452
-    SERIAL_ECHOLNPAIR("Average steps/mm: ", total);
452
+    SERIAL_ECHOLNPGM("Average steps/mm: ", total);
453
   }
453
   }
454
 
454
 
455
   ec = oldec;
455
   ec = oldec;
675
   // First check 'new' address is not in use
675
   // First check 'new' address is not in use
676
   Wire.beginTransmission(I2C_ADDRESS(newaddr));
676
   Wire.beginTransmission(I2C_ADDRESS(newaddr));
677
   if (!Wire.endTransmission()) {
677
   if (!Wire.endTransmission()) {
678
-    SERIAL_ECHOLNPAIR("?There is already a device with that address on the I2C bus! (", newaddr, ")");
678
+    SERIAL_ECHOLNPGM("?There is already a device with that address on the I2C bus! (", newaddr, ")");
679
     return;
679
     return;
680
   }
680
   }
681
 
681
 
682
   // Now check that we can find the module on the oldaddr address
682
   // Now check that we can find the module on the oldaddr address
683
   Wire.beginTransmission(I2C_ADDRESS(oldaddr));
683
   Wire.beginTransmission(I2C_ADDRESS(oldaddr));
684
   if (Wire.endTransmission()) {
684
   if (Wire.endTransmission()) {
685
-    SERIAL_ECHOLNPAIR("?No module detected at this address! (", oldaddr, ")");
685
+    SERIAL_ECHOLNPGM("?No module detected at this address! (", oldaddr, ")");
686
     return;
686
     return;
687
   }
687
   }
688
 
688
 
689
-  SERIAL_ECHOLNPAIR("Module found at ", oldaddr, ", changing address to ", newaddr);
689
+  SERIAL_ECHOLNPGM("Module found at ", oldaddr, ", changing address to ", newaddr);
690
 
690
 
691
   // Change the modules address
691
   // Change the modules address
692
   Wire.beginTransmission(I2C_ADDRESS(oldaddr));
692
   Wire.beginTransmission(I2C_ADDRESS(oldaddr));
722
   // First check there is a module
722
   // First check there is a module
723
   Wire.beginTransmission(I2C_ADDRESS(address));
723
   Wire.beginTransmission(I2C_ADDRESS(address));
724
   if (Wire.endTransmission()) {
724
   if (Wire.endTransmission()) {
725
-    SERIAL_ECHOLNPAIR("?No module detected at this address! (", address, ")");
725
+    SERIAL_ECHOLNPGM("?No module detected at this address! (", address, ")");
726
     return;
726
     return;
727
   }
727
   }
728
 
728
 
729
-  SERIAL_ECHOLNPAIR("Requesting version info from module at address ", address, ":");
729
+  SERIAL_ECHOLNPGM("Requesting version info from module at address ", address, ":");
730
 
730
 
731
   Wire.beginTransmission(I2C_ADDRESS(address));
731
   Wire.beginTransmission(I2C_ADDRESS(address));
732
   Wire.write(I2CPE_SET_REPORT_MODE);
732
   Wire.write(I2CPE_SET_REPORT_MODE);
773
   else if (parser.seenval('I')) {
773
   else if (parser.seenval('I')) {
774
 
774
 
775
     if (!parser.has_value()) {
775
     if (!parser.has_value()) {
776
-      SERIAL_ECHOLNPAIR("?I seen, but no index specified! [0-", I2CPE_ENCODER_CNT - 1, "]");
776
+      SERIAL_ECHOLNPGM("?I seen, but no index specified! [0-", I2CPE_ENCODER_CNT - 1, "]");
777
       return I2CPE_PARSE_ERR;
777
       return I2CPE_PARSE_ERR;
778
     };
778
     };
779
 
779
 
780
     I2CPE_idx = parser.value_byte();
780
     I2CPE_idx = parser.value_byte();
781
     if (I2CPE_idx >= I2CPE_ENCODER_CNT) {
781
     if (I2CPE_idx >= I2CPE_ENCODER_CNT) {
782
-      SERIAL_ECHOLNPAIR("?Index out of range. [0-", I2CPE_ENCODER_CNT - 1, "]");
782
+      SERIAL_ECHOLNPGM("?Index out of range. [0-", I2CPE_ENCODER_CNT - 1, "]");
783
       return I2CPE_PARSE_ERR;
783
       return I2CPE_PARSE_ERR;
784
     }
784
     }
785
 
785
 
954
     else return;
954
     else return;
955
   }
955
   }
956
 
956
 
957
-  SERIAL_ECHOLNPAIR("Changing module at address ", I2CPE_addr, " to address ", newAddress);
957
+  SERIAL_ECHOLNPGM("Changing module at address ", I2CPE_addr, " to address ", newAddress);
958
 
958
 
959
   change_module_address(I2CPE_addr, newAddress);
959
   change_module_address(I2CPE_addr, newAddress);
960
 }
960
 }

+ 6
- 6
Marlin/src/feature/encoder_i2c.h Voir le fichier

236
 
236
 
237
     static void report_status(const int8_t idx) {
237
     static void report_status(const int8_t idx) {
238
       CHECK_IDX();
238
       CHECK_IDX();
239
-      SERIAL_ECHOLNPAIR("Encoder ", idx, ": ");
239
+      SERIAL_ECHOLNPGM("Encoder ", idx, ": ");
240
       encoders[idx].get_raw_count();
240
       encoders[idx].get_raw_count();
241
       encoders[idx].passes_test(true);
241
       encoders[idx].passes_test(true);
242
     }
242
     }
261
 
261
 
262
     static void report_error_count(const int8_t idx, const AxisEnum axis) {
262
     static void report_error_count(const int8_t idx, const AxisEnum axis) {
263
       CHECK_IDX();
263
       CHECK_IDX();
264
-      SERIAL_ECHOLNPAIR("Error count on ", AS_CHAR(axis_codes[axis]), " axis is ", encoders[idx].get_error_count());
264
+      SERIAL_ECHOLNPGM("Error count on ", AS_CHAR(axis_codes[axis]), " axis is ", encoders[idx].get_error_count());
265
     }
265
     }
266
 
266
 
267
     static void reset_error_count(const int8_t idx, const AxisEnum axis) {
267
     static void reset_error_count(const int8_t idx, const AxisEnum axis) {
268
       CHECK_IDX();
268
       CHECK_IDX();
269
       encoders[idx].set_error_count(0);
269
       encoders[idx].set_error_count(0);
270
-      SERIAL_ECHOLNPAIR("Error count on ", AS_CHAR(axis_codes[axis]), " axis has been reset.");
270
+      SERIAL_ECHOLNPGM("Error count on ", AS_CHAR(axis_codes[axis]), " axis has been reset.");
271
     }
271
     }
272
 
272
 
273
     static void enable_ec(const int8_t idx, const bool enabled, const AxisEnum axis) {
273
     static void enable_ec(const int8_t idx, const bool enabled, const AxisEnum axis) {
274
       CHECK_IDX();
274
       CHECK_IDX();
275
       encoders[idx].set_ec_enabled(enabled);
275
       encoders[idx].set_ec_enabled(enabled);
276
-      SERIAL_ECHOPAIR("Error correction on ", AS_CHAR(axis_codes[axis]));
276
+      SERIAL_ECHOPGM("Error correction on ", AS_CHAR(axis_codes[axis]));
277
       SERIAL_ECHO_TERNARY(encoders[idx].get_ec_enabled(), " axis is ", "en", "dis", "abled.\n");
277
       SERIAL_ECHO_TERNARY(encoders[idx].get_ec_enabled(), " axis is ", "en", "dis", "abled.\n");
278
     }
278
     }
279
 
279
 
280
     static void set_ec_threshold(const int8_t idx, const float newThreshold, const AxisEnum axis) {
280
     static void set_ec_threshold(const int8_t idx, const float newThreshold, const AxisEnum axis) {
281
       CHECK_IDX();
281
       CHECK_IDX();
282
       encoders[idx].set_ec_threshold(newThreshold);
282
       encoders[idx].set_ec_threshold(newThreshold);
283
-      SERIAL_ECHOLNPAIR("Error correct threshold for ", AS_CHAR(axis_codes[axis]), " axis set to ", newThreshold, "mm.");
283
+      SERIAL_ECHOLNPGM("Error correct threshold for ", AS_CHAR(axis_codes[axis]), " axis set to ", newThreshold, "mm.");
284
     }
284
     }
285
 
285
 
286
     static void get_ec_threshold(const int8_t idx, const AxisEnum axis) {
286
     static void get_ec_threshold(const int8_t idx, const AxisEnum axis) {
287
       CHECK_IDX();
287
       CHECK_IDX();
288
       const float threshold = encoders[idx].get_ec_threshold();
288
       const float threshold = encoders[idx].get_ec_threshold();
289
-      SERIAL_ECHOLNPAIR("Error correct threshold for ", AS_CHAR(axis_codes[axis]), " axis is ", threshold, "mm.");
289
+      SERIAL_ECHOLNPGM("Error correct threshold for ", AS_CHAR(axis_codes[axis]), " axis is ", threshold, "mm.");
290
     }
290
     }
291
 
291
 
292
     static int8_t idx_from_axis(const AxisEnum axis) {
292
     static int8_t idx_from_axis(const AxisEnum axis) {

+ 17
- 17
Marlin/src/feature/fwretract.cpp Voir le fichier

106
   #endif
106
   #endif
107
 
107
 
108
   /* // debugging
108
   /* // debugging
109
-    SERIAL_ECHOLNPAIR(
109
+    SERIAL_ECHOLNPGM(
110
       "retracting ", AS_DIGIT(retracting),
110
       "retracting ", AS_DIGIT(retracting),
111
       " swapping ", swapping,
111
       " swapping ", swapping,
112
       " active extruder ", active_extruder
112
       " active extruder ", active_extruder
113
     );
113
     );
114
     LOOP_L_N(i, EXTRUDERS) {
114
     LOOP_L_N(i, EXTRUDERS) {
115
-      SERIAL_ECHOLNPAIR("retracted[", i, "] ", AS_DIGIT(retracted[i]));
115
+      SERIAL_ECHOLNPGM("retracted[", i, "] ", AS_DIGIT(retracted[i]));
116
       #if HAS_MULTI_EXTRUDER
116
       #if HAS_MULTI_EXTRUDER
117
-        SERIAL_ECHOLNPAIR("retracted_swap[", i, "] ", AS_DIGIT(retracted_swap[i]));
117
+        SERIAL_ECHOLNPGM("retracted_swap[", i, "] ", AS_DIGIT(retracted_swap[i]));
118
       #endif
118
       #endif
119
     }
119
     }
120
-    SERIAL_ECHOLNPAIR("current_position.z ", current_position.z);
121
-    SERIAL_ECHOLNPAIR("current_position.e ", current_position.e);
122
-    SERIAL_ECHOLNPAIR("current_hop ", current_hop);
120
+    SERIAL_ECHOLNPGM("current_position.z ", current_position.z);
121
+    SERIAL_ECHOLNPGM("current_position.e ", current_position.e);
122
+    SERIAL_ECHOLNPGM("current_hop ", current_hop);
123
   //*/
123
   //*/
124
 
124
 
125
   const float base_retract = TERN1(RETRACT_SYNC_MIXING, (MIXING_STEPPERS))
125
   const float base_retract = TERN1(RETRACT_SYNC_MIXING, (MIXING_STEPPERS))
181
   #endif
181
   #endif
182
 
182
 
183
   /* // debugging
183
   /* // debugging
184
-    SERIAL_ECHOLNPAIR("retracting ", AS_DIGIT(retracting));
185
-    SERIAL_ECHOLNPAIR("swapping ", AS_DIGIT(swapping));
186
-    SERIAL_ECHOLNPAIR("active_extruder ", active_extruder);
184
+    SERIAL_ECHOLNPGM("retracting ", AS_DIGIT(retracting));
185
+    SERIAL_ECHOLNPGM("swapping ", AS_DIGIT(swapping));
186
+    SERIAL_ECHOLNPGM("active_extruder ", active_extruder);
187
     LOOP_L_N(i, EXTRUDERS) {
187
     LOOP_L_N(i, EXTRUDERS) {
188
-      SERIAL_ECHOLNPAIR("retracted[", i, "] ", AS_DIGIT(retracted[i]));
188
+      SERIAL_ECHOLNPGM("retracted[", i, "] ", AS_DIGIT(retracted[i]));
189
       #if HAS_MULTI_EXTRUDER
189
       #if HAS_MULTI_EXTRUDER
190
-        SERIAL_ECHOLNPAIR("retracted_swap[", i, "] ", AS_DIGIT(retracted_swap[i]));
190
+        SERIAL_ECHOLNPGM("retracted_swap[", i, "] ", AS_DIGIT(retracted_swap[i]));
191
       #endif
191
       #endif
192
     }
192
     }
193
-    SERIAL_ECHOLNPAIR("current_position.z ", current_position.z);
194
-    SERIAL_ECHOLNPAIR("current_position.e ", current_position.e);
195
-    SERIAL_ECHOLNPAIR("current_hop ", current_hop);
193
+    SERIAL_ECHOLNPGM("current_position.z ", current_position.z);
194
+    SERIAL_ECHOLNPGM("current_position.e ", current_position.e);
195
+    SERIAL_ECHOLNPGM("current_hop ", current_hop);
196
   //*/
196
   //*/
197
 }
197
 }
198
 
198
 
215
 }
215
 }
216
 
216
 
217
 void FWRetract::M207_report() {
217
 void FWRetract::M207_report() {
218
-  SERIAL_ECHOLNPAIR_P(
218
+  SERIAL_ECHOLNPGM_P(
219
       PSTR("  M207 S"), LINEAR_UNIT(settings.retract_length)
219
       PSTR("  M207 S"), LINEAR_UNIT(settings.retract_length)
220
     , PSTR(" W"), LINEAR_UNIT(settings.swap_retract_length)
220
     , PSTR(" W"), LINEAR_UNIT(settings.swap_retract_length)
221
     , PSTR(" F"), LINEAR_UNIT(MMS_TO_MMM(settings.retract_feedrate_mm_s))
221
     , PSTR(" F"), LINEAR_UNIT(MMS_TO_MMM(settings.retract_feedrate_mm_s))
240
 }
240
 }
241
 
241
 
242
 void FWRetract::M208_report() {
242
 void FWRetract::M208_report() {
243
-  SERIAL_ECHOLNPAIR(
243
+  SERIAL_ECHOLNPGM(
244
       "  M208 S", LINEAR_UNIT(settings.retract_recover_extra)
244
       "  M208 S", LINEAR_UNIT(settings.retract_recover_extra)
245
     , " W", LINEAR_UNIT(settings.swap_retract_recover_extra)
245
     , " W", LINEAR_UNIT(settings.swap_retract_recover_extra)
246
     , " F", LINEAR_UNIT(MMS_TO_MMM(settings.retract_recover_feedrate_mm_s))
246
     , " F", LINEAR_UNIT(MMS_TO_MMM(settings.retract_recover_feedrate_mm_s))
261
   }
261
   }
262
 
262
 
263
   void FWRetract::M209_report() {
263
   void FWRetract::M209_report() {
264
-    SERIAL_ECHOLNPAIR("  M209 S", AS_DIGIT(autoretract_enabled));
264
+    SERIAL_ECHOLNPGM("  M209 S", AS_DIGIT(autoretract_enabled));
265
   }
265
   }
266
 
266
 
267
 #endif // FWRETRACT_AUTORETRACT
267
 #endif // FWRETRACT_AUTORETRACT

+ 3
- 3
Marlin/src/feature/joystick.cpp Voir le fichier

68
   void Joystick::report() {
68
   void Joystick::report() {
69
     SERIAL_ECHOPGM("Joystick");
69
     SERIAL_ECHOPGM("Joystick");
70
     #if HAS_JOY_ADC_X
70
     #if HAS_JOY_ADC_X
71
-      SERIAL_ECHOPAIR_P(SP_X_STR, JOY_X(x.raw));
71
+      SERIAL_ECHOPGM_P(SP_X_STR, JOY_X(x.raw));
72
     #endif
72
     #endif
73
     #if HAS_JOY_ADC_Y
73
     #if HAS_JOY_ADC_Y
74
-      SERIAL_ECHOPAIR_P(SP_Y_STR, JOY_Y(y.raw));
74
+      SERIAL_ECHOPGM_P(SP_Y_STR, JOY_Y(y.raw));
75
     #endif
75
     #endif
76
     #if HAS_JOY_ADC_Z
76
     #if HAS_JOY_ADC_Z
77
-      SERIAL_ECHOPAIR_P(SP_Z_STR, JOY_Z(z.raw));
77
+      SERIAL_ECHOPGM_P(SP_Z_STR, JOY_Z(z.raw));
78
     #endif
78
     #endif
79
     #if HAS_JOY_ADC_EN
79
     #if HAS_JOY_ADC_EN
80
       SERIAL_ECHO_TERNARY(READ(JOY_EN_PIN), " EN=", "HIGH (dis", "LOW (en", "abled)");
80
       SERIAL_ECHO_TERNARY(READ(JOY_EN_PIN), " EN=", "HIGH (dis", "LOW (en", "abled)");

+ 1
- 1
Marlin/src/feature/max7219.cpp Voir le fichier

130
     SERIAL_ECHOPGM_P(func);
130
     SERIAL_ECHOPGM_P(func);
131
     SERIAL_CHAR('(');
131
     SERIAL_CHAR('(');
132
     SERIAL_ECHO(v1);
132
     SERIAL_ECHO(v1);
133
-    if (v2 > 0) SERIAL_ECHOPAIR(", ", v2);
133
+    if (v2 > 0) SERIAL_ECHOPGM(", ", v2);
134
     SERIAL_CHAR(')');
134
     SERIAL_CHAR(')');
135
     SERIAL_EOL();
135
     SERIAL_EOL();
136
   #else
136
   #else

+ 1
- 1
Marlin/src/feature/meatpack.cpp Voir le fichier

140
   #if ENABLED(MP_DEBUG)
140
   #if ENABLED(MP_DEBUG)
141
     if (chars_decoded < 1024) {
141
     if (chars_decoded < 1024) {
142
       ++chars_decoded;
142
       ++chars_decoded;
143
-      DEBUG_ECHOLNPAIR("RB: ", AS_CHAR(c));
143
+      DEBUG_ECHOLNPGM("RB: ", AS_CHAR(c));
144
     }
144
     }
145
   #endif
145
   #endif
146
 }
146
 }

+ 2
- 2
Marlin/src/feature/mixing.cpp Voir le fichier

154
     cmax = _MAX(cmax, v);
154
     cmax = _MAX(cmax, v);
155
     csum += v;
155
     csum += v;
156
   }
156
   }
157
-  //SERIAL_ECHOPAIR("Mixer::refresh_collector(", proportion, ", ", t, ") cmax=", cmax, "  csum=", csum, "  color");
157
+  //SERIAL_ECHOPGM("Mixer::refresh_collector(", proportion, ", ", t, ") cmax=", cmax, "  csum=", csum, "  color");
158
   const float inv_prop = proportion / csum;
158
   const float inv_prop = proportion / csum;
159
   MIXER_STEPPER_LOOP(i) {
159
   MIXER_STEPPER_LOOP(i) {
160
     c[i] = color[t][i] * inv_prop;
160
     c[i] = color[t][i] * inv_prop;
161
-    //SERIAL_ECHOPAIR(" [", t, "][", i, "] = ", color[t][i], " (", c[i], ")  ");
161
+    //SERIAL_ECHOPGM(" [", t, "][", i, "] = ", color[t][i], " (", c[i], ")  ");
162
   }
162
   }
163
   //SERIAL_EOL();
163
   //SERIAL_EOL();
164
 }
164
 }

+ 1
- 1
Marlin/src/feature/mixing.h Voir le fichier

152
       MIXER_STEPPER_LOOP(i) mix[i] = mixer_perc_t(100.0f * color[j][i] / ctot);
152
       MIXER_STEPPER_LOOP(i) mix[i] = mixer_perc_t(100.0f * color[j][i] / ctot);
153
 
153
 
154
       #ifdef MIXER_NORMALIZER_DEBUG
154
       #ifdef MIXER_NORMALIZER_DEBUG
155
-        SERIAL_ECHOPAIR("V-tool ", j, " [ ");
155
+        SERIAL_ECHOPGM("V-tool ", j, " [ ");
156
         SERIAL_ECHOLIST_N(MIXING_STEPPERS, color[j][0], color[j][1], color[j][2], color[j][3], color[j][4], color[j][5]);
156
         SERIAL_ECHOLIST_N(MIXING_STEPPERS, color[j][0], color[j][1], color[j][2], color[j][3], color[j][4], color[j][5]);
157
         SERIAL_ECHOPGM(" ] to Mix [ ");
157
         SERIAL_ECHOPGM(" ] to Mix [ ");
158
         SERIAL_ECHOLIST_N(MIXING_STEPPERS, mix[0], mix[1], mix[2], mix[3], mix[4], mix[5]);
158
         SERIAL_ECHOLIST_N(MIXING_STEPPERS, mix[0], mix[1], mix[2], mix[3], mix[4], mix[5]);

+ 9
- 9
Marlin/src/feature/mmu/mmu2.cpp Voir le fichier

169
       if (rx_ok()) {
169
       if (rx_ok()) {
170
         sscanf(rx_buffer, "%huok\n", &version);
170
         sscanf(rx_buffer, "%huok\n", &version);
171
 
171
 
172
-        DEBUG_ECHOLNPAIR("MMU => ", version, "\nMMU <= 'S2'");
172
+        DEBUG_ECHOLNPGM("MMU => ", version, "\nMMU <= 'S2'");
173
 
173
 
174
         MMU2_COMMAND("S2");   // Read Build Number
174
         MMU2_COMMAND("S2");   // Read Build Number
175
         state = -3;
175
         state = -3;
180
       if (rx_ok()) {
180
       if (rx_ok()) {
181
         sscanf(rx_buffer, "%huok\n", &buildnr);
181
         sscanf(rx_buffer, "%huok\n", &buildnr);
182
 
182
 
183
-        DEBUG_ECHOLNPAIR("MMU => ", buildnr);
183
+        DEBUG_ECHOLNPGM("MMU => ", buildnr);
184
 
184
 
185
         check_version();
185
         check_version();
186
 
186
 
217
       if (rx_ok()) {
217
       if (rx_ok()) {
218
         sscanf(rx_buffer, "%hhuok\n", &finda);
218
         sscanf(rx_buffer, "%hhuok\n", &finda);
219
 
219
 
220
-        DEBUG_ECHOLNPAIR("MMU => ", finda, "\nMMU - ENABLED");
220
+        DEBUG_ECHOLNPGM("MMU => ", finda, "\nMMU - ENABLED");
221
 
221
 
222
         _enabled = true;
222
         _enabled = true;
223
         state = 1;
223
         state = 1;
230
         if (WITHIN(cmd, MMU_CMD_T0, MMU_CMD_T0 + EXTRUDERS - 1)) {
230
         if (WITHIN(cmd, MMU_CMD_T0, MMU_CMD_T0 + EXTRUDERS - 1)) {
231
           // tool change
231
           // tool change
232
           int filament = cmd - MMU_CMD_T0;
232
           int filament = cmd - MMU_CMD_T0;
233
-          DEBUG_ECHOLNPAIR("MMU <= T", filament);
233
+          DEBUG_ECHOLNPGM("MMU <= T", filament);
234
           tx_printf_P(PSTR("T%d\n"), filament);
234
           tx_printf_P(PSTR("T%d\n"), filament);
235
           TERN_(MMU_EXTRUDER_SENSOR, mmu_idl_sens = 1); // enable idler sensor, if any
235
           TERN_(MMU_EXTRUDER_SENSOR, mmu_idl_sens = 1); // enable idler sensor, if any
236
           state = 3; // wait for response
236
           state = 3; // wait for response
238
         else if (WITHIN(cmd, MMU_CMD_L0, MMU_CMD_L0 + EXTRUDERS - 1)) {
238
         else if (WITHIN(cmd, MMU_CMD_L0, MMU_CMD_L0 + EXTRUDERS - 1)) {
239
           // load
239
           // load
240
           int filament = cmd - MMU_CMD_L0;
240
           int filament = cmd - MMU_CMD_L0;
241
-          DEBUG_ECHOLNPAIR("MMU <= L", filament);
241
+          DEBUG_ECHOLNPGM("MMU <= L", filament);
242
           tx_printf_P(PSTR("L%d\n"), filament);
242
           tx_printf_P(PSTR("L%d\n"), filament);
243
           state = 3; // wait for response
243
           state = 3; // wait for response
244
         }
244
         }
258
         else if (WITHIN(cmd, MMU_CMD_E0, MMU_CMD_E0 + EXTRUDERS - 1)) {
258
         else if (WITHIN(cmd, MMU_CMD_E0, MMU_CMD_E0 + EXTRUDERS - 1)) {
259
           // eject filament
259
           // eject filament
260
           int filament = cmd - MMU_CMD_E0;
260
           int filament = cmd - MMU_CMD_E0;
261
-          DEBUG_ECHOLNPAIR("MMU <= E", filament);
261
+          DEBUG_ECHOLNPGM("MMU <= E", filament);
262
           tx_printf_P(PSTR("E%d\n"), filament);
262
           tx_printf_P(PSTR("E%d\n"), filament);
263
           state = 3; // wait for response
263
           state = 3; // wait for response
264
         }
264
         }
271
         else if (WITHIN(cmd, MMU_CMD_F0, MMU_CMD_F0 + EXTRUDERS - 1)) {
271
         else if (WITHIN(cmd, MMU_CMD_F0, MMU_CMD_F0 + EXTRUDERS - 1)) {
272
           // filament type
272
           // filament type
273
           int filament = cmd - MMU_CMD_F0;
273
           int filament = cmd - MMU_CMD_F0;
274
-          DEBUG_ECHOLNPAIR("MMU <= F", filament, " ", cmd_arg);
274
+          DEBUG_ECHOLNPGM("MMU <= F", filament, " ", cmd_arg);
275
           tx_printf_P(PSTR("F%d %d\n"), filament, cmd_arg);
275
           tx_printf_P(PSTR("F%d %d\n"), filament, cmd_arg);
276
           state = 3; // wait for response
276
           state = 3; // wait for response
277
         }
277
         }
647
 
647
 
648
   void MMU2::mmu_continue_loading() {
648
   void MMU2::mmu_continue_loading() {
649
     for (uint8_t i = 0; i < MMU_LOADING_ATTEMPTS_NR; i++) {
649
     for (uint8_t i = 0; i < MMU_LOADING_ATTEMPTS_NR; i++) {
650
-      DEBUG_ECHOLNPAIR("Additional load attempt #", i);
650
+      DEBUG_ECHOLNPGM("Additional load attempt #", i);
651
       if (FILAMENT_PRESENT()) break;
651
       if (FILAMENT_PRESENT()) break;
652
       command(MMU_CMD_C0);
652
       command(MMU_CMD_C0);
653
       manage_response(true, true);
653
       manage_response(true, true);
1025
     const feedRate_t fr_mm_m = pgm_read_float(&(step->feedRate));
1025
     const feedRate_t fr_mm_m = pgm_read_float(&(step->feedRate));
1026
 
1026
 
1027
     DEBUG_ECHO_START();
1027
     DEBUG_ECHO_START();
1028
-    DEBUG_ECHOLNPAIR("E step ", es, "/", fr_mm_m);
1028
+    DEBUG_ECHOLNPGM("E step ", es, "/", fr_mm_m);
1029
 
1029
 
1030
     current_position.e += es;
1030
     current_position.e += es;
1031
     line_to_current_position(MMM_TO_MMS(fr_mm_m));
1031
     line_to_current_position(MMM_TO_MMS(fr_mm_m));

+ 9
- 9
Marlin/src/feature/pause.cpp Voir le fichier

132
  */
132
  */
133
 static bool ensure_safe_temperature(const bool wait=true, const PauseMode mode=PAUSE_MODE_SAME) {
133
 static bool ensure_safe_temperature(const bool wait=true, const PauseMode mode=PAUSE_MODE_SAME) {
134
   DEBUG_SECTION(est, "ensure_safe_temperature", true);
134
   DEBUG_SECTION(est, "ensure_safe_temperature", true);
135
-  DEBUG_ECHOLNPAIR("... wait:", wait, " mode:", mode);
135
+  DEBUG_ECHOLNPGM("... wait:", wait, " mode:", mode);
136
 
136
 
137
   #if ENABLED(PREVENT_COLD_EXTRUSION)
137
   #if ENABLED(PREVENT_COLD_EXTRUSION)
138
     if (!DEBUGGING(DRYRUN) && thermalManager.targetTooColdToExtrude(active_extruder))
138
     if (!DEBUGGING(DRYRUN) && thermalManager.targetTooColdToExtrude(active_extruder))
178
                    DXC_ARGS
178
                    DXC_ARGS
179
 ) {
179
 ) {
180
   DEBUG_SECTION(lf, "load_filament", true);
180
   DEBUG_SECTION(lf, "load_filament", true);
181
-  DEBUG_ECHOLNPAIR("... slowlen:", slow_load_length, " fastlen:", fast_load_length, " purgelen:", purge_length, " maxbeep:", max_beep_count, " showlcd:", show_lcd, " pauseforuser:", pause_for_user, " pausemode:", mode DXC_SAY);
181
+  DEBUG_ECHOLNPGM("... slowlen:", slow_load_length, " fastlen:", fast_load_length, " purgelen:", purge_length, " maxbeep:", max_beep_count, " showlcd:", show_lcd, " pauseforuser:", pause_for_user, " pausemode:", mode DXC_SAY);
182
 
182
 
183
   if (!ensure_safe_temperature(false, mode)) {
183
   if (!ensure_safe_temperature(false, mode)) {
184
     if (show_lcd) ui.pause_show_message(PAUSE_MESSAGE_STATUS, mode);
184
     if (show_lcd) ui.pause_show_message(PAUSE_MESSAGE_STATUS, mode);
315
                      #endif
315
                      #endif
316
 ) {
316
 ) {
317
   DEBUG_SECTION(uf, "unload_filament", true);
317
   DEBUG_SECTION(uf, "unload_filament", true);
318
-  DEBUG_ECHOLNPAIR("... unloadlen:", unload_length, " showlcd:", show_lcd, " mode:", mode
318
+  DEBUG_ECHOLNPGM("... unloadlen:", unload_length, " showlcd:", show_lcd, " mode:", mode
319
     #if BOTH(FILAMENT_UNLOAD_ALL_EXTRUDERS, MIXING_EXTRUDER)
319
     #if BOTH(FILAMENT_UNLOAD_ALL_EXTRUDERS, MIXING_EXTRUDER)
320
       , " mixmult:", mix_multiplier
320
       , " mixmult:", mix_multiplier
321
     #endif
321
     #endif
379
 
379
 
380
 bool pause_print(const_float_t retract, const xyz_pos_t &park_point, const bool show_lcd/*=false*/, const_float_t unload_length/*=0*/ DXC_ARGS) {
380
 bool pause_print(const_float_t retract, const xyz_pos_t &park_point, const bool show_lcd/*=false*/, const_float_t unload_length/*=0*/ DXC_ARGS) {
381
   DEBUG_SECTION(pp, "pause_print", true);
381
   DEBUG_SECTION(pp, "pause_print", true);
382
-  DEBUG_ECHOLNPAIR("... park.x:", park_point.x, " y:", park_point.y, " z:", park_point.z, " unloadlen:", unload_length, " showlcd:", show_lcd DXC_SAY);
382
+  DEBUG_ECHOLNPGM("... park.x:", park_point.x, " y:", park_point.y, " z:", park_point.z, " unloadlen:", unload_length, " showlcd:", show_lcd DXC_SAY);
383
 
383
 
384
   UNUSED(show_lcd);
384
   UNUSED(show_lcd);
385
 
385
 
430
 
430
 
431
   // Initial retract before move to filament change position
431
   // Initial retract before move to filament change position
432
   if (retract && thermalManager.hotEnoughToExtrude(active_extruder)) {
432
   if (retract && thermalManager.hotEnoughToExtrude(active_extruder)) {
433
-    DEBUG_ECHOLNPAIR("... retract:", retract);
433
+    DEBUG_ECHOLNPGM("... retract:", retract);
434
     unscaled_e_move(retract, PAUSE_PARK_RETRACT_FEEDRATE);
434
     unscaled_e_move(retract, PAUSE_PARK_RETRACT_FEEDRATE);
435
   }
435
   }
436
 
436
 
472
 
472
 
473
 void show_continue_prompt(const bool is_reload) {
473
 void show_continue_prompt(const bool is_reload) {
474
   DEBUG_SECTION(scp, "pause_print", true);
474
   DEBUG_SECTION(scp, "pause_print", true);
475
-  DEBUG_ECHOLNPAIR("... is_reload:", is_reload);
475
+  DEBUG_ECHOLNPGM("... is_reload:", is_reload);
476
 
476
 
477
   ui.pause_show_message(is_reload ? PAUSE_MESSAGE_INSERT : PAUSE_MESSAGE_WAITING);
477
   ui.pause_show_message(is_reload ? PAUSE_MESSAGE_INSERT : PAUSE_MESSAGE_WAITING);
478
   SERIAL_ECHO_START();
478
   SERIAL_ECHO_START();
481
 
481
 
482
 void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep_count/*=0*/ DXC_ARGS) {
482
 void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep_count/*=0*/ DXC_ARGS) {
483
   DEBUG_SECTION(wfc, "wait_for_confirmation", true);
483
   DEBUG_SECTION(wfc, "wait_for_confirmation", true);
484
-  DEBUG_ECHOLNPAIR("... is_reload:", is_reload, " maxbeep:", max_beep_count DXC_SAY);
484
+  DEBUG_ECHOLNPGM("... is_reload:", is_reload, " maxbeep:", max_beep_count DXC_SAY);
485
 
485
 
486
   bool nozzle_timed_out = false;
486
   bool nozzle_timed_out = false;
487
 
487
 
584
  */
584
  */
585
 void resume_print(const_float_t slow_load_length/*=0*/, const_float_t fast_load_length/*=0*/, const_float_t purge_length/*=ADVANCED_PAUSE_PURGE_LENGTH*/, const int8_t max_beep_count/*=0*/, const celsius_t targetTemp/*=0*/ DXC_ARGS) {
585
 void resume_print(const_float_t slow_load_length/*=0*/, const_float_t fast_load_length/*=0*/, const_float_t purge_length/*=ADVANCED_PAUSE_PURGE_LENGTH*/, const int8_t max_beep_count/*=0*/, const celsius_t targetTemp/*=0*/ DXC_ARGS) {
586
   DEBUG_SECTION(rp, "resume_print", true);
586
   DEBUG_SECTION(rp, "resume_print", true);
587
-  DEBUG_ECHOLNPAIR("... slowlen:", slow_load_length, " fastlen:", fast_load_length, " purgelen:", purge_length, " maxbeep:", max_beep_count, " targetTemp:", targetTemp DXC_SAY);
587
+  DEBUG_ECHOLNPGM("... slowlen:", slow_load_length, " fastlen:", fast_load_length, " purgelen:", purge_length, " maxbeep:", max_beep_count, " targetTemp:", targetTemp DXC_SAY);
588
 
588
 
589
   /*
589
   /*
590
-  SERIAL_ECHOLNPAIR(
590
+  SERIAL_ECHOLNPGM(
591
     "start of resume_print()\ndual_x_carriage_mode:", dual_x_carriage_mode,
591
     "start of resume_print()\ndual_x_carriage_mode:", dual_x_carriage_mode,
592
     "\nextruder_duplication_enabled:", extruder_duplication_enabled,
592
     "\nextruder_duplication_enabled:", extruder_duplication_enabled,
593
     "\nactive_extruder:", active_extruder,
593
     "\nactive_extruder:", active_extruder,

+ 17
- 17
Marlin/src/feature/powerloss.cpp Voir le fichier

577
 
577
 
578
   void PrintJobRecovery::debug(PGM_P const prefix) {
578
   void PrintJobRecovery::debug(PGM_P const prefix) {
579
     DEBUG_ECHOPGM_P(prefix);
579
     DEBUG_ECHOPGM_P(prefix);
580
-    DEBUG_ECHOLNPAIR(" Job Recovery Info...\nvalid_head:", info.valid_head, " valid_foot:", info.valid_foot);
580
+    DEBUG_ECHOLNPGM(" Job Recovery Info...\nvalid_head:", info.valid_head, " valid_foot:", info.valid_foot);
581
     if (info.valid_head) {
581
     if (info.valid_head) {
582
       if (info.valid_head == info.valid_foot) {
582
       if (info.valid_head == info.valid_foot) {
583
         DEBUG_ECHOPGM("current_position: ");
583
         DEBUG_ECHOPGM("current_position: ");
587
         }
587
         }
588
         DEBUG_EOL();
588
         DEBUG_EOL();
589
 
589
 
590
-        DEBUG_ECHOLNPAIR("feedrate: ", info.feedrate);
590
+        DEBUG_ECHOLNPGM("feedrate: ", info.feedrate);
591
 
591
 
592
-        DEBUG_ECHOLNPAIR("zraise: ", info.zraise, " ", info.flag.raised ? "(before)" : "");
592
+        DEBUG_ECHOLNPGM("zraise: ", info.zraise, " ", info.flag.raised ? "(before)" : "");
593
 
593
 
594
         #if ENABLED(GCODE_REPEAT_MARKERS)
594
         #if ENABLED(GCODE_REPEAT_MARKERS)
595
-          DEBUG_ECHOLNPAIR("repeat index: ", info.stored_repeat.index);
595
+          DEBUG_ECHOLNPGM("repeat index: ", info.stored_repeat.index);
596
           LOOP_L_N(i, info.stored_repeat.index)
596
           LOOP_L_N(i, info.stored_repeat.index)
597
-            DEBUG_ECHOLNPAIR("..... sdpos: ", info.stored_repeat.marker.sdpos, " count: ", info.stored_repeat.marker.counter);
597
+            DEBUG_ECHOLNPGM("..... sdpos: ", info.stored_repeat.marker.sdpos, " count: ", info.stored_repeat.marker.counter);
598
         #endif
598
         #endif
599
 
599
 
600
         #if HAS_HOME_OFFSET
600
         #if HAS_HOME_OFFSET
616
         #endif
616
         #endif
617
 
617
 
618
         #if HAS_MULTI_EXTRUDER
618
         #if HAS_MULTI_EXTRUDER
619
-          DEBUG_ECHOLNPAIR("active_extruder: ", info.active_extruder);
619
+          DEBUG_ECHOLNPGM("active_extruder: ", info.active_extruder);
620
         #endif
620
         #endif
621
 
621
 
622
         #if DISABLED(NO_VOLUMETRICS)
622
         #if DISABLED(NO_VOLUMETRICS)
623
           DEBUG_ECHOPGM("filament_size:");
623
           DEBUG_ECHOPGM("filament_size:");
624
-          LOOP_L_N(i, EXTRUDERS) DEBUG_ECHOLNPAIR(" ", info.filament_size[i]);
624
+          LOOP_L_N(i, EXTRUDERS) DEBUG_ECHOLNPGM(" ", info.filament_size[i]);
625
           DEBUG_EOL();
625
           DEBUG_EOL();
626
         #endif
626
         #endif
627
 
627
 
635
         #endif
635
         #endif
636
 
636
 
637
         #if HAS_HEATED_BED
637
         #if HAS_HEATED_BED
638
-          DEBUG_ECHOLNPAIR("target_temperature_bed: ", info.target_temperature_bed);
638
+          DEBUG_ECHOLNPGM("target_temperature_bed: ", info.target_temperature_bed);
639
         #endif
639
         #endif
640
 
640
 
641
         #if HAS_FAN
641
         #if HAS_FAN
648
         #endif
648
         #endif
649
 
649
 
650
         #if HAS_LEVELING
650
         #if HAS_LEVELING
651
-          DEBUG_ECHOLNPAIR("leveling: ", info.flag.leveling ? "ON" : "OFF", "  fade: ", info.fade);
651
+          DEBUG_ECHOLNPGM("leveling: ", info.flag.leveling ? "ON" : "OFF", "  fade: ", info.fade);
652
         #endif
652
         #endif
653
 
653
 
654
         #if ENABLED(FWRETRACT)
654
         #if ENABLED(FWRETRACT)
658
             if (e < EXTRUDERS - 1) DEBUG_CHAR(',');
658
             if (e < EXTRUDERS - 1) DEBUG_CHAR(',');
659
           }
659
           }
660
           DEBUG_EOL();
660
           DEBUG_EOL();
661
-          DEBUG_ECHOLNPAIR("retract_hop: ", info.retract_hop);
661
+          DEBUG_ECHOLNPGM("retract_hop: ", info.retract_hop);
662
         #endif
662
         #endif
663
 
663
 
664
         // Mixing extruder and gradient
664
         // Mixing extruder and gradient
665
         #if BOTH(MIXING_EXTRUDER, GRADIENT_MIX)
665
         #if BOTH(MIXING_EXTRUDER, GRADIENT_MIX)
666
-          DEBUG_ECHOLNPAIR("gradient: ", info.gradient.enabled ? "ON" : "OFF");
666
+          DEBUG_ECHOLNPGM("gradient: ", info.gradient.enabled ? "ON" : "OFF");
667
         #endif
667
         #endif
668
 
668
 
669
-        DEBUG_ECHOLNPAIR("sd_filename: ", info.sd_filename);
670
-        DEBUG_ECHOLNPAIR("sdpos: ", info.sdpos);
671
-        DEBUG_ECHOLNPAIR("print_job_elapsed: ", info.print_job_elapsed);
669
+        DEBUG_ECHOLNPGM("sd_filename: ", info.sd_filename);
670
+        DEBUG_ECHOLNPGM("sdpos: ", info.sdpos);
671
+        DEBUG_ECHOLNPGM("print_job_elapsed: ", info.print_job_elapsed);
672
 
672
 
673
         DEBUG_ECHOPGM("axis_relative:");
673
         DEBUG_ECHOPGM("axis_relative:");
674
         if (TEST(info.axis_relative, REL_X)) DEBUG_ECHOPGM(" REL_X");
674
         if (TEST(info.axis_relative, REL_X)) DEBUG_ECHOPGM(" REL_X");
679
         if (TEST(info.axis_relative, E_MODE_REL)) DEBUG_ECHOPGM(" E_MODE_REL");
679
         if (TEST(info.axis_relative, E_MODE_REL)) DEBUG_ECHOPGM(" E_MODE_REL");
680
         DEBUG_EOL();
680
         DEBUG_EOL();
681
 
681
 
682
-        DEBUG_ECHOLNPAIR("flag.dryrun: ", AS_DIGIT(info.flag.dryrun));
683
-        DEBUG_ECHOLNPAIR("flag.allow_cold_extrusion: ", AS_DIGIT(info.flag.allow_cold_extrusion));
684
-        DEBUG_ECHOLNPAIR("flag.volumetric_enabled: ", AS_DIGIT(info.flag.volumetric_enabled));
682
+        DEBUG_ECHOLNPGM("flag.dryrun: ", AS_DIGIT(info.flag.dryrun));
683
+        DEBUG_ECHOLNPGM("flag.allow_cold_extrusion: ", AS_DIGIT(info.flag.allow_cold_extrusion));
684
+        DEBUG_ECHOLNPGM("flag.volumetric_enabled: ", AS_DIGIT(info.flag.volumetric_enabled));
685
       }
685
       }
686
       else
686
       else
687
         DEBUG_ECHOLNPGM("INVALID DATA");
687
         DEBUG_ECHOLNPGM("INVALID DATA");

+ 2
- 2
Marlin/src/feature/probe_temp_comp.cpp Voir le fichier

75
         #endif
75
         #endif
76
         PSTR("Probe")
76
         PSTR("Probe")
77
       );
77
       );
78
-      SERIAL_ECHOLNPAIR(
78
+      SERIAL_ECHOLNPGM(
79
         " temp: ", temp,
79
         " temp: ", temp,
80
         "C; Offset: ", i < 0 ? 0.0f : sensor_z_offsets[s][i], " um"
80
         "C; Offset: ", i < 0 ? 0.0f : sensor_z_offsets[s][i], " um"
81
       );
81
       );
117
   // Extrapolate
117
   // Extrapolate
118
   float k, d;
118
   float k, d;
119
   if (calib_idx < measurements) {
119
   if (calib_idx < measurements) {
120
-    SERIAL_ECHOLNPAIR("Got ", calib_idx, " measurements. ");
120
+    SERIAL_ECHOLNPGM("Got ", calib_idx, " measurements. ");
121
     if (linear_regression(tsi, k, d)) {
121
     if (linear_regression(tsi, k, d)) {
122
       SERIAL_ECHOPGM("Applying linear extrapolation");
122
       SERIAL_ECHOPGM("Applying linear extrapolation");
123
       calib_idx--;
123
       calib_idx--;

+ 4
- 4
Marlin/src/feature/repeat.cpp Voir le fichier

43
     marker[index].sdpos = sdpos;
43
     marker[index].sdpos = sdpos;
44
     marker[index].counter = count ?: -1;
44
     marker[index].counter = count ?: -1;
45
     index++;
45
     index++;
46
-    DEBUG_ECHOLNPAIR("Add Marker ", index, " at ", sdpos, " (", count, ")");
46
+    DEBUG_ECHOLNPGM("Add Marker ", index, " at ", sdpos, " (", count, ")");
47
   }
47
   }
48
 }
48
 }
49
 
49
 
53
   else {
53
   else {
54
     const uint8_t ind = index - 1;      // Active marker's index
54
     const uint8_t ind = index - 1;      // Active marker's index
55
     if (!marker[ind].counter) {         // Did its counter run out?
55
     if (!marker[ind].counter) {         // Did its counter run out?
56
-      DEBUG_ECHOLNPAIR("Pass Marker ", index);
56
+      DEBUG_ECHOLNPGM("Pass Marker ", index);
57
       index--;                          //  Carry on. Previous marker on the next 'M808'.
57
       index--;                          //  Carry on. Previous marker on the next 'M808'.
58
     }
58
     }
59
     else {
59
     else {
60
       card.setIndex(marker[ind].sdpos); // Loop back to the marker.
60
       card.setIndex(marker[ind].sdpos); // Loop back to the marker.
61
       if (marker[ind].counter > 0)      // Ignore a negative (or zero) counter.
61
       if (marker[ind].counter > 0)      // Ignore a negative (or zero) counter.
62
         --marker[ind].counter;          // Decrement the counter. If zero this 'M808' will be skipped next time.
62
         --marker[ind].counter;          // Decrement the counter. If zero this 'M808' will be skipped next time.
63
-      DEBUG_ECHOLNPAIR("Goto Marker ", index, " at ", marker[ind].sdpos, " (", marker[ind].counter, ")");
63
+      DEBUG_ECHOLNPGM("Goto Marker ", index, " at ", marker[ind].sdpos, " (", marker[ind].counter, ")");
64
     }
64
     }
65
   }
65
   }
66
 }
66
 }
69
 
69
 
70
 void Repeat::early_parse_M808(char * const cmd) {
70
 void Repeat::early_parse_M808(char * const cmd) {
71
   if (is_command_M808(cmd)) {
71
   if (is_command_M808(cmd)) {
72
-    DEBUG_ECHOLNPAIR("Parsing \"", cmd, "\"");
72
+    DEBUG_ECHOLNPGM("Parsing \"", cmd, "\"");
73
     parser.parse(cmd);
73
     parser.parse(cmd);
74
     if (parser.seen('L'))
74
     if (parser.seen('L'))
75
       add_marker(card.getIndex(), parser.value_ushort());
75
       add_marker(card.getIndex(), parser.value_ushort());

+ 1
- 1
Marlin/src/feature/runout.cpp Voir le fichier

132
       char script[strlen(FILAMENT_RUNOUT_SCRIPT) + 1];
132
       char script[strlen(FILAMENT_RUNOUT_SCRIPT) + 1];
133
       sprintf_P(script, PSTR(FILAMENT_RUNOUT_SCRIPT), tool);
133
       sprintf_P(script, PSTR(FILAMENT_RUNOUT_SCRIPT), tool);
134
       #if ENABLED(FILAMENT_RUNOUT_SENSOR_DEBUG)
134
       #if ENABLED(FILAMENT_RUNOUT_SENSOR_DEBUG)
135
-        SERIAL_ECHOLNPAIR("Runout Command: ", script);
135
+        SERIAL_ECHOLNPGM("Runout Command: ", script);
136
       #endif
136
       #endif
137
       queue.inject(script);
137
       queue.inject(script);
138
     #else
138
     #else

+ 3
- 3
Marlin/src/feature/runout.h Voir le fichier

145
           if (runout_flags) {
145
           if (runout_flags) {
146
             SERIAL_ECHOPGM("Runout Sensors: ");
146
             SERIAL_ECHOPGM("Runout Sensors: ");
147
             LOOP_L_N(i, 8) SERIAL_ECHO('0' + TEST(runout_flags, i));
147
             LOOP_L_N(i, 8) SERIAL_ECHO('0' + TEST(runout_flags, i));
148
-            SERIAL_ECHOPAIR(" -> ", extruder);
148
+            SERIAL_ECHOPGM(" -> ", extruder);
149
             if (ran_out) SERIAL_ECHOPGM(" RUN OUT");
149
             if (ran_out) SERIAL_ECHOPGM(" RUN OUT");
150
             SERIAL_EOL();
150
             SERIAL_EOL();
151
           }
151
           }
317
             static uint8_t was_out; // = 0
317
             static uint8_t was_out; // = 0
318
             if (out != TEST(was_out, s)) {
318
             if (out != TEST(was_out, s)) {
319
               TBI(was_out, s);
319
               TBI(was_out, s);
320
-              SERIAL_ECHOLNPAIR_P(PSTR("Filament Sensor "), '0' + s, out ? PSTR(" OUT") : PSTR(" IN"));
320
+              SERIAL_ECHOLNPGM_P(PSTR("Filament Sensor "), '0' + s, out ? PSTR(" OUT") : PSTR(" IN"));
321
             }
321
             }
322
           #endif
322
           #endif
323
         }
323
         }
352
           if (ELAPSED(ms, t)) {
352
           if (ELAPSED(ms, t)) {
353
             t = millis() + 1000UL;
353
             t = millis() + 1000UL;
354
             LOOP_L_N(i, NUM_RUNOUT_SENSORS)
354
             LOOP_L_N(i, NUM_RUNOUT_SENSORS)
355
-              SERIAL_ECHOPAIR_P(i ? PSTR(", ") : PSTR("Remaining mm: "), runout_mm_countdown[i]);
355
+              SERIAL_ECHOPGM_P(i ? PSTR(", ") : PSTR("Remaining mm: "), runout_mm_countdown[i]);
356
             SERIAL_EOL();
356
             SERIAL_EOL();
357
           }
357
           }
358
         #endif
358
         #endif

+ 2
- 2
Marlin/src/feature/tmc_util.cpp Voir le fichier

226
     SERIAL_ECHO(timestamp);
226
     SERIAL_ECHO(timestamp);
227
     SERIAL_ECHOPGM(": ");
227
     SERIAL_ECHOPGM(": ");
228
     st.printLabel();
228
     st.printLabel();
229
-    SERIAL_ECHOLNPAIR(" driver overtemperature warning! (", st.getMilliamps(), "mA)");
229
+    SERIAL_ECHOLNPGM(" driver overtemperature warning! (", st.getMilliamps(), "mA)");
230
   }
230
   }
231
 
231
 
232
   template<typename TMC>
232
   template<typename TMC>
271
           st.rms_current(I_rms);
271
           st.rms_current(I_rms);
272
           #if ENABLED(REPORT_CURRENT_CHANGE)
272
           #if ENABLED(REPORT_CURRENT_CHANGE)
273
             st.printLabel();
273
             st.printLabel();
274
-            SERIAL_ECHOLNPAIR(" current decreased to ", I_rms);
274
+            SERIAL_ECHOLNPGM(" current decreased to ", I_rms);
275
           #endif
275
           #endif
276
         }
276
         }
277
       }
277
       }

+ 2
- 2
Marlin/src/feature/tmc_util.h Voir le fichier

300
 template<typename TMC>
300
 template<typename TMC>
301
 void tmc_print_current(TMC &st) {
301
 void tmc_print_current(TMC &st) {
302
   st.printLabel();
302
   st.printLabel();
303
-  SERIAL_ECHOLNPAIR(" driver current: ", st.getMilliamps());
303
+  SERIAL_ECHOLNPGM(" driver current: ", st.getMilliamps());
304
 }
304
 }
305
 
305
 
306
 #if ENABLED(MONITOR_DRIVER_STATUS)
306
 #if ENABLED(MONITOR_DRIVER_STATUS)
322
   template<typename TMC>
322
   template<typename TMC>
323
   void tmc_print_pwmthrs(TMC &st) {
323
   void tmc_print_pwmthrs(TMC &st) {
324
     st.printLabel();
324
     st.printLabel();
325
-    SERIAL_ECHOLNPAIR(" stealthChop max speed: ", st.get_pwm_thrs());
325
+    SERIAL_ECHOLNPGM(" stealthChop max speed: ", st.get_pwm_thrs());
326
   }
326
   }
327
 #endif
327
 #endif
328
 #if USE_SENSORLESS
328
 #if USE_SENSORLESS

+ 1
- 1
Marlin/src/feature/twibus.cpp Voir le fichier

84
 void TWIBus::echoprefix(uint8_t bytes, const char pref[], uint8_t adr) {
84
 void TWIBus::echoprefix(uint8_t bytes, const char pref[], uint8_t adr) {
85
   SERIAL_ECHO_START();
85
   SERIAL_ECHO_START();
86
   SERIAL_ECHOPGM_P(pref);
86
   SERIAL_ECHOPGM_P(pref);
87
-  SERIAL_ECHOPAIR(": from:", adr, " bytes:", bytes, " data:");
87
+  SERIAL_ECHOPGM(": from:", adr, " bytes:", bytes, " data:");
88
 }
88
 }
89
 
89
 
90
 // static
90
 // static

+ 1
- 1
Marlin/src/gcode/bedlevel/G26.cpp Voir le fichier

539
 
539
 
540
     if (bedtemp) {
540
     if (bedtemp) {
541
       if (!WITHIN(bedtemp, 40, BED_MAX_TARGET)) {
541
       if (!WITHIN(bedtemp, 40, BED_MAX_TARGET)) {
542
-        SERIAL_ECHOLNPAIR("?Specified bed temperature not plausible (40-", BED_MAX_TARGET, "C).");
542
+        SERIAL_ECHOLNPGM("?Specified bed temperature not plausible (40-", BED_MAX_TARGET, "C).");
543
         return;
543
         return;
544
       }
544
       }
545
       g26.bed_temp = bedtemp;
545
       g26.bed_temp = bedtemp;

+ 7
- 7
Marlin/src/gcode/bedlevel/G35.cpp Voir le fichier

106
     const float z_probed_height = probe.probe_at_point(tramming_points[i], PROBE_PT_RAISE, 0, true);
106
     const float z_probed_height = probe.probe_at_point(tramming_points[i], PROBE_PT_RAISE, 0, true);
107
 
107
 
108
     if (isnan(z_probed_height)) {
108
     if (isnan(z_probed_height)) {
109
-      SERIAL_ECHOPAIR("G35 failed at point ", i + 1, " (");
109
+      SERIAL_ECHOPGM("G35 failed at point ", i + 1, " (");
110
       SERIAL_ECHOPGM_P((char *)pgm_read_ptr(&tramming_point_name[i]));
110
       SERIAL_ECHOPGM_P((char *)pgm_read_ptr(&tramming_point_name[i]));
111
       SERIAL_CHAR(')');
111
       SERIAL_CHAR(')');
112
-      SERIAL_ECHOLNPAIR_P(SP_X_STR, tramming_points[i].x, SP_Y_STR, tramming_points[i].y);
112
+      SERIAL_ECHOLNPGM_P(SP_X_STR, tramming_points[i].x, SP_Y_STR, tramming_points[i].y);
113
       err_break = true;
113
       err_break = true;
114
       break;
114
       break;
115
     }
115
     }
116
 
116
 
117
     if (DEBUGGING(LEVELING)) {
117
     if (DEBUGGING(LEVELING)) {
118
-      DEBUG_ECHOPAIR("Probing point ", i + 1, " (");
118
+      DEBUG_ECHOPGM("Probing point ", i + 1, " (");
119
       DEBUG_ECHOPGM_P((char *)pgm_read_ptr(&tramming_point_name[i]));
119
       DEBUG_ECHOPGM_P((char *)pgm_read_ptr(&tramming_point_name[i]));
120
       DEBUG_CHAR(')');
120
       DEBUG_CHAR(')');
121
-      DEBUG_ECHOLNPAIR_P(SP_X_STR, tramming_points[i].x, SP_Y_STR, tramming_points[i].y, SP_Z_STR, z_probed_height);
121
+      DEBUG_ECHOLNPGM_P(SP_X_STR, tramming_points[i].x, SP_Y_STR, tramming_points[i].y, SP_Z_STR, z_probed_height);
122
     }
122
     }
123
 
123
 
124
     z_measured[i] = z_probed_height;
124
     z_measured[i] = z_probed_height;
138
 
138
 
139
       SERIAL_ECHOPGM("Turn ");
139
       SERIAL_ECHOPGM("Turn ");
140
       SERIAL_ECHOPGM_P((char *)pgm_read_ptr(&tramming_point_name[i]));
140
       SERIAL_ECHOPGM_P((char *)pgm_read_ptr(&tramming_point_name[i]));
141
-      SERIAL_ECHOPAIR(" ", (screw_thread & 1) == (adjust > 0) ? "CCW" : "CW", " by ", ABS(full_turns), " turns");
142
-      if (minutes) SERIAL_ECHOPAIR(" and ", ABS(minutes), " minutes");
143
-      if (ENABLED(REPORT_TRAMMING_MM)) SERIAL_ECHOPAIR(" (", -diff, "mm)");
141
+      SERIAL_ECHOPGM(" ", (screw_thread & 1) == (adjust > 0) ? "CCW" : "CW", " by ", ABS(full_turns), " turns");
142
+      if (minutes) SERIAL_ECHOPGM(" and ", ABS(minutes), " minutes");
143
+      if (ENABLED(REPORT_TRAMMING_MM)) SERIAL_ECHOPGM(" (", -diff, "mm)");
144
       SERIAL_EOL();
144
       SERIAL_EOL();
145
     }
145
     }
146
   }
146
   }

+ 5
- 5
Marlin/src/gcode/bedlevel/M420.cpp Voir le fichier

76
         TERN_(EXTENSIBLE_UI, ExtUI::onMeshUpdate(x, y, Z_VALUES(x, y)));
76
         TERN_(EXTENSIBLE_UI, ExtUI::onMeshUpdate(x, y, Z_VALUES(x, y)));
77
       }
77
       }
78
       SERIAL_ECHOPGM("Simulated " STRINGIFY(GRID_MAX_POINTS_X) "x" STRINGIFY(GRID_MAX_POINTS_Y) " mesh ");
78
       SERIAL_ECHOPGM("Simulated " STRINGIFY(GRID_MAX_POINTS_X) "x" STRINGIFY(GRID_MAX_POINTS_Y) " mesh ");
79
-      SERIAL_ECHOPAIR(" (", x_min);
79
+      SERIAL_ECHOPGM(" (", x_min);
80
       SERIAL_CHAR(','); SERIAL_ECHO(y_min);
80
       SERIAL_CHAR(','); SERIAL_ECHO(y_min);
81
-      SERIAL_ECHOPAIR(")-(", x_max);
81
+      SERIAL_ECHOPGM(")-(", x_max);
82
       SERIAL_CHAR(','); SERIAL_ECHO(y_max);
82
       SERIAL_CHAR(','); SERIAL_ECHO(y_max);
83
       SERIAL_ECHOLNPGM(")");
83
       SERIAL_ECHOLNPGM(")");
84
     }
84
     }
108
 
108
 
109
         if (!WITHIN(storage_slot, 0, a - 1)) {
109
         if (!WITHIN(storage_slot, 0, a - 1)) {
110
           SERIAL_ECHOLNPGM("?Invalid storage slot.");
110
           SERIAL_ECHOLNPGM("?Invalid storage slot.");
111
-          SERIAL_ECHOLNPAIR("?Use 0 to ", a - 1);
111
+          SERIAL_ECHOLNPGM("?Use 0 to ", a - 1);
112
           return;
112
           return;
113
         }
113
         }
114
 
114
 
128
       ubl.display_map(parser.byteval('T'));
128
       ubl.display_map(parser.byteval('T'));
129
       SERIAL_ECHOPGM("Mesh is ");
129
       SERIAL_ECHOPGM("Mesh is ");
130
       if (!ubl.mesh_is_valid()) SERIAL_ECHOPGM("in");
130
       if (!ubl.mesh_is_valid()) SERIAL_ECHOPGM("in");
131
-      SERIAL_ECHOLNPAIR("valid\nStorage slot: ", ubl.storage_slot);
131
+      SERIAL_ECHOLNPGM("valid\nStorage slot: ", ubl.storage_slot);
132
     }
132
     }
133
 
133
 
134
   #endif // AUTO_BED_LEVELING_UBL
134
   #endif // AUTO_BED_LEVELING_UBL
246
   report_heading_etc(forReplay, PSTR(
246
   report_heading_etc(forReplay, PSTR(
247
     TERN(MESH_BED_LEVELING, "Mesh Bed Leveling", TERN(AUTO_BED_LEVELING_UBL, "Unified Bed Leveling", "Auto Bed Leveling"))
247
     TERN(MESH_BED_LEVELING, "Mesh Bed Leveling", TERN(AUTO_BED_LEVELING_UBL, "Unified Bed Leveling", "Auto Bed Leveling"))
248
   ));
248
   ));
249
-  SERIAL_ECHOPAIR_P(
249
+  SERIAL_ECHOPGM_P(
250
     PSTR("  M420 S"), planner.leveling_active
250
     PSTR("  M420 S"), planner.leveling_active
251
     #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
251
     #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
252
       , SP_Z_STR, LINEAR_UNIT(planner.z_fade_height)
252
       , SP_Z_STR, LINEAR_UNIT(planner.z_fade_height)

+ 9
- 9
Marlin/src/gcode/bedlevel/abl/G29.cpp Voir le fichier

379
 
379
 
380
       if (!probe.good_bounds(abl.probe_position_lf, abl.probe_position_rb)) {
380
       if (!probe.good_bounds(abl.probe_position_lf, abl.probe_position_rb)) {
381
         if (DEBUGGING(LEVELING)) {
381
         if (DEBUGGING(LEVELING)) {
382
-          DEBUG_ECHOLNPAIR("G29 L", abl.probe_position_lf.x, " R", abl.probe_position_rb.x,
382
+          DEBUG_ECHOLNPGM("G29 L", abl.probe_position_lf.x, " R", abl.probe_position_rb.x,
383
                               " F", abl.probe_position_lf.y, " B", abl.probe_position_rb.y);
383
                               " F", abl.probe_position_lf.y, " B", abl.probe_position_rb.y);
384
         }
384
         }
385
         SERIAL_ECHOLNPGM("? (L,R,F,B) out of bounds.");
385
         SERIAL_ECHOLNPGM("? (L,R,F,B) out of bounds.");
470
     if (abl.verbose_level || seenQ) {
470
     if (abl.verbose_level || seenQ) {
471
       SERIAL_ECHOPGM("Manual G29 ");
471
       SERIAL_ECHOPGM("Manual G29 ");
472
       if (g29_in_progress)
472
       if (g29_in_progress)
473
-        SERIAL_ECHOLNPAIR("point ", _MIN(abl.abl_probe_index + 1, abl.abl_points), " of ", abl.abl_points);
473
+        SERIAL_ECHOLNPGM("point ", _MIN(abl.abl_probe_index + 1, abl.abl_points), " of ", abl.abl_points);
474
       else
474
       else
475
         SERIAL_ECHOLNPGM("idle");
475
         SERIAL_ECHOLNPGM("idle");
476
     }
476
     }
513
         z_values[abl.meshCount.x][abl.meshCount.y] = newz;
513
         z_values[abl.meshCount.x][abl.meshCount.y] = newz;
514
         TERN_(EXTENSIBLE_UI, ExtUI::onMeshUpdate(abl.meshCount, newz));
514
         TERN_(EXTENSIBLE_UI, ExtUI::onMeshUpdate(abl.meshCount, newz));
515
 
515
 
516
-        if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR_P(PSTR("Save X"), abl.meshCount.x, SP_Y_STR, abl.meshCount.y, SP_Z_STR, abl.measured_z + abl.Z_offset);
516
+        if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM_P(PSTR("Save X"), abl.meshCount.x, SP_Y_STR, abl.meshCount.y, SP_Z_STR, abl.measured_z + abl.Z_offset);
517
 
517
 
518
       #endif
518
       #endif
519
     }
519
     }
635
           // Avoid probing outside the round or hexagonal area
635
           // Avoid probing outside the round or hexagonal area
636
           if (TERN0(IS_KINEMATIC, !probe.can_reach(abl.probePos))) continue;
636
           if (TERN0(IS_KINEMATIC, !probe.can_reach(abl.probePos))) continue;
637
 
637
 
638
-          if (abl.verbose_level) SERIAL_ECHOLNPAIR("Probing mesh point ", pt_index, "/", abl.abl_points, ".");
638
+          if (abl.verbose_level) SERIAL_ECHOLNPGM("Probing mesh point ", pt_index, "/", abl.abl_points, ".");
639
           TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_POINT), int(pt_index), int(abl.abl_points)));
639
           TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_POINT), int(pt_index), int(abl.abl_points)));
640
 
640
 
641
           abl.measured_z = faux ? 0.001f * random(-100, 101) : probe.probe_at_point(abl.probePos, raise_after, abl.verbose_level);
641
           abl.measured_z = faux ? 0.001f * random(-100, 101) : probe.probe_at_point(abl.probePos, raise_after, abl.verbose_level);
680
       // Probe at 3 arbitrary points
680
       // Probe at 3 arbitrary points
681
 
681
 
682
       LOOP_L_N(i, 3) {
682
       LOOP_L_N(i, 3) {
683
-        if (abl.verbose_level) SERIAL_ECHOLNPAIR("Probing point ", i + 1, "/3.");
683
+        if (abl.verbose_level) SERIAL_ECHOLNPGM("Probing point ", i + 1, "/3.");
684
         TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/3"), GET_TEXT(MSG_PROBING_POINT), int(i + 1)));
684
         TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/3"), GET_TEXT(MSG_PROBING_POINT), int(i + 1)));
685
 
685
 
686
         // Retain the last probe position
686
         // Retain the last probe position
842
           && NEAR(current_position.y, abl.probePos.y - probe.offset_xy.y)
842
           && NEAR(current_position.y, abl.probePos.y - probe.offset_xy.y)
843
         ) {
843
         ) {
844
           const float simple_z = current_position.z - abl.measured_z;
844
           const float simple_z = current_position.z - abl.measured_z;
845
-          if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Probed Z", simple_z, "  Matrix Z", converted.z, "  Discrepancy ", simple_z - converted.z);
845
+          if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Probed Z", simple_z, "  Matrix Z", converted.z, "  Discrepancy ", simple_z - converted.z);
846
           converted.z = simple_z;
846
           converted.z = simple_z;
847
         }
847
         }
848
 
848
 
855
     #elif ENABLED(AUTO_BED_LEVELING_BILINEAR)
855
     #elif ENABLED(AUTO_BED_LEVELING_BILINEAR)
856
 
856
 
857
       if (!abl.dryrun) {
857
       if (!abl.dryrun) {
858
-        if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("G29 uncorrected Z:", current_position.z);
858
+        if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("G29 uncorrected Z:", current_position.z);
859
 
859
 
860
         // Unapply the offset because it is going to be immediately applied
860
         // Unapply the offset because it is going to be immediately applied
861
         // and cause compensation movement in Z
861
         // and cause compensation movement in Z
862
         const float fade_scaling_factor = TERN(ENABLE_LEVELING_FADE_HEIGHT, planner.fade_scaling_factor_for_z(current_position.z), 1);
862
         const float fade_scaling_factor = TERN(ENABLE_LEVELING_FADE_HEIGHT, planner.fade_scaling_factor_for_z(current_position.z), 1);
863
         current_position.z -= fade_scaling_factor * bilinear_z_offset(current_position);
863
         current_position.z -= fade_scaling_factor * bilinear_z_offset(current_position);
864
 
864
 
865
-        if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR(" corrected Z:", current_position.z);
865
+        if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM(" corrected Z:", current_position.z);
866
       }
866
       }
867
 
867
 
868
     #endif // ABL_PLANAR
868
     #endif // ABL_PLANAR
880
   TERN_(HAS_BED_PROBE, probe.move_z_after_probing());
880
   TERN_(HAS_BED_PROBE, probe.move_z_after_probing());
881
 
881
 
882
   #ifdef Z_PROBE_END_SCRIPT
882
   #ifdef Z_PROBE_END_SCRIPT
883
-    if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Z Probe End Script: ", Z_PROBE_END_SCRIPT);
883
+    if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Z Probe End Script: ", Z_PROBE_END_SCRIPT);
884
     planner.synchronize();
884
     planner.synchronize();
885
     process_subcommands_now_P(PSTR(Z_PROBE_END_SCRIPT));
885
     process_subcommands_now_P(PSTR(Z_PROBE_END_SCRIPT));
886
   #endif
886
   #endif

+ 3
- 3
Marlin/src/gcode/bedlevel/mbl/G29.cpp Voir le fichier

173
       if (parser.seenval('I')) {
173
       if (parser.seenval('I')) {
174
         ix = parser.value_int();
174
         ix = parser.value_int();
175
         if (!WITHIN(ix, 0, (GRID_MAX_POINTS_X) - 1)) {
175
         if (!WITHIN(ix, 0, (GRID_MAX_POINTS_X) - 1)) {
176
-          SERIAL_ECHOLNPAIR("I out of range (0-", (GRID_MAX_POINTS_X) - 1, ")");
176
+          SERIAL_ECHOLNPGM("I out of range (0-", (GRID_MAX_POINTS_X) - 1, ")");
177
           return;
177
           return;
178
         }
178
         }
179
       }
179
       }
183
       if (parser.seenval('J')) {
183
       if (parser.seenval('J')) {
184
         iy = parser.value_int();
184
         iy = parser.value_int();
185
         if (!WITHIN(iy, 0, (GRID_MAX_POINTS_Y) - 1)) {
185
         if (!WITHIN(iy, 0, (GRID_MAX_POINTS_Y) - 1)) {
186
-          SERIAL_ECHOLNPAIR("J out of range (0-", (GRID_MAX_POINTS_Y) - 1, ")");
186
+          SERIAL_ECHOLNPGM("J out of range (0-", (GRID_MAX_POINTS_Y) - 1, ")");
187
           return;
187
           return;
188
         }
188
         }
189
       }
189
       }
213
   } // switch(state)
213
   } // switch(state)
214
 
214
 
215
   if (state == MeshNext) {
215
   if (state == MeshNext) {
216
-    SERIAL_ECHOLNPAIR("MBL G29 point ", _MIN(mbl_probe_index, GRID_MAX_POINTS), " of ", GRID_MAX_POINTS);
216
+    SERIAL_ECHOLNPGM("MBL G29 point ", _MIN(mbl_probe_index, GRID_MAX_POINTS), " of ", GRID_MAX_POINTS);
217
     if (mbl_probe_index > 0) TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_POINT), _MIN(mbl_probe_index, GRID_MAX_POINTS), int(GRID_MAX_POINTS)));
217
     if (mbl_probe_index > 0) TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_POINT), _MIN(mbl_probe_index, GRID_MAX_POINTS), int(GRID_MAX_POINTS)));
218
   }
218
   }
219
 
219
 

+ 2
- 2
Marlin/src/gcode/calibrate/G28.cpp Voir le fichier

270
 
270
 
271
   #if HAS_HOMING_CURRENT
271
   #if HAS_HOMING_CURRENT
272
     auto debug_current = [](PGM_P const s, const int16_t a, const int16_t b) {
272
     auto debug_current = [](PGM_P const s, const int16_t a, const int16_t b) {
273
-      DEBUG_ECHOPGM_P(s); DEBUG_ECHOLNPAIR(" current: ", a, " -> ", b);
273
+      DEBUG_ECHOPGM_P(s); DEBUG_ECHOLNPGM(" current: ", a, " -> ", b);
274
     };
274
     };
275
     #if HAS_CURRENT_HOME(X)
275
     #if HAS_CURRENT_HOME(X)
276
       const int16_t tmc_save_current_X = stepperX.getMilliamps();
276
       const int16_t tmc_save_current_X = stepperX.getMilliamps();
371
 
371
 
372
     if (z_homing_height && (LINEAR_AXIS_GANG(doX, || doY, || TERN0(Z_SAFE_HOMING, doZ), || doI, || doJ, || doK))) {
372
     if (z_homing_height && (LINEAR_AXIS_GANG(doX, || doY, || TERN0(Z_SAFE_HOMING, doZ), || doI, || doJ, || doK))) {
373
       // Raise Z before homing any other axes and z is not already high enough (never lower z)
373
       // Raise Z before homing any other axes and z is not already high enough (never lower z)
374
-      if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Raise Z (before homing) by ", z_homing_height);
374
+      if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Raise Z (before homing) by ", z_homing_height);
375
       do_z_clearance(z_homing_height);
375
       do_z_clearance(z_homing_height);
376
       TERN_(BLTOUCH, bltouch.init());
376
       TERN_(BLTOUCH, bltouch.init());
377
     }
377
     }

+ 3
- 3
Marlin/src/gcode/calibrate/G33.cpp Voir le fichier

107
  *  - Print the delta settings
107
  *  - Print the delta settings
108
  */
108
  */
109
 static void print_calibration_settings(const bool end_stops, const bool tower_angles) {
109
 static void print_calibration_settings(const bool end_stops, const bool tower_angles) {
110
-  SERIAL_ECHOPAIR(".Height:", delta_height);
110
+  SERIAL_ECHOPGM(".Height:", delta_height);
111
   if (end_stops) {
111
   if (end_stops) {
112
     print_signed_float(PSTR("Ex"), delta_endstop_adj.a);
112
     print_signed_float(PSTR("Ex"), delta_endstop_adj.a);
113
     print_signed_float(PSTR("Ey"), delta_endstop_adj.b);
113
     print_signed_float(PSTR("Ey"), delta_endstop_adj.b);
114
     print_signed_float(PSTR("Ez"), delta_endstop_adj.c);
114
     print_signed_float(PSTR("Ez"), delta_endstop_adj.c);
115
   }
115
   }
116
   if (end_stops && tower_angles) {
116
   if (end_stops && tower_angles) {
117
-    SERIAL_ECHOPAIR("  Radius:", delta_radius);
117
+    SERIAL_ECHOPGM("  Radius:", delta_radius);
118
     SERIAL_EOL();
118
     SERIAL_EOL();
119
     SERIAL_CHAR('.');
119
     SERIAL_CHAR('.');
120
     SERIAL_ECHO_SP(13);
120
     SERIAL_ECHO_SP(13);
125
     print_signed_float(PSTR("Tz"), delta_tower_angle_trim.c);
125
     print_signed_float(PSTR("Tz"), delta_tower_angle_trim.c);
126
   }
126
   }
127
   if ((!end_stops && tower_angles) || (end_stops && !tower_angles)) { // XOR
127
   if ((!end_stops && tower_angles) || (end_stops && !tower_angles)) { // XOR
128
-    SERIAL_ECHOPAIR("  Radius:", delta_radius);
128
+    SERIAL_ECHOPGM("  Radius:", delta_radius);
129
   }
129
   }
130
   SERIAL_EOL();
130
   SERIAL_EOL();
131
 }
131
 }

+ 13
- 13
Marlin/src/gcode/calibrate/G34_M422.cpp Voir le fichier

201
         if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> probing all positions.");
201
         if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> probing all positions.");
202
 
202
 
203
         const int iter = iteration + 1;
203
         const int iter = iteration + 1;
204
-        SERIAL_ECHOLNPAIR("\nG34 Iteration: ", iter);
204
+        SERIAL_ECHOLNPGM("\nG34 Iteration: ", iter);
205
         #if HAS_STATUS_MESSAGE
205
         #if HAS_STATUS_MESSAGE
206
           char str[iter_str_len + 2 + 1];
206
           char str[iter_str_len + 2 + 1];
207
           sprintf_P(str, msg_iteration, iter);
207
           sprintf_P(str, msg_iteration, iter);
221
           if ((iteration == 0 || i > 0) && z_probe > current_position.z) do_blocking_move_to_z(z_probe);
221
           if ((iteration == 0 || i > 0) && z_probe > current_position.z) do_blocking_move_to_z(z_probe);
222
 
222
 
223
           if (DEBUGGING(LEVELING))
223
           if (DEBUGGING(LEVELING))
224
-            DEBUG_ECHOLNPAIR_P(PSTR("Probing X"), z_stepper_align.xy[iprobe].x, SP_Y_STR, z_stepper_align.xy[iprobe].y);
224
+            DEBUG_ECHOLNPGM_P(PSTR("Probing X"), z_stepper_align.xy[iprobe].x, SP_Y_STR, z_stepper_align.xy[iprobe].y);
225
 
225
 
226
           // Probe a Z height for each stepper.
226
           // Probe a Z height for each stepper.
227
           // Probing sanity check is disabled, as it would trigger even in normal cases because
227
           // Probing sanity check is disabled, as it would trigger even in normal cases because
238
           // the next iteration of probing. This allows adjustments to be made away from the bed.
238
           // the next iteration of probing. This allows adjustments to be made away from the bed.
239
           z_measured[iprobe] = z_probed_height + Z_CLEARANCE_BETWEEN_PROBES;
239
           z_measured[iprobe] = z_probed_height + Z_CLEARANCE_BETWEEN_PROBES;
240
 
240
 
241
-          if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("> Z", iprobe + 1, " measured position is ", z_measured[iprobe]);
241
+          if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> Z", iprobe + 1, " measured position is ", z_measured[iprobe]);
242
 
242
 
243
           // Remember the minimum measurement to calculate the correction later on
243
           // Remember the minimum measurement to calculate the correction later on
244
           z_measured_min = _MIN(z_measured_min, z_measured[iprobe]);
244
           z_measured_min = _MIN(z_measured_min, z_measured[iprobe]);
267
           linear_fit_data lfd;
267
           linear_fit_data lfd;
268
           incremental_LSF_reset(&lfd);
268
           incremental_LSF_reset(&lfd);
269
           LOOP_L_N(i, NUM_Z_STEPPER_DRIVERS) {
269
           LOOP_L_N(i, NUM_Z_STEPPER_DRIVERS) {
270
-            SERIAL_ECHOLNPAIR("PROBEPT_", i, ": ", z_measured[i]);
270
+            SERIAL_ECHOLNPGM("PROBEPT_", i, ": ", z_measured[i]);
271
             incremental_LSF(&lfd, z_stepper_align.xy[i], z_measured[i]);
271
             incremental_LSF(&lfd, z_stepper_align.xy[i], z_measured[i]);
272
           }
272
           }
273
           finish_incremental_LSF(&lfd);
273
           finish_incremental_LSF(&lfd);
278
             z_measured_min = _MIN(z_measured_min, z_measured[i]);
278
             z_measured_min = _MIN(z_measured_min, z_measured[i]);
279
           }
279
           }
280
 
280
 
281
-          SERIAL_ECHOLNPAIR(
281
+          SERIAL_ECHOLNPGM(
282
             LIST_N(DOUBLE(NUM_Z_STEPPER_DRIVERS),
282
             LIST_N(DOUBLE(NUM_Z_STEPPER_DRIVERS),
283
               "Calculated Z1=", z_measured[0],
283
               "Calculated Z1=", z_measured[0],
284
                         " Z2=", z_measured[1],
284
                         " Z2=", z_measured[1],
288
           );
288
           );
289
         #endif
289
         #endif
290
 
290
 
291
-        SERIAL_ECHOLNPAIR("\n"
291
+        SERIAL_ECHOLNPGM("\n"
292
           "Z2-Z1=", ABS(z_measured[1] - z_measured[0])
292
           "Z2-Z1=", ABS(z_measured[1] - z_measured[0])
293
           #if TRIPLE_Z
293
           #if TRIPLE_Z
294
             , " Z3-Z2=", ABS(z_measured[2] - z_measured[1])
294
             , " Z3-Z2=", ABS(z_measured[2] - z_measured[1])
372
 
372
 
373
             // Check for less accuracy compared to last move
373
             // Check for less accuracy compared to last move
374
             if (decreasing_accuracy(last_z_align_move[zstepper], z_align_abs)) {
374
             if (decreasing_accuracy(last_z_align_move[zstepper], z_align_abs)) {
375
-              if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("> Z", zstepper + 1, " last_z_align_move = ", last_z_align_move[zstepper]);
376
-              if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("> Z", zstepper + 1, " z_align_abs = ", z_align_abs);
375
+              if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> Z", zstepper + 1, " last_z_align_move = ", last_z_align_move[zstepper]);
376
+              if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> Z", zstepper + 1, " z_align_abs = ", z_align_abs);
377
               adjustment_reverse = !adjustment_reverse;
377
               adjustment_reverse = !adjustment_reverse;
378
             }
378
             }
379
 
379
 
385
           // Stop early if all measured points achieve accuracy target
385
           // Stop early if all measured points achieve accuracy target
386
           if (z_align_abs > z_auto_align_accuracy) success_break = false;
386
           if (z_align_abs > z_auto_align_accuracy) success_break = false;
387
 
387
 
388
-          if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("> Z", zstepper + 1, " corrected by ", z_align_move);
388
+          if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> Z", zstepper + 1, " corrected by ", z_align_move);
389
 
389
 
390
           // Lock all steppers except one
390
           // Lock all steppers except one
391
           stepper.set_all_z_lock(true, zstepper);
391
           stepper.set_all_z_lock(true, zstepper);
395
             // Will match reversed Z steppers on dual steppers. Triple will need more work to map.
395
             // Will match reversed Z steppers on dual steppers. Triple will need more work to map.
396
             if (adjustment_reverse) {
396
             if (adjustment_reverse) {
397
               z_align_move = -z_align_move;
397
               z_align_move = -z_align_move;
398
-              if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("> Z", zstepper + 1, " correction reversed to ", z_align_move);
398
+              if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> Z", zstepper + 1, " correction reversed to ", z_align_move);
399
             }
399
             }
400
           #endif
400
           #endif
401
 
401
 
421
       if (err_break)
421
       if (err_break)
422
         SERIAL_ECHOLNPGM("G34 aborted.");
422
         SERIAL_ECHOLNPGM("G34 aborted.");
423
       else {
423
       else {
424
-        SERIAL_ECHOLNPAIR("Did ", iteration + (iteration != z_auto_align_iterations), " of ", z_auto_align_iterations);
424
+        SERIAL_ECHOLNPGM("Did ", iteration + (iteration != z_auto_align_iterations), " of ", z_auto_align_iterations);
425
         SERIAL_ECHOLNPAIR_F("Accuracy: ", z_maxdiff);
425
         SERIAL_ECHOLNPAIR_F("Accuracy: ", z_maxdiff);
426
       }
426
       }
427
 
427
 
541
   report_heading(forReplay, PSTR(STR_Z_AUTO_ALIGN));
541
   report_heading(forReplay, PSTR(STR_Z_AUTO_ALIGN));
542
   LOOP_L_N(i, NUM_Z_STEPPER_DRIVERS) {
542
   LOOP_L_N(i, NUM_Z_STEPPER_DRIVERS) {
543
     report_echo_start(forReplay);
543
     report_echo_start(forReplay);
544
-    SERIAL_ECHOLNPAIR_P(
544
+    SERIAL_ECHOLNPGM_P(
545
       PSTR("  M422 S"), i + 1,
545
       PSTR("  M422 S"), i + 1,
546
       SP_X_STR, z_stepper_align.xy[i].x,
546
       SP_X_STR, z_stepper_align.xy[i].x,
547
       SP_Y_STR, z_stepper_align.xy[i].y
547
       SP_Y_STR, z_stepper_align.xy[i].y
550
   #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
550
   #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
551
     LOOP_L_N(i, NUM_Z_STEPPER_DRIVERS) {
551
     LOOP_L_N(i, NUM_Z_STEPPER_DRIVERS) {
552
       report_echo_start(forReplay);
552
       report_echo_start(forReplay);
553
-      SERIAL_ECHOLNPAIR_P(
553
+      SERIAL_ECHOLNPGM_P(
554
         PSTR("  M422 W"), i + 1,
554
         PSTR("  M422 W"), i + 1,
555
         SP_X_STR, z_stepper_align.stepper_xy[i].x,
555
         SP_X_STR, z_stepper_align.stepper_xy[i].x,
556
         SP_Y_STR, z_stepper_align.stepper_xy[i].y
556
         SP_Y_STR, z_stepper_align.stepper_xy[i].y

+ 37
- 37
Marlin/src/gcode/calibrate/G425.cpp Voir le fichier

354
   inline void report_measured_faces(const measurements_t &m) {
354
   inline void report_measured_faces(const measurements_t &m) {
355
     SERIAL_ECHOLNPGM("Sides:");
355
     SERIAL_ECHOLNPGM("Sides:");
356
     #if HAS_Z_AXIS && AXIS_CAN_CALIBRATE(Z)
356
     #if HAS_Z_AXIS && AXIS_CAN_CALIBRATE(Z)
357
-      SERIAL_ECHOLNPAIR("  Top: ", m.obj_side[TOP]);
357
+      SERIAL_ECHOLNPGM("  Top: ", m.obj_side[TOP]);
358
     #endif
358
     #endif
359
     #if ENABLED(CALIBRATION_MEASURE_LEFT)
359
     #if ENABLED(CALIBRATION_MEASURE_LEFT)
360
-      SERIAL_ECHOLNPAIR("  Left: ", m.obj_side[LEFT]);
360
+      SERIAL_ECHOLNPGM("  Left: ", m.obj_side[LEFT]);
361
     #endif
361
     #endif
362
     #if ENABLED(CALIBRATION_MEASURE_RIGHT)
362
     #if ENABLED(CALIBRATION_MEASURE_RIGHT)
363
-      SERIAL_ECHOLNPAIR("  Right: ", m.obj_side[RIGHT]);
363
+      SERIAL_ECHOLNPGM("  Right: ", m.obj_side[RIGHT]);
364
     #endif
364
     #endif
365
     #if HAS_Y_AXIS
365
     #if HAS_Y_AXIS
366
       #if ENABLED(CALIBRATION_MEASURE_FRONT)
366
       #if ENABLED(CALIBRATION_MEASURE_FRONT)
367
-        SERIAL_ECHOLNPAIR("  Front: ", m.obj_side[FRONT]);
367
+        SERIAL_ECHOLNPGM("  Front: ", m.obj_side[FRONT]);
368
       #endif
368
       #endif
369
       #if ENABLED(CALIBRATION_MEASURE_BACK)
369
       #if ENABLED(CALIBRATION_MEASURE_BACK)
370
-        SERIAL_ECHOLNPAIR("  Back: ", m.obj_side[BACK]);
370
+        SERIAL_ECHOLNPGM("  Back: ", m.obj_side[BACK]);
371
       #endif
371
       #endif
372
     #endif
372
     #endif
373
     #if LINEAR_AXES >= 4
373
     #if LINEAR_AXES >= 4
374
       #if ENABLED(CALIBRATION_MEASURE_IMIN)
374
       #if ENABLED(CALIBRATION_MEASURE_IMIN)
375
-        SERIAL_ECHOLNPAIR("  " STR_I_MIN ": ", m.obj_side[IMINIMUM]);
375
+        SERIAL_ECHOLNPGM("  " STR_I_MIN ": ", m.obj_side[IMINIMUM]);
376
       #endif
376
       #endif
377
       #if ENABLED(CALIBRATION_MEASURE_IMAX)
377
       #if ENABLED(CALIBRATION_MEASURE_IMAX)
378
-        SERIAL_ECHOLNPAIR("  " STR_I_MAX ": ", m.obj_side[IMAXIMUM]);
378
+        SERIAL_ECHOLNPGM("  " STR_I_MAX ": ", m.obj_side[IMAXIMUM]);
379
       #endif
379
       #endif
380
     #endif
380
     #endif
381
     #if LINEAR_AXES >= 5
381
     #if LINEAR_AXES >= 5
382
       #if ENABLED(CALIBRATION_MEASURE_JMIN)
382
       #if ENABLED(CALIBRATION_MEASURE_JMIN)
383
-        SERIAL_ECHOLNPAIR("  " STR_J_MIN ": ", m.obj_side[JMINIMUM]);
383
+        SERIAL_ECHOLNPGM("  " STR_J_MIN ": ", m.obj_side[JMINIMUM]);
384
       #endif
384
       #endif
385
       #if ENABLED(CALIBRATION_MEASURE_JMAX)
385
       #if ENABLED(CALIBRATION_MEASURE_JMAX)
386
-        SERIAL_ECHOLNPAIR("  " STR_J_MAX ": ", m.obj_side[JMAXIMUM]);
386
+        SERIAL_ECHOLNPGM("  " STR_J_MAX ": ", m.obj_side[JMAXIMUM]);
387
       #endif
387
       #endif
388
     #endif
388
     #endif
389
     #if LINEAR_AXES >= 6
389
     #if LINEAR_AXES >= 6
390
       #if ENABLED(CALIBRATION_MEASURE_KMIN)
390
       #if ENABLED(CALIBRATION_MEASURE_KMIN)
391
-        SERIAL_ECHOLNPAIR("  " STR_K_MIN ": ", m.obj_side[KMINIMUM]);
391
+        SERIAL_ECHOLNPGM("  " STR_K_MIN ": ", m.obj_side[KMINIMUM]);
392
       #endif
392
       #endif
393
       #if ENABLED(CALIBRATION_MEASURE_KMAX)
393
       #if ENABLED(CALIBRATION_MEASURE_KMAX)
394
-        SERIAL_ECHOLNPAIR("  " STR_K_MAX ": ", m.obj_side[KMAXIMUM]);
394
+        SERIAL_ECHOLNPGM("  " STR_K_MAX ": ", m.obj_side[KMAXIMUM]);
395
       #endif
395
       #endif
396
     #endif
396
     #endif
397
     SERIAL_EOL();
397
     SERIAL_EOL();
400
   inline void report_measured_center(const measurements_t &m) {
400
   inline void report_measured_center(const measurements_t &m) {
401
     SERIAL_ECHOLNPGM("Center:");
401
     SERIAL_ECHOLNPGM("Center:");
402
     #if HAS_X_CENTER
402
     #if HAS_X_CENTER
403
-      SERIAL_ECHOLNPAIR_P(SP_X_STR, m.obj_center.x);
403
+      SERIAL_ECHOLNPGM_P(SP_X_STR, m.obj_center.x);
404
     #endif
404
     #endif
405
     #if HAS_Y_CENTER
405
     #if HAS_Y_CENTER
406
-      SERIAL_ECHOLNPAIR_P(SP_Y_STR, m.obj_center.y);
406
+      SERIAL_ECHOLNPGM_P(SP_Y_STR, m.obj_center.y);
407
     #endif
407
     #endif
408
-    SERIAL_ECHOLNPAIR_P(SP_Z_STR, m.obj_center.z);
408
+    SERIAL_ECHOLNPGM_P(SP_Z_STR, m.obj_center.z);
409
     #if HAS_I_CENTER
409
     #if HAS_I_CENTER
410
-      SERIAL_ECHOLNPAIR_P(SP_I_STR, m.obj_center.i);
410
+      SERIAL_ECHOLNPGM_P(SP_I_STR, m.obj_center.i);
411
     #endif
411
     #endif
412
     #if HAS_J_CENTER
412
     #if HAS_J_CENTER
413
-      SERIAL_ECHOLNPAIR_P(SP_J_STR, m.obj_center.j);
413
+      SERIAL_ECHOLNPGM_P(SP_J_STR, m.obj_center.j);
414
     #endif
414
     #endif
415
     #if HAS_K_CENTER
415
     #if HAS_K_CENTER
416
-      SERIAL_ECHOLNPAIR_P(SP_K_STR, m.obj_center.k);
416
+      SERIAL_ECHOLNPGM_P(SP_K_STR, m.obj_center.k);
417
     #endif
417
     #endif
418
     SERIAL_EOL();
418
     SERIAL_EOL();
419
   }
419
   }
422
     SERIAL_ECHOLNPGM("Backlash:");
422
     SERIAL_ECHOLNPGM("Backlash:");
423
     #if AXIS_CAN_CALIBRATE(X)
423
     #if AXIS_CAN_CALIBRATE(X)
424
       #if ENABLED(CALIBRATION_MEASURE_LEFT)
424
       #if ENABLED(CALIBRATION_MEASURE_LEFT)
425
-        SERIAL_ECHOLNPAIR("  Left: ", m.backlash[LEFT]);
425
+        SERIAL_ECHOLNPGM("  Left: ", m.backlash[LEFT]);
426
       #endif
426
       #endif
427
       #if ENABLED(CALIBRATION_MEASURE_RIGHT)
427
       #if ENABLED(CALIBRATION_MEASURE_RIGHT)
428
-        SERIAL_ECHOLNPAIR("  Right: ", m.backlash[RIGHT]);
428
+        SERIAL_ECHOLNPGM("  Right: ", m.backlash[RIGHT]);
429
       #endif
429
       #endif
430
     #endif
430
     #endif
431
     #if HAS_Y_AXIS && AXIS_CAN_CALIBRATE(Y)
431
     #if HAS_Y_AXIS && AXIS_CAN_CALIBRATE(Y)
432
       #if ENABLED(CALIBRATION_MEASURE_FRONT)
432
       #if ENABLED(CALIBRATION_MEASURE_FRONT)
433
-        SERIAL_ECHOLNPAIR("  Front: ", m.backlash[FRONT]);
433
+        SERIAL_ECHOLNPGM("  Front: ", m.backlash[FRONT]);
434
       #endif
434
       #endif
435
       #if ENABLED(CALIBRATION_MEASURE_BACK)
435
       #if ENABLED(CALIBRATION_MEASURE_BACK)
436
-        SERIAL_ECHOLNPAIR("  Back: ", m.backlash[BACK]);
436
+        SERIAL_ECHOLNPGM("  Back: ", m.backlash[BACK]);
437
       #endif
437
       #endif
438
     #endif
438
     #endif
439
     #if HAS_Z_AXIS && AXIS_CAN_CALIBRATE(Z)
439
     #if HAS_Z_AXIS && AXIS_CAN_CALIBRATE(Z)
440
-      SERIAL_ECHOLNPAIR("  Top: ", m.backlash[TOP]);
440
+      SERIAL_ECHOLNPGM("  Top: ", m.backlash[TOP]);
441
     #endif
441
     #endif
442
     #if LINEAR_AXES >= 4 && AXIS_CAN_CALIBRATE(I)
442
     #if LINEAR_AXES >= 4 && AXIS_CAN_CALIBRATE(I)
443
       #if ENABLED(CALIBRATION_MEASURE_IMIN)
443
       #if ENABLED(CALIBRATION_MEASURE_IMIN)
444
-        SERIAL_ECHOLNPAIR("  " STR_I_MIN ": ", m.backlash[IMINIMUM]);
444
+        SERIAL_ECHOLNPGM("  " STR_I_MIN ": ", m.backlash[IMINIMUM]);
445
       #endif
445
       #endif
446
       #if ENABLED(CALIBRATION_MEASURE_IMAX)
446
       #if ENABLED(CALIBRATION_MEASURE_IMAX)
447
-        SERIAL_ECHOLNPAIR("  " STR_I_MAX ": ", m.backlash[IMAXIMUM]);
447
+        SERIAL_ECHOLNPGM("  " STR_I_MAX ": ", m.backlash[IMAXIMUM]);
448
       #endif
448
       #endif
449
     #endif
449
     #endif
450
     #if LINEAR_AXES >= 5 && AXIS_CAN_CALIBRATE(J)
450
     #if LINEAR_AXES >= 5 && AXIS_CAN_CALIBRATE(J)
451
       #if ENABLED(CALIBRATION_MEASURE_JMIN)
451
       #if ENABLED(CALIBRATION_MEASURE_JMIN)
452
-        SERIAL_ECHOLNPAIR("  " STR_J_MIN ": ", m.backlash[JMINIMUM]);
452
+        SERIAL_ECHOLNPGM("  " STR_J_MIN ": ", m.backlash[JMINIMUM]);
453
       #endif
453
       #endif
454
       #if ENABLED(CALIBRATION_MEASURE_JMAX)
454
       #if ENABLED(CALIBRATION_MEASURE_JMAX)
455
-        SERIAL_ECHOLNPAIR("  " STR_J_MAX ": ", m.backlash[JMAXIMUM]);
455
+        SERIAL_ECHOLNPGM("  " STR_J_MAX ": ", m.backlash[JMAXIMUM]);
456
       #endif
456
       #endif
457
     #endif
457
     #endif
458
     #if LINEAR_AXES >= 6 && AXIS_CAN_CALIBRATE(K)
458
     #if LINEAR_AXES >= 6 && AXIS_CAN_CALIBRATE(K)
459
       #if ENABLED(CALIBRATION_MEASURE_KMIN)
459
       #if ENABLED(CALIBRATION_MEASURE_KMIN)
460
-        SERIAL_ECHOLNPAIR("  " STR_K_MIN ": ", m.backlash[KMINIMUM]);
460
+        SERIAL_ECHOLNPGM("  " STR_K_MIN ": ", m.backlash[KMINIMUM]);
461
       #endif
461
       #endif
462
       #if ENABLED(CALIBRATION_MEASURE_KMAX)
462
       #if ENABLED(CALIBRATION_MEASURE_KMAX)
463
-        SERIAL_ECHOLNPAIR("  " STR_K_MAX ": ", m.backlash[KMAXIMUM]);
463
+        SERIAL_ECHOLNPGM("  " STR_K_MAX ": ", m.backlash[KMAXIMUM]);
464
       #endif
464
       #endif
465
     #endif
465
     #endif
466
     SERIAL_EOL();
466
     SERIAL_EOL();
471
     SERIAL_ECHO(active_extruder);
471
     SERIAL_ECHO(active_extruder);
472
     SERIAL_ECHOLNPGM(" Positional Error:");
472
     SERIAL_ECHOLNPGM(" Positional Error:");
473
     #if HAS_X_CENTER && AXIS_CAN_CALIBRATE(X)
473
     #if HAS_X_CENTER && AXIS_CAN_CALIBRATE(X)
474
-      SERIAL_ECHOLNPAIR_P(SP_X_STR, m.pos_error.x);
474
+      SERIAL_ECHOLNPGM_P(SP_X_STR, m.pos_error.x);
475
     #endif
475
     #endif
476
     #if HAS_Y_CENTER && AXIS_CAN_CALIBRATE(Y)
476
     #if HAS_Y_CENTER && AXIS_CAN_CALIBRATE(Y)
477
-      SERIAL_ECHOLNPAIR_P(SP_Y_STR, m.pos_error.y);
477
+      SERIAL_ECHOLNPGM_P(SP_Y_STR, m.pos_error.y);
478
     #endif
478
     #endif
479
     #if HAS_Z_AXIS && AXIS_CAN_CALIBRATE(Z)
479
     #if HAS_Z_AXIS && AXIS_CAN_CALIBRATE(Z)
480
-      SERIAL_ECHOLNPAIR_P(SP_Z_STR, m.pos_error.z);
480
+      SERIAL_ECHOLNPGM_P(SP_Z_STR, m.pos_error.z);
481
     #endif
481
     #endif
482
     #if HAS_I_CENTER && AXIS_CAN_CALIBRATE(I)
482
     #if HAS_I_CENTER && AXIS_CAN_CALIBRATE(I)
483
-      SERIAL_ECHOLNPAIR_P(SP_I_STR, m.pos_error.i);
483
+      SERIAL_ECHOLNPGM_P(SP_I_STR, m.pos_error.i);
484
     #endif
484
     #endif
485
     #if HAS_J_CENTER && AXIS_CAN_CALIBRATE(J)
485
     #if HAS_J_CENTER && AXIS_CAN_CALIBRATE(J)
486
-      SERIAL_ECHOLNPAIR_P(SP_J_STR, m.pos_error.j);
486
+      SERIAL_ECHOLNPGM_P(SP_J_STR, m.pos_error.j);
487
     #endif
487
     #endif
488
     #if HAS_K_CENTER && AXIS_CAN_CALIBRATE(K)
488
     #if HAS_K_CENTER && AXIS_CAN_CALIBRATE(K)
489
-      SERIAL_ECHOLNPAIR_P(SP_Z_STR, m.pos_error.z);
489
+      SERIAL_ECHOLNPGM_P(SP_Z_STR, m.pos_error.z);
490
     #endif
490
     #endif
491
     SERIAL_EOL();
491
     SERIAL_EOL();
492
   }
492
   }
494
   inline void report_measured_nozzle_dimensions(const measurements_t &m) {
494
   inline void report_measured_nozzle_dimensions(const measurements_t &m) {
495
     SERIAL_ECHOLNPGM("Nozzle Tip Outer Dimensions:");
495
     SERIAL_ECHOLNPGM("Nozzle Tip Outer Dimensions:");
496
     #if HAS_X_CENTER
496
     #if HAS_X_CENTER
497
-      SERIAL_ECHOLNPAIR_P(SP_X_STR, m.nozzle_outer_dimension.x);
497
+      SERIAL_ECHOLNPGM_P(SP_X_STR, m.nozzle_outer_dimension.x);
498
     #endif
498
     #endif
499
     #if HAS_Y_CENTER
499
     #if HAS_Y_CENTER
500
-      SERIAL_ECHOLNPAIR_P(SP_Y_STR, m.nozzle_outer_dimension.y);
500
+      SERIAL_ECHOLNPGM_P(SP_Y_STR, m.nozzle_outer_dimension.y);
501
     #endif
501
     #endif
502
     SERIAL_EOL();
502
     SERIAL_EOL();
503
     UNUSED(m);
503
     UNUSED(m);
509
     //
509
     //
510
     inline void report_hotend_offsets() {
510
     inline void report_hotend_offsets() {
511
       LOOP_S_L_N(e, 1, HOTENDS)
511
       LOOP_S_L_N(e, 1, HOTENDS)
512
-        SERIAL_ECHOLNPAIR_P(PSTR("T"), e, PSTR(" Hotend Offset X"), hotend_offset[e].x, SP_Y_STR, hotend_offset[e].y, SP_Z_STR, hotend_offset[e].z);
512
+        SERIAL_ECHOLNPGM_P(PSTR("T"), e, PSTR(" Hotend Offset X"), hotend_offset[e].x, SP_Y_STR, hotend_offset[e].y, SP_Z_STR, hotend_offset[e].z);
513
     }
513
     }
514
   #endif
514
   #endif
515
 
515
 

+ 5
- 5
Marlin/src/gcode/calibrate/G76_M192_M871.cpp Voir le fichier

171
   millis_t next_temp_report = millis() + 1000;
171
   millis_t next_temp_report = millis() + 1000;
172
 
172
 
173
   auto report_targets = [&](const celsius_t tb, const celsius_t tp) {
173
   auto report_targets = [&](const celsius_t tb, const celsius_t tp) {
174
-    SERIAL_ECHOLNPAIR("Target Bed:", tb, " Probe:", tp);
174
+    SERIAL_ECHOLNPGM("Target Bed:", tb, " Probe:", tp);
175
   };
175
   };
176
 
176
 
177
   if (do_bed_cal) {
177
   if (do_bed_cal) {
211
       if (isnan(measured_z) || target_bed > (BED_MAX_TARGET)) break;
211
       if (isnan(measured_z) || target_bed > (BED_MAX_TARGET)) break;
212
     }
212
     }
213
 
213
 
214
-    SERIAL_ECHOLNPAIR("Retrieved measurements: ", temp_comp.get_index());
214
+    SERIAL_ECHOLNPGM("Retrieved measurements: ", temp_comp.get_index());
215
     if (temp_comp.finish_calibration(TSI_BED)) {
215
     if (temp_comp.finish_calibration(TSI_BED)) {
216
       say_successfully_calibrated();
216
       say_successfully_calibrated();
217
       SERIAL_ECHOLNPGM(" bed.");
217
       SERIAL_ECHOLNPGM(" bed.");
255
       do_blocking_move_to(noz_pos_xyz);
255
       do_blocking_move_to(noz_pos_xyz);
256
 
256
 
257
       say_waiting_for_probe_heating();
257
       say_waiting_for_probe_heating();
258
-      SERIAL_ECHOLNPAIR(" Bed:", target_bed, " Probe:", target_probe);
258
+      SERIAL_ECHOLNPGM(" Bed:", target_bed, " Probe:", target_probe);
259
       const millis_t probe_timeout_ms = millis() + SEC_TO_MS(900UL);
259
       const millis_t probe_timeout_ms = millis() + SEC_TO_MS(900UL);
260
       while (thermalManager.degProbe() < target_probe) {
260
       while (thermalManager.degProbe() < target_probe) {
261
         if (report_temps(next_temp_report, probe_timeout_ms)) {
261
         if (report_temps(next_temp_report, probe_timeout_ms)) {
270
       if (isnan(measured_z) || target_probe > cali_info_init[TSI_PROBE].end_temp) break;
270
       if (isnan(measured_z) || target_probe > cali_info_init[TSI_PROBE].end_temp) break;
271
     }
271
     }
272
 
272
 
273
-    SERIAL_ECHOLNPAIR("Retrieved measurements: ", temp_comp.get_index());
273
+    SERIAL_ECHOLNPGM("Retrieved measurements: ", temp_comp.get_index());
274
     if (temp_comp.finish_calibration(TSI_PROBE))
274
     if (temp_comp.finish_calibration(TSI_PROBE))
275
       say_successfully_calibrated();
275
       say_successfully_calibrated();
276
     else
276
     else
325
                                 TSI_PROBE
325
                                 TSI_PROBE
326
                               );
326
                               );
327
     if (idx > 0 && temp_comp.set_offset(mod, idx - 1, offset_val))
327
     if (idx > 0 && temp_comp.set_offset(mod, idx - 1, offset_val))
328
-      SERIAL_ECHOLNPAIR("Set value: ", offset_val);
328
+      SERIAL_ECHOLNPGM("Set value: ", offset_val);
329
     else
329
     else
330
       SERIAL_ECHOLNPGM("!Invalid index. Failed to set value (note: value at index 0 is constant).");
330
       SERIAL_ECHOLNPGM("!Invalid index. Failed to set value (note: value at index 0 is constant).");
331
 
331
 

+ 18
- 18
Marlin/src/gcode/calibrate/M100.cpp Voir le fichier

202
   char *start_free_memory = free_memory_start, *end_free_memory = free_memory_end;
202
   char *start_free_memory = free_memory_start, *end_free_memory = free_memory_end;
203
   int n = end_free_memory - start_free_memory;
203
   int n = end_free_memory - start_free_memory;
204
 
204
 
205
-  SERIAL_ECHOLNPAIR("\nfmc() n=", n,
205
+  SERIAL_ECHOLNPGM("\nfmc() n=", n,
206
                     "\nfree_memory_start=", hex_address(free_memory_start),
206
                     "\nfree_memory_start=", hex_address(free_memory_start),
207
                     "  end=", hex_address(end_free_memory));
207
                     "  end=", hex_address(end_free_memory));
208
 
208
 
227
     if (start_free_memory[i] == TEST_BYTE) {
227
     if (start_free_memory[i] == TEST_BYTE) {
228
       int32_t j = count_test_bytes(start_free_memory + i);
228
       int32_t j = count_test_bytes(start_free_memory + i);
229
       if (j > 8) {
229
       if (j > 8) {
230
-        //SERIAL_ECHOPAIR("Found ", j);
231
-        //SERIAL_ECHOLNPAIR(" bytes free at ", hex_address(start_free_memory + i));
230
+        //SERIAL_ECHOPGM("Found ", j);
231
+        //SERIAL_ECHOLNPGM(" bytes free at ", hex_address(start_free_memory + i));
232
         i += j;
232
         i += j;
233
         block_cnt++;
233
         block_cnt++;
234
-        SERIAL_ECHOLNPAIR(" (", block_cnt, ") found=", j);
234
+        SERIAL_ECHOLNPGM(" (", block_cnt, ") found=", j);
235
       }
235
       }
236
     }
236
     }
237
   }
237
   }
238
-  SERIAL_ECHOPAIR("  block_found=", block_cnt);
238
+  SERIAL_ECHOPGM("  block_found=", block_cnt);
239
 
239
 
240
   if (block_cnt != 1)
240
   if (block_cnt != 1)
241
     SERIAL_ECHOLNPGM("\nMemory Corruption detected in free memory area.");
241
     SERIAL_ECHOLNPGM("\nMemory Corruption detected in free memory area.");
267
     if (*addr == TEST_BYTE) {
267
     if (*addr == TEST_BYTE) {
268
       const int32_t j = count_test_bytes(addr);
268
       const int32_t j = count_test_bytes(addr);
269
       if (j > 8) {
269
       if (j > 8) {
270
-        SERIAL_ECHOLNPAIR("Found ", j, " bytes free at ", hex_address(addr));
270
+        SERIAL_ECHOLNPGM("Found ", j, " bytes free at ", hex_address(addr));
271
         if (j > max_cnt) {
271
         if (j > max_cnt) {
272
           max_cnt  = j;
272
           max_cnt  = j;
273
           max_addr = addr;
273
           max_addr = addr;
277
       }
277
       }
278
     }
278
     }
279
   }
279
   }
280
-  if (block_cnt > 1) SERIAL_ECHOLNPAIR(
280
+  if (block_cnt > 1) SERIAL_ECHOLNPGM(
281
     "\nMemory Corruption detected in free memory area."
281
     "\nMemory Corruption detected in free memory area."
282
     "\nLargest free block is ", max_cnt, " bytes at ", hex_address(max_addr)
282
     "\nLargest free block is ", max_cnt, " bytes at ", hex_address(max_addr)
283
   );
283
   );
284
-  SERIAL_ECHOLNPAIR("check_for_free_memory_corruption() = ", check_for_free_memory_corruption(PSTR("M100 F ")));
284
+  SERIAL_ECHOLNPGM("check_for_free_memory_corruption() = ", check_for_free_memory_corruption(PSTR("M100 F ")));
285
 }
285
 }
286
 
286
 
287
 #if ENABLED(M100_FREE_MEMORY_CORRUPTOR)
287
 #if ENABLED(M100_FREE_MEMORY_CORRUPTOR)
299
     for (uint32_t i = 1; i <= size; i++) {
299
     for (uint32_t i = 1; i <= size; i++) {
300
       char * const addr = start_free_memory + i * j;
300
       char * const addr = start_free_memory + i * j;
301
       *addr = i;
301
       *addr = i;
302
-      SERIAL_ECHOPAIR("\nCorrupting address: ", hex_address(addr));
302
+      SERIAL_ECHOPGM("\nCorrupting address: ", hex_address(addr));
303
     }
303
     }
304
     SERIAL_EOL();
304
     SERIAL_EOL();
305
   }
305
   }
327
 
327
 
328
   for (int32_t i = 0; i < size; i++) {
328
   for (int32_t i = 0; i < size; i++) {
329
     if (start_free_memory[i] != TEST_BYTE) {
329
     if (start_free_memory[i] != TEST_BYTE) {
330
-      SERIAL_ECHOPAIR("? address : ", hex_address(start_free_memory + i));
331
-      SERIAL_ECHOLNPAIR("=", hex_byte(start_free_memory[i]));
330
+      SERIAL_ECHOPGM("? address : ", hex_address(start_free_memory + i));
331
+      SERIAL_ECHOLNPGM("=", hex_byte(start_free_memory[i]));
332
       SERIAL_EOL();
332
       SERIAL_EOL();
333
     }
333
     }
334
   }
334
   }
340
 void GcodeSuite::M100() {
340
 void GcodeSuite::M100() {
341
   char *sp = top_of_stack();
341
   char *sp = top_of_stack();
342
   if (!free_memory_end) free_memory_end = sp - MEMORY_END_CORRECTION;
342
   if (!free_memory_end) free_memory_end = sp - MEMORY_END_CORRECTION;
343
-                  SERIAL_ECHOPAIR("\nbss_end               : ", hex_address(end_bss));
344
-  if (heaplimit)  SERIAL_ECHOPAIR("\n__heaplimit           : ", hex_address(heaplimit));
345
-                  SERIAL_ECHOPAIR("\nfree_memory_start     : ", hex_address(free_memory_start));
346
-  if (stacklimit) SERIAL_ECHOPAIR("\n__stacklimit          : ", hex_address(stacklimit));
347
-                  SERIAL_ECHOPAIR("\nfree_memory_end       : ", hex_address(free_memory_end));
343
+                  SERIAL_ECHOPGM("\nbss_end               : ", hex_address(end_bss));
344
+  if (heaplimit)  SERIAL_ECHOPGM("\n__heaplimit           : ", hex_address(heaplimit));
345
+                  SERIAL_ECHOPGM("\nfree_memory_start     : ", hex_address(free_memory_start));
346
+  if (stacklimit) SERIAL_ECHOPGM("\n__stacklimit          : ", hex_address(stacklimit));
347
+                  SERIAL_ECHOPGM("\nfree_memory_end       : ", hex_address(free_memory_end));
348
   if (MEMORY_END_CORRECTION)
348
   if (MEMORY_END_CORRECTION)
349
-                  SERIAL_ECHOPAIR("\nMEMORY_END_CORRECTION : ", MEMORY_END_CORRECTION);
350
-                  SERIAL_ECHOLNPAIR("\nStack Pointer       : ", hex_address(sp));
349
+                  SERIAL_ECHOPGM("\nMEMORY_END_CORRECTION : ", MEMORY_END_CORRECTION);
350
+                  SERIAL_ECHOLNPGM("\nStack Pointer       : ", hex_address(sp));
351
 
351
 
352
   // Always init on the first invocation of M100
352
   // Always init on the first invocation of M100
353
   static bool m100_not_initialized = true;
353
   static bool m100_not_initialized = true;

+ 3
- 3
Marlin/src/gcode/calibrate/M425.cpp Voir le fichier

86
     SERIAL_ECHOPGM("Backlash Correction ");
86
     SERIAL_ECHOPGM("Backlash Correction ");
87
     if (!backlash.correction) SERIAL_ECHOPGM("in");
87
     if (!backlash.correction) SERIAL_ECHOPGM("in");
88
     SERIAL_ECHOLNPGM("active:");
88
     SERIAL_ECHOLNPGM("active:");
89
-    SERIAL_ECHOLNPAIR("  Correction Amount/Fade-out:     F", backlash.get_correction(), " (F1.0 = full, F0.0 = none)");
89
+    SERIAL_ECHOLNPGM("  Correction Amount/Fade-out:     F", backlash.get_correction(), " (F1.0 = full, F0.0 = none)");
90
     SERIAL_ECHOPGM("  Backlash Distance (mm):        ");
90
     SERIAL_ECHOPGM("  Backlash Distance (mm):        ");
91
     LOOP_LINEAR_AXES(a) if (axis_can_calibrate(a)) {
91
     LOOP_LINEAR_AXES(a) if (axis_can_calibrate(a)) {
92
       SERIAL_CHAR(' ', AXIS_CHAR(a));
92
       SERIAL_CHAR(' ', AXIS_CHAR(a));
95
     }
95
     }
96
 
96
 
97
     #ifdef BACKLASH_SMOOTHING_MM
97
     #ifdef BACKLASH_SMOOTHING_MM
98
-      SERIAL_ECHOLNPAIR("  Smoothing (mm):                 S", backlash.smoothing_mm);
98
+      SERIAL_ECHOLNPGM("  Smoothing (mm):                 S", backlash.smoothing_mm);
99
     #endif
99
     #endif
100
 
100
 
101
     #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
101
     #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
115
 
115
 
116
 void GcodeSuite::M425_report(const bool forReplay/*=true*/) {
116
 void GcodeSuite::M425_report(const bool forReplay/*=true*/) {
117
   report_heading_etc(forReplay, PSTR(STR_BACKLASH_COMPENSATION));
117
   report_heading_etc(forReplay, PSTR(STR_BACKLASH_COMPENSATION));
118
-  SERIAL_ECHOLNPAIR_P(
118
+  SERIAL_ECHOLNPGM_P(
119
     PSTR("  M425 F"), backlash.get_correction()
119
     PSTR("  M425 F"), backlash.get_correction()
120
     #ifdef BACKLASH_SMOOTHING_MM
120
     #ifdef BACKLASH_SMOOTHING_MM
121
       , PSTR(" S"), LINEAR_UNIT(backlash.smoothing_mm)
121
       , PSTR(" S"), LINEAR_UNIT(backlash.smoothing_mm)

+ 4
- 4
Marlin/src/gcode/calibrate/M48.cpp Voir le fichier

162
           #endif
162
           #endif
163
         );
163
         );
164
         if (verbose_level > 3) {
164
         if (verbose_level > 3) {
165
-          SERIAL_ECHOPAIR("Start radius:", radius, " angle:", angle, " dir:");
165
+          SERIAL_ECHOPGM("Start radius:", radius, " angle:", angle, " dir:");
166
           if (dir > 0) SERIAL_CHAR('C');
166
           if (dir > 0) SERIAL_CHAR('C');
167
           SERIAL_ECHOLNPGM("CW");
167
           SERIAL_ECHOLNPGM("CW");
168
         }
168
         }
200
             while (!probe.can_reach(next_pos)) {
200
             while (!probe.can_reach(next_pos)) {
201
               next_pos *= 0.8f;
201
               next_pos *= 0.8f;
202
               if (verbose_level > 3)
202
               if (verbose_level > 3)
203
-                SERIAL_ECHOLNPAIR_P(PSTR("Moving inward: X"), next_pos.x, SP_Y_STR, next_pos.y);
203
+                SERIAL_ECHOLNPGM_P(PSTR("Moving inward: X"), next_pos.x, SP_Y_STR, next_pos.y);
204
             }
204
             }
205
           #elif HAS_ENDSTOPS
205
           #elif HAS_ENDSTOPS
206
             // For a rectangular bed just keep the probe in bounds
206
             // For a rectangular bed just keep the probe in bounds
209
           #endif
209
           #endif
210
 
210
 
211
           if (verbose_level > 3)
211
           if (verbose_level > 3)
212
-            SERIAL_ECHOLNPAIR_P(PSTR("Going to: X"), next_pos.x, SP_Y_STR, next_pos.y);
212
+            SERIAL_ECHOLNPGM_P(PSTR("Going to: X"), next_pos.x, SP_Y_STR, next_pos.y);
213
 
213
 
214
           do_blocking_move_to_xy(next_pos);
214
           do_blocking_move_to_xy(next_pos);
215
         } // n_legs loop
215
         } // n_legs loop
241
 
241
 
242
       if (verbose_level > 1) {
242
       if (verbose_level > 1) {
243
         SERIAL_ECHO(n + 1);
243
         SERIAL_ECHO(n + 1);
244
-        SERIAL_ECHOPAIR(" of ", n_samples);
244
+        SERIAL_ECHOPGM(" of ", n_samples);
245
         SERIAL_ECHOPAIR_F(": z: ", pz, 3);
245
         SERIAL_ECHOPAIR_F(": z: ", pz, 3);
246
         SERIAL_CHAR(' ');
246
         SERIAL_CHAR(' ');
247
         dev_report(verbose_level > 2, mean, sigma, min, max);
247
         dev_report(verbose_level > 2, mean, sigma, min, max);

+ 2
- 2
Marlin/src/gcode/calibrate/M665.cpp Voir le fichier

63
 
63
 
64
   void GcodeSuite::M665_report(const bool forReplay/*=true*/) {
64
   void GcodeSuite::M665_report(const bool forReplay/*=true*/) {
65
     report_heading_etc(forReplay, PSTR(STR_DELTA_SETTINGS));
65
     report_heading_etc(forReplay, PSTR(STR_DELTA_SETTINGS));
66
-    SERIAL_ECHOLNPAIR_P(
66
+    SERIAL_ECHOLNPGM_P(
67
         PSTR("  M665 L"), LINEAR_UNIT(delta_diagonal_rod)
67
         PSTR("  M665 L"), LINEAR_UNIT(delta_diagonal_rod)
68
       , PSTR(" R"), LINEAR_UNIT(delta_radius)
68
       , PSTR(" R"), LINEAR_UNIT(delta_radius)
69
       , PSTR(" H"), LINEAR_UNIT(delta_height)
69
       , PSTR(" H"), LINEAR_UNIT(delta_height)
133
 
133
 
134
   void GcodeSuite::M665_report(const bool forReplay/*=true*/) {
134
   void GcodeSuite::M665_report(const bool forReplay/*=true*/) {
135
     report_heading_etc(forReplay, PSTR(STR_SCARA_SETTINGS " (" STR_SCARA_S TERN_(HAS_SCARA_OFFSET, " " STR_SCARA_P_T_Z) ")"));
135
     report_heading_etc(forReplay, PSTR(STR_SCARA_SETTINGS " (" STR_SCARA_S TERN_(HAS_SCARA_OFFSET, " " STR_SCARA_P_T_Z) ")"));
136
-    SERIAL_ECHOLNPAIR_P(
136
+    SERIAL_ECHOLNPGM_P(
137
       PSTR("  M665 S"), segments_per_second
137
       PSTR("  M665 S"), segments_per_second
138
       #if HAS_SCARA_OFFSET
138
       #if HAS_SCARA_OFFSET
139
         , SP_P_STR, scara_home_offset.a
139
         , SP_P_STR, scara_home_offset.a

+ 9
- 9
Marlin/src/gcode/calibrate/M666.cpp Voir le fichier

52
           is_err = true;
52
           is_err = true;
53
         else {
53
         else {
54
           delta_endstop_adj[i] = v;
54
           delta_endstop_adj[i] = v;
55
-          if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("delta_endstop_adj[", AS_CHAR(AXIS_CHAR(i)), "] = ", v);
55
+          if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("delta_endstop_adj[", AS_CHAR(AXIS_CHAR(i)), "] = ", v);
56
         }
56
         }
57
       }
57
       }
58
     }
58
     }
59
-    if (is_err) SERIAL_ECHOLNPAIR("?M666 offsets must be <= 0");
59
+    if (is_err) SERIAL_ECHOLNPGM("?M666 offsets must be <= 0");
60
     if (!is_set) M666_report();
60
     if (!is_set) M666_report();
61
   }
61
   }
62
 
62
 
63
   void GcodeSuite::M666_report(const bool forReplay/*=true*/) {
63
   void GcodeSuite::M666_report(const bool forReplay/*=true*/) {
64
     report_heading_etc(forReplay, PSTR(STR_ENDSTOP_ADJUSTMENT));
64
     report_heading_etc(forReplay, PSTR(STR_ENDSTOP_ADJUSTMENT));
65
-    SERIAL_ECHOLNPAIR_P(
65
+    SERIAL_ECHOLNPGM_P(
66
         PSTR("  M666 X"), LINEAR_UNIT(delta_endstop_adj.a)
66
         PSTR("  M666 X"), LINEAR_UNIT(delta_endstop_adj.a)
67
       , SP_Y_STR, LINEAR_UNIT(delta_endstop_adj.b)
67
       , SP_Y_STR, LINEAR_UNIT(delta_endstop_adj.b)
68
       , SP_Z_STR, LINEAR_UNIT(delta_endstop_adj.c)
68
       , SP_Z_STR, LINEAR_UNIT(delta_endstop_adj.c)
108
     report_heading_etc(forReplay, PSTR(STR_ENDSTOP_ADJUSTMENT));
108
     report_heading_etc(forReplay, PSTR(STR_ENDSTOP_ADJUSTMENT));
109
     SERIAL_ECHOPGM("  M666");
109
     SERIAL_ECHOPGM("  M666");
110
     #if ENABLED(X_DUAL_ENDSTOPS)
110
     #if ENABLED(X_DUAL_ENDSTOPS)
111
-      SERIAL_ECHOLNPAIR_P(SP_X_STR, LINEAR_UNIT(endstops.x2_endstop_adj));
111
+      SERIAL_ECHOLNPGM_P(SP_X_STR, LINEAR_UNIT(endstops.x2_endstop_adj));
112
     #endif
112
     #endif
113
     #if ENABLED(Y_DUAL_ENDSTOPS)
113
     #if ENABLED(Y_DUAL_ENDSTOPS)
114
-      SERIAL_ECHOLNPAIR_P(SP_Y_STR, LINEAR_UNIT(endstops.y2_endstop_adj));
114
+      SERIAL_ECHOLNPGM_P(SP_Y_STR, LINEAR_UNIT(endstops.y2_endstop_adj));
115
     #endif
115
     #endif
116
     #if ENABLED(Z_MULTI_ENDSTOPS)
116
     #if ENABLED(Z_MULTI_ENDSTOPS)
117
       #if NUM_Z_STEPPER_DRIVERS >= 3
117
       #if NUM_Z_STEPPER_DRIVERS >= 3
118
-        SERIAL_ECHOPAIR(" S2 Z", LINEAR_UNIT(endstops.z3_endstop_adj));
118
+        SERIAL_ECHOPGM(" S2 Z", LINEAR_UNIT(endstops.z3_endstop_adj));
119
         report_echo_start(forReplay);
119
         report_echo_start(forReplay);
120
-        SERIAL_ECHOPAIR("  M666 S3 Z", LINEAR_UNIT(endstops.z3_endstop_adj));
120
+        SERIAL_ECHOPGM("  M666 S3 Z", LINEAR_UNIT(endstops.z3_endstop_adj));
121
         #if NUM_Z_STEPPER_DRIVERS >= 4
121
         #if NUM_Z_STEPPER_DRIVERS >= 4
122
           report_echo_start(forReplay);
122
           report_echo_start(forReplay);
123
-          SERIAL_ECHOPAIR("  M666 S4 Z", LINEAR_UNIT(endstops.z4_endstop_adj));
123
+          SERIAL_ECHOPGM("  M666 S4 Z", LINEAR_UNIT(endstops.z4_endstop_adj));
124
         #endif
124
         #endif
125
       #else
125
       #else
126
-        SERIAL_ECHOLNPAIR_P(SP_Z_STR, LINEAR_UNIT(endstops.z2_endstop_adj));
126
+        SERIAL_ECHOLNPGM_P(SP_Z_STR, LINEAR_UNIT(endstops.z2_endstop_adj));
127
       #endif
127
       #endif
128
     #endif
128
     #endif
129
   }
129
   }

+ 9
- 9
Marlin/src/gcode/config/M200-M205.cpp Voir le fichier

84
 
84
 
85
     #if EXTRUDERS == 1
85
     #if EXTRUDERS == 1
86
     {
86
     {
87
-      SERIAL_ECHOLNPAIR(
87
+      SERIAL_ECHOLNPGM(
88
         "  M200 S", parser.volumetric_enabled, " D", LINEAR_UNIT(planner.filament_size[0])
88
         "  M200 S", parser.volumetric_enabled, " D", LINEAR_UNIT(planner.filament_size[0])
89
         #if ENABLED(VOLUMETRIC_EXTRUDER_LIMIT)
89
         #if ENABLED(VOLUMETRIC_EXTRUDER_LIMIT)
90
           , " L", LINEAR_UNIT(planner.volumetric_extruder_limit[0])
90
           , " L", LINEAR_UNIT(planner.volumetric_extruder_limit[0])
92
       );
92
       );
93
     }
93
     }
94
     #else
94
     #else
95
-      SERIAL_ECHOLNPAIR("  M200 S", parser.volumetric_enabled);
95
+      SERIAL_ECHOLNPGM("  M200 S", parser.volumetric_enabled);
96
       LOOP_L_N(i, EXTRUDERS) {
96
       LOOP_L_N(i, EXTRUDERS) {
97
         report_echo_start(forReplay);
97
         report_echo_start(forReplay);
98
-        SERIAL_ECHOLNPAIR(
98
+        SERIAL_ECHOLNPGM(
99
           "  M200 T", i, " D", LINEAR_UNIT(planner.filament_size[i])
99
           "  M200 T", i, " D", LINEAR_UNIT(planner.filament_size[i])
100
           #if ENABLED(VOLUMETRIC_EXTRUDER_LIMIT)
100
           #if ENABLED(VOLUMETRIC_EXTRUDER_LIMIT)
101
             , " L", LINEAR_UNIT(planner.volumetric_extruder_limit[i])
101
             , " L", LINEAR_UNIT(planner.volumetric_extruder_limit[i])
134
 
134
 
135
 void GcodeSuite::M201_report(const bool forReplay/*=true*/) {
135
 void GcodeSuite::M201_report(const bool forReplay/*=true*/) {
136
   report_heading_etc(forReplay, PSTR(STR_MAX_ACCELERATION));
136
   report_heading_etc(forReplay, PSTR(STR_MAX_ACCELERATION));
137
-  SERIAL_ECHOLNPAIR_P(
137
+  SERIAL_ECHOLNPGM_P(
138
     LIST_N(DOUBLE(LINEAR_AXES),
138
     LIST_N(DOUBLE(LINEAR_AXES),
139
       PSTR("  M201 X"), LINEAR_UNIT(planner.settings.max_acceleration_mm_per_s2[X_AXIS]),
139
       PSTR("  M201 X"), LINEAR_UNIT(planner.settings.max_acceleration_mm_per_s2[X_AXIS]),
140
       SP_Y_STR, LINEAR_UNIT(planner.settings.max_acceleration_mm_per_s2[Y_AXIS]),
140
       SP_Y_STR, LINEAR_UNIT(planner.settings.max_acceleration_mm_per_s2[Y_AXIS]),
150
   #if ENABLED(DISTINCT_E_FACTORS)
150
   #if ENABLED(DISTINCT_E_FACTORS)
151
     LOOP_L_N(i, E_STEPPERS) {
151
     LOOP_L_N(i, E_STEPPERS) {
152
       report_echo_start(forReplay);
152
       report_echo_start(forReplay);
153
-      SERIAL_ECHOLNPAIR_P(
153
+      SERIAL_ECHOLNPGM_P(
154
           PSTR("  M201 T"), i
154
           PSTR("  M201 T"), i
155
         , SP_E_STR, VOLUMETRIC_UNIT(planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(i)])
155
         , SP_E_STR, VOLUMETRIC_UNIT(planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(i)])
156
       );
156
       );
179
 
179
 
180
 void GcodeSuite::M203_report(const bool forReplay/*=true*/) {
180
 void GcodeSuite::M203_report(const bool forReplay/*=true*/) {
181
   report_heading_etc(forReplay, PSTR(STR_MAX_FEEDRATES));
181
   report_heading_etc(forReplay, PSTR(STR_MAX_FEEDRATES));
182
-  SERIAL_ECHOLNPAIR_P(
182
+  SERIAL_ECHOLNPGM_P(
183
     LIST_N(DOUBLE(LINEAR_AXES),
183
     LIST_N(DOUBLE(LINEAR_AXES),
184
       PSTR("  M203 X"), LINEAR_UNIT(planner.settings.max_feedrate_mm_s[X_AXIS]),
184
       PSTR("  M203 X"), LINEAR_UNIT(planner.settings.max_feedrate_mm_s[X_AXIS]),
185
       SP_Y_STR, LINEAR_UNIT(planner.settings.max_feedrate_mm_s[Y_AXIS]),
185
       SP_Y_STR, LINEAR_UNIT(planner.settings.max_feedrate_mm_s[Y_AXIS]),
195
   #if ENABLED(DISTINCT_E_FACTORS)
195
   #if ENABLED(DISTINCT_E_FACTORS)
196
     LOOP_L_N(i, E_STEPPERS) {
196
     LOOP_L_N(i, E_STEPPERS) {
197
       SERIAL_ECHO_START();
197
       SERIAL_ECHO_START();
198
-      SERIAL_ECHOLNPAIR_P(
198
+      SERIAL_ECHOLNPGM_P(
199
           PSTR("  M203 T"), i
199
           PSTR("  M203 T"), i
200
         , SP_E_STR, VOLUMETRIC_UNIT(planner.settings.max_feedrate_mm_s[E_AXIS_N(i)])
200
         , SP_E_STR, VOLUMETRIC_UNIT(planner.settings.max_feedrate_mm_s[E_AXIS_N(i)])
201
       );
201
       );
225
 
225
 
226
 void GcodeSuite::M204_report(const bool forReplay/*=true*/) {
226
 void GcodeSuite::M204_report(const bool forReplay/*=true*/) {
227
   report_heading_etc(forReplay, PSTR(STR_ACCELERATION_P_R_T));
227
   report_heading_etc(forReplay, PSTR(STR_ACCELERATION_P_R_T));
228
-  SERIAL_ECHOLNPAIR_P(
228
+  SERIAL_ECHOLNPGM_P(
229
       PSTR("  M204 P"), LINEAR_UNIT(planner.settings.acceleration)
229
       PSTR("  M204 P"), LINEAR_UNIT(planner.settings.acceleration)
230
     , PSTR(" R"), LINEAR_UNIT(planner.settings.retract_acceleration)
230
     , PSTR(" R"), LINEAR_UNIT(planner.settings.retract_acceleration)
231
     , SP_T_STR, LINEAR_UNIT(planner.settings.travel_acceleration)
231
     , SP_T_STR, LINEAR_UNIT(planner.settings.travel_acceleration)
292
     TERN_(HAS_CLASSIC_E_JERK, " E<max_e_jerk>")
292
     TERN_(HAS_CLASSIC_E_JERK, " E<max_e_jerk>")
293
     ")"
293
     ")"
294
   ));
294
   ));
295
-  SERIAL_ECHOLNPAIR_P(
295
+  SERIAL_ECHOLNPGM_P(
296
       PSTR("  M205 B"), LINEAR_UNIT(planner.settings.min_segment_time_us)
296
       PSTR("  M205 B"), LINEAR_UNIT(planner.settings.min_segment_time_us)
297
     , PSTR(" S"), LINEAR_UNIT(planner.settings.min_feedrate_mm_s)
297
     , PSTR(" S"), LINEAR_UNIT(planner.settings.min_feedrate_mm_s)
298
     , SP_T_STR, LINEAR_UNIT(planner.settings.min_travel_feedrate_mm_s)
298
     , SP_T_STR, LINEAR_UNIT(planner.settings.min_travel_feedrate_mm_s)

+ 10
- 10
Marlin/src/gcode/config/M217.cpp Voir le fichier

136
   SERIAL_ECHOPGM("  M217");
136
   SERIAL_ECHOPGM("  M217");
137
 
137
 
138
   #if ENABLED(TOOLCHANGE_FILAMENT_SWAP)
138
   #if ENABLED(TOOLCHANGE_FILAMENT_SWAP)
139
-    SERIAL_ECHOPAIR(" S", LINEAR_UNIT(toolchange_settings.swap_length));
140
-    SERIAL_ECHOPAIR_P(SP_B_STR, LINEAR_UNIT(toolchange_settings.extra_resume),
139
+    SERIAL_ECHOPGM(" S", LINEAR_UNIT(toolchange_settings.swap_length));
140
+    SERIAL_ECHOPGM_P(SP_B_STR, LINEAR_UNIT(toolchange_settings.extra_resume),
141
                       SP_E_STR, LINEAR_UNIT(toolchange_settings.extra_prime),
141
                       SP_E_STR, LINEAR_UNIT(toolchange_settings.extra_prime),
142
                       SP_P_STR, LINEAR_UNIT(toolchange_settings.prime_speed));
142
                       SP_P_STR, LINEAR_UNIT(toolchange_settings.prime_speed));
143
-    SERIAL_ECHOPAIR(" R", LINEAR_UNIT(toolchange_settings.retract_speed),
143
+    SERIAL_ECHOPGM(" R", LINEAR_UNIT(toolchange_settings.retract_speed),
144
                     " U", LINEAR_UNIT(toolchange_settings.unretract_speed),
144
                     " U", LINEAR_UNIT(toolchange_settings.unretract_speed),
145
                     " F", toolchange_settings.fan_speed,
145
                     " F", toolchange_settings.fan_speed,
146
                     " G", toolchange_settings.fan_time);
146
                     " G", toolchange_settings.fan_time);
147
 
147
 
148
     #if ENABLED(TOOLCHANGE_MIGRATION_FEATURE)
148
     #if ENABLED(TOOLCHANGE_MIGRATION_FEATURE)
149
-      SERIAL_ECHOPAIR(" A", migration.automode);
150
-      SERIAL_ECHOPAIR(" L", LINEAR_UNIT(migration.last));
149
+      SERIAL_ECHOPGM(" A", migration.automode);
150
+      SERIAL_ECHOPGM(" L", LINEAR_UNIT(migration.last));
151
     #endif
151
     #endif
152
 
152
 
153
     #if ENABLED(TOOLCHANGE_PARK)
153
     #if ENABLED(TOOLCHANGE_PARK)
154
-      SERIAL_ECHOPAIR(" W", LINEAR_UNIT(toolchange_settings.enable_park));
155
-      SERIAL_ECHOPAIR_P(SP_X_STR, LINEAR_UNIT(toolchange_settings.change_point.x));
156
-      SERIAL_ECHOPAIR_P(SP_Y_STR, LINEAR_UNIT(toolchange_settings.change_point.y));
154
+      SERIAL_ECHOPGM(" W", LINEAR_UNIT(toolchange_settings.enable_park));
155
+      SERIAL_ECHOPGM_P(SP_X_STR, LINEAR_UNIT(toolchange_settings.change_point.x));
156
+      SERIAL_ECHOPGM_P(SP_Y_STR, LINEAR_UNIT(toolchange_settings.change_point.y));
157
     #endif
157
     #endif
158
 
158
 
159
     #if ENABLED(TOOLCHANGE_FS_PRIME_FIRST_USED)
159
     #if ENABLED(TOOLCHANGE_FS_PRIME_FIRST_USED)
160
-      SERIAL_ECHOPAIR(" V", LINEAR_UNIT(enable_first_prime));
160
+      SERIAL_ECHOPGM(" V", LINEAR_UNIT(enable_first_prime));
161
     #endif
161
     #endif
162
 
162
 
163
   #endif
163
   #endif
164
 
164
 
165
-  SERIAL_ECHOLNPAIR_P(SP_Z_STR, LINEAR_UNIT(toolchange_settings.z_raise));
165
+  SERIAL_ECHOLNPGM_P(SP_Z_STR, LINEAR_UNIT(toolchange_settings.z_raise));
166
 }
166
 }
167
 
167
 
168
 #endif // HAS_MULTI_EXTRUDER
168
 #endif // HAS_MULTI_EXTRUDER

+ 1
- 1
Marlin/src/gcode/config/M218.cpp Voir le fichier

60
   report_heading_etc(forReplay, PSTR(STR_HOTEND_OFFSETS));
60
   report_heading_etc(forReplay, PSTR(STR_HOTEND_OFFSETS));
61
   LOOP_S_L_N(e, 1, HOTENDS) {
61
   LOOP_S_L_N(e, 1, HOTENDS) {
62
     report_echo_start(forReplay);
62
     report_echo_start(forReplay);
63
-    SERIAL_ECHOPAIR_P(
63
+    SERIAL_ECHOPGM_P(
64
       PSTR("  M218 T"), e,
64
       PSTR("  M218 T"), e,
65
       SP_X_STR, LINEAR_UNIT(hotend_offset[e].x),
65
       SP_X_STR, LINEAR_UNIT(hotend_offset[e].x),
66
       SP_Y_STR, LINEAR_UNIT(hotend_offset[e].y)
66
       SP_Y_STR, LINEAR_UNIT(hotend_offset[e].y)

+ 1
- 1
Marlin/src/gcode/config/M220.cpp Voir le fichier

44
   if (parser.seenval('S')) feedrate_percentage = parser.value_int();
44
   if (parser.seenval('S')) feedrate_percentage = parser.value_int();
45
 
45
 
46
   if (!parser.seen_any()) {
46
   if (!parser.seen_any()) {
47
-    SERIAL_ECHOPAIR("FR:", feedrate_percentage);
47
+    SERIAL_ECHOPGM("FR:", feedrate_percentage);
48
     SERIAL_CHAR('%');
48
     SERIAL_CHAR('%');
49
     SERIAL_EOL();
49
     SERIAL_EOL();
50
   }
50
   }

+ 1
- 1
Marlin/src/gcode/config/M221.cpp Voir le fichier

38
   else {
38
   else {
39
     SERIAL_ECHO_START();
39
     SERIAL_ECHO_START();
40
     SERIAL_CHAR('E', '0' + target_extruder);
40
     SERIAL_CHAR('E', '0' + target_extruder);
41
-    SERIAL_ECHOPAIR(" Flow: ", planner.flow_percentage[target_extruder]);
41
+    SERIAL_ECHOPGM(" Flow: ", planner.flow_percentage[target_extruder]);
42
     SERIAL_CHAR('%');
42
     SERIAL_CHAR('%');
43
     SERIAL_EOL();
43
     SERIAL_EOL();
44
   }
44
   }

+ 1
- 1
Marlin/src/gcode/config/M281.cpp Voir le fichier

69
         case Z_PROBE_SERVO_NR:
69
         case Z_PROBE_SERVO_NR:
70
       #endif
70
       #endif
71
           report_echo_start(forReplay);
71
           report_echo_start(forReplay);
72
-          SERIAL_ECHOLNPAIR("  M281 P", i, " L", servo_angles[i][0], " U", servo_angles[i][1]);
72
+          SERIAL_ECHOLNPGM("  M281 P", i, " L", servo_angles[i][0], " U", servo_angles[i][1]);
73
     }
73
     }
74
   }
74
   }
75
 }
75
 }

+ 4
- 4
Marlin/src/gcode/config/M301.cpp Voir le fichier

83
   HOTEND_LOOP() {
83
   HOTEND_LOOP() {
84
     if (e == eindex || eindex == -1) {
84
     if (e == eindex || eindex == -1) {
85
       report_echo_start(forReplay);
85
       report_echo_start(forReplay);
86
-      SERIAL_ECHOPAIR_P(
86
+      SERIAL_ECHOPGM_P(
87
         #if ENABLED(PID_PARAMS_PER_HOTEND)
87
         #if ENABLED(PID_PARAMS_PER_HOTEND)
88
           PSTR("  M301 E"), e, SP_P_STR
88
           PSTR("  M301 E"), e, SP_P_STR
89
         #else
89
         #else
94
         , PSTR(" D"), unscalePID_d(PID_PARAM(Kd, e))
94
         , PSTR(" D"), unscalePID_d(PID_PARAM(Kd, e))
95
       );
95
       );
96
       #if ENABLED(PID_EXTRUSION_SCALING)
96
       #if ENABLED(PID_EXTRUSION_SCALING)
97
-        SERIAL_ECHOPAIR_P(SP_C_STR, PID_PARAM(Kc, e));
98
-        if (e == 0) SERIAL_ECHOPAIR(" L", thermalManager.lpq_len);
97
+        SERIAL_ECHOPGM_P(SP_C_STR, PID_PARAM(Kc, e));
98
+        if (e == 0) SERIAL_ECHOPGM(" L", thermalManager.lpq_len);
99
       #endif
99
       #endif
100
       #if ENABLED(PID_FAN_SCALING)
100
       #if ENABLED(PID_FAN_SCALING)
101
-        SERIAL_ECHOPAIR(" F", PID_PARAM(Kf, e));
101
+        SERIAL_ECHOPGM(" F", PID_PARAM(Kf, e));
102
       #endif
102
       #endif
103
       SERIAL_EOL();
103
       SERIAL_EOL();
104
     }
104
     }

+ 1
- 1
Marlin/src/gcode/config/M302.cpp Voir le fichier

56
     SERIAL_ECHO_START();
56
     SERIAL_ECHO_START();
57
     SERIAL_ECHOPGM("Cold extrudes are ");
57
     SERIAL_ECHOPGM("Cold extrudes are ");
58
     SERIAL_ECHOPGM_P(thermalManager.allow_cold_extrude ? PSTR("en") : PSTR("dis"));
58
     SERIAL_ECHOPGM_P(thermalManager.allow_cold_extrude ? PSTR("en") : PSTR("dis"));
59
-    SERIAL_ECHOLNPAIR("abled (min temp ", thermalManager.extrude_min_temp, "C)");
59
+    SERIAL_ECHOLNPGM("abled (min temp ", thermalManager.extrude_min_temp, "C)");
60
   }
60
   }
61
 }
61
 }
62
 
62
 

+ 1
- 1
Marlin/src/gcode/config/M309.cpp Voir le fichier

43
 
43
 
44
 void GcodeSuite::M309_report(const bool forReplay/*=true*/) {
44
 void GcodeSuite::M309_report(const bool forReplay/*=true*/) {
45
   report_heading_etc(forReplay, PSTR(STR_CHAMBER_PID));
45
   report_heading_etc(forReplay, PSTR(STR_CHAMBER_PID));
46
-  SERIAL_ECHOLNPAIR(
46
+  SERIAL_ECHOLNPGM(
47
       "  M309 P", thermalManager.temp_chamber.pid.Kp
47
       "  M309 P", thermalManager.temp_chamber.pid.Kp
48
     , " I", unscalePID_i(thermalManager.temp_chamber.pid.Ki)
48
     , " I", unscalePID_i(thermalManager.temp_chamber.pid.Ki)
49
     , " D", unscalePID_d(thermalManager.temp_chamber.pid.Kd)
49
     , " D", unscalePID_d(thermalManager.temp_chamber.pid.Kd)

+ 6
- 6
Marlin/src/gcode/config/M43.cpp Voir le fichier

130
 
130
 
131
     const uint8_t probe_index = parser.byteval('P', Z_PROBE_SERVO_NR);
131
     const uint8_t probe_index = parser.byteval('P', Z_PROBE_SERVO_NR);
132
 
132
 
133
-    SERIAL_ECHOLNPAIR("Servo probe test\n"
133
+    SERIAL_ECHOLNPGM("Servo probe test\n"
134
                       ". using index:  ", probe_index,
134
                       ". using index:  ", probe_index,
135
                       ", deploy angle: ", servo_angles[probe_index][0],
135
                       ", deploy angle: ", servo_angles[probe_index][0],
136
                       ", stow angle:   ", servo_angles[probe_index][1]
136
                       ", stow angle:   ", servo_angles[probe_index][1]
143
       #define PROBE_TEST_PIN Z_MIN_PIN
143
       #define PROBE_TEST_PIN Z_MIN_PIN
144
       constexpr bool probe_inverting = Z_MIN_ENDSTOP_INVERTING;
144
       constexpr bool probe_inverting = Z_MIN_ENDSTOP_INVERTING;
145
 
145
 
146
-      SERIAL_ECHOLNPAIR(". Probe Z_MIN_PIN: ", PROBE_TEST_PIN);
146
+      SERIAL_ECHOLNPGM(". Probe Z_MIN_PIN: ", PROBE_TEST_PIN);
147
       SERIAL_ECHOPGM(". Z_MIN_ENDSTOP_INVERTING: ");
147
       SERIAL_ECHOPGM(". Z_MIN_ENDSTOP_INVERTING: ");
148
 
148
 
149
     #else
149
     #else
151
       #define PROBE_TEST_PIN Z_MIN_PROBE_PIN
151
       #define PROBE_TEST_PIN Z_MIN_PROBE_PIN
152
       constexpr bool probe_inverting = Z_MIN_PROBE_ENDSTOP_INVERTING;
152
       constexpr bool probe_inverting = Z_MIN_PROBE_ENDSTOP_INVERTING;
153
 
153
 
154
-      SERIAL_ECHOLNPAIR(". Probe Z_MIN_PROBE_PIN: ", PROBE_TEST_PIN);
154
+      SERIAL_ECHOLNPGM(". Probe Z_MIN_PROBE_PIN: ", PROBE_TEST_PIN);
155
       SERIAL_ECHOPGM(   ". Z_MIN_PROBE_ENDSTOP_INVERTING: ");
155
       SERIAL_ECHOPGM(   ". Z_MIN_PROBE_ENDSTOP_INVERTING: ");
156
 
156
 
157
     #endif
157
     #endif
211
       if (deploy_state != stow_state) {
211
       if (deploy_state != stow_state) {
212
         SERIAL_ECHOLNPGM("= Mechanical Switch detected");
212
         SERIAL_ECHOLNPGM("= Mechanical Switch detected");
213
         if (deploy_state) {
213
         if (deploy_state) {
214
-          SERIAL_ECHOLNPAIR("  DEPLOYED state: HIGH (logic 1)",
214
+          SERIAL_ECHOLNPGM("  DEPLOYED state: HIGH (logic 1)",
215
                             "  STOWED (triggered) state: LOW (logic 0)");
215
                             "  STOWED (triggered) state: LOW (logic 0)");
216
         }
216
         }
217
         else {
217
         else {
218
-          SERIAL_ECHOLNPAIR("  DEPLOYED state: LOW (logic 0)",
218
+          SERIAL_ECHOLNPGM("  DEPLOYED state: LOW (logic 0)",
219
                             "  STOWED (triggered) state: HIGH (logic 1)");
219
                             "  STOWED (triggered) state: HIGH (logic 1)");
220
         }
220
         }
221
         #if ENABLED(BLTOUCH)
221
         #if ENABLED(BLTOUCH)
244
         if (probe_counter == 15)
244
         if (probe_counter == 15)
245
           SERIAL_ECHOLNPGM(": 30ms or more");
245
           SERIAL_ECHOLNPGM(": 30ms or more");
246
         else
246
         else
247
-          SERIAL_ECHOLNPAIR(" (+/- 4ms): ", probe_counter * 2);
247
+          SERIAL_ECHOLNPGM(" (+/- 4ms): ", probe_counter * 2);
248
 
248
 
249
         if (probe_counter >= 4) {
249
         if (probe_counter >= 4) {
250
           if (probe_counter == 15) {
250
           if (probe_counter == 15) {

+ 5
- 5
Marlin/src/gcode/config/M92.cpp Voir le fichier

78
                      micro_steps = argH ?: Z_MICROSTEPS;
78
                      micro_steps = argH ?: Z_MICROSTEPS;
79
       const float z_full_step_mm = micro_steps * planner.steps_to_mm[Z_AXIS];
79
       const float z_full_step_mm = micro_steps * planner.steps_to_mm[Z_AXIS];
80
       SERIAL_ECHO_START();
80
       SERIAL_ECHO_START();
81
-      SERIAL_ECHOPAIR("{ micro_steps:", micro_steps, ", z_full_step_mm:", z_full_step_mm);
81
+      SERIAL_ECHOPGM("{ micro_steps:", micro_steps, ", z_full_step_mm:", z_full_step_mm);
82
       if (wanted) {
82
       if (wanted) {
83
         const float best = uint16_t(wanted / z_full_step_mm) * z_full_step_mm;
83
         const float best = uint16_t(wanted / z_full_step_mm) * z_full_step_mm;
84
-        SERIAL_ECHOPAIR(", best:[", best);
84
+        SERIAL_ECHOPGM(", best:[", best);
85
         if (best != wanted) { SERIAL_CHAR(','); SERIAL_DECIMAL(best + z_full_step_mm); }
85
         if (best != wanted) { SERIAL_CHAR(','); SERIAL_DECIMAL(best + z_full_step_mm); }
86
         SERIAL_CHAR(']');
86
         SERIAL_CHAR(']');
87
       }
87
       }
92
 
92
 
93
 void GcodeSuite::M92_report(const bool forReplay/*=true*/, const int8_t e/*=-1*/) {
93
 void GcodeSuite::M92_report(const bool forReplay/*=true*/, const int8_t e/*=-1*/) {
94
   report_heading_etc(forReplay, PSTR(STR_STEPS_PER_UNIT));
94
   report_heading_etc(forReplay, PSTR(STR_STEPS_PER_UNIT));
95
-  SERIAL_ECHOPAIR_P(LIST_N(DOUBLE(LINEAR_AXES),
95
+  SERIAL_ECHOPGM_P(LIST_N(DOUBLE(LINEAR_AXES),
96
     PSTR("  M92 X"), LINEAR_UNIT(planner.settings.axis_steps_per_mm[X_AXIS]),
96
     PSTR("  M92 X"), LINEAR_UNIT(planner.settings.axis_steps_per_mm[X_AXIS]),
97
     SP_Y_STR, LINEAR_UNIT(planner.settings.axis_steps_per_mm[Y_AXIS]),
97
     SP_Y_STR, LINEAR_UNIT(planner.settings.axis_steps_per_mm[Y_AXIS]),
98
     SP_Z_STR, LINEAR_UNIT(planner.settings.axis_steps_per_mm[Z_AXIS]),
98
     SP_Z_STR, LINEAR_UNIT(planner.settings.axis_steps_per_mm[Z_AXIS]),
101
     SP_K_STR, LINEAR_UNIT(planner.settings.axis_steps_per_mm[K_AXIS]))
101
     SP_K_STR, LINEAR_UNIT(planner.settings.axis_steps_per_mm[K_AXIS]))
102
   );
102
   );
103
   #if HAS_EXTRUDERS && DISABLED(DISTINCT_E_FACTORS)
103
   #if HAS_EXTRUDERS && DISABLED(DISTINCT_E_FACTORS)
104
-    SERIAL_ECHOPAIR_P(SP_E_STR, VOLUMETRIC_UNIT(planner.settings.axis_steps_per_mm[E_AXIS]));
104
+    SERIAL_ECHOPGM_P(SP_E_STR, VOLUMETRIC_UNIT(planner.settings.axis_steps_per_mm[E_AXIS]));
105
   #endif
105
   #endif
106
   SERIAL_EOL();
106
   SERIAL_EOL();
107
 
107
 
109
     LOOP_L_N(i, E_STEPPERS) {
109
     LOOP_L_N(i, E_STEPPERS) {
110
       if (e >= 0 && i != e) continue;
110
       if (e >= 0 && i != e) continue;
111
       report_echo_start(forReplay);
111
       report_echo_start(forReplay);
112
-      SERIAL_ECHOLNPAIR_P(
112
+      SERIAL_ECHOLNPGM_P(
113
         PSTR("  M92 T"), i,
113
         PSTR("  M92 T"), i,
114
         SP_E_STR, VOLUMETRIC_UNIT(planner.settings.axis_steps_per_mm[E_AXIS_N(i)])
114
         SP_E_STR, VOLUMETRIC_UNIT(planner.settings.axis_steps_per_mm[E_AXIS_N(i)])
115
       );
115
       );

+ 4
- 4
Marlin/src/gcode/control/M111.cpp Voir le fichier

57
     SERIAL_ECHOPGM(STR_DEBUG_OFF);
57
     SERIAL_ECHOPGM(STR_DEBUG_OFF);
58
     #if !defined(__AVR__) || !defined(USBCON)
58
     #if !defined(__AVR__) || !defined(USBCON)
59
       #if ENABLED(SERIAL_STATS_RX_BUFFER_OVERRUNS)
59
       #if ENABLED(SERIAL_STATS_RX_BUFFER_OVERRUNS)
60
-        SERIAL_ECHOPAIR("\nBuffer Overruns: ", MYSERIAL1.buffer_overruns());
60
+        SERIAL_ECHOPGM("\nBuffer Overruns: ", MYSERIAL1.buffer_overruns());
61
       #endif
61
       #endif
62
 
62
 
63
       #if ENABLED(SERIAL_STATS_RX_FRAMING_ERRORS)
63
       #if ENABLED(SERIAL_STATS_RX_FRAMING_ERRORS)
64
-        SERIAL_ECHOPAIR("\nFraming Errors: ", MYSERIAL1.framing_errors());
64
+        SERIAL_ECHOPGM("\nFraming Errors: ", MYSERIAL1.framing_errors());
65
       #endif
65
       #endif
66
 
66
 
67
       #if ENABLED(SERIAL_STATS_DROPPED_RX)
67
       #if ENABLED(SERIAL_STATS_DROPPED_RX)
68
-        SERIAL_ECHOPAIR("\nDropped bytes: ", MYSERIAL1.dropped());
68
+        SERIAL_ECHOPGM("\nDropped bytes: ", MYSERIAL1.dropped());
69
       #endif
69
       #endif
70
 
70
 
71
       #if ENABLED(SERIAL_STATS_MAX_RX_QUEUED)
71
       #if ENABLED(SERIAL_STATS_MAX_RX_QUEUED)
72
-        SERIAL_ECHOPAIR("\nMax RX Queue Size: ", MYSERIAL1.rxMaxEnqueued());
72
+        SERIAL_ECHOPGM("\nMax RX Queue Size: ", MYSERIAL1.rxMaxEnqueued());
73
       #endif
73
       #endif
74
     #endif // !__AVR__ || !USBCON
74
     #endif // !__AVR__ || !USBCON
75
   }
75
   }

+ 1
- 1
Marlin/src/gcode/control/M211.cpp Voir le fichier

41
 
41
 
42
 void GcodeSuite::M211_report(const bool forReplay/*=true*/) {
42
 void GcodeSuite::M211_report(const bool forReplay/*=true*/) {
43
   report_heading_etc(forReplay, PSTR(STR_SOFT_ENDSTOPS));
43
   report_heading_etc(forReplay, PSTR(STR_SOFT_ENDSTOPS));
44
-  SERIAL_ECHOPAIR("  M211 S", AS_DIGIT(soft_endstop._enabled), " ; ");
44
+  SERIAL_ECHOPGM("  M211 S", AS_DIGIT(soft_endstop._enabled), " ; ");
45
   serialprintln_onoff(soft_endstop._enabled);
45
   serialprintln_onoff(soft_endstop._enabled);
46
 
46
 
47
   report_echo_start(forReplay);
47
   report_echo_start(forReplay);

+ 15
- 15
Marlin/src/gcode/control/M605.cpp Voir le fichier

127
           case DXC_DUPLICATION_MODE:  DEBUG_ECHOPGM("DUPLICATION");  break;
127
           case DXC_DUPLICATION_MODE:  DEBUG_ECHOPGM("DUPLICATION");  break;
128
           case DXC_MIRRORED_MODE:     DEBUG_ECHOPGM("MIRRORED");     break;
128
           case DXC_MIRRORED_MODE:     DEBUG_ECHOPGM("MIRRORED");     break;
129
         }
129
         }
130
-        DEBUG_ECHOPAIR("\nActive Ext: ", active_extruder);
130
+        DEBUG_ECHOPGM("\nActive Ext: ", active_extruder);
131
         if (!active_extruder_parked) DEBUG_ECHOPGM(" NOT ");
131
         if (!active_extruder_parked) DEBUG_ECHOPGM(" NOT ");
132
         DEBUG_ECHOPGM(" parked.");
132
         DEBUG_ECHOPGM(" parked.");
133
-        DEBUG_ECHOPAIR("\nactive_extruder_x_pos: ", current_position.x);
134
-        DEBUG_ECHOPAIR("\ninactive_extruder_x: ", inactive_extruder_x);
135
-        DEBUG_ECHOPAIR("\nextruder_duplication_enabled: ", extruder_duplication_enabled);
136
-        DEBUG_ECHOPAIR("\nduplicate_extruder_x_offset: ", duplicate_extruder_x_offset);
137
-        DEBUG_ECHOPAIR("\nduplicate_extruder_temp_offset: ", duplicate_extruder_temp_offset);
138
-        DEBUG_ECHOPAIR("\ndelayed_move_time: ", delayed_move_time);
139
-        DEBUG_ECHOPAIR("\nX1 Home X: ", x_home_pos(0), "\nX1_MIN_POS=", X1_MIN_POS, "\nX1_MAX_POS=", X1_MAX_POS);
140
-        DEBUG_ECHOPAIR("\nX2 Home X: ", x_home_pos(1), "\nX2_MIN_POS=", X2_MIN_POS, "\nX2_MAX_POS=", X2_MAX_POS);
141
-        DEBUG_ECHOPAIR("\nX2_HOME_DIR=", X2_HOME_DIR, "\nX2_HOME_POS=", X2_HOME_POS);
142
-        DEBUG_ECHOPAIR("\nDEFAULT_DUAL_X_CARRIAGE_MODE=", STRINGIFY(DEFAULT_DUAL_X_CARRIAGE_MODE));
143
-        DEBUG_ECHOPAIR("\toolchange_settings.z_raise=", toolchange_settings.z_raise);
144
-        DEBUG_ECHOPAIR("\nDEFAULT_DUPLICATION_X_OFFSET=", DEFAULT_DUPLICATION_X_OFFSET);
133
+        DEBUG_ECHOPGM("\nactive_extruder_x_pos: ", current_position.x);
134
+        DEBUG_ECHOPGM("\ninactive_extruder_x: ", inactive_extruder_x);
135
+        DEBUG_ECHOPGM("\nextruder_duplication_enabled: ", extruder_duplication_enabled);
136
+        DEBUG_ECHOPGM("\nduplicate_extruder_x_offset: ", duplicate_extruder_x_offset);
137
+        DEBUG_ECHOPGM("\nduplicate_extruder_temp_offset: ", duplicate_extruder_temp_offset);
138
+        DEBUG_ECHOPGM("\ndelayed_move_time: ", delayed_move_time);
139
+        DEBUG_ECHOPGM("\nX1 Home X: ", x_home_pos(0), "\nX1_MIN_POS=", X1_MIN_POS, "\nX1_MAX_POS=", X1_MAX_POS);
140
+        DEBUG_ECHOPGM("\nX2 Home X: ", x_home_pos(1), "\nX2_MIN_POS=", X2_MIN_POS, "\nX2_MAX_POS=", X2_MAX_POS);
141
+        DEBUG_ECHOPGM("\nX2_HOME_DIR=", X2_HOME_DIR, "\nX2_HOME_POS=", X2_HOME_POS);
142
+        DEBUG_ECHOPGM("\nDEFAULT_DUAL_X_CARRIAGE_MODE=", STRINGIFY(DEFAULT_DUAL_X_CARRIAGE_MODE));
143
+        DEBUG_ECHOPGM("\toolchange_settings.z_raise=", toolchange_settings.z_raise);
144
+        DEBUG_ECHOPGM("\nDEFAULT_DUPLICATION_X_OFFSET=", DEFAULT_DUPLICATION_X_OFFSET);
145
         DEBUG_EOL();
145
         DEBUG_EOL();
146
 
146
 
147
         HOTEND_LOOP() {
147
         HOTEND_LOOP() {
148
-          DEBUG_ECHOPAIR_P(SP_T_STR, e);
149
-          LOOP_LINEAR_AXES(a) DEBUG_ECHOPAIR("  hotend_offset[", e, "].", AS_CHAR(AXIS_CHAR(a) | 0x20), "=", hotend_offset[e][a]);
148
+          DEBUG_ECHOPGM_P(SP_T_STR, e);
149
+          LOOP_LINEAR_AXES(a) DEBUG_ECHOPGM("  hotend_offset[", e, "].", AS_CHAR(AXIS_CHAR(a) | 0x20), "=", hotend_offset[e][a]);
150
           DEBUG_EOL();
150
           DEBUG_EOL();
151
         }
151
         }
152
         DEBUG_EOL();
152
         DEBUG_EOL();

+ 2
- 2
Marlin/src/gcode/control/M993_M994.cpp Voir le fichier

37
   char fname[] = "spiflash.bin";
37
   char fname[] = "spiflash.bin";
38
   card.openFileWrite(fname);
38
   card.openFileWrite(fname);
39
   if (!card.isFileOpen()) {
39
   if (!card.isFileOpen()) {
40
-    SERIAL_ECHOLNPAIR("Failed to open ", fname, " to write.");
40
+    SERIAL_ECHOLNPGM("Failed to open ", fname, " to write.");
41
     return;
41
     return;
42
   }
42
   }
43
 
43
 
65
   char fname[] = "spiflash.bin";
65
   char fname[] = "spiflash.bin";
66
   card.openFileRead(fname);
66
   card.openFileRead(fname);
67
   if (!card.isFileOpen()) {
67
   if (!card.isFileOpen()) {
68
-    SERIAL_ECHOLNPAIR("Failed to open ", fname, " to read.");
68
+    SERIAL_ECHOLNPGM("Failed to open ", fname, " to read.");
69
     return;
69
     return;
70
   }
70
   }
71
 
71
 

+ 1
- 1
Marlin/src/gcode/control/T.cpp Voir le fichier

49
 void GcodeSuite::T(const int8_t tool_index) {
49
 void GcodeSuite::T(const int8_t tool_index) {
50
 
50
 
51
   DEBUG_SECTION(log_T, "T", DEBUGGING(LEVELING));
51
   DEBUG_SECTION(log_T, "T", DEBUGGING(LEVELING));
52
-  if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("...(", tool_index, ")");
52
+  if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("...(", tool_index, ")");
53
 
53
 
54
   // Count this command as movement / activity
54
   // Count this command as movement / activity
55
   reset_stepper_timeout();
55
   reset_stepper_timeout();

+ 3
- 3
Marlin/src/gcode/eeprom/M500-M504.cpp Voir le fichier

75
         if (dowrite) {
75
         if (dowrite) {
76
           val = parser.byteval('V');
76
           val = parser.byteval('V');
77
           persistentStore.write_data(addr, &val);
77
           persistentStore.write_data(addr, &val);
78
-          SERIAL_ECHOLNPAIR("Wrote address ", addr, " with ", val);
78
+          SERIAL_ECHOLNPGM("Wrote address ", addr, " with ", val);
79
         }
79
         }
80
         else {
80
         else {
81
           if (parser.seenval('T')) {
81
           if (parser.seenval('T')) {
82
             const int endaddr = parser.value_ushort();
82
             const int endaddr = parser.value_ushort();
83
             while (addr <= endaddr) {
83
             while (addr <= endaddr) {
84
               persistentStore.read_data(addr, &val);
84
               persistentStore.read_data(addr, &val);
85
-              SERIAL_ECHOLNPAIR("0x", hex_word(addr), ":", hex_byte(val));
85
+              SERIAL_ECHOLNPGM("0x", hex_word(addr), ":", hex_byte(val));
86
               addr++;
86
               addr++;
87
               safe_delay(10);
87
               safe_delay(10);
88
             }
88
             }
90
           }
90
           }
91
           else {
91
           else {
92
             persistentStore.read_data(addr, &val);
92
             persistentStore.read_data(addr, &val);
93
-            SERIAL_ECHOLNPAIR("Read address ", addr, " and got ", val);
93
+            SERIAL_ECHOLNPGM("Read address ", addr, " and got ", val);
94
           }
94
           }
95
         }
95
         }
96
         return;
96
         return;

+ 1
- 1
Marlin/src/gcode/feature/L6470/M122.cpp Voir le fichier

68
     if (!(sh.STATUS_AXIS & sh.STATUS_AXIS_WRONG_CMD)) SERIAL_ECHOPGM("IN");
68
     if (!(sh.STATUS_AXIS & sh.STATUS_AXIS_WRONG_CMD)) SERIAL_ECHOPGM("IN");
69
     SERIAL_ECHOPGM("VALID    ");
69
     SERIAL_ECHOPGM("VALID    ");
70
     SERIAL_ECHOPGM_P(sh.STATUS_AXIS & sh.STATUS_AXIS_NOTPERF_CMD ?  PSTR("COMPLETED    ") : PSTR("Not PERFORMED"));
70
     SERIAL_ECHOPGM_P(sh.STATUS_AXIS & sh.STATUS_AXIS_NOTPERF_CMD ?  PSTR("COMPLETED    ") : PSTR("Not PERFORMED"));
71
-    SERIAL_ECHOPAIR("\n...THERMAL: ", !(sh.STATUS_AXIS & sh.STATUS_AXIS_TH_SD) ? "SHUTDOWN       " : !(sh.STATUS_AXIS & sh.STATUS_AXIS_TH_WRN) ? "WARNING        " : "OK             ");
71
+    SERIAL_ECHOPGM("\n...THERMAL: ", !(sh.STATUS_AXIS & sh.STATUS_AXIS_TH_SD) ? "SHUTDOWN       " : !(sh.STATUS_AXIS & sh.STATUS_AXIS_TH_WRN) ? "WARNING        " : "OK             ");
72
   }
72
   }
73
   SERIAL_ECHOPGM("   OVERCURRENT:"); echo_yes_no((sh.STATUS_AXIS & sh.STATUS_AXIS_OCD) == 0);
73
   SERIAL_ECHOPGM("   OVERCURRENT:"); echo_yes_no((sh.STATUS_AXIS & sh.STATUS_AXIS_OCD) == 0);
74
   if (sh.STATUS_AXIS_LAYOUT != L6474_STATUS_LAYOUT) {
74
   if (sh.STATUS_AXIS_LAYOUT != L6474_STATUS_LAYOUT) {

+ 6
- 6
Marlin/src/gcode/feature/L6470/M906.cpp Voir le fichier

63
     #if ENABLED(L6470_CHITCHAT)
63
     #if ENABLED(L6470_CHITCHAT)
64
       char tmp[10];
64
       char tmp[10];
65
       sprintf_P(tmp, PSTR("%4x   "), status);
65
       sprintf_P(tmp, PSTR("%4x   "), status);
66
-      DEBUG_ECHOPAIR("   status: ", tmp);
66
+      DEBUG_ECHOPGM("   status: ", tmp);
67
       print_bin(status);
67
       print_bin(status);
68
     #else
68
     #else
69
       UNUSED(status);
69
       UNUSED(status);
104
       }
104
       }
105
       SERIAL_EOL();
105
       SERIAL_EOL();
106
 
106
 
107
-      SERIAL_ECHOPAIR("...MicroSteps: ", MicroSteps,
107
+      SERIAL_ECHOPGM("...MicroSteps: ", MicroSteps,
108
                       "   ADC_OUT: ", L6470_ADC_out);
108
                       "   ADC_OUT: ", L6470_ADC_out);
109
       SERIAL_ECHOPGM("   Vs_compensation: ");
109
       SERIAL_ECHOPGM("   Vs_compensation: ");
110
       SERIAL_ECHOPGM_P((motor.GetParam(sh.L6470_AXIS_CONFIG) & CONFIG_EN_VSCOMP) ? PSTR("ENABLED ") : PSTR("DISABLED"));
110
       SERIAL_ECHOPGM_P((motor.GetParam(sh.L6470_AXIS_CONFIG) & CONFIG_EN_VSCOMP) ? PSTR("ENABLED ") : PSTR("DISABLED"));
111
-      SERIAL_ECHOLNPAIR("   Compensation coefficient: ~", comp_coef * 0.01f);
111
+      SERIAL_ECHOLNPGM("   Compensation coefficient: ~", comp_coef * 0.01f);
112
 
112
 
113
-      SERIAL_ECHOPAIR("...KVAL_HOLD: ", motor.GetParam(L6470_KVAL_HOLD),
113
+      SERIAL_ECHOPGM("...KVAL_HOLD: ", motor.GetParam(L6470_KVAL_HOLD),
114
                       "   KVAL_RUN : ", motor.GetParam(L6470_KVAL_RUN),
114
                       "   KVAL_RUN : ", motor.GetParam(L6470_KVAL_RUN),
115
                       "   KVAL_ACC: ", motor.GetParam(L6470_KVAL_ACC),
115
                       "   KVAL_ACC: ", motor.GetParam(L6470_KVAL_ACC),
116
                       "   KVAL_DEC: ", motor.GetParam(L6470_KVAL_DEC),
116
                       "   KVAL_DEC: ", motor.GetParam(L6470_KVAL_DEC),
168
       SERIAL_ECHOLNPGM(" mA)   Motor Status: NA");
168
       SERIAL_ECHOLNPGM(" mA)   Motor Status: NA");
169
 
169
 
170
       const uint16_t MicroSteps = _BV(motor.GetParam(L6470_STEP_MODE) & 0x07); //NOMORE(MicroSteps, 16);
170
       const uint16_t MicroSteps = _BV(motor.GetParam(L6470_STEP_MODE) & 0x07); //NOMORE(MicroSteps, 16);
171
-      SERIAL_ECHOPAIR("...MicroSteps: ", MicroSteps,
171
+      SERIAL_ECHOPGM("...MicroSteps: ", MicroSteps,
172
                       "   ADC_OUT: ", L6470_ADC_out);
172
                       "   ADC_OUT: ", L6470_ADC_out);
173
 
173
 
174
       SERIAL_ECHOLNPGM("   Vs_compensation: NA\n");
174
       SERIAL_ECHOLNPGM("   Vs_compensation: NA\n");
185
           case 1:  DEBUG_ECHOLNPGM("75V/uS")  ; break;
185
           case 1:  DEBUG_ECHOLNPGM("75V/uS")  ; break;
186
           case 2:  DEBUG_ECHOLNPGM("110V/uS") ; break;
186
           case 2:  DEBUG_ECHOLNPGM("110V/uS") ; break;
187
           case 3:  DEBUG_ECHOLNPGM("260V/uS") ; break;
187
           case 3:  DEBUG_ECHOLNPGM("260V/uS") ; break;
188
-          default: DEBUG_ECHOLNPAIR("slew rate: ", (motor.GetParam(sh.L6470_AXIS_CONFIG) & CONFIG_POW_SR) >> CONFIG_POW_SR_BIT); break;
188
+          default: DEBUG_ECHOLNPGM("slew rate: ", (motor.GetParam(sh.L6470_AXIS_CONFIG) & CONFIG_POW_SR) >> CONFIG_POW_SR_BIT); break;
189
         }
189
         }
190
       #endif
190
       #endif
191
       SERIAL_EOL();
191
       SERIAL_EOL();

+ 14
- 14
Marlin/src/gcode/feature/L6470/M916-918.cpp Voir le fichier

96
   if (L64xxManager.get_user_input(driver_count, axis_index, axis_mon, position_max, position_min, final_feedrate, kval_hold, over_current_flag, OCD_TH_val, STALL_TH_val, over_current_threshold))
96
   if (L64xxManager.get_user_input(driver_count, axis_index, axis_mon, position_max, position_min, final_feedrate, kval_hold, over_current_flag, OCD_TH_val, STALL_TH_val, over_current_threshold))
97
     return;  // quit if invalid user input
97
     return;  // quit if invalid user input
98
 
98
 
99
-  DEBUG_ECHOLNPAIR("feedrate = ", final_feedrate);
99
+  DEBUG_ECHOLNPGM("feedrate = ", final_feedrate);
100
 
100
 
101
   planner.synchronize();                             // wait for all current movement commands to complete
101
   planner.synchronize();                             // wait for all current movement commands to complete
102
 
102
 
127
   do {
127
   do {
128
 
128
 
129
     if (sh.STATUS_AXIS_LAYOUT == L6474_STATUS_LAYOUT)
129
     if (sh.STATUS_AXIS_LAYOUT == L6474_STATUS_LAYOUT)
130
-      DEBUG_ECHOLNPAIR("TVAL current (mA) = ", (M91x_counter + 1) * sh.AXIS_STALL_CURRENT_CONSTANT_INV);        // report TVAL current for this run
130
+      DEBUG_ECHOLNPGM("TVAL current (mA) = ", (M91x_counter + 1) * sh.AXIS_STALL_CURRENT_CONSTANT_INV);        // report TVAL current for this run
131
     else
131
     else
132
-      DEBUG_ECHOLNPAIR("kval_hold = ", M91x_counter);                                   // report KVAL_HOLD for this run
132
+      DEBUG_ECHOLNPGM("kval_hold = ", M91x_counter);                                   // report KVAL_HOLD for this run
133
 
133
 
134
     for (j = 0; j < driver_count; j++)
134
     for (j = 0; j < driver_count; j++)
135
       L64xxManager.set_param(axis_index[j], L6470_KVAL_HOLD, M91x_counter);  //set KVAL_HOLD or TVAL (same register address)
135
       L64xxManager.set_param(axis_index[j], L6470_KVAL_HOLD, M91x_counter);  //set KVAL_HOLD or TVAL (same register address)
236
   if (L64xxManager.get_user_input(driver_count, axis_index, axis_mon, position_max, position_min, final_feedrate, kval_hold, over_current_flag, OCD_TH_val, STALL_TH_val, over_current_threshold))
236
   if (L64xxManager.get_user_input(driver_count, axis_index, axis_mon, position_max, position_min, final_feedrate, kval_hold, over_current_flag, OCD_TH_val, STALL_TH_val, over_current_threshold))
237
     return;  // quit if invalid user input
237
     return;  // quit if invalid user input
238
 
238
 
239
-  DEBUG_ECHOLNPAIR("feedrate = ", final_feedrate);
239
+  DEBUG_ECHOLNPGM("feedrate = ", final_feedrate);
240
 
240
 
241
   planner.synchronize();                             // wait for all current movement commands to complete
241
   planner.synchronize();                             // wait for all current movement commands to complete
242
 
242
 
252
                                           // 2 - OCD finalized - decreasing STALL - exit when STALL warning happens
252
                                           // 2 - OCD finalized - decreasing STALL - exit when STALL warning happens
253
                                           // 3 - OCD finalized - increasing STALL - exit when STALL warning stop
253
                                           // 3 - OCD finalized - increasing STALL - exit when STALL warning stop
254
                                           // 4 - all testing completed
254
                                           // 4 - all testing completed
255
-  DEBUG_ECHOPAIR(".\n.\n.\nover_current threshold : ", (OCD_TH_val + 1) * 375);   // first status display
256
-  DEBUG_ECHOPAIR("  (OCD_TH:  : ", OCD_TH_val);
255
+  DEBUG_ECHOPGM(".\n.\n.\nover_current threshold : ", (OCD_TH_val + 1) * 375);   // first status display
256
+  DEBUG_ECHOPGM("  (OCD_TH:  : ", OCD_TH_val);
257
   if (sh.STATUS_AXIS_LAYOUT != L6474_STATUS_LAYOUT) {
257
   if (sh.STATUS_AXIS_LAYOUT != L6474_STATUS_LAYOUT) {
258
-    DEBUG_ECHOPAIR(")   Stall threshold: ", (STALL_TH_val + 1) * 31.25);
259
-    DEBUG_ECHOPAIR("  (STALL_TH: ", STALL_TH_val);
258
+    DEBUG_ECHOPGM(")   Stall threshold: ", (STALL_TH_val + 1) * 31.25);
259
+    DEBUG_ECHOPGM("  (STALL_TH: ", STALL_TH_val);
260
   }
260
   }
261
   DEBUG_ECHOLNPGM(")");
261
   DEBUG_ECHOLNPGM(")");
262
 
262
 
263
   do {
263
   do {
264
 
264
 
265
-    if (sh.STATUS_AXIS_LAYOUT != L6474_STATUS_LAYOUT) DEBUG_ECHOPAIR("STALL threshold : ", (STALL_TH_val + 1) * 31.25);
266
-    DEBUG_ECHOLNPAIR("   OCD threshold : ", (OCD_TH_val + 1) * 375);
265
+    if (sh.STATUS_AXIS_LAYOUT != L6474_STATUS_LAYOUT) DEBUG_ECHOPGM("STALL threshold : ", (STALL_TH_val + 1) * 31.25);
266
+    DEBUG_ECHOLNPGM("   OCD threshold : ", (OCD_TH_val + 1) * 375);
267
 
267
 
268
     sprintf_P(gcode_string, PSTR("G0 %s%03d F%03d"), temp_axis_string, uint16_t(position_min), uint16_t(final_feedrate));
268
     sprintf_P(gcode_string, PSTR("G0 %s%03d F%03d"), temp_axis_string, uint16_t(position_min), uint16_t(final_feedrate));
269
     gcode.process_subcommands_now_P(gcode_string);
269
     gcode.process_subcommands_now_P(gcode_string);
303
         if (!(k % 4)) {
303
         if (!(k % 4)) {
304
           kval_hold *= 0.95;
304
           kval_hold *= 0.95;
305
           DEBUG_EOL();
305
           DEBUG_EOL();
306
-          DEBUG_ECHOLNPAIR("Lowering KVAL_HOLD by about 5% to ", kval_hold);
306
+          DEBUG_ECHOLNPGM("Lowering KVAL_HOLD by about 5% to ", kval_hold);
307
           for (j = 0; j < driver_count; j++)
307
           for (j = 0; j < driver_count; j++)
308
             L64xxManager.set_param(axis_index[j], L6470_KVAL_HOLD, kval_hold);
308
             L64xxManager.set_param(axis_index[j], L6470_KVAL_HOLD, kval_hold);
309
         }
309
         }
590
   }
590
   }
591
   m_steps = L64xxManager.get_param(axis_index[0], L6470_STEP_MODE) & 0x07;   // get microsteps
591
   m_steps = L64xxManager.get_param(axis_index[0], L6470_STEP_MODE) & 0x07;   // get microsteps
592
 
592
 
593
-  DEBUG_ECHOLNPAIR("Microsteps = ", _BV(m_steps));
594
-  DEBUG_ECHOLNPAIR("target (maximum) feedrate = ", final_feedrate);
593
+  DEBUG_ECHOLNPGM("Microsteps = ", _BV(m_steps));
594
+  DEBUG_ECHOLNPGM("target (maximum) feedrate = ", final_feedrate);
595
 
595
 
596
   const float feedrate_inc = final_feedrate / 10,   // Start at 1/10 of max & go up by 1/10 per step
596
   const float feedrate_inc = final_feedrate / 10,   // Start at 1/10 of max & go up by 1/10 per step
597
               fr_limit = final_feedrate * 0.99f;    // Rounding-safe comparison value
597
               fr_limit = final_feedrate * 0.99f;    // Rounding-safe comparison value
612
 
612
 
613
   do {
613
   do {
614
     current_feedrate += feedrate_inc;
614
     current_feedrate += feedrate_inc;
615
-    DEBUG_ECHOLNPAIR("...feedrate = ", current_feedrate);
615
+    DEBUG_ECHOLNPGM("...feedrate = ", current_feedrate);
616
 
616
 
617
     sprintf_P(gcode_string, PSTR("G0 %s%03d F%03d"), temp_axis_string, uint16_t(position_min), uint16_t(current_feedrate));
617
     sprintf_P(gcode_string, PSTR("G0 %s%03d F%03d"), temp_axis_string, uint16_t(position_min), uint16_t(current_feedrate));
618
     gcode.process_subcommands_now_P(gcode_string);
618
     gcode.process_subcommands_now_P(gcode_string);

+ 5
- 5
Marlin/src/gcode/feature/advance/M900.cpp Voir le fichier

115
     #if ENABLED(EXTRA_LIN_ADVANCE_K)
115
     #if ENABLED(EXTRA_LIN_ADVANCE_K)
116
 
116
 
117
       #if EXTRUDERS < 2
117
       #if EXTRUDERS < 2
118
-        SERIAL_ECHOLNPAIR("Advance S", new_slot, " K", kref, "(S", !new_slot, " K", lref, ")");
118
+        SERIAL_ECHOLNPGM("Advance S", new_slot, " K", kref, "(S", !new_slot, " K", lref, ")");
119
       #else
119
       #else
120
         LOOP_L_N(i, EXTRUDERS) {
120
         LOOP_L_N(i, EXTRUDERS) {
121
           const bool slot = TEST(lin_adv_slot, i);
121
           const bool slot = TEST(lin_adv_slot, i);
122
-          SERIAL_ECHOLNPAIR("Advance T", i, " S", slot, " K", planner.extruder_advance_K[i],
122
+          SERIAL_ECHOLNPGM("Advance T", i, " S", slot, " K", planner.extruder_advance_K[i],
123
                             "(S", !slot, " K", other_extruder_advance_K[i], ")");
123
                             "(S", !slot, " K", other_extruder_advance_K[i], ")");
124
           SERIAL_EOL();
124
           SERIAL_EOL();
125
         }
125
         }
129
 
129
 
130
       SERIAL_ECHO_START();
130
       SERIAL_ECHO_START();
131
       #if EXTRUDERS < 2
131
       #if EXTRUDERS < 2
132
-        SERIAL_ECHOLNPAIR("Advance K=", planner.extruder_advance_K[0]);
132
+        SERIAL_ECHOLNPGM("Advance K=", planner.extruder_advance_K[0]);
133
       #else
133
       #else
134
         SERIAL_ECHOPGM("Advance K");
134
         SERIAL_ECHOPGM("Advance K");
135
         LOOP_L_N(i, EXTRUDERS) {
135
         LOOP_L_N(i, EXTRUDERS) {
148
   report_heading(forReplay, PSTR(STR_LINEAR_ADVANCE));
148
   report_heading(forReplay, PSTR(STR_LINEAR_ADVANCE));
149
   #if EXTRUDERS < 2
149
   #if EXTRUDERS < 2
150
     report_echo_start(forReplay);
150
     report_echo_start(forReplay);
151
-    SERIAL_ECHOLNPAIR("  M900 K", planner.extruder_advance_K[0]);
151
+    SERIAL_ECHOLNPGM("  M900 K", planner.extruder_advance_K[0]);
152
   #else
152
   #else
153
     LOOP_L_N(i, EXTRUDERS) {
153
     LOOP_L_N(i, EXTRUDERS) {
154
       report_echo_start(forReplay);
154
       report_echo_start(forReplay);
155
-      SERIAL_ECHOLNPAIR("  M900 T", i, " K", planner.extruder_advance_K[i]);
155
+      SERIAL_ECHOLNPGM("  M900 T", i, " K", planner.extruder_advance_K[i]);
156
     }
156
     }
157
   #endif
157
   #endif
158
 }
158
 }

+ 1
- 1
Marlin/src/gcode/feature/controllerfan/M710.cpp Voir le fichier

68
 
68
 
69
 void GcodeSuite::M710_report(const bool forReplay/*=true*/) {
69
 void GcodeSuite::M710_report(const bool forReplay/*=true*/) {
70
   report_heading_etc(forReplay, PSTR(STR_CONTROLLER_FAN));
70
   report_heading_etc(forReplay, PSTR(STR_CONTROLLER_FAN));
71
-  SERIAL_ECHOLNPAIR("  M710"
71
+  SERIAL_ECHOLNPGM("  M710"
72
     " S", int(controllerFan.settings.active_speed),
72
     " S", int(controllerFan.settings.active_speed),
73
     " I", int(controllerFan.settings.idle_speed),
73
     " I", int(controllerFan.settings.idle_speed),
74
     " A", int(controllerFan.settings.auto_mode),
74
     " A", int(controllerFan.settings.auto_mode),

+ 1
- 1
Marlin/src/gcode/feature/digipot/M907-M910.cpp Voir le fichier

102
   void GcodeSuite::M907_report(const bool forReplay/*=true*/) {
102
   void GcodeSuite::M907_report(const bool forReplay/*=true*/) {
103
     report_heading_etc(forReplay, PSTR(STR_STEPPER_MOTOR_CURRENTS));
103
     report_heading_etc(forReplay, PSTR(STR_STEPPER_MOTOR_CURRENTS));
104
     #if HAS_MOTOR_CURRENT_PWM
104
     #if HAS_MOTOR_CURRENT_PWM
105
-      SERIAL_ECHOLNPAIR_P(                                    // PWM-based has 3 values:
105
+      SERIAL_ECHOLNPGM_P(                                    // PWM-based has 3 values:
106
           PSTR("  M907 X"), stepper.motor_current_setting[0]  // X and Y
106
           PSTR("  M907 X"), stepper.motor_current_setting[0]  // X and Y
107
         , SP_Z_STR,         stepper.motor_current_setting[1]  // Z
107
         , SP_Z_STR,         stepper.motor_current_setting[1]  // Z
108
         , SP_E_STR,         stepper.motor_current_setting[2]  // E
108
         , SP_E_STR,         stepper.motor_current_setting[2]  // E

+ 2
- 2
Marlin/src/gcode/feature/filwidth/M404-M407.cpp Voir le fichier

38
     planner.volumetric_area_nominal = CIRCLE_AREA(filwidth.nominal_mm * 0.5);
38
     planner.volumetric_area_nominal = CIRCLE_AREA(filwidth.nominal_mm * 0.5);
39
   }
39
   }
40
   else
40
   else
41
-    SERIAL_ECHOLNPAIR("Filament dia (nominal mm):", filwidth.nominal_mm);
41
+    SERIAL_ECHOLNPGM("Filament dia (nominal mm):", filwidth.nominal_mm);
42
 }
42
 }
43
 
43
 
44
 /**
44
 /**
65
  * M407: Get measured filament diameter on serial output
65
  * M407: Get measured filament diameter on serial output
66
  */
66
  */
67
 void GcodeSuite::M407() {
67
 void GcodeSuite::M407() {
68
-  SERIAL_ECHOLNPAIR("Filament dia (measured mm):", filwidth.measured_mm);
68
+  SERIAL_ECHOLNPGM("Filament dia (measured mm):", filwidth.measured_mm);
69
 }
69
 }
70
 
70
 
71
 #endif // FILAMENT_WIDTH_SENSOR
71
 #endif // FILAMENT_WIDTH_SENSOR

+ 3
- 3
Marlin/src/gcode/feature/mixing/M166.cpp Voir le fichier

30
 #include "../../../feature/mixing.h"
30
 #include "../../../feature/mixing.h"
31
 
31
 
32
 inline void echo_mix() {
32
 inline void echo_mix() {
33
-  SERIAL_ECHOPAIR(" (", mixer.mix[0], "%|", mixer.mix[1], "%)");
33
+  SERIAL_ECHOPGM(" (", mixer.mix[0], "%|", mixer.mix[1], "%)");
34
 }
34
 }
35
 
35
 
36
 inline void echo_zt(const int t, const_float_t z) {
36
 inline void echo_zt(const int t, const_float_t z) {
37
   mixer.update_mix_from_vtool(t);
37
   mixer.update_mix_from_vtool(t);
38
-  SERIAL_ECHOPAIR_P(SP_Z_STR, z, SP_T_STR, t);
38
+  SERIAL_ECHOPGM_P(SP_Z_STR, z, SP_T_STR, t);
39
   echo_mix();
39
   echo_mix();
40
 }
40
 }
41
 
41
 
74
 
74
 
75
     #if ENABLED(GRADIENT_VTOOL)
75
     #if ENABLED(GRADIENT_VTOOL)
76
       if (mixer.gradient.vtool_index >= 0) {
76
       if (mixer.gradient.vtool_index >= 0) {
77
-        SERIAL_ECHOPAIR(" (T", mixer.gradient.vtool_index);
77
+        SERIAL_ECHOPGM(" (T", mixer.gradient.vtool_index);
78
         SERIAL_CHAR(')');
78
         SERIAL_CHAR(')');
79
       }
79
       }
80
     #endif
80
     #endif

+ 1
- 1
Marlin/src/gcode/feature/password/M510-M512.cpp Voir le fichier

66
       if (password.value_entry < CAT(1e, PASSWORD_LENGTH)) {
66
       if (password.value_entry < CAT(1e, PASSWORD_LENGTH)) {
67
         password.is_set = true;
67
         password.is_set = true;
68
         password.value = password.value_entry;
68
         password.value = password.value_entry;
69
-        SERIAL_ECHOLNPAIR(STR_PASSWORD_SET, password.value); // TODO: Update password.string
69
+        SERIAL_ECHOLNPGM(STR_PASSWORD_SET, password.value); // TODO: Update password.string
70
       }
70
       }
71
       else
71
       else
72
         SERIAL_ECHOLNPGM(STR_PASSWORD_TOO_LONG);
72
         SERIAL_ECHOLNPGM(STR_PASSWORD_TOO_LONG);

+ 1
- 1
Marlin/src/gcode/feature/pause/G60.cpp Voir le fichier

47
   SBI(saved_slots[slot >> 3], slot & 0x07);
47
   SBI(saved_slots[slot >> 3], slot & 0x07);
48
 
48
 
49
   #if ENABLED(SAVED_POSITIONS_DEBUG)
49
   #if ENABLED(SAVED_POSITIONS_DEBUG)
50
-    DEBUG_ECHOPAIR(STR_SAVED_POS " S", slot);
50
+    DEBUG_ECHOPGM(STR_SAVED_POS " S", slot);
51
     const xyze_pos_t &pos = stored_position[slot];
51
     const xyze_pos_t &pos = stored_position[slot];
52
     DEBUG_ECHOLNPAIR_F_P(
52
     DEBUG_ECHOLNPAIR_F_P(
53
       LIST_N(DOUBLE(LOGICAL_AXES), SP_E_STR, pos.e,
53
       LIST_N(DOUBLE(LOGICAL_AXES), SP_E_STR, pos.e,

+ 2
- 2
Marlin/src/gcode/feature/pause/G61.cpp Voir le fichier

69
   }
69
   }
70
   else {
70
   else {
71
     if (parser.seen(LINEAR_AXIS_GANG("X", "Y", "Z", AXIS4_STR, AXIS5_STR, AXIS6_STR))) {
71
     if (parser.seen(LINEAR_AXIS_GANG("X", "Y", "Z", AXIS4_STR, AXIS5_STR, AXIS6_STR))) {
72
-      DEBUG_ECHOPAIR(STR_RESTORING_POS " S", slot);
72
+      DEBUG_ECHOPGM(STR_RESTORING_POS " S", slot);
73
       LOOP_LINEAR_AXES(i) {
73
       LOOP_LINEAR_AXES(i) {
74
         destination[i] = parser.seen(AXIS_CHAR(i))
74
         destination[i] = parser.seen(AXIS_CHAR(i))
75
           ? stored_position[slot][i] + parser.value_axis_units((AxisEnum)i)
75
           ? stored_position[slot][i] + parser.value_axis_units((AxisEnum)i)
83
     }
83
     }
84
     #if HAS_EXTRUDERS
84
     #if HAS_EXTRUDERS
85
       if (parser.seen_test('E')) {
85
       if (parser.seen_test('E')) {
86
-        DEBUG_ECHOLNPAIR(STR_RESTORING_POS " S", slot, " E", current_position.e, "=>", stored_position[slot].e);
86
+        DEBUG_ECHOLNPGM(STR_RESTORING_POS " S", slot, " E", current_position.e, "=>", stored_position[slot].e);
87
         SYNC_E(stored_position[slot].e);
87
         SYNC_E(stored_position[slot].e);
88
       }
88
       }
89
     #endif
89
     #endif

+ 2
- 2
Marlin/src/gcode/feature/pause/M603.cpp Voir le fichier

69
 
69
 
70
   #if EXTRUDERS == 1
70
   #if EXTRUDERS == 1
71
     report_echo_start(forReplay);
71
     report_echo_start(forReplay);
72
-    SERIAL_ECHOPAIR("  M603 L", LINEAR_UNIT(fc_settings[0].load_length), " U", LINEAR_UNIT(fc_settings[0].unload_length), " ;");
72
+    SERIAL_ECHOPGM("  M603 L", LINEAR_UNIT(fc_settings[0].load_length), " U", LINEAR_UNIT(fc_settings[0].unload_length), " ;");
73
     say_units();
73
     say_units();
74
   #else
74
   #else
75
     LOOP_L_N(e, EXTRUDERS) {
75
     LOOP_L_N(e, EXTRUDERS) {
76
       report_echo_start(forReplay);
76
       report_echo_start(forReplay);
77
-      SERIAL_ECHOPAIR("  M603 T", e, " L", LINEAR_UNIT(fc_settings[e].load_length), " U", LINEAR_UNIT(fc_settings[e].unload_length), " ;");
77
+      SERIAL_ECHOPGM("  M603 T", e, " L", LINEAR_UNIT(fc_settings[e].load_length), " U", LINEAR_UNIT(fc_settings[e].unload_length), " ;");
78
       say_units();
78
       say_units();
79
     }
79
     }
80
   #endif
80
   #endif

+ 1
- 1
Marlin/src/gcode/feature/power_monitor/M430.cpp Voir le fichier

50
     #endif
50
     #endif
51
   #endif
51
   #endif
52
   if (do_report) {
52
   if (do_report) {
53
-    SERIAL_ECHOLNPAIR(
53
+    SERIAL_ECHOLNPGM(
54
       #if ENABLED(POWER_MONITOR_CURRENT)
54
       #if ENABLED(POWER_MONITOR_CURRENT)
55
         "Current: ", power_monitor.getAmps(), "A"
55
         "Current: ", power_monitor.getAmps(), "A"
56
         #if ENABLED(POWER_MONITOR_VOLTAGE)
56
         #if ENABLED(POWER_MONITOR_VOLTAGE)

+ 1
- 1
Marlin/src/gcode/feature/powerloss/M413.cpp Voir le fichier

58
 
58
 
59
 void GcodeSuite::M413_report(const bool forReplay/*=true*/) {
59
 void GcodeSuite::M413_report(const bool forReplay/*=true*/) {
60
   report_heading_etc(forReplay, PSTR(STR_POWER_LOSS_RECOVERY));
60
   report_heading_etc(forReplay, PSTR(STR_POWER_LOSS_RECOVERY));
61
-  SERIAL_ECHOPAIR("  M413 S", AS_DIGIT(recovery.enabled), " ; ");
61
+  SERIAL_ECHOPGM("  M413 S", AS_DIGIT(recovery.enabled), " ; ");
62
   serialprintln_onoff(recovery.enabled);
62
   serialprintln_onoff(recovery.enabled);
63
 }
63
 }
64
 
64
 

+ 2
- 2
Marlin/src/gcode/feature/runout/M412.cpp Voir le fichier

56
     SERIAL_ECHOPGM("Filament runout ");
56
     SERIAL_ECHOPGM("Filament runout ");
57
     serialprint_onoff(runout.enabled);
57
     serialprint_onoff(runout.enabled);
58
     #if HAS_FILAMENT_RUNOUT_DISTANCE
58
     #if HAS_FILAMENT_RUNOUT_DISTANCE
59
-      SERIAL_ECHOPAIR(" ; Distance ", runout.runout_distance(), "mm");
59
+      SERIAL_ECHOPGM(" ; Distance ", runout.runout_distance(), "mm");
60
     #endif
60
     #endif
61
     #if ENABLED(HOST_ACTION_COMMANDS)
61
     #if ENABLED(HOST_ACTION_COMMANDS)
62
       SERIAL_ECHOPGM(" ; Host handling ");
62
       SERIAL_ECHOPGM(" ; Host handling ");
68
 
68
 
69
 void GcodeSuite::M412_report(const bool forReplay/*=true*/) {
69
 void GcodeSuite::M412_report(const bool forReplay/*=true*/) {
70
   report_heading_etc(forReplay, PSTR(STR_FILAMENT_RUNOUT_SENSOR));
70
   report_heading_etc(forReplay, PSTR(STR_FILAMENT_RUNOUT_SENSOR));
71
-  SERIAL_ECHOLNPAIR(
71
+  SERIAL_ECHOLNPGM(
72
     "  M412 S", runout.enabled
72
     "  M412 S", runout.enabled
73
     #if HAS_FILAMENT_RUNOUT_DISTANCE
73
     #if HAS_FILAMENT_RUNOUT_DISTANCE
74
       , " D", LINEAR_UNIT(runout.runout_distance())
74
       , " D", LINEAR_UNIT(runout.runout_distance())

+ 19
- 19
Marlin/src/gcode/feature/trinamic/M906.cpp Voir le fichier

209
   #if AXIS_IS_TMC(X) || AXIS_IS_TMC(Y) || AXIS_IS_TMC(Z)
209
   #if AXIS_IS_TMC(X) || AXIS_IS_TMC(Y) || AXIS_IS_TMC(Z)
210
     say_M906(forReplay);
210
     say_M906(forReplay);
211
     #if AXIS_IS_TMC(X)
211
     #if AXIS_IS_TMC(X)
212
-      SERIAL_ECHOPAIR_P(SP_X_STR, stepperX.getMilliamps());
212
+      SERIAL_ECHOPGM_P(SP_X_STR, stepperX.getMilliamps());
213
     #endif
213
     #endif
214
     #if AXIS_IS_TMC(Y)
214
     #if AXIS_IS_TMC(Y)
215
-      SERIAL_ECHOPAIR_P(SP_Y_STR, stepperY.getMilliamps());
215
+      SERIAL_ECHOPGM_P(SP_Y_STR, stepperY.getMilliamps());
216
     #endif
216
     #endif
217
     #if AXIS_IS_TMC(Z)
217
     #if AXIS_IS_TMC(Z)
218
-      SERIAL_ECHOPAIR_P(SP_Z_STR, stepperZ.getMilliamps());
218
+      SERIAL_ECHOPGM_P(SP_Z_STR, stepperZ.getMilliamps());
219
     #endif
219
     #endif
220
     SERIAL_EOL();
220
     SERIAL_EOL();
221
   #endif
221
   #endif
224
     say_M906(forReplay);
224
     say_M906(forReplay);
225
     SERIAL_ECHOPGM(" I1");
225
     SERIAL_ECHOPGM(" I1");
226
     #if AXIS_IS_TMC(X2)
226
     #if AXIS_IS_TMC(X2)
227
-      SERIAL_ECHOPAIR_P(SP_X_STR, stepperX2.getMilliamps());
227
+      SERIAL_ECHOPGM_P(SP_X_STR, stepperX2.getMilliamps());
228
     #endif
228
     #endif
229
     #if AXIS_IS_TMC(Y2)
229
     #if AXIS_IS_TMC(Y2)
230
-      SERIAL_ECHOPAIR_P(SP_Y_STR, stepperY2.getMilliamps());
230
+      SERIAL_ECHOPGM_P(SP_Y_STR, stepperY2.getMilliamps());
231
     #endif
231
     #endif
232
     #if AXIS_IS_TMC(Z2)
232
     #if AXIS_IS_TMC(Z2)
233
-      SERIAL_ECHOPAIR_P(SP_Z_STR, stepperZ2.getMilliamps());
233
+      SERIAL_ECHOPGM_P(SP_Z_STR, stepperZ2.getMilliamps());
234
     #endif
234
     #endif
235
     SERIAL_EOL();
235
     SERIAL_EOL();
236
   #endif
236
   #endif
237
 
237
 
238
   #if AXIS_IS_TMC(Z3)
238
   #if AXIS_IS_TMC(Z3)
239
     say_M906(forReplay);
239
     say_M906(forReplay);
240
-    SERIAL_ECHOLNPAIR(" I2 Z", stepperZ3.getMilliamps());
240
+    SERIAL_ECHOLNPGM(" I2 Z", stepperZ3.getMilliamps());
241
   #endif
241
   #endif
242
 
242
 
243
   #if AXIS_IS_TMC(Z4)
243
   #if AXIS_IS_TMC(Z4)
244
     say_M906(forReplay);
244
     say_M906(forReplay);
245
-    SERIAL_ECHOLNPAIR(" I3 Z", stepperZ4.getMilliamps());
245
+    SERIAL_ECHOLNPGM(" I3 Z", stepperZ4.getMilliamps());
246
   #endif
246
   #endif
247
 
247
 
248
   #if AXIS_IS_TMC(I)
248
   #if AXIS_IS_TMC(I)
249
     say_M906(forReplay);
249
     say_M906(forReplay);
250
-    SERIAL_ECHOLNPAIR_P(SP_I_STR, stepperI.getMilliamps());
250
+    SERIAL_ECHOLNPGM_P(SP_I_STR, stepperI.getMilliamps());
251
   #endif
251
   #endif
252
   #if AXIS_IS_TMC(J)
252
   #if AXIS_IS_TMC(J)
253
     say_M906(forReplay);
253
     say_M906(forReplay);
254
-    SERIAL_ECHOLNPAIR_P(SP_J_STR, stepperJ.getMilliamps());
254
+    SERIAL_ECHOLNPGM_P(SP_J_STR, stepperJ.getMilliamps());
255
   #endif
255
   #endif
256
   #if AXIS_IS_TMC(K)
256
   #if AXIS_IS_TMC(K)
257
     say_M906(forReplay);
257
     say_M906(forReplay);
258
-    SERIAL_ECHOLNPAIR_P(SP_K_STR, stepperK.getMilliamps());
258
+    SERIAL_ECHOLNPGM_P(SP_K_STR, stepperK.getMilliamps());
259
   #endif
259
   #endif
260
 
260
 
261
   #if AXIS_IS_TMC(E0)
261
   #if AXIS_IS_TMC(E0)
262
     say_M906(forReplay);
262
     say_M906(forReplay);
263
-    SERIAL_ECHOLNPAIR(" T0 E", stepperE0.getMilliamps());
263
+    SERIAL_ECHOLNPGM(" T0 E", stepperE0.getMilliamps());
264
   #endif
264
   #endif
265
   #if AXIS_IS_TMC(E1)
265
   #if AXIS_IS_TMC(E1)
266
     say_M906(forReplay);
266
     say_M906(forReplay);
267
-    SERIAL_ECHOLNPAIR(" T1 E", stepperE1.getMilliamps());
267
+    SERIAL_ECHOLNPGM(" T1 E", stepperE1.getMilliamps());
268
   #endif
268
   #endif
269
   #if AXIS_IS_TMC(E2)
269
   #if AXIS_IS_TMC(E2)
270
     say_M906(forReplay);
270
     say_M906(forReplay);
271
-    SERIAL_ECHOLNPAIR(" T2 E", stepperE2.getMilliamps());
271
+    SERIAL_ECHOLNPGM(" T2 E", stepperE2.getMilliamps());
272
   #endif
272
   #endif
273
   #if AXIS_IS_TMC(E3)
273
   #if AXIS_IS_TMC(E3)
274
     say_M906(forReplay);
274
     say_M906(forReplay);
275
-    SERIAL_ECHOLNPAIR(" T3 E", stepperE3.getMilliamps());
275
+    SERIAL_ECHOLNPGM(" T3 E", stepperE3.getMilliamps());
276
   #endif
276
   #endif
277
   #if AXIS_IS_TMC(E4)
277
   #if AXIS_IS_TMC(E4)
278
     say_M906(forReplay);
278
     say_M906(forReplay);
279
-    SERIAL_ECHOLNPAIR(" T4 E", stepperE4.getMilliamps());
279
+    SERIAL_ECHOLNPGM(" T4 E", stepperE4.getMilliamps());
280
   #endif
280
   #endif
281
   #if AXIS_IS_TMC(E5)
281
   #if AXIS_IS_TMC(E5)
282
     say_M906(forReplay);
282
     say_M906(forReplay);
283
-    SERIAL_ECHOLNPAIR(" T5 E", stepperE5.getMilliamps());
283
+    SERIAL_ECHOLNPGM(" T5 E", stepperE5.getMilliamps());
284
   #endif
284
   #endif
285
   #if AXIS_IS_TMC(E6)
285
   #if AXIS_IS_TMC(E6)
286
     say_M906(forReplay);
286
     say_M906(forReplay);
287
-    SERIAL_ECHOLNPAIR(" T6 E", stepperE6.getMilliamps());
287
+    SERIAL_ECHOLNPGM(" T6 E", stepperE6.getMilliamps());
288
   #endif
288
   #endif
289
   #if AXIS_IS_TMC(E7)
289
   #if AXIS_IS_TMC(E7)
290
     say_M906(forReplay);
290
     say_M906(forReplay);
291
-    SERIAL_ECHOLNPAIR(" T7 E", stepperE7.getMilliamps());
291
+    SERIAL_ECHOLNPGM(" T7 E", stepperE7.getMilliamps());
292
   #endif
292
   #endif
293
   SERIAL_EOL();
293
   SERIAL_EOL();
294
 }
294
 }

+ 30
- 30
Marlin/src/gcode/feature/trinamic/M911-M914.cpp Voir le fichier

321
     #if X_HAS_STEALTHCHOP || Y_HAS_STEALTHCHOP || Z_HAS_STEALTHCHOP
321
     #if X_HAS_STEALTHCHOP || Y_HAS_STEALTHCHOP || Z_HAS_STEALTHCHOP
322
       say_M913(forReplay);
322
       say_M913(forReplay);
323
       #if X_HAS_STEALTHCHOP
323
       #if X_HAS_STEALTHCHOP
324
-        SERIAL_ECHOPAIR_P(SP_X_STR, stepperX.get_pwm_thrs());
324
+        SERIAL_ECHOPGM_P(SP_X_STR, stepperX.get_pwm_thrs());
325
       #endif
325
       #endif
326
       #if Y_HAS_STEALTHCHOP
326
       #if Y_HAS_STEALTHCHOP
327
-        SERIAL_ECHOPAIR_P(SP_Y_STR, stepperY.get_pwm_thrs());
327
+        SERIAL_ECHOPGM_P(SP_Y_STR, stepperY.get_pwm_thrs());
328
       #endif
328
       #endif
329
       #if Z_HAS_STEALTHCHOP
329
       #if Z_HAS_STEALTHCHOP
330
-        SERIAL_ECHOPAIR_P(SP_Z_STR, stepperZ.get_pwm_thrs());
330
+        SERIAL_ECHOPGM_P(SP_Z_STR, stepperZ.get_pwm_thrs());
331
       #endif
331
       #endif
332
       SERIAL_EOL();
332
       SERIAL_EOL();
333
     #endif
333
     #endif
336
       say_M913(forReplay);
336
       say_M913(forReplay);
337
       SERIAL_ECHOPGM(" I1");
337
       SERIAL_ECHOPGM(" I1");
338
       #if X2_HAS_STEALTHCHOP
338
       #if X2_HAS_STEALTHCHOP
339
-        SERIAL_ECHOPAIR_P(SP_X_STR, stepperX2.get_pwm_thrs());
339
+        SERIAL_ECHOPGM_P(SP_X_STR, stepperX2.get_pwm_thrs());
340
       #endif
340
       #endif
341
       #if Y2_HAS_STEALTHCHOP
341
       #if Y2_HAS_STEALTHCHOP
342
-        SERIAL_ECHOPAIR_P(SP_Y_STR, stepperY2.get_pwm_thrs());
342
+        SERIAL_ECHOPGM_P(SP_Y_STR, stepperY2.get_pwm_thrs());
343
       #endif
343
       #endif
344
       #if Z2_HAS_STEALTHCHOP
344
       #if Z2_HAS_STEALTHCHOP
345
-        SERIAL_ECHOPAIR_P(SP_Z_STR, stepperZ2.get_pwm_thrs());
345
+        SERIAL_ECHOPGM_P(SP_Z_STR, stepperZ2.get_pwm_thrs());
346
       #endif
346
       #endif
347
       SERIAL_EOL();
347
       SERIAL_EOL();
348
     #endif
348
     #endif
349
 
349
 
350
     #if Z3_HAS_STEALTHCHOP
350
     #if Z3_HAS_STEALTHCHOP
351
       say_M913(forReplay);
351
       say_M913(forReplay);
352
-      SERIAL_ECHOLNPAIR(" I2 Z", stepperZ3.get_pwm_thrs());
352
+      SERIAL_ECHOLNPGM(" I2 Z", stepperZ3.get_pwm_thrs());
353
     #endif
353
     #endif
354
 
354
 
355
     #if Z4_HAS_STEALTHCHOP
355
     #if Z4_HAS_STEALTHCHOP
356
       say_M913(forReplay);
356
       say_M913(forReplay);
357
-      SERIAL_ECHOLNPAIR(" I3 Z", stepperZ4.get_pwm_thrs());
357
+      SERIAL_ECHOLNPGM(" I3 Z", stepperZ4.get_pwm_thrs());
358
     #endif
358
     #endif
359
 
359
 
360
     #if I_HAS_STEALTHCHOP
360
     #if I_HAS_STEALTHCHOP
361
       say_M913(forReplay);
361
       say_M913(forReplay);
362
-      SERIAL_ECHOLNPAIR_P(SP_I_STR, stepperI.get_pwm_thrs());
362
+      SERIAL_ECHOLNPGM_P(SP_I_STR, stepperI.get_pwm_thrs());
363
     #endif
363
     #endif
364
     #if J_HAS_STEALTHCHOP
364
     #if J_HAS_STEALTHCHOP
365
       say_M913(forReplay);
365
       say_M913(forReplay);
366
-      SERIAL_ECHOLNPAIR_P(SP_J_STR, stepperJ.get_pwm_thrs());
366
+      SERIAL_ECHOLNPGM_P(SP_J_STR, stepperJ.get_pwm_thrs());
367
     #endif
367
     #endif
368
     #if K_HAS_STEALTHCHOP
368
     #if K_HAS_STEALTHCHOP
369
       say_M913(forReplay);
369
       say_M913(forReplay);
370
-      SERIAL_ECHOLNPAIR_P(SP_K_STR, stepperK.get_pwm_thrs());
370
+      SERIAL_ECHOLNPGM_P(SP_K_STR, stepperK.get_pwm_thrs());
371
     #endif
371
     #endif
372
 
372
 
373
     #if E0_HAS_STEALTHCHOP
373
     #if E0_HAS_STEALTHCHOP
374
       say_M913(forReplay);
374
       say_M913(forReplay);
375
-      SERIAL_ECHOLNPAIR(" T0 E", stepperE0.get_pwm_thrs());
375
+      SERIAL_ECHOLNPGM(" T0 E", stepperE0.get_pwm_thrs());
376
     #endif
376
     #endif
377
     #if E1_HAS_STEALTHCHOP
377
     #if E1_HAS_STEALTHCHOP
378
       say_M913(forReplay);
378
       say_M913(forReplay);
379
-      SERIAL_ECHOLNPAIR(" T1 E", stepperE1.get_pwm_thrs());
379
+      SERIAL_ECHOLNPGM(" T1 E", stepperE1.get_pwm_thrs());
380
     #endif
380
     #endif
381
     #if E2_HAS_STEALTHCHOP
381
     #if E2_HAS_STEALTHCHOP
382
       say_M913(forReplay);
382
       say_M913(forReplay);
383
-      SERIAL_ECHOLNPAIR(" T2 E", stepperE2.get_pwm_thrs());
383
+      SERIAL_ECHOLNPGM(" T2 E", stepperE2.get_pwm_thrs());
384
     #endif
384
     #endif
385
     #if E3_HAS_STEALTHCHOP
385
     #if E3_HAS_STEALTHCHOP
386
       say_M913(forReplay);
386
       say_M913(forReplay);
387
-      SERIAL_ECHOLNPAIR(" T3 E", stepperE3.get_pwm_thrs());
387
+      SERIAL_ECHOLNPGM(" T3 E", stepperE3.get_pwm_thrs());
388
     #endif
388
     #endif
389
     #if E4_HAS_STEALTHCHOP
389
     #if E4_HAS_STEALTHCHOP
390
       say_M913(forReplay);
390
       say_M913(forReplay);
391
-      SERIAL_ECHOLNPAIR(" T4 E", stepperE4.get_pwm_thrs());
391
+      SERIAL_ECHOLNPGM(" T4 E", stepperE4.get_pwm_thrs());
392
     #endif
392
     #endif
393
     #if E5_HAS_STEALTHCHOP
393
     #if E5_HAS_STEALTHCHOP
394
       say_M913(forReplay);
394
       say_M913(forReplay);
395
-      SERIAL_ECHOLNPAIR(" T5 E", stepperE5.get_pwm_thrs());
395
+      SERIAL_ECHOLNPGM(" T5 E", stepperE5.get_pwm_thrs());
396
     #endif
396
     #endif
397
     #if E6_HAS_STEALTHCHOP
397
     #if E6_HAS_STEALTHCHOP
398
       say_M913(forReplay);
398
       say_M913(forReplay);
399
-      SERIAL_ECHOLNPAIR(" T6 E", stepperE6.get_pwm_thrs());
399
+      SERIAL_ECHOLNPGM(" T6 E", stepperE6.get_pwm_thrs());
400
     #endif
400
     #endif
401
     #if E7_HAS_STEALTHCHOP
401
     #if E7_HAS_STEALTHCHOP
402
       say_M913(forReplay);
402
       say_M913(forReplay);
403
-      SERIAL_ECHOLNPAIR(" T7 E", stepperE7.get_pwm_thrs());
403
+      SERIAL_ECHOLNPGM(" T7 E", stepperE7.get_pwm_thrs());
404
     #endif
404
     #endif
405
     SERIAL_EOL();
405
     SERIAL_EOL();
406
   }
406
   }
522
     #if X_SENSORLESS || Y_SENSORLESS || Z_SENSORLESS
522
     #if X_SENSORLESS || Y_SENSORLESS || Z_SENSORLESS
523
       say_M914(forReplay);
523
       say_M914(forReplay);
524
       #if X_SENSORLESS
524
       #if X_SENSORLESS
525
-        SERIAL_ECHOPAIR_P(SP_X_STR, stepperX.homing_threshold());
525
+        SERIAL_ECHOPGM_P(SP_X_STR, stepperX.homing_threshold());
526
       #endif
526
       #endif
527
       #if Y_SENSORLESS
527
       #if Y_SENSORLESS
528
-        SERIAL_ECHOPAIR_P(SP_Y_STR, stepperY.homing_threshold());
528
+        SERIAL_ECHOPGM_P(SP_Y_STR, stepperY.homing_threshold());
529
       #endif
529
       #endif
530
       #if Z_SENSORLESS
530
       #if Z_SENSORLESS
531
-        SERIAL_ECHOPAIR_P(SP_Z_STR, stepperZ.homing_threshold());
531
+        SERIAL_ECHOPGM_P(SP_Z_STR, stepperZ.homing_threshold());
532
       #endif
532
       #endif
533
       SERIAL_EOL();
533
       SERIAL_EOL();
534
     #endif
534
     #endif
537
       say_M914(forReplay);
537
       say_M914(forReplay);
538
       SERIAL_ECHOPGM(" I1");
538
       SERIAL_ECHOPGM(" I1");
539
       #if X2_SENSORLESS
539
       #if X2_SENSORLESS
540
-        SERIAL_ECHOPAIR_P(SP_X_STR, stepperX2.homing_threshold());
540
+        SERIAL_ECHOPGM_P(SP_X_STR, stepperX2.homing_threshold());
541
       #endif
541
       #endif
542
       #if Y2_SENSORLESS
542
       #if Y2_SENSORLESS
543
-        SERIAL_ECHOPAIR_P(SP_Y_STR, stepperY2.homing_threshold());
543
+        SERIAL_ECHOPGM_P(SP_Y_STR, stepperY2.homing_threshold());
544
       #endif
544
       #endif
545
       #if Z2_SENSORLESS
545
       #if Z2_SENSORLESS
546
-        SERIAL_ECHOPAIR_P(SP_Z_STR, stepperZ2.homing_threshold());
546
+        SERIAL_ECHOPGM_P(SP_Z_STR, stepperZ2.homing_threshold());
547
       #endif
547
       #endif
548
       SERIAL_EOL();
548
       SERIAL_EOL();
549
     #endif
549
     #endif
550
 
550
 
551
     #if Z3_SENSORLESS
551
     #if Z3_SENSORLESS
552
       say_M914(forReplay);
552
       say_M914(forReplay);
553
-      SERIAL_ECHOLNPAIR(" I2 Z", stepperZ3.homing_threshold());
553
+      SERIAL_ECHOLNPGM(" I2 Z", stepperZ3.homing_threshold());
554
     #endif
554
     #endif
555
 
555
 
556
     #if Z4_SENSORLESS
556
     #if Z4_SENSORLESS
557
       say_M914(forReplay);
557
       say_M914(forReplay);
558
-      SERIAL_ECHOLNPAIR(" I3 Z", stepperZ4.homing_threshold());
558
+      SERIAL_ECHOLNPGM(" I3 Z", stepperZ4.homing_threshold());
559
     #endif
559
     #endif
560
 
560
 
561
     #if I_SENSORLESS
561
     #if I_SENSORLESS
562
       say_M914(forReplay);
562
       say_M914(forReplay);
563
-      SERIAL_ECHOLNPAIR_P(SP_I_STR, stepperI.homing_threshold());
563
+      SERIAL_ECHOLNPGM_P(SP_I_STR, stepperI.homing_threshold());
564
     #endif
564
     #endif
565
     #if J_SENSORLESS
565
     #if J_SENSORLESS
566
       say_M914(forReplay);
566
       say_M914(forReplay);
567
-      SERIAL_ECHOLNPAIR_P(SP_J_STR, stepperJ.homing_threshold());
567
+      SERIAL_ECHOLNPGM_P(SP_J_STR, stepperJ.homing_threshold());
568
     #endif
568
     #endif
569
     #if K_SENSORLESS
569
     #if K_SENSORLESS
570
       say_M914(forReplay);
570
       say_M914(forReplay);
571
-      SERIAL_ECHOLNPAIR_P(SP_K_STR, stepperK.homing_threshold());
571
+      SERIAL_ECHOLNPGM_P(SP_K_STR, stepperK.homing_threshold());
572
     #endif
572
     #endif
573
   }
573
   }
574
 
574
 

+ 3
- 3
Marlin/src/gcode/gcode.cpp Voir le fichier

130
     if (e < EXTRUDERS) return e;
130
     if (e < EXTRUDERS) return e;
131
     SERIAL_ECHO_START();
131
     SERIAL_ECHO_START();
132
     SERIAL_CHAR('M'); SERIAL_ECHO(parser.codenum);
132
     SERIAL_CHAR('M'); SERIAL_ECHO(parser.codenum);
133
-    SERIAL_ECHOLNPAIR(" " STR_INVALID_EXTRUDER " ", e);
133
+    SERIAL_ECHOLNPGM(" " STR_INVALID_EXTRUDER " ", e);
134
     return -1;
134
     return -1;
135
   }
135
   }
136
   return active_extruder;
136
   return active_extruder;
149
   if (e == -1)
149
   if (e == -1)
150
     SERIAL_ECHOLNPGM(" " STR_E_STEPPER_NOT_SPECIFIED);
150
     SERIAL_ECHOLNPGM(" " STR_E_STEPPER_NOT_SPECIFIED);
151
   else
151
   else
152
-    SERIAL_ECHOLNPAIR(" " STR_INVALID_E_STEPPER " ", e);
152
+    SERIAL_ECHOLNPGM(" " STR_INVALID_E_STEPPER " ", e);
153
   return -1;
153
   return -1;
154
 }
154
 }
155
 
155
 
1082
     SERIAL_ECHO_START();
1082
     SERIAL_ECHO_START();
1083
     SERIAL_ECHOLN(command.buffer);
1083
     SERIAL_ECHOLN(command.buffer);
1084
     #if ENABLED(M100_FREE_MEMORY_DUMPER)
1084
     #if ENABLED(M100_FREE_MEMORY_DUMPER)
1085
-      SERIAL_ECHOPAIR("slot:", queue.ring_buffer.index_r);
1085
+      SERIAL_ECHOPGM("slot:", queue.ring_buffer.index_r);
1086
       M100_dump_routine(PSTR("   Command Queue:"), (const char*)&queue.ring_buffer, sizeof(queue.ring_buffer));
1086
       M100_dump_routine(PSTR("   Command Queue:"), (const char*)&queue.ring_buffer, sizeof(queue.ring_buffer));
1087
     #endif
1087
     #endif
1088
   }
1088
   }

+ 3
- 3
Marlin/src/gcode/gcode_d.cpp Voir le fichier

179
       break;
179
       break;
180
 
180
 
181
     case 7: // D7 dump the current serial port type (hence configuration)
181
     case 7: // D7 dump the current serial port type (hence configuration)
182
-      SERIAL_ECHOLNPAIR("Current serial configuration RX_BS:", RX_BUFFER_SIZE, ", TX_BS:", TX_BUFFER_SIZE);
182
+      SERIAL_ECHOLNPGM("Current serial configuration RX_BS:", RX_BUFFER_SIZE, ", TX_BS:", TX_BUFFER_SIZE);
183
       SERIAL_ECHOLN(gtn(&SERIAL_IMPL));
183
       SERIAL_ECHOLN(gtn(&SERIAL_IMPL));
184
       break;
184
       break;
185
 
185
 
202
       case 101: { // D101 Test SD Write
202
       case 101: { // D101 Test SD Write
203
         card.openFileWrite("test.gco");
203
         card.openFileWrite("test.gco");
204
         if (!card.isFileOpen()) {
204
         if (!card.isFileOpen()) {
205
-          SERIAL_ECHOLNPAIR("Failed to open test.gco to write.");
205
+          SERIAL_ECHOLNPGM("Failed to open test.gco to write.");
206
           return;
206
           return;
207
         }
207
         }
208
         __attribute__((aligned(sizeof(size_t)))) uint8_t buf[512];
208
         __attribute__((aligned(sizeof(size_t)))) uint8_t buf[512];
224
         char testfile[] = "test.gco";
224
         char testfile[] = "test.gco";
225
         card.openFileRead(testfile);
225
         card.openFileRead(testfile);
226
         if (!card.isFileOpen()) {
226
         if (!card.isFileOpen()) {
227
-          SERIAL_ECHOLNPAIR("Failed to open test.gco to read.");
227
+          SERIAL_ECHOLNPGM("Failed to open test.gco to read.");
228
           return;
228
           return;
229
         }
229
         }
230
         __attribute__((aligned(sizeof(size_t)))) uint8_t buf[512];
230
         __attribute__((aligned(sizeof(size_t)))) uint8_t buf[512];

+ 2
- 2
Marlin/src/gcode/geometry/G53-G59.cpp Voir le fichier

69
     process_parsed_command(); // ...process the chained command
69
     process_parsed_command(); // ...process the chained command
70
     select_coordinate_system(old_system);
70
     select_coordinate_system(old_system);
71
     #ifdef DEBUG_M53
71
     #ifdef DEBUG_M53
72
-      SERIAL_ECHOLNPAIR("Go back to workspace ", old_system);
72
+      SERIAL_ECHOLNPGM("Go back to workspace ", old_system);
73
       report_current_position();
73
       report_current_position();
74
     #endif
74
     #endif
75
   }
75
   }
87
 void G54_59(uint8_t subcode=0) {
87
 void G54_59(uint8_t subcode=0) {
88
   const int8_t _space = parser.codenum - 54 + subcode;
88
   const int8_t _space = parser.codenum - 54 + subcode;
89
   if (gcode.select_coordinate_system(_space)) {
89
   if (gcode.select_coordinate_system(_space)) {
90
-    SERIAL_ECHOLNPAIR("Select workspace ", _space);
90
+    SERIAL_ECHOLNPGM("Select workspace ", _space);
91
     report_current_position();
91
     report_current_position();
92
   }
92
   }
93
 }
93
 }

+ 1
- 1
Marlin/src/gcode/geometry/M206_M428.cpp Voir le fichier

54
 
54
 
55
 void GcodeSuite::M206_report(const bool forReplay/*=true*/) {
55
 void GcodeSuite::M206_report(const bool forReplay/*=true*/) {
56
   report_heading_etc(forReplay, PSTR(STR_HOME_OFFSET));
56
   report_heading_etc(forReplay, PSTR(STR_HOME_OFFSET));
57
-  SERIAL_ECHOLNPAIR_P(
57
+  SERIAL_ECHOLNPGM_P(
58
     #if IS_CARTESIAN
58
     #if IS_CARTESIAN
59
       LIST_N(DOUBLE(LINEAR_AXES),
59
       LIST_N(DOUBLE(LINEAR_AXES),
60
         PSTR("  M206 X"), LINEAR_UNIT(home_offset.x),
60
         PSTR("  M206 X"), LINEAR_UNIT(home_offset.x),

+ 1
- 1
Marlin/src/gcode/host/M114.cpp Voir le fichier

218
     }
218
     }
219
     #if HAS_EXTRUDERS
219
     #if HAS_EXTRUDERS
220
       if (parser.seen_test('E')) {
220
       if (parser.seen_test('E')) {
221
-        SERIAL_ECHOLNPAIR("Count E:", stepper.position(E_AXIS));
221
+        SERIAL_ECHOLNPGM("Count E:", stepper.position(E_AXIS));
222
         return;
222
         return;
223
       }
223
       }
224
     #endif
224
     #endif

+ 1
- 1
Marlin/src/gcode/host/M115.cpp Voir le fichier

175
       apply_motion_limits(cmax);
175
       apply_motion_limits(cmax);
176
       const xyz_pos_t lmin = dmin.asLogical(), lmax = dmax.asLogical(),
176
       const xyz_pos_t lmin = dmin.asLogical(), lmax = dmax.asLogical(),
177
                       wmin = cmin.asLogical(), wmax = cmax.asLogical();
177
                       wmin = cmin.asLogical(), wmax = cmax.asLogical();
178
-      SERIAL_ECHOLNPAIR(
178
+      SERIAL_ECHOLNPGM(
179
         "area:{"
179
         "area:{"
180
           "full:{"
180
           "full:{"
181
             "min:{x:", lmin.x, ",y:", lmin.y, ",z:", lmin.z, "},"
181
             "min:{x:", lmin.x, ",y:", lmin.y, ",z:", lmin.z, "},"

+ 1
- 1
Marlin/src/gcode/host/M360.cpp Voir le fichier

36
   SERIAL_ECHOPGM("Config:");
36
   SERIAL_ECHOPGM("Config:");
37
   if (pref) SERIAL_ECHOPGM_P(pref);
37
   if (pref) SERIAL_ECHOPGM_P(pref);
38
   if (ind >= 0) { SERIAL_ECHO(ind); SERIAL_CHAR(':'); }
38
   if (ind >= 0) { SERIAL_ECHO(ind); SERIAL_CHAR(':'); }
39
-  SERIAL_ECHOPAIR_P(name, AS_CHAR(':'));
39
+  SERIAL_ECHOPGM_P(name, AS_CHAR(':'));
40
 }
40
 }
41
 static void config_line(PGM_P const name, const float val, PGM_P const pref=nullptr, const int8_t ind=-1) {
41
 static void config_line(PGM_P const name, const float val, PGM_P const pref=nullptr, const int8_t ind=-1) {
42
   config_prefix(name, pref, ind);
42
   config_prefix(name, pref, ind);

+ 0
- 0
Marlin/src/gcode/lcd/M145.cpp Voir le fichier


Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff

Chargement…
Annuler
Enregistrer