// Enabling ENSURE_SMOOTH_MOVES ensures your printer will never stutter (for example in circles with a short segments). That's done in two steps:
//
// --1--
// Ensure Smooth Moves
// During short segments like in circles, the update of the LCD Display can take so long that the block buffer gets completely drained.
//
// If that happens, the movement of the printer gets very jerky until a longer segment like a longer straight line allows the buffer
// Enable this option to prevent the machine from stuttering when printing multiple short segments.
// to be filled again. This small stops also effects print quality in a bad way.
// This feature uses two strategies to eliminate stuttering:
// Enable ENSURE_SMOOTH_MOVES to update the LCD only when there is enough time during a move to do so.
//
// Note that this means the display will not show actual values during this time and your printer will also not react to buttons
// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
// pressed immediately, except ALWAYS_ALLOW_MENU is also enabled.
// completely drained. When this happens pauses are introduced between short segments, and print moves
// --2--
// will become jerky until a longer segment provides enough time for the buffer to be filled again.
// No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main loop to add a new block to the buffer, checking temps,
// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
// including all interruptions due to interrupts, but without LCD update. If we would allow shorter moves, the buffer would start continously draining.
// by pausing the LCD until there's enough time to safely update.
//
// NOTE: This will cause the Info Screen to lag and controller buttons may become unresponsive.
// Enable ALWAYS_ALLOW_MENU to keep the controller responsive.
//
// 2. No block is allowed to take less time than MIN_BLOCK_TIME. That's the time it takes in the main
// loop to add a new block to the buffer, check temperatures, etc., including all blocked time due to
// interrupts (without LCD update). By enforcing a minimum time-per-move, the buffer is prevented from
// draining.
//
//#define ENSURE_SMOOTH_MOVES
//#define ENSURE_SMOOTH_MOVES
#if ENABLED(ENSURE_SMOOTH_MOVES)
#if ENABLED(ENSURE_SMOOTH_MOVES)
//#define ALWAYS_ALLOW_MENU // If enabled, the menu will be always accessible.
//#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
// WARNING: If the menu is entered or navigated during short moves, the printer will stutter like without ENSURE_SMOOTH_MOVES!
// WARNING: Menu navigation during short moves may cause stuttering!
#define LCD_UPDATE_THRESHOLD 170 // Minimum duration in ms of the current segment to allow a LCD update.
#define LCD_UPDATE_THRESHOLD 170 // (ms) Minimum duration for the current segment to allow an LCD update.
// Default value is valid for graphical LCDs like the REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER.
// Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
#define MIN_BLOCK_TIME 6 // Minimum duration in ms a single block has to take. You shouldn't need to modify this.
#define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.