Merge pull request #5495 from AnHardt/autoadjusting_display-updates
Adaptive screen updates for all kinds of displays
This commit is contained in:
commit
8d9fcd8e6f
@ -507,36 +507,6 @@
|
||||
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
|
||||
#endif
|
||||
|
||||
//
|
||||
// Ensure Smooth Moves
|
||||
//
|
||||
// Enable this option to prevent the machine from stuttering when printing multiple short segments.
|
||||
// This feature uses two strategies to eliminate stuttering:
|
||||
//
|
||||
// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
|
||||
// completely drained. When this happens pauses are introduced between short segments, and print moves
|
||||
// will become jerky until a longer segment provides enough time for the buffer to be filled again.
|
||||
// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
|
||||
// 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
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
//#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
|
||||
// WARNING: Menu navigation during short moves may cause stuttering!
|
||||
#define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
|
||||
// Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
|
||||
// You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
|
||||
#define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
|
||||
#endif
|
||||
|
||||
// @section extruder
|
||||
|
||||
// extruder advance constant (s2/mm3)
|
||||
|
@ -760,8 +760,8 @@ inline void sync_plan_position_e() { planner.set_e_position_mm(current_position[
|
||||
int freeMemory() { return SdFatUtil::FreeRam(); }
|
||||
#else
|
||||
extern "C" {
|
||||
extern unsigned int __bss_end;
|
||||
extern unsigned int __heap_start;
|
||||
extern char __bss_end;
|
||||
extern char __heap_start;
|
||||
extern void* __brkval;
|
||||
|
||||
int freeMemory() {
|
||||
|
@ -507,36 +507,6 @@
|
||||
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
|
||||
#endif
|
||||
|
||||
//
|
||||
// Ensure Smooth Moves
|
||||
//
|
||||
// Enable this option to prevent the machine from stuttering when printing multiple short segments.
|
||||
// This feature uses two strategies to eliminate stuttering:
|
||||
//
|
||||
// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
|
||||
// completely drained. When this happens pauses are introduced between short segments, and print moves
|
||||
// will become jerky until a longer segment provides enough time for the buffer to be filled again.
|
||||
// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
|
||||
// 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
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
//#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
|
||||
// WARNING: Menu navigation during short moves may cause stuttering!
|
||||
#define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
|
||||
// Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
|
||||
// You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
|
||||
#define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
|
||||
#endif
|
||||
|
||||
// @section extruder
|
||||
|
||||
// extruder advance constant (s2/mm3)
|
||||
|
@ -507,36 +507,6 @@
|
||||
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
|
||||
#endif
|
||||
|
||||
//
|
||||
// Ensure Smooth Moves
|
||||
//
|
||||
// Enable this option to prevent the machine from stuttering when printing multiple short segments.
|
||||
// This feature uses two strategies to eliminate stuttering:
|
||||
//
|
||||
// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
|
||||
// completely drained. When this happens pauses are introduced between short segments, and print moves
|
||||
// will become jerky until a longer segment provides enough time for the buffer to be filled again.
|
||||
// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
|
||||
// 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
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
//#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
|
||||
// WARNING: Menu navigation during short moves may cause stuttering!
|
||||
#define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
|
||||
// Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
|
||||
// You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
|
||||
#define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
|
||||
#endif
|
||||
|
||||
// @section extruder
|
||||
|
||||
// extruder advance constant (s2/mm3)
|
||||
|
@ -507,36 +507,6 @@
|
||||
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
|
||||
#endif
|
||||
|
||||
//
|
||||
// Ensure Smooth Moves
|
||||
//
|
||||
// Enable this option to prevent the machine from stuttering when printing multiple short segments.
|
||||
// This feature uses two strategies to eliminate stuttering:
|
||||
//
|
||||
// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
|
||||
// completely drained. When this happens pauses are introduced between short segments, and print moves
|
||||
// will become jerky until a longer segment provides enough time for the buffer to be filled again.
|
||||
// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
|
||||
// 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
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
//#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
|
||||
// WARNING: Menu navigation during short moves may cause stuttering!
|
||||
#define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
|
||||
// Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
|
||||
// You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
|
||||
#define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
|
||||
#endif
|
||||
|
||||
// @section extruder
|
||||
|
||||
// extruder advance constant (s2/mm3)
|
||||
|
@ -507,36 +507,6 @@
|
||||
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
|
||||
#endif
|
||||
|
||||
//
|
||||
// Ensure Smooth Moves
|
||||
//
|
||||
// Enable this option to prevent the machine from stuttering when printing multiple short segments.
|
||||
// This feature uses two strategies to eliminate stuttering:
|
||||
//
|
||||
// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
|
||||
// completely drained. When this happens pauses are introduced between short segments, and print moves
|
||||
// will become jerky until a longer segment provides enough time for the buffer to be filled again.
|
||||
// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
|
||||
// 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
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
//#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
|
||||
// WARNING: Menu navigation during short moves may cause stuttering!
|
||||
#define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
|
||||
// Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
|
||||
// You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
|
||||
#define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
|
||||
#endif
|
||||
|
||||
// @section extruder
|
||||
|
||||
// extruder advance constant (s2/mm3)
|
||||
|
@ -520,36 +520,6 @@
|
||||
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
|
||||
#endif
|
||||
|
||||
//
|
||||
// Ensure Smooth Moves
|
||||
//
|
||||
// Enable this option to prevent the machine from stuttering when printing multiple short segments.
|
||||
// This feature uses two strategies to eliminate stuttering:
|
||||
//
|
||||
// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
|
||||
// completely drained. When this happens pauses are introduced between short segments, and print moves
|
||||
// will become jerky until a longer segment provides enough time for the buffer to be filled again.
|
||||
// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
|
||||
// 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
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
//#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
|
||||
// WARNING: Menu navigation during short moves may cause stuttering!
|
||||
#define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
|
||||
// Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
|
||||
// You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
|
||||
#define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
|
||||
#endif
|
||||
|
||||
// @section extruder
|
||||
|
||||
// extruder advance constant (s2/mm3)
|
||||
|
@ -507,36 +507,6 @@
|
||||
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
|
||||
#endif
|
||||
|
||||
//
|
||||
// Ensure Smooth Moves
|
||||
//
|
||||
// Enable this option to prevent the machine from stuttering when printing multiple short segments.
|
||||
// This feature uses two strategies to eliminate stuttering:
|
||||
//
|
||||
// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
|
||||
// completely drained. When this happens pauses are introduced between short segments, and print moves
|
||||
// will become jerky until a longer segment provides enough time for the buffer to be filled again.
|
||||
// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
|
||||
// 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
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
//#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
|
||||
// WARNING: Menu navigation during short moves may cause stuttering!
|
||||
#define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
|
||||
// Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
|
||||
// You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
|
||||
#define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
|
||||
#endif
|
||||
|
||||
// @section extruder
|
||||
|
||||
// extruder advance constant (s2/mm3)
|
||||
|
@ -507,36 +507,6 @@
|
||||
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
|
||||
#endif
|
||||
|
||||
//
|
||||
// Ensure Smooth Moves
|
||||
//
|
||||
// Enable this option to prevent the machine from stuttering when printing multiple short segments.
|
||||
// This feature uses two strategies to eliminate stuttering:
|
||||
//
|
||||
// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
|
||||
// completely drained. When this happens pauses are introduced between short segments, and print moves
|
||||
// will become jerky until a longer segment provides enough time for the buffer to be filled again.
|
||||
// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
|
||||
// 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
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
//#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
|
||||
// WARNING: Menu navigation during short moves may cause stuttering!
|
||||
#define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
|
||||
// Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
|
||||
// You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
|
||||
#define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
|
||||
#endif
|
||||
|
||||
// @section extruder
|
||||
|
||||
// extruder advance constant (s2/mm3)
|
||||
|
@ -507,36 +507,6 @@
|
||||
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
|
||||
#endif
|
||||
|
||||
//
|
||||
// Ensure Smooth Moves
|
||||
//
|
||||
// Enable this option to prevent the machine from stuttering when printing multiple short segments.
|
||||
// This feature uses two strategies to eliminate stuttering:
|
||||
//
|
||||
// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
|
||||
// completely drained. When this happens pauses are introduced between short segments, and print moves
|
||||
// will become jerky until a longer segment provides enough time for the buffer to be filled again.
|
||||
// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
|
||||
// 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
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
//#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
|
||||
// WARNING: Menu navigation during short moves may cause stuttering!
|
||||
#define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
|
||||
// Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
|
||||
// You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
|
||||
#define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
|
||||
#endif
|
||||
|
||||
// @section extruder
|
||||
|
||||
// extruder advance constant (s2/mm3)
|
||||
|
@ -515,36 +515,6 @@
|
||||
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
|
||||
#endif
|
||||
|
||||
//
|
||||
// Ensure Smooth Moves
|
||||
//
|
||||
// Enable this option to prevent the machine from stuttering when printing multiple short segments.
|
||||
// This feature uses two strategies to eliminate stuttering:
|
||||
//
|
||||
// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
|
||||
// completely drained. When this happens pauses are introduced between short segments, and print moves
|
||||
// will become jerky until a longer segment provides enough time for the buffer to be filled again.
|
||||
// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
|
||||
// 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
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
//#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
|
||||
// WARNING: Menu navigation during short moves may cause stuttering!
|
||||
#define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
|
||||
// Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
|
||||
// You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
|
||||
#define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
|
||||
#endif
|
||||
|
||||
// @section extruder
|
||||
|
||||
// extruder advance constant (s2/mm3)
|
||||
|
@ -507,36 +507,6 @@
|
||||
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
|
||||
#endif
|
||||
|
||||
//
|
||||
// Ensure Smooth Moves
|
||||
//
|
||||
// Enable this option to prevent the machine from stuttering when printing multiple short segments.
|
||||
// This feature uses two strategies to eliminate stuttering:
|
||||
//
|
||||
// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
|
||||
// completely drained. When this happens pauses are introduced between short segments, and print moves
|
||||
// will become jerky until a longer segment provides enough time for the buffer to be filled again.
|
||||
// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
|
||||
// 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
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
//#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
|
||||
// WARNING: Menu navigation during short moves may cause stuttering!
|
||||
#define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
|
||||
// Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
|
||||
// You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
|
||||
#define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
|
||||
#endif
|
||||
|
||||
// @section extruder
|
||||
|
||||
// extruder advance constant (s2/mm3)
|
||||
|
@ -509,36 +509,6 @@
|
||||
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
|
||||
#endif
|
||||
|
||||
//
|
||||
// Ensure Smooth Moves
|
||||
//
|
||||
// Enable this option to prevent the machine from stuttering when printing multiple short segments.
|
||||
// This feature uses two strategies to eliminate stuttering:
|
||||
//
|
||||
// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
|
||||
// completely drained. When this happens pauses are introduced between short segments, and print moves
|
||||
// will become jerky until a longer segment provides enough time for the buffer to be filled again.
|
||||
// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
|
||||
// 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
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
//#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
|
||||
// WARNING: Menu navigation during short moves may cause stuttering!
|
||||
#define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
|
||||
// Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
|
||||
// You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
|
||||
#define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
|
||||
#endif
|
||||
|
||||
// @section extruder
|
||||
|
||||
// extruder advance constant (s2/mm3)
|
||||
|
@ -509,36 +509,6 @@
|
||||
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
|
||||
#endif
|
||||
|
||||
//
|
||||
// Ensure Smooth Moves
|
||||
//
|
||||
// Enable this option to prevent the machine from stuttering when printing multiple short segments.
|
||||
// This feature uses two strategies to eliminate stuttering:
|
||||
//
|
||||
// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
|
||||
// completely drained. When this happens pauses are introduced between short segments, and print moves
|
||||
// will become jerky until a longer segment provides enough time for the buffer to be filled again.
|
||||
// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
|
||||
// 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
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
//#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
|
||||
// WARNING: Menu navigation during short moves may cause stuttering!
|
||||
#define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
|
||||
// Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
|
||||
// You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
|
||||
#define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
|
||||
#endif
|
||||
|
||||
// @section extruder
|
||||
|
||||
// extruder advance constant (s2/mm3)
|
||||
|
@ -509,36 +509,6 @@
|
||||
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
|
||||
#endif
|
||||
|
||||
//
|
||||
// Ensure Smooth Moves
|
||||
//
|
||||
// Enable this option to prevent the machine from stuttering when printing multiple short segments.
|
||||
// This feature uses two strategies to eliminate stuttering:
|
||||
//
|
||||
// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
|
||||
// completely drained. When this happens pauses are introduced between short segments, and print moves
|
||||
// will become jerky until a longer segment provides enough time for the buffer to be filled again.
|
||||
// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
|
||||
// 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
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
//#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
|
||||
// WARNING: Menu navigation during short moves may cause stuttering!
|
||||
#define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
|
||||
// Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
|
||||
// You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
|
||||
#define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
|
||||
#endif
|
||||
|
||||
// @section extruder
|
||||
|
||||
// extruder advance constant (s2/mm3)
|
||||
|
@ -514,36 +514,6 @@
|
||||
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
|
||||
#endif
|
||||
|
||||
//
|
||||
// Ensure Smooth Moves
|
||||
//
|
||||
// Enable this option to prevent the machine from stuttering when printing multiple short segments.
|
||||
// This feature uses two strategies to eliminate stuttering:
|
||||
//
|
||||
// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
|
||||
// completely drained. When this happens pauses are introduced between short segments, and print moves
|
||||
// will become jerky until a longer segment provides enough time for the buffer to be filled again.
|
||||
// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
|
||||
// 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
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
//#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
|
||||
// WARNING: Menu navigation during short moves may cause stuttering!
|
||||
#define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
|
||||
// Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
|
||||
// You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
|
||||
#define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
|
||||
#endif
|
||||
|
||||
// @section extruder
|
||||
|
||||
// extruder advance constant (s2/mm3)
|
||||
|
@ -509,36 +509,6 @@
|
||||
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
|
||||
#endif
|
||||
|
||||
//
|
||||
// Ensure Smooth Moves
|
||||
//
|
||||
// Enable this option to prevent the machine from stuttering when printing multiple short segments.
|
||||
// This feature uses two strategies to eliminate stuttering:
|
||||
//
|
||||
// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
|
||||
// completely drained. When this happens pauses are introduced between short segments, and print moves
|
||||
// will become jerky until a longer segment provides enough time for the buffer to be filled again.
|
||||
// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
|
||||
// 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
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
//#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
|
||||
// WARNING: Menu navigation during short moves may cause stuttering!
|
||||
#define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
|
||||
// Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
|
||||
// You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
|
||||
#define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
|
||||
#endif
|
||||
|
||||
// @section extruder
|
||||
|
||||
// extruder advance constant (s2/mm3)
|
||||
|
@ -507,36 +507,6 @@
|
||||
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
|
||||
#endif
|
||||
|
||||
//
|
||||
// Ensure Smooth Moves
|
||||
//
|
||||
// Enable this option to prevent the machine from stuttering when printing multiple short segments.
|
||||
// This feature uses two strategies to eliminate stuttering:
|
||||
//
|
||||
// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
|
||||
// completely drained. When this happens pauses are introduced between short segments, and print moves
|
||||
// will become jerky until a longer segment provides enough time for the buffer to be filled again.
|
||||
// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
|
||||
// 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
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
//#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
|
||||
// WARNING: Menu navigation during short moves may cause stuttering!
|
||||
#define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
|
||||
// Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
|
||||
// You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
|
||||
#define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
|
||||
#endif
|
||||
|
||||
// @section extruder
|
||||
|
||||
// extruder advance constant (s2/mm3)
|
||||
|
@ -507,36 +507,6 @@
|
||||
#define BABYSTEP_MULTIPLICATOR 1 //faster movements
|
||||
#endif
|
||||
|
||||
//
|
||||
// Ensure Smooth Moves
|
||||
//
|
||||
// Enable this option to prevent the machine from stuttering when printing multiple short segments.
|
||||
// This feature uses two strategies to eliminate stuttering:
|
||||
//
|
||||
// 1. During short segments a Graphical LCD update may take so much time that the planner buffer gets
|
||||
// completely drained. When this happens pauses are introduced between short segments, and print moves
|
||||
// will become jerky until a longer segment provides enough time for the buffer to be filled again.
|
||||
// This jerkiness negatively affects print quality. The ENSURE_SMOOTH_MOVES option addresses the issue
|
||||
// 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
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
//#define ALWAYS_ALLOW_MENU // If enabled, the menu will always be responsive.
|
||||
// WARNING: Menu navigation during short moves may cause stuttering!
|
||||
#define LCD_UPDATE_THRESHOLD 135 // (ms) Minimum duration for the current segment to allow an LCD update.
|
||||
// Default value is good for graphical LCDs (e.g., REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER).
|
||||
// You may try to lower this value until you printer starts stuttering again as if ENSURE_SMOOTH_MOVES is disabled.
|
||||
#define MIN_BLOCK_TIME 6 // (ms) Minimum duration of a single block. You shouldn't need to modify this.
|
||||
#endif
|
||||
|
||||
// @section extruder
|
||||
|
||||
// extruder advance constant (s2/mm3)
|
||||
|
@ -145,7 +145,7 @@ float Planner::previous_speed[NUM_AXIS],
|
||||
Planner::position_float[NUM_AXIS] = { 0 };
|
||||
#endif
|
||||
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
#if ENABLED(ULTRA_LCD)
|
||||
volatile uint32_t Planner::block_buffer_runtime_us = 0;
|
||||
#endif
|
||||
|
||||
@ -985,30 +985,21 @@ void Planner::_buffer_line(const float &a, const float &b, const float &c, const
|
||||
const uint8_t moves_queued = movesplanned();
|
||||
|
||||
// Slow down when the buffer starts to empty, rather than wait at the corner for a buffer refill
|
||||
unsigned long segment_time = lround(1000000.0 / inverse_mm_s);
|
||||
#if ENABLED(SLOWDOWN)
|
||||
// Segment time im micro seconds
|
||||
unsigned long segment_time = lround(1000000.0 / inverse_mm_s);
|
||||
if (moves_queued > 1 && moves_queued < (BLOCK_BUFFER_SIZE) / 2) {
|
||||
if (segment_time < min_segment_time) {
|
||||
// buffer is draining, add extra time. The amount of time added increases if the buffer is still emptied more.
|
||||
inverse_mm_s = 1000000.0 / (segment_time + lround(2 * (min_segment_time - segment_time) / moves_queued));
|
||||
#if defined(XY_FREQUENCY_LIMIT) || ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
#if defined(XY_FREQUENCY_LIMIT) || ENABLED(ULTRA_LCD)
|
||||
segment_time = lround(1000000.0 / inverse_mm_s);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
#if DISABLED(SLOWDOWN)
|
||||
unsigned long segment_time = lround(1000000.0 / inverse_mm_s);
|
||||
#endif
|
||||
if (segment_time < (MIN_BLOCK_TIME) * 1000UL) {
|
||||
// buffer will be draining, set to MIN_BLOCK_TIME.
|
||||
inverse_mm_s = 1000000.0 / (1000.0 * (MIN_BLOCK_TIME));
|
||||
segment_time = (MIN_BLOCK_TIME) * 1000UL;
|
||||
}
|
||||
block->segment_time = segment_time;
|
||||
|
||||
#if ENABLED(ULTRA_LCD)
|
||||
CRITICAL_SECTION_START
|
||||
block_buffer_runtime_us += segment_time;
|
||||
CRITICAL_SECTION_END
|
||||
|
@ -124,9 +124,7 @@ typedef struct {
|
||||
uint32_t valve_pressure, e_to_p_pressure;
|
||||
#endif
|
||||
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
uint32_t segment_time;
|
||||
#endif
|
||||
uint32_t segment_time;
|
||||
|
||||
} block_t;
|
||||
|
||||
@ -214,7 +212,7 @@ class Planner {
|
||||
static float extruder_advance_k;
|
||||
#endif
|
||||
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
#if ENABLED(ULTRA_LCD)
|
||||
volatile static uint32_t block_buffer_runtime_us; //Theoretical block buffer runtime in µs
|
||||
#endif
|
||||
|
||||
@ -381,33 +379,35 @@ class Planner {
|
||||
static block_t* get_current_block() {
|
||||
if (blocks_queued()) {
|
||||
block_t* block = &block_buffer[block_buffer_tail];
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
#if ENABLED(ULTRA_LCD)
|
||||
block_buffer_runtime_us -= block->segment_time; //We can't be sure how long an active block will take, so don't count it.
|
||||
#endif
|
||||
SBI(block->flag, BLOCK_BIT_BUSY);
|
||||
return block;
|
||||
}
|
||||
else {
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
#if ENABLED(ULTRA_LCD)
|
||||
clear_block_buffer_runtime(); // paranoia. Buffer is empty now - so reset accumulated time to zero.
|
||||
#endif
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
static bool long_move() {
|
||||
#if ENABLED(ULTRA_LCD)
|
||||
|
||||
static millis_t block_buffer_runtime() {
|
||||
CRITICAL_SECTION_START
|
||||
uint32_t bbru = block_buffer_runtime_us;
|
||||
millis_t bbru = block_buffer_runtime_us;
|
||||
CRITICAL_SECTION_END
|
||||
return !bbru || bbru > (LCD_UPDATE_THRESHOLD) * 1000UL + (MIN_BLOCK_TIME) * 3000UL;
|
||||
return bbru;
|
||||
}
|
||||
|
||||
|
||||
static void clear_block_buffer_runtime(){
|
||||
CRITICAL_SECTION_START
|
||||
block_buffer_runtime_us = 0;
|
||||
CRITICAL_SECTION_END
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if ENABLED(AUTOTEMP)
|
||||
|
@ -1098,13 +1098,13 @@ void Stepper::finish_and_disable() {
|
||||
|
||||
void Stepper::quick_stop() {
|
||||
cleaning_buffer_counter = 5000;
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES)
|
||||
planner.clear_block_buffer_runtime();
|
||||
#endif
|
||||
DISABLE_STEPPER_DRIVER_INTERRUPT();
|
||||
while (planner.blocks_queued()) planner.discard_current_block();
|
||||
current_block = NULL;
|
||||
ENABLE_STEPPER_DRIVER_INTERRUPT();
|
||||
#if ENABLED(ULTRA_LCD)
|
||||
planner.clear_block_buffer_runtime();
|
||||
#endif
|
||||
}
|
||||
|
||||
void Stepper::endstop_triggered(AxisEnum axis) {
|
||||
|
@ -64,6 +64,8 @@ void lcd_status_screen();
|
||||
millis_t next_lcd_update_ms;
|
||||
|
||||
uint8_t lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; // Set when the LCD needs to draw, decrements after every draw. Set to 2 in LCD routines so the LCD gets at least 1 full redraw (first redraw is partial)
|
||||
millis_t max_display_update_time = 0;
|
||||
|
||||
#if ENABLED(DOGLCD)
|
||||
bool drawing_screen = false;
|
||||
#endif
|
||||
@ -2893,7 +2895,11 @@ void lcd_update() {
|
||||
#endif //SDSUPPORT && SD_DETECT_PIN
|
||||
|
||||
millis_t ms = millis();
|
||||
if (ELAPSED(ms, next_lcd_update_ms)) {
|
||||
if (ELAPSED(ms, next_lcd_update_ms)
|
||||
#if ENABLED(DOGLCD)
|
||||
|| drawing_screen
|
||||
#endif
|
||||
) {
|
||||
|
||||
next_lcd_update_ms = ms + LCD_UPDATE_INTERVAL;
|
||||
|
||||
@ -2954,101 +2960,98 @@ void lcd_update() {
|
||||
}
|
||||
#endif // ULTIPANEL
|
||||
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES) && ENABLED(ALWAYS_ALLOW_MENU)
|
||||
#define STATUS_UPDATE_CONDITION planner.long_move()
|
||||
#else
|
||||
#define STATUS_UPDATE_CONDITION true
|
||||
#endif
|
||||
#if ENABLED(ENSURE_SMOOTH_MOVES) && DISABLED(ALWAYS_ALLOW_MENU)
|
||||
#define LCD_HANDLER_CONDITION planner.long_move()
|
||||
#else
|
||||
#define LCD_HANDLER_CONDITION true
|
||||
#endif
|
||||
|
||||
// We arrive here every ~100ms when idling often enough.
|
||||
// Instead of tracking the changes simply redraw the Info Screen ~1 time a second.
|
||||
static int8_t lcd_status_update_delay = 1; // first update one loop delayed
|
||||
if (STATUS_UPDATE_CONDITION &&
|
||||
if (
|
||||
#if ENABLED(ULTIPANEL)
|
||||
currentScreen == lcd_status_screen &&
|
||||
#endif
|
||||
!lcd_status_update_delay--
|
||||
!lcd_status_update_delay--
|
||||
) {
|
||||
lcd_status_update_delay = 9;
|
||||
lcd_status_update_delay = 9
|
||||
#if ENABLED(DOGLCD)
|
||||
+ 3
|
||||
#endif
|
||||
;
|
||||
max_display_update_time--;
|
||||
lcdDrawUpdate = LCDVIEW_REDRAW_NOW;
|
||||
}
|
||||
|
||||
if (LCD_HANDLER_CONDITION) {
|
||||
|
||||
#if ENABLED(DOGLCD)
|
||||
if (lcdDrawUpdate || drawing_screen)
|
||||
#else
|
||||
if (lcdDrawUpdate)
|
||||
#endif
|
||||
{
|
||||
#if ENABLED(DOGLCD)
|
||||
if (!drawing_screen)
|
||||
#endif
|
||||
{
|
||||
switch (lcdDrawUpdate) {
|
||||
case LCDVIEW_CALL_NO_REDRAW:
|
||||
lcdDrawUpdate = LCDVIEW_NONE;
|
||||
break;
|
||||
case LCDVIEW_CLEAR_CALL_REDRAW: // set by handlers, then altered after (rarely occurs here)
|
||||
case LCDVIEW_CALL_REDRAW_NEXT: // set by handlers, then altered after (never occurs here?)
|
||||
lcdDrawUpdate = LCDVIEW_REDRAW_NOW;
|
||||
case LCDVIEW_REDRAW_NOW: // set above, or by a handler through LCDVIEW_CALL_REDRAW_NEXT
|
||||
case LCDVIEW_NONE:
|
||||
break;
|
||||
} // switch
|
||||
}
|
||||
#if ENABLED(ULTIPANEL)
|
||||
#define CURRENTSCREEN() (*currentScreen)(), lcd_clicked = false
|
||||
#else
|
||||
#define CURRENTSCREEN() lcd_status_screen()
|
||||
#endif
|
||||
|
||||
#if ENABLED(DOGLCD) // Changes due to different driver architecture of the DOGM display
|
||||
if (!drawing_screen) {
|
||||
u8g.firstPage();
|
||||
drawing_screen = 1;
|
||||
}
|
||||
lcd_setFont(FONT_MENU);
|
||||
CURRENTSCREEN();
|
||||
if (drawing_screen && (drawing_screen = u8g.nextPage())) return;
|
||||
#else
|
||||
CURRENTSCREEN();
|
||||
#endif
|
||||
}
|
||||
|
||||
#if ENABLED(ULTIPANEL)
|
||||
|
||||
// Return to Status Screen after a timeout
|
||||
if (currentScreen == lcd_status_screen || defer_return_to_status)
|
||||
return_to_status_ms = ms + LCD_TIMEOUT_TO_STATUS;
|
||||
else if (ELAPSED(ms, return_to_status_ms))
|
||||
lcd_return_to_status();
|
||||
|
||||
#endif // ULTIPANEL
|
||||
millis_t bbr = planner.block_buffer_runtime();
|
||||
|
||||
#if ENABLED(DOGLCD)
|
||||
if ((lcdDrawUpdate || drawing_screen) && (!bbr || (bbr > max_display_update_time * 2000)))
|
||||
#else
|
||||
if (lcdDrawUpdate && (!bbr || (bbr > max_display_update_time * 2000)))
|
||||
#endif
|
||||
{
|
||||
#if ENABLED(DOGLCD)
|
||||
if (!drawing_screen)
|
||||
#endif
|
||||
{
|
||||
switch (lcdDrawUpdate) {
|
||||
case LCDVIEW_CLEAR_CALL_REDRAW:
|
||||
lcd_implementation_clear();
|
||||
case LCDVIEW_CALL_REDRAW_NEXT:
|
||||
lcdDrawUpdate = LCDVIEW_REDRAW_NOW;
|
||||
break;
|
||||
case LCDVIEW_REDRAW_NOW:
|
||||
case LCDVIEW_CALL_NO_REDRAW:
|
||||
lcdDrawUpdate = LCDVIEW_NONE;
|
||||
break;
|
||||
case LCDVIEW_CLEAR_CALL_REDRAW: // set by handlers, then altered after (rarely occurs here)
|
||||
case LCDVIEW_CALL_REDRAW_NEXT: // set by handlers, then altered after (never occurs here?)
|
||||
lcdDrawUpdate = LCDVIEW_REDRAW_NOW;
|
||||
case LCDVIEW_REDRAW_NOW: // set above, or by a handler through LCDVIEW_CALL_REDRAW_NEXT
|
||||
case LCDVIEW_NONE:
|
||||
break;
|
||||
} // switch
|
||||
}
|
||||
} // LCD_HANDLER_CONDITION
|
||||
#if ENABLED(ULTIPANEL)
|
||||
#define CURRENTSCREEN() (*currentScreen)(), lcd_clicked = false
|
||||
#else
|
||||
#define CURRENTSCREEN() lcd_status_screen()
|
||||
#endif
|
||||
|
||||
#if ENABLED(DOGLCD) // Changes due to different driver architecture of the DOGM display
|
||||
if (!drawing_screen) {
|
||||
u8g.firstPage();
|
||||
drawing_screen = 1;
|
||||
}
|
||||
lcd_setFont(FONT_MENU);
|
||||
CURRENTSCREEN();
|
||||
if (drawing_screen && (drawing_screen = u8g.nextPage())) {
|
||||
max_display_update_time = max(max_display_update_time, millis() - ms);
|
||||
return;
|
||||
}
|
||||
#else
|
||||
CURRENTSCREEN();
|
||||
#endif
|
||||
max_display_update_time = max(max_display_update_time, millis() - ms);
|
||||
}
|
||||
|
||||
#if ENABLED(ULTIPANEL)
|
||||
|
||||
// Return to Status Screen after a timeout
|
||||
if (currentScreen == lcd_status_screen || defer_return_to_status)
|
||||
return_to_status_ms = ms + LCD_TIMEOUT_TO_STATUS;
|
||||
else if (ELAPSED(ms, return_to_status_ms))
|
||||
lcd_return_to_status();
|
||||
|
||||
#endif // ULTIPANEL
|
||||
|
||||
#if ENABLED(DOGLCD)
|
||||
if (!drawing_screen)
|
||||
#endif
|
||||
{
|
||||
switch (lcdDrawUpdate) {
|
||||
case LCDVIEW_CLEAR_CALL_REDRAW:
|
||||
lcd_implementation_clear();
|
||||
case LCDVIEW_CALL_REDRAW_NEXT:
|
||||
lcdDrawUpdate = LCDVIEW_REDRAW_NOW;
|
||||
break;
|
||||
case LCDVIEW_REDRAW_NOW:
|
||||
lcdDrawUpdate = LCDVIEW_NONE;
|
||||
break;
|
||||
case LCDVIEW_NONE:
|
||||
break;
|
||||
} // switch
|
||||
}
|
||||
} // ELAPSED(ms, next_lcd_update_ms)
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user