Skip to content

Commit

Permalink
Merge pull request MarlinFirmware#4093 from gudnimg/Restore-default-M…
Browse files Browse the repository at this point in the history
…701-M702-Z-lift

Restore previous Z-lift in M701/M702 + other PROGMEM optimisations
  • Loading branch information
3d-gussner authored Mar 24, 2023
2 parents fd0e4ee + 7e0bf88 commit 4feacfe
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 46 deletions.
4 changes: 2 additions & 2 deletions Firmware/Filament_sensor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ void Filament_sensor::filRunout() {
restore_print_from_ram_and_continue(0);
eeprom_increment_byte((uint8_t *)EEPROM_FERROR_COUNT);
eeprom_increment_word((uint16_t *)EEPROM_FERROR_COUNT_TOT);
enquecommand_front_P((PSTR("M600")));
enquecommand_front_P(MSG_M600);
}

void Filament_sensor::triggerError() {
Expand Down Expand Up @@ -483,7 +483,7 @@ void PAT9125_sensor::filJam() {
restore_print_from_ram_and_continue(0);
eeprom_increment_byte((uint8_t *)EEPROM_FERROR_COUNT);
eeprom_increment_word((uint16_t *)EEPROM_FERROR_COUNT_TOT);
enquecommand_front_P((PSTR("M600")));
enquecommand_front_P(MSG_M600);
}

bool PAT9125_sensor::updatePAT9125() {
Expand Down
31 changes: 15 additions & 16 deletions Firmware/Marlin_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,6 @@ uint8_t host_keepalive_interval = HOST_KEEPALIVE_INTERVAL;

const char errormagic[] PROGMEM = "Error:";
const char echomagic[] PROGMEM = "echo:";
const char G28W0[] PROGMEM = "G28 W0";

// Define some coordinates outside the clamp limits (making them invalid past the parsing stage) so
// that they can be used later for various logical checks
Expand Down Expand Up @@ -2082,7 +2081,7 @@ bool check_commands() {

while (buflen)
{
if ((code_seen_P(PSTR("M84"))) || (code_seen_P(PSTR("M 84")))) end_command_found = true;
if ((code_seen_P(MSG_M84)) || (code_seen_P(PSTR("M 84")))) end_command_found = true;
if (!cmdbuffer_front_already_processed)
cmdqueue_pop_front();
cmdbuffer_front_already_processed = false;
Expand Down Expand Up @@ -2810,7 +2809,7 @@ static void gcode_G80()
// Push the commands to the front of the message queue in the reverse order!
// There shall be always enough space reserved for these commands.
repeatcommand_front(); // repeat G80 with all its parameters
enquecommand_front_P(G28W0);
enquecommand_front_P(G28W);
return;
}

Expand Down Expand Up @@ -2843,7 +2842,7 @@ static void gcode_G80()
temp_compensation_start();
run = true;
repeatcommand_front(); // repeat G80 with all its parameters
enquecommand_front_P(G28W0);
enquecommand_front_P(G28W);
return;
}
run = false;
Expand Down Expand Up @@ -3585,7 +3584,7 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float
// Recover feed rate
feedmultiply = feedmultiplyBckp;
char cmd[9];
sprintf_P(cmd, PSTR("M220 S%i"), feedmultiplyBckp);
sprintf_P(cmd, MSG_M220, feedmultiplyBckp);
enquecommand(cmd);

}
Expand Down Expand Up @@ -4182,7 +4181,7 @@ void process_commands()
}
else if (code_seen_P(PSTR("uvlo"))) { // PRUSA uvlo
eeprom_update_byte((uint8_t*)EEPROM_UVLO,0);
enquecommand_P(PSTR("M24"));
enquecommand_P(MSG_M24);
}
else if (code_seen_P(PSTR("MMURES"))) // PRUSA MMURES
{
Expand Down Expand Up @@ -4737,7 +4736,7 @@ void process_commands()
// Push the commands to the front of the message queue in the reverse order!
// There shall be always enough space reserved for these commands.
repeatcommand_front(); // repeat G76 with all its parameters
enquecommand_front_P(G28W0);
enquecommand_front_P(G28W);
break;
}
lcd_show_fullscreen_message_and_wait_P(_i("Stable ambient temperature 21-26C is needed a rigid stand is required."));////MSG_TEMP_CAL_WARNING c=20 r=4
Expand Down Expand Up @@ -4882,7 +4881,7 @@ void process_commands()
// Push the commands to the front of the message queue in the reverse order!
// There shall be always enough space reserved for these commands.
repeatcommand_front(); // repeat G76 with all its parameters
enquecommand_front_P(G28W0);
enquecommand_front_P(G28W);
break;
}
puts_P(_N("PINDA probe calibration start"));
Expand Down Expand Up @@ -10102,7 +10101,7 @@ void bed_analysis(float x_dimension, float y_dimension, int x_points_num, int y_
// There shall be always enough space reserved for these commands.
repeatcommand_front(); // repeat G80 with all its parameters

enquecommand_front_P(G28W0);
enquecommand_front_P(G28W);
enquecommand_front_P((PSTR("G1 Z5")));
return;
}
Expand Down Expand Up @@ -10783,14 +10782,14 @@ void recover_print(uint8_t automatic) {
sprintf_P(cmd, PSTR("M109 S%d"), target_temperature[active_extruder]);
enquecommand(cmd);

enquecommand_P(PSTR("M83")); //E axis relative mode
enquecommand_P(MSG_M83); //E axis relative mode

// If not automatically recoreverd (long power loss)
if(automatic == 0){
//Extrude some filament to stabilize the pressure
enquecommand_P(PSTR("G1 E5 F120"));
// Retract to be consistent with a short pause
sprintf_P(cmd, PSTR("G1 E%-0.3f F2700"), default_retraction);
sprintf_P(cmd, G1_E_F2700, default_retraction);
enquecommand(cmd);
}

Expand Down Expand Up @@ -10915,7 +10914,7 @@ void restore_print_from_eeprom(bool mbl_was_active) {

MYSERIAL.print(filename);
strcat_P(filename, PSTR(".gco"));
sprintf_P(cmd, PSTR("M23 %s"), filename);
sprintf_P(cmd, MSG_M23, filename);
enquecommand(cmd);
uint32_t position = eeprom_read_dword((uint32_t*)(EEPROM_FILE_POSITION));
SERIAL_ECHOPGM("Position read from eeprom:");
Expand Down Expand Up @@ -10947,7 +10946,7 @@ void restore_print_from_eeprom(bool mbl_was_active) {
enquecommand(cmd);

// Unretract.
sprintf_P(cmd, PSTR("G1 E%0.3f F2700"), default_retraction);
sprintf_P(cmd, G1_E_F2700, default_retraction);
enquecommand(cmd);
// Recover final E axis position and mode
float pos_e = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION_E));
Expand All @@ -10958,7 +10957,7 @@ void restore_print_from_eeprom(bool mbl_was_active) {
// Set the feedrates saved at the power panic.
sprintf_P(cmd, PSTR("G1 F%d"), feedrate_rec);
enquecommand(cmd);
sprintf_P(cmd, PSTR("M220 S%d"), feedmultiply_rec);
sprintf_P(cmd, MSG_M220, feedmultiply_rec);
enquecommand(cmd);
// Set the fan speed saved at the power panic.
sprintf_P(cmd, PSTR("M106 S%u"), fan_speed_rec);
Expand Down Expand Up @@ -11150,15 +11149,15 @@ void stop_and_save_print_to_ram(float z_move, float e_move)
{
// First unretract (relative extrusion)
if(!saved_extruder_relative_mode){
enquecommand(PSTR("M83"), true);
enquecommand_P(MSG_M83);
}
//retract 45mm/s
// A single sprintf may not be faster, but is definitely 20B shorter
// than a sequence of commands building the string piece by piece
// A snprintf would have been a safer call, but since it is not used
// in the whole program, its implementation would bring more bytes to the total size
// The behavior of dtostrf 8,3 should be roughly the same as %-0.3
sprintf_P(buf, PSTR("G1 E%-0.3f F2700"), e_move);
sprintf_P(buf, G1_E_F2700, e_move);
enquecommand(buf, false);
}

Expand Down
4 changes: 2 additions & 2 deletions Firmware/cardreader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -651,10 +651,10 @@ void CardReader::checkautostart(bool force)
{
char cmd[30];
// M23: Select SD file
sprintf_P(cmd, PSTR("M23 %s"), autoname);
sprintf_P(cmd, MSG_M23, autoname);
enquecommand(cmd);
// M24: Start/resume SD print
enquecommand_P(PSTR("M24"));
enquecommand_P(MSG_M24);
found=true;
}
}
Expand Down
20 changes: 7 additions & 13 deletions Firmware/first_lay_cal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ void lay1cal_wait_preheat()
{
const char * const preheat_cmd[] =
{
PSTR("M107"),
MSG_M107,
PSTR("M190"),
PSTR("M109"),
PSTR("G28"),
Expand All @@ -62,7 +62,7 @@ bool lay1cal_load_filament(char *cmd_buffer, uint8_t filament)
{
if (MMU2::mmu2.Enabled())
{
enquecommand_P(PSTR("M83"));
enquecommand_P(MSG_M83);
enquecommand_P(PSTR("G1 Y-3 F1000"));
enquecommand_P(PSTR("G1 Z0.4 F1000"));

Expand All @@ -72,7 +72,7 @@ bool lay1cal_load_filament(char *cmd_buffer, uint8_t filament)
return false;
} else if( currentTool != (uint8_t)MMU2::FILAMENT_UNKNOWN){
// some other slot is loaded, perform an unload first
enquecommand_P(PSTR("M702"));
enquecommand_P(MSG_M702_NO_LIFT);
}
// perform a toolchange
// sprintf_P(cmd_buffer, PSTR("T%d"), filament);
Expand Down Expand Up @@ -140,9 +140,7 @@ void lay1cal_intro_line(bool extraPurgeNeeded, float layer_height, float extrusi
//! @brief Setup for printing meander
void lay1cal_before_meander()
{
static const char cmd_pre_meander_1[] PROGMEM = "G21"; //set units to millimeters TODO unsupported command
static const char cmd_pre_meander_2[] PROGMEM = "G90"; //use absolute coordinates
static const char cmd_pre_meander_3[] PROGMEM = "M83"; //use relative distances for extrusion TODO: duplicate
static const char cmd_pre_meander_4[] PROGMEM = "G1 E-1.5 F2100";
static const char cmd_pre_meander_5[] PROGMEM = "G1 Z5 F7200";
static const char cmd_pre_meander_6[] PROGMEM = "M204 S1000"; //set acceleration
Expand All @@ -151,9 +149,8 @@ void lay1cal_before_meander()
static const char * const cmd_pre_meander[] PROGMEM =
{
zero_extrusion,
cmd_pre_meander_1,
cmd_pre_meander_2,
cmd_pre_meander_3,
MSG_M83, // use relative distances for extrusion
cmd_pre_meander_4,
cmd_pre_meander_5,
cmd_pre_meander_6,
Expand Down Expand Up @@ -248,18 +245,15 @@ void lay1cal_square(uint8_t step, float layer_height, float extrusion_width)

void lay1cal_finish(bool mmu_enabled)
{
static const char cmd_cal_finish_0[] PROGMEM = "M107"; //turn off printer fan
static const char cmd_cal_finish_1[] PROGMEM = "G1 E-0.075 F2100"; //retract
static const char cmd_cal_finish_2[] PROGMEM = "M104 S0"; // turn off temperature
static const char cmd_cal_finish_3[] PROGMEM = "M140 S0"; // turn off heatbed
static const char cmd_cal_finish_4[] PROGMEM = "G1 Z10 F1300"; //lift Z
static const char cmd_cal_finish_5[] PROGMEM = "G1 X10 Y180 F4000"; //Go to parking position
static const char cmd_cal_finish_6[] PROGMEM = "M702"; //unload from nozzle
static const char cmd_cal_finish_7[] PROGMEM = "M84";// disable motors

static const char * const cmd_cal_finish[] PROGMEM =
{
cmd_cal_finish_0,
MSG_M107, // turn off printer fan
cmd_cal_finish_1,
cmd_cal_finish_2,
cmd_cal_finish_3,
Expand All @@ -272,6 +266,6 @@ void lay1cal_finish(bool mmu_enabled)
enquecommand_P(static_cast<char*>(pgm_read_ptr(&cmd_cal_finish[i])));
}

if (mmu_enabled) enquecommand_P(cmd_cal_finish_6); //unload from nozzle
enquecommand_P(cmd_cal_finish_7);// disable motors
if (mmu_enabled) enquecommand_P(MSG_M702_NO_LIFT); //unload from nozzle
enquecommand_P(MSG_M84);// disable motors
}
14 changes: 14 additions & 0 deletions Firmware/messages.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -228,3 +228,17 @@ const char MSG_ADVANCE_K[] PROGMEM_N1 = "Advance K:"; ////c=13
const char MSG_POWERPANIC_DETECTED[] PROGMEM_N1 = "POWER PANIC DETECTED"; ////c=20
const char MSG_LCD_STATUS_CHANGED[] PROGMEM_N1 = "LCD status changed";
const char MSG_UNKNOWN_CODE[] PROGMEM_N1 = "Unknown %c code: %s\n";

// Common G-gcodes
const char G1_E_F2700[] PROGMEM_N1 = "G1 E%-0.3f F2700";
const char G28W[] PROGMEM_N1 = "G28 W";
const char MSG_M23[] PROGMEM_N1 = "M23 %s";
const char MSG_M24[] PROGMEM_N1 = "M24";
const char MSG_M83[] PROGMEM_N1 = "M83";
const char MSG_M84[] PROGMEM_N1 = "M84";
const char MSG_M107[] PROGMEM_N1 = "M107";
const char MSG_M220[] PROGMEM_N1 = "M220 S%d";
const char MSG_M500[] PROGMEM_N1 = "M500";
const char MSG_M600[] PROGMEM_N1 = "M600";
const char MSG_M701_NO_LIFT[] PROGMEM_N1 = "M701 Z0";
const char MSG_M702_NO_LIFT[] PROGMEM_N1 = "M702 Z0";
14 changes: 14 additions & 0 deletions Firmware/messages.h
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,20 @@ extern const char MSG_POWERPANIC_DETECTED[];
extern const char MSG_LCD_STATUS_CHANGED[];
extern const char MSG_UNKNOWN_CODE[];

// Common G-gcodes
extern const char G1_E_F2700[];
extern const char G28W[];
extern const char MSG_M23[];
extern const char MSG_M24[];
extern const char MSG_M83[];
extern const char MSG_M84[];
extern const char MSG_M107[];
extern const char MSG_M220[];
extern const char MSG_M500[];
extern const char MSG_M600[];
extern const char MSG_M701_NO_LIFT[];
extern const char MSG_M702_NO_LIFT[];

#if defined(__cplusplus)
}
#endif //defined(__cplusplus)
2 changes: 1 addition & 1 deletion Firmware/mmu2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ void MMU2::CheckFINDARunout() {
if (SpoolJoin::spooljoin.isSpoolJoinEnabled() && get_current_tool() != (uint8_t)FILAMENT_UNKNOWN){ // Can't auto if F=?
enquecommand_front_P(PSTR("M600 AUTO")); // save print and run M600 command
} else {
enquecommand_front_P(PSTR("M600")); // save print and run M600 command
enquecommand_front_P(MSG_M600); // save print and run M600 command
}
}
}
Expand Down
24 changes: 12 additions & 12 deletions Firmware/ultralcd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -916,7 +916,7 @@ void lcd_commands()
if (_Kp != 0 || _Ki != 0 || _Kd != 0) {
sprintf_P(cmd1, PSTR("M301 P%.2f I%.2f D%.2f"), _Kp, _Ki, _Kd);
enquecommand(cmd1);
enquecommand_P(PSTR("M500"));
enquecommand_P(MSG_M500);
}
else {
SERIAL_ECHOPGM("Invalid PID cal. results. Not stored to EEPROM.");
Expand Down Expand Up @@ -950,7 +950,7 @@ void lcd_commands()

case 2:
if (temp_model_autotune_result())
enquecommand_P(PSTR("M500"));
enquecommand_P(MSG_M500);
lcd_commands_step = 1;
break;

Expand Down Expand Up @@ -1847,10 +1847,10 @@ switch(eFilamentAction)
// FALLTHRU
case FilamentAction::Load:
loading_flag=true;
enquecommand_P(PSTR("M701")); // load filament
enquecommand_P(MSG_M701_NO_LIFT); // load filament
break;
case FilamentAction::UnLoad:
enquecommand_P(PSTR("M702")); // unload filament
enquecommand_P(MSG_M702_NO_LIFT); // unload filament
break;
case FilamentAction::MmuLoad:
case FilamentAction::MmuLoadingTest:
Expand Down Expand Up @@ -1910,11 +1910,11 @@ void mFilamentItem(uint16_t nTemp, uint16_t nTempBed)
if ((eFilamentAction == FilamentAction::Load) || (eFilamentAction == FilamentAction::AutoLoad))
{
loading_flag = true;
enquecommand_P(PSTR("M701")); // load filament
enquecommand_P(MSG_M701_NO_LIFT); // load filament
if (eFilamentAction == FilamentAction::AutoLoad) eFilamentAction = FilamentAction::None; // i.e. non-autoLoad
}
if (eFilamentAction == FilamentAction::UnLoad)
enquecommand_P(PSTR("M702")); // unload filament
enquecommand_P(MSG_M702_NO_LIFT); // unload filament
}
break;
case FilamentAction::MmuLoad:
Expand Down Expand Up @@ -3806,7 +3806,7 @@ static void lcd_wizard_load() {
loading_flag = true;
}
gcode_M701(FILAMENTCHANGE_FIRSTFEED, 0);
//enquecommand_P(PSTR("M701"));
//enquecommand_P(MSG_M701_NO_LIFT); // is enqueuecommand_P safe here?
}

static void wizard_lay1cal_message(bool cold)
Expand Down Expand Up @@ -4595,7 +4595,7 @@ static void lcd_settings_menu()
if (!printer_active() || isPrintPaused)
{
MENU_ITEM_SUBMENU_P(_i("Move axis"), lcd_move_menu_axis);////MSG_MOVE_AXIS c=18
MENU_ITEM_GCODE_P(_i("Disable steppers"), PSTR("M84"));////MSG_DISABLE_STEPPERS c=18
MENU_ITEM_GCODE_P(_i("Disable steppers"), MSG_M84);////MSG_DISABLE_STEPPERS c=18
}

#ifdef FILAMENT_SENSOR
Expand Down Expand Up @@ -5492,7 +5492,7 @@ void stepper_timer_overflow() {

static void lcd_colorprint_change() {

enquecommand_P(PSTR("M600"));
enquecommand_P(MSG_M600);

custom_message_type = CustomMsg::FilamentLoading; //just print status message
lcd_setstatuspgm(_T(MSG_FINISHING_MOVEMENTS));
Expand Down Expand Up @@ -6365,7 +6365,7 @@ bool lcd_selftest()
_progress = lcd_selftest_screen(TestScreen::Failed, _progress, 3, true, 5000);
}
lcd_reset_alert_level();
enquecommand_P(PSTR("M84"));
enquecommand_P(MSG_M84);
lcd_update_enable(true);

if (_result)
Expand Down Expand Up @@ -7271,7 +7271,7 @@ static void menu_action_sdfile(const char* filename)
char cmd[30];
char* c;
bool result = true;
sprintf_P(cmd, PSTR("M23 %s"), filename);
sprintf_P(cmd, MSG_M23, filename);
for (c = &cmd[4]; *c; c++)
*c = tolower(*c);

Expand Down Expand Up @@ -7306,7 +7306,7 @@ static void menu_action_sdfile(const char* filename)
}
if (result) {
enquecommand(cmd);
enquecommand_P(PSTR("M24"));
enquecommand_P(MSG_M24);
}

lcd_return_to_status();
Expand Down

0 comments on commit 4feacfe

Please sign in to comment.