Mister-Green/Repetier-Firmware 1.0.3/Repetier/DisplayList.h
2019-08-07 01:22:58 +02:00

1875 lines
57 KiB
C

/*
This file is part of Repetier-Firmware.
Repetier-Firmware is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Repetier-Firmware is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Repetier-Firmware. If not, see <http://www.gnu.org/licenses/>.
This firmware is a nearly complete rewrite of the sprinter firmware
by kliment (https://github.com/kliment/Sprinter)
which based on Tonokip RepRap firmware rewrite based off of Hydra-mmm firmware.
*/
#ifndef RF_DISPLAY
#define RF_DISPLAY
#if FEATURE_CONTROLLER == UICONFIG_CONTROLLER
#include "uiconfig.h"
#endif
// No controller at all
#if FEATURE_CONTROLLER == NO_CONTROLLER
#define UI_HAS_KEYS 0
#define UI_DISPLAY_TYPE NO_DISPLAY
#ifdef UI_MAIN
void uiInitKeys() {}
void uiCheckKeys(uint16_t &action) {}
inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {}
#endif // UI_MAIN
#endif // NO_CONTROLLER
#if (FEATURE_CONTROLLER == CONTROLLER_SMARTRAMPS) || (FEATURE_CONTROLLER == CONTROLLER_GADGETS3D_SHIELD) || (FEATURE_CONTROLLER == CONTROLLER_REPRAPDISCOUNT_GLCD) || (FEATURE_CONTROLLER == CONTROLLER_BAM_DICE_DUE) || (FEATURE_CONTROLLER == CONTROLLER_REPRAPWORLD_GLCD)
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 0
#if FEATURE_CONTROLLER == CONTROLLER_REPRAPDISCOUNT_GLCD || (FEATURE_CONTROLLER == CONTROLLER_REPRAPWORLD_GLCD)
#define UI_DISPLAY_TYPE DISPLAY_U8G
#define U8GLIB_ST7920
#define UI_LCD_WIDTH 128
#define UI_LCD_HEIGHT 64
//select font size
#define UI_FONT_6X10 //default font
#ifdef UI_FONT_6X10
#define UI_FONT_WIDTH 6
#define UI_FONT_HEIGHT 10
#define UI_FONT_SMALL_HEIGHT 7
#define UI_FONT_DEFAULT repetier_6x10
#define UI_FONT_SMALL repetier_5x7
#define UI_FONT_SMALL_WIDTH 5 //smaller font for status display
#endif
//calculate rows and cols available with current font
#define UI_COLS (UI_LCD_WIDTH/UI_FONT_SMALL_WIDTH)
#define UI_ROWS (UI_LCD_HEIGHT/UI_FONT_HEIGHT)
#define UI_DISPLAY_CHARSET 3
#else // 40x4 char display
#define UI_DISPLAY_TYPE DISPLAY_4BIT
#define UI_DISPLAY_CHARSET 1
#define UI_COLS 20
#define UI_ROWS 4
#endif
#define BEEPER_TYPE 1
#if FEATURE_CONTROLLER == CONTROLLER_GADGETS3D_SHIELD // Gadgets3d shield
#undef BEEPER_PIN
#define BEEPER_PIN 33
#define UI_DISPLAY_RS_PIN 16
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 17
#define UI_DISPLAY_D0_PIN 23
#define UI_DISPLAY_D1_PIN 25
#define UI_DISPLAY_D2_PIN 27
#define UI_DISPLAY_D3_PIN 29
#define UI_DISPLAY_D4_PIN 23
#define UI_DISPLAY_D5_PIN 25
#define UI_DISPLAY_D6_PIN 27
#define UI_DISPLAY_D7_PIN 29
#define UI_ENCODER_A 35
#define UI_ENCODER_B 37
#define UI_ENCODER_CLICK 31
#define UI_RESET_PIN 41
#else // Smartcontroller
#if MOTHERBOARD == 701 // Megatronics v2.0
#define UI_DISPLAY_RS_PIN 14
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 15
#define UI_DISPLAY_D0_PIN -1
#define UI_DISPLAY_D1_PIN -1
#define UI_DISPLAY_D2_PIN -1
#define UI_DISPLAY_D3_PIN -1
#define UI_DISPLAY_D4_PIN 30
#define UI_DISPLAY_D5_PIN 31
#define UI_DISPLAY_D6_PIN 32
#define UI_DISPLAY_D7_PIN 33
#define UI_ENCODER_A 61
#define UI_ENCODER_B 59
#define UI_ENCODER_CLICK 43
#define UI_RESET_PIN 66 // was 41 //AE3 was here and added this line 1/25/2014 (Note pin 41 is Y- endstop!)
#define UI_INVERT_MENU_DIRECTION 1
#elif MOTHERBOARD == 703 // Megatronics v3.0
#define UI_DISPLAY_RS_PIN 32
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 31
#define UI_DISPLAY_D0_PIN -1
#define UI_DISPLAY_D1_PIN -1
#define UI_DISPLAY_D2_PIN -1
#define UI_DISPLAY_D3_PIN -1
#define UI_DISPLAY_D4_PIN 14
#define UI_DISPLAY_D5_PIN 30
#define UI_DISPLAY_D6_PIN 39
#define UI_DISPLAY_D7_PIN 15
#define UI_ENCODER_A 45
#define UI_ENCODER_B 44
#define UI_ENCODER_CLICK 33
#define UI_INVERT_MENU_DIRECTION 1
#define UI_RESET_PIN -1
#elif MOTHERBOARD == 80 // Rumba has different pins as RAMPS!
#undef BEEPER_PIN
#define BEEPER_PIN 44
#define UI_DISPLAY_RS_PIN 19
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 42
#define UI_DISPLAY_D0_PIN -1
#define UI_DISPLAY_D1_PIN -1
#define UI_DISPLAY_D2_PIN -1
#define UI_DISPLAY_D3_PIN -1
#define UI_DISPLAY_D4_PIN 18
#define UI_DISPLAY_D5_PIN 38
#define UI_DISPLAY_D6_PIN 41
#define UI_DISPLAY_D7_PIN 40
#define UI_ENCODER_A 12
#define UI_ENCODER_B 11
#define UI_ENCODER_CLICK 43
#define UI_RESET_PIN 46
#elif MOTHERBOARD == 37 // UltiMaker 1.5.7
#undef BEEPER_PIN
#define BEEPER_PIN 18
#define UI_DISPLAY_RS_PIN 20
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 17
#define UI_DISPLAY_D0_PIN -1
#define UI_DISPLAY_D1_PIN -1
#define UI_DISPLAY_D2_PIN -1
#define UI_DISPLAY_D3_PIN -1
#define UI_DISPLAY_D4_PIN 16
#define UI_DISPLAY_D5_PIN 21
#define UI_DISPLAY_D6_PIN 5
#define UI_DISPLAY_D7_PIN 6
#define UI_ENCODER_A 42
#define UI_ENCODER_B 40
#define UI_ENCODER_CLICK 19
#define UI_RESET_PIN -1
#elif MOTHERBOARD == 301 // Rambo has own pins layout
#undef BEEPER_PIN
#define BEEPER_PIN 79
#define UI_DISPLAY_RS_PIN 70
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 71
#define UI_DISPLAY_D0_PIN -1
#define UI_DISPLAY_D1_PIN -1
#define UI_DISPLAY_D2_PIN -1
#define UI_DISPLAY_D3_PIN -1
#define UI_DISPLAY_D4_PIN 72
#define UI_DISPLAY_D5_PIN 73
#define UI_DISPLAY_D6_PIN 74
#define UI_DISPLAY_D7_PIN 75
#define UI_ENCODER_A 76
#define UI_ENCODER_B 77
#define UI_ENCODER_CLICK 78
#define UI_RESET_PIN 80
#undef SDCARDDETECT
#define SDCARDDETECT 81
#undef SDCARDDETECTINVERTED
#define SDCARDDETECTINVERTED 0
#undef SDSUPPORT
#define SDSUPPORT 1
#elif MOTHERBOARD == 501 // Alligator has own pins layout
#undef BEEPER_PIN
#define BEEPER_PIN 64
#define UI_DISPLAY_RS_PIN 18
#define UI_DISPLAY_ENABLE_PIN 15
#define UI_DISPLAY_D4_PIN 19
#define UI_ENCODER_A 14
#define UI_ENCODER_B 16
#define UI_ENCODER_CLICK 17
#define UI_RESET_PIN -1
#undef SDCARDDETECT
#define SDCARDDETECT 87
#undef SDCARDDETECTINVERTED
#define SDCARDDETECTINVERTED 0
#ifndef UI_VOLTAGE_LEVEL
#define UI_VOLTAGE_LEVEL 1 // Set 1=5 o 0=3.3 V
#endif
#elif ((MOTHERBOARD == 410) || (MOTHERBOARD == 411)) // DUE3DOM / DUE3DOM MINI has own pins layout
#undef BEEPER_PIN
#define BEEPER_PIN 41
#define UI_DISPLAY_RS_PIN 42
#define UI_DISPLAY_ENABLE_PIN 43
#define UI_DISPLAY_D4_PIN 44
#define UI_DISPLAY_D5_PIN 45
#define UI_DISPLAY_D6_PIN 46
#define UI_DISPLAY_D7_PIN 47
#define UI_ENCODER_A 52
#define UI_ENCODER_B 50
#define UI_ENCODER_CLICK 48
#define UI_RESET_PIN -1
#undef SDCARDDETECT
#define SDCARDDETECT 14
#undef SDCARDDETECTINVERTED
#define SDCARDDETECTINVERTED 0
#ifndef UI_VOLTAGE_LEVEL
#define UI_VOLTAGE_LEVEL 1 // Set 1=5 o 0=3.3 V
#endif
#elif MOTHERBOARD == 405 // Felix Pro 1
#undef BEEPER_PIN
#define BEEPER_PIN -1
#define UI_DISPLAY_RS_PIN 42
#define UI_DISPLAY_ENABLE_PIN 44
#define UI_DISPLAY_D4_PIN 43
#define UI_ENCODER_A 52
#define UI_ENCODER_B 50
#define UI_ENCODER_CLICK 48
#define UI_RESET_PIN -1
#elif MOTHERBOARD == 101 // Felix Pro 1
#undef BEEPER_PIN
#define BEEPER_PIN -1
#define UI_DISPLAY_RS_PIN 16
#define UI_DISPLAY_ENABLE_PIN 17
#define UI_DISPLAY_D4_PIN 23
#define UI_ENCODER_A 35
#define UI_ENCODER_B 37
#define UI_ENCODER_CLICK 31
#define UI_RESET_PIN -1
#elif ( MOTHERBOARD == 183 ) || ( MOTHERBOARD == 184 ) // MJRice Pica
#undef BEEPER_PIN
#define BEEPER_PIN 19
#define UI_DISPLAY_RS_PIN 33
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 30
#define UI_DISPLAY_D0_PIN -1
#define UI_DISPLAY_D1_PIN -1
#define UI_DISPLAY_D2_PIN -1
#define UI_DISPLAY_D3_PIN -1
#define UI_DISPLAY_D4_PIN 35
#define UI_DISPLAY_D5_PIN 32
#define UI_DISPLAY_D6_PIN 37
#define UI_DISPLAY_D7_PIN 36
#define UI_ENCODER_A 47
#define UI_ENCODER_B 48
#define UI_ENCODER_CLICK 31
#define UI_RESET_PIN -1
#define SDCARDDETECT 49
#elif ((MOTHERBOARD == 409)) // Ultratronics
#undef BEEPER_PIN
#define BEEPER_PIN 27
#define UI_DISPLAY_RS_PIN 62
#define UI_DISPLAY_ENABLE_PIN 75
#define UI_DISPLAY_D4_PIN 76
#define UI_DISPLAY_D5_PIN -1
#define UI_DISPLAY_D6_PIN -1
#define UI_DISPLAY_D7_PIN -1
#define UI_ENCODER_A 20
#define UI_ENCODER_B 21
#define UI_ENCODER_CLICK 64
#define UI_RESET_PIN -1
#undef SDCARDDETECT
#define SDCARDDETECT 60
#undef SDCARDDETECTINVERTED
#define SDCARDDETECTINVERTED 0
#elif MOTHERBOARD == 414 // RURAMPS4D
#undef BEEPER_PIN
#define BEEPER_PIN 62
#define UI_DISPLAY_RS_PIN 63
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 64
#define UI_DISPLAY_D0_PIN -1
#define UI_DISPLAY_D1_PIN -1
#define UI_DISPLAY_D2_PIN -1
#define UI_DISPLAY_D3_PIN -1
#define UI_DISPLAY_D4_PIN 48
#define UI_DISPLAY_D5_PIN 50
#define UI_DISPLAY_D6_PIN 52
#define UI_DISPLAY_D7_PIN 53
#define UI_ENCODER_A 42
#define UI_ENCODER_B 44
#define UI_ENCODER_CLICK 40
#define UI_RESET_PIN -1
#define UI_INVERT_MENU_DIRECTION 1
#else // RAMPS
#undef BEEPER_PIN
#define BEEPER_PIN 37
#define UI_DISPLAY_RS_PIN 16
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 17
#define UI_DISPLAY_D0_PIN 23
#define UI_DISPLAY_D1_PIN 25
#define UI_DISPLAY_D2_PIN 27
#define UI_DISPLAY_D3_PIN 29
#define UI_DISPLAY_D4_PIN 23
#define UI_DISPLAY_D5_PIN 25
#define UI_DISPLAY_D6_PIN 27
#define UI_DISPLAY_D7_PIN 29
#define UI_ENCODER_A 33
#define UI_ENCODER_B 31
#define UI_ENCODER_CLICK 35
#define UI_RESET_PIN 41
#endif
#endif // smartcontroller
#if (FEATURE_CONTROLLER == CONTROLLER_REPRAPDISCOUNT_GLCD) && (MOTHERBOARD == 63) //Melzi V2 + ReprapDiscount GLCD (such as Wanhao Duplicator i3)
#define BEEPER_PIN 27
#define UI_DISPLAY_RS_PIN 17
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 16
#define UI_DISPLAY_D0_PIN -1
#define UI_DISPLAY_D1_PIN -1
#define UI_DISPLAY_D2_PIN -1
#define UI_DISPLAY_D3_PIN -1
#define UI_DISPLAY_D4_PIN 11
#define UI_DISPLAY_D5_PIN -1
#define UI_DISPLAY_D6_PIN -1
#define UI_DISPLAY_D7_PIN -1
#define UI_ENCODER_A 29
#define UI_ENCODER_B 30
#define UI_ENCODER_CLICK 28
#define UI_RESET_PIN 10
#define SDCARDDETECT -1
#endif
#define UI_DELAYPERCHAR 50
#if FEATURE_CONTROLLER == CONTROLLER_BAM_DICE_DUE
#define UI_ENCODER_SPEED 2
#endif
#ifndef UI_INVERT_MENU_DIRECTION
#define UI_INVERT_MENU_DIRECTION 0
#endif
#ifdef UI_MAIN
void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); // push button, connects gnd to pin
#if UI_RESET_PIN > -1
UI_KEYS_INIT_BUTTON_LOW(UI_RESET_PIN); // Kill pin
#endif
}
void uiCheckKeys(uint16_t &action) {
#if FEATURE_CONTROLLER == CONTROLLER_BAM_DICE_DUE
UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_B, UI_ENCODER_A); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
#else
UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
#endif
UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK, UI_ACTION_OK); // push button, connects gnd to pin
#if UI_RESET_PIN > -1
UI_KEYS_BUTTON_LOW(UI_RESET_PIN, UI_ACTION_RESET);
#endif
}
inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {}
#endif
#endif // Controller 2 and 10
#if FEATURE_CONTROLLER == CONTROLLER_ADAFRUIT
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 1
#define UI_DISPLAY_TYPE DISPLAY_I2C
#define UI_DISPLAY_CHARSET 1
#define UI_COLS 16
#define UI_ROWS 2
#define UI_DISPLAY_I2C_CHIPTYPE 1
#define UI_DISPLAY_I2C_ADDRESS 0x40
#define UI_DISPLAY_I2C_OUTPUT_PINS 65504
#define UI_DISPLAY_I2C_OUTPUT_START_MASK 0
#define UI_DISPLAY_I2C_PULLUP 31
#define UI_I2C_CLOCKSPEED 400000L
#define UI_DISPLAY_RS_PIN _BV(15)
#define UI_DISPLAY_RW_PIN _BV(14)
#define UI_DISPLAY_ENABLE_PIN _BV(13)
#define UI_DISPLAY_D0_PIN _BV(12)
#define UI_DISPLAY_D1_PIN _BV(11)
#define UI_DISPLAY_D2_PIN _BV(10)
#define UI_DISPLAY_D3_PIN _BV(9)
#define UI_DISPLAY_D4_PIN _BV(12)
#define UI_DISPLAY_D5_PIN _BV(11)
#define UI_DISPLAY_D6_PIN _BV(10)
#define UI_DISPLAY_D7_PIN _BV(9)
#define UI_INVERT_MENU_DIRECTION 1
#define UI_HAS_I2C_KEYS
#define UI_HAS_I2C_ENCODER 0
#define UI_I2C_KEY_ADDRESS 0x40
#ifdef UI_MAIN
void uiInitKeys() {}
void uiCheckKeys(uint16_t &action) {}
inline void uiCheckSlowEncoder() {
HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS + I2C_WRITE);
HAL::i2cWrite(0x12); // GIOA
HAL::i2cStop();
HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS + I2C_READ);
uint16_t keymask = HAL::i2cReadAck();
keymask = keymask + (HAL::i2cReadNak() << 8);
HAL::i2cStop();
}
void uiCheckSlowKeys(uint16_t &action) {
HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS + I2C_WRITE);
HAL::i2cWrite(0x12); // GPIOA
HAL::i2cStop();
HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS + I2C_READ);
uint16_t keymask = HAL::i2cReadAck();
keymask = keymask + (HAL::i2cReadNak() << 8);
HAL::i2cStop();
UI_KEYS_I2C_BUTTON_LOW(4, UI_ACTION_PREVIOUS); // Up button
UI_KEYS_I2C_BUTTON_LOW(8, UI_ACTION_NEXT); // down button
UI_KEYS_I2C_BUTTON_LOW(16, UI_ACTION_BACK); // left button
UI_KEYS_I2C_BUTTON_LOW(2, UI_ACTION_OK); // right button
UI_KEYS_I2C_BUTTON_LOW(1, UI_ACTION_MENU_QUICKSETTINGS); //Select button
}
#endif
#endif // Controller 3
#if FEATURE_CONTROLLER == CONTROLLER_FOLTYN
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 1
#define UI_DISPLAY_TYPE DISPLAY_4BIT
#define UI_DISPLAY_CHARSET 2
#define UI_COLS 20
#define UI_ROWS 4
// PINK.1, 88, D_RS
#define UI_DISPLAY_RS_PIN 63
#define UI_DISPLAY_RW_PIN -1
// PINK.3, 86, D_E
#define UI_DISPLAY_ENABLE_PIN 65
// PINF.5, 92, D_D4
#define UI_DISPLAY_D0_PIN 59
// PINK.2, 87, D_D5
#define UI_DISPLAY_D1_PIN 64
// PINL.5, 40, D_D6
#define UI_DISPLAY_D2_PIN 44
// PINK.4, 85, D_D7
#define UI_DISPLAY_D3_PIN 66
// PINF.5, 92, D_D4
#define UI_DISPLAY_D4_PIN 59
// PINK.2, 87, D_D5
#define UI_DISPLAY_D5_PIN 64
// PINL.5, 40, D_D6
#define UI_DISPLAY_D6_PIN 44
// PINK.4, 85, D_D7
#define UI_DISPLAY_D7_PIN 66
#define UI_DELAYPERCHAR 50
#define UI_INVERT_MENU_DIRECTION 0
#ifdef UI_MAIN
void uiInitKeys() {
UI_KEYS_INIT_BUTTON_LOW(4); // push button, connects gnd to pin
UI_KEYS_INIT_BUTTON_LOW(5);
UI_KEYS_INIT_BUTTON_LOW(6);
UI_KEYS_INIT_BUTTON_LOW(11);
UI_KEYS_INIT_BUTTON_LOW(42);
}
void uiCheckKeys(uint16_t &action) {
UI_KEYS_BUTTON_LOW(4, UI_ACTION_OK); // push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(5, UI_ACTION_NEXT); // push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(6, UI_ACTION_PREVIOUS); // push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(11, UI_ACTION_BACK); // push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(42, UI_ACTION_SD_PRINT ); // push button, connects gnd to pin
}
inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {}
#endif
#endif // Controller 4
#if FEATURE_CONTROLLER == CONTROLLER_VIKI // Viki Lcd
// You need to change these 3 button according to the positions
// where you put them into your board!
#define UI_ENCODER_A 7
#define UI_ENCODER_B 22
#define UI_RESET_PIN 32
// Set to -1 if you have not connected that pin
#define SDCARDDETECT 49
#define SDSS 53
#undef SDSUPPORT
#define SDSUPPORT 1
#define SDCARDDETECTINVERTED 0
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 1
#define UI_DISPLAY_TYPE DISPLAY_I2C
#define UI_DISPLAY_CHARSET 1
#define UI_COLS 20
#define UI_ROWS 4
#define UI_DISPLAY_I2C_CHIPTYPE 1
#define UI_DISPLAY_I2C_ADDRESS 0x40
#define UI_DISPLAY_I2C_OUTPUT_PINS 0xFFE0
#define UI_DISPLAY_I2C_OUTPUT_START_MASK 0x01C0 // bits that are high always, for now the 3 viki leds
#define UI_DISPLAY_I2C_PULLUP 0x001F
#define UI_I2C_CLOCKSPEED 100000L // Note with very long cables make this much smaller, for 2ft cables I found 80000 worked ok
#define UI_DISPLAY_RS_PIN _BV(15)
#define UI_DISPLAY_RW_PIN _BV(14)
#define UI_DISPLAY_ENABLE_PIN _BV(13)
#define UI_DISPLAY_D0_PIN _BV(12)
#define UI_DISPLAY_D1_PIN _BV(11)
#define UI_DISPLAY_D2_PIN _BV(10)
#define UI_DISPLAY_D3_PIN _BV(9)
#define UI_DISPLAY_D4_PIN _BV(12)
#define UI_DISPLAY_D5_PIN _BV(11)
#define UI_DISPLAY_D6_PIN _BV(10)
#define UI_DISPLAY_D7_PIN _BV(9)
#undef BEEPER_PIN
#define BEEPER_PIN _BV(5)
#define BEEPER_TYPE 2
#define BEEPER_ADDRESS UI_DISPLAY_I2C_ADDRESS // I2C address of the chip with the beeper pin
#define UI_I2C_HEATBED_LED _BV(8)
#define UI_I2C_HOTEND_LED _BV(7)
#define UI_I2C_FAN_LED _BV(6)
#define UI_INVERT_MENU_DIRECTION 0
#define UI_HAS_I2C_KEYS
#define UI_HAS_I2C_ENCODER 0
#define UI_I2C_KEY_ADDRESS 0x40
#ifdef UI_MAIN
void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B); // click encoder on real pins. Phase is connected with gnd for signals.
UI_KEYS_INIT_BUTTON_LOW(UI_RESET_PIN); // Kill pin
}
void uiCheckKeys(uint16_t &action) {
UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A, UI_ENCODER_B); // click encoder on real pins
UI_KEYS_BUTTON_LOW(UI_RESET_PIN, UI_ACTION_RESET);
}
inline void uiCheckSlowEncoder() { }// not used in Viki
void uiCheckSlowKeys(uint16_t &action) {
HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS + I2C_WRITE);
HAL::i2cWrite(0x12); // GPIOA
HAL::i2cStop();
HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS + I2C_READ);
unsigned int keymask = HAL::i2cReadAck();
keymask = keymask + (HAL::i2cReadNak() << 8);
HAL::i2cStop();
UI_KEYS_I2C_BUTTON_LOW(4, UI_ACTION_MENU_SDCARD); // Up button
UI_KEYS_I2C_BUTTON_LOW(8, UI_ACTION_MENU_QUICKSETTINGS); // down button
UI_KEYS_I2C_BUTTON_LOW(16, UI_ACTION_BACK); // left button
UI_KEYS_I2C_BUTTON_LOW(2, UI_ACTION_MENU_POSITIONS); // right button
UI_KEYS_I2C_BUTTON_LOW(1, UI_ACTION_OK); //Select button
}
#endif
#endif // Controller 5
#if FEATURE_CONTROLLER == CONTROLLER_MEGATRONIC
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 0
#define UI_DISPLAY_TYPE DISPLAY_4BIT
#define UI_DISPLAY_CHARSET 0
#define UI_COLS 20
#define UI_ROWS 2
#if MOTHERBOARD==701 // Megatronics v2.0
#define UI_DISPLAY_RS_PIN 14
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 15
#define UI_DISPLAY_D4_PIN 30
#define UI_DISPLAY_D5_PIN 31
#define UI_DISPLAY_D6_PIN 32
#define UI_DISPLAY_D7_PIN 33
#define UI_ENCODER_A 61
#define UI_ENCODER_B 59
#define UI_ENCODER_CLICK 43
#define UI_SHIFT_OUT 17
#define UI_SHIFT_LD 42
#define UI_SHIFT_CLK 63
#else // RAMPS 1.4
#define UI_DISPLAY_RS_PIN 16
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 17
#define UI_DISPLAY_D4_PIN 23
#define UI_DISPLAY_D5_PIN 25
#define UI_DISPLAY_D6_PIN 27
#define UI_DISPLAY_D7_PIN 29
#define UI_ENCODER_A 64
#define UI_ENCODER_B 59
#define UI_ENCODER_CLICK 63
#define UI_SHIFT_OUT 40
#define UI_SHIFT_LD 42
#define UI_SHIFT_CLK 44
#endif
#define UI_DELAYPERCHAR 50
#define UI_INVERT_MENU_DIRECTION 1
#ifdef UI_MAIN
void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B);
UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK);
SET_OUTPUT(UI_SHIFT_CLK);
SET_OUTPUT(UI_SHIFT_LD);
SET_INPUT(UI_SHIFT_OUT);
WRITE(UI_SHIFT_OUT, HIGH);
WRITE(UI_SHIFT_LD, HIGH);
}
void uiCheckKeys(uint16_t &action) {
UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A, UI_ENCODER_B);
UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK, UI_ACTION_OK);
}
inline void uiCheckSlowEncoder() {} // not used
void uiCheckSlowKeys(uint16_t &action) {
WRITE(UI_SHIFT_LD, LOW);
WRITE(UI_SHIFT_LD, HIGH);
for (int8_t i = 1; i <= 8; i++) {
if (!READ(UI_SHIFT_OUT)) { // pressed button = logical 0 (false)
switch (i) {
case 1: action = UI_ACTION_Z_DOWN; break; // F3
case 2: action = UI_ACTION_Z_UP; break; // F2
case 3: action = UI_ACTION_EMERGENCY_STOP; break; // F1
case 4: action = UI_ACTION_Y_UP; break; // UP
case 5: action = UI_ACTION_X_UP; break; // RIGHT
case 6: action = UI_ACTION_HOME_ALL; break; // MID
case 7: action = UI_ACTION_Y_DOWN; break; // DOWN
case 8: action = UI_ACTION_X_DOWN; break; // LEFT
}
i = 9; // if button detected, exit "for loop"
}
WRITE(UI_SHIFT_CLK, HIGH);
WRITE(UI_SHIFT_CLK, LOW);
}
}
#endif
#endif // Controller 6
#if FEATURE_CONTROLLER == CONTROLLER_RADDS
#undef SDSS
#define SDSS 10
#undef SPI_PIN
#define SPI_PIN 77
#undef SPI_CHAN
#define SPI_CHAN 0
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 1
#define UI_DISPLAY_TYPE DISPLAY_4BIT
#define UI_DISPLAY_CHARSET 1
#define BEEPER_TYPE 1
#define UI_COLS 20
#define UI_ROWS 4
#undef BEEPER_PIN
#define BEEPER_PIN 41
#define UI_DISPLAY_RS_PIN 42
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 43
#define UI_DISPLAY_D0_PIN 44
#define UI_DISPLAY_D1_PIN 45
#define UI_DISPLAY_D2_PIN 46
#define UI_DISPLAY_D3_PIN 47
#define UI_DISPLAY_D4_PIN 44
#define UI_DISPLAY_D5_PIN 45
#define UI_DISPLAY_D6_PIN 46
#define UI_DISPLAY_D7_PIN 47
#define UI_ENCODER_A 50
#define UI_ENCODER_B 52
#define UI_ENCODER_CLICK 48
#define UI_RESET_PIN -1
#define UI_DELAYPERCHAR 50
#define UI_INVERT_MENU_DIRECTION 0
#define UI_BUTTON_BACK 71
#ifdef UI_MAIN
void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); // push button, connects gnd to pin
UI_KEYS_INIT_BUTTON_LOW(UI_BUTTON_BACK);
}
void uiCheckKeys(uint16_t &action) {
UI_KEYS_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK, UI_ACTION_OK); // push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(UI_BUTTON_BACK, UI_ACTION_BACK);
}
inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {}
#endif
#endif // Controller 7
#if FEATURE_CONTROLLER == CONTROLLER_PIBOT20X4 || FEATURE_CONTROLLER == CONTROLLER_PIBOT16X2
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 1
#define UI_DISPLAY_TYPE DISPLAY_4BIT
#define UI_DISPLAY_CHARSET 1
#define UI_DELAYPERCHAR 50
#define UI_INVERT_MENU_DIRECTION 1
#define BEEPER_SHORT_SEQUENCE 6,2 // Needs longer beep sequence
#define BEEPER_LONG_SEQUENCE 24,8
#define BEEPER_TYPE 1
#define BEEPER_TYPE_INVERTING 0
#if FEATURE_CONTROLLER == CONTROLLER_PIBOT16X2
#define UI_COLS 16
#define UI_ROWS 2
#else ////20x04 Display
#define UI_COLS 20
#define UI_ROWS 4
#endif
#ifdef PiBot_V_1_4
#undef BEEPER_PIN
#define BEEPER_PIN 31
#define UI_DISPLAY_RS_PIN 45
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 44
#define UI_DISPLAY_D0_PIN 43
#define UI_DISPLAY_D1_PIN 42
#define UI_DISPLAY_D2_PIN 19
#define UI_DISPLAY_D3_PIN 18
#define UI_DISPLAY_D4_PIN 43
#define UI_DISPLAY_D5_PIN 42
#define UI_DISPLAY_D6_PIN 19
#define UI_DISPLAY_D7_PIN 18
#define UI_ENCODER_A 61
#define UI_ENCODER_B 62
#define UI_ENCODER_CLICK 63
#define UI_RESET_PIN 28
#define UI_DELAYPERCHAR 50
#define UI_BUTTON_OK 49
#define UI_BUTTON_NEXT 48
#define UI_BUTTON_PREVIOUS 47
#define UI_BUTTON_BACK 46
#define UI_BUTTON_SD_PRINT 29
#endif
#if PiBot_V_1_4==true || PiBot_V_1_6==true
#undef BEEPER_PIN
#define BEEPER_PIN 37
#define UI_DISPLAY_RS_PIN 16
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 17
#define UI_DISPLAY_D0_PIN 23
#define UI_DISPLAY_D1_PIN 25
#define UI_DISPLAY_D2_PIN 27
#define UI_DISPLAY_D3_PIN 29
#define UI_DISPLAY_D4_PIN 23
#define UI_DISPLAY_D5_PIN 25
#define UI_DISPLAY_D6_PIN 27
#define UI_DISPLAY_D7_PIN 29
#define UI_ENCODER_A 33
#define UI_ENCODER_B 31
#define UI_ENCODER_CLICK 35
#define UI_RESET_PIN 41
#define UI_DELAYPERCHAR 50
#define UI_BUTTON_OK 4
#define UI_BUTTON_NEXT 6
#define UI_BUTTON_PREVIOUS 5
#define UI_BUTTON_BACK 11
#define UI_BUTTON_SD_PRINT 42
#endif
#if PiBot_V_2_0
#undef BEEPER_PIN
#define BEEPER_PIN 16
#define UI_DISPLAY_RS_PIN 43
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 42
#define UI_DISPLAY_D0_PIN 19
#define UI_DISPLAY_D1_PIN 18
#define UI_DISPLAY_D2_PIN 38
#define UI_DISPLAY_D3_PIN 41
#define UI_DISPLAY_D4_PIN 19
#define UI_DISPLAY_D5_PIN 18
#define UI_DISPLAY_D6_PIN 38
#define UI_DISPLAY_D7_PIN 41
#define UI_ENCODER_A 37
#define UI_ENCODER_B 36
// Vick BTN
#define UI_ENCODER_CLICK 69
// if you want, you can get the CNC Pin used 11
#define UI_RESET_PIN -1
#define UI_DELAYPERCHAR 320
#define UI_BUTTON_OK 47
#define UI_BUTTON_NEXT 46
#define UI_BUTTON_PREVIOUS 45
#define UI_BUTTON_BACK 44
// if you want, you can get the CNC Pin used 10
#define UI_BUTTON_SD_PRINT 70
#endif
#ifdef UI_MAIN
void uiInitKeys() {
UI_KEYS_INIT_BUTTON_LOW(UI_BUTTON_OK); // push button, connects gnd to pin
UI_KEYS_INIT_BUTTON_LOW(UI_BUTTON_NEXT);
UI_KEYS_INIT_BUTTON_LOW(UI_BUTTON_PREVIOUS);
UI_KEYS_INIT_BUTTON_LOW(UI_BUTTON_BACK);
UI_KEYS_INIT_BUTTON_LOW(UI_BUTTON_SD_PRINT);
}
void uiCheckKeys(uint16_t &action) {
UI_KEYS_BUTTON_LOW(UI_BUTTON_OK, UI_ACTION_OK); // push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(UI_BUTTON_NEXT, UI_ACTION_NEXT); // push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(UI_BUTTON_PREVIOUS, UI_ACTION_PREVIOUS); // push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(UI_BUTTON_BACK, UI_ACTION_BACK); // push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(UI_BUTTON_SD_PRINT, UI_ACTION_SD_PRINT ); // push button, connects gnd to pin
}
inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {}
#endif
#endif
#if FEATURE_CONTROLLER == CONTROLLER_FELIX
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 0
#define UI_DISPLAY_TYPE DISPLAY_4BIT
#define UI_DISPLAY_CHARSET 1
#define UI_COLS 20
#define UI_ROWS 4
#define UI_ENCODER_SPEED 2
#undef BEEPER_TYPE
#define BEEPER_TYPE 0
#undef BEEPER_PIN
#define BEEPER_PIN -1
#define UI_DISPLAY_RS_PIN 16
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 17
#define UI_DISPLAY_D0_PIN -1
#define UI_DISPLAY_D1_PIN -1
#define UI_DISPLAY_D2_PIN -1
#define UI_DISPLAY_D3_PIN -1
#define UI_DISPLAY_D4_PIN 23
#define UI_DISPLAY_D5_PIN 25
#define UI_DISPLAY_D6_PIN 27
#define UI_DISPLAY_D7_PIN 29
#define UI_ENCODER_A 35
#define UI_ENCODER_B 37
#define UI_ENCODER_CLICK 31
#define UI_DELAYPERCHAR 50
#define UI_INVERT_MENU_DIRECTION 0
#ifdef UI_MAIN
void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); // push button, connects gnd to pin
}
void uiCheckKeys(uint16_t &action) {
UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK, UI_ACTION_OK); // push button, connects gnd to pin
}
inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {}
#endif
#endif // Controller 12
#if FEATURE_CONTROLLER == CONTROLLER_RAMBO // SeeMeCNC LCD + Rambo
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 0
#define UI_DISPLAY_TYPE DISPLAY_4BIT
#define UI_DISPLAY_CHARSET 1
#define UI_COLS 20
#define UI_ROWS 4
#define BEEPER_TYPE 1
#undef BEEPER_PIN
#define BEEPER_PIN 79
#define UI_DISPLAY_RS_PIN 70
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 71
#define UI_DISPLAY_D0_PIN -1
#define UI_DISPLAY_D1_PIN -1
#define UI_DISPLAY_D2_PIN -1
#define UI_DISPLAY_D3_PIN -1
#define UI_DISPLAY_D4_PIN 72
#define UI_DISPLAY_D5_PIN 73
#define UI_DISPLAY_D6_PIN 74
#define UI_DISPLAY_D7_PIN 75
#define UI_ENCODER_A 76
#define UI_ENCODER_B 77
#define UI_ENCODER_CLICK 78
#define UI_KILL_PIN 80
#define UI_DELAYPERCHAR 50
#define UI_INVERT_MENU_DIRECTION 0
#ifdef UI_MAIN
void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B);
UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK);
UI_KEYS_INIT_BUTTON_LOW(UI_KILL_PIN);
}
void uiCheckKeys(uint16_t &action) {
UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A, UI_ENCODER_B);
UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK, UI_ACTION_OK);
UI_KEYS_BUTTON_LOW(UI_KILL_PIN, UI_ACTION_KILL);
}
inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {}
#endif
#endif // Controller 13
#if FEATURE_CONTROLLER == CONTROLLER_OPENHARDWARE_LCD2004
#undef SDSUPPORT
#define SDSUPPORT 1
#define SDCARDDETECT -1
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 1
#define UI_DISPLAY_TYPE DISPLAY_I2C
#define UI_DISPLAY_CHARSET 1
#define UI_COLS 20
#define UI_ROWS 4
#define UI_DISPLAY_I2C_CHIPTYPE 1
#define UI_DISPLAY_I2C_ADDRESS 0x40
#define UI_DISPLAY_I2C_OUTPUT_PINS 65504
#define UI_DISPLAY_I2C_OUTPUT_START_MASK 0
#define UI_DISPLAY_I2C_PULLUP 31
#define UI_I2C_CLOCKSPEED 400000L
#define UI_DISPLAY_RS_PIN _BV(15)
#define UI_DISPLAY_RW_PIN _BV(14)
#define UI_DISPLAY_ENABLE_PIN _BV(13)
#define UI_DISPLAY_D0_PIN _BV(12)
#define UI_DISPLAY_D1_PIN _BV(11)
#define UI_DISPLAY_D2_PIN _BV(10)
#define UI_DISPLAY_D3_PIN _BV(9)
#define UI_DISPLAY_D4_PIN _BV(12)
#define UI_DISPLAY_D5_PIN _BV(11)
#define UI_DISPLAY_D6_PIN _BV(10)
#define UI_DISPLAY_D7_PIN _BV(9)
#define UI_INVERT_MENU_DIRECTION false
#define UI_HAS_I2C_KEYS
#define UI_HAS_I2C_ENCODER 0
#define UI_I2C_KEY_ADDRESS 0x40
#ifdef UI_MAIN
void uiInitKeys() {}
void uiCheckKeys(uint16_t &action) {}
inline void uiCheckSlowEncoder() {
HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS + I2C_WRITE);
HAL::i2cWrite(0x12); // GIOA
HAL::i2cStop();
HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS + I2C_READ);
uint16_t keymask = HAL::i2cReadAck();
keymask = keymask + (HAL::i2cReadNak() << 8);
HAL::i2cStop();
}
void uiCheckSlowKeys(uint16_t &action) {
HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS + I2C_WRITE);
HAL::i2cWrite(0x12); // GPIOA
HAL::i2cStop();
HAL::i2cStartWait(UI_DISPLAY_I2C_ADDRESS + I2C_READ);
uint16_t keymask = HAL::i2cReadAck();
keymask = keymask + (HAL::i2cReadNak() << 8);
HAL::i2cStop();
UI_KEYS_I2C_BUTTON_LOW(_BV(4), UI_ACTION_OK); // push button, connects gnd to pin
UI_KEYS_I2C_BUTTON_LOW(_BV(1), UI_ACTION_BACK); // push button, connects gnd to pin
UI_KEYS_I2C_BUTTON_LOW(_BV(0), UI_ACTION_SD_PRINT); // push button, connects gnd to pin
UI_KEYS_I2C_BUTTON_LOW(_BV(3), UI_ACTION_PREVIOUS); // Up button
UI_KEYS_I2C_BUTTON_LOW(_BV(2), UI_ACTION_NEXT); // down button
}
#endif
#endif // Controller 14
/*
Sanguinololu + panelolu2
*/
#if FEATURE_CONTROLLER == CONTROLLER_SANGUINOLOLU_PANELOLU2
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 0
#define UI_DISPLAY_TYPE DISPLAY_I2C
#define UI_DISPLAY_CHARSET 2
#define UI_COLS 20
#define UI_ROWS 4
#define UI_INVERT_MENU_DIRECTION 0
#define UI_DISPLAY_I2C_CHIPTYPE 1
#define UI_DISPLAY_I2C_ADDRESS 0x40
#define UI_DISPLAY_I2C_OUTPUT_PINS 65528
#define UI_DISPLAY_I2C_OUTPUT_START_MASK 0
#define UI_DISPLAY_I2C_PULLUP 23
#define UI_I2C_CLOCKSPEED 100000L
//#define UI_HAS_I2C_KEYS
//#define UI_HAS_I2C_ENCODER 0
//#define UI_I2C_KEY_ADDRESS UI_DISPLAY_I2C_ADDRESS
#define BEEPER_TYPE 2
#define BEEPER_TYPE_INVERTING 1
#define BEEPER_ADDRESS UI_DISPLAY_I2C_ADDRESS
#define COMPILE_I2C_DRIVER
#define UI_DISPLAY_RS_PIN _BV(15)
#define UI_DISPLAY_RW_PIN _BV(14)
#define UI_DISPLAY_ENABLE_PIN _BV(13)
#define UI_DISPLAY_D0_PIN _BV(12)
#define UI_DISPLAY_D1_PIN _BV(11)
#define UI_DISPLAY_D2_PIN _BV(10)
#define UI_DISPLAY_D3_PIN _BV(9)
#define UI_DISPLAY_D4_PIN _BV(12)
#define UI_DISPLAY_D5_PIN _BV(11)
#define UI_DISPLAY_D6_PIN _BV(10)
#define UI_DISPLAY_D7_PIN _BV(9)
#undef BEEPER_PIN
#define BEEPER_PIN _BV(5)
#define UI_I2C_HEATBED_LED _BV(8)
#define UI_I2C_HOTEND_LED _BV(7)
#define UI_I2C_FAN_LED _BV(6)
#ifdef UI_MAIN
void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(10, 11); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_INIT_BUTTON_LOW(30); // push button, connects gnd to pin
}
void uiCheckKeys(uint16_t &action) {
UI_KEYS_CLICKENCODER_LOW_REV(10, 11); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_BUTTON_LOW(30, UI_ACTION_OK); // push button, connects gnd to pin
}
inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {}
#endif // UI_MAIN
#endif // Controller 15
#if FEATURE_CONTROLLER == CONTROLLER_GAMEDUINO2
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 0
#define UI_DISPLAY_TYPE DISPLAY_GAMEDUINO2
#define UI_DISPLAY_CHARSET 0
#define UI_COLS 30
#define UI_ROWS 4
#define UI_INVERT_MENU_DIRECTION 0
#define BEEPER_TYPE 0
#define BEEPER_TYPE_INVERTING 0
#define UI_DISPLAY_CS 49 // Pin for SPI select on gameduino 2 - depends on board and choice
#endif // Controller 16
#if FEATURE_CONTROLLER == CONTROLLER_MIREGLI // Miregli
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 1
#define UI_DISPLAY_CHARSET 1
#define UI_COLS 20
#define UI_ROWS 4
#define UI_KILL_PIN 76
#define UI_ENCODER_A 80
#define UI_ENCODER_B 73
#define UI_ENCODER_CLICK 63
#define UI_DELAYPERCHAR 50
#define MIREGLI
#define SDCARDDETECT -1 //53
#define BEEPER 78
#define LCD_CONTRAST 62
#define UI_DISPLAY_TYPE 14
#define LCD_PIN_BL 15
#define DOGLCD_A0 38
#define DOGLCD_CS 14
#define UI_LCD_WIDTH 128
#define UI_LCD_HEIGHT 64
#define U8GLIB_ST7920
#define UI_INVERT_MENU_DIRECTION false
//select font size
#define UI_FONT_6X10 //default font
#ifdef UI_FONT_6X10
#define UI_FONT_WIDTH 6
#define UI_FONT_HEIGHT 10
#define UI_FONT_SMALL_HEIGHT 7
#define UI_FONT_DEFAULT repetier_6x10
#define UI_FONT_SMALL repetier_5x7
#define UI_FONT_SMALL_WIDTH 5 //smaller font for status display
#endif
#ifdef UI_MAIN
void ui_init_keys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B);
UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK);
UI_KEYS_INIT_BUTTON_LOW(UI_KILL_PIN);
}
void ui_check_keys(int &action) {
UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A, UI_ENCODER_B);
UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK, UI_ACTION_OK);
UI_KEYS_BUTTON_LOW(UI_KILL_PIN, UI_ACTION_KILL);
}
inline void ui_check_slow_encoder() {}
void ui_check_slow_keys(int &action) {}
#endif
#endif // Controller 17
#if FEATURE_CONTROLLER == CONTROLLER_GATE_3NOVATICA
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 0
#define UI_DISPLAY_TYPE DISPLAY_4BIT
#define UI_DISPLAY_CHARSET 1
#define UI_COLS 20
#define UI_ROWS 4
#define BEEPER_TYPE 1
#undef BEEPER_PIN
#define BEEPER_PIN -1
#define UI_DISPLAY_RS_PIN 1
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 3
#define UI_DISPLAY_D0_PIN -1
#define UI_DISPLAY_D1_PIN -1
#define UI_DISPLAY_D2_PIN -1
#define UI_DISPLAY_D3_PIN -1
#define UI_DISPLAY_D4_PIN 0
#define UI_DISPLAY_D5_PIN 2
#define UI_DISPLAY_D6_PIN 4
#define UI_DISPLAY_D7_PIN 6
#define UI_ENCODER_A 5
#define UI_ENCODER_B 7
#define UI_ENCODER_CLICK 39
#define UI_KILL_PIN -1
#define UI_DELAYPERCHAR 320 // bylo 50
#define UI_INVERT_MENU_DIRECTION 1 // bylo 0
#define USER_KEY1_PIN 36
#define USER_KEY1_ACTION UI_ACTION_LIGHTS_ONOFF
#define USER_KEY2_PIN 40
#define USER_KEY2_ACTION UI_ACTION_PREHEAT_ALL
#define USER_KEY3_PIN 41
#define USER_KEY3_ACTION UI_ACTION_WIZARD_FILAMENTCHANGE
#define USER_KEY4_PIN -1
#define USER_KEY4_ACTION UI_ACTION_DUMMY
#ifdef UI_MAIN
void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B);
UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK);
}
void uiCheckKeys(uint16_t &action) {
UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_A, UI_ENCODER_B);
UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK, UI_ACTION_OK);
}
inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {}
#endif
#endif // CONTROLLER_GATE_3NOVATICA
#if FEATURE_CONTROLLER == CONTROLLER_SPARKLCD || FEATURE_CONTROLLER == CONTROLLER_SPARKLCD_ADAPTER
#if MOTHERBOARD != 402 && MOTHERBOARD != 412
#error This config only works with RADDS motherboard!
#endif
#define UI_DISPLAY_CHARSET 3
#define UI_DISPLAY_TYPE 5
#define U8GLIB_ST7920 // Currently only this display from u8g lib is included.
#define UI_LCD_WIDTH 128
#define UI_LCD_HEIGHT 64
//select font size
#define UI_FONT_6X10 //default font
#define UI_FONT_WIDTH 6
#define UI_FONT_HEIGHT 10
#define UI_FONT_SMALL_HEIGHT 7
#define UI_FONT_DEFAULT repetier_6x10
#define UI_FONT_SMALL repetier_5x7
#define UI_FONT_SMALL_WIDTH 5 //smaller font for status display
#define UI_DELAYPERCHAR 50
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 0
#define UI_INVERT_MENU_DIRECTION 0
#define UI_HAS_I2C_ENCODER 0
#undef UI_ENCODER_SPEED
#define UI_ENCODER_SPEED 2
//calculate rows and cols available with current font
#define UI_COLS (UI_LCD_WIDTH/UI_FONT_SMALL_WIDTH)
#define UI_ROWS (UI_LCD_HEIGHT/UI_FONT_HEIGHT)
#define UI_DISPLAY_D0_PIN -1
#define UI_DISPLAY_D1_PIN -1
#define UI_DISPLAY_D2_PIN -1
#define UI_DISPLAY_D3_PIN -1
#define UI_DISPLAY_D5_PIN -1
#define UI_DISPLAY_D6_PIN -1
#define UI_DISPLAY_D7_PIN -1
#if FEATURE_CONTROLLER == CONTROLLER_SPARKLCD
#if MOTHERBOARD == 412 // STACKER 3d Superboard
// PINK.1, 88, D_RS
#define UI_DISPLAY_RS_PIN 29 // 29
#define UI_DISPLAY_RW_PIN -1
// PINK.3, 86, D_E
#define UI_DISPLAY_ENABLE_PIN 27 //25
// PINF.5, 92, D_D4
// PINF.5, 92, D_D4
#define UI_DISPLAY_D4_PIN 25 // 27
#define UI_ENCODER_A 33
#define UI_ENCODER_B 35
#define UI_ENCODER_CLICK 37
#else // MOTHERBOARD == 412
// PINK.1, 88, D_RS
#define UI_DISPLAY_RS_PIN 25
#define UI_DISPLAY_RW_PIN -1
// PINK.3, 86, D_E
#define UI_DISPLAY_ENABLE_PIN 27
// PINF.5, 92, D_D4
// PINF.5, 92, D_D4
#define UI_DISPLAY_D4_PIN 29
#define UI_ENCODER_A 35
#define UI_ENCODER_B 33
#define UI_ENCODER_CLICK 37
#endif
#else // FEATURE_CONTROLLER == CONTROLLER_SPARKLCD
// PINK.1, 88, D_RS
#define UI_DISPLAY_RS_PIN 44
#define UI_DISPLAY_RW_PIN -1
// PINK.3, 86, D_E
#define UI_DISPLAY_ENABLE_PIN 45
#define UI_DISPLAY_D4_PIN 46
#define UI_ENCODER_A 50
#define UI_ENCODER_B 52
#define UI_ENCODER_CLICK 48
#endif
#ifdef UI_MAIN
void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); // push button, connects gnd to pin;
}
void uiCheckKeys(uint16_t &action) {
UI_KEYS_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK, UI_ACTION_OK); // push button, connects gnd to pin
}
inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {}
#endif
#endif // CONTROLLER_sparkLCD
#if FEATURE_CONTROLLER == CONTROLLER_ORCABOTXXLPRO2
#if MOTHERBOARD != 402
#error This config only works with RADDS motherboard!
#endif
#define UI_DISPLAY_CHARSET 3
#define UI_DISPLAY_TYPE 5
#define U8GLIB_ST7920 // Currently only this display from u8g lib is included.
#define UI_LCD_WIDTH 128
#define UI_LCD_HEIGHT 64
//select font size
#define UI_FONT_6X10 //default font
#define UI_FONT_WIDTH 6
#define UI_FONT_HEIGHT 10
#define UI_FONT_SMALL_HEIGHT 7
#define UI_FONT_DEFAULT repetier_6x10
#define UI_FONT_SMALL repetier_5x7
#define UI_FONT_SMALL_WIDTH 5 //smaller font for status display
#undef UI_ANIMATION
#define UI_ANIMATION 0 // Animations are too slow
#define UI_DELAYPERCHAR 50
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 0
#define UI_INVERT_MENU_DIRECTION 0
#define UI_HAS_I2C_ENCODER 0
#define UI_ENCODER_SPEED 1
//SD Card
#undef SDSS
#define SDSS 10
#undef SPI_PIN
#define SPI_PIN 77
#undef SPI_CHAN
#define SPI_CHAN 0
//calculate rows and cols available with current font
#define UI_COLS (UI_LCD_WIDTH/UI_FONT_SMALL_WIDTH)
#define UI_ROWS (UI_LCD_HEIGHT/UI_FONT_HEIGHT)
#define UI_DISPLAY_D0_PIN -1
#define UI_DISPLAY_D1_PIN -1
#define UI_DISPLAY_D2_PIN -1
#define UI_DISPLAY_D3_PIN -1
#define UI_DISPLAY_D5_PIN -1
#define UI_DISPLAY_D6_PIN -1
#define UI_DISPLAY_D7_PIN -1
#define UI_DISPLAY_RS_PIN 44
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 45
#define UI_DISPLAY_D4_PIN 46
#define UI_ENCODER_A 50
#define UI_ENCODER_B 52
#define UI_ENCODER_CLICK 48
#ifdef UI_MAIN
void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); // push button, connects gnd to pin;
}
void uiCheckKeys(uint16_t &action) {
UI_KEYS_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK, UI_ACTION_OK); // push button, connects gnd to pin
}
inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {}
#endif
#endif // CONTROLLER_ORCABOTXXLPRO2
#if FEATURE_CONTROLLER == CONTROLLER_VIKI2
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 0
#define UI_DISPLAY_TYPE DISPLAY_U8G
//#define U8GLIB_ST7920
#define U8GLIB_ST7565_NHD_C2832_HW_SPI
#define UI_LCD_WIDTH 128
#define UI_LCD_HEIGHT 64
//select font size
#define UI_FONT_6X10 //default font
#define UI_FONT_WIDTH 6
#define UI_FONT_HEIGHT 10
#define UI_FONT_SMALL_HEIGHT 7
#define UI_FONT_DEFAULT repetier_6x10
#define UI_FONT_SMALL repetier_5x7
#define UI_FONT_SMALL_WIDTH 5 //smaller font for status display
//calculate rows and cols available with current font
#define UI_COLS (UI_LCD_WIDTH/UI_FONT_SMALL_WIDTH)
#define UI_ROWS (UI_LCD_HEIGHT/UI_FONT_HEIGHT)
#define UI_DISPLAY_CHARSET 3
#define UI_INVERT_MENU_DIRECTION 0
#undef UI_ENCODER_SPEED
#define UI_ENCODER_SPEED 2
#define SDCARDDETECT -1
#define UI_DISPLAY_RW_PIN -1
#define UI_ROTATE_180
#define BEEPER_TYPE 1
// SCK Pin: UI_DISPLAY_D4_PIN
// Mosi Pin: UI_DISPLAY_ENABLE_PIN
// CD Pin: UI_DISPLAY_RS_PIN
#if MOTHERBOARD == 33 // RAMPS
#define SDCARDDETECT 49 // sd card detect as shown on drawing
#undef BEEPER_PIN
#define BEEPER_PIN 35
// Display A0
#define UI_DISPLAY_D5_PIN 47
// Display CS
#define UI_DISPLAY_RS_PIN 32
#define UI_ENCODER_A 45
#define UI_ENCODER_B 41
#define UI_ENCODER_CLICK 43
#define UI_RESET_PIN -1
#define RED_BLUE_STATUS_LEDS
#define RED_STATUS_LED 39
#define BLUE_STATUS_LED 37
#elif MOTHERBOARD == 34 // Azteeg X3
#define SDCARDDETECT 49 // sd card detect as shown on drawing
#undef BEEPER_PIN
#define BEEPER_PIN 33
// Display A0
#define UI_DISPLAY_D5_PIN 31
// Display CS
#define UI_DISPLAY_RS_PIN 32
#define UI_ENCODER_A 22
#define UI_ENCODER_B 7
#define UI_ENCODER_CLICK 12
#define UI_RESET_PIN -1
#define RED_BLUE_STATUS_LEDS
#define RED_STATUS_LED 64
#define BLUE_STATUS_LED 63
#elif MOTHERBOARD == 35 // Azteeg X3 Pro
#undef SDCARDDETECT
// sd card detect as shown on drawing
#define SDCARDDETECT 49
#undef BEEPER_PIN
// 33 is the on board beeper
#define BEEPER_PIN 47
// Display A0
#define UI_DISPLAY_D5_PIN 44
// Display CS
#define UI_DISPLAY_RS_PIN 45
#define UI_ENCODER_A 22
#define UI_ENCODER_B 7
#define UI_ENCODER_CLICK 39
#define UI_RESET_PIN -1
#define RED_BLUE_STATUS_LEDS
#define RED_STATUS_LED 32
#define BLUE_STATUS_LED 35
#elif MOTHERBOARD == 301 // RAMBO
#define SDCARDDETECT 72 // sd card detect as shown on drawing
#undef BEEPER_PIN
#define BEEPER_PIN 33
// Display A0
#define UI_DISPLAY_D5_PIN 70
// Display CS
#define UI_DISPLAY_RS_PIN 71
#define UI_ENCODER_A 85
#define UI_ENCODER_B 84
#define UI_ENCODER_CLICK 83
#define UI_RESET_PIN -1
#define RED_BLUE_STATUS_LEDS
#define RED_STATUS_LED 22
#define BLUE_STATUS_LED 32
#elif MOTHERBOARD == 9 || MOTHERBOARD == 92 // Printboard
// sd card detect as shown on drawing
#define SDCARDDETECT 72
#define SDSS 45
#undef BEEPER_PIN
#define BEEPER_PIN 32
// Display A0
#define UI_DISPLAY_D5_PIN 42
// Display CS
#define UI_DISPLAY_RS_PIN 43
#define UI_ENCODER_A 26
#define UI_ENCODER_B 27
#define UI_ENCODER_CLICK 47
#define UI_RESET_PIN -1
#define RED_BLUE_STATUS_LEDS
#define RED_STATUS_LED 12
#define BLUE_STATUS_LED 10
#elif MOTHERBOARD == 402 // RADDS
#undef SDCARDDETECT
#define SDCARDDETECT 14 // sd card detect as shown on drawing
//#undef SDSS
//#define SDSS 4
//#define SPI_PIN 87
//#define SPI_CHAN 1
/*#define SDSS 10
#undef SPI_PIN
#define SPI_PIN 77
#undef SPI_CHAN
#define SPI_CHAN 0
#undef SDSUPPORT
#define SDSUPPORT 0 // sd card does not work reliable due to spi sharing
*/
#undef BEEPER_PIN
#define BEEPER_PIN 41
// Hardware SPI creates artifacts on display, so we use software SPI
#undef U8GLIB_ST7565_NHD_C2832_HW_SPI
#define U8GLIB_ST7565_NHD_C2832_SW_SPI
// MOSI 43
#define UI_DISPLAY_ENABLE_PIN 31
//#define UI_DISPLAY_ENABLE_PIN 75
//76 // SCK pin
#define UI_DISPLAY_D4_PIN 33 //44
// Display A0 => LCD RS
#define UI_DISPLAY_D5_PIN 42
// Display CS => CS0 //4 //10
#define UI_DISPLAY_RS_PIN 35 //10
#define UI_ENCODER_A 50
#define UI_ENCODER_B 52
#define UI_ENCODER_CLICK 48
#define UI_RESET_PIN -1
#define RED_BLUE_STATUS_LEDS
// PWM2 Pin
#define RED_STATUS_LED 6
// PWM1 Pin
#define BLUE_STATUS_LED 5
#else
#error No predefined Viki 2 mapping for your board available
#endif
#ifdef UI_MAIN
void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); // push button, connects gnd to pin
#if UI_RESET_PIN > -1
UI_KEYS_INIT_BUTTON_LOW(UI_RESET_PIN); // Kill pin
#endif
}
void uiCheckKeys(uint16_t &action) {
UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_B, UI_ENCODER_A);
UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK, UI_ACTION_OK);
#if UI_RESET_PIN > -1
UI_KEYS_BUTTON_LOW(UI_RESET_PIN, UI_ACTION_RESET);
#endif
}
inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {}
#endif
#endif // Controller VIKI 2
#if FEATURE_CONTROLLER == CONTROLLER_AZSMZ_12864
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 0
#define UI_DISPLAY_TYPE DISPLAY_U8G
//#define U8GLIB_ST7920
//#define U8GLIB_ST7565_NHD_C2832_HW_SPI
#define UI_LCD_WIDTH 128
#define UI_LCD_HEIGHT 64
//select font size
#define UI_FONT_6X10 //default font
#define UI_FONT_WIDTH 6
#define UI_FONT_HEIGHT 10
#define UI_FONT_SMALL_HEIGHT 7
#define UI_FONT_DEFAULT repetier_6x10
#define UI_FONT_SMALL repetier_5x7
#define UI_FONT_SMALL_WIDTH 5 //smaller font for status display
#undef UI_ANIMATION
#define UI_ANIMATION 0 // Animations are too slow
//calculate rows and cols available with current font
#define UI_COLS (UI_LCD_WIDTH/UI_FONT_SMALL_WIDTH)
#define UI_ROWS (UI_LCD_HEIGHT/UI_FONT_HEIGHT)
#define UI_DISPLAY_CHARSET 3
#define UI_INVERT_MENU_DIRECTION 0
#undef UI_ENCODER_SPEED
#define UI_ENCODER_SPEED 2
//#define SDCARDDETECT -1
//#define UI_DISPLAY_RW_PIN -1
#define UI_ROTATE_180
#define BEEPER_TYPE 1
// SCK Pin: UI_DISPLAY_D4_PIN
// Mosi Pin: UI_DISPLAY_ENABLE_PIN
// CD Pin: UI_DISPLAY_RS_PIN
#if MOTHERBOARD == 408 || MOTHERBOARD == 413 // SMART RAMPS
#undef SDCARDDETECT
#define SDCARDDETECT 49 // sd card detect as shown on drawing
#undef BEEPER_PIN
#define BEEPER_PIN 66
// Hardware SPI creates artifacts on display, so we use software SPI
#undef U8GLIB_ST7565_NHD_C2832_HW_SPI
#define U8GLIB_ST7565_NHD_C2832_SW_SPI
#define LCD_CONTRAST 62
// MOSI 43
#define UI_DISPLAY_ENABLE_PIN 51
//76 // SCK pin
#define UI_DISPLAY_D4_PIN 52 //44
// Display A0 => LCD RS
#define UI_DISPLAY_D5_PIN 59
// Display CS => CS0 //4 //10
#define UI_DISPLAY_RS_PIN 44 //10
#define UI_ENCODER_A 58
#define UI_ENCODER_B 40
#define UI_ENCODER_CLICK 67
#define UI_RESET_PIN 42
#else
#error No predefined AZSMZ_12864 mapping for your board available
#endif
#ifdef UI_MAIN
void uiInitKeys() {
UI_KEYS_INIT_CLICKENCODER_LOW(UI_ENCODER_A, UI_ENCODER_B); // click encoder on pins 47 and 45. Phase is connected with gnd for signals.
UI_KEYS_INIT_BUTTON_LOW(UI_ENCODER_CLICK); // push button, connects gnd to pin
#if UI_RESET_PIN > -1
UI_KEYS_INIT_BUTTON_LOW(UI_RESET_PIN); // Kill pin
#endif
}
void uiCheckKeys(uint16_t &action) {
UI_KEYS_CLICKENCODER_LOW_REV(UI_ENCODER_B, UI_ENCODER_A);
UI_KEYS_BUTTON_LOW(UI_ENCODER_CLICK, UI_ACTION_OK);
#if UI_RESET_PIN > -1
UI_KEYS_BUTTON_LOW(UI_RESET_PIN, UI_ACTION_RESET);
#endif
}
inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {}
#endif
#endif // Controller AZSMZ_12864
#if FEATURE_CONTROLLER == CONTROLLER_LCD_MP_PHARAOH_DUE
#define UI_DISPLAY_TYPE 1
#define UI_COLS 20
#define UI_ROWS 4
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 0
#define UI_INVERT_MENU_DIRECTION 1
#define UI_DISPLAY_CHARSET 1
#define UI_DISPLAY_RS_PIN 42 // PINK.1, 88, D_RS
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 43 // PINK.3, 86, D_E
#define UI_DISPLAY_D0_PIN 44 // PINF.5, 92, D_D4
#define UI_DISPLAY_D1_PIN 45 // PINK.2, 87, D_D5
#define UI_DISPLAY_D2_PIN 46 // PINL.5, 40, D_D6
#define UI_DISPLAY_D3_PIN 47 // PINK.4, 85, D_D7
#define UI_DISPLAY_D4_PIN 44 // PINF.5, 92, D_D4
#define UI_DISPLAY_D5_PIN 45 // PINK.2, 87, D_D5
#define UI_DISPLAY_D6_PIN 46 // PINL.5, 40, D_D6
#define UI_DISPLAY_D7_PIN 47 // PINK.4, 85, D_D7
#define UI_DELAYPERCHAR 50
#ifdef UI_MAIN
void uiInitKeys() {
UI_KEYS_INIT_BUTTON_LOW(33); // push button, connects gnd to pin
UI_KEYS_INIT_BUTTON_LOW(31);
UI_KEYS_INIT_BUTTON_LOW(29);
UI_KEYS_INIT_BUTTON_LOW(37);
UI_KEYS_INIT_BUTTON_LOW(35);
UI_KEYS_INIT_BUTTON_LOW(X_MIN_PIN);
}
void uiCheckKeys(uint16_t &action) {
UI_KEYS_BUTTON_LOW(33, UI_ACTION_OK); //35 push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(35, UI_ACTION_PREVIOUS); //34 push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(31, UI_ACTION_NEXT); //43 push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(29, UI_ACTION_BACK); //44 push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(37, UI_ACTION_MENU_SDCARD ); //33 push button, connects gnd to pin
UI_KEYS_BUTTON_LOW(X_MIN_PIN, UI_ACTION_RESET /*UI_ACTION_PAUSE*/);
}
inline void uiCheckSlowEncoder() {}
void uiCheckSlowKeys(uint16_t &action) {}
#endif
#endif // CONTROLLER_LCD_MP_PHARAOH_DUE
#if FEATURE_CONTROLLER == CONTROLLER_ZONESTAR
// Keypad
#if !defined(ADC_KEYPAD_PIN) || (ADC_KEYPAD_PIN < 0)
#error CONTROLLER_ZONESTAR requres ADC_KEYPAD_PIN = 1 defined in Configuration.h
#endif
// This must be defined in the Configuration.h since used in ADC tables
//#define ADC_KEYPAD_PIN 1 // A1 (D30, analog numbering)
// Display
// Define UI_DISPLAY_TYPE = DISPLAY_SR with pins to override default settings
// that work for original Zonestar hardware.
// For instance:
// #define UI_DISPLAY_TYPE DISPLAY_SR
// #define UI_DISPLAY_DATA_PIN 29
// #define UI_DISPLAY_CLOCK_PIN 28
// #define UI_DISPLAY_ENABLE_PIN -1 // for 2-wire or pin number for 3-wire
#undef UI_DISPLAY_TYPE
#define UI_DISPLAY_TYPE DISPLAY_4BIT
#if MOTHERBOARD == 39 // ZRIB
#define BEEPER_TYPE 1
#define UI_DISPLAY_RS_PIN 16
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 17
#define UI_DISPLAY_D4_PIN 23
#define UI_DISPLAY_D5_PIN 25
#define UI_DISPLAY_D6_PIN 27
#define UI_DISPLAY_D7_PIN 29
#define UI_RESET_PIN 41
#elif MOTHERBOARD == 703 // MEGATRONICS 3
#define UI_DISPLAY_RS_PIN 32
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_ENABLE_PIN 31
#define UI_DISPLAY_D4_PIN 14
#define UI_DISPLAY_D5_PIN 30
#define UI_DISPLAY_D6_PIN 39
#define UI_DISPLAY_D7_PIN 15
#define BEEPER_TYPE 1
#elif MOTHERBOARD == 63 // Melzi
#define UI_DISPLAY_ENABLE_PIN 29
#define UI_DISPLAY_RS_PIN 28
#define UI_DISPLAY_RW_PIN -1
#define UI_DISPLAY_D4_PIN 10
#define UI_DISPLAY_D5_PIN 11
#define UI_DISPLAY_D6_PIN 16
#define UI_DISPLAY_D7_PIN 17
#else
#error Unknown display - board combination. Please add your pin mapping in DisplayList.h
#endif
#define UI_DISPLAY_CHARSET 1
#define UI_COLS 20
#define UI_ROWS 4
// UI
#define UI_HAS_KEYS 1
#define UI_HAS_BACK_KEY 1
#define UI_DELAYPERCHAR 50
#define UI_INVERT_MENU_DIRECTION 1
// Opportunity to override the Enter key via Configuration.h
// By default it duplicates the Right key, but could be set to
// anything else, e.g. UI_ACTION_TOP_MENU.
#ifndef ADC_KEYPAD_CENTER_ACTION
#define ADC_KEYPAD_CENTER_ACTION UI_ACTION_OK
#endif
#ifdef UI_MAIN
// Nothing to init since ADC is read in a loop if ADC_KEYPAD_PIN > -1
inline void uiInitKeys() {}
// Read and decode ADC keypad (fast reads)
void uiCheckKeys(uint16_t &action) {
struct {
uint16_t min;
uint16_t max;
uint16_t action;
} keys[] = {
{ 300, 500, UI_ACTION_BACK }, // Left
{ 570, 870, UI_ACTION_PREVIOUS }, // Up
{ 1150, 1450, ADC_KEYPAD_CENTER_ACTION }, // Center
{ 1900, 2200, UI_ACTION_OK }, // Right
{ 2670, 2870, UI_ACTION_NEXT } // Down
};
const uint8_t numOfKeys = sizeof(keys) / sizeof(keys[0]);
extern volatile uint16_t osAnalogInputValues[ANALOG_INPUTS];
uint16_t adc = osAnalogInputValues[KEYPAD_ANALOG_INDEX] >> (ANALOG_REDUCE_BITS);
if (adc < 4000) {
for (int8_t i = 0; i < numOfKeys; ++i) {
if ((adc > keys[i].min) && (adc < keys[i].max)) {
action = keys[i].action;
return;
}
}
}
}
// Read and decode ADC keypad (slow reads)
inline void uiCheckSlowKeys(uint16_t &action) {}
#endif // UI_MAIN
#endif // CONTROLLER_ZONESTAR
#ifndef UI_HAS_I2C_ENCODER
#define UI_HAS_I2C_ENCODER 0
#endif
#if FEATURE_CONTROLLER != NO_CONTROLLER
#if UI_ROWS==4
#if UI_COLS==16
#define UI_LINE_OFFSETS {0,0x40,0x10,0x50} // 4x16
#elif UI_COLS==20
//#define UI_LINE_OFFSETS {0,0x20,0x40,0x60} // 4x20 with KS0073
#define UI_LINE_OFFSETS {0,0x40,0x14,0x54} // 4x20 with HD44780
#else
#if UI_DISPLAY_TYPE!=DISPLAY_GAMEDUINO2
#error Unknown combination off rows/columns - define UI_LINE_OFFSETS manually.
#else
#define UI_LINE_OFFSETS {} // dummy never used
#endif
#endif
#else
#define UI_LINE_OFFSETS {0,0x40,0x10,0x50} // 2x16, 2x20, 2x24
#endif
#include "uilang.h"
#endif
#define UI_VERSION_STRING "Repetier " REPETIER_VERSION
#ifdef UI_HAS_I2C_KEYS
#define COMPILE_I2C_DRIVER
#endif
#if UI_DISPLAY_TYPE != NO_DISPLAY
#if UI_DISPLAY_TYPE == DISPLAY_I2C
#define COMPILE_I2C_DRIVER
#endif
#ifndef UI_TEMP_PRECISION
#if UI_COLS>16
#define UI_TEMP_PRECISION 1
#else
#define UI_TEMP_PRECISION 0
#endif
#endif
#define UI_INITIALIZE uid.initialize();
#define UI_FAST if((counterPeriodical & 3) == 3) {uid.fastAction();}
#define UI_MEDIUM uid.mediumAction();
#define UI_SLOW(allowMoves) uid.slowAction(allowMoves);
#define UI_STATUS(status) uid.setStatusP(PSTR(status));
#define UI_STATUS_F(status) uid.setStatusP(status);
#define UI_STATUS_UPD(status) {uid.setStatusP(PSTR(status));uid.refreshPage();}
#define UI_STATUS_UPD_F(status) {uid.setStatusP(status);uid.refreshPage();}
#define UI_STATUS_RAM(status) uid.setStatus(status);
#define UI_STATUS_UPD_RAM(status) {uid.setStatus(status);uid.refreshPage();}
#define UI_ERROR(status) uid.setStatusP(PSTR(status),true);
#define UI_ERROR_P(status) uid.setStatusP(status,true);
#define UI_ERROR_UPD(status) {uid.setStatusP(PSTR(status),true);uid.refreshPage();}
#define UI_ERROR_RAM(status) uid.setStatus(status,true);
#define UI_ERROR_UPD_RAM(status) {uid.setStatus(status,true);uid.refreshPage();}
//#define UI_ERROR(msg) {uid.errorMsg=(void*)PSTR(msg);pushMenu((void*)&ui_menu_error,true);}
#define UI_CLEAR_STATUS {uid.statusMsg[0]=0;}
#define UI_RESET_MENU {uid.menuLevel=0;uid.refreshPage();}
#define UI_MESSAGE(menu) {uid.showMessage(menu);}
#define UI_ACTION(ac) {uid.executeAction(ac,true);}
#else
#define UI_INITIALIZE {}
#define UI_FAST {}
#define UI_MEDIUM {}
#define UI_SLOW(allowMoves) {}
#define UI_STATUS(status) {}
#define UI_STATUS_F(status) {}
#define UI_STATUS_RAM(status) {}
#define UI_STATUS_UPD(status) {}
#define UI_STATUS_UPD_F(status) {}
#define UI_STATUS_UPD_RAM(status) {}
#define UI_CLEAR_STATUS {}
#define UI_ERROR(msg) {}
#define UI_ERROR_P(status) {}
#define UI_ERROR_UPD(status) {}
#define UI_ERROR_RAM(status) {}
#define UI_ERROR_UPD_RAM(status) {}
#define UI_RESET_MENU {}
#define UI_MESSAGE(menu) {}
#define UI_ACTION(ac)
#endif // Display
// Beeper methods
#if BEEPER_TYPE==0 || FEATURE_BEEPER == 0
#define BEEP_SHORT {}
#define BEEP_LONG {}
#else
#define BEEP_SHORT beep(BEEPER_SHORT_SEQUENCE);
#define BEEP_LONG beep(BEEPER_LONG_SEQUENCE);
#endif
extern void beep(uint8_t duration, uint8_t count);
#if (defined(USER_KEY1_PIN) && USER_KEY1_PIN > -1 && defined(USER_KEY1_ACTION)) || (defined(USER_KEY2_PIN) && USER_KEY2_PIN > -1 && defined(USER_KEY2_ACTION)) || (defined(USER_KEY3_PIN) && USER_KEY3_PIN > -1 && defined(USER_KEY3_ACTION)) || (defined(USER_KEY4_PIN) && USER_KEY4_PIN > -1 && defined(USER_KEY4_ACTION))
#define HAS_USER_KEYS
static void ui_check_Ukeys(uint16_t &action) {
#if defined(USER_KEY1_PIN) && USER_KEY1_PIN > -1 && defined(USER_KEY1_ACTION)
UI_KEYS_BUTTON_LOW(USER_KEY1_PIN, USER_KEY1_ACTION);
#endif
#if defined(USER_KEY2_PIN) && USER_KEY2_PIN > -1 && defined(USER_KEY2_ACTION)
UI_KEYS_BUTTON_LOW(USER_KEY2_PIN, USER_KEY2_ACTION);
#endif
#if defined(USER_KEY3_PIN) && USER_KEY3_PIN > -1 && defined(USER_KEY3_ACTION)
UI_KEYS_BUTTON_LOW(USER_KEY3_PIN, USER_KEY3_ACTION);
#endif
#if defined(USER_KEY4_PIN) && USER_KEY4_PIN > -1 && defined(USER_KEY4_ACTION)
UI_KEYS_BUTTON_LOW(USER_KEY4_PIN, USER_KEY4_ACTION);
#endif
}
#endif
#endif