power panic: Re-use code to save feedrate, segment index, and start position
Saves ~80B of Flash
This commit is contained in:
parent
67403603ed
commit
a45e432030
|
|
@ -306,6 +306,7 @@ extern uint8_t saved_printing_type;
|
|||
extern float saved_extruder_temperature; //!< Active extruder temperature
|
||||
extern float saved_bed_temperature; //!< Bed temperature
|
||||
extern uint8_t saved_fan_speed; //!< Print fan speed, ranges from 0 to 255
|
||||
extern uint16_t saved_feedrate2;
|
||||
|
||||
//estimated time to end of the print
|
||||
extern uint8_t print_percent_done_normal;
|
||||
|
|
@ -387,6 +388,7 @@ extern void print_mesh_bed_leveling_table();
|
|||
|
||||
void save_print_file_state();
|
||||
void restore_print_file_state();
|
||||
void save_planner_global_state();
|
||||
extern void stop_and_save_print_to_ram(float z_move, float e_move);
|
||||
void restore_extruder_temperature_from_ram();
|
||||
extern void restore_print_from_ram_and_continue(float e_move);
|
||||
|
|
|
|||
|
|
@ -312,7 +312,7 @@ bool saved_printing = false; //!< Print is paused and saved in RAM
|
|||
uint32_t saved_sdpos = 0; //!< SD card position, or line number in case of USB printing
|
||||
uint8_t saved_printing_type = PRINTING_TYPE_SD;
|
||||
static float saved_pos[4] = { X_COORD_INVALID, 0, 0, 0 };
|
||||
static uint16_t saved_feedrate2 = 0; //!< Default feedrate (truncated from float)
|
||||
uint16_t saved_feedrate2 = 0; //!< Default feedrate (truncated from float)
|
||||
static int saved_feedmultiply2 = 0;
|
||||
float saved_extruder_temperature = 0.0; //!< Active extruder temperature
|
||||
float saved_bed_temperature = 0.0;
|
||||
|
|
@ -10464,6 +10464,21 @@ void restore_print_file_state() {
|
|||
}
|
||||
}
|
||||
|
||||
void save_planner_global_state() {
|
||||
if (current_block && !(mesh_bed_leveling_flag || homing_flag))
|
||||
{
|
||||
memcpy(saved_start_position, current_block->gcode_start_position, sizeof(saved_start_position));
|
||||
saved_feedrate2 = current_block->gcode_feedrate;
|
||||
saved_segment_idx = current_block->segment_idx;
|
||||
}
|
||||
else
|
||||
{
|
||||
saved_start_position[0] = SAVED_START_POSITION_UNSET;
|
||||
saved_feedrate2 = feedrate;
|
||||
saved_segment_idx = 0;
|
||||
}
|
||||
}
|
||||
|
||||
//! @brief Immediately stop print moves
|
||||
//!
|
||||
//! Immediately stop print moves, save current extruder temperature and position to RAM.
|
||||
|
|
@ -10479,21 +10494,9 @@ void stop_and_save_print_to_ram(float z_move, float e_move)
|
|||
cli();
|
||||
save_print_file_state();
|
||||
|
||||
// save the global state at planning time
|
||||
bool pos_invalid = mesh_bed_leveling_flag || homing_flag;
|
||||
if (current_block && !pos_invalid)
|
||||
{
|
||||
memcpy(saved_start_position, current_block->gcode_start_position, sizeof(saved_start_position));
|
||||
saved_feedrate2 = current_block->gcode_feedrate;
|
||||
saved_segment_idx = current_block->segment_idx;
|
||||
// printf_P(PSTR("stop_and_save_print_to_ram: %f, %f, %f, %f, %u\n"), saved_start_position[0], saved_start_position[1], saved_start_position[2], saved_start_position[3], saved_segment_idx);
|
||||
}
|
||||
else
|
||||
{
|
||||
saved_start_position[0] = SAVED_START_POSITION_UNSET;
|
||||
saved_feedrate2 = feedrate;
|
||||
saved_segment_idx = 0;
|
||||
}
|
||||
// save the global state at planning time
|
||||
const bool pos_invalid = mesh_bed_leveling_flag || homing_flag;
|
||||
save_planner_global_state();
|
||||
|
||||
planner_abort_hard(); //abort printing
|
||||
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ static void uvlo_drain_reset() {
|
|||
void uvlo_() {
|
||||
unsigned long time_start = _millis();
|
||||
bool sd_print = card.sdprinting;
|
||||
const bool pos_invalid = mesh_bed_leveling_flag || homing_flag;
|
||||
// Conserve power as soon as possible.
|
||||
#ifdef LCD_BL_PIN
|
||||
backlightMode = BACKLIGHT_MODE_DIM;
|
||||
|
|
@ -63,20 +64,7 @@ void uvlo_() {
|
|||
save_print_file_state();
|
||||
|
||||
// save the global state at planning time
|
||||
bool pos_invalid = mesh_bed_leveling_flag || homing_flag;
|
||||
uint16_t feedrate_bckp;
|
||||
if (current_block && !pos_invalid)
|
||||
{
|
||||
memcpy(saved_start_position, current_block->gcode_start_position, sizeof(saved_start_position));
|
||||
feedrate_bckp = current_block->gcode_feedrate;
|
||||
saved_segment_idx = current_block->segment_idx;
|
||||
}
|
||||
else
|
||||
{
|
||||
saved_start_position[0] = SAVED_START_POSITION_UNSET;
|
||||
feedrate_bckp = feedrate;
|
||||
saved_segment_idx = 0;
|
||||
}
|
||||
save_planner_global_state();
|
||||
|
||||
// From this point on and up to the print recovery, Z should not move during X/Y travels and
|
||||
// should be controlled precisely. Reset the MBL status before planner_abort_hard in order to
|
||||
|
|
@ -156,7 +144,7 @@ void uvlo_() {
|
|||
}
|
||||
|
||||
// Store the current feed rate, temperatures, fan speed and extruder multipliers (flow rates)
|
||||
eeprom_update_word((uint16_t*)EEPROM_UVLO_FEEDRATE, feedrate_bckp);
|
||||
eeprom_update_word((uint16_t*)EEPROM_UVLO_FEEDRATE, saved_feedrate2);
|
||||
eeprom_update_word((uint16_t*)EEPROM_UVLO_FEEDMULTIPLY, feedmultiply);
|
||||
eeprom_update_word((uint16_t*)EEPROM_UVLO_TARGET_HOTEND, saved_target_temperature_ext);
|
||||
eeprom_update_byte((uint8_t*)EEPROM_UVLO_TARGET_BED, saved_target_temperature_bed);
|
||||
|
|
|
|||
Loading…
Reference in New Issue