ed720194d2
The <binary.h> header is not available in STM32 toolchain and is not used anywhere in ultralcd_common_HD44780.h. If it is used anywhere in HD44780 support for other platforms, it must be included in the corresponding .cpp file directly and put under appropriate conditional compilation directives for the platform requiring it. As I was unable to find such code, I consider the file unused and hence remove the inclusion.
199 lines
6.1 KiB
C
199 lines
6.1 KiB
C
/**
|
|
* Marlin 3D Printer Firmware
|
|
* Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
|
*
|
|
* Based on Sprinter and grbl.
|
|
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
|
|
*
|
|
* This program 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.
|
|
*
|
|
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
#ifndef ULTRALCD_COMMON_HD44780_H
|
|
#define ULTRALCD_COMMON_HD44780_H
|
|
|
|
/**
|
|
* Implementation of the LCD display routines for a Hitachi HD44780 display.
|
|
* These are the most common LCD character displays.
|
|
*/
|
|
|
|
#include "../inc/MarlinConfig.h"
|
|
|
|
#if LCD_HEIGHT > 3
|
|
#include "../libs/duration_t.h"
|
|
#endif
|
|
|
|
#if ENABLED(AUTO_BED_LEVELING_UBL)
|
|
#include "../feature/bedlevel/ubl/ubl.h"
|
|
|
|
#if ENABLED(ULTIPANEL)
|
|
#define ULTRA_X_PIXELS_PER_CHAR 5
|
|
#define ULTRA_Y_PIXELS_PER_CHAR 8
|
|
#define ULTRA_COLUMNS_FOR_MESH_MAP 7
|
|
#define ULTRA_ROWS_FOR_MESH_MAP 4
|
|
|
|
#define N_USER_CHARS 8
|
|
|
|
#define TOP_LEFT _BV(0)
|
|
#define TOP_RIGHT _BV(1)
|
|
#define LOWER_LEFT _BV(2)
|
|
#define LOWER_RIGHT _BV(3)
|
|
#endif
|
|
#endif
|
|
|
|
extern volatile uint8_t buttons; //an extended version of the last checked buttons in a bit array.
|
|
|
|
////////////////////////////////////
|
|
// Setup button and encode mappings for each panel (into 'buttons' variable
|
|
//
|
|
// This is just to map common functions (across different panels) onto the same
|
|
// macro name. The mapping is independent of whether the button is directly connected or
|
|
// via a shift/i2c register.
|
|
|
|
#if ENABLED(ULTIPANEL)
|
|
|
|
//
|
|
// Setup other button mappings of each panel
|
|
//
|
|
#if ENABLED(LCD_I2C_VIKI)
|
|
#define B_I2C_BTN_OFFSET 3 // (the first three bit positions reserved for EN_A, EN_B, EN_C)
|
|
|
|
// button and encoder bit positions within 'buttons'
|
|
#define B_LE (BUTTON_LEFT << B_I2C_BTN_OFFSET) // The remaining normalized buttons are all read via I2C
|
|
#define B_UP (BUTTON_UP << B_I2C_BTN_OFFSET)
|
|
#define B_MI (BUTTON_SELECT << B_I2C_BTN_OFFSET)
|
|
#define B_DW (BUTTON_DOWN << B_I2C_BTN_OFFSET)
|
|
#define B_RI (BUTTON_RIGHT << B_I2C_BTN_OFFSET)
|
|
|
|
#undef LCD_CLICKED
|
|
#if BUTTON_EXISTS(ENC)
|
|
// the pause/stop/restart button is connected to BTN_ENC when used
|
|
#define B_ST (EN_C) // Map the pause/stop/resume button into its normalized functional name
|
|
#define LCD_CLICKED (buttons & (B_MI|B_RI|B_ST)) // pause/stop button also acts as click until we implement proper pause/stop.
|
|
#else
|
|
#define LCD_CLICKED (buttons & (B_MI|B_RI))
|
|
#endif
|
|
|
|
// I2C buttons take too long to read inside an interrupt context and so we read them during lcd_update
|
|
#define LCD_HAS_SLOW_BUTTONS
|
|
|
|
#elif ENABLED(LCD_I2C_PANELOLU2)
|
|
|
|
#if !BUTTON_EXISTS(ENC) // Use I2C if not directly connected to a pin
|
|
|
|
#define B_I2C_BTN_OFFSET 3 // (the first three bit positions reserved for EN_A, EN_B, EN_C)
|
|
|
|
#define B_MI (PANELOLU2_ENCODER_C << B_I2C_BTN_OFFSET) // requires LiquidTWI2 library v1.2.3 or later
|
|
|
|
#undef LCD_CLICKED
|
|
#define LCD_CLICKED (buttons & B_MI)
|
|
|
|
// I2C buttons take too long to read inside an interrupt context and so we read them during lcd_update
|
|
#define LCD_HAS_SLOW_BUTTONS
|
|
|
|
#endif
|
|
|
|
#elif DISABLED(NEWPANEL) // old style ULTIPANEL
|
|
// Shift register bits correspond to buttons:
|
|
#define BL_LE 7 // Left
|
|
#define BL_UP 6 // Up
|
|
#define BL_MI 5 // Middle
|
|
#define BL_DW 4 // Down
|
|
#define BL_RI 3 // Right
|
|
#define BL_ST 2 // Red Button
|
|
#define B_LE (_BV(BL_LE))
|
|
#define B_UP (_BV(BL_UP))
|
|
#define B_MI (_BV(BL_MI))
|
|
#define B_DW (_BV(BL_DW))
|
|
#define B_RI (_BV(BL_RI))
|
|
#define B_ST (_BV(BL_ST))
|
|
#define LCD_CLICKED (buttons & (B_MI|B_ST))
|
|
#endif
|
|
|
|
#endif // ULTIPANEL
|
|
|
|
////////////////////////////////////
|
|
// Create LCD class instance and chipset-specific information
|
|
#if ENABLED(LCD_I2C_TYPE_PCF8575)
|
|
// NOTE: These are register-mapped pins on the PCF8575 controller, not Arduino pins.
|
|
#define LCD_I2C_PIN_BL 3
|
|
#define LCD_I2C_PIN_EN 2
|
|
#define LCD_I2C_PIN_RW 1
|
|
#define LCD_I2C_PIN_RS 0
|
|
#define LCD_I2C_PIN_D4 4
|
|
#define LCD_I2C_PIN_D5 5
|
|
#define LCD_I2C_PIN_D6 6
|
|
#define LCD_I2C_PIN_D7 7
|
|
|
|
#include <Wire.h>
|
|
#include <LCD.h>
|
|
#include <LiquidCrystal_I2C.h>
|
|
#define LCD_CLASS LiquidCrystal_I2C
|
|
|
|
#elif ENABLED(LCD_I2C_TYPE_MCP23017)
|
|
// For the LED indicators (which may be mapped to different events in lcd_implementation_update_indicators())
|
|
#define LED_A 0x04 //100
|
|
#define LED_B 0x02 //010
|
|
#define LED_C 0x01 //001
|
|
|
|
#define LCD_HAS_STATUS_INDICATORS
|
|
|
|
#include <Wire.h>
|
|
#include <LiquidTWI2.h>
|
|
#define LCD_CLASS LiquidTWI2
|
|
|
|
#elif ENABLED(LCD_I2C_TYPE_MCP23008)
|
|
#include <Wire.h>
|
|
#include <LiquidTWI2.h>
|
|
#define LCD_CLASS LiquidTWI2
|
|
|
|
#elif ENABLED(LCD_I2C_TYPE_PCA8574)
|
|
#include <LiquidCrystal_I2C.h>
|
|
#define LCD_CLASS LiquidCrystal_I2C
|
|
|
|
// 2 wire Non-latching LCD SR from:
|
|
// https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/schematics#!shiftregister-connection
|
|
#elif ENABLED(SR_LCD_2W_NL)
|
|
extern "C" void __cxa_pure_virtual() { while (1); }
|
|
#include <LCD.h>
|
|
#include <LiquidCrystal_SR.h>
|
|
#define LCD_CLASS LiquidCrystal_SR
|
|
|
|
#elif ENABLED(LCM1602)
|
|
#include <Wire.h>
|
|
#include <LCD.h>
|
|
#include <LiquidCrystal_I2C.h>
|
|
#define LCD_CLASS LiquidCrystal_I2C
|
|
|
|
#else
|
|
// Standard directly connected LCD implementations
|
|
#include <LiquidCrystal.h>
|
|
#define LCD_CLASS LiquidCrystal
|
|
|
|
#endif
|
|
|
|
#include "fontutils.h"
|
|
#include "lcdprint.h"
|
|
|
|
#if ENABLED(LCD_PROGRESS_BAR)
|
|
#define LCD_STR_PROGRESS "\x03\x04\x05"
|
|
#endif
|
|
|
|
enum HD44780CharSet : char {
|
|
CHARSET_MENU,
|
|
CHARSET_INFO,
|
|
CHARSET_BOOT
|
|
};
|
|
|
|
#endif // ULTRALCD_COMMON_HD44780_H
|