Merge pull request #4747 from thinkyhead/rc_sd_show_percent
Option to show SD percent on Graphical LCD
This commit is contained in:
commit
cbe9ab902c
2 changed files with 64 additions and 51 deletions
|
@ -189,29 +189,32 @@ static void lcd_setFont(char font_nr) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char lcd_print(char c) {
|
void lcd_print(char c) {
|
||||||
|
if ((c > 0) && (c <= LCD_STR_SPECIAL_MAX)) {
|
||||||
|
u8g.setFont(FONT_SPECIAL_NAME);
|
||||||
|
u8g.print(c);
|
||||||
|
lcd_setFont(currentfont);
|
||||||
|
}
|
||||||
|
else charset_mapper(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
char lcd_print_and_count(char c) {
|
||||||
if ((c > 0) && (c <= LCD_STR_SPECIAL_MAX)) {
|
if ((c > 0) && (c <= LCD_STR_SPECIAL_MAX)) {
|
||||||
u8g.setFont(FONT_SPECIAL_NAME);
|
u8g.setFont(FONT_SPECIAL_NAME);
|
||||||
u8g.print(c);
|
u8g.print(c);
|
||||||
lcd_setFont(currentfont);
|
lcd_setFont(currentfont);
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
|
||||||
return charset_mapper(c);
|
|
||||||
}
|
}
|
||||||
|
else return charset_mapper(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
char lcd_print(const char* str) {
|
void lcd_print(const char* str) {
|
||||||
int i = 0;
|
for (uint8_t i = 0; char c = str[i]; ++i) lcd_print(c);
|
||||||
char c, n = 0;
|
|
||||||
while ((c = str[i++])) n += lcd_print(c);
|
|
||||||
return n;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Needed for Arduino < 1.0.0
|
/* Arduino < 1.0.0 is missing a function to print PROGMEM strings, so we need to implement our own */
|
||||||
char lcd_printPGM(const char* str) {
|
void lcd_printPGM(const char* str) {
|
||||||
char c, n = 0;
|
for (; char c = pgm_read_byte(str); ++str) lcd_print(c);
|
||||||
while ((c = pgm_read_byte(str++))) n += lcd_print(c);
|
|
||||||
return n;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize or re-initializw the LCD
|
// Initialize or re-initializw the LCD
|
||||||
|
@ -337,11 +340,11 @@ FORCE_INLINE void _draw_axis_label(AxisEnum axis, const char *pstr, bool blink)
|
||||||
lcd_printPGM(pstr);
|
lcd_printPGM(pstr);
|
||||||
else {
|
else {
|
||||||
if (!axis_homed[axis])
|
if (!axis_homed[axis])
|
||||||
lcd_printPGM(PSTR("?"));
|
u8g.print('?');
|
||||||
else {
|
else {
|
||||||
#if DISABLED(DISABLE_REDUCED_ACCURACY_WARNING)
|
#if DISABLED(DISABLE_REDUCED_ACCURACY_WARNING)
|
||||||
if (!axis_known_position[axis])
|
if (!axis_known_position[axis])
|
||||||
lcd_printPGM(PSTR(" "));
|
u8g.print(' ');
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
lcd_printPGM(pstr);
|
lcd_printPGM(pstr);
|
||||||
|
@ -349,6 +352,8 @@ FORCE_INLINE void _draw_axis_label(AxisEnum axis, const char *pstr, bool blink)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#define DOGM_SD_PERCENT
|
||||||
|
|
||||||
static void lcd_implementation_status_screen() {
|
static void lcd_implementation_status_screen() {
|
||||||
u8g.setColorIndex(1); // black on white
|
u8g.setColorIndex(1); // black on white
|
||||||
|
|
||||||
|
@ -380,6 +385,13 @@ static void lcd_implementation_status_screen() {
|
||||||
if (IS_SD_PRINTING) {
|
if (IS_SD_PRINTING) {
|
||||||
// Progress bar solid part
|
// Progress bar solid part
|
||||||
u8g.drawBox(55, 50, (unsigned int)(71 * card.percentDone() * 0.01), 2 - (TALL_FONT_CORRECTION));
|
u8g.drawBox(55, 50, (unsigned int)(71 * card.percentDone() * 0.01), 2 - (TALL_FONT_CORRECTION));
|
||||||
|
|
||||||
|
#if ENABLED(DOGM_SD_PERCENT)
|
||||||
|
// Percent complete
|
||||||
|
u8g.setPrintPos(55, 48);
|
||||||
|
u8g.print(itostr3(card.percentDone()));
|
||||||
|
u8g.print('%');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
char buffer[10];
|
char buffer[10];
|
||||||
|
@ -387,7 +399,13 @@ static void lcd_implementation_status_screen() {
|
||||||
bool has_days = (elapsed.value > 60*60*24L);
|
bool has_days = (elapsed.value > 60*60*24L);
|
||||||
elapsed.toDigital(buffer, has_days);
|
elapsed.toDigital(buffer, has_days);
|
||||||
|
|
||||||
u8g.setPrintPos(has_days ? 71 : 80, 48);
|
#if DISABLED(DOGM_SD_PERCENT)
|
||||||
|
#define SD_DURATION_X 71
|
||||||
|
#else
|
||||||
|
#define SD_DURATION_X 89
|
||||||
|
#endif
|
||||||
|
|
||||||
|
u8g.setPrintPos(SD_DURATION_X + (has_days ? 0 : 9), 48);
|
||||||
lcd_print(buffer);
|
lcd_print(buffer);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -406,7 +424,7 @@ static void lcd_implementation_status_screen() {
|
||||||
int per = ((fanSpeeds[0] + 1) * 100) / 256;
|
int per = ((fanSpeeds[0] + 1) * 100) / 256;
|
||||||
if (per) {
|
if (per) {
|
||||||
lcd_print(itostr3(per));
|
lcd_print(itostr3(per));
|
||||||
lcd_print('%');
|
u8g.print('%');
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -448,7 +466,7 @@ static void lcd_implementation_status_screen() {
|
||||||
lcd_setFont(FONT_STATUSMENU);
|
lcd_setFont(FONT_STATUSMENU);
|
||||||
u8g.setPrintPos(12, 49);
|
u8g.setPrintPos(12, 49);
|
||||||
lcd_print(itostr3(feedrate_percentage));
|
lcd_print(itostr3(feedrate_percentage));
|
||||||
lcd_print('%');
|
u8g.print('%');
|
||||||
|
|
||||||
// Status line
|
// Status line
|
||||||
#if ENABLED(USE_SMALL_INFOFONT)
|
#if ENABLED(USE_SMALL_INFOFONT)
|
||||||
|
@ -467,7 +485,7 @@ static void lcd_implementation_status_screen() {
|
||||||
lcd_print(ftostr12ns(filament_width_meas));
|
lcd_print(ftostr12ns(filament_width_meas));
|
||||||
lcd_printPGM(PSTR(" factor:"));
|
lcd_printPGM(PSTR(" factor:"));
|
||||||
lcd_print(itostr3(100.0 * volumetric_multiplier[FILAMENT_SENSOR_EXTRUDER_NUM]));
|
lcd_print(itostr3(100.0 * volumetric_multiplier[FILAMENT_SENSOR_EXTRUDER_NUM]));
|
||||||
lcd_print('%');
|
u8g.print('%');
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -499,17 +517,17 @@ static void lcd_implementation_status_screen() {
|
||||||
|
|
||||||
if (center && !valstr) {
|
if (center && !valstr) {
|
||||||
int8_t pad = (LCD_WIDTH - lcd_strlen_P(pstr)) / 2;
|
int8_t pad = (LCD_WIDTH - lcd_strlen_P(pstr)) / 2;
|
||||||
while (--pad >= 0) { lcd_print(' '); n--; }
|
while (--pad >= 0) { u8g.print(' '); n--; }
|
||||||
}
|
}
|
||||||
while (n > 0 && (c = pgm_read_byte(pstr))) {
|
while (n > 0 && (c = pgm_read_byte(pstr))) {
|
||||||
n -= lcd_print(c);
|
n -= lcd_print_and_count(c);
|
||||||
pstr++;
|
pstr++;
|
||||||
}
|
}
|
||||||
if (valstr) while (n > 0 && (c = *valstr)) {
|
if (valstr) while (n > 0 && (c = *valstr)) {
|
||||||
n -= lcd_print(c);
|
n -= lcd_print_and_count(c);
|
||||||
valstr++;
|
valstr++;
|
||||||
}
|
}
|
||||||
while (n-- > 0) lcd_print(' ');
|
while (n-- > 0) u8g.print(' ');
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // LCD_INFO_MENU || FILAMENT_CHANGE_FEATURE
|
#endif // LCD_INFO_MENU || FILAMENT_CHANGE_FEATURE
|
||||||
|
@ -524,13 +542,13 @@ static void lcd_implementation_status_screen() {
|
||||||
lcd_implementation_mark_as_selected(row, isSelected);
|
lcd_implementation_mark_as_selected(row, isSelected);
|
||||||
|
|
||||||
while (c = pgm_read_byte(pstr)) {
|
while (c = pgm_read_byte(pstr)) {
|
||||||
n -= lcd_print(c);
|
n -= lcd_print_and_count(c);
|
||||||
pstr++;
|
pstr++;
|
||||||
}
|
}
|
||||||
while (n--) lcd_print(' ');
|
while (n--) u8g.print(' ');
|
||||||
u8g.setPrintPos(LCD_PIXEL_WIDTH - (DOG_CHAR_WIDTH), (row + 1) * (DOG_CHAR_HEIGHT));
|
u8g.setPrintPos(LCD_PIXEL_WIDTH - (DOG_CHAR_WIDTH), (row + 1) * (DOG_CHAR_HEIGHT));
|
||||||
lcd_print(post_char);
|
lcd_print(post_char);
|
||||||
lcd_print(' ');
|
u8g.print(' ');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Macros for specific types of menu items
|
// Macros for specific types of menu items
|
||||||
|
@ -548,11 +566,11 @@ static void lcd_implementation_status_screen() {
|
||||||
lcd_implementation_mark_as_selected(row, isSelected);
|
lcd_implementation_mark_as_selected(row, isSelected);
|
||||||
|
|
||||||
while (c = pgm_read_byte(pstr)) {
|
while (c = pgm_read_byte(pstr)) {
|
||||||
n -= lcd_print(c);
|
n -= lcd_print_and_count(c);
|
||||||
pstr++;
|
pstr++;
|
||||||
}
|
}
|
||||||
lcd_print(':');
|
u8g.print(':');
|
||||||
while (n--) lcd_print(' ');
|
while (n--) u8g.print(' ');
|
||||||
u8g.setPrintPos(LCD_PIXEL_WIDTH - (DOG_CHAR_WIDTH) * vallen, (row + 1) * (DOG_CHAR_HEIGHT));
|
u8g.setPrintPos(LCD_PIXEL_WIDTH - (DOG_CHAR_WIDTH) * vallen, (row + 1) * (DOG_CHAR_HEIGHT));
|
||||||
if (pgm) lcd_printPGM(data); else lcd_print((char*)data);
|
if (pgm) lcd_printPGM(data); else lcd_print((char*)data);
|
||||||
}
|
}
|
||||||
|
@ -606,7 +624,7 @@ static void lcd_implementation_status_screen() {
|
||||||
u8g.setPrintPos(0, rowHeight + kHalfChar);
|
u8g.setPrintPos(0, rowHeight + kHalfChar);
|
||||||
lcd_printPGM(pstr);
|
lcd_printPGM(pstr);
|
||||||
if (value != NULL) {
|
if (value != NULL) {
|
||||||
lcd_print(':');
|
u8g.print(':');
|
||||||
u8g.setPrintPos((lcd_width - 1 - vallen) * char_width, rows * rowHeight + kHalfChar);
|
u8g.setPrintPos((lcd_width - 1 - vallen) * char_width, rows * rowHeight + kHalfChar);
|
||||||
lcd_print(value);
|
lcd_print(value);
|
||||||
}
|
}
|
||||||
|
@ -628,10 +646,10 @@ static void lcd_implementation_status_screen() {
|
||||||
|
|
||||||
if (isDir) lcd_print(LCD_STR_FOLDER[0]);
|
if (isDir) lcd_print(LCD_STR_FOLDER[0]);
|
||||||
while ((c = *filename)) {
|
while ((c = *filename)) {
|
||||||
n -= lcd_print(c);
|
n -= lcd_print_and_count(c);
|
||||||
filename++;
|
filename++;
|
||||||
}
|
}
|
||||||
while (n--) lcd_print(' ');
|
while (n--) u8g.print(' ');
|
||||||
}
|
}
|
||||||
|
|
||||||
#define lcd_implementation_drawmenu_sdfile(sel, row, pstr, filename, longFilename) _drawmenu_sd(sel, row, pstr, filename, longFilename, false)
|
#define lcd_implementation_drawmenu_sdfile(sel, row, pstr, filename, longFilename) _drawmenu_sd(sel, row, pstr, filename, longFilename, false)
|
||||||
|
|
|
@ -375,20 +375,15 @@ static void lcd_implementation_init(
|
||||||
static void lcd_implementation_clear() { lcd.clear(); }
|
static void lcd_implementation_clear() { lcd.clear(); }
|
||||||
|
|
||||||
/* Arduino < 1.0.0 is missing a function to print PROGMEM strings, so we need to implement our own */
|
/* Arduino < 1.0.0 is missing a function to print PROGMEM strings, so we need to implement our own */
|
||||||
char lcd_printPGM(const char* str) {
|
void lcd_printPGM(const char *str) {
|
||||||
char c, n = 0;
|
for (; char c = pgm_read_byte(str); ++str) charset_mapper(c);
|
||||||
while ((c = pgm_read_byte(str++))) n += charset_mapper(c);
|
|
||||||
return n;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char lcd_print(const char* str) {
|
void lcd_print(const char* str) {
|
||||||
char c, n = 0;
|
for (uint8_t i = 0; char c = str[i]; ++i) charset_mapper(c);
|
||||||
unsigned char i = 0;
|
|
||||||
while ((c = str[i++])) n += charset_mapper(c);
|
|
||||||
return n;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned lcd_print(char c) { return charset_mapper(c); }
|
void lcd_print(char c) { charset_mapper(c); }
|
||||||
|
|
||||||
#if ENABLED(SHOW_BOOTSCREEN)
|
#if ENABLED(SHOW_BOOTSCREEN)
|
||||||
|
|
||||||
|
@ -556,11 +551,11 @@ FORCE_INLINE void _draw_axis_label(AxisEnum axis, const char *pstr, bool blink)
|
||||||
lcd_printPGM(pstr);
|
lcd_printPGM(pstr);
|
||||||
else {
|
else {
|
||||||
if (!axis_homed[axis])
|
if (!axis_homed[axis])
|
||||||
lcd_printPGM(PSTR("?"));
|
lcd.print('?');
|
||||||
else {
|
else {
|
||||||
#if DISABLED(DISABLE_REDUCED_ACCURACY_WARNING)
|
#if DISABLED(DISABLE_REDUCED_ACCURACY_WARNING)
|
||||||
if (!axis_known_position[axis])
|
if (!axis_known_position[axis])
|
||||||
lcd_printPGM(PSTR(" "));
|
lcd.print(' ');
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
lcd_printPGM(pstr);
|
lcd_printPGM(pstr);
|
||||||
|
@ -694,7 +689,7 @@ static void lcd_implementation_status_screen() {
|
||||||
_draw_axis_label(X_AXIS, PSTR(MSG_X), blink);
|
_draw_axis_label(X_AXIS, PSTR(MSG_X), blink);
|
||||||
lcd.print(ftostr4sign(current_position[X_AXIS]));
|
lcd.print(ftostr4sign(current_position[X_AXIS]));
|
||||||
|
|
||||||
lcd_printPGM(PSTR(" "));
|
lcd.print(' ');
|
||||||
|
|
||||||
_draw_axis_label(Y_AXIS, PSTR(MSG_Y), blink);
|
_draw_axis_label(Y_AXIS, PSTR(MSG_Y), blink);
|
||||||
lcd.print(ftostr4sign(current_position[Y_AXIS]));
|
lcd.print(ftostr4sign(current_position[Y_AXIS]));
|
||||||
|
@ -803,11 +798,11 @@ static void lcd_implementation_status_screen() {
|
||||||
while (--pad >= 0) { lcd.print(' '); n--; }
|
while (--pad >= 0) { lcd.print(' '); n--; }
|
||||||
}
|
}
|
||||||
while (n > 0 && (c = pgm_read_byte(pstr))) {
|
while (n > 0 && (c = pgm_read_byte(pstr))) {
|
||||||
n -= lcd_print(c);
|
n -= charset_mapper(c);
|
||||||
pstr++;
|
pstr++;
|
||||||
}
|
}
|
||||||
if (valstr) while (n > 0 && (c = *valstr)) {
|
if (valstr) while (n > 0 && (c = *valstr)) {
|
||||||
n -= lcd_print(c);
|
n -= charset_mapper(c);
|
||||||
valstr++;
|
valstr++;
|
||||||
}
|
}
|
||||||
while (n-- > 0) lcd.print(' ');
|
while (n-- > 0) lcd.print(' ');
|
||||||
|
@ -821,7 +816,7 @@ static void lcd_implementation_status_screen() {
|
||||||
lcd.setCursor(0, row);
|
lcd.setCursor(0, row);
|
||||||
lcd.print(sel ? pre_char : ' ');
|
lcd.print(sel ? pre_char : ' ');
|
||||||
while ((c = pgm_read_byte(pstr)) && n > 0) {
|
while ((c = pgm_read_byte(pstr)) && n > 0) {
|
||||||
n -= lcd_print(c);
|
n -= charset_mapper(c);
|
||||||
pstr++;
|
pstr++;
|
||||||
}
|
}
|
||||||
while (n--) lcd.print(' ');
|
while (n--) lcd.print(' ');
|
||||||
|
@ -834,7 +829,7 @@ static void lcd_implementation_status_screen() {
|
||||||
lcd.setCursor(0, row);
|
lcd.setCursor(0, row);
|
||||||
lcd.print(sel ? pre_char : ' ');
|
lcd.print(sel ? pre_char : ' ');
|
||||||
while ((c = pgm_read_byte(pstr)) && n > 0) {
|
while ((c = pgm_read_byte(pstr)) && n > 0) {
|
||||||
n -= lcd_print(c);
|
n -= charset_mapper(c);
|
||||||
pstr++;
|
pstr++;
|
||||||
}
|
}
|
||||||
lcd.print(':');
|
lcd.print(':');
|
||||||
|
@ -847,7 +842,7 @@ static void lcd_implementation_status_screen() {
|
||||||
lcd.setCursor(0, row);
|
lcd.setCursor(0, row);
|
||||||
lcd.print(sel ? pre_char : ' ');
|
lcd.print(sel ? pre_char : ' ');
|
||||||
while ((c = pgm_read_byte(pstr)) && n > 0) {
|
while ((c = pgm_read_byte(pstr)) && n > 0) {
|
||||||
n -= lcd_print(c);
|
n -= charset_mapper(c);
|
||||||
pstr++;
|
pstr++;
|
||||||
}
|
}
|
||||||
lcd.print(':');
|
lcd.print(':');
|
||||||
|
@ -899,7 +894,7 @@ static void lcd_implementation_status_screen() {
|
||||||
longFilename[n] = '\0';
|
longFilename[n] = '\0';
|
||||||
}
|
}
|
||||||
while ((c = *filename) && n > 0) {
|
while ((c = *filename) && n > 0) {
|
||||||
n -= lcd_print(c);
|
n -= charset_mapper(c);
|
||||||
filename++;
|
filename++;
|
||||||
}
|
}
|
||||||
while (n--) lcd.print(' ');
|
while (n--) lcd.print(' ');
|
||||||
|
|
Reference in a new issue