Fix LCD compile error, etc. (#12472)

This commit is contained in:
Ludy 2018-11-19 03:39:49 +01:00 committed by Scott Lahteine
parent 826d570162
commit 1f93d2bcf7
13 changed files with 202 additions and 191 deletions

View file

@ -26,8 +26,6 @@
* Conditionals that need to be set before Configuration_adv.h or pins.h * Conditionals that need to be set before Configuration_adv.h or pins.h
*/ */
#define LCD_HAS_DIRECTIONAL_BUTTONS (BUTTON_EXISTS(UP) || BUTTON_EXISTS(DWN) || BUTTON_EXISTS(LFT) || BUTTON_EXISTS(RT))
#if ENABLED(CARTESIO_UI) #if ENABLED(CARTESIO_UI)
#define DOGLCD #define DOGLCD
@ -305,8 +303,11 @@
#define HAS_GRAPHICAL_LCD ENABLED(DOGLCD) #define HAS_GRAPHICAL_LCD ENABLED(DOGLCD)
#define HAS_CHARACTER_LCD (HAS_SPI_LCD && !HAS_GRAPHICAL_LCD) #define HAS_CHARACTER_LCD (HAS_SPI_LCD && !HAS_GRAPHICAL_LCD)
#define HAS_LCD_MENU (ENABLED(ULTIPANEL) && DISABLED(NO_LCD_MENUS)) #define HAS_LCD_MENU (ENABLED(ULTIPANEL) && DISABLED(NO_LCD_MENUS))
#define HAS_DIGITAL_BUTTONS ENABLED(NEWPANEL)
#define HAS_ENCODER_WHEEL (ENABLED(NEWPANEL) && DISABLED(ADC_KEYPAD)) #define HAS_ADC_BUTTONS ENABLED(ADC_KEYPAD)
#define HAS_DIGITAL_BUTTONS (!HAS_ADC_BUTTONS && ENABLED(NEWPANEL))
#define HAS_SHIFT_ENCODER (!HAS_ADC_BUTTONS && (ENABLED(REPRAPWORLD_KEYPAD) || (HAS_SPI_LCD && DISABLED(NEWPANEL))))
#define HAS_ENCODER_WHEEL (!HAS_ADC_BUTTONS && ENABLED(NEWPANEL))
#if HAS_GRAPHICAL_LCD #if HAS_GRAPHICAL_LCD
/** /**

View file

@ -28,7 +28,6 @@
#define LCD_CLASS LiquidCrystal #define LCD_CLASS LiquidCrystal
#endif #endif
extern LCD_CLASS lcd; extern LCD_CLASS lcd;
LCD_CLASS *plcd = &lcd;
int lcd_glyph_height(void) { return 1; } int lcd_glyph_height(void) { return 1; }
@ -868,11 +867,7 @@ static const hd44780_charmap_t g_hd44780_charmap_common[] PROGMEM = {
/* return v1 - v2 */ /* return v1 - v2 */
static int hd44780_charmap_compare(hd44780_charmap_t * v1, hd44780_charmap_t * v2) { static int hd44780_charmap_compare(hd44780_charmap_t * v1, hd44780_charmap_t * v2) {
if (v1->uchar < v2->uchar) return (v1->uchar < v2->uchar) ? -1 : (v1->uchar > v2->uchar) ? 1 : 0;
return -1;
else if (v1->uchar > v2->uchar)
return 1;
return 0;
} }
static int pf_bsearch_cb_comp_hd4map_pgm(void *userdata, size_t idx, void * data_pin) { static int pf_bsearch_cb_comp_hd4map_pgm(void *userdata, size_t idx, void * data_pin) {
@ -882,83 +877,9 @@ static int pf_bsearch_cb_comp_hd4map_pgm(void *userdata, size_t idx, void * data
return hd44780_charmap_compare(&localval, (hd44780_charmap_t *)data_pin); return hd44780_charmap_compare(&localval, (hd44780_charmap_t *)data_pin);
} }
#if DEBUG void lcd_moveto(const uint8_t col, const uint8_t row) { lcd.setCursor(col, row); }
int test_hd44780_charmap(hd44780_charmap_t *data, size_t size, char *name, char flg_show_contents) { void lcd_put_int(const int i) { lcd.print(i); }
int ret;
size_t idx = 0;
hd44780_charmap_t preval = {0, 0, 0};
hd44780_charmap_t pinval = {0, 0, 0};
char flg_error = 0;
int i;
TRACE("Test %s\n", name);
for (i = 0; i < size; i ++) {
memcpy_P (&pinval, &(data[i]), sizeof(pinval));
if (flg_show_contents) {
#if 1
TRACE("[% 4d] % 6" PRIu32 "(0x%04" PRIX32 ") --> 0x%02X,0x%02X%s\n", i, pinval.uchar, pinval.uchar, (unsigned int)(pinval.idx), (unsigned int)(pinval.idx2), (preval.uchar < pinval.uchar?"":" <--- ERROR"));
#else
TRACE("[% 4d]", i);
TRACE("% 6" PRIu32 "(0x%04" PRIX32 "),", pinval.uchar, pinval.uchar);
TRACE("0x%02X,", (unsigned int)(pinval.idx));
TRACE("0x%02X,", (unsigned int)(pinval.idx2));
TRACE("%s", (preval.uchar < pinval.uchar?"":" <--- ERROR"));
#endif
}
if (preval.uchar >= pinval.uchar) {
flg_error = 1;
// TRACE("Error: out of order in array %s: idx=%d, val=%d(0x%x)\n", name, i, pinval.uchar, pinval.uchar);
// return -1;
}
memcpy (&preval, &pinval, sizeof(pinval));
ret = pf_bsearch_r((void *)data, size, pf_bsearch_cb_comp_hd4map_pgm, (void *)&pinval, &idx);
if (ret < 0) {
flg_error = 1;
TRACE("Error: not found item in array %s: idx=%d, val=%d(0x%x)\n", name, i, pinval.uchar, pinval.uchar);
//return -1;
}
if (idx != i) {
flg_error = 1;
TRACE("Error: wrong index found item in array %s: idx=%d, val=%d(0x%x)\n", name, i, pinval.uchar, pinval.uchar);
//return -1;
}
}
if (flg_error) {
TRACE("\nError: in array %s\n\n", name);
return -1;
}
TRACE("\nPASS array %s\n\n", name);
return 0;
}
int test_hd44780_charmap_all(void) {
int flg_error = 0;
if (test_hd44780_charmap(g_hd44780_charmap_device, NUM_ARRAY(g_hd44780_charmap_device), "g_hd44780_charmap_device", 0) < 0) {
flg_error = 1;
test_hd44780_charmap(g_hd44780_charmap_device, NUM_ARRAY(g_hd44780_charmap_device), "g_hd44780_charmap_device", 1);
}
if (test_hd44780_charmap(g_hd44780_charmap_common, NUM_ARRAY(g_hd44780_charmap_common), "g_hd44780_charmap_common", 0) < 0) {
flg_error = 1;
test_hd44780_charmap(g_hd44780_charmap_common, NUM_ARRAY(g_hd44780_charmap_common), "g_hd44780_charmap_common", 1);
}
if (flg_error) {
TRACE("\nFAILED in hd44780 tests!\n");
return -1;
}
TRACE("\nPASS in hd44780 tests.\n");
return 0;
}
#endif // DEBUG
void lcd_moveto(int col, int row) {
plcd->setCursor(col, row);
}
// return < 0 on error // return < 0 on error
// return the advanced cols // return the advanced cols
@ -976,7 +897,7 @@ int lcd_put_wchar_max(wchar_t c, pixel_len_t max_length) {
// TODO: fix the '\\' that doesnt exist in the HD44870 // TODO: fix the '\\' that doesnt exist in the HD44870
if (c < 128) { if (c < 128) {
plcd->write((uint8_t)c); lcd.write((uint8_t)c);
return 1; return 1;
} }
copy_address = NULL; copy_address = NULL;
@ -993,16 +914,16 @@ int lcd_put_wchar_max(wchar_t c, pixel_len_t max_length) {
hd44780_charmap_t localval; hd44780_charmap_t localval;
// found // found
memcpy_P(&localval, copy_address, sizeof(localval)); memcpy_P(&localval, copy_address, sizeof(localval));
plcd->write(localval.idx); lcd.write(localval.idx);
if (max_length >= 2 && localval.idx2 > 0) { if (max_length >= 2 && localval.idx2 > 0) {
plcd->write(localval.idx2); lcd.write(localval.idx2);
return 2; return 2;
} }
return 1; return 1;
} }
// Not found, print '?' instead // Not found, print '?' instead
plcd->write((uint8_t)'?'); lcd.write((uint8_t)'?');
return 1; return 1;
} }
@ -1037,4 +958,78 @@ int lcd_put_u8str_max_P(PGM_P utf8_str_P, pixel_len_t max_length) {
return lcd_put_u8str_max_cb(utf8_str_P, read_byte_rom, max_length); return lcd_put_u8str_max_cb(utf8_str_P, read_byte_rom, max_length);
} }
#if ENABLED(DEBUG_LCDPRINT)
int test_hd44780_charmap(hd44780_charmap_t *data, size_t size, char *name, char flg_show_contents) {
int ret;
size_t idx = 0;
hd44780_charmap_t preval = {0, 0, 0};
hd44780_charmap_t pinval = {0, 0, 0};
char flg_error = 0;
int i;
TRACE("Test %s\n", name);
for (i = 0; i < size; i ++) {
memcpy_P(&pinval, &(data[i]), sizeof(pinval));
if (flg_show_contents) {
#if 1
TRACE("[% 4d] % 6" PRIu32 "(0x%04" PRIX32 ") --> 0x%02X,0x%02X%s\n", i, pinval.uchar, pinval.uchar, (unsigned int)(pinval.idx), (unsigned int)(pinval.idx2), (preval.uchar < pinval.uchar?"":" <--- ERROR"));
#else
TRACE("[% 4d]", i);
TRACE("% 6" PRIu32 "(0x%04" PRIX32 "),", pinval.uchar, pinval.uchar);
TRACE("0x%02X,", (unsigned int)(pinval.idx));
TRACE("0x%02X,", (unsigned int)(pinval.idx2));
TRACE("%s", (preval.uchar < pinval.uchar?"":" <--- ERROR"));
#endif
}
if (preval.uchar >= pinval.uchar) {
flg_error = 1;
//TRACE("Error: out of order in array %s: idx=%d, val=%d(0x%x)\n", name, i, pinval.uchar, pinval.uchar);
//return -1;
}
memcpy(&preval, &pinval, sizeof(pinval));
ret = pf_bsearch_r((void *)data, size, pf_bsearch_cb_comp_hd4map_pgm, (void *)&pinval, &idx);
if (ret < 0) {
flg_error = 1;
TRACE("Error: not found item in array %s: idx=%d, val=%d(0x%x)\n", name, i, pinval.uchar, pinval.uchar);
//return -1;
}
if (idx != i) {
flg_error = 1;
TRACE("Error: wrong index found item in array %s: idx=%d, val=%d(0x%x)\n", name, i, pinval.uchar, pinval.uchar);
//return -1;
}
}
if (flg_error) {
TRACE("\nError: in array %s\n\n", name);
return -1;
}
TRACE("\nPASS array %s\n\n", name);
return 0;
}
int test_hd44780_charmap_all(void) {
int flg_error = 0;
if (test_hd44780_charmap(g_hd44780_charmap_device, NUM_ARRAY(g_hd44780_charmap_device), "g_hd44780_charmap_device", 0) < 0) {
flg_error = 1;
test_hd44780_charmap(g_hd44780_charmap_device, NUM_ARRAY(g_hd44780_charmap_device), "g_hd44780_charmap_device", 1);
}
if (test_hd44780_charmap(g_hd44780_charmap_common, NUM_ARRAY(g_hd44780_charmap_common), "g_hd44780_charmap_common", 0) < 0) {
flg_error = 1;
test_hd44780_charmap(g_hd44780_charmap_common, NUM_ARRAY(g_hd44780_charmap_common), "g_hd44780_charmap_common", 1);
}
if (flg_error) {
TRACE("\nFAILED in hd44780 tests!\n");
return -1;
}
TRACE("\nPASS in hd44780 tests.\n");
return 0;
}
#endif // DEBUG_LCDPRINT
#endif // HAS_CHARACTER_LCD #endif // HAS_CHARACTER_LCD

View file

@ -25,7 +25,7 @@
#if HAS_CHARACTER_LCD #if HAS_CHARACTER_LCD
/** /**
* ultralcd_impl_HD44780.cpp * ultralcd_HD44780.cpp
* *
* LCD display implementations for Hitachi HD44780. * LCD display implementations for Hitachi HD44780.
* These are the most common LCD character displays. * These are the most common LCD character displays.

View file

@ -23,13 +23,11 @@ extern U8GLIB *pu8g;
#include "u8g_fontutf8.h" #include "u8g_fontutf8.h"
#include "../lcdprint.h" #include "../lcdprint.h"
int lcd_glyph_height(void) { int lcd_glyph_height(void) { return u8g_GetFontBBXHeight(pu8g->getU8g()); }
return u8g_GetFontBBXHeight(pu8g->getU8g());
}
void lcd_moveto(int col, int row) { void lcd_moveto(const uint8_t col, const uint8_t row) { _lcd_setcursor(col, row); }
_lcd_setcursor(col, row);
} void lcd_put_int(const int i) { pu8g->print(i); }
// return < 0 on error // return < 0 on error
// return the advanced pixels // return the advanced pixels

View file

@ -21,7 +21,7 @@
*/ */
/** /**
* ultralcd_impl_DOGM.cpp * ultralcd_DOGM.cpp
* *
* Implementation of the LCD display routines for a DOGM128 graphic display. * Implementation of the LCD display routines for a DOGM128 graphic display.
* by STB for ErikZalm/Marlin. Common LCD 128x64 pixel graphic displays. * by STB for ErikZalm/Marlin. Common LCD 128x64 pixel graphic displays.

View file

@ -21,7 +21,7 @@
*/ */
/** /**
* ultralcd_impl_DOGM.h * ultralcd_DOGM.h
*/ */
#include "../../inc/MarlinConfigPre.h" #include "../../inc/MarlinConfigPre.h"

View file

@ -48,10 +48,12 @@ int lcd_put_u8str_max(const char * utf8_str, pixel_len_t max_length);
*/ */
int lcd_put_u8str_max_P(PGM_P utf8_str_P, pixel_len_t max_length); int lcd_put_u8str_max_P(PGM_P utf8_str_P, pixel_len_t max_length);
void lcd_moveto(int col, int row); void lcd_moveto(const uint8_t col, const uint8_t row);
void lcd_put_int(const int i);
inline int lcd_put_u8str_P(PGM_P str) { return lcd_put_u8str_max_P(str, PIXEL_LEN_NOLIMIT); } inline int lcd_put_u8str_P(PGM_P str) { return lcd_put_u8str_max_P(str, PIXEL_LEN_NOLIMIT); }
inline int lcd_put_u8str(const char* str) { return lcd_put_u8str_max(str, PIXEL_LEN_NOLIMIT); } inline int lcd_put_u8str(const char* str) { return lcd_put_u8str_max(str, PIXEL_LEN_NOLIMIT); }
inline int lcd_put_wchar(wchar_t c) { return lcd_put_wchar_max(c, PIXEL_LEN_NOLIMIT); } inline int lcd_put_wchar(const wchar_t c) { return lcd_put_wchar_max(c, PIXEL_LEN_NOLIMIT); }

View file

@ -66,7 +66,7 @@ static void lcd_factory_settings() {
ui.encoderPosition = 0; ui.encoderPosition = 0;
draw_menu_item_static(0, PSTR(MSG_PROGRESS_BAR_TEST), true, true); draw_menu_item_static(0, PSTR(MSG_PROGRESS_BAR_TEST), true, true);
lcd_moveto((LCD_WIDTH) / 2 - 2, LCD_HEIGHT - 2); lcd_moveto((LCD_WIDTH) / 2 - 2, LCD_HEIGHT - 2);
lcd_put_u8str(int(bar_percent)); lcd_put_wchar('%'); lcd_put_int(bar_percent); lcd_put_wchar('%');
lcd_moveto(0, LCD_HEIGHT - 1); ui.draw_progress_bar(bar_percent); lcd_moveto(0, LCD_HEIGHT - 1); ui.draw_progress_bar(bar_percent);
} }

View file

@ -207,12 +207,6 @@ void MarlinUI::init() {
SET_INPUT_PULLUP(BTN_ENC); SET_INPUT_PULLUP(BTN_ENC);
#endif #endif
#if ENABLED(REPRAPWORLD_KEYPAD) && DISABLED(ADC_KEYPAD)
SET_OUTPUT(SHIFT_CLK);
OUT_WRITE(SHIFT_LD, HIGH);
SET_INPUT_PULLUP(SHIFT_OUT);
#endif
#if BUTTON_EXISTS(UP) #if BUTTON_EXISTS(UP)
SET_INPUT(BTN_UP); SET_INPUT(BTN_UP);
#endif #endif
@ -226,19 +220,27 @@ void MarlinUI::init() {
SET_INPUT(BTN_RT); SET_INPUT(BTN_RT);
#endif #endif
#else // !HAS_DIGITAL_BUTTONS #endif // !HAS_DIGITAL_BUTTONS
#if HAS_SHIFT_ENCODER
#if ENABLED(SR_LCD_2W_NL) // Non latching 2 wire shift register #if ENABLED(SR_LCD_2W_NL) // Non latching 2 wire shift register
SET_OUTPUT(SR_DATA_PIN); SET_OUTPUT(SR_DATA_PIN);
SET_OUTPUT(SR_CLK_PIN); SET_OUTPUT(SR_CLK_PIN);
#elif defined(SHIFT_CLK) #elif defined(SHIFT_CLK)
SET_OUTPUT(SHIFT_CLK); SET_OUTPUT(SHIFT_CLK);
OUT_WRITE(SHIFT_LD, HIGH); OUT_WRITE(SHIFT_LD, HIGH);
OUT_WRITE(SHIFT_EN, LOW); #if defined(SHIFT_EN) && SHIFT_EN >= 0
OUT_WRITE(SHIFT_EN, LOW);
#endif
SET_INPUT_PULLUP(SHIFT_OUT); SET_INPUT_PULLUP(SHIFT_OUT);
#endif // SR_LCD_2W_NL
#endif // !HAS_DIGITAL_BUTTONS #endif
#endif // HAS_SHIFT_ENCODER
#if ENABLED(SDSUPPORT) && PIN_EXISTS(SD_DETECT) #if ENABLED(SDSUPPORT) && PIN_EXISTS(SD_DETECT)
SET_INPUT_PULLUP(SD_DETECT_PIN); SET_INPUT_PULLUP(SD_DETECT_PIN);
@ -273,9 +275,9 @@ bool MarlinUI::get_blink() {
#if ENABLED(REPRAPWORLD_KEYPAD) && HAS_ENCODER_ACTION #if ENABLED(REPRAPWORLD_KEYPAD) && HAS_ENCODER_ACTION
volatile uint8_t MarlinUI::buttons_reprapworld_keypad; volatile uint8_t MarlinUI::keypad_buttons;
#if DISABLED(ADC_KEYPAD) && HAS_LCD_MENU #if HAS_LCD_MENU && !HAS_ADC_BUTTONS
void lcd_move_x(); void lcd_move_x();
void lcd_move_y(); void lcd_move_y();
@ -296,10 +298,10 @@ bool MarlinUI::get_blink() {
bool MarlinUI::handle_keypad() { bool MarlinUI::handle_keypad() {
#if ENABLED(ADC_KEYPAD) #if HAS_ADC_BUTTONS
#define ADC_MIN_KEY_DELAY 100 #define ADC_MIN_KEY_DELAY 100
if (buttons_reprapworld_keypad) { if (keypad_buttons) {
#if HAS_ENCODER_ACTION #if HAS_ENCODER_ACTION
refresh(LCDVIEW_REDRAW_NOW); refresh(LCDVIEW_REDRAW_NOW);
if (encoderDirection == -1) { // side effect which signals we are inside a menu if (encoderDirection == -1) { // side effect which signals we are inside a menu
@ -310,15 +312,16 @@ bool MarlinUI::get_blink() {
else if (RRK(EN_REPRAPWORLD_KEYPAD_RIGHT)) { return_to_status(); quick_feedback(); } else if (RRK(EN_REPRAPWORLD_KEYPAD_RIGHT)) { return_to_status(); quick_feedback(); }
#endif #endif
} }
else if (RRK(EN_REPRAPWORLD_KEYPAD_DOWN)) encoderPosition += ENCODER_PULSES_PER_STEP; else if (RRK(EN_REPRAPWORLD_KEYPAD_DOWN)) encoderPosition -= ENCODER_PULSES_PER_STEP;
else if (RRK(EN_REPRAPWORLD_KEYPAD_UP)) encoderPosition -= ENCODER_PULSES_PER_STEP; else if (RRK(EN_REPRAPWORLD_KEYPAD_UP)) encoderPosition += ENCODER_PULSES_PER_STEP;
else if (RRK(EN_REPRAPWORLD_KEYPAD_LEFT)) { MenuItem_back::action(); quick_feedback(); }
else if (RRK(EN_REPRAPWORLD_KEYPAD_RIGHT)) encoderPosition = 0; else if (RRK(EN_REPRAPWORLD_KEYPAD_RIGHT)) encoderPosition = 0;
#endif #endif
next_button_update_ms = millis() + ADC_MIN_KEY_DELAY; next_button_update_ms = millis() + ADC_MIN_KEY_DELAY;
return true; return true;
} }
#else // !ADC_KEYPAD #else // !HAS_ADC_BUTTONS
static uint8_t keypad_debounce = 0; static uint8_t keypad_debounce = 0;
@ -408,7 +411,9 @@ void MarlinUI::status_screen() {
// share the same line on the display. // share the same line on the display.
// //
millis_t ms = millis(); #if DISABLED(PROGRESS_MSG_ONCE) || (PROGRESS_MSG_EXPIRE > 0)
millis_t ms = millis();
#endif
// If the message will blink rather than expire... // If the message will blink rather than expire...
#if DISABLED(PROGRESS_MSG_ONCE) #if DISABLED(PROGRESS_MSG_ONCE)
@ -818,8 +823,8 @@ void MarlinUI::update() {
break; break;
} // switch } // switch
#if ENABLED(ADC_KEYPAD) #if HAS_ADC_BUTTONS
buttons_reprapworld_keypad = 0; keypad_buttons = 0;
#endif #endif
#if HAS_GRAPHICAL_LCD #if HAS_GRAPHICAL_LCD
@ -890,7 +895,7 @@ void MarlinUI::update() {
} // ELAPSED(ms, next_lcd_update_ms) } // ELAPSED(ms, next_lcd_update_ms)
} }
#if ENABLED(ADC_KEYPAD) #if HAS_ADC_BUTTONS
typedef struct { typedef struct {
uint16_t ADCKeyValueMin, ADCKeyValueMax; uint16_t ADCKeyValueMin, ADCKeyValueMax;
@ -953,30 +958,38 @@ void MarlinUI::update() {
* Warning: This function is called from interrupt context! * Warning: This function is called from interrupt context!
*/ */
void MarlinUI::update_buttons() { void MarlinUI::update_buttons() {
static uint8_t lastEncoderBits;
const millis_t now = millis(); const millis_t now = millis();
if (ELAPSED(now, next_button_update_ms)) { if (ELAPSED(now, next_button_update_ms)) {
#if HAS_DIGITAL_BUTTONS #if HAS_DIGITAL_BUTTONS
uint8_t newbutton = 0;
#if BUTTON_EXISTS(EN1) #if BUTTON_EXISTS(EN1) || BUTTON_EXISTS(EN2) || BUTTON_EXISTS(ENC) || BUTTON_EXISTS(BACK)
if (BUTTON_PRESSED(EN1)) newbutton |= EN_A;
#endif uint8_t newbutton = 0;
#if BUTTON_EXISTS(EN2)
if (BUTTON_PRESSED(EN2)) newbutton |= EN_B; #if BUTTON_EXISTS(EN1)
#endif if (BUTTON_PRESSED(EN1)) newbutton |= EN_A;
#if BUTTON_EXISTS(ENC) #endif
if (BUTTON_PRESSED(ENC)) newbutton |= EN_C; #if BUTTON_EXISTS(EN2)
#endif if (BUTTON_PRESSED(EN2)) newbutton |= EN_B;
#if BUTTON_EXISTS(BACK) #endif
if (BUTTON_PRESSED(BACK)) newbutton |= EN_D; #if BUTTON_EXISTS(ENC)
if (BUTTON_PRESSED(ENC)) newbutton |= EN_C;
#endif
#if BUTTON_EXISTS(BACK)
if (BUTTON_PRESSED(BACK)) newbutton |= EN_D;
#endif
#else
constexpr uint8_t newbutton = 0;
#endif #endif
// //
// Directional buttons // Directional buttons
// //
#if LCD_HAS_DIRECTIONAL_BUTTONS #if BUTTON_EXISTS(UP) || BUTTON_EXISTS(DWN) || BUTTON_EXISTS(LFT) || BUTTON_EXISTS(RT)
const int8_t pulses = (ENCODER_PULSES_PER_STEP) * encoderDirection; const int8_t pulses = (ENCODER_PULSES_PER_STEP) * encoderDirection;
@ -1008,40 +1021,40 @@ void MarlinUI::update() {
} }
#endif #endif
#endif // LCD_HAS_DIRECTIONAL_BUTTONS #endif // UP || DWN || LFT || RT
#if ENABLED(ADC_KEYPAD) buttons = newbutton
#if ENABLED(LCD_HAS_SLOW_BUTTONS)
buttons = 0; | slow_buttons
if (buttons_reprapworld_keypad == 0) {
uint8_t newbutton_reprapworld_keypad = get_ADC_keyValue();
if (WITHIN(newbutton_reprapworld_keypad, 1, 8))
buttons_reprapworld_keypad = _BV(newbutton_reprapworld_keypad - 1);
}
#else
buttons = newbutton
#if ENABLED(LCD_HAS_SLOW_BUTTONS)
| slow_buttons
#endif
;
#if ENABLED(REPRAPWORLD_KEYPAD)
GET_SHIFT_BUTTON_STATES(buttons_reprapworld_keypad);
#endif #endif
;
#endif #elif HAS_ADC_BUTTONS
#else // !HAS_DIGITAL_BUTTONS buttons = 0;
if (keypad_buttons == 0) {
const uint8_t b = get_ADC_keyValue();
if (WITHIN(b, 1, 8)) keypad_buttons = _BV(b - 1);
}
GET_SHIFT_BUTTON_STATES(buttons); #endif
#if HAS_SHIFT_ENCODER
GET_SHIFT_BUTTON_STATES(
#if ENABLED(REPRAPWORLD_KEYPAD)
keypad_buttons
#else
buttons
#endif
);
#endif #endif
} // next_button_update_ms } // next_button_update_ms
#if HAS_ENCODER_WHEEL #if HAS_ENCODER_WHEEL
static uint8_t lastEncoderBits;
#define encrot0 0 #define encrot0 0
#define encrot1 2 #define encrot1 2

View file

@ -46,7 +46,7 @@
LCDVIEW_CALL_NO_REDRAW LCDVIEW_CALL_NO_REDRAW
}; };
#if ENABLED(ADC_KEYPAD) #if HAS_ADC_BUTTONS
uint8_t get_ADC_keyValue(); uint8_t get_ADC_keyValue();
#endif #endif
@ -88,6 +88,30 @@
#endif #endif
#if ENABLED(REPRAPWORLD_KEYPAD)
#define REPRAPWORLD_BTN_OFFSET 0 // Bit offset into buttons for shift register values
#define BLEN_REPRAPWORLD_KEYPAD_F3 0
#define BLEN_REPRAPWORLD_KEYPAD_F2 1
#define BLEN_REPRAPWORLD_KEYPAD_F1 2
#define BLEN_REPRAPWORLD_KEYPAD_DOWN 3
#define BLEN_REPRAPWORLD_KEYPAD_RIGHT 4
#define BLEN_REPRAPWORLD_KEYPAD_MIDDLE 5
#define BLEN_REPRAPWORLD_KEYPAD_UP 6
#define BLEN_REPRAPWORLD_KEYPAD_LEFT 7
#define EN_REPRAPWORLD_KEYPAD_F1 (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_F1))
#define EN_REPRAPWORLD_KEYPAD_F2 (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_F2))
#define EN_REPRAPWORLD_KEYPAD_F3 (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_F3))
#define EN_REPRAPWORLD_KEYPAD_DOWN (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_DOWN))
#define EN_REPRAPWORLD_KEYPAD_RIGHT (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_RIGHT))
#define EN_REPRAPWORLD_KEYPAD_MIDDLE (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_MIDDLE))
#define EN_REPRAPWORLD_KEYPAD_UP (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_UP))
#define EN_REPRAPWORLD_KEYPAD_LEFT (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_LEFT))
#define RRK(B) (keypad_buttons & (B))
#endif
#if HAS_DIGITAL_BUTTONS #if HAS_DIGITAL_BUTTONS
// Wheel spin pins where BA is 00, 10, 11, 01 (1 bit always changes) // Wheel spin pins where BA is 00, 10, 11, 01 (1 bit always changes)
@ -112,27 +136,6 @@
#endif #endif
#if ENABLED(REPRAPWORLD_KEYPAD) #if ENABLED(REPRAPWORLD_KEYPAD)
#define REPRAPWORLD_BTN_OFFSET 0 // Bit offset into buttons for shift register values
#define BLEN_REPRAPWORLD_KEYPAD_F3 0
#define BLEN_REPRAPWORLD_KEYPAD_F2 1
#define BLEN_REPRAPWORLD_KEYPAD_F1 2
#define BLEN_REPRAPWORLD_KEYPAD_DOWN 3
#define BLEN_REPRAPWORLD_KEYPAD_RIGHT 4
#define BLEN_REPRAPWORLD_KEYPAD_MIDDLE 5
#define BLEN_REPRAPWORLD_KEYPAD_UP 6
#define BLEN_REPRAPWORLD_KEYPAD_LEFT 7
#define EN_REPRAPWORLD_KEYPAD_F1 (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_F1))
#define EN_REPRAPWORLD_KEYPAD_F2 (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_F2))
#define EN_REPRAPWORLD_KEYPAD_F3 (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_F3))
#define EN_REPRAPWORLD_KEYPAD_DOWN (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_DOWN))
#define EN_REPRAPWORLD_KEYPAD_RIGHT (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_RIGHT))
#define EN_REPRAPWORLD_KEYPAD_MIDDLE (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_MIDDLE))
#define EN_REPRAPWORLD_KEYPAD_UP (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_UP))
#define EN_REPRAPWORLD_KEYPAD_LEFT (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_LEFT))
#define RRK(B) (buttons_reprapworld_keypad & (B))
#ifdef EN_C #ifdef EN_C
#define BUTTON_CLICK() ((buttons & EN_C) || RRK(EN_REPRAPWORLD_KEYPAD_MIDDLE)) #define BUTTON_CLICK() ((buttons & EN_C) || RRK(EN_REPRAPWORLD_KEYPAD_MIDDLE))
@ -180,6 +183,8 @@
#else #else
#define BUTTON_EXISTS(BN) 0
// Shift register bits correspond to buttons: // Shift register bits correspond to buttons:
#define BL_LE 7 // Left #define BL_LE 7 // Left
#define BL_UP 6 // Up #define BL_UP 6 // Up
@ -463,7 +468,7 @@ public:
static volatile uint8_t buttons; static volatile uint8_t buttons;
#if ENABLED(REPRAPWORLD_KEYPAD) #if ENABLED(REPRAPWORLD_KEYPAD)
static volatile uint8_t buttons_reprapworld_keypad; static volatile uint8_t keypad_buttons;
static bool handle_keypad(); static bool handle_keypad();
#endif #endif
#if ENABLED(LCD_HAS_SLOW_BUTTONS) #if ENABLED(LCD_HAS_SLOW_BUTTONS)

View file

@ -217,7 +217,7 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS];
bool Temperature::heater_idle_timeout_exceeded[HOTENDS] = { false }; bool Temperature::heater_idle_timeout_exceeded[HOTENDS] = { false };
#endif #endif
#if ENABLED(ADC_KEYPAD) #if HAS_ADC_BUTTONS
uint32_t Temperature::current_ADCKey_raw = 0; uint32_t Temperature::current_ADCKey_raw = 0;
uint8_t Temperature::ADCKey_count = 0; uint8_t Temperature::ADCKey_count = 0;
#endif #endif
@ -1869,7 +1869,7 @@ void Temperature::isr() {
// avoid multiple loads of pwm_count // avoid multiple loads of pwm_count
uint8_t pwm_count_tmp = pwm_count; uint8_t pwm_count_tmp = pwm_count;
#if ENABLED(ADC_KEYPAD) #if HAS_ADC_BUTTONS
static unsigned int raw_ADCKey_value = 0; static unsigned int raw_ADCKey_value = 0;
#endif #endif
@ -2290,7 +2290,7 @@ void Temperature::isr() {
break; break;
#endif #endif
#if ENABLED(ADC_KEYPAD) #if HAS_ADC_BUTTONS
case Prepare_ADC_KEY: case Prepare_ADC_KEY:
HAL_START_ADC(ADC_KEYPAD_PIN); HAL_START_ADC(ADC_KEYPAD_PIN);
break; break;

View file

@ -112,7 +112,7 @@ enum ADCSensorState : char {
Prepare_FILWIDTH, Prepare_FILWIDTH,
Measure_FILWIDTH, Measure_FILWIDTH,
#endif #endif
#if ENABLED(ADC_KEYPAD) #if HAS_ADC_BUTTONS
Prepare_ADC_KEY, Prepare_ADC_KEY,
Measure_ADC_KEY, Measure_ADC_KEY,
#endif #endif
@ -291,7 +291,7 @@ class Temperature {
#endif #endif
public: public:
#if ENABLED(ADC_KEYPAD) #if HAS_ADC_BUTTONS
static uint32_t current_ADCKey_raw; static uint32_t current_ADCKey_raw;
static uint8_t ADCKey_count; static uint8_t ADCKey_count;
#endif #endif

View file

@ -161,9 +161,6 @@
#define LCD_PINS_D5 11 #define LCD_PINS_D5 11
#define LCD_PINS_D6 16 #define LCD_PINS_D6 16
#define LCD_PINS_D7 17 #define LCD_PINS_D7 17
#define BTN_EN1 -1
#define BTN_EN2 -1
#define BTN_ENC -1
#define ADC_KEYPAD_PIN 1 #define ADC_KEYPAD_PIN 1
#elif ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER) || ENABLED(ANET_FULL_GRAPHICS_LCD) #elif ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER) || ENABLED(ANET_FULL_GRAPHICS_LCD)
// Pin definitions for the Anet A6 Full Graphics display and the RepRapDiscount Full Graphics // Pin definitions for the Anet A6 Full Graphics display and the RepRapDiscount Full Graphics