Attempt to workaround the M73 C0|D0 visual issue (#3067)

Attempt to workaround the M73 C0|D0 visual issue

This is an attempt to enable alternation of time to print finish and time
to color change even in the last minute of time to color change, i.e. be
able to print "0:00C".

The proposed solution leverages the capability of the current FW to read
float values from the C|D parameter. This could have the raw benefit of
being able still to alternate this time on the LCD as "0:00C" (or
"<1min") if the slicer sends a non-zero but <1 time right before the
color change.

Co-authored-by: D.R.racer <drracer@drracer.eu>
Co-authored-by: 3d-gussner <3d.gussner@gmail.com>
This commit is contained in:
DRracer 2021-03-19 10:18:28 +01:00 committed by GitHub
parent f31189e5be
commit 8ac1d5b95e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 16 deletions

View file

@ -363,8 +363,8 @@ extern bool mmu_print_saved;
//estimated time to end of the print
extern uint8_t print_percent_done_normal;
extern uint16_t print_time_remaining_normal;
extern uint8_t print_percent_done_silent;
extern uint16_t print_time_remaining_normal;
extern uint16_t print_time_remaining_silent;
extern uint16_t print_time_to_change_normal;
extern uint16_t print_time_to_change_silent;
@ -376,7 +376,7 @@ extern uint16_t gcode_in_progress;
extern LongTimer safetyTimer;
#define PRINT_PERCENT_DONE_INIT 0xff
#define PRINT_PERCENT_DONE_INIT 0xff
#define PRINTER_ACTIVE (IS_SD_PRINTING || is_usb_printing || isPrintPaused || (custom_message_type == CustomMsg::TempCal) || saved_printing || (lcd_commands_type == LcdCommands::Layer1Cal) || mmu_print_saved || homing_flag || mesh_bed_leveling_flag)
//! Beware - mcode_in_progress is set as soon as the command gets really processed,

View file

@ -313,8 +313,8 @@ bool mmu_print_saved = false;
// storing estimated time to end of print counted by slicer
uint8_t print_percent_done_normal = PRINT_PERCENT_DONE_INIT;
uint16_t print_time_remaining_normal = PRINT_TIME_REMAINING_INIT; //estimated remaining print time in minutes
uint8_t print_percent_done_silent = PRINT_PERCENT_DONE_INIT;
uint16_t print_time_remaining_normal = PRINT_TIME_REMAINING_INIT; //estimated remaining print time in minutes
uint16_t print_time_remaining_silent = PRINT_TIME_REMAINING_INIT; //estimated remaining print time in minutes
uint16_t print_time_to_change_normal = PRINT_TIME_REMAINING_INIT; //estimated remaining time to next change in minutes
uint16_t print_time_to_change_silent = PRINT_TIME_REMAINING_INIT; //estimated remaining time to next change in minutes
@ -6389,14 +6389,19 @@ Sigma_Exit:
if(code_seen('R')) print_time_remaining_normal = code_value();
if(code_seen('Q')) print_percent_done_silent = code_value();
if(code_seen('S')) print_time_remaining_silent = code_value();
if(code_seen('C')) print_time_to_change_normal = code_value();
if(code_seen('D')) print_time_to_change_silent = code_value();
{
const char* _msg_mode_done_remain = _N("%S MODE: Percent done: %d; print time remaining in mins: %d; Change in mins: %d\n");
printf_P(_msg_mode_done_remain, _N("NORMAL"), int(print_percent_done_normal), print_time_remaining_normal, print_time_to_change_normal);
printf_P(_msg_mode_done_remain, _N("SILENT"), int(print_percent_done_silent), print_time_remaining_silent, print_time_to_change_silent);
}
if(code_seen('C')){
float print_time_to_change_normal_f = code_value_float();
print_time_to_change_normal = ( print_time_to_change_normal_f <= 0 ) ? PRINT_TIME_REMAINING_INIT : print_time_to_change_normal_f;
}
if(code_seen('D')){
float print_time_to_change_silent_f = code_value_float();
print_time_to_change_silent = ( print_time_to_change_silent_f <= 0 ) ? PRINT_TIME_REMAINING_INIT : print_time_to_change_silent_f;
}
{
const char* _msg_mode_done_remain = _N("%S MODE: Percent done: %hhd; print time remaining in mins: %d; Change in mins: %d\n");
printf_P(_msg_mode_done_remain, _N("NORMAL"), int8_t(print_percent_done_normal), print_time_remaining_normal, print_time_to_change_normal);
printf_P(_msg_mode_done_remain, _N("SILENT"), int8_t(print_percent_done_silent), print_time_remaining_silent, print_time_to_change_silent);
}
break;
}
/*!

View file

@ -510,9 +510,9 @@ void lcdui_print_time(void)
//if remaining print time estimation is available print it else print elapsed time
int chars = 0;
if (PRINTER_ACTIVE) {
uint16_t print_t = 0;
uint16_t print_tr = 0;
uint16_t print_tc = 0;
uint16_t print_t = PRINT_TIME_REMAINING_INIT;
uint16_t print_tr = PRINT_TIME_REMAINING_INIT;
uint16_t print_tc = PRINT_TIME_REMAINING_INIT;
char suff = ' ';
char suff_doubt = ' ';
@ -542,12 +542,12 @@ void lcdui_print_time(void)
clock_interval++;
if (print_tc != 0 && clock_interval > CLOCK_INTERVAL_TIME) {
if (print_tc != PRINT_TIME_REMAINING_INIT && clock_interval > CLOCK_INTERVAL_TIME) {
print_t = print_tc;
suff = 'C';
} else
//#endif //CLOCK_INTERVAL_TIME
if (print_tr != 0) {
if (print_tr != PRINT_TIME_REMAINING_INIT) {
print_t = print_tr;
suff = 'R';
} else