Browse Source

Merge pull request #6897 from thinkyhead/bf_fix_lcd_scrolling

Fix LCD scrolling character counting
pull/1/head
Scott Lahteine 8 years ago
committed by GitHub
parent
commit
d33ae33103
  1. 1
      Marlin/macros.h
  2. 6
      Marlin/ultralcd.cpp
  3. 2
      Marlin/ultralcd_impl_DOGM.h
  4. 18
      Marlin/ultralcd_impl_HD44780.h

1
Marlin/macros.h

@ -127,6 +127,7 @@
#define DECIMAL(a) (NUMERIC(a) || a == '.') #define DECIMAL(a) (NUMERIC(a) || a == '.')
#define NUMERIC_SIGNED(a) (NUMERIC(a) || (a) == '-' || (a) == '+') #define NUMERIC_SIGNED(a) (NUMERIC(a) || (a) == '-' || (a) == '+')
#define DECIMAL_SIGNED(a) (DECIMAL(a) || (a) == '-' || (a) == '+') #define DECIMAL_SIGNED(a) (DECIMAL(a) || (a) == '-' || (a) == '+')
#define PRINTABLE(C) (((C) & 0xC0u) != 0x80u)
#define COUNT(a) (sizeof(a)/sizeof(*a)) #define COUNT(a) (sizeof(a)/sizeof(*a))
#define ZERO(a) memset(a,0,sizeof(a)) #define ZERO(a) memset(a,0,sizeof(a))
#define COPY(a,b) memcpy(a,b,min(sizeof(a),sizeof(b))) #define COPY(a,b) memcpy(a,b,min(sizeof(a),sizeof(b)))

6
Marlin/ultralcd.cpp

@ -3814,7 +3814,7 @@ int lcd_strlen(const char* s) {
#if ENABLED(MAPPER_NON) #if ENABLED(MAPPER_NON)
j++; j++;
#else #else
if ((s[i] & 0xC0u) != 0x80u) j++; if (PRINTABLE(s[i])) j++;
#endif #endif
i++; i++;
} }
@ -3827,7 +3827,7 @@ int lcd_strlen_P(const char* s) {
#if ENABLED(MAPPER_NON) #if ENABLED(MAPPER_NON)
j++; j++;
#else #else
if ((pgm_read_byte(s) & 0xC0u) != 0x80u) j++; if (PRINTABLE(pgm_read_byte(s))) j++;
#endif #endif
s++; s++;
} }
@ -4096,7 +4096,7 @@ void lcd_update() {
#if ENABLED(MAPPER_NON) #if ENABLED(MAPPER_NON)
j++; j++;
#else #else
if ((s[i] & 0xC0u) != 0x80u) j++; if (PRINTABLE(s[i])) j++;
#endif #endif
i++; i++;
} }

2
Marlin/ultralcd_impl_DOGM.h

@ -412,7 +412,7 @@ inline void lcd_implementation_status_message() {
const uint8_t slen = lcd_strlen(lcd_status_message); const uint8_t slen = lcd_strlen(lcd_status_message);
if (slen > LCD_WIDTH) { if (slen > LCD_WIDTH) {
// Skip any non-printing bytes // Skip any non-printing bytes
while (!charset_mapper(lcd_status_message[status_scroll_pos])) ++status_scroll_pos; while (!PRINTABLE(lcd_status_message[status_scroll_pos])) ++status_scroll_pos;
if (++status_scroll_pos > slen - LCD_WIDTH) status_scroll_pos = 0; if (++status_scroll_pos > slen - LCD_WIDTH) status_scroll_pos = 0;
} }
#else #else

18
Marlin/ultralcd_impl_HD44780.h

@ -582,8 +582,8 @@ FORCE_INLINE void _draw_axis_label(const AxisEnum axis, const char* const pstr,
FORCE_INLINE void _draw_heater_status(const int8_t heater, const char prefix, const bool blink) { FORCE_INLINE void _draw_heater_status(const int8_t heater, const char prefix, const bool blink) {
const bool isBed = heater < 0; const bool isBed = heater < 0;
const float t1 = (isBed ? thermalManager.degBed() : thermalManager.degHotend(heater)); const float t1 = (isBed ? thermalManager.degBed() : thermalManager.degHotend(heater)),
const float t2 = (isBed ? thermalManager.degTargetBed() : thermalManager.degTargetHotend(heater)); t2 = (isBed ? thermalManager.degTargetBed() : thermalManager.degTargetHotend(heater));
if (prefix >= 0) lcd.print(prefix); if (prefix >= 0) lcd.print(prefix);
@ -592,11 +592,11 @@ FORCE_INLINE void _draw_heater_status(const int8_t heater, const char prefix, co
#if ENABLED(ADVANCED_PAUSE_FEATURE) #if ENABLED(ADVANCED_PAUSE_FEATURE)
const bool is_idle = (!isBed ? thermalManager.is_heater_idle(heater) : const bool is_idle = (!isBed ? thermalManager.is_heater_idle(heater) :
#if HAS_TEMP_BED #if HAS_TEMP_BED
thermalManager.is_bed_idle() thermalManager.is_bed_idle()
#else #else
false false
#endif #endif
); );
if (!blink && is_idle) { if (!blink && is_idle) {
@ -606,7 +606,7 @@ FORCE_INLINE void _draw_heater_status(const int8_t heater, const char prefix, co
} }
else else
#endif #endif
lcd.print(itostr3left(t2 + 0.5)); lcd.print(itostr3left(t2 + 0.5));
if (prefix >= 0) { if (prefix >= 0) {
lcd_printPGM(PSTR(LCD_STR_DEGREE " ")); lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
@ -831,7 +831,7 @@ static void lcd_implementation_status_screen() {
const uint8_t slen = lcd_strlen(lcd_status_message); const uint8_t slen = lcd_strlen(lcd_status_message);
if (slen > LCD_WIDTH) { if (slen > LCD_WIDTH) {
// Skip any non-printing bytes // Skip any non-printing bytes
while (!charset_mapper(lcd_status_message[status_scroll_pos])) ++status_scroll_pos; while (!PRINTABLE(lcd_status_message[status_scroll_pos])) ++status_scroll_pos;
if (++status_scroll_pos > slen - LCD_WIDTH) status_scroll_pos = 0; if (++status_scroll_pos > slen - LCD_WIDTH) status_scroll_pos = 0;
} }
#else #else

Loading…
Cancel
Save