Optimize common strings

Saves 128 bytes in testing with `mftest mega 1 -y`
2.0.x
Scott Lahteine 5 years ago
parent 4d8e7cdb30
commit f83bc0aa13

@ -181,11 +181,15 @@
#include "libs/L6470/L6470_Marlin.h" #include "libs/L6470/L6470_Marlin.h"
#endif #endif
const char G28_STR[] PROGMEM = "G28", const char NUL_STR[] PROGMEM = "",
G28_STR[] PROGMEM = "G28",
M21_STR[] PROGMEM = "M21", M21_STR[] PROGMEM = "M21",
M23_STR[] PROGMEM = "M23 %s", M23_STR[] PROGMEM = "M23 %s",
M24_STR[] PROGMEM = "M24", M24_STR[] PROGMEM = "M24",
NUL_STR[] PROGMEM = ""; SP_X_STR[] PROGMEM = " X",
SP_Y_STR[] PROGMEM = " Y",
SP_Z_STR[] PROGMEM = " Z",
SP_E_STR[] PROGMEM = " E";
bool Running = true; bool Running = true;

@ -377,4 +377,5 @@ void protected_pin_err();
void event_probe_failure(); void event_probe_failure();
#endif #endif
extern const char G28_STR[], M21_STR[], M23_STR[], M24_STR[], NUL_STR[]; extern const char NUL_STR[], G28_STR[], M21_STR[], M23_STR[], M24_STR[],
SP_X_STR[], SP_Y_STR[], SP_Z_STR[], SP_E_STR[];

@ -67,8 +67,10 @@ void print_bin(const uint16_t val) {
} }
} }
extern const char SP_X_STR[], SP_Y_STR[], SP_Z_STR[];
void print_xyz(const float &x, const float &y, const float &z, PGM_P const prefix/*=nullptr*/, PGM_P const suffix/*=nullptr*/) { void print_xyz(const float &x, const float &y, const float &z, PGM_P const prefix/*=nullptr*/, PGM_P const suffix/*=nullptr*/) {
serialprintPGM(prefix); serialprintPGM(prefix);
SERIAL_ECHOPAIR(" " MSG_X, x, " " MSG_Y, y, " " MSG_Z, z); SERIAL_ECHOPAIR_P(SP_X_STR, x, SP_Y_STR, y, SP_Z_STR, z);
if (suffix) serialprintPGM(suffix); else SERIAL_EOL(); if (suffix) serialprintPGM(suffix); else SERIAL_EOL();
} }

@ -83,7 +83,7 @@ extern uint8_t marlin_debug_flags;
#define SERIAL_FLUSHTX() #define SERIAL_FLUSHTX()
#endif #endif
// Print up to 12 pairs of values // Print up to 12 pairs of values. Odd elements auto-wrapped in PSTR().
#define __SEP_N(N,V...) _SEP_##N(V) #define __SEP_N(N,V...) _SEP_##N(V)
#define _SEP_N(N,V...) __SEP_N(N,V) #define _SEP_N(N,V...) __SEP_N(N,V)
#define _SEP_1(PRE) SERIAL_ECHOPGM(PRE) #define _SEP_1(PRE) SERIAL_ECHOPGM(PRE)
@ -113,6 +113,36 @@ extern uint8_t marlin_debug_flags;
#define SERIAL_ECHOPAIR(V...) _SEP_N(NUM_ARGS(V),V) #define SERIAL_ECHOPAIR(V...) _SEP_N(NUM_ARGS(V),V)
// Print up to 12 pairs of values. Odd elements must be PSTR pointers.
#define __SEP_N_P(N,V...) _SEP_##N##_P(V)
#define _SEP_N_P(N,V...) __SEP_N_P(N,V)
#define _SEP_1_P(PRE) serialprintPGM(PRE)
#define _SEP_2_P(PRE,V) serial_echopair_PGM(PRE,V)
#define _SEP_3_P(a,b,c) do{ _SEP_2_P(a,b); serialprintPGM(c); }while(0)
#define _SEP_4_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_2_P(V); }while(0)
#define _SEP_5_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_3_P(V); }while(0)
#define _SEP_6_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_4_P(V); }while(0)
#define _SEP_7_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_5_P(V); }while(0)
#define _SEP_8_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_6_P(V); }while(0)
#define _SEP_9_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_7_P(V); }while(0)
#define _SEP_10_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_8_P(V); }while(0)
#define _SEP_11_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_9_P(V); }while(0)
#define _SEP_12_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_10_P(V); }while(0)
#define _SEP_13_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_11_P(V); }while(0)
#define _SEP_14_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_12_P(V); }while(0)
#define _SEP_15_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_13_P(V); }while(0)
#define _SEP_16_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_14_P(V); }while(0)
#define _SEP_17_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_15_P(V); }while(0)
#define _SEP_18_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_16_P(V); }while(0)
#define _SEP_19_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_17_P(V); }while(0)
#define _SEP_20_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_18_P(V); }while(0)
#define _SEP_21_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_19_P(V); }while(0)
#define _SEP_22_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_20_P(V); }while(0)
#define _SEP_23_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_21_P(V); }while(0)
#define _SEP_24_P(a,b,V...) do{ _SEP_2_P(a,b); _SEP_22_P(V); }while(0)
#define SERIAL_ECHOPAIR_P(V...) _SEP_N_P(NUM_ARGS(V),V)
// Print up to 12 pairs of values followed by newline // Print up to 12 pairs of values followed by newline
#define __SELP_N(N,V...) _SELP_##N(V) #define __SELP_N(N,V...) _SELP_##N(V)
#define _SELP_N(N,V...) __SELP_N(N,V) #define _SELP_N(N,V...) __SELP_N(N,V)
@ -139,10 +169,40 @@ extern uint8_t marlin_debug_flags;
#define _SELP_21(a,b,V...) do{ _SEP_2(a,b); _SELP_19(V); }while(0) #define _SELP_21(a,b,V...) do{ _SEP_2(a,b); _SELP_19(V); }while(0)
#define _SELP_22(a,b,V...) do{ _SEP_2(a,b); _SELP_20(V); }while(0) #define _SELP_22(a,b,V...) do{ _SEP_2(a,b); _SELP_20(V); }while(0)
#define _SELP_23(a,b,V...) do{ _SEP_2(a,b); _SELP_21(V); }while(0) #define _SELP_23(a,b,V...) do{ _SEP_2(a,b); _SELP_21(V); }while(0)
#define _SELP_24(a,b,V...) do{ _SEP_2(a,b); _SELP_22(V); }while(0) // Use up two, pass the rest up #define _SELP_24(a,b,V...) do{ _SEP_2(a,b); _SELP_22(V); }while(0) // Eat two args, pass the rest up
#define SERIAL_ECHOLNPAIR(V...) _SELP_N(NUM_ARGS(V),V) #define SERIAL_ECHOLNPAIR(V...) _SELP_N(NUM_ARGS(V),V)
// Print up to 12 pairs of values followed by newline
#define __SELP_N_P(N,V...) _SELP_##N##_P(V)
#define _SELP_N_P(N,V...) __SELP_N_P(N,V)
#define _SELP_1_P(PRE) serialprintPGM(PRE)
#define _SELP_2_P(PRE,V) do{ serial_echopair_PGM(PRE,V); SERIAL_EOL(); }while(0)
#define _SELP_3_P(a,b,c) do{ _SEP_2_P(a,b); serialprintPGM(c); }while(0)
#define _SELP_4_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_2_P(V); }while(0)
#define _SELP_5_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_3_P(V); }while(0)
#define _SELP_6_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_4_P(V); }while(0)
#define _SELP_7_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_5_P(V); }while(0)
#define _SELP_8_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_6_P(V); }while(0)
#define _SELP_9_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_7_P(V); }while(0)
#define _SELP_10_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_8_P(V); }while(0)
#define _SELP_11_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_9_P(V); }while(0)
#define _SELP_12_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_10_P(V); }while(0)
#define _SELP_13_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_11_P(V); }while(0)
#define _SELP_14_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_12_P(V); }while(0)
#define _SELP_15_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_13_P(V); }while(0)
#define _SELP_16_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_14_P(V); }while(0)
#define _SELP_17_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_15_P(V); }while(0)
#define _SELP_18_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_16_P(V); }while(0)
#define _SELP_19_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_17_P(V); }while(0)
#define _SELP_20_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_18_P(V); }while(0)
#define _SELP_21_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_19_P(V); }while(0)
#define _SELP_22_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_20_P(V); }while(0)
#define _SELP_23_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_21_P(V); }while(0)
#define _SELP_24_P(a,b,V...) do{ _SEP_2_P(a,b); _SELP_22_P(V); }while(0) // Eat two args, pass the rest up
#define SERIAL_ECHOLNPAIR_P(V...) _SELP_N_P(NUM_ARGS(V),V)
// Print up to 20 comma-separated pairs of values // Print up to 20 comma-separated pairs of values
#define __SLST_N(N,V...) _SLST_##N(V) #define __SLST_N(N,V...) _SLST_##N(V)
#define _SLST_N(N,V...) __SLST_N(N,V) #define _SLST_N(N,V...) __SLST_N(N,V)
@ -165,15 +225,21 @@ extern uint8_t marlin_debug_flags;
#define _SLST_17(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_15(V); }while(0) #define _SLST_17(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_15(V); }while(0)
#define _SLST_18(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_16(V); }while(0) #define _SLST_18(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_16(V); }while(0)
#define _SLST_19(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_17(V); }while(0) #define _SLST_19(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_17(V); }while(0)
#define _SLST_20(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_18(V); }while(0) // Use up two, pass the rest up #define _SLST_20(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_18(V); }while(0) // Eat two args, pass the rest up
#define SERIAL_ECHOLIST(pre,V...) do{ SERIAL_ECHOPGM(pre); _SLST_N(NUM_ARGS(V),V); }while(0) #define SERIAL_ECHOLIST(pre,V...) do{ SERIAL_ECHOPGM(pre); _SLST_N(NUM_ARGS(V),V); }while(0)
#define SERIAL_ECHOLIST_N(N,V...) _SLST_N(N,LIST_N(N,V)) #define SERIAL_ECHOLIST_N(N,V...) _SLST_N(N,LIST_N(N,V))
#define SERIAL_ECHOPGM_P(P) (serialprintPGM(P))
#define SERIAL_ECHOLNPGM_P(P) (serialprintPGM(P "\n"))
#define SERIAL_ECHOPGM(S) (serialprintPGM(PSTR(S))) #define SERIAL_ECHOPGM(S) (serialprintPGM(PSTR(S)))
#define SERIAL_ECHOLNPGM(S) (serialprintPGM(PSTR(S "\n"))) #define SERIAL_ECHOLNPGM(S) (serialprintPGM(PSTR(S "\n")))
#define SERIAL_ECHOPAIR_F(S,V...) do{ SERIAL_ECHOPGM(S); SERIAL_ECHO_F(V); }while(0) #define SERIAL_ECHOPAIR_F_P(P,V...) do{ serialprintPGM(P); SERIAL_ECHO_F(V); }while(0)
#define SERIAL_ECHOLNPAIR_F_P(V...) do{ SERIAL_ECHOPAIR_F_P(V); SERIAL_EOL(); }while(0)
#define SERIAL_ECHOPAIR_F(S,V...) SERIAL_ECHOPAIR_F_P(PSTR(S),V)
#define SERIAL_ECHOLNPAIR_F(V...) do{ SERIAL_ECHOPAIR_F(V); SERIAL_EOL(); }while(0) #define SERIAL_ECHOLNPAIR_F(V...) do{ SERIAL_ECHOPAIR_F(V); SERIAL_EOL(); }while(0)
#define SERIAL_ECHO_START() serial_echo_start() #define SERIAL_ECHO_START() serial_echo_start()

@ -79,7 +79,7 @@ void safe_delay(millis_t ms) {
); );
#if HAS_BED_PROBE #if HAS_BED_PROBE
SERIAL_ECHOPAIR("Probe Offset X", probe_offset.x, " Y", probe_offset.y, " Z", probe_offset.z); SERIAL_ECHOPAIR_P(PSTR("Probe Offset X"), probe_offset.x, SP_Y_STR, probe_offset.y, SP_Z_STR, probe_offset.z);
if (probe_offset.x > 0) if (probe_offset.x > 0)
SERIAL_ECHOPGM(" (Right"); SERIAL_ECHOPGM(" (Right");
else if (probe_offset.x < 0) else if (probe_offset.x < 0)

@ -51,7 +51,7 @@
if (!isnan(z_values[x][y])) { if (!isnan(z_values[x][y])) {
SERIAL_ECHO_START(); SERIAL_ECHO_START();
SERIAL_ECHOPAIR(" M421 I", int(x), " J", int(y)); SERIAL_ECHOPAIR(" M421 I", int(x), " J", int(y));
SERIAL_ECHOLNPAIR_F(" Z", z_values[x][y], 4); SERIAL_ECHOLNPAIR_F_P(SP_Z_STR, z_values[x][y], 4);
serial_delay(75); // Prevent Printrun from exploding serial_delay(75); // Prevent Printrun from exploding
} }
} }

@ -64,6 +64,8 @@ void host_action(const char * const pstr, const bool eol) {
#if ENABLED(HOST_PROMPT_SUPPORT) #if ENABLED(HOST_PROMPT_SUPPORT)
const char CONTINUE_STR[] PROGMEM = "Continue";
#if HAS_RESUME_CONTINUE #if HAS_RESUME_CONTINUE
extern bool wait_for_user; extern bool wait_for_user;
#endif #endif
@ -126,7 +128,7 @@ void host_action(const char * const pstr, const bool eol) {
host_action_prompt_button(PSTR("DisableRunout")); host_action_prompt_button(PSTR("DisableRunout"));
else { else {
host_prompt_reason = PROMPT_FILAMENT_RUNOUT; host_prompt_reason = PROMPT_FILAMENT_RUNOUT;
host_action_prompt_button(PSTR("Continue")); host_action_prompt_button(CONTINUE_STR);
} }
host_action_prompt_show(); host_action_prompt_show();
} }

@ -46,6 +46,8 @@ void host_action(const char * const pstr, const bool eol=true);
#if ENABLED(HOST_PROMPT_SUPPORT) #if ENABLED(HOST_PROMPT_SUPPORT)
extern const char CONTINUE_STR[];
enum PromptReason : uint8_t { enum PromptReason : uint8_t {
PROMPT_NOT_DEFINED, PROMPT_NOT_DEFINED,
PROMPT_FILAMENT_RUNOUT, PROMPT_FILAMENT_RUNOUT,

@ -54,13 +54,13 @@ Joystick joystick;
void Joystick::report() { void Joystick::report() {
SERIAL_ECHOPGM("Joystick"); SERIAL_ECHOPGM("Joystick");
#if HAS_JOY_ADC_X #if HAS_JOY_ADC_X
SERIAL_ECHOPAIR(" X", x.raw); SERIAL_ECHOPAIR_P(SP_X_STR, x.raw);
#endif #endif
#if HAS_JOY_ADC_Y #if HAS_JOY_ADC_Y
SERIAL_ECHOPAIR(" Y", y.raw); SERIAL_ECHOPAIR_P(SP_Y_STR, y.raw);
#endif #endif
#if HAS_JOY_ADC_Z #if HAS_JOY_ADC_Z
SERIAL_ECHOPAIR(" Z", z.raw); SERIAL_ECHOPAIR_P(SP_Z_STR, z.raw);
#endif #endif
#if HAS_JOY_ADC_EN #if HAS_JOY_ADC_EN
SERIAL_ECHO_TERNARY(READ(JOY_EN_PIN), " EN=", "HIGH (dis", "LOW (en", "abled)"); SERIAL_ECHO_TERNARY(READ(JOY_EN_PIN), " EN=", "HIGH (dis", "LOW (en", "abled)");

@ -191,7 +191,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l
host_action_prompt_begin(PSTR("Load Filament T"), false); host_action_prompt_begin(PSTR("Load Filament T"), false);
SERIAL_CHAR(tool); SERIAL_CHAR(tool);
SERIAL_EOL(); SERIAL_EOL();
host_action_prompt_button(PSTR("Continue")); host_action_prompt_button(CONTINUE_STR);
host_action_prompt_show(); host_action_prompt_show();
#endif #endif
#if ENABLED(EXTENSIBLE_UI) #if ENABLED(EXTENSIBLE_UI)
@ -247,7 +247,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l
wait_for_user = true; wait_for_user = true;
#if ENABLED(HOST_PROMPT_SUPPORT) #if ENABLED(HOST_PROMPT_SUPPORT)
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Filament Purge Running..."), PSTR("Continue")); host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Filament Purge Running..."), CONTINUE_STR);
#endif #endif
#if ENABLED(EXTENSIBLE_UI) #if ENABLED(EXTENSIBLE_UI)
ExtUI::onUserConfirmRequired_P(PSTR("Filament Purge Running...")); ExtUI::onUserConfirmRequired_P(PSTR("Filament Purge Running..."));
@ -283,7 +283,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l
host_action_prompt_button(PSTR("DisableRunout")); host_action_prompt_button(PSTR("DisableRunout"));
else { else {
host_prompt_reason = PROMPT_FILAMENT_RUNOUT; host_prompt_reason = PROMPT_FILAMENT_RUNOUT;
host_action_prompt_button(PSTR("Continue")); host_action_prompt_button(CONTINUE_STR);
} }
host_action_prompt_show(); host_action_prompt_show();
#endif #endif
@ -523,7 +523,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
KEEPALIVE_STATE(PAUSED_FOR_USER); KEEPALIVE_STATE(PAUSED_FOR_USER);
wait_for_user = true; // LCD click or M108 will clear this wait_for_user = true; // LCD click or M108 will clear this
#if ENABLED(HOST_PROMPT_SUPPORT) #if ENABLED(HOST_PROMPT_SUPPORT)
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Nozzle Parked"), PSTR("Continue")); host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Nozzle Parked"), CONTINUE_STR);
#endif #endif
#if ENABLED(EXTENSIBLE_UI) #if ENABLED(EXTENSIBLE_UI)
ExtUI::onUserConfirmRequired_P(PSTR("Nozzle Parked")); ExtUI::onUserConfirmRequired_P(PSTR("Nozzle Parked"));
@ -577,7 +577,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
HOTEND_LOOP() thermalManager.hotend_idle[e].start(nozzle_timeout); HOTEND_LOOP() thermalManager.hotend_idle[e].start(nozzle_timeout);
#if ENABLED(HOST_PROMPT_SUPPORT) #if ENABLED(HOST_PROMPT_SUPPORT)
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Reheat Done"), PSTR("Continue")); host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Reheat Done"), CONTINUE_STR);
#endif #endif
#if ENABLED(EXTENSIBLE_UI) #if ENABLED(EXTENSIBLE_UI)
ExtUI::onUserConfirmRequired_P(PSTR("Reheat finished.")); ExtUI::onUserConfirmRequired_P(PSTR("Reheat finished."));

@ -709,7 +709,7 @@ void MMU2::filament_runout() {
BUZZ(200, 404); BUZZ(200, 404);
wait_for_user = true; wait_for_user = true;
#if ENABLED(HOST_PROMPT_SUPPORT) #if ENABLED(HOST_PROMPT_SUPPORT)
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("MMU2 Eject Recover"), PSTR("Continue")); host_prompt_do(PROMPT_USER_CONTINUE, PSTR("MMU2 Eject Recover"), CONTINUE_STR);
#endif #endif
#if ENABLED(EXTENSIBLE_UI) #if ENABLED(EXTENSIBLE_UI)
ExtUI::onUserConfirmRequired_P(PSTR("MMU2 Eject Recover")); ExtUI::onUserConfirmRequired_P(PSTR("MMU2 Eject Recover"));

@ -560,7 +560,7 @@ G29_TYPE GcodeSuite::G29() {
ExtUI::onMeshUpdate(meshCount, newz); ExtUI::onMeshUpdate(meshCount, newz);
#endif #endif
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Save X", meshCount.x, " Y", meshCount.y, " Z", measured_z + zoffset); if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR_P(PSTR("Save X"), meshCount.x, SP_Y_STR, meshCount.y, SP_Z_STR, measured_z + zoffset);
#endif #endif
} }

@ -362,10 +362,10 @@ void GcodeSuite::G34() {
void GcodeSuite::M422() { void GcodeSuite::M422() {
if (!parser.seen_any()) { if (!parser.seen_any()) {
for (uint8_t i = 0; i < G34_PROBE_COUNT; ++i) for (uint8_t i = 0; i < G34_PROBE_COUNT; ++i)
SERIAL_ECHOLNPAIR("M422 S", i + 1, " X", z_auto_align_pos[i].x, " Y", z_auto_align_pos[i].y); SERIAL_ECHOLNPAIR_P(PSTR("M422 S"), i + 1, SP_X_STR, z_auto_align_pos[i].x, SP_Y_STR, z_auto_align_pos[i].y);
#if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
for (uint8_t i = 0; i < Z_STEPPER_COUNT; ++i) for (uint8_t i = 0; i < Z_STEPPER_COUNT; ++i)
SERIAL_ECHOLNPAIR("M422 W", i + 1, " X", z_stepper_pos[i].x, " Y", z_stepper_pos[i].y); SERIAL_ECHOLNPAIR_P(PSTR("M422 W"), i + 1, SP_X_STR, z_stepper_pos[i].x, SP_Y_STR, z_stepper_pos[i].y);
#endif #endif
return; return;
} }

@ -326,12 +326,12 @@ inline void probe_sides(measurements_t &m, const float uncertainty) {
inline void report_measured_center(const measurements_t &m) { inline void report_measured_center(const measurements_t &m) {
SERIAL_ECHOLNPGM("Center:"); SERIAL_ECHOLNPGM("Center:");
#if HAS_X_CENTER #if HAS_X_CENTER
SERIAL_ECHOLNPAIR(" X", m.obj_center.x); SERIAL_ECHOLNPAIR_P(SP_X_STR, m.obj_center.x);
#endif #endif
#if HAS_Y_CENTER #if HAS_Y_CENTER
SERIAL_ECHOLNPAIR(" Y", m.obj_center.y); SERIAL_ECHOLNPAIR_P(SP_Y_STR, m.obj_center.y);
#endif #endif
SERIAL_ECHOLNPAIR(" Z", m.obj_center.z); SERIAL_ECHOLNPAIR_P(SP_Z_STR, m.obj_center.z);
SERIAL_EOL(); SERIAL_EOL();
} }
@ -358,12 +358,12 @@ inline void probe_sides(measurements_t &m, const float uncertainty) {
SERIAL_ECHO(int(active_extruder)); SERIAL_ECHO(int(active_extruder));
SERIAL_ECHOLNPGM(" Positional Error:"); SERIAL_ECHOLNPGM(" Positional Error:");
#if HAS_X_CENTER #if HAS_X_CENTER
SERIAL_ECHOLNPAIR(" X", m.pos_error.x); SERIAL_ECHOLNPAIR_P(SP_X_STR, m.pos_error.x);
#endif #endif
#if HAS_Y_CENTER #if HAS_Y_CENTER
SERIAL_ECHOLNPAIR(" Y", m.pos_error.y); SERIAL_ECHOLNPAIR_P(SP_Y_STR, m.pos_error.y);
#endif #endif
SERIAL_ECHOLNPAIR(" Z", m.pos_error.z); SERIAL_ECHOLNPAIR_P(SP_Z_STR, m.pos_error.z);
SERIAL_EOL(); SERIAL_EOL();
} }
@ -371,10 +371,10 @@ inline void probe_sides(measurements_t &m, const float uncertainty) {
SERIAL_ECHOLNPGM("Nozzle Tip Outer Dimensions:"); SERIAL_ECHOLNPGM("Nozzle Tip Outer Dimensions:");
#if HAS_X_CENTER || HAS_Y_CENTER #if HAS_X_CENTER || HAS_Y_CENTER
#if HAS_X_CENTER #if HAS_X_CENTER
SERIAL_ECHOLNPAIR(" X", m.nozzle_outer_dimension.x); SERIAL_ECHOLNPAIR_P(SP_X_STR, m.nozzle_outer_dimension.x);
#endif #endif
#if HAS_Y_CENTER #if HAS_Y_CENTER
SERIAL_ECHOLNPAIR(" Y", m.nozzle_outer_dimension.y); SERIAL_ECHOLNPAIR_P(SP_Y_STR, m.nozzle_outer_dimension.y);
#endif #endif
#else #else
UNUSED(m); UNUSED(m);
@ -388,7 +388,7 @@ inline void probe_sides(measurements_t &m, const float uncertainty) {
// //
inline void report_hotend_offsets() { inline void report_hotend_offsets() {
for (uint8_t e = 1; e < HOTENDS; e++) for (uint8_t e = 1; e < HOTENDS; e++)
SERIAL_ECHOLNPAIR("T", int(e), " Hotend Offset X", hotend_offset[e].x, " Y", hotend_offset[e].y, " Z", hotend_offset[e].z); SERIAL_ECHOLNPAIR_P(PSTR("T"), int(e), PSTR(" Hotend Offset X"), hotend_offset[e].x, SP_Y_STR, hotend_offset[e].y, SP_Z_STR, hotend_offset[e].z);
} }
#endif #endif

@ -178,12 +178,12 @@ void GcodeSuite::M48() {
while (!position_is_reachable_by_probe(next_pos)) { while (!position_is_reachable_by_probe(next_pos)) {
next_pos *= 0.8f; next_pos *= 0.8f;
if (verbose_level > 3) if (verbose_level > 3)
SERIAL_ECHOLNPAIR("Moving inward: X", next_pos.x, " Y", next_pos.y); SERIAL_ECHOLNPAIR_P(PSTR("Moving inward: X"), next_pos.x, SP_Y_STR, next_pos.y);
} }
#endif #endif
if (verbose_level > 3) if (verbose_level > 3)
SERIAL_ECHOLNPAIR("Going to: X", next_pos.x, " Y", next_pos.y); SERIAL_ECHOLNPAIR_P(PSTR("Going to: X"), next_pos.x, SP_Y_STR, next_pos.y);
do_blocking_move_to_xy(next_pos); do_blocking_move_to_xy(next_pos);
} // n_legs loop } // n_legs loop

@ -27,18 +27,22 @@
#include "../gcode.h" #include "../gcode.h"
#include "../../module/tool_change.h" #include "../../module/tool_change.h"
#include "../../Marlin.h" // for SP_X_STR, etc.
extern const char SP_X_STR[], SP_Y_STR[], SP_Z_STR[];
void M217_report(const bool eeprom=false) { void M217_report(const bool eeprom=false) {
#if ENABLED(TOOLCHANGE_FILAMENT_SWAP) #if ENABLED(TOOLCHANGE_FILAMENT_SWAP)
serialprintPGM(eeprom ? PSTR(" M217") : PSTR("Toolchange:")); serialprintPGM(eeprom ? PSTR(" M217") : PSTR("Toolchange:"));
SERIAL_ECHOPAIR(" S", LINEAR_UNIT(toolchange_settings.swap_length)); SERIAL_ECHOPAIR(" S", LINEAR_UNIT(toolchange_settings.swap_length));
SERIAL_ECHOPAIR(" E", LINEAR_UNIT(toolchange_settings.extra_prime)); SERIAL_ECHOPAIR_P(SP_E_STR, LINEAR_UNIT(toolchange_settings.extra_prime));
SERIAL_ECHOPAIR(" P", LINEAR_UNIT(toolchange_settings.prime_speed)); SERIAL_ECHOPAIR(" P", LINEAR_UNIT(toolchange_settings.prime_speed));
SERIAL_ECHOPAIR(" R", LINEAR_UNIT(toolchange_settings.retract_speed)); SERIAL_ECHOPAIR(" R", LINEAR_UNIT(toolchange_settings.retract_speed));
#if ENABLED(TOOLCHANGE_PARK) #if ENABLED(TOOLCHANGE_PARK)
SERIAL_ECHOPAIR(" X", LINEAR_UNIT(toolchange_settings.change_point.x)); SERIAL_ECHOPAIR_P(SP_X_STR, LINEAR_UNIT(toolchange_settings.change_point.x));
SERIAL_ECHOPAIR(" Y", LINEAR_UNIT(toolchange_settings.change_point.y)); SERIAL_ECHOPAIR_P(SP_Y_STR, LINEAR_UNIT(toolchange_settings.change_point.y));
#endif #endif
#else #else
@ -47,7 +51,7 @@ void M217_report(const bool eeprom=false) {
#endif #endif
SERIAL_ECHOPAIR(" Z", LINEAR_UNIT(toolchange_settings.z_raise)); SERIAL_ECHOPAIR_P(SP_Z_STR, LINEAR_UNIT(toolchange_settings.z_raise));
SERIAL_EOL(); SERIAL_EOL();
} }

@ -331,7 +331,7 @@ void GcodeSuite::M43() {
KEEPALIVE_STATE(PAUSED_FOR_USER); KEEPALIVE_STATE(PAUSED_FOR_USER);
wait_for_user = true; wait_for_user = true;
#if ENABLED(HOST_PROMPT_SUPPORT) #if ENABLED(HOST_PROMPT_SUPPORT)
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("M43 Wait Called"), PSTR("Continue")); host_prompt_do(PROMPT_USER_CONTINUE, PSTR("M43 Wait Called"), CONTINUE_STR);
#endif #endif
#if ENABLED(EXTENSIBLE_UI) #if ENABLED(EXTENSIBLE_UI)
ExtUI::onUserConfirmRequired_P(PSTR("M43 Wait Called")); ExtUI::onUserConfirmRequired_P(PSTR("M43 Wait Called"));

@ -25,11 +25,11 @@
void report_M92(const bool echo=true, const int8_t e=-1) { void report_M92(const bool echo=true, const int8_t e=-1) {
if (echo) SERIAL_ECHO_START(); else SERIAL_CHAR(' '); if (echo) SERIAL_ECHO_START(); else SERIAL_CHAR(' ');
SERIAL_ECHOPAIR(" M92 X", LINEAR_UNIT(planner.settings.axis_steps_per_mm[X_AXIS]), SERIAL_ECHOPAIR_P(PSTR(" M92 X"), LINEAR_UNIT(planner.settings.axis_steps_per_mm[X_AXIS]),
" Y", LINEAR_UNIT(planner.settings.axis_steps_per_mm[Y_AXIS]), SP_Y_STR, LINEAR_UNIT(planner.settings.axis_steps_per_mm[Y_AXIS]),
" Z", LINEAR_UNIT(planner.settings.axis_steps_per_mm[Z_AXIS])); SP_Z_STR, LINEAR_UNIT(planner.settings.axis_steps_per_mm[Z_AXIS]));
#if DISABLED(DISTINCT_E_FACTORS) #if DISABLED(DISTINCT_E_FACTORS)
SERIAL_ECHOPAIR(" E", VOLUMETRIC_UNIT(planner.settings.axis_steps_per_mm[E_AXIS])); SERIAL_ECHOPAIR_P(SP_E_STR, VOLUMETRIC_UNIT(planner.settings.axis_steps_per_mm[E_AXIS]));
#endif #endif
SERIAL_EOL(); SERIAL_EOL();
@ -37,8 +37,8 @@ void report_M92(const bool echo=true, const int8_t e=-1) {
for (uint8_t i = 0; i < E_STEPPERS; i++) { for (uint8_t i = 0; i < E_STEPPERS; i++) {
if (e >= 0 && i != e) continue; if (e >= 0 && i != e) continue;
if (echo) SERIAL_ECHO_START(); else SERIAL_CHAR(' '); if (echo) SERIAL_ECHO_START(); else SERIAL_CHAR(' ');
SERIAL_ECHOLNPAIR(" M92 T", (int)i, SERIAL_ECHOLNPAIR_P(PSTR(" M92 T"), (int)i,
" E", VOLUMETRIC_UNIT(planner.settings.axis_steps_per_mm[E_AXIS_N(i)])); SP_E_STR, VOLUMETRIC_UNIT(planner.settings.axis_steps_per_mm[E_AXIS_N(i)]));
} }
#endif #endif

@ -35,7 +35,7 @@ inline void echo_mix() {
inline void echo_zt(const int t, const float &z) { inline void echo_zt(const int t, const float &z) {
mixer.update_mix_from_vtool(t); mixer.update_mix_from_vtool(t);
SERIAL_ECHOPAIR(" Z", z, " T", t); SERIAL_ECHOPAIR_P(SP_Z_STR, z, PSTR(" T"), t);
echo_mix(); echo_mix();
} }

@ -98,7 +98,7 @@ void GcodeSuite::M0_M1() {
wait_for_user = true; wait_for_user = true;
#if ENABLED(HOST_PROMPT_SUPPORT) #if ENABLED(HOST_PROMPT_SUPPORT)
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("M0/1 Break Called"), PSTR("Continue")); host_prompt_do(PROMPT_USER_CONTINUE, PSTR("M0/1 Break Called"), CONTINUE_STR);
#endif #endif
if (ms > 0) { if (ms > 0) {

@ -103,12 +103,17 @@ void GcodeSuite::M290() {
#if ENABLED(BABYSTEP_HOTEND_Z_OFFSET) #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
{ {
SERIAL_ECHOLNPAIR("Hotend ", int(active_extruder), "Offset" #error "Hey!"
SERIAL_ECHOLNPAIR_P(
PSTR("Hotend "), int(active_extruder)
#if ENABLED(BABYSTEP_XY) #if ENABLED(BABYSTEP_XY)
" X", hotend_offset[active_extruder].x, , PSTR("Offset X"), hotend_offset[active_extruder].x
" Y", hotend_offset[active_extruder].y, , SP_Y_STR, hotend_offset[active_extruder].y
, SP_Z_STR
#else
, PSTR("Offset Z")
#endif #endif
" Z", hotend_offset[active_extruder].z , hotend_offset[active_extruder].z
); );
} }
#endif #endif
@ -119,12 +124,15 @@ void GcodeSuite::M290() {
#if ENABLED(BABYSTEP_DISPLAY_TOTAL) #if ENABLED(BABYSTEP_DISPLAY_TOTAL)
{ {
SERIAL_ECHOLNPAIR("Babystep" SERIAL_ECHOLNPAIR_P(
#if ENABLED(BABYSTEP_XY) #if ENABLED(BABYSTEP_XY)
" X", babystep.axis_total[X_AXIS], PSTR("Babystep X"), babystep.axis_total[X_AXIS]
" Y", babystep.axis_total[Y_AXIS], , SP_Y_STR, babystep.axis_total[Y_AXIS]
, SP_Z_STR
#else
, PSTR("Babystep Z")
#endif #endif
" Z", babystep.axis_total[BS_TODO_AXIS(Z_AXIS)] , babystep.axis_total[BS_TODO_AXIS(Z_AXIS)]
); );
} }
#endif #endif

@ -28,6 +28,8 @@
#include "../../feature/bedlevel/bedlevel.h" #include "../../feature/bedlevel/bedlevel.h"
#include "../../module/probe.h" #include "../../module/probe.h"
extern const char SP_Y_STR[], SP_Z_STR[];
/** /**
* M851: Set the nozzle-to-probe offsets in current units * M851: Set the nozzle-to-probe offsets in current units
*/ */
@ -35,7 +37,7 @@ void GcodeSuite::M851() {
// Show usage with no parameters // Show usage with no parameters
if (!parser.seen("XYZ")) { if (!parser.seen("XYZ")) {
SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET " X", probe_offset.x, " Y", probe_offset.y, " Z", probe_offset.z); SERIAL_ECHOLNPAIR_P(PSTR(MSG_PROBE_OFFSET " X"), probe_offset.x, SP_Y_STR, probe_offset.y, SP_Z_STR, probe_offset.z);
return; return;
} }

@ -61,7 +61,7 @@ void _man_probe_pt(const xy_pos_t &xy) {
ui.defer_status_screen(); ui.defer_status_screen();
wait_for_user = true; wait_for_user = true;
#if ENABLED(HOST_PROMPT_SUPPORT) #if ENABLED(HOST_PROMPT_SUPPORT)
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Delta Calibration in progress"), PSTR("Continue")); host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Delta Calibration in progress"), CONTINUE_STR);
#endif #endif
#if ENABLED(EXTENSIBLE_UI) #if ENABLED(EXTENSIBLE_UI)
ExtUI::onUserConfirmRequired_P(PSTR("Delta Calibration in progress")); ExtUI::onUserConfirmRequired_P(PSTR("Delta Calibration in progress"));

@ -78,9 +78,9 @@ void vector_3::apply_rotation(const matrix_3x3 &matrix) {
void vector_3::debug(PGM_P const title) { void vector_3::debug(PGM_P const title) {
serialprintPGM(title); serialprintPGM(title);
SERIAL_ECHOPAIR_F(" X", x, 6); SERIAL_ECHOPAIR_F_P(SP_X_STR, x, 6);
SERIAL_ECHOPAIR_F(" Y", y, 6); SERIAL_ECHOPAIR_F_P(SP_Y_STR, y, 6);
SERIAL_ECHOLNPAIR_F(" Z", z, 6); SERIAL_ECHOLNPAIR_F_P(SP_Z_STR, z, 6);
} }
/** /**

@ -129,6 +129,8 @@ static const uint32_t _DMA[] PROGMEM = DEFAULT_MAX_ACCELERATION;
static const float _DASU[] PROGMEM = DEFAULT_AXIS_STEPS_PER_UNIT; static const float _DASU[] PROGMEM = DEFAULT_AXIS_STEPS_PER_UNIT;
static const feedRate_t _DMF[] PROGMEM = DEFAULT_MAX_FEEDRATE; static const feedRate_t _DMF[] PROGMEM = DEFAULT_MAX_FEEDRATE;
extern const char SP_X_STR[], SP_Y_STR[], SP_Z_STR[], SP_E_STR[];
/** /**
* Current EEPROM Layout * Current EEPROM Layout
* *
@ -2728,40 +2730,40 @@ void MarlinSettings::reset() {
CONFIG_ECHO_HEADING("Maximum feedrates (units/s):"); CONFIG_ECHO_HEADING("Maximum feedrates (units/s):");
CONFIG_ECHO_START(); CONFIG_ECHO_START();
SERIAL_ECHOLNPAIR( SERIAL_ECHOLNPAIR_P(
" M203 X", LINEAR_UNIT(planner.settings.max_feedrate_mm_s[X_AXIS]) PSTR(" M203 X"), LINEAR_UNIT(planner.settings.max_feedrate_mm_s[X_AXIS])
, " Y", LINEAR_UNIT(planner.settings.max_feedrate_mm_s[Y_AXIS]) , SP_Y_STR, LINEAR_UNIT(planner.settings.max_feedrate_mm_s[Y_AXIS])
, " Z", LINEAR_UNIT(planner.settings.max_feedrate_mm_s[Z_AXIS]) , SP_Z_STR, LINEAR_UNIT(planner.settings.max_feedrate_mm_s[Z_AXIS])
#if DISABLED(DISTINCT_E_FACTORS) #if DISABLED(DISTINCT_E_FACTORS)
, " E", VOLUMETRIC_UNIT(planner.settings.max_feedrate_mm_s[E_AXIS]) , SP_E_STR, VOLUMETRIC_UNIT(planner.settings.max_feedrate_mm_s[E_AXIS])
#endif #endif
); );
#if ENABLED(DISTINCT_E_FACTORS) #if ENABLED(DISTINCT_E_FACTORS)
CONFIG_ECHO_START(); CONFIG_ECHO_START();
for (uint8_t i = 0; i < E_STEPPERS; i++) { for (uint8_t i = 0; i < E_STEPPERS; i++) {
SERIAL_ECHOLNPAIR( SERIAL_ECHOLNPAIR_P(
" M203 T", (int)i PSTR(" M203 T"), (int)i
, " E", VOLUMETRIC_UNIT(planner.settings.max_feedrate_mm_s[E_AXIS_N(i)]) , SP_E_STR, VOLUMETRIC_UNIT(planner.settings.max_feedrate_mm_s[E_AXIS_N(i)])
); );
} }
#endif #endif
CONFIG_ECHO_HEADING("Maximum Acceleration (units/s2):"); CONFIG_ECHO_HEADING("Maximum Acceleration (units/s2):");
CONFIG_ECHO_START(); CONFIG_ECHO_START();
SERIAL_ECHOLNPAIR( SERIAL_ECHOLNPAIR_P(
" M201 X", LINEAR_UNIT(planner.settings.max_acceleration_mm_per_s2[X_AXIS]) PSTR(" M201 X"), LINEAR_UNIT(planner.settings.max_acceleration_mm_per_s2[X_AXIS])
, " Y", LINEAR_UNIT(planner.settings.max_acceleration_mm_per_s2[Y_AXIS]) , SP_Y_STR, LINEAR_UNIT(planner.settings.max_acceleration_mm_per_s2[Y_AXIS])
, " Z", LINEAR_UNIT(planner.settings.max_acceleration_mm_per_s2[Z_AXIS]) , SP_Z_STR, LINEAR_UNIT(planner.settings.max_acceleration_mm_per_s2[Z_AXIS])
#if DISABLED(DISTINCT_E_FACTORS) #if DISABLED(DISTINCT_E_FACTORS)
, " E", VOLUMETRIC_UNIT(planner.settings.max_acceleration_mm_per_s2[E_AXIS]) , SP_E_STR, VOLUMETRIC_UNIT(planner.settings.max_acceleration_mm_per_s2[E_AXIS])
#endif #endif
); );
#if ENABLED(DISTINCT_E_FACTORS) #if ENABLED(DISTINCT_E_FACTORS)
CONFIG_ECHO_START(); CONFIG_ECHO_START();
for (uint8_t i = 0; i < E_STEPPERS; i++) for (uint8_t i = 0; i < E_STEPPERS; i++)
SERIAL_ECHOLNPAIR( SERIAL_ECHOLNPAIR_P(
" M201 T", (int)i PSTR(" M201 T"), (int)i
, " E", VOLUMETRIC_UNIT(planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(i)]) , SP_E_STR, VOLUMETRIC_UNIT(planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(i)])
); );
#endif #endif
@ -2788,19 +2790,19 @@ void MarlinSettings::reset() {
SERIAL_EOL(); SERIAL_EOL();
} }
CONFIG_ECHO_START(); CONFIG_ECHO_START();
SERIAL_ECHOLNPAIR( SERIAL_ECHOLNPAIR_P(
" M205 B", LINEAR_UNIT(planner.settings.min_segment_time_us) PSTR(" M205 B"), LINEAR_UNIT(planner.settings.min_segment_time_us)
, " S", LINEAR_UNIT(planner.settings.min_feedrate_mm_s) , PSTR(" S"), LINEAR_UNIT(planner.settings.min_feedrate_mm_s)
, " T", LINEAR_UNIT(planner.settings.min_travel_feedrate_mm_s) , PSTR(" T"), LINEAR_UNIT(planner.settings.min_travel_feedrate_mm_s)
#if DISABLED(CLASSIC_JERK) #if DISABLED(CLASSIC_JERK)
, " J", LINEAR_UNIT(planner.junction_deviation_mm) , PSTR(" J"), LINEAR_UNIT(planner.junction_deviation_mm)
#endif #endif
#if HAS_CLASSIC_JERK #if HAS_CLASSIC_JERK
, " X", LINEAR_UNIT(planner.max_jerk.x) , SP_X_STR, LINEAR_UNIT(planner.max_jerk.x)
, " Y", LINEAR_UNIT(planner.max_jerk.y) , SP_Y_STR, LINEAR_UNIT(planner.max_jerk.y)
, " Z", LINEAR_UNIT(planner.max_jerk.z) , SP_Z_STR, LINEAR_UNIT(planner.max_jerk.z)
#if HAS_CLASSIC_E_JERK #if HAS_CLASSIC_E_JERK
, " E", LINEAR_UNIT(planner.max_jerk.e) , SP_E_STR, LINEAR_UNIT(planner.max_jerk.e)
#endif #endif
#endif #endif
); );
@ -2808,12 +2810,15 @@ void MarlinSettings::reset() {
#if HAS_M206_COMMAND #if HAS_M206_COMMAND
CONFIG_ECHO_HEADING("Home offset:"); CONFIG_ECHO_HEADING("Home offset:");
CONFIG_ECHO_START(); CONFIG_ECHO_START();
SERIAL_ECHOLNPAIR(" M206" SERIAL_ECHOLNPAIR_P(
#if IS_CARTESIAN #if IS_CARTESIAN
" X", LINEAR_UNIT(home_offset.x), PSTR(" M206 X"), LINEAR_UNIT(home_offset.x)
" Y", LINEAR_UNIT(home_offset.y), , SP_Y_STR, LINEAR_UNIT(home_offset.y)
, SP_Z_STR
#else
PSTR(" M206 Z")
#endif #endif
" Z", LINEAR_UNIT(home_offset.z) , LINEAR_UNIT(home_offset.z)
); );
#endif #endif
@ -2821,11 +2826,12 @@ void MarlinSettings::reset() {
CONFIG_ECHO_HEADING("Hotend offsets:"); CONFIG_ECHO_HEADING("Hotend offsets:");
CONFIG_ECHO_START(); CONFIG_ECHO_START();
for (uint8_t e = 1; e < HOTENDS; e++) { for (uint8_t e = 1; e < HOTENDS; e++) {
SERIAL_ECHOPAIR( SERIAL_ECHOPAIR_P(
" M218 T", (int)e, PSTR(" M218 T"), (int)e,
" X", LINEAR_UNIT(hotend_offset[e].x), " Y", LINEAR_UNIT(hotend_offset[e].y) SP_X_STR, LINEAR_UNIT(hotend_offset[e].x),
SP_Y_STR, LINEAR_UNIT(hotend_offset[e].y)
); );
SERIAL_ECHOLNPAIR_F(" Z", LINEAR_UNIT(hotend_offset[e].z), 3); SERIAL_ECHOLNPAIR_F_P(SP_Z_STR, LINEAR_UNIT(hotend_offset[e].z), 3);
} }
#endif #endif
@ -2853,10 +2859,10 @@ void MarlinSettings::reset() {
#endif #endif
CONFIG_ECHO_START(); CONFIG_ECHO_START();
SERIAL_ECHOLNPAIR( SERIAL_ECHOLNPAIR_P(
" M420 S", planner.leveling_active ? 1 : 0 PSTR(" M420 S"), planner.leveling_active ? 1 : 0
#if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
, " Z", LINEAR_UNIT(planner.z_fade_height) , SP_Z_STR, LINEAR_UNIT(planner.z_fade_height)
#endif #endif
); );
@ -2866,8 +2872,8 @@ void MarlinSettings::reset() {
for (uint8_t py = 0; py < GRID_MAX_POINTS_Y; py++) { for (uint8_t py = 0; py < GRID_MAX_POINTS_Y; py++) {
for (uint8_t px = 0; px < GRID_MAX_POINTS_X; px++) { for (uint8_t px = 0; px < GRID_MAX_POINTS_X; px++) {
CONFIG_ECHO_START(); CONFIG_ECHO_START();
SERIAL_ECHOPAIR(" G29 S3 X", (int)px + 1, " Y", (int)py + 1); SERIAL_ECHOPAIR_P(PSTR(" G29 S3 X"), (int)px + 1, SP_Y_STR, (int)py + 1);
SERIAL_ECHOLNPAIR_F(" Z", LINEAR_UNIT(mbl.z_values[px][py]), 5); SERIAL_ECHOLNPAIR_F_P(SP_Z_STR, LINEAR_UNIT(mbl.z_values[px][py]), 5);
} }
} }
} }
@ -2890,7 +2896,7 @@ void MarlinSettings::reset() {
for (uint8_t px = 0; px < GRID_MAX_POINTS_X; px++) { for (uint8_t px = 0; px < GRID_MAX_POINTS_X; px++) {
CONFIG_ECHO_START(); CONFIG_ECHO_START();
SERIAL_ECHOPAIR(" G29 W I", (int)px, " J", (int)py); SERIAL_ECHOPAIR(" G29 W I", (int)px, " J", (int)py);
SERIAL_ECHOLNPAIR_F(" Z", LINEAR_UNIT(z_values[px][py]), 5); SERIAL_ECHOLNPAIR_F_P(SP_Z_STR, LINEAR_UNIT(z_values[px][py]), 5);
} }
} }
} }
@ -2926,33 +2932,33 @@ void MarlinSettings::reset() {
CONFIG_ECHO_HEADING("SCARA settings: S<seg-per-sec> P<theta-psi-offset> T<theta-offset>"); CONFIG_ECHO_HEADING("SCARA settings: S<seg-per-sec> P<theta-psi-offset> T<theta-offset>");
CONFIG_ECHO_START(); CONFIG_ECHO_START();
SERIAL_ECHOLNPAIR( SERIAL_ECHOLNPAIR_P(
" M665 S", delta_segments_per_second PSTR(" M665 S"), delta_segments_per_second
, " P", scara_home_offset.a , PSTR(" P"), scara_home_offset.a
, " T", scara_home_offset.b , PSTR(" T"), scara_home_offset.b
, " Z", LINEAR_UNIT(scara_home_offset.z) , SP_Z_STR, LINEAR_UNIT(scara_home_offset.z)
); );
#elif ENABLED(DELTA) #elif ENABLED(DELTA)
CONFIG_ECHO_HEADING("Endstop adjustment:"); CONFIG_ECHO_HEADING("Endstop adjustment:");
CONFIG_ECHO_START(); CONFIG_ECHO_START();
SERIAL_ECHOLNPAIR( SERIAL_ECHOLNPAIR_P(
" M666 X", LINEAR_UNIT(delta_endstop_adj.a) PSTR(" M666 X"), LINEAR_UNIT(delta_endstop_adj.a)
, " Y", LINEAR_UNIT(delta_endstop_adj.b) , SP_Y_STR, LINEAR_UNIT(delta_endstop_adj.b)
, " Z", LINEAR_UNIT(delta_endstop_adj.c) , SP_Z_STR, LINEAR_UNIT(delta_endstop_adj.c)
); );
CONFIG_ECHO_HEADING("Delta settings: L<diagonal_rod> R<radius> H<height> S<segments_per_s> XYZ<tower angle corrections>"); CONFIG_ECHO_HEADING("Delta settings: L<diagonal_rod> R<radius> H<height> S<segments_per_s> XYZ<tower angle corrections>");
CONFIG_ECHO_START(); CONFIG_ECHO_START();
SERIAL_ECHOLNPAIR( SERIAL_ECHOLNPAIR_P(
" M665 L", LINEAR_UNIT(delta_diagonal_rod) PSTR(" M665 L"), LINEAR_UNIT(delta_diagonal_rod)
, " R", LINEAR_UNIT(delta_radius) , PSTR(" R"), LINEAR_UNIT(delta_radius)
, " H", LINEAR_UNIT(delta_height) , PSTR(" H"), LINEAR_UNIT(delta_height)
, " S", delta_segments_per_second , PSTR(" S"), delta_segments_per_second
, " X", LINEAR_UNIT(delta_tower_angle_trim.a) , SP_X_STR, LINEAR_UNIT(delta_tower_angle_trim.a)
, " Y", LINEAR_UNIT(delta_tower_angle_trim.b) , SP_Y_STR, LINEAR_UNIT(delta_tower_angle_trim.b)
, " Z", LINEAR_UNIT(delta_tower_angle_trim.c) , SP_Z_STR, LINEAR_UNIT(delta_tower_angle_trim.c)
); );
#elif EITHER(X_DUAL_ENDSTOPS, Y_DUAL_ENDSTOPS) || Z_MULTI_ENDSTOPS #elif EITHER(X_DUAL_ENDSTOPS, Y_DUAL_ENDSTOPS) || Z_MULTI_ENDSTOPS
@ -2961,17 +2967,17 @@ void MarlinSettings::reset() {
CONFIG_ECHO_START(); CONFIG_ECHO_START();
SERIAL_ECHOPGM(" M666"); SERIAL_ECHOPGM(" M666");
#if ENABLED(X_DUAL_ENDSTOPS) #if ENABLED(X_DUAL_ENDSTOPS)
SERIAL_ECHOPAIR(" X", LINEAR_UNIT(endstops.x2_endstop_adj)); SERIAL_ECHOPAIR_P(SP_X_STR, LINEAR_UNIT(endstops.x2_endstop_adj));
#endif #endif
#if ENABLED(Y_DUAL_ENDSTOPS) #if ENABLED(Y_DUAL_ENDSTOPS)
SERIAL_ECHOPAIR(" Y", LINEAR_UNIT(endstops.y2_endstop_adj)); SERIAL_ECHOPAIR_P(SP_Y_STR, LINEAR_UNIT(endstops.y2_endstop_adj));
#endif #endif
#if ENABLED(Z_TRIPLE_ENDSTOPS) #if ENABLED(Z_TRIPLE_ENDSTOPS)
SERIAL_ECHOLNPAIR("S1 Z", LINEAR_UNIT(endstops.z2_endstop_adj)); SERIAL_ECHOLNPAIR("S1 Z", LINEAR_UNIT(endstops.z2_endstop_adj));
CONFIG_ECHO_START(); CONFIG_ECHO_START();
SERIAL_ECHOPAIR(" M666 S2 Z", LINEAR_UNIT(endstops.z3_endstop_adj)); SERIAL_ECHOPAIR(" M666 S2 Z", LINEAR_UNIT(endstops.z3_endstop_adj));
#elif ENABLED(Z_DUAL_ENDSTOPS) #elif ENABLED(Z_DUAL_ENDSTOPS)
SERIAL_ECHOPAIR(" Z", LINEAR_UNIT(endstops.z2_endstop_adj)); SERIAL_ECHOPAIR_P(SP_Z_STR, LINEAR_UNIT(endstops.z2_endstop_adj));
#endif #endif
SERIAL_EOL(); SERIAL_EOL();
@ -2999,13 +3005,16 @@ void MarlinSettings::reset() {
#if ENABLED(PIDTEMP) #if ENABLED(PIDTEMP)
HOTEND_LOOP() { HOTEND_LOOP() {
CONFIG_ECHO_START(); CONFIG_ECHO_START();
SERIAL_ECHOPAIR(" M301" SERIAL_ECHOPAIR_P(
#if HOTENDS > 1 && ENABLED(PID_PARAMS_PER_HOTEND) #if HOTENDS > 1 && ENABLED(PID_PARAMS_PER_HOTEND)
" E", e, PSTR(" M301 E"), e,
PSTR(" P")
#else
PSTR(" M301 P")
#endif #endif
" P", PID_PARAM(Kp, e) , PID_PARAM(Kp, e)
, " I", unscalePID_i(PID_PARAM(Ki, e)) , PSTR(" I"), unscalePID_i(PID_PARAM(Ki, e))
, " D", unscalePID_d(PID_PARAM(Kd, e)) , PSTR(" D"), unscalePID_d(PID_PARAM(Kd, e))
); );
#if ENABLED(PID_EXTRUSION_SCALING) #if ENABLED(PID_EXTRUSION_SCALING)
SERIAL_ECHOPAIR(" C", PID_PARAM(Kc, e)); SERIAL_ECHOPAIR(" C", PID_PARAM(Kc, e));
@ -3051,11 +3060,11 @@ void MarlinSettings::reset() {
CONFIG_ECHO_HEADING("Retract: S<length> F<units/m> Z<lift>"); CONFIG_ECHO_HEADING("Retract: S<length> F<units/m> Z<lift>");
CONFIG_ECHO_START(); CONFIG_ECHO_START();
SERIAL_ECHOLNPAIR( SERIAL_ECHOLNPAIR_P(
" M207 S", LINEAR_UNIT(fwretract.settings.retract_length) PSTR(" M207 S"), LINEAR_UNIT(fwretract.settings.retract_length)
, " W", LINEAR_UNIT(fwretract.settings.swap_retract_length) , PSTR(" W"), LINEAR_UNIT(fwretract.settings.swap_retract_length)
, " F", LINEAR_UNIT(MMS_TO_MMM(fwretract.settings.retract_feedrate_mm_s)) , PSTR(" F"), LINEAR_UNIT(MMS_TO_MMM(fwretract.settings.retract_feedrate_mm_s))
, " Z", LINEAR_UNIT(fwretract.settings.retract_zraise) , SP_Z_STR, LINEAR_UNIT(fwretract.settings.retract_zraise)
); );
CONFIG_ECHO_HEADING("Recover: S<length> F<units/m>"); CONFIG_ECHO_HEADING("Recover: S<length> F<units/m>");
@ -3086,9 +3095,9 @@ void MarlinSettings::reset() {
say_units(true); say_units(true);
} }
CONFIG_ECHO_START(); CONFIG_ECHO_START();
SERIAL_ECHOLNPAIR(" M851 X", LINEAR_UNIT(probe_offset.x), SERIAL_ECHOLNPAIR_P(PSTR(" M851 X"), LINEAR_UNIT(probe_offset.x),
" Y", LINEAR_UNIT(probe_offset.y), SP_Y_STR, LINEAR_UNIT(probe_offset.y),
" Z", LINEAR_UNIT(probe_offset.z)); SP_Z_STR, LINEAR_UNIT(probe_offset.z));
#endif #endif
/** /**
@ -3115,15 +3124,15 @@ void MarlinSettings::reset() {
#if AXIS_IS_TMC(X) || AXIS_IS_TMC(Y) || AXIS_IS_TMC(Z) #if AXIS_IS_TMC(X) || AXIS_IS_TMC(Y) || AXIS_IS_TMC(Z)
say_M906(forReplay); say_M906(forReplay);
SERIAL_ECHOLNPAIR( SERIAL_ECHOLNPAIR_P(
#if AXIS_IS_TMC(X) #if AXIS_IS_TMC(X)
" X", stepperX.getMilliamps(), SP_X_STR, stepperX.getMilliamps(),
#endif #endif
#if AXIS_IS_TMC(Y) #if AXIS_IS_TMC(Y)
" Y", stepperY.getMilliamps(), SP_Y_STR, stepperY.getMilliamps(),
#endif #endif
#if AXIS_IS_TMC(Z) #if AXIS_IS_TMC(Z)
" Z", stepperZ.getMilliamps() SP_Z_STR, stepperZ.getMilliamps()
#endif #endif
); );
#endif #endif
@ -3131,15 +3140,15 @@ void MarlinSettings::reset() {
#if AXIS_IS_TMC(X2) || AXIS_IS_TMC(Y2) || AXIS_IS_TMC(Z2) #if AXIS_IS_TMC(X2) || AXIS_IS_TMC(Y2) || AXIS_IS_TMC(Z2)
say_M906(forReplay); say_M906(forReplay);
SERIAL_ECHOPGM(" I1"); SERIAL_ECHOPGM(" I1");
SERIAL_ECHOLNPAIR( SERIAL_ECHOLNPAIR_P(
#if AXIS_IS_TMC(X2) #if AXIS_IS_TMC(X2)
" X", stepperX2.getMilliamps(), SP_X_STR, stepperX2.getMilliamps(),
#endif #endif
#if AXIS_IS_TMC(Y2) #if AXIS_IS_TMC(Y2)
" Y", stepperY2.getMilliamps(), SP_Y_STR, stepperY2.getMilliamps(),
#endif #endif
#if AXIS_IS_TMC(Z2) #if AXIS_IS_TMC(Z2)
" Z", stepperZ2.getMilliamps() SP_Z_STR, stepperZ2.getMilliamps()
#endif #endif
); );
#endif #endif
@ -3184,13 +3193,13 @@ void MarlinSettings::reset() {
say_M913(forReplay); say_M913(forReplay);
#endif #endif
#if AXIS_HAS_STEALTHCHOP(X) #if AXIS_HAS_STEALTHCHOP(X)
SERIAL_ECHOPAIR(" X", stepperX.get_pwm_thrs()); SERIAL_ECHOPAIR_P(SP_X_STR, stepperX.get_pwm_thrs());
#endif #endif
#if AXIS_HAS_STEALTHCHOP(Y) #if AXIS_HAS_STEALTHCHOP(Y)
SERIAL_ECHOPAIR(" Y", stepperY.get_pwm_thrs()); SERIAL_ECHOPAIR_P(SP_Y_STR, stepperY.get_pwm_thrs());
#endif #endif
#if AXIS_HAS_STEALTHCHOP(Z) #if AXIS_HAS_STEALTHCHOP(Z)
SERIAL_ECHOPAIR(" Z", stepperZ.get_pwm_thrs()); SERIAL_ECHOPAIR_P(SP_Z_STR, stepperZ.get_pwm_thrs());
#endif #endif
#if AXIS_HAS_STEALTHCHOP(X) || AXIS_HAS_STEALTHCHOP(Y) || AXIS_HAS_STEALTHCHOP(Z) #if AXIS_HAS_STEALTHCHOP(X) || AXIS_HAS_STEALTHCHOP(Y) || AXIS_HAS_STEALTHCHOP(Z)
SERIAL_EOL(); SERIAL_EOL();
@ -3201,13 +3210,13 @@ void MarlinSettings::reset() {
SERIAL_ECHOPGM(" I1"); SERIAL_ECHOPGM(" I1");
#endif #endif
#if AXIS_HAS_STEALTHCHOP(X2) #if AXIS_HAS_STEALTHCHOP(X2)
SERIAL_ECHOPAIR(" X", stepperX2.get_pwm_thrs()); SERIAL_ECHOPAIR_P(SP_X_STR, stepperX2.get_pwm_thrs());
#endif #endif
#if AXIS_HAS_STEALTHCHOP(Y2) #if AXIS_HAS_STEALTHCHOP(Y2)
SERIAL_ECHOPAIR(" Y", stepperY2.get_pwm_thrs()); SERIAL_ECHOPAIR_P(SP_Y_STR, stepperY2.get_pwm_thrs());
#endif #endif
#if AXIS_HAS_STEALTHCHOP(Z2) #if AXIS_HAS_STEALTHCHOP(Z2)
SERIAL_ECHOPAIR(" Z", stepperZ2.get_pwm_thrs()); SERIAL_ECHOPAIR_P(SP_Z_STR, stepperZ2.get_pwm_thrs());
#endif #endif
#if AXIS_HAS_STEALTHCHOP(X2) || AXIS_HAS_STEALTHCHOP(Y2) || AXIS_HAS_STEALTHCHOP(Z2) #if AXIS_HAS_STEALTHCHOP(X2) || AXIS_HAS_STEALTHCHOP(Y2) || AXIS_HAS_STEALTHCHOP(Z2)
SERIAL_EOL(); SERIAL_EOL();
@ -3254,13 +3263,13 @@ void MarlinSettings::reset() {
CONFIG_ECHO_START(); CONFIG_ECHO_START();
say_M914(); say_M914();
#if X_SENSORLESS #if X_SENSORLESS
SERIAL_ECHOPAIR(" X", stepperX.homing_threshold()); SERIAL_ECHOPAIR_P(SP_X_STR, stepperX.homing_threshold());
#endif #endif
#if Y_SENSORLESS #if Y_SENSORLESS
SERIAL_ECHOPAIR(" Y", stepperY.homing_threshold()); SERIAL_ECHOPAIR_P(SP_Y_STR, stepperY.homing_threshold());
#endif #endif
#if Z_SENSORLESS #if Z_SENSORLESS
SERIAL_ECHOPAIR(" Z", stepperZ.homing_threshold()); SERIAL_ECHOPAIR_P(SP_Z_STR, stepperZ.homing_threshold());
#endif #endif
SERIAL_EOL(); SERIAL_EOL();
#endif #endif
@ -3270,13 +3279,13 @@ void MarlinSettings::reset() {
say_M914(); say_M914();
SERIAL_ECHOPGM(" I1"); SERIAL_ECHOPGM(" I1");
#if X2_SENSORLESS #if X2_SENSORLESS
SERIAL_ECHOPAIR(" X", stepperX2.homing_threshold()); SERIAL_ECHOPAIR_P(SP_X_STR, stepperX2.homing_threshold());
#endif #endif
#if Y2_SENSORLESS #if Y2_SENSORLESS
SERIAL_ECHOPAIR(" Y", stepperY2.homing_threshold()); SERIAL_ECHOPAIR_P(SP_Y_STR, stepperY2.homing_threshold());
#endif #endif
#if Z2_SENSORLESS #if Z2_SENSORLESS
SERIAL_ECHOPAIR(" Z", stepperZ2.homing_threshold()); SERIAL_ECHOPAIR_P(SP_Z_STR, stepperZ2.homing_threshold());
#endif #endif
SERIAL_EOL(); SERIAL_EOL();
#endif #endif
@ -3312,9 +3321,9 @@ void MarlinSettings::reset() {
if (chop_x || chop_y || chop_z) { if (chop_x || chop_y || chop_z) {
say_M569(forReplay); say_M569(forReplay);
if (chop_x) SERIAL_ECHOPGM(" X"); if (chop_x) SERIAL_ECHOPGM_P(SP_X_STR);
if (chop_y) SERIAL_ECHOPGM(" Y"); if (chop_y) SERIAL_ECHOPGM_P(SP_Y_STR);
if (chop_z) SERIAL_ECHOPGM(" Z"); if (chop_z) SERIAL_ECHOPGM_P(SP_Z_STR);
SERIAL_EOL(); SERIAL_EOL();
} }
@ -3336,9 +3345,9 @@ void MarlinSettings::reset() {
if (chop_x2 || chop_y2 || chop_z2) { if (chop_x2 || chop_y2 || chop_z2) {
say_M569(forReplay, PSTR("I1")); say_M569(forReplay, PSTR("I1"));
if (chop_x2) SERIAL_ECHOPGM(" X"); if (chop_x2) SERIAL_ECHOPGM_P(SP_X_STR);
if (chop_y2) SERIAL_ECHOPGM(" Y"); if (chop_y2) SERIAL_ECHOPGM_P(SP_Y_STR);
if (chop_z2) SERIAL_ECHOPGM(" Z"); if (chop_z2) SERIAL_ECHOPGM_P(SP_Z_STR);
SERIAL_EOL(); SERIAL_EOL();
} }
@ -3386,10 +3395,10 @@ void MarlinSettings::reset() {
#if HAS_MOTOR_CURRENT_PWM #if HAS_MOTOR_CURRENT_PWM
CONFIG_ECHO_HEADING("Stepper motor currents:"); CONFIG_ECHO_HEADING("Stepper motor currents:");
CONFIG_ECHO_START(); CONFIG_ECHO_START();
SERIAL_ECHOLNPAIR( SERIAL_ECHOLNPAIR_P(
" M907 X", stepper.motor_current_setting[0] PSTR(" M907 X"), stepper.motor_current_setting[0]
, " Z", stepper.motor_current_setting[1] , SP_Z_STR, stepper.motor_current_setting[1]
, " E", stepper.motor_current_setting[2] , SP_E_STR, stepper.motor_current_setting[2]
); );
#endif #endif
@ -3429,13 +3438,13 @@ void MarlinSettings::reset() {
#if ENABLED(BACKLASH_GCODE) #if ENABLED(BACKLASH_GCODE)
CONFIG_ECHO_HEADING("Backlash compensation:"); CONFIG_ECHO_HEADING("Backlash compensation:");
CONFIG_ECHO_START(); CONFIG_ECHO_START();
SERIAL_ECHOLNPAIR( SERIAL_ECHOLNPAIR_P(
" M425 F", backlash.get_correction(), PSTR(" M425 F"), backlash.get_correction()
" X", LINEAR_UNIT(backlash.distance_mm.x), , SP_X_STR, LINEAR_UNIT(backlash.distance_mm.x)
" Y", LINEAR_UNIT(backlash.distance_mm.y), , SP_Y_STR, LINEAR_UNIT(backlash.distance_mm.y)
" Z", LINEAR_UNIT(backlash.distance_mm.z) , SP_Z_STR, LINEAR_UNIT(backlash.distance_mm.z)
#ifdef BACKLASH_SMOOTHING_MM #ifdef BACKLASH_SMOOTHING_MM
, " S", LINEAR_UNIT(backlash.smoothing_mm) , PSTR(" S"), LINEAR_UNIT(backlash.smoothing_mm)
#endif #endif
); );
#endif #endif

@ -117,7 +117,7 @@ float delta_calibration_radius() {
*/ */
#define DELTA_DEBUG(VAR) do { \ #define DELTA_DEBUG(VAR) do { \
SERIAL_ECHOLNPAIR("Cartesian X", VAR.x, " Y", VAR.y, " Z", VAR.z); \ SERIAL_ECHOLNPAIR_P(PSTR("Cartesian X"), VAR.x, SP_Y_STR, VAR.y, SP_Z_STR, VAR.z); \
SERIAL_ECHOLNPAIR("Delta A", delta.a, " B", delta.b, " C", delta.c); \ SERIAL_ECHOLNPAIR("Delta A", delta.a, " B", delta.b, " C", delta.c); \
}while(0) }while(0)

@ -129,7 +129,7 @@ xyz_pos_t probe_offset; // Initialized by settings.load()
KEEPALIVE_STATE(PAUSED_FOR_USER); KEEPALIVE_STATE(PAUSED_FOR_USER);
wait_for_user = true; // LCD click or M108 will clear this wait_for_user = true; // LCD click or M108 will clear this
#if ENABLED(HOST_PROMPT_SUPPORT) #if ENABLED(HOST_PROMPT_SUPPORT)
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Deploy TouchMI probe."), PSTR("Continue")); host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Deploy TouchMI probe."), CONTINUE_STR);
#endif #endif
while (wait_for_user) idle(); while (wait_for_user) idle();
ui.reset_status(); ui.reset_status();
@ -290,7 +290,7 @@ FORCE_INLINE void probe_specific_action(const bool deploy) {
KEEPALIVE_STATE(PAUSED_FOR_USER); KEEPALIVE_STATE(PAUSED_FOR_USER);
wait_for_user = true; wait_for_user = true;
#if ENABLED(HOST_PROMPT_SUPPORT) #if ENABLED(HOST_PROMPT_SUPPORT)
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Stow Probe"), PSTR("Continue")); host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Stow Probe"), CONTINUE_STR);
#endif #endif
#if ENABLED(EXTENSIBLE_UI) #if ENABLED(EXTENSIBLE_UI)
ExtUI::onUserConfirmRequired_P(PSTR("Stow Probe")); ExtUI::onUserConfirmRequired_P(PSTR("Stow Probe"));

@ -41,7 +41,7 @@ opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER LCD_PROGRESS_BAR LCD_PROGRESS_BAR_TE
FWRETRACT ARC_P_CIRCLES CNC_WORKSPACE_PLANES CNC_COORDINATE_SYSTEMS \ FWRETRACT ARC_P_CIRCLES CNC_WORKSPACE_PLANES CNC_COORDINATE_SYSTEMS \
PSU_CONTROL AUTO_POWER_CONTROL POWER_LOSS_RECOVERY POWER_LOSS_PIN POWER_LOSS_STATE \ PSU_CONTROL AUTO_POWER_CONTROL POWER_LOSS_RECOVERY POWER_LOSS_PIN POWER_LOSS_STATE \
SLOW_PWM_HEATERS THERMAL_PROTECTION_CHAMBER LIN_ADVANCE \ SLOW_PWM_HEATERS THERMAL_PROTECTION_CHAMBER LIN_ADVANCE \
PINS_DEBUGGING MAX7219_DEBUG M114_DETAIL HOST_ACTION_COMMANDS HOST_PROMPT_SUPPORT PINS_DEBUGGING MAX7219_DEBUG M114_DETAIL
opt_set TEMP_SENSOR_CHAMBER 3 opt_set TEMP_SENSOR_CHAMBER 3
opt_set HEATER_CHAMBER_PIN 45 opt_set HEATER_CHAMBER_PIN 45
exec_test $1 $2 "RAMPS | EXTRUDERS 2 | CHAR LCD + SD | FIX Probe | ABL-Linear | Advanced Pause | PLR | LEDs ..." exec_test $1 $2 "RAMPS | EXTRUDERS 2 | CHAR LCD + SD | FIX Probe | ABL-Linear | Advanced Pause | PLR | LEDs ..."

Loading…
Cancel
Save