Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Marlin/Marlin.h
Original file line number Diff line number Diff line change
Expand Up @@ -207,8 +207,8 @@ void clear_command_queue();
#endif
#endif

extern millis_t previous_cmd_ms;
inline void refresh_cmd_timeout() { previous_cmd_ms = millis(); }
extern millis_t previous_move_ms;
inline void reset_stepper_timeout() { previous_move_ms = millis(); }

/**
* Feedrate scaling and conversion
Expand Down
78 changes: 34 additions & 44 deletions Marlin/Marlin_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -522,7 +522,7 @@ const char axis_codes[XYZE] = { 'X', 'Y', 'Z', 'E' };
static int serial_count; // = 0;

// Inactivity shutdown
millis_t previous_cmd_ms; // = 0;
millis_t previous_move_ms; // = 0;
static millis_t max_inactive_time; // = 0;
static millis_t stepper_inactive_time = (DEFAULT_STEPPER_DEACTIVE_TIME) * 1000UL;

Expand Down Expand Up @@ -1539,8 +1539,6 @@ inline void buffer_line_to_destination(const float &fr_mm_s) {
if (DEBUGGING(LEVELING)) DEBUG_POS("prepare_uninterpolated_move_to_destination", destination);
#endif

refresh_cmd_timeout();

#if UBL_SEGMENTED
// ubl segmented line will do z-only moves in single segment
ubl.prepare_segmented_line_to(destination, MMS_SCALED(fr_mm_s ? fr_mm_s : feedrate_mm_s));
Expand Down Expand Up @@ -1705,7 +1703,6 @@ static void setup_for_endstop_or_probe_move() {
saved_feedrate_mm_s = feedrate_mm_s;
saved_feedrate_percentage = feedrate_percentage;
feedrate_percentage = 100;
refresh_cmd_timeout();
}

static void clean_up_after_endstop_or_probe_move() {
Expand All @@ -1714,7 +1711,6 @@ static void clean_up_after_endstop_or_probe_move() {
#endif
feedrate_mm_s = saved_feedrate_mm_s;
feedrate_percentage = saved_feedrate_percentage;
refresh_cmd_timeout();
}

#if HAS_AXIS_UNHOMED_ERR
Expand Down Expand Up @@ -2227,9 +2223,6 @@ static void clean_up_after_endstop_or_probe_move() {
if (DEBUGGING(LEVELING)) DEBUG_POS(">>> run_z_probe", current_position);
#endif

// Prevent stepper_inactive_time from running out and EXTRUDER_RUNOUT_PREVENT from extruding
refresh_cmd_timeout();

// Double-probing does a fast probe followed by a slow probe
#if MULTIPLE_PROBING == 2

Expand Down Expand Up @@ -3360,7 +3353,6 @@ inline void gcode_G0_G1(

// Send the arc to the planner
plan_arc(destination, arc_offset, clockwise);
refresh_cmd_timeout();
}
else {
// Bad arguments
Expand All @@ -3373,8 +3365,7 @@ inline void gcode_G0_G1(
#endif // ARC_SUPPORT

void dwell(millis_t time) {
refresh_cmd_timeout();
time += previous_cmd_ms;
time += millis();
while (PENDING(millis(), time)) idle();
}

Expand Down Expand Up @@ -6236,10 +6227,9 @@ inline void gcode_G92() {
wait_for_user = true;

stepper.synchronize();
refresh_cmd_timeout();

if (ms > 0) {
ms += previous_cmd_ms; // wait until this time for a click
ms += millis(); // wait until this time for a click
while (PENDING(millis(), ms) && wait_for_user) idle();
}
else {
Expand Down Expand Up @@ -7198,8 +7188,6 @@ inline void gcode_M42() {
}
if (probe_inverting != deploy_state) SERIAL_PROTOCOLLNPGM("WARNING - INVERTING setting probably backwards");

refresh_cmd_timeout();

if (deploy_state != stow_state) {
SERIAL_PROTOCOLLNPGM("BLTouch clone detected");
if (deploy_state) {
Expand All @@ -7226,8 +7214,7 @@ inline void gcode_M42() {

safe_delay(2);

if (0 == j % (500 * 1)) // keep cmd_timeout happy
refresh_cmd_timeout();
if (0 == j % (500 * 1)) reset_stepper_timeout(); // Keep steppers powered

if (deploy_state != READ(PROBE_TEST_PIN)) { // probe triggered

Expand Down Expand Up @@ -7921,7 +7908,7 @@ inline void gcode_M109() {
}

idle();
refresh_cmd_timeout(); // to prevent stepper_inactive_time from running out
reset_stepper_timeout(); // Keep steppers powered

const float temp = thermalManager.degHotend(target_extruder);

Expand Down Expand Up @@ -8058,7 +8045,7 @@ inline void gcode_M109() {
}

idle();
refresh_cmd_timeout(); // to prevent stepper_inactive_time from running out
reset_stepper_timeout(); // Keep steppers powered

const float temp = thermalManager.degBed();

Expand Down Expand Up @@ -12199,6 +12186,8 @@ void process_next_command() {
#endif
}

reset_stepper_timeout(); // Keep steppers powered

// Parse the next command in the queue
parser.parse(current_command);
process_parsed_command();
Expand Down Expand Up @@ -12226,7 +12215,6 @@ void flush_and_request_resend() {
* B<int> Block queue space remaining
*/
void ok_to_send() {
refresh_cmd_timeout();
if (!send_ok[cmd_queue_index_r]) return;
SERIAL_PROTOCOLPGM(MSG_OK);
#if ENABLED(ADVANCED_OK)
Expand Down Expand Up @@ -13074,7 +13062,6 @@ void set_current_from_steppers_for_axis(const AxisEnum axis) {
*/
void prepare_move_to_destination() {
clamp_to_software_endstops(destination);
refresh_cmd_timeout();

#if ENABLED(PREVENT_COLD_EXTRUSION) || ENABLED(PREVENT_LENGTHY_EXTRUDE)

Expand Down Expand Up @@ -13504,7 +13491,7 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) {

const millis_t ms = millis();

if (max_inactive_time && ELAPSED(ms, previous_cmd_ms + max_inactive_time)) {
if (max_inactive_time && ELAPSED(ms, previous_move_ms + max_inactive_time)) {
SERIAL_ERROR_START();
SERIAL_ECHOLNPAIR(MSG_KILL_INACTIVE_TIME, parser.command_ptr);
kill(PSTR(MSG_KILLED));
Expand All @@ -13517,23 +13504,26 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) {
#define MOVE_AWAY_TEST true
#endif

if (MOVE_AWAY_TEST && stepper_inactive_time && ELAPSED(ms, previous_cmd_ms + stepper_inactive_time)
&& !ignore_stepper_queue && !planner.blocks_queued()) {
#if ENABLED(DISABLE_INACTIVE_X)
disable_X();
#endif
#if ENABLED(DISABLE_INACTIVE_Y)
disable_Y();
#endif
#if ENABLED(DISABLE_INACTIVE_Z)
disable_Z();
#endif
#if ENABLED(DISABLE_INACTIVE_E)
disable_e_steppers();
#endif
#if ENABLED(AUTO_BED_LEVELING_UBL) && ENABLED(ULTIPANEL) // Only needed with an LCD
if (ubl.lcd_map_control) ubl.lcd_map_control = defer_return_to_status = false;
#endif
if (stepper_inactive_time) {
if (planner.has_blocks_queued())
previous_move_ms = ms; // reset_stepper_timeout to keep steppers powered
else if (MOVE_AWAY_TEST && !ignore_stepper_queue && ELAPSED(ms, previous_move_ms + stepper_inactive_time)) {
#if ENABLED(DISABLE_INACTIVE_X)
disable_X();
#endif
#if ENABLED(DISABLE_INACTIVE_Y)
disable_Y();
#endif
#if ENABLED(DISABLE_INACTIVE_Z)
disable_Z();
#endif
#if ENABLED(DISABLE_INACTIVE_E)
disable_e_steppers();
#endif
#if ENABLED(AUTO_BED_LEVELING_UBL) && ENABLED(ULTIPANEL) // Only needed with an LCD
if (ubl.lcd_map_control) ubl.lcd_map_control = defer_return_to_status = false;
#endif
}
}

#ifdef CHDK // Check if pin should be set to LOW after M240 set it to HIGH
Expand Down Expand Up @@ -13592,8 +13582,8 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) {

#if ENABLED(EXTRUDER_RUNOUT_PREVENT)
if (thermalManager.degHotend(active_extruder) > EXTRUDER_RUNOUT_MINTEMP
&& ELAPSED(ms, previous_cmd_ms + (EXTRUDER_RUNOUT_SECONDS) * 1000UL)
&& !planner.blocks_queued()
&& ELAPSED(ms, previous_move_ms + (EXTRUDER_RUNOUT_SECONDS) * 1000UL)
&& !planner.has_blocks_queued()
) {
#if ENABLED(SWITCHING_EXTRUDER)
const bool oldstatus = E0_ENABLE_READ;
Expand All @@ -13617,8 +13607,6 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) {
}
#endif // !SWITCHING_EXTRUDER

previous_cmd_ms = ms; // refresh_cmd_timeout()

const float olde = current_position[E_AXIS];
current_position[E_AXIS] += EXTRUDER_RUNOUT_EXTRUDE;
planner.buffer_line_kinematic(current_position, MMM_TO_MMS(EXTRUDER_RUNOUT_SPEED), active_extruder);
Expand All @@ -13644,6 +13632,8 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) {
#endif // E_STEPPERS > 1
}
#endif // !SWITCHING_EXTRUDER

previous_move_ms = ms; // reset_stepper_timeout to keep steppers powered
}
#endif // EXTRUDER_RUNOUT_PREVENT

Expand Down Expand Up @@ -13702,7 +13692,7 @@ void idle(

#if ENABLED(I2C_POSITION_ENCODERS)
static millis_t i2cpem_next_update_ms;
if (planner.blocks_queued() && ELAPSED(millis(), i2cpem_next_update_ms)) {
if (planner.has_blocks_queued() && ELAPSED(millis(), i2cpem_next_update_ms)) {
I2CPEM.update();
i2cpem_next_update_ms = millis() + I2CPE_MIN_UPD_TIME_MS;
}
Expand Down
4 changes: 2 additions & 2 deletions Marlin/planner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -457,7 +457,7 @@ void Planner::check_axes_activity() {
#endif
#endif

if (blocks_queued()) {
if (has_blocks_queued()) {

#if FAN_COUNT > 0
for (uint8_t i = 0; i < FAN_COUNT; i++)
Expand Down Expand Up @@ -1536,7 +1536,7 @@ void Planner::buffer_segment(const float &a, const float &b, const float &c, con
//*/

// Always split the first move into two (if not homing or probing)
if (!blocks_queued()) {
if (!has_blocks_queued()) {

#define _BETWEEN(A) (position[A##_AXIS] + target[A##_AXIS]) >> 1
const int32_t between[ABCE] = { _BETWEEN(A), _BETWEEN(B), _BETWEEN(C), _BETWEEN(E) };
Expand Down
8 changes: 4 additions & 4 deletions Marlin/planner.h
Original file line number Diff line number Diff line change
Expand Up @@ -508,14 +508,14 @@ class Planner {
/**
* Does the buffer have any blocks queued?
*/
static bool blocks_queued() { return (block_buffer_head != block_buffer_tail); }
static inline bool has_blocks_queued() { return (block_buffer_head != block_buffer_tail); }

/**
* "Discard" the block and "release" the memory.
* Called when the current block is no longer needed.
*/
FORCE_INLINE static void discard_current_block() {
if (blocks_queued())
if (has_blocks_queued())
block_buffer_tail = BLOCK_MOD(block_buffer_tail + 1);
}

Expand All @@ -524,7 +524,7 @@ class Planner {
* Called after an interrupted move to throw away the rest of the move.
*/
FORCE_INLINE static bool discard_continued_block() {
const bool discard = blocks_queued() && TEST(block_buffer[block_buffer_tail].flag, BLOCK_BIT_CONTINUED);
const bool discard = has_blocks_queued() && TEST(block_buffer[block_buffer_tail].flag, BLOCK_BIT_CONTINUED);
if (discard) discard_current_block();
return discard;
}
Expand All @@ -535,7 +535,7 @@ class Planner {
* WARNING: Called from Stepper ISR context!
*/
static block_t* get_current_block() {
if (blocks_queued()) {
if (has_blocks_queued()) {
block_t * const block = &block_buffer[block_buffer_tail];

// If the block has no trapezoid calculated, it's unsafe to execute.
Expand Down
4 changes: 2 additions & 2 deletions Marlin/stepper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1112,7 +1112,7 @@ void Stepper::init() {
/**
* Block until all buffered steps are executed / cleaned
*/
void Stepper::synchronize() { while (planner.blocks_queued() || cleaning_buffer_counter) idle(); }
void Stepper::synchronize() { while (planner.has_blocks_queued() || cleaning_buffer_counter) idle(); }

/**
* Set the stepper positions directly in steps
Expand Down Expand Up @@ -1212,7 +1212,7 @@ void Stepper::finish_and_disable() {
void Stepper::quick_stop() {
cleaning_buffer_counter = 5000;
DISABLE_STEPPER_DRIVER_INTERRUPT();
while (planner.blocks_queued()) planner.discard_current_block();
while (planner.has_blocks_queued()) planner.discard_current_block();
current_block = NULL;
ENABLE_STEPPER_DRIVER_INTERRUPT();
#if ENABLED(ULTRA_LCD)
Expand Down
2 changes: 1 addition & 1 deletion Marlin/ubl_G29.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -774,7 +774,7 @@
wait_for_release();
while (!is_lcd_clicked()) {
idle();
refresh_cmd_timeout();
reset_stepper_timeout(); // Keep steppers powered
if (encoder_diff) {
do_blocking_move_to_z(current_position[Z_AXIS] + float(encoder_diff) * multiplier);
encoder_diff = 0;
Expand Down
8 changes: 1 addition & 7 deletions Marlin/ultralcd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1880,7 +1880,6 @@ void kill_screen(const char* lcd_msg) {
// Encoder knob or keypad buttons adjust the Z position
//
if (encoderPosition) {
refresh_cmd_timeout();
const float z = current_position[Z_AXIS] + float((int32_t)encoderPosition) * (MBL_Z_STEP);
line_to_z(constrain(z, -(LCD_PROBE_Z_RANGE) * 0.5, (LCD_PROBE_Z_RANGE) * 0.5));
lcdDrawUpdate = LCDVIEW_CALL_REDRAW_NEXT;
Expand Down Expand Up @@ -2403,7 +2402,6 @@ void kill_screen(const char* lcd_msg) {
stepper.cleaning_buffer_counter = 0;
set_current_from_steppers_for_axis(ALL_AXES);
sync_plan_position();
refresh_cmd_timeout();
}

void _lcd_ubl_output_map_lcd() {
Expand All @@ -2418,10 +2416,7 @@ void kill_screen(const char* lcd_msg) {
if (encoderPosition) {
step_scaler += (int32_t)encoderPosition;
x_plot += step_scaler / (ENCODER_STEPS_PER_MENU_ITEM);
if (abs(step_scaler) >= ENCODER_STEPS_PER_MENU_ITEM)
step_scaler = 0;
refresh_cmd_timeout();

if (abs(step_scaler) >= ENCODER_STEPS_PER_MENU_ITEM) step_scaler = 0;
encoderPosition = 0;
lcdDrawUpdate = LCDVIEW_REDRAW_NOW;
}
Expand Down Expand Up @@ -2903,7 +2898,6 @@ void kill_screen(const char* lcd_msg) {
if (use_click()) { return lcd_goto_previous_menu_no_defer(); }
ENCODER_DIRECTION_NORMAL();
if (encoderPosition && !processing_manual_move) {
refresh_cmd_timeout();

// Start with no limits to movement
float min = current_position[axis] - 1000,
Expand Down