PFW-1523 Implement S parameter for M79

Change in memory:
Flash: +112 bytes
SRAM: +3 bytes
This commit is contained in:
gudnimg 2023-11-04 17:43:13 +00:00
parent cdb559040c
commit 20a2216623
4 changed files with 51 additions and 7 deletions

View File

@ -5857,12 +5857,22 @@ Sigma_Exit:
Restart the printer-host enable keepalive timer. While the timer has not expired, the printer will enable host specific features. Restart the printer-host enable keepalive timer. While the timer has not expired, the printer will enable host specific features.
#### Usage #### Usage
M79 M79 [ S ]
#### Parameters #### Parameters
None - `S` - Quoted string containing two characters e.g. "PL"
*/ */
case 79: case 79:
M79_timer_restart(); M79_timer_restart();
if (code_seen('S'))
{
unquoted_string str = unquoted_string(strchr_pointer);
if (str.WasFound())
{
ResetHostStatusScreenName();
SetHostStatusScreenName(str.GetUnquotedString());
}
}
break; break;
/*! /*!

View File

@ -1,8 +1,23 @@
#include <string.h>
#include "Configuration_adv.h" #include "Configuration_adv.h"
#include "host.h" #include "host.h"
#include "Timer.h" #include "Timer.h"
static LongTimer M79_timer; static LongTimer M79_timer;
static char host_status_screen_name[3];
void SetHostStatusScreenName(const char * name) {
strncpy(host_status_screen_name, name, 2);
host_status_screen_name[2] = '\0';
}
char * GetHostStatusScreenName() {
return host_status_screen_name;
}
void ResetHostStatusScreenName() {
memset(host_status_screen_name, 0, sizeof(host_status_screen_name));
}
void M79_timer_restart() { void M79_timer_restart() {
M79_timer.start(); M79_timer.start();

View File

@ -1,5 +1,15 @@
#pragma once #pragma once
/// Assigns host name with up to two characters which will be shown on
/// the UI when printing. The function forces the third byte to be null delimiter.
void SetHostStatusScreenName(const char * name);
/// Returns a pointer to the host name
char * GetHostStatusScreenName();
/// Reset the memory to NULL when the host name should not be used
void ResetHostStatusScreenName();
/// Restart the M79 timer /// Restart the M79 timer
void M79_timer_restart(); void M79_timer_restart();

View File

@ -19,7 +19,7 @@
#include "menu.h" #include "menu.h"
#include "backlight.h" #include "backlight.h"
#include "host.h"
#include "util.h" #include "util.h"
#include "mesh_bed_leveling.h" #include "mesh_bed_leveling.h"
#include "mesh_bed_calibration.h" #include "mesh_bed_calibration.h"
@ -359,8 +359,7 @@ void lcdui_print_feedrate(void)
// Print percent done in form "USB---%", " SD---%", " ---%" (7 chars total) // Print percent done in form "USB---%", " SD---%", " ---%" (7 chars total)
void lcdui_print_percent_done(void) void lcdui_print_percent_done(void)
{ {
const char* src = usb_timer.running()?_N("USB"):(IS_SD_PRINTING?_N(" SD"):_N(" ")); const char* src = usb_timer.running()?_N(" HO"):(IS_SD_PRINTING?_N(" SD"):_N(" "));
char per[4];
bool num = IS_SD_PRINTING || (printer_active() && (print_percent_done_normal != PRINT_PERCENT_DONE_INIT)); bool num = IS_SD_PRINTING || (printer_active() && (print_percent_done_normal != PRINT_PERCENT_DONE_INIT));
if (!num || heating_status != HeatingStatus::NO_HEATING) // either not printing or heating if (!num || heating_status != HeatingStatus::NO_HEATING) // either not printing or heating
{ {
@ -375,8 +374,18 @@ void lcdui_print_percent_done(void)
return; //do not also print the percentage return; //do not also print the percentage
} }
} }
sprintf_P(per, num?_N("%3d"):_N("---"), calc_percent_done());
lcd_printf_P(_N("%3S%3s%%"), src, per); if (M79_timer_get_status() && GetHostStatusScreenName())
{
// Overwrite the name
char * hostName = GetHostStatusScreenName();
lcd_space(1); // Blank space
lcd_print(hostName); // Two characters
} else {
lcd_printf_P(PSTR("%3S"), src);
}
lcd_printf_P(num ? _N("%3d%%"):_N("---%%"), calc_percent_done());
} }
// Print extruder status (5 chars total) // Print extruder status (5 chars total)