|
|
@ -31,7 +31,7 @@ int absPreheatFanSpeed; |
|
|
|
typedef void (*menuFunc_t)(); |
|
|
|
|
|
|
|
uint8_t lcd_status_message_level; |
|
|
|
char lcd_status_message[LCD_WIDTH+1] = WELCOME_MSG; |
|
|
|
char lcd_status_message[3*LCD_WIDTH+1] = WELCOME_MSG; // worst case is kana with up to 3*LCD_WIDTH+1
|
|
|
|
|
|
|
|
#ifdef DOGLCD |
|
|
|
#include "dogm_lcd_implementation.h" |
|
|
@ -1402,13 +1402,6 @@ void lcd_ignore_click(bool b) { |
|
|
|
} |
|
|
|
|
|
|
|
void lcd_finishstatus(bool persist=false) { |
|
|
|
int len = lcd_strlen(lcd_status_message); |
|
|
|
if (len > 0) { |
|
|
|
while (len < LCD_WIDTH) { |
|
|
|
lcd_status_message[len++] = ' '; |
|
|
|
} |
|
|
|
} |
|
|
|
lcd_status_message[LCD_WIDTH] = '\0'; |
|
|
|
#ifdef LCD_PROGRESS_BAR |
|
|
|
progressBarTick = millis(); |
|
|
|
#if PROGRESS_MSG_EXPIRE > 0 |
|
|
@ -1426,15 +1419,27 @@ void lcd_finishstatus(bool persist=false) { |
|
|
|
void dontExpireStatus() { expireStatusMillis = 0; } |
|
|
|
#endif |
|
|
|
|
|
|
|
void set_utf_strlen(char *s, uint8_t n) { |
|
|
|
uint8_t i = 0, j = 0; |
|
|
|
while (s[i] && (j < n)) { |
|
|
|
if ((s[i] & 0xc0u) != 0x80u) j++; |
|
|
|
i++; |
|
|
|
} |
|
|
|
while (j++ < n) s[i++] = ' '; |
|
|
|
s[i] = 0; |
|
|
|
} |
|
|
|
|
|
|
|
void lcd_setstatus(const char* message, bool persist) { |
|
|
|
if (lcd_status_message_level > 0) return; |
|
|
|
strncpy(lcd_status_message, message, LCD_WIDTH); |
|
|
|
strncpy(lcd_status_message, message, 3*LCD_WIDTH); |
|
|
|
set_utf_strlen(lcd_status_message, LCD_WIDTH); |
|
|
|
lcd_finishstatus(persist); |
|
|
|
} |
|
|
|
|
|
|
|
void lcd_setstatuspgm(const char* message, uint8_t level) { |
|
|
|
if (level >= lcd_status_message_level) { |
|
|
|
strncpy_P(lcd_status_message, message, LCD_WIDTH); |
|
|
|
strncpy_P(lcd_status_message, message, 3*LCD_WIDTH); |
|
|
|
set_utf_strlen(lcd_status_message, LCD_WIDTH); |
|
|
|
lcd_status_message_level = level; |
|
|
|
lcd_finishstatus(level > 0); |
|
|
|
} |
|
|
|