🧑‍💻 Apply F() to some LCD / TFT strings

Followup to #24228
This commit is contained in:
Scott Lahteine
2022-06-13 20:43:23 -05:00
parent c605c1ebb5
commit 78a3ea0ed4
20 changed files with 160 additions and 109 deletions

View File

@ -474,13 +474,8 @@ void DGUSScreenHandler::HandleManualExtrude(DGUS_VP_Variable &var, void *val_ptr
void DGUSScreenHandler::HandleMotorLockUnlock(DGUS_VP_Variable &var, void *val_ptr) {
DEBUG_ECHOLNPGM("HandleMotorLockUnlock");
char buf[4];
const int16_t lock = swap16(*(uint16_t*)val_ptr);
strcpy_P(buf, lock ? PSTR("M18") : PSTR("M17"));
//DEBUG_ECHOPGM(" ", buf);
queue.enqueue_one_now(buf);
queue.enqueue_one_now(lock ? F("M18") : F("M17"));
}
void DGUSScreenHandler::HandleSettings(DGUS_VP_Variable &var, void *val_ptr) {
@ -552,23 +547,23 @@ void DGUSScreenHandler::HandleStepPerMMExtruderChanged(DGUS_VP_Variable &var, vo
#if HAS_HOTEND
case VP_PID_AUTOTUNE_E0: // Autotune Extruder 0
sprintf_P(buf, PSTR("M303 E%d C5 S210 U1"), ExtUI::extruder_t::E0);
queue.enqueue_one_now(buf);
break;
#endif
#if HAS_MULTI_HOTEND
case VP_PID_AUTOTUNE_E1:
sprintf_P(buf, PSTR("M303 E%d C5 S210 U1"), ExtUI::extruder_t::E1);
queue.enqueue_one_now(buf);
break;
#endif
#endif
#if ENABLED(PIDTEMPBED)
case VP_PID_AUTOTUNE_BED:
strcpy_P(buf, PSTR("M303 E-1 C5 S70 U1"));
queue.enqueue_one_now(F("M303 E-1 C5 S70 U1"));
break;
#endif
}
if (buf[0]) queue.enqueue_one_now(buf);
#if ENABLED(DGUS_UI_WAITING)
sendinfoscreen(F("PID is autotuning"), F("please wait"), NUL_STR, NUL_STR, true, true, true, true);
GotoScreen(DGUSLCD_SCREEN_WAITING);

View File

@ -32,12 +32,12 @@ using namespace Theme;
#define GRID_COLS 2
#define GRID_ROWS 9
void BioPrintingDialogBox::draw_status_message(draw_mode_t what, const char *message) {
void BioPrintingDialogBox::draw_status_message(draw_mode_t what, const char *cmsg) {
if (what & BACKGROUND) {
CommandProcessor cmd;
cmd.cmd(COLOR_RGB(bg_text_enabled))
.tag(0);
draw_text_box(cmd, BTN_POS(1,2), BTN_SIZE(2,2), message, OPT_CENTER, font_large);
draw_text_box(cmd, BTN_POS(1,2), BTN_SIZE(2,2), cmsg, OPT_CENTER, font_large);
}
}
@ -105,26 +105,30 @@ bool BioPrintingDialogBox::onTouchEnd(uint8_t tag) {
return true;
}
void BioPrintingDialogBox::setStatusMessage(FSTR_P message) {
char buff[strlen_P(FTOP(message)) + 1];
strcpy_P(buff, FTOP(message));
setStatusMessage(buff);
void BioPrintingDialogBox::setStatusMessage(FSTR_P fmsg) {
#ifdef __AVR__
char buff[strlen_P(FTOP(fmsg)) + 1];
strcpy_P(buff, FTOP(fmsg));
setStatusMessage(buff);
#else
setStatusMessage(FTOP(fmsg));
#endif
}
void BioPrintingDialogBox::setStatusMessage(const char *message) {
void BioPrintingDialogBox::setStatusMessage(const char *cmsg) {
CommandProcessor cmd;
cmd.cmd(CMD_DLSTART)
.cmd(CLEAR_COLOR_RGB(bg_color))
.cmd(CLEAR(true,true,true));
draw_status_message(BACKGROUND, message);
draw_status_message(BACKGROUND, cmsg);
draw_progress(BACKGROUND);
draw_time_remaining(BACKGROUND);
draw_interaction_buttons(BACKGROUND);
storeBackground();
#if ENABLED(TOUCH_UI_DEBUG)
SERIAL_ECHO_MSG("New status message: ", message);
SERIAL_ECHO_MSG("New status message: ", cmsg);
#endif
if (AT_SCREEN(BioPrintingDialogBox))

View File

@ -122,7 +122,7 @@ void StatusScreen::draw_temperature(draw_mode_t what) {
ui.bounds(POLY(bed_temp), x, y, h, v);
cmd.text(x, y, h, v, str);
#endif
#endif
}
}
@ -354,8 +354,8 @@ bool StatusScreen::onTouchHeld(uint8_t tag) {
return false;
}
void StatusScreen::setStatusMessage(FSTR_P pstr) {
BioPrintingDialogBox::setStatusMessage(pstr);
void StatusScreen::setStatusMessage(FSTR_P fstr) {
BioPrintingDialogBox::setStatusMessage(fstr);
}
void StatusScreen::setStatusMessage(const char * const str) {

View File

@ -136,9 +136,13 @@ namespace FTDI {
}
void draw_text_box(CommandProcessor& cmd, int x, int y, int w, int h, FSTR_P fstr, uint16_t options, uint8_t font) {
char str[strlen_P(FTOP(fstr)) + 1];
strcpy_P(str, FTOP(fstr));
draw_text_box(cmd, x, y, w, h, (const char*) str, options, font);
#ifdef __AVR__
char str[strlen_P(FTOP(fstr)) + 1];
strcpy_P(str, FTOP(fstr));
draw_text_box(cmd, x, y, w, h, (const char*) str, options, font);
#else
draw_text_box(cmd, x, y, w, h, FTOP(fstr), options, font);
#endif
}
} // namespace FTDI

View File

@ -192,9 +192,13 @@
}
uint16_t FTDI::get_utf8_text_width(FSTR_P fstr, font_size_t fs) {
char str[strlen_P(FTOP(fstr)) + 1];
strcpy_P(str, FTOP(fstr));
return get_utf8_text_width(str, fs);
#ifdef __AVR__
char str[strlen_P(FTOP(fstr)) + 1];
strcpy_P(str, FTOP(fstr));
return get_utf8_text_width(str, fs);
#else
return get_utf8_text_width(FTOP(fstr), fs);
#endif
}
/**

View File

@ -32,7 +32,7 @@ using namespace Theme;
#define GRID_ROWS 8
template<typename T>
void DialogBoxBaseClass::drawMessage(T message, int16_t font) {
void DialogBoxBaseClass::drawMessage(T message, const int16_t font) {
CommandProcessor cmd;
cmd.cmd(CMD_DLSTART)
.cmd(CLEAR_COLOR_RGB(bg_color))
@ -43,8 +43,7 @@ void DialogBoxBaseClass::drawMessage(T message, int16_t font) {
cmd.colors(normal_btn);
}
template void DialogBoxBaseClass::drawMessage(const char *, int16_t font);
template void DialogBoxBaseClass::drawMessage(FSTR_P, int16_t font);
template void DialogBoxBaseClass::drawMessage(PGM_P const, const int16_t);
void DialogBoxBaseClass::drawYesNoButtons(uint8_t default_btn) {
CommandProcessor cmd;

View File

@ -27,12 +27,15 @@
class DialogBoxBaseClass : public BaseScreen {
protected:
template<typename T> static void drawMessage(T, int16_t font = 0);
template<typename T> static void drawMessage(T, const int16_t font=0);
static void drawMessage(FSTR_P const fstr, const int16_t font=0) { drawMessage(FTOP(fstr), font); }
template<typename T> static void drawButton(T);
static void drawYesNoButtons(uint8_t default_btn = 0);
static void drawOkayButton();
static void onRedraw(draw_mode_t) {};
static void onRedraw(draw_mode_t) {}
public:
static bool onTouchEnd(uint8_t tag);
static void onIdle();

View File

@ -332,10 +332,14 @@ void StatusScreen::draw_status_message(draw_mode_t what, const char *message) {
}
}
void StatusScreen::setStatusMessage(FSTR_P message) {
char buff[strlen_P(FTOP(message)) + 1];
strcpy_P(buff, FTOP(message));
setStatusMessage((const char *) buff);
void StatusScreen::setStatusMessage(FSTR_P fmsg) {
#ifdef __AVR__
char buff[strlen_P(FTOP(fmsg)) + 1];
strcpy_P(buff, FTOP(fmsg));
setStatusMessage((const char *)buff);
#else
setStatusMessage(FTOP(fmsg));
#endif
}
void StatusScreen::setStatusMessage(const char *message) {

View File

@ -711,12 +711,16 @@ void disp_assets_update() {
}
void disp_assets_update_progress(FSTR_P const fmsg) {
static constexpr int buflen = 30;
char buf[buflen];
memset(buf, ' ', buflen);
strncpy_P(buf, FTOP(fmsg), buflen - 1);
buf[buflen - 1] = '\0';
disp_string(100, 165, buf, 0xFFFF, 0x0000);
#ifdef __AVR__
static constexpr int buflen = 30;
char buf[buflen];
memset(buf, ' ', buflen);
strncpy_P(buf, FTOP(fmsg), buflen - 1);
buf[buflen - 1] = '\0';
disp_string(100, 165, buf, 0xFFFF, 0x0000);
#else
disp_string(100, 165, FTOP(fmsg), 0xFFFF, 0x0000);
#endif
}
#if BOTH(MKS_TEST, SDSUPPORT)

View File

@ -1112,15 +1112,23 @@ namespace ExtUI {
// Simplest approach is to make an SRAM copy
void onUserConfirmRequired(FSTR_P const fstr) {
char msg[strlen_P(FTOP(fstr)) + 1];
strcpy_P(msg, FTOP(fstr));
onUserConfirmRequired(msg);
#ifdef __AVR__
char msg[strlen_P(FTOP(fstr)) + 1];
strcpy_P(msg, FTOP(fstr));
onUserConfirmRequired(msg);
#else
onUserConfirmRequired(FTOP(fstr));
#endif
}
void onStatusChanged(FSTR_P const fstr) {
char msg[strlen_P(FTOP(fstr)) + 1];
strcpy_P(msg, FTOP(fstr));
onStatusChanged(msg);
#ifdef __AVR__
char msg[strlen_P(FTOP(fstr)) + 1];
strcpy_P(msg, FTOP(fstr));
onStatusChanged(msg);
#else
onStatusChanged(FTOP(fstr));
#endif
}
FileList::FileList() { refresh(); }